{"version":3,"sources":["webpack:///main.bundle.js","webpack:///ng://ngx-toastr/toastr/toast.directive.ts","webpack:///ng://ngx-toastr/toastr/toastr-config.ts","webpack:///ng://ngx-toastr/portal/portal.ts","webpack:///ng://ngx-toastr/portal/dom-portal-host.ts","webpack:///ng://ngx-toastr/overlay/overlay-ref.ts","webpack:///ng://ngx-toastr/overlay/overlay-container.ts","webpack:///ng://ngx-toastr/overlay/overlay.ts","webpack:///ng://ngx-toastr/toastr/toast-injector.ts","webpack:///ng://ngx-toastr/toastr/toast-token.ts","webpack:///ng://ngx-toastr/toastr/toastr.service.ts","webpack:///ng://ngx-toastr/toastr/toast.component.ts","webpack:///ng://ngx-toastr/toastr/default-config.ts","webpack:///ng://ngx-toastr/toastr/toastr.module.ts","webpack:///ng://ngx-toastr/toastr/toast-noanimation.component.ts","webpack:///../node_modules/primeng/components/dom/domhandler.js","webpack:///../node_modules/primeng/primeng.js","webpack:///./app/services/group.service.js","webpack:///./app/pipes/index.js","webpack:///../node_modules/primeng/components/common/shared.js","webpack:///./app/services/http.service.js","webpack:///./app/services/project.service.js","webpack:///./app/services/task.service.js","webpack:///./app/services/users.service.js","webpack:///./app/services/product.service.js","webpack:///./app/services/note.service.js","webpack:///./app/services/sprint.service.js","webpack:///./app/services/directory.service.js","webpack:///./app/services/header.service.js","webpack:///./app/services/mail.service.js","webpack:///../node_modules/primeng/components/button/button.js","webpack:///../node_modules/primeng/components/utils/objectutils.js","webpack:///./app/services/type.service.js","webpack:///./app/services/login.service.js","webpack:///./app/services/dashboard.service.js","webpack:///./app/services/daily.service.js","webpack:///./app/services/roles.service.js","webpack:///./app/services/categories.service.js","webpack:///./app/services/externalrequest.service.js","webpack:///./app/services/events.service.js","webpack:///./app/services/units.service.js","webpack:///./app/components/task/task.component.js","webpack:///../node_modules/primeng/components/inputtext/inputtext.js","webpack:///../node_modules/primeng/components/paginator/paginator.js","webpack:///../node_modules/ng-recaptcha/recaptcha/recaptcha-loader.service.js","webpack:///./app/services/request.service.js","webpack:///./app/services/scheduler.service.js","webpack:///./app/components/project/project.component.js","webpack:///../node_modules/ng-recaptcha/recaptcha/recaptcha.component.js","webpack:///./app/services/todolist.service.js","webpack:///./app/services/parameter.service.js","webpack:///./app/services/log.service.js","webpack:///./app/services/cloud.service.js","webpack:///../node_modules/lodash/lodash.js","webpack:///../node_modules/primeng/components/common/treedragdropservice.js","webpack:///../node_modules/primeng/components/common/confirmationservice.js","webpack:///../node_modules/primeng/components/chips/chips.js","webpack:///../node_modules/primeng/components/dropdown/dropdown.js","webpack:///../node_modules/primeng/components/dragdrop/dragdrop.js","webpack:///../node_modules/primeng/components/messages/messages.js","webpack:///../node_modules/primeng/components/common/messageservice.js","webpack:///../node_modules/primeng/components/progressbar/progressbar.js","webpack:///../node_modules/primeng/components/inputmask/inputmask.js","webpack:///../node_modules/primeng/components/keyfilter/keyfilter.js","webpack:///../node_modules/primeng/components/password/password.js","webpack:///../node_modules/primeng/components/spinner/spinner.js","webpack:///../node_modules/primeng/components/tooltip/tooltip.js","webpack:///ts/src/dnd.utils.ts","webpack:///ts/src/dnd.service.ts","webpack:///ts/src/dnd.config.ts","webpack:///ts/src/abstract.component.ts","webpack:///ts/src/draggable.component.ts","webpack:///ts/src/droppable.component.ts","webpack:///ts/src/sortable.component.ts","webpack:///ts/src/dnd.module.ts","webpack:///../node_modules/ng-recaptcha/recaptcha/recaptcha-settings.js","webpack:///../node_modules/ng-recaptcha/recaptcha/recaptcha-v3.service.js","webpack:///./app/services/notification.service.js","webpack:///./app/services/constant.service.js","webpack:///./app/services/app.service.js","webpack:///./app/services/whiteboard.service.js","webpack:///./app/components/login/login.component.js","webpack:///./app/components/dashboard/dashboard.component.js","webpack:///./app/components/taskboard/taskboard.component.js","webpack:///./app/components/task/tasklist.component.js","webpack:///./app/components/project/projectlist.component.js","webpack:///./app/components/mail/mailbox.component.js","webpack:///./app/components/directory/directory.component.js","webpack:///./app/components/daily/daily.component.js","webpack:///./app/components/directory/contact.component.js","webpack:///./app/components/sprint/sprint.component.js","webpack:///./app/components/sprint/sprints.component.js","webpack:///./app/components/scheduler/scheduler.component.js","webpack:///./app/components/scheduler/schedulerlist.component.js","webpack:///./app/components/events/eventslist.component.js","webpack:///./app/components/events/events.component.js","webpack:///./app/components/roles/roles.component.js","webpack:///./app/components/roles/rol.component.js","webpack:///./app/components/todolist/todolist.component.js","webpack:///./app/components/users/users.component.js","webpack:///./app/components/users/usershistory.component.js","webpack:///./app/components/parameter/parameterlist.component.js","webpack:///./app/components/parameter/parameters.component.js","webpack:///./app/components/categories/categories.component.js","webpack:///./app/components/units/units.component.js","webpack:///./app/components/notfound/notfound.component.js","webpack:///./app/components/notfound/notpermits.component.js","webpack:///./app/components/product/product.component.js","webpack:///./app/components/product/productlist.component.js","webpack:///./app/components/type/typelist.component.js","webpack:///./app/components/code/code.component.js","webpack:///./app/components/wiki/wiki.component.js","webpack:///./app/components/request/requests.component.js","webpack:///./app/components/approval/approvals.component.js","webpack:///./app/components/projectboard/projectboard.component.js","webpack:///./app/components/statics/static.component.js","webpack:///./app/components/dashboard/burndown.component.js","webpack:///./app/components/passwordrecovery/passwordrecovery.component.js","webpack:///./app/components/usersettings/usersettings.component.js","webpack:///./app/components/request/preferences.component.js","webpack:///./app/components/clientsettings/clientsettings.component.js","webpack:///./app/components/dailyboard/dailyboard.component.js","webpack:///./app/components/sprint/reports.component.js","webpack:///./app/components/userguide/guideburndown.component.js","webpack:///./app/components/userguide/guideprojectboard.component.js","webpack:///./app/components/userguide/userguidelogin.component.js","webpack:///./app/components/group/grouplist.component.js","webpack:///./app/components/sprint/mysprint.component.js","webpack:///./app/components/whiteboard/whiteboard.component.js","webpack:///./app/components/externalrequest/externalrequests.component.js","webpack:///./app/components/externaltask/externaltasklist.component.js","webpack:///./app/components/loglist/loglist.component.js","webpack:///./app/components/notifications/notifications.component.js","webpack:///./app/components/documents/documents.component.js","webpack:///./app/components/cloud/cloud.component.js","webpack:///./app/main.js","webpack:///./assets/public/plugins/Crypt/crypt.js","webpack:///./app/main.module.js","webpack:///../node_modules/@angular/platform-browser/esm5/animations.js","webpack:///../node_modules/@angular/animations/esm5/browser.js","webpack:///../packages/common/src/localization.ts","webpack:///../packages/common/src/directives/ng_class.ts","webpack:///../packages/common/src/pipes/intl.ts","webpack:///../packages/common/src/pipes/number_pipe.ts","webpack:///../packages/common/src/pipes/date_pipe.ts","webpack:///../node_modules/rxjs/src/util/isFunction.ts","webpack:///../node_modules/rxjs/src/util/isObject.ts","webpack:///../node_modules/rxjs/src/util/tryCatch.ts","webpack:///../node_modules/rxjs/src/Subscription.ts","webpack:///../node_modules/rxjs/src/util/toSubscriber.ts","webpack:///../packages/common/src/location/platform_location.ts","webpack:///../packages/common/src/location/location_strategy.ts","webpack:///../packages/common/src/location/location.ts","webpack:///../packages/common/src/location/hash_location_strategy.ts","webpack:///../packages/common/src/location/path_location_strategy.ts","webpack:///../packages/common/src/location/index.ts","webpack:///../packages/common/src/directives/ng_component_outlet.ts","webpack:///../packages/common/src/directives/ng_for_of.ts","webpack:///../packages/common/src/directives/ng_if.ts","webpack:///../packages/common/src/directives/ng_switch.ts","webpack:///../packages/common/src/directives/ng_plural.ts","webpack:///../packages/common/src/directives/ng_style.ts","webpack:///../packages/common/src/directives/ng_template_outlet.ts","webpack:///../packages/common/src/directives/index.ts","webpack:///../packages/common/src/pipes/async_pipe.ts","webpack:///../packages/common/src/pipes/case_conversion_pipes.ts","webpack:///../packages/common/src/pipes/i18n_plural_pipe.ts","webpack:///../packages/common/src/pipes/i18n_select_pipe.ts","webpack:///../packages/common/src/pipes/json_pipe.ts","webpack:///../packages/common/src/pipes/slice_pipe.ts","webpack:///../packages/common/src/pipes/index.ts","webpack:///../packages/common/src/common_module.ts","webpack:///../node_modules/rxjs/src/util/root.ts","webpack:///../node_modules/rxjs/src/util/isArray.ts","webpack:///../node_modules/rxjs/src/util/errorObject.ts","webpack:///../node_modules/rxjs/src/util/UnsubscriptionError.ts","webpack:///../node_modules/rxjs/src/Observer.ts","webpack:///../node_modules/rxjs/src/symbol/rxSubscriber.ts","webpack:///../node_modules/rxjs/src/Subscriber.ts","webpack:///../node_modules/rxjs/src/symbol/observable.ts","webpack:///../node_modules/rxjs/src/Observable.ts","webpack:///../node_modules/rxjs/src/util/ObjectUnsubscribedError.ts","webpack:///../node_modules/rxjs/src/SubjectSubscription.ts","webpack:///../node_modules/rxjs/src/Subject.ts","webpack:///../out-tsc/lib/src/drag-drop-directive.service.ts","webpack:///../out-tsc/lib/src/drag-directive.directive.ts","webpack:///../out-tsc/lib/src/drop-directive.directive.ts","webpack:///../out-tsc/lib/src/drag-drop-directive.module.ts","webpack:///../out-tsc/lib/src/service/country.service.ts","webpack:///../out-tsc/lib/src/service/locale.service.ts","webpack:///../out-tsc/lib/src/component/int-phone-prefix/int-phone-prefix.component.ts","webpack:///../out-tsc/lib/src/directive/only-number.directive.ts","webpack:///../out-tsc/lib/src/pipe/country.pipe.ts","webpack:///../out-tsc/lib/src/module.ts","webpack:///../out-tsc/lib/src/interface/country-locale.interface.ts","webpack:///../node_modules/primeng/components/common/api.js","webpack:///../node_modules/primeng/components/accordion/accordion.js","webpack:///../node_modules/primeng/components/autocomplete/autocomplete.js","webpack:///../node_modules/primeng/components/blockui/blockui.js","webpack:///../node_modules/primeng/components/breadcrumb/breadcrumb.js","webpack:///../node_modules/primeng/components/captcha/captcha.js","webpack:///../node_modules/primeng/components/calendar/calendar.js","webpack:///../node_modules/primeng/components/card/card.js","webpack:///../node_modules/primeng/components/carousel/carousel.js","webpack:///../node_modules/primeng/components/chart/chart.js","webpack:///../node_modules/primeng/components/checkbox/checkbox.js","webpack:///../node_modules/primeng/components/codehighlighter/codehighlighter.js","webpack:///../node_modules/primeng/components/colorpicker/colorpicker.js","webpack:///../node_modules/primeng/components/confirmdialog/confirmdialog.js","webpack:///../node_modules/primeng/components/contextmenu/contextmenu.js","webpack:///../node_modules/primeng/components/datagrid/datagrid.js","webpack:///../node_modules/primeng/components/datalist/datalist.js","webpack:///../node_modules/primeng/components/datascroller/datascroller.js","webpack:///../node_modules/primeng/components/datatable/datatable.js","webpack:///../node_modules/primeng/components/defer/defer.js","webpack:///../node_modules/primeng/components/dialog/dialog.js","webpack:///../node_modules/primeng/components/editor/editor.js","webpack:///../node_modules/quill/dist/quill.js","webpack:///../node_modules/node-libs-browser/node_modules/buffer/index.js","webpack:///../node_modules/base64-js/index.js","webpack:///../node_modules/ieee754/index.js","webpack:///../node_modules/isarray/index.js","webpack:///../node_modules/primeng/components/fieldset/fieldset.js","webpack:///../node_modules/primeng/components/fileupload/fileupload.js","webpack:///../node_modules/primeng/components/galleria/galleria.js","webpack:///../node_modules/primeng/components/gmap/gmap.js","webpack:///../node_modules/primeng/components/growl/growl.js","webpack:///../node_modules/primeng/components/inplace/inplace.js","webpack:///../node_modules/primeng/components/inputswitch/inputswitch.js","webpack:///../node_modules/primeng/components/inputtextarea/inputtextarea.js","webpack:///../node_modules/primeng/components/lightbox/lightbox.js","webpack:///../node_modules/primeng/components/listbox/listbox.js","webpack:///../node_modules/primeng/components/megamenu/megamenu.js","webpack:///../node_modules/primeng/components/menu/menu.js","webpack:///../node_modules/primeng/components/menubar/menubar.js","webpack:///../node_modules/primeng/components/message/message.js","webpack:///../node_modules/primeng/components/multiselect/multiselect.js","webpack:///../node_modules/primeng/components/orderlist/orderlist.js","webpack:///../node_modules/primeng/components/organizationchart/organizationchart.js","webpack:///../node_modules/primeng/components/overlaypanel/overlaypanel.js","webpack:///../node_modules/primeng/components/panel/panel.js","webpack:///../node_modules/primeng/components/panelmenu/panelmenu.js","webpack:///../node_modules/primeng/components/picklist/picklist.js","webpack:///../node_modules/primeng/components/progressspinner/progressspinner.js","webpack:///../node_modules/primeng/components/radiobutton/radiobutton.js","webpack:///../node_modules/primeng/components/rating/rating.js","webpack:///../node_modules/primeng/components/schedule/schedule.js","webpack:///../node_modules/primeng/components/scrollpanel/scrollpanel.js","webpack:///../node_modules/primeng/components/selectbutton/selectbutton.js","webpack:///../node_modules/primeng/components/slidemenu/slidemenu.js","webpack:///../node_modules/primeng/components/slider/slider.js","webpack:///../node_modules/primeng/components/sidebar/sidebar.js","webpack:///../node_modules/primeng/components/splitbutton/splitbutton.js","webpack:///../node_modules/primeng/components/steps/steps.js","webpack:///../node_modules/primeng/components/tabview/tabview.js","webpack:///../node_modules/primeng/components/tabmenu/tabmenu.js","webpack:///../node_modules/primeng/components/terminal/terminal.js","webpack:///../node_modules/primeng/components/terminal/terminalservice.js","webpack:///../node_modules/primeng/components/tieredmenu/tieredmenu.js","webpack:///../node_modules/primeng/components/togglebutton/togglebutton.js","webpack:///../node_modules/primeng/components/toolbar/toolbar.js","webpack:///../node_modules/primeng/components/tree/tree.js","webpack:///../node_modules/primeng/components/treetable/treetable.js","webpack:///../node_modules/primeng/components/tristatecheckbox/tristatecheckbox.js","webpack:///../node_modules/primeng/inputmask.js","webpack:///../node_modules/primeng/dragdrop.js","webpack:///../node_modules/primeng/spinner.js","webpack:///../node_modules/primeng/tooltip.js","webpack:///../node_modules/primeng/chips.js","webpack:///../node_modules/primeng/keyfilter.js","webpack:///../node_modules/primeng/password.js","webpack:///../node_modules/ng-recaptcha/index.js","webpack:///../node_modules/ng-recaptcha/recaptcha/recaptcha.module.js","webpack:///../node_modules/ng-recaptcha/recaptcha/recaptcha-common.module.js","webpack:///../node_modules/ng-recaptcha/recaptcha/recaptcha-v3.module.js","webpack:///./app/components/index.js","webpack:///./app/components/app/app.component.js","webpack:///./app/components/app/app.template.html","webpack:///./app/components/login/login.template.html","webpack:///./app/components/header/header.component.js","webpack:///./app/pipes/trim/trim.pipe.js","webpack:///./app/pipes/filter/filter.pipe.js","webpack:///./app/pipes/filter/filterfield.pipe.js","webpack:///./app/pipes/filter/filterdata.pipe.js","webpack:///./app/pipes/truncate/truncate.pipe.js","webpack:///./app/pipes/paginate/paginate.pipe.js","webpack:///./app/pipes/order/order.pipe.js","webpack:///./app/pipes/safehtml/safehtml.pipe.js","webpack:///./app/pipes/calculate/calculate.pipe.js","webpack:///./app/components/header/header.template.html","webpack:///./app/components/dashboard/dashboard.template.html","webpack:///./app/components/taskboard/taskboard.template.html","webpack:///./app/components/task/tasklist.template.html","webpack:///./app/components/task/task.template.html","webpack:///./app/components/taskview/taskview.component.js","webpack:///./app/components/taskview/taskview.template.html","webpack:///../node_modules/fullcalendar/dist/fullcalendar.js","webpack:///./app/components/project/projectlist.template.html","webpack:///./app/components/project/project.template.html","webpack:///./app/components/projectview/projectview.component.js","webpack:///./app/components/projectview/projectview.template.html","webpack:///./app/components/mail/mailbox.template.html","webpack:///../node_modules/node-libs-browser/node_modules/util/util.js","webpack:///../node_modules/process/browser.js","webpack:///../node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js","webpack:///../node_modules/node-libs-browser/node_modules/inherits/inherits_browser.js","webpack:///./app/components/directory/directory.template.html","webpack:///./app/components/daily/daily.template.html","webpack:///./app/components/directory/contact.template.html","webpack:///./app/components/sprint/sprint.template.html","webpack:///./app/components/sprint/sprints.template.html","webpack:///./app/components/scheduler/scheduler.template.html","webpack:///./app/components/scheduler/schedulerlist.template.html","webpack:///./app/components/events/eventslist.template.html","webpack:///./app/components/events/events.template.html","webpack:///./app/components/roles/roles.template.html","webpack:///./app/components/roles/rol.template.html","webpack:///./app/components/todolist/todolist.template.html","webpack:///./app/components/users/users.template.html","webpack:///./app/components/users/usershistory.template.html","webpack:///./app/components/parameter/parameterlist.template.html","webpack:///./app/components/parameter/parameters.template.html","webpack:///./app/components/categories/categories.template.html","webpack:///./app/components/units/units.template.html","webpack:///./app/components/notfound/notfound.template.html","webpack:///./app/components/notfound/notpermits.template.html","webpack:///./app/components/product/product.template.html","webpack:///./app/components/product/productlist.template.html","webpack:///./app/components/type/typelist.template.html","webpack:///./app/components/code/code.template.html","webpack:///./app/components/wiki/wiki.template.html","webpack:///./app/components/request/requests.template.html","webpack:///./app/components/approval/approvals.template.html","webpack:///./app/components/projectboard/projectboard.template.html","webpack:///./app/components/statics/static.template.html","webpack:///./app/components/dashboard/burndown.template.html","webpack:///./app/components/passwordrecovery/passwordrecovery.template.html","webpack:///./app/components/usersettings/usersettings.template.html","webpack:///./app/components/request/preferences.template.html","webpack:///./app/components/clientsettings/clientsettings.template.html","webpack:///./app/components/dailyboard/dailyboard.template.html","webpack:///./app/components/sprint/reports.template.html","webpack:///./app/components/userguide/guideburndown.template.html","webpack:///./app/components/userguide/guideprojectboard.template.html","webpack:///./app/components/userguide/userguidelogin.template.html","webpack:///./app/components/group/grouplist.template.html","webpack:///./app/components/sprint/mysprint.template.html","webpack:///./app/components/whiteboard/whiteboard.template.html","webpack:///./app/components/externalrequest/externalrequests.template.html","webpack:///./app/components/externaltask/externaltasklist.template.html","webpack:///./app/components/loglist/loglist.template.html","webpack:///./app/components/notifications/notifications.template.html","webpack:///./app/components/documents/documents.template.html","webpack:///./app/components/cloud/cloud.template.html","webpack:///./app/routes.js"],"names":["webpackJsonp","module","__webpack_exports__","__webpack_require__","Object","defineProperty","value","d","ToastContainerDirective","ToastContainerModule","Toast","ToastrService","ToastPackage","DefaultGlobalConfig","ToastrModule","ToastRef","ToastInjector","TOAST_CONFIG","ToastNoAnimation","ToastNoAnimationModule","ComponentPortal","BasePortalHost","Overlay","OVERLAY_PROVIDERS","OverlayContainer","OverlayRef","__WEBPACK_IMPORTED_MODULE_0__angular_core__","__WEBPACK_IMPORTED_MODULE_1_rxjs__","__WEBPACK_IMPORTED_MODULE_2_tslib__","n","__WEBPACK_IMPORTED_MODULE_3__angular_platform_browser__","__WEBPACK_IMPORTED_MODULE_4__angular_animations__","__WEBPACK_IMPORTED_MODULE_5__angular_common__","el","getContainerElement","this","nativeElement","decorators","type","selector","exportAs","ctorParameters","declarations","exports","toastId","config","message","title","toastType","toastRef","_onTap","_onAction","afterClosed","subscribe","complete","triggerTap","next","tapToDismiss","onTap","asObservable","triggerAction","action","onAction","component","injector","attach","host","newestOnTop","_attachedHost","detach","undefined","get","enumerable","configurable","setAttachedHost","portal","_attachedPortal","attachComponentPortal","_disposeFn","setDisposeFn","fn","_hostDomElement","_componentFactoryResolver","_appRef","_this","tslib_1.__extends","componentRef","componentFactory","resolveComponentFactory","create","attachView","hostView","detachView","destroy","insertBefore","_getComponentRootNode","firstChild","appendChild","rootNodes","DomPortalHost","_portalHost","_containerElement","_createContainer","container","document","createElement","classList","add","body","_overlayContainer","_paneElements","Map","positionClass","overlayContainer","_createOverlayRef","getPaneElement","set","_createPaneElement","pane","id","_createPortalHost","_overlayRef","_afterClosed","_activate","_manualClose","_resetTimeout","manualClose","manualClosed","timeoutReset","close","isInactive","isStopped","activate","afterActivate","resetTimeout","_toastPackage","_parentInjector","token","notFoundValue","overlay","_injector","sanitizer","ngZone","currentlyActive","toasts","index","defaultConfig","defaults","toastrConfig","iconClasses","show","override","_preBuildNotification","applyConfig","success","error","info","warning","clear","e_1","_a","tslib_1.__values","toast","e_1_1","_c","done","_b","return","call","remove","found","_findToast","activeToast","splice","maxOpened","length","p","isDuplicate","resetOnDuplicate","i","componentInstance","onActivateTick","run","_buildNotification","toastComponent","Error","preventDuplicates","resetTimeoutOnDuplicate","previousToastMessage","keepInactive","autoDismiss","overlayRef","sanitizedMessage","enableHtml","sanitize","HTML","toastPackage","toastInjector","_component","ins","onShown","onHidden","setTimeout","push","toastrService","width","toastClasses","state","params","easeTime","easing","options","originalTimeout","timeOut","toastClass","sub","activateToast","sub1","sub2","ngOnDestroy","unsubscribe","clearInterval","intervalId","clearTimeout","timeout","disableTimeOut","outsideTimeout","hideTime","Date","getTime","progressBar","outsideInterval","updateProgress","now","remaining","progressAnimation","tapToast","stickAround","delayedHideToast","extendedTimeOut","func","runOutsideAngular","runInsideAngular","setInterval","template","animations","display","opacity","preserveWhitespaces","propDecorators","closeButton","titleClass","messageClass","parentModule","forRoot","ngModule","providers","provide","useValue","imports","entryComponents","appRef","tick","displayStyle","__decorate","target","key","desc","c","arguments","r","getOwnPropertyDescriptor","Reflect","decorate","core_1","DomHandler","calculatedScrollbarWidth","prototype","addClass","element","className","addMultipleClasses","styles","split","removeClass","replace","RegExp","join","hasClass","contains","test","siblings","Array","filter","parentNode","children","child","find","querySelectorAll","findSingle","querySelector","childNodes","num","nodeType","indexWithinGroup","attributeName","attributes","relativePosition","top","left","elementDimensions","offsetParent","offsetWidth","height","offsetHeight","getHiddenElementDimensions","targetHeight","targetWidth","targetOffset","getBoundingClientRect","viewport","getWindowScrollTop","getViewport","style","absolutePosition","elementOuterHeight","elementOuterWidth","targetOuterHeight","targetOuterWidth","windowScrollTop","windowScrollLeft","getWindowScrollLeft","getHiddenElementOuterHeight","visibility","elementHeight","getHiddenElementOuterWidth","elementWidth","dimensions","scrollInView","item","borderTopValue","getComputedStyle","getPropertyValue","borderTop","parseFloat","paddingTopValue","paddingTop","containerRect","itemRect","offset","scrollTop","scroll","clientHeight","itemHeight","getOuterHeight","fadeIn","duration","last","window","requestAnimationFrame","fadeOut","ms","gap","fading","doc","documentElement","pageYOffset","clientTop","pageXOffset","scrollLeft","clientLeft","matches","Element","webkitMatchesSelector","msMatchesSelector","s","indexOf","getOuterWidth","margin","marginLeft","marginRight","getHorizontalPadding","paddingLeft","paddingRight","getHorizontalMargin","innerWidth","getInnerHeight","paddingBottom","marginTop","marginBottom","getHeight","borderTopWidth","borderBottomWidth","getWidth","borderLeftWidth","borderRightWidth","win","e","g","getElementsByTagName","clientWidth","innerHeight","getOffset","rect","replaceElementWith","replacementElement","replaceChild","getUserAgent","navigator","userAgent","isIE","ua","isElement","removeChild","obj","HTMLElement","nodeName","calculateScrollbarWidth","scrollDiv","scrollbarWidth","invokeElementMethod","methodName","args","apply","clearSelection","getSelection","empty","removeAllRanges","rangeCount","getRangeAt","getClientRects","getBrowser","browser","matched","resolveUserAgent","version","toLowerCase","match","exec","zindex","Injectable","__export","m","hasOwnProperty","_classCallCheck","instance","Constructor","TypeError","GroupService","_dec","_class","_createClass","defineProperties","props","descriptor","writable","protoProps","staticProps","http","_http","localStorage","getItem","post","map","res","group","id_group","user_id","id_user","grop_id","users","defineMetadata","HttpService","_trim","_filter","_filterfield","_filterdata","_truncate","_paginate","_order","_safehtml","_calculate","__metadata","k","v","metadata","common_1","core_2","Header","Component","Footer","PrimeTemplate","getType","name","Input","String","Directive","TemplateRef","Column","filterType","exportable","resizable","sortFunction","EventEmitter","ngAfterContentInit","templates","forEach","headerTemplate","bodyTemplate","footerTemplate","filterTemplate","editorTemplate","Boolean","Number","Output","ContentChildren","QueryList","ContentChild","Row","HeaderColumnGroup","FooterColumnGroup","SharedModule","NgModule","CommonModule","route","toastr","_route","inJSON","inTestJSON","inFormData","parentKey","form_data","FormData","testJSON","constructedKey","constructor","jsonToFormData","isArray","append","postData","withCredentials","headers","Headers","formData","rs","data","json","navigate","catch","logError","tmd","tac","tomodule","toaction","files","getElementById","bind","Http","Router","ProjectService","project","postWithFile","attachments","proj_id","pjml_id","tkid","att_id","status","para_status","TaskService","task_id","retk_description","imtk_description","task","result","not_type","taskid","catid","tag_id","fld","fields","JSON","stringify","task_child_id","UsersService","httpService","bd_name","dbname","noGroup","no_group","preferences","email","grhi_id","ProductService","idprod","prod_id","product","NoteService","note","ntid","SprintService","spri_id","id_sprint","tasks","spri","date_init","date_end","DirectoryService","cont_id","idusuario","HeaderService","cat","id_notification","id_catnotification","MailService","search","msgid","idmail","idflag","emailid","flag","idfolder","folder","connection","msgno","usem_id","domhandler_1","ButtonDirective","domHandler","iconPos","cornerStyleClass","ngAfterViewInit","getStyleClass","icon","iconElement","setAttribute","iconPosClass","labelElement","createTextNode","label","initialized","styleClass","_label","val","textContent","_icon","hasChildNodes","lastChild","ElementRef","Button","onClick","onFocus","onBlur","ButtonModule","ObjectUtils","equals","obj1","obj2","field","resolveFieldData","equalsByValue","visited","toString","_$visited","len","filterValue","filteredItems","_i","value_1","fields_1","reorderArray","from","to","generateSelectItems","selectItems","val_1","insertIntoOrderedArray","arr","sourceArr","injected","findIndexInList","list","TypeService","type_id","LoginService","_user","user_name","user_lastname","urlimg","removeItem","log","response","captchaforever","usuario","encryp","user","pwd","text","pubkey","encrypt","JSEncrypt","setPublicKey","code","authcode","pw","DashboardService","sprint_id","DailyService","idusr","day","daily","dail_id","RolesService","role","roleid","moduleId","idmodule","permit","modules","role_NameNew","role_description","role_id","parent_id","modu_id","CategoriesService","cateid","cate_id","clas","ExternalRequestService","database","idProduct","id_product","pjid","client","EventsService","mt","meet_id","id_mail","UnitsService","unit_id","unit","$","TaskComponent","_taskTemplate2","__esModule","default","_taskTemplate","arouter","taskService","noteService","userService","productService","sprintService","mailService","_title","_tasks","preventOpenDuplicates","_aroute","_notes","_sanitizer","_products","_projects","_sprint","_mail","subtask","mail","mails","isrequest","searchMail","listmails","listmailsa","crmusers","contacts","modalnotereply","tagMenuDupliTk","tagMenu","myProjects","mysprints","notereply","category","myTask","usersShared","criteriaTask","isLoading","reload","getProducts","products","prod_name","userslbl","getCRMUsers","getEmailList","getmyProjects","idcolor","planning","proj_subject","buildup","implementation","getMySpri","spri_description","spri_init","spri_end","usersShareWith","usersShareWith_a","getAttachments","setTitle","idtask","getTask","getTimeline","getDailyTimeline","getCommentsUsers","detail","active","detail_daily","event","srcElement","displaybtn","animate","right","css","toggle","task_description","sanitizeHtml","enableBtn","task_description2","task_delivery","getFullYear","getMonth","getDate","users_share","assign","criteria_task","fields_empty","tkcr_description","trim","tkcr_num","putTask","modal","note_text","putNote","id_note","note_data","note_parent","closedt","loadmail","mymails","x","emails","correo","content","sendMessage","escapeHtml","getTaskFields","form","activeTabDescription_editTask","idtk","tooltip","confirm","header","accept","setStatusTask","seltasks","reject","decode64","bypassSecurityTrustHtml","changingThisBreaksApplicationSecurity","input","chr1","chr2","enc1","enc2","enc3","keyStr","output","chr3","enc4","charAt","fromCharCode","unescape","escape","charCodeAt","isNaN","temporal","innerHTML","innerText","task_description_d","activeTabDescription_duplicateTask","opt","task_subject","user_asigned","task_points","campos","form_id","duplicateTask","j","valor","att","deleteAttachmentTask","taat_id","getFormTaskCriteria","query","filterShared","countries","filtered","country","completename","Title","DomSanitizer","ActivatedRoute","__param","paramIndex","decorator","forms_1","InputText","ngModel","ngDoCheck","updateFilledState","onInput","filled","model","HostListener","Function","Optional","NgModel","InputTextModule","dropdown_1","shared_1","Paginator","pageLinkSize","onPageChange","alwaysShow","_totalRecords","_first","_rows","ngOnInit","updatePaginatorState","updatePageLinks","_rowsPerPageOptions","rowsPerPageItems","isFirstPage","getPage","isLastPage","getPageCount","Math","ceil","totalRecords","rows","calculatePageLinkBoundaries","numberOfPages","visiblePages","min","start","max","end","delta","pageLinks","boundaries","changePage","pc","first","page","pageCount","emit","floor","changePageToFirst","preventDefault","changePageToPrev","changePageToNext","changePageToLast","onPageLinkClick","onRppChange","paginatorState","PaginatorModule","DropdownModule","FormsModule","loadScript","renderMode","onLoaded","urlParams","url","nonce","ng2recaptchaloaded","grecaptcha","script","baseUrl","src","async","defer","head","rxjs_1","RECAPTCHA_LANGUAGE","InjectionToken","RECAPTCHA_BASE_URL","RECAPTCHA_NONCE","RecaptchaLoaderService","platformId","language","init","ready","isPlatformBrowser","of","subject_1","BehaviorSubject","langParam","Inject","PLATFORM_ID","RequestService","rule","ruleid","SchedulerService","id_scheduler","sch","id_statusscheduler","ProjectComponent","_projectTemplate2","_projectTemplate","ConfirmationService","usersService","confirmationService","eventsService","groupService","_events","_groups","myproj","userssh","taskpj","taskpj_description","currentpage","mdT","minDate","maxDate","statustasks","limitpage","commentsusers","milestone","usershared","invalid_dates","meeting","plmt","diasmileston","diasmiles","milestones","milestone_show","selmiles","taskattch","applicantlbl","getMeetingPlaces","para_name","para_id","usersCRM","usersCRMa","groups","lblgroups","getGroups","grop_name","stTitle","idproject","getproject","proj_description","proj_start","proj_end","y","round","proj_percentage","tasklist","task_percentage","points","datedelivery","subject","task_pointsd","task_date","asigned","creator","itemcount","lastpage","countpag","parseInt","getmilestone","getMilestone","di","meet_date","setDate","mymilestone","meet_datex","user_owner","pjml_description","para_place","meet_text","lpad","getHours","getMinutes","getSeconds","usarr","putMilestone","mlt","deleteMilestone","z","getComments","getTimelinetk","file","posattch","putAttachments","cur","rx","group_assigned","user_applicant","proj_propoints","putproject","setStatusproject","mytk","click","proj","deleteAttachmentProject","pjat_id","projid","total_attachments","recaptcha_loader_service_1","recaptcha_settings_1","nextId","RecaptchaComponent","elementRef","loader","zone","settings","resolved","siteKey","theme","size","badge","subscription","render","renderRecaptcha","grecaptchaReset","execute","widget","executeRequested","reset","getResponse","expired","captchaResponseCallback","callback","sitekey","tabindex","tabIndex","NgZone","RECAPTCHA_SETTINGS","HostBinding","TodolistService","item_id","new_level","ParameterService","clas_id","param","class_id","clasid","calsid","paraid","LogService","CloudService","id_type","id_document","clou_name","thisArg","arrayAggregator","array","setter","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","values","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiToArray","string","asciiWords","reAsciiWord","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","NAN","baseProperty","object","basePropertyOf","baseReduce","baseSortBy","comparer","sort","current","baseTimes","baseToPairs","baseUnary","baseValues","cacheHas","cache","has","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","escapeStringChar","chr","stringEscapes","getValue","hasUnicode","reHasUnicode","hasUnicodeWord","reHasUnicodeWord","iteratorToArray","iterator","mapToArray","overArg","transform","arg","replaceHolders","PLACEHOLDER","setToArray","setToPairs","strictLastIndexOf","stringSize","unicodeSize","asciiSize","stringToArray","unicodeToArray","reUnicode","lastIndex","unicodeWords","reUnicodeWord","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","source","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsBreak","rsCombo","rsLower","rsMisc","rsFitz","rsRegional","rsSurrPair","rsUpper","rsMiscLower","reOptMod","rsModifier","rsOptJoin","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","rsMiscUpper","contextProps","templateCounter","typedArrayTags","cloneableTags","deburredLetters","htmlEscapes","htmlUnescapes","freeParseFloat","freeParseInt","freeGlobal","global","freeSelf","self","root","freeExports","freeModule","moduleExports","freeProcess","process","nodeUtil","types","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","deburrLetter","escapeHtmlChar","unescapeHtmlChar","_","runInContext","context","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","lazyClone","copyArray","lazyReverse","clone","lazyValue","dir","isArr","isRight","arrLength","view","getView","iteratees","iterLength","takeCount","nativeMin","baseWrapperValue","outer","iterIndex","computed","Hash","entries","entry","hashClear","__data__","nativeCreate","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","pop","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","arrayLikeKeys","inherited","isArg","isArguments","isBuff","isBuffer","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","baseAggregator","baseEach","baseAssign","copyObject","keys","baseAssignIn","keysIn","baseAt","paths","skip","number","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","isObject","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","copySymbols","initCloneByTag","stacked","subValue","keysFunc","getAllKeysIn","getAllKeys","baseConforms","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","valuesIndex","baseEvery","baseExtremum","isSymbol","baseFill","toInteger","toLength","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseForOwn","baseFor","baseForOwnRight","baseForRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","symbolsFunc","baseGetTag","symToStringTag","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseInRange","nativeMax","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInverter","baseInvoke","parent","baseIsArguments","baseIsArrayBuffer","baseIsDate","baseIsEqual","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsMap","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","isMasked","reIsNative","toSource","baseIsRegExp","baseIsSet","baseIsTypedArray","isLength","baseIteratee","identity","baseMatchesProperty","baseMatches","property","baseKeys","isPrototype","nativeKeys","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","baseMergeDeep","newValue","safeGet","mergeFunc","isTyped","isArrayLikeObject","cloneTypedArray","isPlainObject","toPlainObject","baseNth","baseOrderBy","orders","getIteratee","compareMultiple","basePick","basePickBy","baseSet","basePropertyDeep","basePullAll","basePullAt","indexes","previous","baseUnset","nativeFloor","nativeRandom","baseRange","step","nativeCeil","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","symbolToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","actions","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castSlice","buffer","slice","allocUnsafe","copy","cloneArrayBuffer","arrayBuffer","byteLength","Uint8Array","cloneDataView","dataView","byteOffset","cloneRegExp","regexp","cloneSymbol","symbol","symbolValueOf","typedArray","compareAscending","valIsDefined","valIsReflexive","objCriteria","criteria","othCriteria","ordersLength","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","getSymbols","getSymbolsIn","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","createBaseEach","iterable","createBaseFor","createBind","wrapper","Ctor","isBind","createCtor","createCaseFirst","trailing","createCompounder","words","deburr","thisBinding","baseCreate","createCurry","arity","getHolder","createRecurry","createHybrid","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","reverse","getFuncName","funcName","getData","isLaziable","plant","partialsRight","holdersRight","argPos","ary","holdersCount","newHolders","isBindKey","reorder","isFlip","isAry","createInverter","toIteratee","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createPartial","createRange","toFinite","createRelationalOperation","toNumber","wrapFunc","isCurry","newHoldersRight","newPartials","newPartialsRight","newData","setData","setWrapToString","createRound","precision","nativeIsFinite","pair","createToPairs","createWrap","mergeData","baseSetData","customDefaultsAssignIn","objectProto","customDefaultsMerge","customOmitClone","isPartial","arrValue","othValue","compared","convert","objProps","objLength","skipCtor","objCtor","othCtor","flatten","realNames","otherFunc","isKeyable","getNative","isOwn","unmasked","nativeObjectToString","transforms","getWrapDetails","hasPath","hasFunc","getPrototype","insertWrapDetails","details","spreadableSymbol","maskSrcKey","srcBitmask","newBitmask","isCombo","otherArgs","oldArray","reference","updateWrapDetails","shortOut","count","lastCalled","stamp","nativeNow","rand","funcToString","chunk","compact","concat","drop","dropRight","dropRightWhile","dropWhile","fill","findIndex","findLastIndex","flattenDeep","flattenDepth","fromPairs","initial","separator","nativeJoin","lastIndexOf","nth","pullAll","pullAllBy","pullAllWith","nativeReverse","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","sortedUniq","sortedUniqBy","tail","take","takeRight","takeRightWhile","takeWhile","uniq","uniqBy","uniqWith","unzip","unzipWith","zipObject","zipObjectDeep","chain","tap","interceptor","wrapperChain","wrapperCommit","wrapperNext","toArray","wrapperToIterator","wrapperPlant","wrapperReverse","wrapped","wrapperValue","every","flatMap","flatMapDeep","flatMapDepth","forEachRight","baseEachRight","isString","orderBy","reduce","reduceRight","negate","sample","sampleSize","shuffle","some","after","before","curry","curryRight","debounce","invokeFunc","time","lastArgs","lastThis","lastInvokeTime","leadingEdge","timerId","timerExpired","leading","remainingWait","timeSinceLastCall","lastCallTime","timeSinceLastInvoke","timeWaiting","maxing","maxWait","shouldInvoke","trailingEdge","cancel","flush","debounced","isInvoking","flip","memoize","resolver","memoized","Cache","once","rest","spread","throttle","unary","wrap","partial","castArray","cloneWith","cloneDeep","cloneDeepWith","conformsTo","isBoolean","isEmpty","isEqual","isEqualWith","isError","isFinite","isInteger","isMatch","isMatchWith","isNumber","isNative","isMaskable","isNull","isNil","proto","objectCtorString","isSafeInteger","isUndefined","isWeakMap","isWeakSet","symIterator","remainder","valueOf","isBinary","toSafeInteger","properties","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","functions","functionsIn","mapKeys","mapValues","omitBy","pickBy","prop","setWith","isArrLike","unset","update","updateWith","valuesIn","clamp","inRange","random","floating","temp","capitalize","upperFirst","endsWith","position","escapeRegExp","pad","strLength","padEnd","padStart","radix","nativeParseInt","repeat","limit","startsWith","templateSettings","assignInWith","isEscaping","isEvaluating","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","attempt","toLower","toUpper","toUpperCase","trimEnd","trimStart","truncate","omission","substring","newEnd","pattern","cond","conforms","constant","defaultTo","matchesProperty","mixin","methodNames","noConflict","oldDash","noop","nthArg","propertyOf","stubArray","stubFalse","stubObject","stubString","stubTrue","times","toPath","uniqueId","prefix","idCounter","maxBy","mean","meanBy","minBy","sum","sumBy","pick","arrayProto","funcProto","coreJsData","uid","IE_PROTO","Buffer","Symbol","getPrototypeOf","objectCreate","propertyIsEnumerable","isConcatSpreadable","toStringTag","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","DataView","Promise","Set","WeakMap","metaMap","dataViewCtorString","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","baseSetToString","castRest","ArrayBuffer","resolve","ctorString","quote","subString","difference","differenceBy","differenceWith","intersection","mapped","intersectionBy","intersectionWith","pull","pullAt","union","unionBy","unionWith","without","xor","xorBy","xorWith","zip","zipWith","wrapperAt","countBy","findLast","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","delay","overArgs","funcsLength","partialRight","rearg","gt","gte","lt","lte","assignIn","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","toPairs","toPairsIn","camelCase","word","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","bindAll","flow","flowRight","method","methodOf","over","overEvery","overSome","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","subtract","minuend","subtrahend","entriesIn","extend","extendWith","each","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","commit","toJSON","Subject_1","TreeDragDropService","dragStartSource","Subject","dragStopSource","dragStart$","dragStop$","startDrag","stopDrag","requireConfirmationSource","acceptConfirmationSource","requireConfirmation$","confirmation","onAccept","inputtext_1","CHIPS_VALUE_ACCESSOR","NG_VALUE_ACCESSOR","useExisting","forwardRef","Chips","multi","onAdd","onRemove","allowDuplicate","onModelChange","onModelTouched","itemTemplate","inputViewChild","focus","writeValue","updateMaxedOut","registerOnChange","registerOnTouched","setDisabledState","disabled","onInputFocus","onInputBlur","addOnBlur","addItem","removedItem","originalEvent","onKeydown","which","addOnTab","ViewChild","ChipsModule","animations_1","objectutils_1","DROPDOWN_VALUE_ACCESSOR","Dropdown","renderer","cd","objectUtils","scrollHeight","autoWidth","filterBy","lazy","resetFilterOnHide","dropdownIcon","autoDisplayFirst","emptyFilterMessage","onChange","panelVisible","selectedItemTemplate","groupTemplate","optionsToDisplay","updateSelectedOption","_options","opts","optionLabel","optionsChanged","activateFilter","containerViewChild","panel","panelViewChild","itemsWrapper","itemsWrapperViewChild","editable","updateEditableLabel","updateDimensions","appendTo","selectedOption","editableInputViewChild","onItemClick","option","itemClick","selectItem","focusViewChild","hide","ngAfterViewChecked","shown","onShow","alignPanel","selectedOptionUpdated","resetFilter","markForCheck","filterViewChild","findOption","select","onMouseclick","readonly","selfClick","clearClick","onEditableInputClick","bindDocumentClickListener","onEditableInputFocus","focused","onEditableInputChange","selectedListItem","minWidth","zIndex","altKey","selectedItemIndex","findOptionGroupIndex","nextItemIndex","itemIndex","groupIndex","items","findOptionIndex","prevItemIndex","prevGroup","dataKey","inGroup","opts_1","optgroup","onFilter","inputValue","searchFields","filteredGroups","filteredSubOptions","applyFocus","documentClickListener","listen","unbindDocumentClickListener","trigger","transition","Renderer2","ChangeDetectorRef","Draggable","onDragStart","onDragEnd","onDrag","bindMouseListeners","bindDragListener","dragListener","drag","addEventListener","unbindDragListener","removeEventListener","mouseDownListener","mouseUpListener","mousedown","mouseup","unbindMouseListeners","dragStart","allowDrag","dragEffect","dataTransfer","effectAllowed","scope","dragEnd","handle","dragHandle","Droppable","onDragEnter","onDragLeave","onDrop","bindDragOverListener","dragOverListener","dragOver","unbindDragOverListener","allowDrop","dragEnter","dropEffect","dragLeave","dragScope","DragDropModule","messageservice_1","Messages","messageService","closable","enableService","valueChange","messageObserver","messages","filteredMessages","hasMessages","getSeverityClass","severity","MessageService","MessagesModule","messageSource","addAll","ProgressBar","showValue","mode","ProgressBarModule","INPUTMASK_VALUE_ACCESSOR","InputMask","slotChar","autoClear","characterPattern","onComplete","androidChrome","initMask","_mask","tests","partialPosition","mask","firstNonMaskPos","defs","maskTokens","lastRequiredNonMaskPos","getPlaceholder","defaultBuffer","checkVal","focusText","caret","begin","activeElement","setSelectionRange","selectionStart","selectionEnd","duplicate","moveStart","collapse","moveEnd","isCompleted","seekNext","pos","seekPrev","shiftL","writeBuffer","shiftR","t","handleAndroidInput","curVal","oldVal","updateModel","event_1","createEvent","initEvent","dispatchEvent","onKeyDown","keyCode","iPhone","clearBuffer","onKeyPress","completed","ctrlKey","metaKey","proxy","allow","lastMatch","caretTimeoutId","handleInputChange","getUnmaskedValue","unmaskedBuffer","updatedValue","unmask","InputMaskModule","KEYFILTER_VALIDATOR","NG_VALIDATORS","KeyFilter","KeyFilter_1","_pattern","regex","DEFAULT_MASKS","isNavKeyPress","safari","SAFARI_KEYS","KEYS","RETURN","TAB","ESC","isSpecialKey","charCode","opera","shiftKey","getKey","getCharCode","pValidateOnly","mozilla","BACKSPACE","DELETE","cc","validate","validatePattern","pint","pnum","money","hex","alpha","alphanum","63234","63235","63232","63233","63276","63277","63272","63273","63275","KeyboardEvent","KeyFilterModule","Password","promptLabel","weakLabel","mediumLabel","strongLabel","feedback","meter","onKeyup","meterPos","score","testStrength","backgroundPosition","str","grade","normalize","PasswordModule","SPINNER_VALUE_ACCESSOR","Spinner","decimalSeparator","thousandSeparator","formatInput","valueAsString","keyPattern","negativeSeparator","interval","clearTimer","timer","spin","currentValue","toFixed","maxlength","formatValue","power","pow","onUpButtonMousedown","inputfieldViewChild","onUpButtonMouseup","onUpButtonMouseleave","onDownButtonMousedown","onDownButtonMouseup","onDownButtonMouseleave","onInputKeydown","onInputKeyPress","inputChar","onInputKeyup","parseValue","restrictValue","restricted","textValue","parts","handleChange","SpinnerModule","Tooltip","tooltipPosition","tooltipEvent","tooltipZIndex","mouseEnterListener","onMouseEnter","mouseLeaveListener","onMouseLeave","clickListener","focusListener","blurListener","showTimeout","deactivate","clearHideTimeout","showDelay","life","hideTimeout","clearShowTimeout","hideDelay","_text","updateText","tooltipArrow","tooltipText","positionStyle","align","bindDocumentResizeListener","alignTop","isOutOfBounds","alignBottom","alignLeft","alignRight","getHostOffset","preAlign","hostOffset","defaultClassName","tooltipStyleClass","targetTop","targetLeft","onWindowResize","resizeListener","unbindDocumentResizeListener","unbindEvents","parentElement","clearTimeouts","TooltipModule","img","HTMLImageElement","fun","DragDropService","DragDropSortableService","DndModule","AbstractComponent","AbstractHandleComponent","DataTransferEffect","DragImage","DragDropConfig","DragDropData","dragDropServiceFactory","dragDropSortableServiceFactory","DraggableComponent","DraggableHandleComponent","DroppableComponent","SortableContainer","SortableComponent","SortableHandleComponent","__WEBPACK_IMPORTED_MODULE_1__angular_forms__","__extends","extendStatics","setPrototypeOf","__proto__","b","__","imageElement","x_offset","y_offset","imgScr","MOVE","__decorate$1","_config","_elem","markSortable","elem","isPresent","onSortableDragClass","__decorate$3","__metadata$2","elemRef","_dragDropService","_cdr","_defaultCursor","defaultCursor","cursor","ondragenter","_onDragEnter","ondragover","_onDragOver","ondragleave","_onDragLeave","ondrop","_onDrop","onmousedown","_target","ondragstart","_dragHandle","_onDragStart","dragImage","setDragImage","createImage","callFun","cloneItem","_dragHelper","cloneNode","offsetX","offsetY","cursorelem","_dragEnabled","effectCursor","dragCursor","ondragend","_onDragEnd","enabled","draggable","setDragHandle","detectChanges","destroyed","_isDropAllowed","_onDragEnterCallback","_onDragOverCallback","_onDragLeaveCallback","_preventAndStop","_onDropCallback","isDragged","dropEnabled","dragData","dropZones","allowedDropZones","dragZone","stopPropagation","_onDragStartCallback","_onDragEndCallback","_Component","__decorate$2","__metadata$1","dragDropService","cdr","dragEnabled","onDragSuccessCallback","onDragStartClass","mouseEvent","__decorate$4","__metadata$3","onDragEnterClass","onDragOverClass","onDragOver","onDropSuccess","__decorate$5","__metadata$4","_sortableDataService","_sortableData","sortableData","sortableHandler","SortableFormArrayHandler","SortableArrayHandler","sortableContainer","getItemAt","removeItemAt","insertItemAt","controls","removeAt","insert","_sortableContainer","onDragStartCallback","onDragOverCallback","onDragEndCallback","onDropSuccessCallback","useFactory","deps","RECAPTCHA_V3_SITE_KEY","ReCaptchaV3Service","onLoadComplete","actionBacklog","executeActionWithSubject","isBrowser","onExecuteSubject","onExecuteObservable","then","NotificationService","ConstantService","AppService","WhiteboardService","comments","newlike","newlove","newangry","newfun","deletepost","LoginComponent","_loginTemplate2","_loginTemplate","meta","loginService","_meta","_login","loading","captcha","sitkey","forgotPassword","location","href","mainLogo","myLoginStyle","background","getLoginBack","loginback","mainlogo","getCookie","intentos","cookie","keyPub","setItem","captchaForever","getAuth","attempts","getAuthBeta","captchaResponse","Meta","DashboardComponent","_dashboardTemplate2","_dashboardTemplate","pipes","TruncatePipe","PaginatePipe","FilterPipe","FilterfieldPipe","router","dashboardService","dailyService","notificationService","headerService","schedulerService","todolistService","_router","_dashBoard","_notifications","_daily","_dailys","_header","_scheduler","_todolist","pending","developing","improving","notifications","noti","sh","dayJob","sprint","closedpoints","devpoints","delpoints","closed","delayed","searchuser","searchtask","posState","posDState","mcT","selectedUsers","dayView","dail_points","dail_text","extra","delivery","catdaily","todaypts","chartHtml","chartUser","mychart","myUsers","contactsTree","burndownData","events","scheduler","plsch","stssche","catsche","selectedNodes","cant_pend","cant_deve","cant_imp","cant_expi","cant_back","percentage_pend","percentage_deve","percentage_deve_aprox","percentage_impr","percentage_impr_aprox","percentage_expi","percentage_expi_aprox","percentage_back","todolist","selectList","add_items","limitpagetd","itemcounttd","currentpagetd","textGroup","dailynew","spinner","mytask","totalp","taskbystatus","tasksMySprint","myMeetings","mySchedulers","taskInDeveloping","taskInPending","getTasksMySprint","getMyMeetings","getMySchedulers","getPercentage","a","tkstatus","quantity","percentage","getCategories","cada_name","para_category","categories","getSchedulerCategory","getSchedulerStatus","getSchedulerPlaces","getMyUserData","myuser","getDevtask","para_codigo","versionControl","center","getMyVersionControl","advc_description","selectedprojects","getTodolist","level_next","level_m","total_items","task_level","setLevel","getSelectlist","msgs","summary","getNotifications","getBurnDown","getTree","getMyUsers","getMySchedule","part1","sche_start","part2","sche_end","tittle","sche_title","place","description","sche_description","getStatusTasksUser","pointsdone","pointstk","names","surnames","fullName","arrayNames","firstName","groupname","u","expanded","getNameUser","updateSelect","childrens","idparent","getMessages","getprojectNotes","selectAllChildrens","getBurndown","datasets","borderColor","color","backgroundColor","labels","days","legend","boxWidth","_index","getDay4Usr","_datasetIndex","calEvent","setCatNotification","getDeskNotificatons","clearNotificatons","putScheduler","datetime","putMeeting","_parseFloat","_x","pts","today","dd","mm","yyyy","dail_date","dail_text_2","dail_points_2","dail_date_2","dv","putDaily","setMytask","getDevtasks","developingx","lblmytasks","getTasksbyMe","myTasks","idn","getPercentageDetail","_toConsumableArray","arr2","TaskboardComponent","_taskboardTemplate2","_taskboardTemplate","CalculatePipe","categoriesService","unitsService","_categories","_event","_units","draggedTask","searching","searchproduct","searchproject","posCreator","posProduct","sumdv","sumdv_d","sumcp","sumimp","sumcl","rjtask","selectedProduct","selectedProduct_new","selectedprojects_new","byme","categoryMenu","selectedCategory","mytags","tagsbytask","keylist","regexFromMyArray","counterElements","notes","taskslist","globalist","posAsigned","selectedParents","filter_projects","mysprint","sprintselected","taskselected","cpimptask","myrequest","requests","showt","myteam","textState","infodone","team","tagMenux","minDateDaily","maxDateDaily","tagbytask","mysprintsgroup","headteam","getMyTeam","mytsk","getRequests","getMyProjects","getTaskboard","loadSprint","getUnits","units","unit_desc","pd","task_approved","cp","impTask","rejectTask","classC","pendingx","improvingx","completex","closex","getMyTaggedTasks","getPtsToday","ev","tk","elem2","showCurrentDate","old_points","putExtra","date","date_aux","unit_points","unit_pointsd","putFromEvent","editTask","catIds","cate_desc","approvalusers","reqapproval","cate_appr","cat_array","counttag","getMyTags","getTagsByTask","deleteTagsByTask","tags","comp","cl","tagSubmenu","chosenTag","patterns","colorpalette","saveNewTag","elemen","nextSibling","cantidad","new_text","task_arr","task_inner","task_obj","navigateByUrl","saveSprintTasks","dgt","drg","typ","showCpImp","setPosTask","draggedIndex","listtk","request","getCurrentDate","currentdate","CURRENT_TIMESTAMP","getTeam","ans","usersel","role_name","teamInfo","getListSprints","lastname","profile","userid","selectAllChild","getmyGroups","updateTeam","ptsd","group_id","sprintslist","getListReport","compareDate","jQuery","TaskListComponent","_tasklistTemplate2","_tasklistTemplate","OrderPipe","TaskViewComponent","externalRequestService","_externalrequest","posGroup","posOrder","orderDesc","pages","notemd","namegroup","nameTypeTask","typeRol","states","tagMenuNew","levels","filter_excel","usrs","assig","projs","task_ids","date_ini","prods","statusdelete","getLevels","productsa","productsb","getRolUser","getunits","getStates","myProjectsx","myProjectsxb","leader","searchTask","mod","assigned","creators","formatDate","projects","all","orderby","orderdesc","typeTask","getTaskList","loadData","activeTabDescription_addTask","task_description_e","reopenTask","contadoritclo","contadoritdele","tklv_id","monthIndex","mytaskcopy","copyc","copyp","copypd","filterP","filterU","filterPj","getInfoTaskCriteria","level","tklv_description","deletesprintbytask","backlogTask","getExcel","save","download","clicEvent","MouseEvent","URL","webkitURL","revokeObjectURL","ProjectListComponent","_projectlistTemplate2","_projectlistTemplate","ProjectViewComponent","encapsulation","ViewEncapsulation","None","projectService","constantService","_constants","selprojects","getConstants","cont","appl","applicants","proj_ids","getprojectList","searchProject","idproj","user_creator","myprojcopy","copya","myProjectsb","_initDefineProp","MailboxComponent","_dec2","_class2","_descriptor","_mailboxTemplate2","_mailboxTemplate","directoryService","_inbox","_directory","selmails","mymail","posFlag","posFolder","selectedNodesFl","selectedFolders","foldersTree","selectedFlag","flagFilter","lastemail","emailsnew","currmailbox","topmail","botmail","curfilter","mailaccounts","activemenu","maildetails","accountDetails","newaccount","curfolder","selection","sortoptions","selectedOrder","fromOptions","sortorder","newMessage","cati_user_name","id_caproject","getMyAccounts","NewMailbox","mabo_subject","mabo_htmlmessage","tkat_type","id_mail_box","readMail","dateString","months","dt","ndt","setFlag","getMail","setFolder","account","accountid","mbox","totalmsg","emailrequest","lmail","order","totalaccounts","sender","sender_personal","htmlmsg","streamMessage","loadHTML","recipients","mailbox","mbac_email","mbus_mailacc","usem_title","saveNewAccount","emailAction","editAccount","deleteAccount","sortoption","sendEmail","itemValue","rstyle","rbody","contentDocument","encodeHtml","activeTabDescription_addEmail","DirectoryComponent","_directoryTemplate2","_directoryTemplate","angularxQrCode","_contacts","contact","contactList","profilepic","getContact","qrCode","textVcard","cont_lastname","cont_firstname","cont_cargo","cont_cellphone","cont_email","cont_workaddress","qrcode","foreground","imgWidth","imgHeight","reader","FileReader","onload","attr","readAsDataURL","photo","myImg","cont_photo","cont_birthday","saveContact","isLoadingcontact","isLoadingpagination","verifyEmaild","errors","updateContact","ct","deleteContact","getUsersx","teclado","letras","teclado_especial","DailyComponent","_dailyTemplate2","_dailyTemplate","myDay","seldaily","mydaily","mydailycopy","dateActive","mDay","getSprint","searchDaily","getDailyList","getUserInfo","da","deleteDay","compareDate2","pointsr","getDaily","ax","bx","cx","pointsru","ContactComponent","_contactTemplate2","_contactTemplate","editcontact","grupsShared","id_cont","tabActive","idcontact","tab","registerTab","cont_workphone","cont_homeaddress","cont_homephone","cont_personalemail","SprintComponent","_sprintTemplate2","_sprintTemplate","sptasks","sprints","sprintTask","sprintn","total_adjusted","sumpoints","totalpoints_p","totalpoints_d","sprintrefs","pointssum","endSprind","getSprintDetail","getAllMyUsers","userslblShareWith","idsprint","updatePoints","getSum","showPoints","sptsel","selectedUsers_2","selectedNodes_2","st","sum_p","sum_d","totalpoints_pending","pendpoints","sp","getList","getTasksWoSp","updateList","ts","delSprintTasks","idSprint","activeTabDescription","SprintsComponent","_sprintsTemplate2","_sprintsTemplate","newSprint","sprintdays","editvalue","seletedDaysSprint","getMySprints","changes","spr","getSprintFull","currSprintPts","currSprintPts_e","spdays","spdy_date","spdy_value","spdy_status","selectdays","defaultDur","defaultDurrounded","calculateTotal","deleteSprint","spri_points","dayDuration","dayname","weekday","mydate","getDay","sday","spdy_day_name","spdy_id","sprintDiff","sprintDiff_e","putSprint","sprintId","total","sprintday","value_aggreg","balance","spday_date","spday_value","spday_balance","putSprintDay","SchedulerComponent","_schedulerTemplate2","_schedulerTemplate","addAsociateMail","ticket","listtasks","addAsociateTask","SchedulerListComponent","_schedulerlistTemplate2","_schedulerlistTemplate","schedules","selsch","deleteScheduler","sche_id","editScheduler","EventsListComponent","_eventslistTemplate2","_eventslistTemplate","stsmt","selmee","userlist","st_cancelled","getMeetingStatus","statuslist","getIdStatus","getMyMeetingsList","modalname","getMeeting","getUsersMeeting","setStatusMeeting","deleteMeeting","EventsComponent","_eventsTemplate2","_eventsTemplate","idmeeting","listtasksa","getUserTasks","_task","RolesComponent","_rolesTemplate2","_rolesTemplate","rolesService","_roles","selectedRole","modulesTree","subModules","rolesMenu","submoduleChk","selectedSubmodule","selectedPer","selectedPermits","savePermit","modulesAdd","selRole","modulesMyTree","submodChk","modAdd","myRol","myRolName","parentsTree","parentsTree2","children_show","getModules","parents","parentid","modid","parentname","moduleName","getRoles","getParentModules","modu_name","expandedIcon","collapsedIcon","selectable","getChildModules","modu_parent","permits","getPermModules","perm_desc","perm_id","moduleid","id_parent","deleteRole","rol_name","role_descr","getAllModules","getModulesRole","getPermits","getModulesRol","getMyModules","module_id","roles","roleName","roleId","roleDescription","roleCreator","roleDate","role_iconname","permitverify","submodule","sbmodule","selectedModules","saveRole","savePermits","updateRole","RolComponent","_rolTemplate2","_rolTemplate","idrole","getMyRoles","idModule","TodolistComponent","_todolistTemplate2","_todolistTemplate","getListAll","tklv_level","id_level","UsersComponent","_usersTemplate2","_usersTemplate","_users","userList","selectedUser","seluser","defaultpct","user_ids","myUser","getUsers","user_pwd","groupsFilter","typeUser","nameTypeUser","getUserList","geteditUser","user_phone","user_email","user_newpicture","email_e","result_e","user_alias","getUserAlias","user_user","saveUser","split_user","split_lastname","firstUppercase","editUser","deleteUser","verifyEmail","searchUser","myUsercopy","tecla","patron","tecla_final","UsersHistoryComponent","_usershistoryTemplate2","_usershistoryTemplate","_confirm","userHistories","userHistory","iduser","getUserHistory","saveUserHistory","updateUserHistory","deleteUserHistory","ParameterListComponent","_parameterlistTemplate2","_parameterlistTemplate","paramService","_params","classes","parameters","clase","classeslbl","parameter","load","getParametersClass","idclass","getClasses","clas_name","obj_Class","idclas","putParameter","paramid","delParameter","idparam","updateParameter","ParametersComponent","_parametersTemplate2","_parametersTemplate","getParameters","clas_description","updateClass","delClass","putClass","CategoriesComponent","_categoriesTemplate2","_categoriesTemplate","typeService","textType","_types","stscat","selcat","categorie","st_deleted","tycat","tycate","categoryNameNew","var","campo","prodname","getCategoryStatus","getTypes","type_name","getCategoryList","campo_value","campo_mandatory","cate","getUsersCategory","getFieldsCategory","getCategorie","para_type","form_field","form_mandatory","updateCategory","putCategory","deleteCategory","innactiveCategory","reactiveCategory","prodid","UnitsComponent","_unitsTemplate2","_unitsTemplate","selunit","getUnit","putUnit","updateUnit","deleteUnit","NotfoundComponent","_notfoundTemplate2","_notfoundTemplate","NotpermitsComponent","_notpermitsTemplate2","_notpermitsTemplate","ProductComponent","_productTemplate2","_productTemplate","id_parentask","ProductListComponent","_productlistTemplate2","_productlistTemplate","selproducts","groupsproducts","groupslbl","getProductsx","getProduct","deleteProduct","putProduct","updateProduct","on","TypeListComponent","_typelistTemplate2","_typelistTemplate","seltypes","typeMenu","getTypeStatus","typeNameNew","deleteType","putType","updateType","CodeComponent","_codeTemplate2","_codeTemplate","WikiComponent","_wikiTemplate2","_wikiTemplate","RequestsComponent","_requestsTemplate2","_requestsTemplate","_request","textCreator","seleve","idtype","catlist","myfilterfield","typetittle","cant_e","cant_ia","cant_im","mylist","taskfields","textInfo","posInfo","timeline","imptask","tagMenuRequest","results","rejected","filterRequestRejected","groupscombo","userapplicant","typeSelected","link","searchFilter","getprojects","getMyRequests","implementations","filename","blob","Blob","createObjectURL","type_cod","activeTabDescription_editRequest","asigned_to","canclose","getMyTask","task_description_r","categorieslbl","fields_valid","putTaskFields","rex","closure","newProject","ApprovalsComponent","_approvalsTemplate2","_approvalsTemplate","productvalue","productlabel","tareas","approvals","getMyApprovals","getTasks","task_closed","getTicket","acceptTask","ProjectboardComponent","_projectboardTemplate2","_projectboardTemplate","costreport","variablereport","showAddItem","fixedreport","totalcost","totalfixed","totalvariable","totalvariablemoney","totalfixedmoney","itemTotal","curBudget","costDisplayed","costtypes","myprojects","unitSelected","measure","budget","toggleClass","newItem","StaticComponent","_staticTemplate2","_staticTemplate","BurndownComponent","_burndownTemplate2","_burndownTemplate","appService","_app","parse","userdetail","PasswordRecoveryComponent","_passwordrecoveryTemplate2","_passwordrecoveryTemplate","mainLogoW","loginScreen","getLoginBackW","mainlogow","passwordmsg","pwValidated","pwd1","pwd2","codeConfirmed","validated","validateEmail","pincode","is","blur","resetPassword","rgx","regx","setPassword","UserSettingsComponent","_usersettingsTemplate2","_usersettingsTemplate","editData","getUser","prev_password","new_password","confirmed_password","notificationstype","userPreferences","desktop","myPreferences","filteredUsers","pwSet","new_pw","old_pw","changePassword","editUserSettings","getNotificationsList","emailnotif","desknotif","getPreferences","noti_type","pref_desk","pref_email","savePreferences","RequestsSettingsComponent","_preferencesTemplate2","_preferencesTemplate","mailAccounts","groupRules","mytype","newRule","ruleFields","ruleOperators","getActiveCategories","cateids","getMyGroupAccounts","getMyGroupRules","getAllGroups","mbac_id","mbrq_ruleid","mbrq_field","mbrq_operator","mbrq_criteria","addRule","runRule","deleteRule","ClientSettingsComponent","_clientsettingsTemplate2","_clientsettingsTemplate","loginBack","getSettings","image_logo","Image","image_back","logo","saveGeneralSetting","companyname","emailsubscription","policies","password","imap","smtp","DailyBoardComponent","_dailyboardTemplate2","_dailyboardTemplate","_group","groupUsers","groupTasks","burndownTeams","scrollOn","topDistance","teamDisplay","teamDisplayIdx","gropid","current_sprint","inprogress","grp","subscriber2","IntervalObservable","subscriber","prevScroll","pdx","pdx2","pdx3","dvp","dvp2","imp","cmp","workgroup","scrollBool","getAdjusted","getForm","taex_points","abs","taex_delivery","taex_updated","reason","taex_description","urlimagen","ReportsComponent","_reportsTemplate2","_reportsTemplate","selectedsprint","projectsnames","labelsproj","tableinfo","tableinfoU","drawn","emptyReport","getReport","getTasksReport","getUsersReport","userstable","getPieSprint","getBarSprint","getTable","updatePuglins","mydate_init","month","month_init","mydate_end","month_end","date1","date2","datasetspie","costs","labelscosts","labelspoints","getProjectsReport","projecttable","projectpie","hoverBackgroundColor","cost","pointStyle","datapie","optionspie","responsive","fullWidth","usePointStyle","pending_points","estimated_points","registered_points","extra_points","datasetsbar","usersbar","databar","optionsbar","tooltips","intersect","scales","xAxes","yAxes","ticks","stepSize","Chart","plugins","register","afterDatasetsDraw","chart","ctx","dataset","getDatasetMeta","hidden","dataString","padding","fillStyle","fontStyle","fontSize","fontFamily","font","helpers","fontString","textAlign","textBaseline","fillText","GuideburndownComponent","_guideburndownTemplate2","_guideburndownTemplate","fragment","NavigationEnd","tree","parseUrl","scrollIntoView","GuideprojectboardComponent","_guideprojectboardTemplate2","_guideprojectboardTemplate","UserguideloginComponent","_userguideloginTemplate2","_userguideloginTemplate","GroupListComponent","_grouplistTemplate2","_grouplistTemplate","loadingGroup","grouplist","selusrs","usersEdit","usersg","pendingusers","selectedgroup","grop","getUsersGroup","listUsersEdit","userListEdit","gr","saveGroup","usr","deleteGroup","deleteUserGroup","pendingUsers","getPendigUsers","saveUsersGroup","MySprintComponent","_mysprintTemplate2","_mysprintTemplate","mygroupid","getMySprintDetail","tsat_id","getMySprintInfo","getSprintTask","WhiteboardComponent","_whiteboardTemplate2","_whiteboardTemplate","whiteboardService","_groupService","_headerService","_whiteboard","messageslist","selectuser","newsurprise","selectedTeams","myTeams","getMessage","putMessage","putComments","reaction","id_reaction","putLikes","putLove","putAngry","putFun","putWow","deletePost","notify","idmuro","ExternalRequestsComponent","_externalrequestsTemplate2","_externalrequestsTemplate","categoriesNewTask","infoTaskFather","infoTaskFatherAssociate","taskJoin","myfilterfieldNewTask","existClient","existProduct","selectedtype","clientlist","searchTaskShared","posOrderTaskShared","limitpageTaskShared","itemcountTaskShared","orderDescTaskShared","currentpageTaskShared","taskShared","taskChecked","getExternalList","clients","client_name","client_id","usex_dbname","myproducts","groupsNewTask","islocal","taskChild","getInfoTaskJoin","eve","reloadTaskShared","isLoadingTaskShared","getTaskSharedList","lastpageTaskShared","countpagTaskShared","pagesTaskShared","contTaskShared","deleteTaskJoin","newTaskJoin","task_father_id","saveTaskJoin","associateTaskJoin","categorieslblNewTask","tktype","bd_external","task_description_rext","listcat","updaterequest","list_data","list_cate","categoryList","dataList","list_a","getDataBase","usex_myid","prodId","getClientCategories","categorieslblClients","categoriesClients","ExternalTaskListComponent","_externaltasklistTemplate2","_externaltasklistTemplate","clientGroup","externaltask","usersFilter","usersFilterCopy","usersExternal","usersExternalCopy","productsFilter","productsFilterCopy","projectsFilter","projectsFilterCopy","objClientes","getUsersExternal","getProductsList","getProductsByGroup","getExcelExternalTask","filterInfo","LogListComponent","_loglistTemplate2","_loglistTemplate","logService","_logs","logs","modu_label","getLogs","NotificationsComponent","_notificationsTemplate2","_notificationsTemplate","notif","getListx","DocumentsComponent","_documentsTemplate2","_documentsTemplate","cloudService","_cloud","typedocuments","listgroups","id_tipo","editdocument","selecteduser","documents","recurso","required","requiredTitle","resourcetype","documentsType","getDocuments","shared","clou_nameUrl","clou_nameFile","id_class","getDocument","id_cloud","deletedocument","deleteDocument","clou_public","editDocument","insertDocument","downloadDocument","CloudComponent","_cloudTemplate2","_cloudTemplate","listusers","listCloud","getCloud","editCloud","insertCloud","enableProdMode","platformBrowserDynamic","bootstrapModule","MainModule","Notification","permission","requestPermission","crypt","decryp","decrypt","setPrivateKey","html","getBaseLocation","pathname","bootstrap","AppComponent","HeaderComponent","TrimPipe","FilterDataPipe","SafeHtmlPipe","BrowserModule","RecaptchaModule","HttpModule","RouterModule","routes","BrowserAnimationsModule","DragDropDirectiveModule","CalendarModule","CheckboxModule","ScheduleModule","AutoCompleteModule","ConfirmDialogModule","RadioButtonModule","TreeModule","MultiSelectModule","EditorModule","ChartModule","ListboxModule","FileUploadModule","InternationalPhoneModule","APP_BASE_HREF","issueAnimationCommand","command","setProperty","resolveElementFromTarget","parseTriggerCallbackName","triggerName","dotIndex","substr","instantiateSupportedAnimationDriver","instantiateDefaultStyleNormalizer","instantiateRendererFactory","engine","AnimationRendererFactory","BrowserAnimationBuilder","_super","rootRenderer","_nextAnimationId","typeData","animation","_renderer","createRenderer","build","BrowserAnimationFactory","_id","RendererAnimationPlayer","parentPlayer","_started","totalTime","_command","_listen","eventName","onDone","onStart","onDestroy","hasStarted","play","pause","restart","finish","setPosition","getPosition","delegate","_zone","_currentId","_microtaskId","_animationCallbacksBuffer","_rendererCache","_cdRecurDepth","promise","onRemovalComplete","hostElement","BaseAnimationRenderer","componentId","namespaceId","registerTrigger","AnimationRenderer","_scheduleCountTask","scheduleListenerCallback","tuple","whenRenderingDone","destroyNode","namespace","createComment","createText","newChild","onInsert","refChild","oldChild","selectRootElement","selectorOrNode","node","removeAttribute","setStyle","flags","removeStyle","disableAnimations","setValue","factory","name_1","phase","countId","InjectableAnimationEngine","driver","normalizer","SHARED_ANIMATION_PROVIDERS","useClass","BROWSER_ANIMATIONS_PROVIDERS","BROWSER_NOOP_ANIMATIONS_PROVIDERS","NoopAnimationsModule","optimizeGroupPlayer","players","normalizeKeyframes","keyframes","preStyles","postStyles","normalizedKeyframes","previousOffset","previousKeyframe","kf","isSameOffset","normalizedKeyframe","normalizedProp","normalizedValue","normalizePropertyName","normalizeStyleValue","listenOnPlayer","player","copyAnimationEvent","phaseName","makeAnimationEvent","fromState","toState","getOrSetAsInMap","parseTimelineCommand","separatorPos","containsVendorPrefix","validateStyleProperty","_CACHED_BODY","getBodyNode","_IS_WEBKIT","resolveTimingValue","_convertTimeValueToMS","ONE_SECOND","resolveTiming","timings","allowNegativeValues","parseTimeExpression","exp","delayMatch","easingVal","containsErrors","startIndex","copyObj","destination","normalizeStyles","normalizedStyles","copyStyles","readPrototype","setStyles","camelProp","dashCaseToCamelCase","eraseStyles","normalizeAnimationEntry","steps","validateStyleParams","extractStyleParams","varName","PARAM_REGEX","interpolateParams","original","localVal","DASH_CASE_REGEXP","allowPreviousPlayerStylesMerge","visitDslNode","visitor","visitTrigger","visitState","visitTransition","visitSequence","visitGroup","visitAnimate","visitKeyframes","visitStyle","visitReference","visitAnimateChild","visitAnimateRef","visitQuery","visitStagger","parseTransitionExpr","transitionValue","expressions","parseInnerTransitionStr","eventStr","parseAnimationAlias","makeLambdaFromStates","isFullAnyStateExpr","ANY_STATE","alias","lhs","rhs","LHS_MATCH_BOOLEAN","TRUE_BOOLEAN_VALUES","FALSE_BOOLEAN_VALUES","RHS_MATCH_BOOLEAN","lhsMatch","rhsMatch","buildAnimationAst","AnimationAstBuilderVisitor","normalizeSelector","hasAmpersand","SELF_TOKEN","SELF_TOKEN_REGEX","NG_TRIGGER_SELECTOR","NG_ANIMATING_SELECTOR","normalizeParams","consumeOffset","styleTuple","constructTimingAst","makeTimingAst","strValue","ast","dynamic","normalizeAnimationOptions","createTimelineInstruction","preStyleProps","postStyleProps","subTimeline","buildAnimationTimelines","rootElement","enterClassName","leaveClassName","startingStyles","finalStyles","subInstructions","AnimationTimelineBuilderVisitor","buildKeyframes","roundOffset","decimalPoints","mult","flattenStyles","allStyles","allProperties","createTransitionInstruction","isRemovalTransition","fromStyles","toStyles","timelines","queriedElements","oneOrMoreTransitionsMatch","matchFns","currentState","nextState","buildTrigger","AnimationTrigger","createFallbackTransition","AnimationTransitionFactory","matchers","queryCount","depCount","balanceProperties","key1","key2","deleteOrUnsetInMap","currentValues","delete","normalizeTriggerValue","isElementNode","isTriggerEventValid","cloakElement","oldValue","cloakAndComputeStyles","valuesMap","elements","elementPropsMap","defaultStyle","cloakVals","failedElements","computeStyle","REMOVAL_FLAG","NULL_REMOVED_QUERIED_STATE","buildRootMap","roots","nodes","getRoot","NULL_NODE","localRootMap","rootMap","nodeSet","CLASSES_CACHE_KEY","removeNodesAfterAnimationDone","processLeaveNode","flattenGroupPlayers","finalPlayers","_flattenGroupPlayersRecur","objEquals","k1","k2","replacePostStylesAsPre","allPreStyleElements","allPostStyleElements","postEntry","preEntry","_computeStyle","supportsWebAnimations","_contains","elm1","elm2","_matches","_query","fn_1","matchesSelector","mozMatchesSelector","oMatchesSelector","elm","matchesElement","containsElement","invokeQuery","NoopAnimationDriver","previousPlayers","AnimationDriver","NOOP","SUBSTITUTION_EXPR_START","_driver","AnimationAstBuilderContext","_resetContextStyleTimingState","currentQuerySelector","collectedStyles","currentTime","transitions","definitions","def","stateDef_1","styleAst","astParams","containsDynamicStyles","missingSubs_1","params_1","stylesObj_1","missingSubsArr","expr","furthestTime","innerAst","timingAst","currentAnimateTimings","styleMetadata","styleMetadata_1","newStyleData","_styleAst","isEmptyStep","_makeStyleAst","_validateStyleAst","collectedEasing","styleData","styleMap","endTime","startTime","collectedEntry","updateCollectedStyle","totalKeyframesWithOffsets","offsets","offsetsOutOfOrder","keyframesOutOfRange","style$$1","offsetVal","generatedOffset","animateDuration","durationUpToThisFrame","parentSelector","currentQuery","includeSelf","optional","originalSelector","currentTransition","ElementInstructionMap","_map","consume","instructions","existingInstructions","ENTER_TOKEN_REGEX","LEAVE_TOKEN_REGEX","AnimationTimelineContext","currentTimeline","containsAnimation","tl","allowOnlyTimelineStyles","elementInstructions","innerContext","createSubContext","_visitSubInstructions","transformIntoNewTimeline","previousNode","instruction","instructionTimings","appendInstructionToTimeline","updateOptions","subContextCount","snapshotCurrentStyles","DEFAULT_NOOP_PREVIOUS_NODE","delayNextStep","applyStylesToKeyframe","innerTimelines","mergeTimelineCollectedStyles","_visitTiming","incrementTime","getCurrentStyleProperties","forwardFrame","applyEmptyStep","innerTimeline","forwardTime","elms","currentQueryTotal","sameElementTimeline","currentQueryIndex","parentContext","maxTime","currentStaggerTime","startingTime","_enterClassName","_leaveClassName","initialTimeline","TimelineBuilder","skipIfExists","newOptions","optionsToUpdate","newParams","paramsToUpdate_1","_copyOptions","oldParams_1","newTime","fork","updatedTimings","builder","SubTimelineBuilder","stretchStartingKeyframe","_elementTimelineStylesLookup","_previousKeyframe","_currentKeyframe","_keyframes","_styleSummary","_pendingStyles","_backFill","_currentEmptyStepKeyframe","_localTimelineStyles","_globalTimelineStyles","_loadKeyframe","hasPreStyleStep","_updateStyle","getFinalKeyframe","details0","details1","finalKeyframes","keyframe","finalKeyframe","preProps","postProps","kf0","kf1","_stretchStartingKeyframe","newKeyframes","startingGap","newFirstKeyframe","oldFirstKeyframe","oldOffset","timeAtKeyframe","AnimationStyleNormalizer","Animation","errorMessage","_animationAst","buildTimelines","destinationStyles","dest","WebAnimationsStyleNormalizer","NoopAnimationStyleNormalizer","propertyName","userProvidedProperty","normalizedProperty","strVal","DIMENSIONAL_PROP_MAP","valAndSuffixMatch","EMPTY_OBJECT","_triggerName","_stateStyles","buildStyles","stateName","backupStateStyler","stateStyler","backupStyles","currentOptions","nextOptions","transitionAnimationParams","currentAnimationParams","currentStateStyles","nextAnimationParams","nextStateStyles","preStyleMap","postStyleMap","isRemoval","animationOptions","queriedElementsList","AnimationStateStyles","defaultParams","combinedParams","styleObj_1","transitionFactories","fallbackTransition","matchTransition","f","matchStyles","EMPTY_INSTRUCTION_MAP","TimelineAnimationEngine","_normalizer","_animations","_playersById","_buildPlayer","autoStylesMap","inst","_getPlayer","baseEvent","EMPTY_PLAYER_ARRAY","NULL_REMOVAL_STATE","setForRemoval","hasAnimation","removedBeforeQueried","StateValue","isObj","absorbOptions","DEFAULT_STATE_VALUE","DELETED_STATE_VALUE","AnimationTransitionNamespace","_engine","_triggers","_queue","_elementListeners","_hostClassName","listeners","triggersWithStates","statesByElement","NG_TRIGGER_CLASSNAME","afterFlush","_getTrigger","defaultToFallback","TransitionAnimationPlayer","playersOnElement","playersByElement","queued","isFallbackTransition","totalQueuedPlayers","index_1","fromStyles_1","toStyles_1","reportError","deregister","stateMap","clearElementCache","elementPlayers","_signalRemovalForInnerTriggers","namespaces","fetchNamespacesByElement","ns","triggerLeaveAnimation","destroyAfterComplete","triggerStates","players_1","markElementAsRemoved","prepareLeaveAnimationListeners","visitedTriggers_1","listener","elementStates","removeNode","childElementCount","containsPotentialParentTransition","totalAnimations","currentPlayers","playersByQueriedElement","parent_1","triggers","destroyInnerAnimations","_onRemovalComplete","insertNode","drainQueuedTransitions","microtaskId","markedForDestroy","d0","d1","elementContainsData","containsData","TransitionAnimationEngine","newHostElements","disabledNodes","_namespaceLookup","_namespaceList","_flushFns","_whenQuietFns","namespacesByHostElement","collectedEnterElements","collectedLeaveElements","createNamespace","_balanceNamespaceList","collectEnterElement","nextNamespace","_fetchNamespace","afterFlushAnimationsDone","nsId","markElementAsDisabled","_buildInstruction","subTimelines","containerElement","destroyActiveAnimationsForElement","finishActiveQueriedAnimationOnElement","cleanupFns","_flushAnimations","quietFns_1","skippedPlayers","skippedPlayersMap","queuedInstructions","disabledElementsSet","nodesThatAreDisabled","i_1","bodyNode","allTriggerElements","enterNodeMap","enterNodeMapIds","allLeaveNodes","mergedLeaveNodes","leaveNodesWithoutAnimations","i_2","leaveNodeMapIds","leaveNodeMap","allPlayers","erroneousTransitions","i_3","stringMap","setVal_1","setVal","errors_1","allPreviousPlayersMap","animationElementMap","_beforeAnimationBuild","_getPreviousPlayers","prevPlayer","replaceNodes","postStylesMap","preStylesMap","pre","rootPlayers","subPlayers","NO_PARENT_ANIMATION_ELEMENT_DETECTED","parentWithAnimation_1","parentsToAdd","detectedParent","innerPlayer","_buildAnimation","setRealPlayer","parentPlayers","playersForElement","syncPlayerEvents","i_4","queriedPlayerResults","queriedInnerElements","queriedPlayers","activePlayers","isQueriedElement","toStateValue","queriedElementPlayers","isRemovalAnimation_1","targetNameSpaceId","targetTriggerName","this_1","timelineInstruction","realPlayer","getRealPlayer","beforeDestroy","allQueriedPlayers","allConsumedElements","allSubElements","allNewPlayers","pp","wrappedPlayer","_player","_containsRealPlayer","_queuedCallbacks","triggerCallback","_queueEvent","AnimationEngine","_triggerCache","_transitionEngine","_timelineEngine","cacheKey","disable","eventPhase","WebAnimationsPlayer","_onDoneFns","_onStartFns","_onDestroyFns","_initialized","_finished","_destroyed","previousStyles","currentSnapshot","_duration","_delay","_onFinish","_preparePlayerBeforeStart","previousStyleProps","startingKeyframe_1","missingStyleProps_1","self_1","domPlayer","_triggerWebAnimation","_finalKeyframe","_resetDomPlayerState","methods","WebAnimationsDriver","playerOptions","previousWebAnimationPlayers","_stripBaseHref","baseHref","_stripIndexHtml","cases","Plural","Other","getTypeNameForDebugging","invalidPipeArgumentError","titleCaseWord","locale","inner","hourExtractor","intlDateFormat","Intl","DateTimeFormat","format","timeZoneGetter","timezone","hour12Modify","hour12","digitCondition","combine","datePartGetterFactory","ret","part","DATE_FORMATS","partToTime","maximumFractionDigits","maxFraction","currency","currencyAsSymbol","isNumeric","isBlank","toInt","timeSetter","h","createCommonjsModule","tryCatcher","tryCatchTarget","errorObject_1","flattenUnsubscriptionErrors","errs","err","UnsubscriptionError","nextOrObserver","Subscriber","rxSubscriber_1","Observer_1","DragDirective","DragDropDirectiveService","DropDirective","PlatformLocation","getBaseHrefFromDOM","onPopState","hash","replaceState","back","LocationStrategy","includeHash","prepareExternalUrl","internal","pushState","queryParams","getBaseHref","Location","_platformStrategy","isCurrentPathEqualTo","normalizeQueryParams","stripTrailingSlash","_baseHref","go","onNext","onThrow","onReturn","_subject","slashes","HashLocationStrategy","_platformLocation","joinWithSlash","forward","PathLocationStrategy","externalUrl","NgLocalization","getPluralCategory","NgLocaleLocalization","One","Two","Few","Many","NgClass","_keyValueDiffers","_ngEl","_initialClasses","_applyInitialClasses","_applyClasses","_rawClass","_keyValueDiffer","keyValueChanges","_applyKeyValueChanges","_cleanupClasses","rawClassVal","record","previousValue","_toggleClass","forEachRemovedItem","isCleanup","klass","ngClass","NgComponentOutlet","_viewContainerRef","_componentRef","_moduleRef","elInjector","componentFactoryResolver","ngComponentOutlet","createComponent","ngComponentOutletContent","ngComponentOutletNgModuleFactory","NgForOfContext","$implicit","ngForOf","even","NgForOf","_viewContainer","_template","_differs","_differ","diff","_applyChanges","viewRef","forEachIdentityChange","currentIndex","ngForTrackBy","ngForTemplate","RecordViewTuple","_elseTemplateRef","_thenViewRef","_elseViewRef","_thenTemplateRef","templateRef","NgIf","condition","_context","ngIf","_updateView","createEmbeddedView","ngIfThen","NgIfContext","SwitchView","_templateRef","_created","_defaultUsed","_caseCount","_lastCaseCheckIndex","_lastCasesMatched","_ngSwitch","_updateDefaultCases","NgSwitch","_addCase","_defaultViews","ngSwitch","NgSwitchCase","viewContainer","_view","enforceState","_matchCase","ngSwitchCase","NgSwitchDefault","NgPlural","_localization","_caseViews","_switchValue","_clearViews","_activeView","ngPlural","NgPluralCase","NgStyle","_ngStyle","_setStyle","forEachAddedItem","forEachChangedItem","nameAndUnit","ngStyle","NgTemplateOutlet","ngTemplateOutlet","ngOutletContext","ObservableStrategy","createSubscription","updateLatestValue","PromiseStrategy","_promiseStrategy","_observableStrategy","_latestReturnedValue","_subscription","_obj","AsyncPipe","_dispose","_latestValue","_subscribe","_strategy","_selectStrategy","_updateLatestValue","LowerCasePipe","TitleCasePipe","UpperCasePipe","NumberFormatStyle","Currency","Decimal","Percent","NumberFormatter","NumberFormat","yMd","digitModifier","E","nameCondition","Z","G","GG","GGG","GGGG","DATE_FORMATTER_CACHE","DateFormatter","dateFormatter","_NUMBER_FORMAT_REGEXP","DecimalPipe","_locale","PercentPipe","CurrencyPipe","ISO8601_DATE_REGEX","DatePipe","_ALIASES","shortTime","_INTERPOLATION_REGEXP","I18nPluralPipe","pluralMap","I18nSelectPipe","mapping","JsonPipe","SlicePipe","supports","commonjsGlobal","__window","__self","WorkerGlobalScope","__global","_root","root_1","isFunction_1","isFunction_2","isArray_1","isObject_1","isObject_2","errorObject","tryCatch_1","tryCatch","tryCatch_2","__extends$3","UnsubscriptionError_1","UnsubscriptionError_2","_parent","_parents","_subscriptions","_unsubscribe","hasErrors","trial","teardown","Subscription","EMPTY","_addParent","tmp","subscriptions","subscriptionIndex","Subscription_1","Subscription_2","Observer","rxSubscriber","for","$$rxSubscriber","__extends$2","destinationOrNext","syncErrorValue","syncErrorThrown","syncErrorThrowable","SafeSubscriber","_next","_error","_complete","_unsubscribeAndRecycle","_parentSubscriber","observerOrNext","__tryOrSetError","__tryOrUnsub","wrappedComplete","Subscriber_1","Subscriber_2","toSubscriber_1","toSubscriber","toSubscriber_2","observable","$$observable","getSymbolObservable","_isScalar","lift","Observable","sink","_trySubscribe","PromiseCtor","Rx","observable_1","Observable_1","Observable_2","__extends$4","ObjectUnsubscribedError_1","ObjectUnsubscribedError","ObjectUnsubscribedError_2","__extends$5","observers","subscriberIndex","SubjectSubscription_1","SubjectSubscription","SubjectSubscription_2","__extends$1","hasError","thrownError","SubjectSubscriber","AnonymousSubject","releaseDrop","onMouseOut","dropEvent","dragenterEvent","dragleaveEvent","dropEventMouse","dragoverMouseEvent","eventData","CountryLocale","CountryPipe","OnlyNumberDirective","CountryService","LocaleService","IntPhonePrefixComponent","__WEBPACK_IMPORTED_MODULE_1__angular_common__","__WEBPACK_IMPORTED_MODULE_2__angular_forms__","__WEBPACK_IMPORTED_MODULE_3_lodash__","dialCode","countryCode","getCountries","getLocales","onlyNumbers","showDropdown","phoneInput","phoneComponent","handleKeyboardEvent","updateSelectedCountry","showDropDown","hideDropdown","updatePhone","_.sortBy","_.isEmpty","regexStr","treedragdropservice_1","confirmationservice_1","idx","AccordionTab","accordion","selectedChange","animating","findTabIndex","selected","onClose","multiple","tabs","onOpen","headerFacet","onToggleDone","Accordion","changeDetector","expandIcon","collapseIcon","initTabs","tabListSubscription","tabList","updateSelectionState","getBlockableElement","_activeIndex","changed","AccordionModule","button_1","AUTOCOMPLETE_VALUE_ACCESSOR","AutoComplete","differs","minLength","completeMethod","onSelect","onUnselect","onDropdownClick","onClear","onKeyUp","dropdownMode","immutable","inputFieldValue","differ","_suggestions","handleSuggestionsChange","suggestions","panelEL","highlightOption","noResults","suggestionsUpdated","autoHighlight","emptyMessage","highlightOptionChanged","listItem","updateInputField","inputKeyDown","forceSelection","onInputClick","inputClick","multiInputEL","isSelected","inputEL","focusInput","hasFocus","multiContainerEL","handleDropdownClick","queryValue","removedValue","highlightItemIndex","onInputChange","valid","suggestion","formattedValue","isDropdownClick","dropdown","dropdownButton","IterableDiffers","BlockUI","autoZIndex","baseZIndex","_blocked","block","unblock","BlockUIModule","router_1","Breadcrumb","onHomeClick","home","BreadcrumbModule","Captcha","initCallback","onResponse","onExpire","_instance","recaptchaCallback","recaptchaExpiredCallback","CaptchaModule","CALENDAR_VALUE_ACCESSOR","Calendar","dateFormat","inline","showOtherMonths","shortYearCutoff","hourFormat","stepHour","stepMinute","stepSecond","showSeconds","showOnFocus","dataType","selectionMode","todayButtonStyleClass","clearButtonStyleClass","keepInvalid","hideOnDateTimeSelect","onTodayClick","onClearClick","onMonthChange","onYearChange","firstDayOfWeek","dayNames","dayNamesShort","dayNamesMin","monthNames","monthNamesShort","_minDate","currentMonth","currentYear","createMonth","_maxDate","_disabledDates","disabledDates","_disabledDays","disabledDays","_showTime","showTime","currentHour","initTime","updateInputfield","newLocale","createWeekDays","defaultDate","ticksTo1970","yearNavigator","yearRange","yearOptions","years","yearStart","yearEnd","overlayViewChild","overlayShown","alignOverlay","dateTemplate","weekDays","dayIndex","year","dates","currentMonthText","firstDay","getFirstDayOfMonthIndex","daysLength","getDaysCountInMonth","prevMonthDaysLength","getDaysCountInPrevMonth","dayNo","getSundayIndex","week","prev","getPreviousMonthAndYear","otherMonth","isToday","isSelectable","remainingDaysLength","getNextMonthAndYear","pm","utc","getUTCHours","currentMinute","getUTCMinutes","currentSecond","getUTCSeconds","timeOnly","prevMonth","nextMonth","onDateSelect","dateMeta","isMultipleSelection","isDateEquals","shouldSelectDate","selectOtherMonths","selectDate","isSingleSelection","overlayVisible","maxDateCount","formatDateTime","dateAsString","isRangeSelection","startDate","endDate","formatTime","UTC","setUTCHours","setUTCMinutes","setUTCSeconds","setHours","setMinutes","setSeconds","stringArrValue","setMonth","setFullYear","daylightSavingAdjust","isDateBetween","validMin","validMax","validDate","validDay","isDateDisabled","isDayDisabled","disabledDate","weekdayNumber","showOverlay","datepickerClick","onButtonClick","inputfield","isKeydown","onMonthDropdownChange","onYearDropdownChange","incrementHour","prevHour","newHour","validateHour","updateTime","decrementHour","hour","valueDateString","toDateString","incrementMinute","newMinute","validateMinute","decrementMinute","minute","incrementSecond","newSecond","validateSecond","decrementSecond","second","toggleAMPM","onUserInput","parseValueFromString","updateUI","parseDateTime","tokens","tokens_1","populateTime","parseDate","timeString","ampm","parseTime","hours","onDatePickerClick","iFormat","lookAhead","formatNumber","formatName","shortNames","longNames","literal","getUTCDate","getUTCDay","getUTCFullYear","getUTCMonth","minutes","seconds","validTokenLength","dim","iValue","doy","getNumber","isDoubled","minSize","digits","getName","checkLiteral","onTodayButtonClick","onClearButtonClick","Card","CardModule","Carousel","numVisible","firstVisible","circular","breakpoint","autoplayInterval","effectDuration","onPage","_value","handleDataChange","setPage","totalPages","valuesChanged","documentResponsiveListener","updateState","updateLinks","anchorPageLinks","updateDropdown","selectDropdownOptions","updateMobileDropdown","mobileDropdownOptions","stopAutoplay","itemsViewChild","calculateColumns","calculateItemWidths","startAutoplay","firstItem","viewportViewChild","columns","shrinked","onNextNav","onPrevNav","setPageWithLink","enforce","onDropdownChange","routerDisplay","CarouselModule","UIChart","onDataSelect","_data","reinit","initChart","onCanvasClick","getElementAtEvent","getDatasetAtEvent","getCanvas","getBase64Image","toBase64Image","generateLegend","refresh","CHECKBOX_VALUE_ACCESSOR","Checkbox","checked","checkbox","binary","addValue","removeValue","formControl","isChecked","FormControl","CodeHighlighter","highlightElement","CodeHighlighterModule","COLORPICKER_VALUE_ACCESSOR","ColorPicker","defaultColor","onHueMousedown","bindDocumentMousemoveListener","bindDocumentMouseupListener","hueDragging","pickHue","hueViewChild","validateHSB","pageY","updateColorSelector","getValueToUpdate","onColorMousedown","colorDragging","pickColor","colorSelectorViewChild","saturation","pageX","brightness","HSBtoHEX","HSBtoRGB","HEXtoHSB","RGBtoHSB","colorHandleViewChild","hueHandleViewChild","inputBgColor","togglePanel","onPanelClick","documentMousemoveListener","unbindDocumentMousemoveListener","documentMouseupListener","unbindDocumentMouseupListener","hsb","validateRGB","rgb","validateHEX","o","HEXtoRGB","hexValue","t1","t2","t3","RGBtoHEX","ColorPickerModule","ConfirmDialog","acceptIcon","acceptLabel","acceptVisible","rejectIcon","rejectLabel","rejectVisible","closeOnEscape","acceptEvent","rejectEvent","visible","_visible","positionInitialized","bindGlobalListeners","executePostShowActions","enableModality","disableModality","contentContainer","unbindGlobalListeners","moveOnTop","documentEscapeListener","ContextMenuSub","contextMenu","onItemMouseEnter","menuitem","activeItem","nextElement","nextElementSibling","sublist","onItemMouseLeave","listClick","containerLeft","sublistWidth","itemOuterWidth","ContextMenu","rightClickListener","top_1","button","windowResizeListener","ContextMenuModule","paginator_1","DataGrid","onLazyLoad","paginatorPosition","alwaysShowPaginator","trackBy","paginator","updatePaginator","updateDataToRender","paginate","createLazyLoadMetadata","datasource","dataToRender","DataGridModule","DataList","DataListModule","DataScroller","loaderClickListener","bindScrollListener","shouldLoad","inlineScrollListener","onInlineScroll","contentViewChild","windowScrollListener","onWindowScroll","unbindScrollListener","viewportHeight","docBody","docElement","winHeight","DataScrollerModule","shared_2","DTRadioButton","handleClick","DTCheckbox","ColumnHeaders","DataTable","ColumnFooters","TableBody","visibleColumns","ScrollableView","onVirtualScroll","initScrolling","virtualScroll","rowHeight","row","scrollTable","frozen","alignScrollBar","scrollHeader","scrollHeaderViewChild","scrollHeaderBox","scrollHeaderBoxViewChild","scrollBody","scrollBodyViewChild","scrollTableViewChild","scrollTableWrapper","scrollTableWrapperViewChild","scrollFooter","scrollFooterViewChild","scrollFooterBox","scrollFooterBoxViewChild","setScrollHeight","onHeaderScroll","onBodyScroll","frozenView","previousElementSibling","frozenScrollBody","tableHeight","pageHeight_1","virtualTableHeight","page_1","containerHeight","relativeHeight","staticHeight","scrollBodyHeight","maxHeight","hasVerticalOverflow","scrollBarWidth","selectionChange","showHeaderCheckbox","onRowClick","onRowSelect","onRowUnselect","onRowDblclick","onHeaderCheckboxToggle","onContextMenuSelect","filterDelay","columnResizeMode","onColResize","onColReorder","sortMode","defaultSortOrder","csvSeparator","exportFilename","metaKeySelection","rowTrackBy","compareSelectionBy","onEditInit","onEditComplete","onEdit","onEditCancel","onSort","rowExpandMode","sortableRowGroup","filters","loadingIcon","virtualScrollDelay","rowGroupExpandMode","firstChange","onRowExpand","onRowCollapse","onRowGroupExpand","onRowGroupCollapse","columnsChanged","_sortOrder","filterConstraints","notEquals","in","initColumns","initColumnGroups","columnsSubscription","cols","rowExpansionTemplate","rowGroupHeaderTemplate","rowGroupFooterTemplate","emptyMessageTemplate","paginatorLeftTemplate","paginatorRightTemplate","resizableColumns","initResizableColumns","reorderableColumns","initColumnReordering","totalRecordsChanged","virtualScrollableTableWrapper","globalFilter","globalFilterFunction","filterTimeout","_multiSortMeta","sortMultiple","_sortField","sortSingle","shouldPaginate","_selection","preventSelectionKeysPropagation","selectionKeys","virtualScrollCallback","hasFilter","preventSortPropagation","sortField","multiSortMeta","sortColumn","col","sortable","filteredValue","initScrollableColumns","scrollableColumns","frozenColumns","headerColumnsGroups","headerColumnGroups","footerColumnsGroups","footerColumnGroups","headerColumnsGroups_1","columnGroup","frozenHeaderColumnGroup","scrollableHeaderColumnGroup","footerColumnsGroups_1","frozenFooterColumnGroup","scrollableFooterColumnGroup","updateRowGroupMetadata","rowGroupMetadata","rowData","previousRowData","previousRowGroup","updateTotalRecords","endIndex","rowGroupMode","virtualScrollTimer","onHeaderKeydown","column","onHeaderMousedown","targetNode","columnSortField","sortOrder","addSortMeta","multisortmeta","data1","data2","value1","value2","localeCompare","multisortField","isSorted","sorted","getSortOrder","onRowGroupClick","rowGroupToggleClick","groupField","clearSelectionRange","rangeStart","rangeEnd","rangeRowIndex","anchorRowIndex","rangeRowData","selectionIndex","findIndexInSelection","dataKeyValue","selectRange","rowIndex","handleRowClick","preventRowClickPropagation","isMultipleSelectionMode","metaSelection","rowTouched","isSingleSelectionMode","selectionIndex_1","selectionIndex_2","handleRowTouchEnd","selectRowWithRadio","toggleRowWithCheckbox","toggleRowsWithCheckbox","headerCheckboxToggleAllPages","onRowRightClick","rowDblclick","onFilterKeyup","matchMode","isFilterBlank","localMatch","globalMatch","filterMeta","filterField","filterMatchMode","dataFieldValue","filterConstraint","excludeGlobalFilter","onFilterInputClick","switchCellToEditMode","cell","editorClick","bindDocumentEditListener","editingCell","focusable_1","switchCellToViewMode","findCell","unbindDocumentEditListener","closeCell","documentEditListener","onCellEditorKeydown","moveToPreviousCell","moveToNextCell","onCellEditorInput","onCellEditorChange","editChanged","onCellEditorBlur","currentCell","targetCell","findPreviousEditableColumn","findNextEditableColumn","prevCell","previousRow","lastElementChild","nextCell","nextRow","firstElementChild","onCustomEditorFocusPrev","onCustomEditorFocusNext","tagName","tbody","resizerHelper","fixColumnWidths","onDocumentMouseMove","columnResizing","onColumnResize","onDocumentMouseUp","onColumnResizeEnd","bindColumnResizeEvents","documentColumnResizeEndListener","unbindColumnResizeEvents","initColumnResize","resizeColumn","lastResizerHelperX","offsetLeft","columnWidth","newColumnWidth","nextColumn","nextColumnWidth","nextColumnMinWidth","scrollable","colGroup","resizeColumnIndex","containerWidth","bodyCols","onColumnDragStart","draggedColumn","findParentHeader","onColumnDragover","dropHeader","containerOffset","dropHeaderOffset","columnCenter","reorderIndicatorUp","iconHeight","reorderIndicatorDown","iconWidth","dropPosition","onColumnDragleave","onColumnDrop","dragIndex","dropIndex","hasFooter","footer","toggleRow","expandedRows","expandedRowIndex","findExpandedRowIndex","isRowExpanded","findExpandedRowGroupIndex","expandedRowsGroups","rowGroupField","isRowGroupExpanded","toggleRowGroup","exportCSV","csv","selectionOnly","cellData","msSaveOrOpenBlob","open","encodeURI","getRowStyleClass","rowStyleClass","rowClass","rowStyleMap","scrollWidth","frozenWidth","unfrozenWidth","hasFrozenColumns","DataTableModule","DeferredLoader","onLoad","documentScrollListener","ViewContainerRef","DeferModule","Dialog","minHeight","showHeader","blockScroll","minX","minY","autoAlign","focusOnShow","onHide","visibleChange","preventVisibleChangePropagation","executePostDisplayActions","positionOverlay","currentHeight","focusable","positionLeft","positionTop","unbindMaskClickListener","dragging","maskStyleClass","dismissableMask","maskClickListener","bodyChildren","hasBlockerMasks","bodyChild","onCloseMouseDown","closeIconMouseDown","initDrag","lastPageX","lastPageY","deltaX","deltaY","leftPos","topPos","endDrag","initResize","preWidth","resizing","onResize","contentHeight","newWidth","newHeight","onResizeEnd","bindDocumentDragListener","bindDocumentDragEndListener","bindDocumentResizeListeners","bindDocumentResponsiveListener","bindDocumentEscapeListener","unbindDocumentDragListener","unbindDocumentDragEndListener","unbindDocumentResizeListeners","unbindDocumentResponsiveListener","unbindDocumentEscapeListener","documentDragListener","documentDragEndListener","documentResizeListener","documentResizeEndListener","descendants","DialogModule","EDITOR_VALUE_ACCESSOR","Editor","onTextChange","onSelectionChange","onInit","editorElement","toolbarElement","quill","Quill","toolbar","readOnly","formats","pasteHTML","oldContents","getText","htmlValue","oldRange","editor","setText","getQuill","_readonly","enable","installedModules","l","getter","container_1","format_1","leaf_1","scroll_1","inline_1","block_1","embed_1","text_1","attributor_1","class_1","style_1","store_1","Registry","Parchment","Scope","Container","Format","Leaf","Embed","Scroll","Block","Inline","Text","Attributor","Attribute","Class","Style","Store","ParchmentError","BlotClass","Node","TEXT_NODE","bubble","DATA_KEY","blot","ANY","LEVEL","BLOCK","INLINE","getAttribute","TYPE","Definitions","Definition","blotName","attrName","keyName","tagNames","equal","op","NULL_CHARACTER","Delta","ops","newOp","retain","lastOp","unshift","chop","passed","failed","changeLength","iter","hasNext","nextOp","compose","thisIter","otherIter","firstOther","peek","firstLeft","peekType","peekLength","thisOp","otherOp","strings","prep","diffResult","opLength","INSERT","EQUAL","eachLine","newline","line","priority","transformPosition","nextType","hasOwn","toStr","gOPD","hasOwnConstructor","hasIsPrototypeOf","getProperty","copyIsArray","deep","_interopRequireDefault","_possibleConstructorReturn","ReferenceError","_inherits","subClass","superClass","bubbleFormats","_extend2","statics","BlockEmbed","_get","receiver","_extend","_quillDelta","_quillDelta2","_parchment","_parchment2","_break","_break2","_inline","_inline2","_text2","_Parchment$Embed","domNode","attribute","BLOCK_ATTRIBUTE","insertAt","BLOCK_BLOT","_Parchment$Block","_this2","leaf","lines","shift","ref","force","defaultChild","allowedChildren","_defineProperty","expandConfig","userConfig","clipboard","keyboard","history","DEFAULTS","import","_theme2","themeConfig","moduleNames","moduleConfig","moduleClass","debug","modify","modifier","strict","isEnabled","_emitter4","USER","oldDelta","change","shiftRange","setSelection","SILENT","_emitter","TEXT_CHANGE","emitter","EDITOR_CHANGE","_emitter2","overload","_typeof","API","_map2","_slicedToArray","_map3","_map4","Range","sliceIterator","_arr","_n","_d","_e","_s","_editor","_editor2","_emitter3","_module","_module2","_selection2","_logger","_logger2","_theme","__quill","addContainer","scrollingContainer","whitelist","addModule","SCROLL_UPDATE","mutations","lastRange","contents","setContents","overwrite","warn","refNode","setRange","_this3","_overload","_overload2","deleteText","_this4","formatLine","formatText","_this5","_overload3","_overload4","_this6","_overload5","_overload6","bounds","getBounds","containerBounds","bottom","getLength","_overload7","_overload8","getContents","getFormat","MAX_VALUE","getRange","_overload9","_overload10","embed","_this7","insertEmbed","_this8","_overload11","_overload12","insertText","off","dangerouslyPasteHTML","_this9","_overload13","_overload14","removeFormat","_this10","deleted","applied","applyDelta","_overload15","_overload16","_this11","_Parchment$Inline","compare","BLOT","isolate","moveChildren","selfIndex","otherIndex","TextBlot","_Parchment$Text","_eventemitter","_eventemitter2","_len","_key","_node$__quill$emitter","handleDOM","Emitter","_EventEmitter","_len2","_key2","_ref","handler","SCROLL_BEFORE_UPDATE","SCROLL_OPTIMIZE","SELECTION_CHANGE","Module","_console","console","logger","newLevel","isUndefinedOrNull","objEquiv","pSlice","deepEqual","ka","objectKeys","kb","actual","expected","attributeBit","ATTRIBUTE","canAdd","Code","_block","_block2","_Inline","CodeBlock","_Block","frag","_descendant","descendant","_descendant2","deleteAt","nextNewline","newlineIndex","prevNewline","isolateLength","formatAt","_descendant3","_descendant4","searchIndex","optimize","unwrap","combineFormats","combined","merged","normalizeDelta","_clone2","image","bullet","_op","_op2","_code","_code2","_cursor","_cursor2","_clone","_deepEqual","_deepEqual2","ASCII","getDelta","consumeNextNewline","scrollLength","batchStart","_scroll$line","_scroll$line2","_line$descendant","_line$descendant2","batchEnd","lengthRemaining","lineLength","codeIndex","codeLength","leaves","_path","formatsArr","blots","_scroll$line3","_scroll$line4","suffixLength","suffix","cursorIndex","textBlot","CONTENTS","oldText","newText","Selection","composing","mouseDown","savedRange","handleComposition","handleDragging","listenDOM","native","getNativeRange","textNode","setNativeRange","ignored","_context$range","startNode","startOffset","endNode","endOffset","restore","_format","nativeRange","collapsed","_scroll$leaf","_scroll$leaf2","_leaf$position","_leaf$position2","setStart","_scroll$leaf3","_scroll$leaf4","_leaf$position3","_leaf$position4","setEnd","side","normalizeNative","normalized","normalizedToRange","positions","_position","startContainer","endContainer","_scroll$leaf5","_scroll$leaf6","_leaf$position5","_leaf$position6","scrollBounds","addRange","rangeToNative","_getRange","_getRange2","Break","makeBlot","linked_list_1","shadow_1","ContainerBlot","forEachAt","lengthLeft","childBlot","refBlot","insertInto","memo","targetParent","inclusive","addedNodes","removedNodes","mutation","compareDocumentPosition","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_FOLLOWING","FormatBlot","replaceWith","replacement","move","LeafBlot","INLINE_BLOT","Iterator","lib","keepNull","retOp","_instanceof","includeNonEnumerable","nativeMap","nativeSet","nativePromise","__isArray","__isRegExp","__getRegExpFlags","__isDate","useBuffer","allParents","allChildren","keyChild","valueChild","entryChild","attrs","symbols","allPropertyNames","getOwnPropertyNames","__objToStr","re","ignoreCase","multiline","clonePrototype","isLine","_container","_container2","_Parchment$Scroll","batch","_line","_line2","_line3","_line4","_newlineIndex","getLines","observer","takeRecords","makeEmbedArrowHandler","_ref3","where","Keyboard","LEFT","RIGHT","_quill$getLeaf3","getLeaf","_quill2","handleBackspace","_quill$getLine11","getLine","_quill$getLine12","_quill$getLine13","_quill$getLine14","curFormats","prevFormats","handleDelete","nextLength","_quill$getLine15","_quill$getLine16","_quill$getLine17","_quill$getLine18","nextFormats","handleDeleteRange","firstFormats","lastFormats","handleEnter","lineFormats","makeCodeBlockHandler","indent","_quill$scroll$descend","_quill$scroll$descend2","scrollIndex","getIndex","makeFormatHandler","shortKey","SHORTKEY","_quill","platform","_Module","bindings","addBinding","ENTER","evt","defaultPrevented","_quill$getLine","_quill$getLine2","_quill$getLeaf","_quill$getLeaf2","leafStart","offsetStart","_ref2","leafEnd","offsetEnd","prefixText","suffixText","curContext","ESCAPE","UP","DOWN","cutoff","updateContents","_quill$getLine3","_quill$getLine4","_quill$getLine5","_quill$getLine6","_quill$getLine7","_quill$getLine8","_quill$getLine9","_quill$getLine10","Cursor","_length","restoreText","_Parchment$Container","ColorStyle","ColorClass","ColorAttributor","_Parchment$Attributor","_sanitize","protocols","anchor","protocol","Link","PROTOCOL_WHITELIST","SANITIZED_URL","toggleAriaAttribute","_keyboard","_keyboard2","_dropdown","_dropdown2","optionsCounter","Picker","buildPicker","togglePicker","hasAttribute","buildItem","buildLabel","buildOptions","selectedIndex","Event","isActive","_embed","_embed2","_scroll","_scroll2","_clipboard","_clipboard2","_history","_history2","ShadowBlot","parentBlot","refDomNode","AttributorStore","ClassAttributor","camelize","StyleAttributor","Theme","themes","GUARD_TEXT","contentNode","childNode","leftGuard","rightGuard","prevLength","AlignStyle","AlignClass","AlignAttribute","BackgroundStyle","BackgroundClass","_color","DirectionStyle","DirectionClass","DirectionAttribute","FontClass","FontStyle","FontStyleAttributor","SizeStyle","SizeClass","endsWithNewlineChange","getLastChangeIndex","deleteLength","changeIndex","History","lastRecorded","ignoreChange","userOnly","undo","redo","changeDelta","undoDelta","timestamp","maxStack","extractVideoUrl","fillSelect","BaseTooltip","_colorPicker","_colorPicker2","_iconPicker","_iconPicker2","_picker","_picker2","_tooltip","_tooltip2","ALIGNS","COLORS","FONTS","HEADERS","SIZES","BaseTheme","_Theme","textbox","pickers","picker","extendToolbar","buttons","icons","selects","handlers","formula","edit","fileInput","video","_Tooltip","boundsContainer","preview","linkRange","restoreFocus","LinkedList","curNode","curIndex","curLength","OBSERVER_CONFIG","characterData","characterDataOldValue","childList","subtree","ScrollBlot","MutationObserver","observe","disconnect","records","mark","markParent","previousSibling","grandChild","InlineBlot","BlockBlot","EmbedBlot","splitText","_toggle","DOMTokenList","searchString","subjectString","execCommand","diff_main","text1","text2","cursor_pos","DIFF_EQUAL","commonlength","diff_commonPrefix","commonprefix","diff_commonSuffix","commonsuffix","diffs","diff_compute_","diff_cleanupMerge","fix_cursor","fix_emoji","DIFF_INSERT","DIFF_DELETE","longtext","shorttext","hm","diff_halfMatch_","text1_a","text1_b","text2_a","text2_b","mid_common","diffs_a","diffs_b","diff_bisect_","text1_length","text2_length","max_d","v_offset","v_length","v1","v2","front","k1start","k1end","k2start","k2end","x1","k1_offset","y1","k2_offset","x2","diff_bisectSplit_","y2","text1a","text2a","text1b","text2b","diffsb","pointermin","pointermax","pointermid","pointerstart","pointerend","diff_halfMatchI_","best_longtext_a","best_longtext_b","best_shorttext_a","best_shorttext_b","seed","best_common","prefixLength","hm1","hm2","pointer","count_delete","count_insert","text_delete","text_insert","cursor_normalize_diff","current_pos","next_pos","split_pos","d_left","d_right","norm","ndiffs","cursor_pointer","d_next","merge_tuples","starts_with_pair_end","fixed_diffs","left_d","right_d","shim","supported","unsupported","supportsArgumentsClass","Events","EE","_eventsCount","eventNames","exists","available","ee","a1","a2","a3","a4","a5","removeListener","removeAllListeners","addListener","setMaxListeners","prefixed","applyFormat","_extend3","ELEMENT_NODE","deltaEndsWith","endText","traverse","elementMatchers","textMatchers","matcher","childrenDelta","DOM_KEY","matchAlias","matchAttributor","ATTRIBUTE_ATTRIBUTORS","STYLE_ATTRIBUTORS","matchBlot","matchBreak","matchIgnore","matchIndent","matchNewline","matchSpacing","nodeHeight","offsetTop","italic","fontWeight","bold","textIndent","matchText","whiteSpace","replacer","_align","_background","_direction","_font","_size","CLIPBOARD_CONFIG","Clipboard","onPaste","matchVisual","addMatcher","_prepareMatching","prepareMatching","_prepareMatching2","paste","_pair","Bold","addButton","addControls","control","addSelect","Toolbar","_ret","addHandler","_this$quill$selection","_this$quill$selection2","_quill$selection$getR","_quill$selection$getR2","prompt","clean","direction","_Picker","colorLabel","stroke","IconPicker","defaultItem","TEMPLATE","rootBounds","verticalShift","_base","_base2","_link","_link2","_icons","_icons2","TOOLBAR_CONFIG","SnowTheme","_BaseTheme","buildButtons","buildPickers","SnowTooltip","_BaseTooltip","_core","_core2","_indent","_blockquote","_blockquote2","_header2","_list","_list2","_bold","_bold2","_italic","_italic2","_script","_script2","_strike","_strike2","_underline","_underline2","_image","_image2","_video","_video2","_formula","_formula2","_syntax","_syntax2","_toolbar","_toolbar2","_bubble","_bubble2","_snow","_snow2","IndentClass","ListItem","IdentAttributor","Blockquote","List","_Container","listEventHandler","Italic","_Bold","Script","Strike","Underline","ATTRIBUTES","Video","_BlockEmbed","FormulaBlot","_Embed","katex","throwOnError","errorColor","Formula","CodeToken","SyntaxCodeBlock","_CodeBlock","_highlight","cachedText","Syntax","highlight","hljs","highlightAuto","BubbleTooltip","BubbleTheme","lastLine","_bounds","arrow","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","that","RangeError","encodingOrOffset","fromArrayBuffer","fromString","fromObject","assertSize","alloc","encoding","isEncoding","write","fromArrayLike","isnan","SlowBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","read","buf","indexSize","readUInt16BE","valLength","foundIndex","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","asciiToBytes","latin1Write","base64Write","ucs2Write","utf16leToBytes","base64","fromByteArray","firstByte","codePoint","bytesPerSequence","secondByte","thirdByte","fourthByte","tempCodePoint","decodeCodePointsArray","codePoints","MAX_ARGUMENTS_LENGTH","out","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","ieee754","writeDouble","base64clean","stringtrim","INVALID_BASE64_RE","leadSurrogate","byteArray","hi","lo","toByteArray","dst","INSPECT_MAX_BYTES","foo","subarray","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","swap16","swap32","swap64","inspect","thisStart","thisEnd","thisCopy","targetCopy","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","getLens","b64","validLen","lens","placeHoldersLen","_byteLength","Arr","curByte","revLookup","tripletToBase64","lookup","encodeChunk","uint8","extraBytes","len2","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","rt","LN2","Fieldset","collapsedChange","onBeforeToggle","onAfterToggle","expand","FieldsetModule","platform_browser_1","messages_1","progressbar_1","FileUpload","invalidFileSizeMessageSummary","invalidFileSizeMessageDetail","invalidFileTypeMessageSummary","invalidFileTypeMessageDetail","previewWidth","chooseLabel","uploadLabel","cancelLabel","showUploadButton","showCancelButton","onBeforeUpload","onBeforeSend","onUpload","onError","onProgress","uploadHandler","progress","fileTemplate","contentTemplate","toolbarTemplate","onFileSelect","isIE11","duplicateIEEvent","isFileSelected","isImage","objectURL","bypassSecurityTrustUrl","hasFiles","auto","upload","clearIEInput","clearInputElement","sFile","isFileTypeValid","maxFileSize","formatSize","acceptableTypes","acceptableTypes_1","isWildcard","getTypeClass","getFileExtension","fileType","onImageLoad","customUpload","xhr_1","XMLHttpRequest","lengthComputable","loaded","onreadystatechange","readyState","xhr","send","advancedFileInput","basicFileInput","dragHighlight","sizes","onSimpleUploaderClick","Galleria","panelWidth","panelHeight","frameWidth","frameHeight","activeIndex","showFilmstrip","autoPlay","transitionInterval","showCaption","onImageClicked","onImageChange","stripLeft","imagesChanged","stopSlideshow","_images","panelWrapper","stripWrapper","strip","images","panels","frames","caption","startSlideshow","slideshowActive","clickNavRight","clickNavLeft","frameClick","frame","reposition","newPanel","newFrame","frameLeft","stepFactor","frameViewportLeft","clickImage","GalleriaModule","GMap","onMapClick","onOverlayClick","onOverlayDragStart","onOverlayDrag","onOverlayDragEnd","onMapReady","onMapDragEnd","onZoomChanged","initialize","google","maps","overlays","setMap","bindOverlayEvents","getDraggable","bindDragEvents","clearInstanceListeners","getMap","GMapModule","Growl","onHover","sticky","initTimeout","handleValueChange","_sticky","preventRerender","removeAll","msgel","closeIconClick","msg","onMessageClick","onMessageHover","GrowlModule","InplaceDisplay","InplaceContent","Inplace","onActivate","onDeactivate","hover","InplaceModule","INPUTSWITCH_VALUE_ACCESSOR","InputSwitch","onLabel","offLabel","ariaLabelTemplate","onContainer","offContainer","onLabelChild","offLabelChild","onContainerWidth","offContainerWidth","spanPadding","handleMargins","handleWidth","labelWidth","uncheckUI","checkUI","updateAriaLabel","ariaLabel","InputSwitchModule","InputTextarea","rowsDefault","colsDefault","autoResize","resize","linesCount","InputTextareaModule","Lightbox","onImageClick","displayImage","preventDocumentClickListener","onLinkClick","currentImage","captionText","imageWidth","imageHeight","LightboxModule","LISTBOX_VALUE_ACCESSOR","Listbox","filterMode","showToggleAll","onDblClick","onOptionClick","checkboxClick","onOptionClickMultiple","onOptionClickSingle","optionTouched","onOptionTouchEnd","valueChanged","removeOption","allFilteredSelected","allSelected","isItemVisible","toggleAll","onDoubleClick","onCheckboxClick","MegaMenu","orientation","submenu","getColumnClass","columnClass","MegaMenuModule","MenuItemContent","menu","Menu","popup","preventDocumentDefault","onResizeTarget","currentTarget","hasSubMenu","MenuModule","MenubarSub","menuHoverActive","onItemMenuClick","autoDisplay","activeMenu","isEqualNode","menuClick","bindEventListener","Menubar","MenubarModule","UIMessage","MessageModule","MULTISELECT_VALUE_ACCESSOR","MultiSelect","defaultLabel","displaySelectedLabel","maxSelectedLabels","selectedItemsLabel","onPanelShow","onPanelHide","updateLabel","valuesAsString","findSelectionIndex","getVisibleOptions","isAllChecked","visibleOptions","filterInputChild","panelClick","itemLabel","findLabelByValue","OrderList","onReorder","onFilterEvent","listContainer","movedUp","movedDown","listItems","selectedItems","itemTouched","onItemTouchEnd","moveUp","listElement","selectedItem","movedItem","moveTop","moveDown","moveBottom","draggedItemIndex","dragdropScope","dragOverItemIndex","onListMouseMove","listViewChild","bottomDiff","topDiff","OrderListModule","OrganizationChartNode","onNodeClick","toggleNode","OrganizationChart","onNodeSelect","onNodeUnselect","templateMap","getTemplateForNode","eventTarget","OrganizationChartModule","OverlayPanel","dismissable","onBeforeShow","onAfterShow","onBeforeHide","onAfterHide","willShow","willHide","targetClickEvent","closeClick","onCloseClick","OverlayPanelModule","Panel","toggleable","PanelModule","BasePanelMenuItem","PanelMenuSub","PanelMenu","collapseAll","modelItem","PanelMenuModule","PickList","showSourceFilter","showTargetFilter","showSourceControls","showTargetControls","onMoveToSource","onMoveAllToSource","onMoveAllToTarget","onMoveToTarget","onSourceReorder","onTargetReorder","onSourceSelect","onTargetSelect","selectedItemsSource","selectedItemsTarget","reorderedListElement","onSourceItemDblClick","moveRight","onTargetItemDblClick","moveLeft","listType","filterValueSource","filterValueTarget","visibleOptionsSource","visibleOptionsTarget","isVisibleInList","sortByIndexInList","item1","item2","moveAllRight","movedItems","moveAllLeft","fromListType","draggedItemIndexSource","draggedItemIndexTarget","dragOverItemIndexSource","dragOverItemIndexTarget","onListItemDroppoint","listHighlightTarget","listHighlightSource","onListDrop","fromList","toIndex","toList","elementtomove","moveListType","listViewSourceChild","listViewTargetChild","onListDragLeave","sourceFilterViewChild","targetFilterViewChild","PickListModule","ProgressSpinner","strokeWidth","animationDuration","ProgressSpinnerModule","RADIO_VALUE_ACCESSOR","RadioButton","radioButton","RATING_VALUE_ACCESSOR","Rating","stars","iconOnClass","iconOffClass","iconCancelClass","onRate","onCancel","starsArray","rate","RatingModule","Schedule","aspectRatio","defaultView","allDaySlot","allDayText","slotDuration","scrollTime","minTime","slotEventOverlap","dragRevertDuration","dragOpacity","dragScroll","timeFormat","onDayClick","onEventClick","onEventMouseover","onEventMouseout","onEventDragStart","onEventDragStop","onEventDrop","onEventResizeStart","onEventResizeStop","onEventResize","onViewRender","onViewDestroy","onNavLinkDayClick","onNavLinkWeekClick","isRTL","rtl","weekends","hiddenDays","fixedWeekCount","weekNumbers","businessHours","eventLimit","droppable","eventStartEditable","eventDurationEditable","slotLabelInterval","snapDuration","nowIndicator","eventOverlap","eventConstraint","eventRender","dayRender","navLinks","dayClick","jsEvent","ui","resourceId","eventClick","eventMouseover","eventMouseout","eventDragStart","eventDragStop","eventDrop","revertFunc","_updateEvent","eventResizeStart","eventResizeStop","eventResize","viewRender","viewDestroy","navLinkDayClick","weekStart","navLinkWeekClick","ngOnChanges","schedule","fullCalendar","gotoDate","prevYear","nextYear","incrementDate","changeView","viewName","updateEvent","_findEvent","sourceEvent","ScrollPanel","timeoutFrame","moveBar","onXBarMouseDown","onYBarMouseDown","xBarViewChild","yBarViewChild","calculateContainerHeight","xBar","containerStyles","xBarStyles","pureContainerHeight","totalWidth","ownWidth","scrollXRatio","yBar","totalHeight","ownHeight","scrollYRatio","cssText","isYBarClicked","isXBarClicked","onMouseMoveForXBar","onMouseMoveForYBar","ScrollPanelModule","SELECTBUTTON_VALUE_ACCESSOR","SelectButton","itemIndex_1","findItemIndex","focusedItem","SelectButtonModule","SlideMenuSub","slideMenu","backLabel","listitem","menuWidth","SlideMenu","backwardElement","backwardViewChild","slideMenuContentElement","slideMenuContentViewChild","goBack","SlideMenuModule","SLIDER_VALUE_ACCESSOR","Slider","onSlideEnd","handleValues","handleIndex","onMouseDown","updateDomData","sliderHandleClick","bindDragListeners","onTouchStart","touchobj","changedTouches","startHandleValue","handleValue","startx","clientX","barWidth","starty","clientY","barHeight","onTouchMove","setValueFromHandle","onBarClick","calculateHandleValue","mouseupListener","unbindDragListeners","getValueFromHandle","handleStepChange","updateValue","updateHandleValue","isVertical","initX","initY","SliderModule","Sidebar","SidebarModule","router_2","SplitButton","menuVisible","onDefaultButtonClick","onDropdownButtonClick","dropdownClick","SplitButtonModule","Steps","activeIndexChange","StepsModule","TabViewNav","onTabClick","onTabCloseClick","getDefaultHeaderClass","headerStyleClass","clickTab","clickClose","TabPanel","_selected","TabView","_lazy","tabPanels","findSelectedTab","selectedTab","selectedTabIndex","preventActiveIndexPropagation","controlClose","closeTab","tabPanel","TabViewModule","TabMenu","TabMenuModule","terminalservice_1","Terminal","terminalService","commands","responseHandler","commandProcessed","handleCommand","sendCommand","TerminalService","TerminalModule","commandSource","responseSource","commandHandler","sendResponse","TieredMenuSub","TieredMenu","TieredMenuModule","TOGGLEBUTTON_VALUE_ACCESSOR","ToggleButton","checkboxViewChild","getIconClass","baseClass","onIcon","offIcon","ToggleButtonModule","ToolbarModule","UITreeNode","UITreeNode_1","getIcon","ICON_CLASS","isLeaf","onNodeCollapse","onNodeExpand","onNodeTouchEnd","onNodeRightClick","onDropPoint","dragNode","dragNodeIndex","dragNodeScope","isValidDropPointIndex","dragNodeTree","newNodeList","dragNodeSubNodes","subNodes","onNodeDrop","dropNode","draghoverPrev","draghoverNext","onDropPointDragOver","onDropPointDragEnter","onDropPointDragLeave","draggableNodes","draggableScope","onDragStop","onDropNodeDragOver","droppableNodes","onDropNode","draghoverNode","onDropNodeDragEnter","onDropNodeDragLeave","Tree","onNodeContextMenuSelect","layout","propagateSelectionUp","propagateSelectionDown","dragStartSubscription","dragStopSubscription","dragHover","isCheckboxSelectionMode","propagateDown","propagateUp","nodeTouched","selectedCount","childPartialSelected","partialSelected","index_2","isValidDragScope","dropScope","droppableScope","dropScope_1","dragScope_1","ds","UITreeRow","treeTable","labelExpand","labelCollapse","rowDblClick","onRowTouchEnd","TreeTable","toggleColumnIndex","columnsArr","TreeTableModule","TRISTATECHECKBOX_VALUE_ACCESSOR","TriStateCheckbox","TriStateCheckboxModule","recaptcha_component_1","recaptcha_module_1","recaptcha_v3_module_1","RecaptchaV3Module","recaptcha_v3_service_1","recaptcha_common_module_1","RecaptchaCommonModule","_dashboard","_taskboard","_tasklist","_taskview","_projectlist","_project","_projectview","_mailbox","_contact","_sprints","_schedulerComponent","_schedulerlistComponent","_eventslistComponent","_eventsComponent","_rol","_usershistory","_parameterlist","_parameters","_notfound","_notpermits","_product","_productlist","_typelist","_wiki","_requests","_approvals","_projectboard","_static","_burndown","_passwordrecovery","_usersettings","_preferences","_clientsettings","_dailyboard","_reports","_guideburndown","_guideprojectboard","_userguidelogin","_grouplist","_mysprint","_externalrequests","_externaltasklist","_loglist","_documents","_appTemplate2","_appTemplate","author","_headerTemplate2","_headerTemplate","alive","childs","total_tasks","total_comments","getNameUserNavBar","isLogged","getInfoNotifications","versionApp","getCheckVersion","notifyMe","noti_title","noti_description","noti_url","getMenuByUser","logOut","ntitle","nbody","nurl","alert","requireInteraction","onclick","Pipe","nx","xx","or","yy","orfield","jx","trail","currp","_applyDecoratedDescriptor","_dec3","_descriptor2","_taskviewTemplate2","_taskviewTemplate","userSharedTask","taskCriteria","commentsTaskJoin","tasktag","getExternal","myTaskId","myDbName","getProject","getRejected","getJoin","getInfoCriteriaTask","getProjectInfo","getprojectInfo","isEmptyObject","task_child","__WEBPACK_EXTERNAL_MODULE_0__","__WEBPACK_EXTERNAL_MODULE_3__","compensateScroll","rowEls","scrollbarWidths","uncompensateScroll","disableCursor","enableCursor","distributeHeight","els","availableHeight","shouldRedistribute","minOffset1","minOffset2","flexEls","flexOffsets","flexHeights","usedHeight","undistributeHeight","minOffset","naturalOffset","outerHeight","naturalHeight","matchCellWidths","maxInnerWidth","innerEl","outerWidth","subtractInnerElHeight","outerEl","both","getScrollParent","scrollParent","ownerDocument","getOuterRect","origin","getClientRect","getScrollbarWidths","getCssFloat","getContentRect","widths","leftRightWidth","bottomWidth","sanitizeScrollbarWidth","getIsLeftRtlScrollbars","_isLeftRtlScrollbars","computeIsLeftRtlScrollbars","border","overflow","isPrimaryMouseButton","getEvX","touches","getEvY","getEvIsTouch","preventSelection","allowSelection","intersectRects","rect1","rect2","constrainPoint","point","getRectCenter","diffPoints","point1","point2","parseFieldSpecs","specs","compareByFieldSpecs","fieldSpecs","obj1fallback","obj2fallback","compareByFieldSpec","fieldSpec","val1","val2","flexibleCompare","diffDayTime","moment","stripTime","diffDay","diffByUnit","computeGreatestUnit","unitsDesc","computeRangeAs","isInt","computeDurationGreatestUnit","durationInput","isDuration","as","divideRangeByDuration","dur","durationHasTime","asMonths","asDays","divideDurationByDuration","dur1","dur2","months1","months2","multiplyDuration","milliseconds","isNativeDate","isTimeString","mergeProps","propObjs","complexProps","complexObjs","copyOwnProps","hasOwnProp","hasOwnPropMethod","applyAll","thisObj","removeMatching","testFunc","removeCnt","removeExact","exactVal","isArraysEqual","a0","firstDefined","htmlEscape","stripHtmlEntities","cssToStr","cssProps","statements","attrsToStr","capitaliseFirstLetter","compareNumbers","immediate","later","callNow","dayIDs","compareUnzonedRanges","range1","range2","startMs","moment_ext_1","UnzonedRange","startInput","endInput","isStart","isEnd","isMoment","stripZone","endMs","invertRanges","ranges","constraintRange","dateRange","invertedRanges","otherRange","newRange","intersectsWith","containsRange","innerRange","containsDate","constrainDate","getStart","getEnd","tslib_1","ParsableModelMixin_1","Class_1","EventDefParser_1","EventSource","calendar","uuid","rawInput","applyProps","normalizeId","fetch","removeEventDefsById","eventDefId","removeAllEventDefs","getPrimitive","otherSource","parseEventDefs","rawEventDefs","eventDef","eventDefs","parseEventDef","calendarTransform","sourceTransform","eventDataTransform","applyManualStandardProps","rawProps","defineStandardProps","copyVerbatimStandardProps","mixInto","textColor","startEditable","durationEditable","rendering","overlap","constraint","allDayDefault","Mixin_1","guid","ListenerMixin","listenTo","getListenerNamespace","stopListeningTo","listenerId","EventDef_1","EventInstance_1","EventDateProfile_1","SingleEventDef","buildInstances","buildInstance","dateProfile","isAllDay","rezone","superSuccess","miscProps","allDay","oldMomentFormat","mom","formatStr","oldMomentProto","makeMoment","parseAsUTC","parseZone","isAmbigTime","isAmbigZone","ambigMatch","isSingleString","util_1","ambigDateOfMonthRegex","ambigTimeOrZoneRegex","_ambigTime","_ambigZone","utcOffset","_fullCalendar","newMomentProto","momentProperties","momentExt","hasTime","weeks","weekCalc","_fullCalendar_weekCalc","isoWeek","dayHours","wasAmbigTime","hasZone","local","keepLocalTime","tzo","ComponentFootprint","unzonedRange","toLegacy","msToMoment","EmitterMixin","_prepareIntercept","one","intercept","triggerHandler","triggerWith","hasHandlers","Interaction","_getView","Mixin","destClass","mixOver","UnzonedRange_1","EventDateProfile","buildUnzonedRange","forcedAllDay","forceEventDuration","isValid","isAfter","getDefaultEventEnd","isStandardProp","propName","isHitsEqual","hit0","hit1","isHitPropsWithin","subHit","superHit","DragListener_1","HitDragListener","handleInteractionStart","subjectRect","origPoint","subjectEl","hitsNeeded","computeScrollBounds","origHit","queryHit","subjectCenter","coordAdjust","handleDragStart","hit","handleHitOver","handleDrag","dx","dy","handleHitOut","handleDragEnd","handleHitDone","isOrig","handleInteractionEnd","isCancelled","hitsNotNeeded","handleScrollEnd","isDragging","releaseHits","prepareHits","internalApiVersion","date_formatting_1","formatRange","queryMostGranularFormatUnit","locale_1","datepickerLocale","getMomentLocaleData","populateInstanceComputableOptions","util_2","eventDefsToEventInstances","eventFootprintToComponentFootprint","eventInstanceToEventRange","eventInstanceToUnzonedRange","eventRangeToEventFootprint","EmitterMixin_1","ListenerMixin_1","Model_1","Model","Constraints_1","Constraints","DateProfileGenerator_1","DateProfileGenerator","ComponentFootprint_1","BusinessHourGenerator_1","BusinessHourGenerator","EventPeriod_1","EventPeriod","EventManager_1","EventManager","EventDef","EventDefMutation_1","EventDefMutation","EventDefParser","EventInstance","EventRange_1","EventRange","RecurringEventDef_1","RecurringEventDef","SingleEventDef_1","EventDefDateMutation_1","EventDefDateMutation","EventSourceParser_1","EventSourceParser","EventSource_1","ThemeRegistry_1","defineThemeSystem","getThemeSystemClass","EventInstanceGroup_1","EventInstanceGroup","ArrayEventSource_1","ArrayEventSource","FuncEventSource_1","FuncEventSource","JsonFeedEventSource_1","JsonFeedEventSource","EventFootprint_1","EventFootprint","CoordCache_1","CoordCache","Iterator_1","DragListener","HitDragListener_1","MouseFollower_1","MouseFollower","ParsableModelMixin","Popover_1","Popover","Promise_1","TaskQueue_1","TaskQueue","RenderQueue_1","RenderQueue","Scroller_1","Scroller","Theme_1","Component_1","DateComponent_1","DateComponent","InteractiveDateComponent_1","InteractiveDateComponent","Calendar_1","View_1","View","ViewRegistry_1","defineView","getViewConfig","DayTableMixin_1","DayTableMixin","BusinessHourRenderer_1","BusinessHourRenderer","EventRenderer_1","EventRenderer","FillRenderer_1","FillRenderer","HelperRenderer_1","HelperRenderer","ExternalDropping_1","ExternalDropping","EventResizing_1","EventResizing","EventPointing_1","EventPointing","EventDragging_1","EventDragging","DateSelecting_1","DateSelecting","DateClicking_1","DateClicking","Interaction_1","StandardInteractionsMixin_1","StandardInteractionsMixin","AgendaView_1","AgendaView","TimeGrid_1","TimeGrid","TimeGridEventRenderer_1","TimeGridEventRenderer","TimeGridFillRenderer_1","TimeGridFillRenderer","TimeGridHelperRenderer_1","TimeGridHelperRenderer","DayGrid_1","DayGrid","DayGridEventRenderer_1","DayGridEventRenderer","DayGridFillRenderer_1","DayGridFillRenderer","DayGridHelperRenderer_1","DayGridHelperRenderer","BasicView_1","BasicView","BasicViewDateProfileGenerator_1","BasicViewDateProfileGenerator","MonthView_1","MonthView","MonthViewDateProfileGenerator_1","MonthViewDateProfileGenerator","ListView_1","ListView","ListEventPointing_1","ListEventPointing","ListEventRenderer_1","ListEventRenderer","eventInstances","eventInstance","eventRange","eventFootprint","componentFootprint","getAllEventRanges","sliceNormalRenderRanges","sliceRenderRanges","isInverse","sliceInverseRenderRanges","slicedRange","slicedEventRanges","unzonedRanges","ownerDef","getEventDef","hasInverseRendering","explicitEventDef","attachImmediatelyResolvingThen","onResolve","PromiseStub","attachImmediatelyRejectingThen","onReject","construct","executor","deferred","Deferred","optionsManager","processIconOverride","iconOverrideOption","setIconOverride","iconOverrideHash","iconClassesCopy","buttonName","applyIconOverridePrefix","iconOverridePrefix","getClass","baseIconClass","getCustomButtonIconClass","customButtonProps","iconOverrideCustomButtonOption","exportHooks","touchMouseIgnoreWait","globalEmitter","neededCount","GlobalEmitter","isTouching","mouseIgnoreDepth","needed","unneeded","unbind","touchstart","handleTouchStart","touchcancel","handleTouchCancel","touchend","handleTouchEnd","handleMouseDown","mousemove","handleMouseMove","handleMouseUp","selectstart","handleSelectStart","contextmenu","handleContextMenu","handleTouchMoveProxy","handleTouchMove","passive","handleScrollProxy","handleScroll","stopTouch","shouldIgnoreMouse","skipMouseIgnore","startTouchMouseIgnore","viewConfig","viewHash","views","instanceComputableOptions","localeCode","dpLocaleCode","dpOptions","fcOptions","localeOptionHash","weekNumberTitle","weekHeader","dpComputableOptions","jqDatePicker","datepicker","regional","en","setDefaults","newFcOptions","momOptions","options_1","mergeOptions","momComputableOptions","globalDefaults","localeData","locales","buttonText","prevText","nextText","currentText","monthYearFormat","showMonthAfterYear","yearSuffix","dayOfMonthFormat","longDateFormat","mediumTimeFormat","smallTimeFormat","extraSmallTimeFormat","noMeridiemTimeFormat","smallDayDateFormat","weekFormat","smallWeekFormat","englishDefaults","optionObjs","complexOptions","titleRangeSeparator","defaultTimedEventDuration","defaultAllDayEventDuration","nextDayThreshold","columnHeader","weekNumberCalculation","showNonCurrentDates","lazyFetching","startParam","endParam","timezoneParam","agendaEventMinHeight","unselectAuto","dropAccept","eventOrder","eventLimitText","eventLimitClick","dayPopoverFormat","handleWindowResize","windowResizeDelay","longPressDelay","rtlDefaults","buttonIcons","themeButtonIcons","getEventLegacy","members","SubClass","eventInput","generateId","rawId","getRendering","hasBgRendering","getConstraint","getOverlap","isStartExplicitlyEditable","isDurationExplicitlyEditable","isExplicitlyEditable","applyMiscProps","sourceClasses","registerClass","EventSourceClass","eventSource","createFromRawProps","largeUnit","dateMutation","defMutation","dateProps","standardProps","verbatimStandardProps","createFromDiff","mutateSingle","origDateProfile","buildNewDateProfile","setDateMutation","clearEnd","forceTimed","forceAllDay","dateProfile0","dateProfile1","subtractDates","date0","dateDelta","endDiff","endDelta","setDateDelta","setEndDelta","eventDateProfile","shouldRezone","startDelta","applyTimezone","setStartDelta","overflowX","overflowY","renderEl","applyOverflow","scrollEl","setHeight","lockOverflow","getScrollTop","setScrollTop","getClientWidth","getClientHeight","GlobalEmitter_1","segSelector","dateSelectingClass","dateClicking","dateClickingClass","dateSelecting","eventPointingClass","eventPointing","eventDraggingClass","eventDragging","eventResizingClass","eventResizing","externalDroppingClass","externalDropping","setElement","bindToEl","bindAllSegHandlersToEl","removeElement","endInteractions","executeEventUnrender","bindGlobalHandlers","bindToDocument","unbindGlobalHandlers","unbindFromDocument","bindDateHandlerToEl","eventInteraction","bindSegHandlerToEl","segEl","seg","shouldIgnoreEventPointing","shouldIgnoreTouch","selectedEvent","isResizing","canStartSelection","canStartResize","isEventDefDraggable","footprint","isEventDefResizable","canStartDrag","isEventDefSelected","interaction","isEventDefStartEditable","isEditable","isEventDefGenerallyEditable","isEventDefResizableFromStart","isEventDefResizableFromEnd","isResizable","diffDates","isEventInstanceGroupAllowed","eventInstanceGroup","eventFootprints","eventRangesToEventFootprints","validUnzonedRange","constraints","isExternalInstanceGroupAllowed","isSelectionFootprintAllowed","viewSpec","batchRenderDepth","initRenderQueue","initHiddenDays","dateProfileGenerator","dateProfileGeneratorClass","bindBaseRenderHandlers","eventOrderSpecs","renderQueue","onRenderQueueStart","onRenderQueueStop","startBatchRender","stopBatchRender","freezeContentHeight","addScroll","queryScroll","updateViewSize","popScroll","thawContentHeight","resume","requestRender","actionType","queue","whenSizeUpdated","isRunning","computeTitle","currentRangeUnit","currentUnzonedRange","activeUnzonedRange","isRangeAllDay","computeTitleFormat","currentDateProfile","newDateProfile","unsetDate","fetchInitialEvents","usesMinMaxTime","requestEvents","bindEventChanges","resetEvents","unbindEventChanges","setEvents","eventsPayload","unsetEvents","requestDateRender","executeDateRender","requestDateUnrender","executeDateUnrender","isDateInit","startNowIndicator","unselect","stopNowIndicator","triggerViewRender","triggerViewDestroy","publiclyTrigger","requestEventsRender","executeEventRender","triggerAfterEventsRendered","requestEventsUnrender","triggerBeforeEventsDestroyed","requestBusinessHoursRender","businessHourGenerator","renderBusinessHours","requestBusinessHoursUnrender","unrenderBusinessHours","processUnselect","handleDocumentMousedown","getNowIndicatorUnit","initialNowDate","getNow","initialNowQueriedMs","startOf","nowIndicatorTimeoutID","nowIndicatorIntervalID","updateNowIndicator","isDatesRendered","unrenderNowIndicator","renderNowIndicator","isNowIndicatorRendered","updateSize","isAuto","isResize","queuedScroll","applyQueuedScroll","applyScroll","queryDateScroll","computeInitialDateScroll","applyDateScroll","reportEventDrop","eventMutation","eventManager","undoFunc","mutateEventsWithId","triggerEventDrop","reportExternalDrop","singleEventDef","isEvent","isSticky","addEventDef","triggerExternalDrop","reportEventResize","resizeDelta","triggerEventResize","renderSelectionFootprint","reportSelection","triggerSelect","footprintToDateProfile","unrenderSelection","selectEventInstance","selectedEventInstance","unselectEventInstance","getEventSegs","processRangeUnselect","processEventUnselect","ignore","closest","triggerBaseRendered","triggerBaseUnrendered","triggerDayClick","dayEl","isDateInOtherMonth","getUnzonedRangeOption","parseUnzonedRange","isHiddenDayHash","dayCnt","inArray","trimHiddenDays","inputUnzonedRange","skipHiddenDays","isHiddenDay","inc","isExclusive","watch","initialEvents","intervalStart","intervalEnd","fillRenderer","rangeUpdated","displayEventTime","displayEventEnd","eventTimeFormat","computeEventTimeFormat","computeDisplayEventTime","computeDisplayEventEnd","instanceGroup","eventRanges","_getDateProfile","bgRanges","fgRanges","renderBgRanges","renderFgRanges","unrender","unrenderBgRanges","unrenderFgRanges","segs","eventFootprintsToSegs","renderFgSegEls","renderFgSegs","fgSegs","unrenderFgSegs","renderBgSegs","bgSegs","unrenderBgSegs","getSegs","renderSegs","getBgClasses","getCss","getBgColor","filterEl","filterEventRenderEl","disableResizing","hasEventRenderHandlers","hasPublicHandlers","renderedSegs","beforeFgSegHtml","fgSegHtml","getSegClasses","isDraggable","legacy","custom","getTimeText","displayEnd","_getTimeText","classNames","objs","getStylingObjs","eventClassName","getSkinCss","getBorderColor","getTextColor","eventBackgroundColor","eventColor","eventBorderColor","eventTextColor","getFallbackStylingObjs","sortEventSegs","compareEventSegs","seg1","seg2","f1","f2","cf1","cf2","r1","r2","englishMoment","renderFakeFormatString","getParsedFormatString","fakeFormatString","renderParsedFormat","parsedFormat","leftI","rightI","middleI","sameUnits","unzonedDate1","unzonedDate2","renderedParts1","renderFakeFormatStringParts","renderedParts2","leftStr","rightStr","middleStr1","middleStr2","middleStr","isSame","processMaybeMarkers","parsedFormatStrCache","parseFormatString","chunks","chunkFormatString","buildFakeFormatString","buildSameUnits","chunker","splitStringLiteral","maybe","specialTokens","SPECIAL_TOKEN_MARKER","MAYBE_MARKER","PART_SEPARATOR","tokenInfo","largeTokenMap","fakePart","fakeRender","fakeParts","MAYBE_REGEXP","m0","m1","candidate","best","toISOString","T","Y","M","W","w","D","_watchers","_props","applyGlobalWatchers","constructed","_globalWatchArgs","newProps","setProps","oldProps","changeset","changedProps","changedCnt","depList","startFunc","stopFunc","unwatch","_watchDeps","watcher","queuedChangeCnt","depCnt","satisfyCnt","bindTuples","isCallingStop","onBeforeDepChange","depName","isOptional","onDepChange","flash","propDefs","standardPropMap","manualProps","zonedDayStart","instanceStart","instanceEnd","unzonedDate","unzonedEnd","instances","isBefore","dowHash","setDow","dowNumbers","dow","msToUtcMoment","buildPrev","prevDate","dateIncrement","buildNext","nextDate","forceToValid","currentInfo","renderUnzonedRange","isDateAllDay","buildValidRange","buildCurrentRangeInfo","buildRenderRange","adjustActiveRange","buildDateIncrement","dayCount","durationUnit","buildRangeFromDuration","buildRangeFromDayCount","buildCustomVisibleRange","getFallbackDuration","computeRes","alignment","dateIncrementInput","dateIncrementDuration","customAlignment","runningCount","visibleUnzonedRange","fallback","setRawEventDefs","currentTimezone","themeName","themeClass","themeClassHash","themeSetting","JqueryUiTheme_1","StandardTheme_1","isHorizontal","forcedOffsetParentEl","offsetParentEl","boundingRect","queryBoundingRect","buildElHorizontals","buildElVerticals","lefts","rights","tops","bottoms","ensureBuilt","getHorizontalIndex","leftOffset","getVerticalIndex","topOffset","getLeftOffset","getLeftPosition","getRightOffset","getRightPosition","getTopOffset","topIndex","getTopPosition","getBottomOffset","getBottomPosition","scrollParentEl","isPointInBounds","isLeftInBounds","isTopInBounds","isInteracting","isDistanceSurpassed","isDelayEnded","isTouch","isGeneric","shouldCancelTouchScroll","scrollAlwaysKills","isAutoScroll","scrollSensitivity","scrollSpeed","scrollIntervalMs","startInteraction","extraOptions","minDistance","distance","originX","originY","bindHandlers","initAutoScroll","startDelay","handleDistanceSurpassed","endInteraction","delayTimeoutId","destroyAutoScroll","unbindHandlers","handleMove","dragstop","touchmove","handleTouchScroll","updateAutoScroll","initialEv","handleDelayEnd","handleDebouncedScroll","endAutoScroll","topCloseness","bottomCloseness","leftCloseness","rightCloseness","sensitivity","topVel","leftVel","setScrollVel","scrollTopVel","scrollLeftVel","constrainScrollVel","scrollIntervalId","scrollIntervalFunc","frac","updateDayTable","daysPerRow","rowCnt","dayIndices","dayDates","breakOnWeeks","updateDayTableCols","colCnt","computeColCnt","colHeadFormat","computeColHeadFormat","getCellDate","getCellDayIndex","getCellRange","getColDayIndex","getDateDayIndex","dayOffset","sliceRangeByRow","rowFirst","rowLast","segFirst","segLast","normalRange","computeDayRange","rangeFirst","rangeLast","firstRowDayIndex","lastRowDayIndex","sliceRangeByDay","renderHeadHtml","renderHeadTrHtml","renderHeadIntroHtml","renderIntroHtml","renderHeadDateCellsHtml","htmls","renderHeadDateCellHtml","colspan","otherAttrs","innerHtml","isDateValid","getDayClasses","buildGotoAnchorHtml","forceOff","renderBgTrHtml","renderBgIntroHtml","renderBgCellsHtml","renderBgCellHtml","bookendCells","trEl","introHtml","prepend","buildEventInstanceGroup","hasAllDayBusinessHours","renderEventFootprints","fillSegTag","elsByFill","renderFootprint","componentFootprintToSegs","buildSegEls","attachSegEls","reportEls","buildSegHtml","eventRenderer","renderComponentFootprint","fabricateEventFootprint","renderEventDraggingFootprints","sourceSeg","renderEventResizingFootprints","extraClassNames","helperEls","dummyInstance","dummyEvent","handleMouseover","handleMouseout","mousedOverSeg","cellWeekNumbersVisible","bottomCoordPadding","isRigid","leftCol","rightCol","renderDates","renderGrid","unrenderDates","removeSegPopover","headContainerEl","renderDayRowHtml","cellEls","rowCoordCache","colCoordCache","getCellEl","getIsNumbersVisible","renderNumberTrHtml","getIsDayNumbersVisible","renderNumberIntroHtml","renderNumberCellsHtml","renderNumberCellHtml","weekCalcFirstDoW","isDayNumberVisible","getCellHit","getHitFootprint","getHitEl","getOwnEventSegs","popoverSegs","renderDrag","renderHighlight","helperRenderer","unrenderDrag","unrenderHighlight","renderEventResize","unrenderEventResize","segPopover","limitRows","levelLimit","rowLevelLimit","rowStructs","unlimitRow","computeRowLevelLimit","limitRow","iterInnerHeights","trHeight","rowEl","trEls","tbodyEl","levelSegs","cellMatrix","limitedNodes","segsBelow","totalSegsBelow","colSegsBelow","td","rowspan","segMoreNodes","moreTd","moreWrap","moreLink","rowStruct","moreNodes","emptyCellsUntil","endCol","getCellSegs","renderMoreLink","segLevels","moreEls","limitedEls","hiddenSegs","getMoreLinkText","clickOption","moreEl","allSegs","reslicedAllSegs","resliceDaySegs","reslicedHiddenSegs","showSegPopover","zoomTo","topEl","renderSegPopoverContent","parentEl","autoHide","viewportConstrain","triggerBeforeEventSegsDestroyed","triggerAfterEventSegsRendered","segContainer","dayDate","dayStart","dayEnd","dayRange","newSegs","startLevel","segMatrix","eventRendererClass","businessHourRendererClass","helperRendererClass","fillRendererClass","makeDayGridSubclass","SuperClass","colWeekNumbersVisible","weekNumberStyleAttr","dayGrid","instantiateDayGrid","hasRigidRows","addChild","scroller","dayGridClass","renderSkeleton","dayGridContainerEl","dayGridEl","renderSkeletonHtml","unrenderSkeleton","weekNumberWidth","scrollerHeight","headRowEl","computeScrollerHeight","setGridHeight","isOverlapsAllowedByFunc","overlapEventFootprints","overlapFunc","subjectEventInstance","isOverlapEventInstancesAllowed","overlapEventInstance","overlapEventDef","overlapVal","subjectLegacyInstance","_calendar","peerEventInstances","getPeerEventInstances","peerEventRanges","peerEventFootprints","constraintVal","eventAllowFunc","isFootprintAllowed","getEventInstancesWithoutId","selectAllowFunc","getEventInstances","constraintFootprints","constraintValToFootprints","isFootprintWithinConstraints","collectOverlapEventFootprints","footprintContainsFootprint","buildCurrentBusinessFootprints","parseEventDefToInstances","eventInstancesToFootprints","parseFootprints","getEventInstancesWithId","targetFootprint","footprintsIntersect","currentPeriod","eventRangeToEventFootprints","outerFootprint","innerFootprint","footprint0","footprint1","BUSINESS_HOUR_EVENT_DEFAULTS","rawComplexDef","buildEventDefs","rawDefs","requireDow","buildEventDef","rawDef","fullRawDef","pendingCnt","freezeDepth","stuntedReleaseCnt","releaseCnt","requestsByUid","eventDefsByUid","eventDefsById","eventInstanceGroupsById","isWithinRange","requestSources","freeze","requestSource","thaw","addEventDefs","tryRelease","purgeSource","removeEventDef","purgeAllSources","completedCnt","getEventDefByUid","eventDefUid","getEventDefsById","addEventInstance","removeEventInstancesForDef","matchingInstances","currentEventInstance","release","whenReleased","isSourcesEquivalent","source0","source1","stickySource","otherSources","setPeriod","addSource","removeSource","doomedSource","removeAllSources","refetchSource","refetchAllSources","getSources","multiQuerySources","matchInputs","matchingSources","querySources","matchInput","getSourceById","grep","eventPeriod","unbindPeriod","bindPeriod","eventId","eventDefMutation","undoFuncs","buildMutatedEventInstanceGroup","defCopy","allInstances","StandardTheme","widgetHeader","widgetContent","buttonGroup","cornerLeft","cornerRight","stateDefault","stateActive","stateDisabled","stateHover","stateDown","popoverHeader","popoverContent","headerRow","dayRow","listView","JqueryUiTheme","pushLoading","popLoading","ajaxSettings","onSuccess","requestParams","buildRequestParams","ajax","AJAX_DEFAULTS","callbackRes","statusText","errorThrown","customRequestParams","proxyCall","sourceEl","isFollowing","isHidden","isAnimating","y0","x0","topDelta","leftDelta","updatePosition","stop","shouldRevert","revertDuration","top0","left0","getEl","additionalClass","sourceOffset","documentMousedown","viewportTop","viewportLeft","viewportOffset","windowEl","viewportEl","q","isPaused","tryStart","getIsIdle","canRunNext","runRemaining","runTask","waitsByNamespace","taskFunc","waitMs","waitNamespace","delayWait","clearWait","compoundTask","startWait","spawnWait","waitId","newTask","shouldAppend","convertEventsPayloadToLegacyArray","legacyEvents","hitsNeededDepth","childrenByUid","businessHourRenderer","callChildren","_getCalendar","getBusinessHourSegs","getOwnBusinessHourSegs","iterChildren","showEventsWithId","hideEventsWithId","renderedHelper","getSafeHitFootprint","eventFootprintToSegs","gotoOptions","finalOptions","getAllDayHtml","noThemeHighlight","currentRangeAs","startDay","endTimeMS","endDay","isMultiDayRange","filterLegacyEventInstances","legacyEventInstances","legacyQuery","legacyEventInstance","Toolbar_1","OptionsManager_1","ViewSpecManager_1","overrides","loadingLevel","ignoreUpdateViewSize","freezeContentHeightDepth","viewsByType","viewSpecManager","initMomentInternals","initCurrentDate","initEventManager","triggerInfo","optHandler","newOptionHash","instantiateView","viewType","spec","getViewSpec","isValidViewType","dateOrRange","recordOverrides","visibleRange","currentDate","renderView","newDate","getUnitViewSpec","defaultDateInput","prevInfo","nextInfo","zonedDateInput","contentEl","elementVisible","calcSize","initialRender","anchorEl","customAction","themeSystem","widgetClass","prependTo","initToolbars","renderHeader","renderFooter","windowResizeProxy","windowResize","clearView","toolbarsManager","bindViewHandlers","setToolbarsTitle","updateToolbarButtons","unbindViewHandlers","newView","oldView","currentView","reinitView","getSuggestedViewHeight","suggestedViewHeight","isHeightAuto","_calcSize","contentHeightInput","heightInput","queryToolbarsHeight","forceFreezeContentHeight","computeHeaderOptions","computeFooterOptions","extraClasses","setToolbarOptions","todayInfo","zonedStartInput","zonedEndInput","buildSelectFootprint","_week","_months","_monthsShort","_weekdays","_weekdaysShort","localizeMoment","getIsAmbigTimezone","adjustedZonedDate","zonedDate","timeAdjust","asMilliseconds","ignoreEnd","humanizeDuration","humanize","rangeInput","rawSources","singleRawSource","rawSource","getEventEnd","zonedStart","rerenderEvents","refetchEvents","renderEvents","eventInputs","renderEvent","removeEvents","legacyInstances","idMap","clientEvents","updateEvents","eventPropsArray","eventProps","getEventSources","getEventSourceById","addEventSource","sourceInput","removeEventSources","sourceMultiQuery","removeEventSource","sourceQuery","refetchEventSources","getDraggedElMeta","stick","dataAttrPrefix","dragstart","sortstart","listenToExternalDrag","interactionStart","hitOver","mutatedEventInstanceGroup","isAllowed","hitFootprint","computeExternalDrop","hitOut","hitDone","interactionEnd","buildDragListener","resizeMutation","segResizeStart","origHitFootprint","computeEventStartResizeMutation","computeEventEndResizeMutation","segResizeStop","startFootprint","endFootprint","origEventFootprint","origRange","getSelectionDelay","handleMousedown","buildSelectListener","mouseFollower","segDragStart","origFootprint","computeEventDropMutation","segDragStop","computeEventDateMutation","getDelay","selectionFootprint","computeSelection","wholeFootprint","computeSelectionFootprint","dayClickHit","groupEventFootprintsByAllDay","timed","agendaTimeGridMethods","agendaDayGridMethods","timeGrid","instantiateTimeGrid","timeGridClass","timeGridWrapEl","timeGridEl","axisStyleAttr","axisWidth","colEls","noScrollRowEls","bottomRuleEl","getTotalSlatHeight","computeTimeTop","dayEventsPayload","timedEventsPayload","weekText","AGENDA_STOCK_SUB_DURATIONS","processOptions","sliceRangeByTimes","segRange","dayRanges","snapsPerSlot","labelFormat","labelInterval","computeLabelInterval","slotsPerLabel","renderSlats","renderColumns","unrenderColumns","slatContainerEl","renderSlatRowHtml","slatEls","slatCoordCache","slotDate","isLabeled","axisHtml","slotTime","slotIterator","renderContentSkeleton","unrenderContentSkeleton","skeletonEl","cellHtml","contentSkeletonEl","colContainerEls","helperContainerEls","fgContainerEls","bgContainerEls","highlightContainerEls","businessContainerEls","groupSegsByCol","segsByCol","attachSegsByCol","containerEls","computeDateTop","nowIndicatorEls","updateSegVerticals","businessSegs","startOfDayDate","slatIndex","slatRemainder","slatCoverage","computeSegVerticals","assignSegVerticals","eventMinHeight","generateSegVerticalCss","colIndex","slatTop","slatHeight","localSnapIndex","snapIndex","snapTop","snapBottom","snap","computeSnapTime","buildSlotSegLevels","computeSlotSegCollisions","computeForwardSlotSegs","forwardSegs","computeSlotSegPressures","forwardSeg","forwardPressure","otherSegs","isSlotSegCollision","renderFgSegsIntoContainers","updateFgSegCoords","timeText","fullTimeText","startTimeText","isResizableFromStart","isResizableFromEnd","skinCss","zonedEnd","computeFgSegHorizontals","assignFgSegHorizontals","level0","computeFgSegForwardBack","seriesBackwardPressure","seriesBackwardCoord","forwardCoord","sortForwardSegs","backwardCoord","compareForwardSegs","generateFgSegHorizontalCss","shouldOverlap","helperNodes","isDaySegCollision","otherSeg","compareDaySegCols","renderSegRows","rowNode","segRows","groupSegRows","renderSegRow","rowSegs","loneCellMatrix","tr","buildSegLevels","levelCnt","titleHtml","timeHtml","skeletonTopEl","skeletonTop","renderFillRow","startCol","viewEnd","renderEmptyMessage","renderSegList","daySegs","segsByDay","groupSegsByDay","tableEl","dayHeaderHtml","mainFormat","altFormat","bgColor","isDefaultPrevented","_element","singleRes","removeData","toolbarOptions","viewsWithButtons","newToolbarOptions","sections","renderSection","sectionEl","buttonStr","calendarCustomButtons","calendarButtonTextOverrides","calendarButtonText","buttonGroupStr","groupEl","groupChildren","isOnlyButtons","buttonClick","buttonIcon","buttonInnerHtml","buttonClasses","buttonEl","buttonAriaAttr","buttonTextOverride","buttonTextDefault","not","updateTitle","activateButton","deactivateButton","disableButton","enableButton","getViewsWithButtons","OptionsManager","dynamicOverrides","compute","optionName","optionCnt","localeDefaults","dirDefaults","rawOptions","clearCache","ViewSpecManager","viewSpecCache","buildViewSpec","viewTypes","singleUnit","requestedViewType","viewOverrides","specChain","defaultsChain","overridesChain","buildViewSpecOptions","buildViewSpecButtonText","queryButtonText","buttonTextKey","Bootstrap3Theme_1","Bootstrap4Theme_1","Bootstrap3Theme","tableGrid","tableList","tableListHeading","popover","Bootstrap4Theme","listDayFormat","noEventsMessage","listDayAltFormat","_projectviewTemplate2","_projectviewTemplate","myProjectId","stylize","stylizeNoColor","colors","showHidden","customInspect","stylizeWithColor","styleType","arrayToHash","recurseTimes","primitive","formatPrimitive","visibleKeys","formatError","base","braces","toUTCString","formatArray","formatProperty","reduceToSingleString","simple","numLinesEst","ar","isNullOrUndefined","isPrimitive","callbackifyOnRejected","cb","newReason","callbackify","callbackified","maybeCb","nextTick","rej","getOwnPropertyDescriptors","descriptors","formatRegExp","objects","deprecate","deprecated","warned","throwDeprecation","traceDeprecation","noDeprecation","debugEnviron","debugs","debuglog","env","NODE_DEBUG","pid","inherits","kCustomPromisifiedSymbol","promisify","promiseResolve","promiseReject","defaultSetTimout","defaultClearTimeout","runTimeout","cachedSetTimeout","runClearTimeout","marker","cachedClearTimeout","cleanUpNextTick","draining","currentQueue","queueIndex","drainQueue","Item","argv","versions","prependListener","prependOnceListener","cwd","chdir","umask","ctor","superCtor","super_","TempCtor","redirectTo","pathMatch"],"mappings":"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AK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IA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,iBACAlC,iBACHsC,cACEG,gBACSgI,yBACH+R,sBACPrR,gBAfLu4E,KpFyvuCgBj8F,KAAK7H,EAASxC,EAAoB,GAAIA,EAAoB,KAG9E,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEH,SAAUF,EAAQ0C,EAASxC,GAEjC,cAC4B,SAASkuB,EAAGm4E,GAyCxC,QAAS5qF,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCAvChH3b,OAAOC,eAAesC,EAAS,cAC7BrC,OAAO,IAETqC,EAAQwoG,yBAAuB7mG,EAE/B,IAEI2X,GAAMC,EAFNC,EAAe,WAAc,QAASC,GAAiB3L,EAAQ4L,GAAS,IAAK,GAAIlR,GAAI,EAAGA,EAAIkR,EAAMtR,OAAQI,IAAK,CAAE,GAAImR,GAAaD,EAAMlR,EAAImR,GAAW9X,WAAa8X,EAAW9X,aAAc,EAAO8X,EAAW7X,cAAe,EAAU,SAAW6X,KAAYA,EAAWC,UAAW,GAAMnc,OAAOC,eAAeoQ,EAAQ6L,EAAW5L,IA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,OADgBF,GAAQA,QAAQtgH,GAGjC,OAAO,IAGLogH,EAAQ,GAAIA,KxI4wjEarhI,KAAK7H,EAASxC,EAAoB,KAIzD,SAAUF,EAAQ0C,EAASxC,GAEjC,YAoHA,SAASyb,GAAgBC,EAAUC,GAAe,KAAMD,YAAoBC,IAAgB,KAAM,IAAIC,WAAU,qCyI1wjEhH,QAASmwH,KACN,MAAO51H,QAAO05E,SAASm8C,SAASvrE,WAAW,SAAW,QAAU,IzIwpjEnExgE,OAAOC,eAAesC,EAAS,cAC7BrC,OAAO,IAETqC,EAAQ8oI,eAAannI,EAErB,IAAI2X,GAAMC,EyI/yjEV,OACA,QACA,QACA,OACA,OACA,OACA,SACA,OACA,SACA,SAEA,QAeA,SACA,SACA,SACA,SACA,SAEA,SAEA,SAEA,SACA,SAEA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,SACA,SACA,SACA,QACA,UACA,SACA,UAEA,UA8DA,SAWA,S,GAuJauvH,Y,GAjJZ,IAAA/qH,WACC0rH,WAAYC,iBACZ3pI,cACE2pI,gBACAh9C,kBACAi9C,mBACAn7C,sBACAsM,sBACAnvE,iBACAm4E,qBACAI,qBACAsE,wBACAG,wBACAlsE,oBACAutE,oBACAkF,sBACA0C,kBACAsB,oBACAmD,oBACArC,mBACAgF,sBACAO,0BACAQ,uBACAgB,mBACAO,kBACAmE,gBACAM,qBACAM,kBACAqC,yBACAW,0BACAsB,uBACAQ,uBACAmC,kBACA6F,sBACA/E,oBACAI,wBACAY,qBACAU,iBACAG,iBACAG,qBACAtC,qBACAG,uBACA8F,yBACAsB,mBACAG,qBACAO,6BACAqB,yBACA0B,6BACAsB,2BACAgB,uBACAqC,oBACA0F,sBACAsB,qBACAQ,uBACAyB,6BACA4D,6BACAmB,oBACAQ,0BACAK,sBACA6B,kBACAyB,YACA96C,cACAC,mBACAkM,iBACA4uC,kBACAj7C,gBACAC,gBACAoV,aACAo4B,0BACAQ,8BACAG,2BACA8M,iBAEF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pD,KACAksJ,EAAsB,OAAIlsJ,EAE9B,IAAqBmsJ,GAAgD5Y,EAAgBpuI,OAAO,SAAUoiI,GAAU,MAAOA,aAAkBojB,KACzI,OAAO,IAAIA,IAAoBtmJ,EAASoiI,EAAWylB,EAAeC,IAE/DF,M3Ig6lEF,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,C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a,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,IACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,IACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,IACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,IACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,OACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,IACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,KACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAGbjwJ,KAAM,GACNgwJ,SAAU,MACVC,YAAa,OAoBrB,MAbA,aAAAC,aAAA,WACI,MACO,MAAK,WAIT,eACL,KAAM,eAGP,sCAGD,MC1oCA,0BAGU,cADN,IACE,GAEM,iBADN,GAEM,cADN,GAEM,UADN,GAEM,UADN,GAEM,iBADN,GAEM,UADN,GAEM,SADN,GAEM,WADN,GAEM,aADN,GAEM,sBADN,GAEM,YADN,GAEM,UADN,GAEM,QADN,GAEM,YADN,GAEM,UADN,GAEM,aADN,GAEM,UADN,GAEM,UADN,GAEM,aADN,GAEM,WADN,GAEM,UADN,GAEM,UADN,GAEM,SADN,GAEM,QADN,GAEM,UADN,GAEM,SADN,GAEM,UADN,GAEM,yBADN,GAEM,WADN,GAEM,gBADN,GAEM,SADN,GAEM,iCADN,GAEM,oBADN,GAEM,WADN,GAEM,eADN,GAEM,UADN,GAEM,wBADN,GAEM,WADN,GAEM,WADN,GAEM,SADN,GAEM,aADN,GAEM,iBADN,GAEM,2BADN,GAEM,OADN,GAEM,QADN,GAEM,QADN,GAEM,mBADN,GAEM,gBADN,GAEM,WADN,GAEM,UADN,GAEM,QADN,GAEM,iBADN,GAEM,eADN,GAEM,aADN,GAEM,eADN,GAEM,WADN,GAEM,OADN,GAEM,UADN,GAEM,SADN,GAEM,iBADN,GAEM,UADN,GAEM,WADN,GAEM,WADN,GAEM,qBADN,GAEM,UADN,GAEM,QADN,GAEM,cADN,GAEM,oBADN,GAEM,UADN,GAEM,UADN,GAEM,WADN,GAEM,8BADN,GAEM,gBADN,GAEM,OADN,GAEM,UADN,GAEM,SADN,GAEM,gBADN,GAEM,mBADN,GAEM,8BADN,GAEM,QADN,GAEM,SADN,GAEM,UADN,GAEM,UADN,GAEM,QADN,GAEM,YADN,GAEM,SADN,GAEM,YADN,GAEM,UADN,GAEM,aADN,GAEM,OADN,GAEM,YADN,GAEM,WADN,GAEM,SADN,GAEM,gBADN,GAEM,SADN,GAEM,QADN,GAEM,8BADN,GAEM,WADN,GAEM,YADN,GAEM,UADN,GAEM,UADN,GAEM,QADN,GAEM,YADN,GAEM,QADN,GAEM,OADN,GAEM,UADN,GAEM,cADN,GAEM,SADN,GAEM,QADN,GAEM,UADN,GAEM,QADN,GAEM,SADN,GAEM,SADN,GAEM,aADN,GAEM,QADN,GAEM,WADN,GAEM,eADN,GAEM,cADN,GAEM,SADN,GAEM,SADN,GAEM,aADN,GAEM,MADN,GAEM,SADN,GAEM,UADN,GAEM,UADN,GAEM,UADN,GAEM,yBADN,GAEM,gBADN,GAEM,YADN,GAEM,aADN,GAEM,QADN,GAEM,YADN,GAEM,aADN,GAEM,SADN,GAEM,WADN,GAEM,WADN,GAEM,OADN,GAEM,QADN,GAEM,mBADN,GAEM,aADN,GAEM,aADN,GAEM,YADN,GAEM,UADN,GAEM,SADN,GAEM,aADN,GAEM,UADN,GAEM,SADN,GAEM,WADN,GAEM,aADN,GAEM,aADN,GAEM,UADN,GAEM,aADN,GAEM,UADN,GAEM,UADN,GAEM,QADN,GAEM,QADN,GAEM,cADN,GAEM,uBADN,GAEM,gBADN,GAEM,cADN,GAEM,YADN,GAEM,QADN,GAEM,UADN,GAEM,OADN,GAEM,iBADN,GAEM,2BADN,GAEM,SADN,GAEM,OADN,GAEM,WADN,GAEM,QADN,GAEM,YADN,GAEM,SADN,GAEM,mBADN,GAEM,WADN,GAEM,OADN,GAEM,cADN,GAEM,WADN,GAEM,SADN,GAEM,WADN,GAEM,cADN,GAEM,QADN,GAEM,UADN,GAEM,UADN,GAEM,qBADN,GAEM,SADN,GAEM,eADN,GAEM,wBADN,GAEM,cADN,GAEM,4BADN,GAEM,mCADN,GAEM,QADN,GAEM,gBADN,GAEM,aADN,GAEM,wBADN,GAEM,eADN,GAEM,UADN,GAEM,wBADN,GAEM,SADN,GAEM,aADN,GAEM,eADN,GAEM,YADN,GAEM,eADN,GAEM,WADN,GAEM,WADN,GAEM,kBADN,GAEM,UADN,GAEM,eADN,GAEM,wBADN,GAEM,QADN,GAEM,YADN,GAEM,QADN,GAEM,cADN,GAEM,WADN,GAEM,iCADN,GAEM,YADN,GAEM,SADN,GAEM,cADN,GAEM,uBADN,GAEM,SADN,GAEM,aADN,GAEM,WADN,GAEM,WADN,GAEM,cADN,GAEM,OADN,GAEM,UADN,GAEM,QADN,GAEM,sBADN,GAEM,UADN,GAEM,SADN,GAEM,eADN,GAEM,2BADN,GAEM,SADN,GAEM,SADN,GAEM,UADN,GAEM,uBADN,GAEM,iBADN,GAEM,gBADN,GAEM,uCADN,GAEM,UADN,GAEM,aADN,GAEM,UADN,GAEM,qBADN,GAEM,YADN,GAEM,WADN,GAEM,2BADN,GAEM,wBADN,GAEM,4BADN,GAEM,iBADN,GAEM,QADN,GAEM,SADN,GAEM,aAAR,IACE,GAEM,cADN,GAEM,cADN,GAEM,UADN,GAEM,QADN,GAEM,kBADN,GAEM,UADN,GAEM,SADN,GAEM,UADN,GAEM,YADN,GAEM,oBADN,GAEM,YADN,GAEM,UADN,GAEM,QADN,GAEM,YADN,GAEM,UADN,GAEM,aADN,GAEM,UADN,GAEM,UADN,GAEM,aADN,GAEM,WADN,GAEM,UADN,GAEM,UADN,GAEM,SADN,GAEM,QADN,GAEM,YADN,GAEM,SADN,GAEM,UADN,GAEM,uBADN,GAEM,WADN,GAEM,cADN,GAEM,SADN,GAEM,yCADN,GAEM,SADN,GAEM,WADN,GAEM,eADN,GAEM,UADN,GAEM,sBADN,GAEM,UADN,GAEM,UADN,GAEM,SADN,GAEM,aADN,GAEM,eADN,GAEM,4BADN,GAEM,OADN,GAEM,QADN,GAEM,QADN,GAEM,kBADN,GAEM,cADN,GAEM,WADN,GAEM,UADN,GAEM,gBADN,GAEM,QADN,GAEM,aADN,GAEM,aADN,GAEM,kBADN,GAEM,WADN,GAEM,OADN,GAEM,UADN,GAEM,SADN,GAEM,kBADN,GAEM,YADN,GAEM,SADN,GAEM,WADN,GAEM,uBADN,GAEM,UADN,GAEM,SADN,GAEM,cADN,GAEM,oBADN,GAEM,UADN,GAEM,UADN,GAEM,UADN,GAEM,iBADN,GAEM,cADN,GAEM,OADN,GAEM,YADN,GAEM,UADN,GAEM,kBADN,GAEM,qBADN,GAEM,kCADN,GAEM,QADN,GAEM,SADN,GAEM,UADN,GAEM,WADN,GAEM,QADN,GAEM,YADN,GAEM,SADN,GAEM,cADN,GAEM,UADN,GAEM,YADN,GAEM,OADN,GAEM,YADN,GAEM,WADN,GAEM,SADN,GAEM,gBADN,GAEM,SADN,GAEM,QADN,GAEM,0BADN,GAEM,WADN,GAEM,YADN,GAEM,UADN,GAEM,WADN,GAEM,QADN,GAEM,YADN,GAEM,OADN,GAEM,OADN,GAEM,UADN,GAEM,cADN,GAEM,SADN,GAEM,SADN,GAEM,UADN,GAEM,QADN,GAEM,SADN,GAEM,WADN,GAEM,YADN,GAEM,QADN,GAEM,WADN,GAEM,kBADN,GAEM,gBADN,GAEM,SADN,GAEM,SADN,GAEM,aADN,GAEM,OADN,GAEM,UADN,GAEM,SADN,GAEM,UADN,GAEM,UADN,GAEM,QADN,GAEM,gBADN,GAEM,WADN,GAEM,aADN,GAEM,QADN,GAEM,YADN,GAEM,aADN,GAEM,SADN,GAEM,UADN,GAEM,WADN,GAEM,OADN,GAEM,QADN,GAEM,iBADN,GAEM,WADN,GAEM,aADN,GAEM,WADN,GAEM,UADN,GAEM,SADN,GAEM,aADN,GAEM,UADN,GAEM,SADN,GAEM,WADN,GAEM,aADN,GAEM,aADN,GAEM,YADN,GAEM,aADN,GAEM,UADN,GAEM,UADN,GAEM,QADN,GAEM,QADN,GAEM,eADN,GAEM,wBADN,GAEM,kBADN,GAEM,gBADN,GAEM,YADN,GAEM,QADN,GAEM,UADN,GAEM,OADN,GAEM,iBADN,GAEM,2BADN,GAEM,UADN,GAEM,OADN,GAEM,WADN,GAEM,eADN,GAEM,YADN,GAEM,SADN,GAEM,qBADN,GAEM,WADN,GAEM,OADN,GAEM,YADN,GAEM,iBADN,GAEM,UADN,GAEM,WADN,GAEM,cADN,GAEM,QADN,GAEM,UADN,GAEM,UADN,GAEM,QADN,GAEM,SADN,GAEM,cADN,GAEM,yBADN,GAEM,cADN,GAEM,uBADN,GAEM,+BADN,GAEM,QADN,GAEM,gBADN,GAEM,aADN,GAEM,wBADN,GAEM,iBADN,GAEM,UADN,GAEM,sBADN,GAEM,SADN,GAEM,aADN,GAEM,eADN,GAEM,WADN,GAEM,eAD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K,UAAU+tL,EAA+BrmI,GAKjDqmI,EAA8B7jQ,UAAU4nR,iBAAmB,SAAU1R,EAAqBD,EAAkBG,GACxG,GAAIoR,GAAqBhqJ,EAAOx9H,UAAU4nR,iBAAiBzuR,KAAKrI,KAAMolR,EAAqBD,EAAkBG,GACzGnsP,EAAQn5B,KAAKk2R,cAAcQ,EAAmB32B,QAASulB,GACvDjsP,EAAMr5B,KAAKk2R,cAAcQ,EAAmBl2B,MAAO8kB,EASvD,OAPI,iBAAiBv1Q,KAAKo1Q,KACtBhsP,EAAM4uP,QAAQ,QAEV1uP,EAAIi/E,WACJj/E,EAAI70B,IAAI,EAAG,QAAQujR,QAAQ,SAG5B,GAAIjgB,GAAex7O,QAAQ6M,EAAOE,IAEtC05O,GACThH,EAAuBz/O,QACzB9rB,GAAQ8rB,QAAUymP,GAIV,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACC,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CACA,CAEH,SAAUj1Q,EAAQ0C,EAA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C,EAAQ0C,GsU/klIxB1C,EAAO0C,QAAU,ww5CtUqllIX,SAAU1C,EAAQ0C,GuUrllIxB1C,EAAO0C,QAAU,wpfvU2llIX,SAAU1C,EAAQ0C,GwU3llIxB1C,EAAO0C,QAAU,g/SxUimlIX,SAAU1C,EAAQ0C,GyUjmlIxB1C,EAAO0C,QAAU,w42BzUumlIX,SAAU1C,EAAQ0C,G0UvmlIxB1C,EAAO0C,QAAU,o/N1U6mlIX,SAAU1C,EAAQ0C,G2U7mlIxB1C,EAAO0C,QAAU,gjnE3UmnlIX,SAAU1C,EAAQ0C,G4UnnlIxB1C,EAAO0C,QAAU,q2Z5UynlIX,SAAU1C,EAAQ0C,G6UznlIxB1C,EAAO0C,QAAU,47xC7U+nlIX,SAAU1C,EAAQ0C,G8U/nlIxB1C,EAAO0C,QAAU,I9UqolIX,SAAU1C,EAAQ0C,G+UrolIxB1C,EAAO0C,QAAU,2f/U2olIX,SAAU1C,EAAQ0C,GgV3olIxB1C,EAAO0C,QAAU,0nNhViplIX,SAAU1C,EAAQ0C,GiVjplIxB1C,EAAO0C,QAAU,uqUjVuplIX,SAAU1C,EAAQ0C,GkVvplIxB1C,EAAO0C,QAAU,qlblV6plIX,SAAU1C,EAAQ0C,GmV7plIxB1C,EAAO0C,QAAU,4yanVmqlIX,SAAU1C,EAAQ0C,GoVnqlIxB1C,EAAO0C,QAAU,ostCpVyqlIX,SAAU1C,EAAQ0C,GqVzqlIxB1C,EAAO0C,QAAU,08jBrV+qlIX,SAAU1C,EAAQ0C,GsV/qlIxB1C,EAAO0C,QAAU,igVtVqrlIX,SAAU1C,EAAQ0C,GuVrrlIxB1C,EAAO0C,QAAU,qn3HvV2rlIX,SAAU1C,EAAQ0C,GwV3rlIxB1C,EAAO0C,QAAU,66gBxVislIX,SAAU1C,EAAQ0C,GyVjslIxB1C,EAAO0C,QAAU,mugCzVuslIX,SAAU1C,EAAQ0C,G0VvslIxB1C,EAAO0C,QAAU,mnlB1V6slIX,SAAU1C,EAAQ0C,G2V7slIxB1C,EAAO0C,QAAU,0o2B3VmtlIX,SAAU1C,EAAQ0C,G4VntlIxB1C,EAAO0C,QAAU,2q9F5VytlIX,SAAU1C,EAAQ0C,G6VztlIxB1C,EAAO0C,QAAU,2uxD7V+tlIX,SAAU1C,EAAQ0C,G8V/tlIxB1C,EAAO0C,QAAU,4+tD9VqulIX,SAAU1C,EAAQ0C,G+VrulIxB1C,EAAO0C,QAAU,64kB/V2ulIX,SAAU1C,EAAQ0C,GgW3ulIxB1C,EAAO0C,QAAU,glShWivlIX,SAAU1C,EAAQ0C,GiWjvlIxB1C,EAAO0C,QAAU,mjSjWuvlIX,SAAU1C,EAAQ0C,EAASxC,GAEjC,YAGAC,QAAOC,eAAesC,EAAS,cAC7BrC,OAAO,IAETqC,EAAQmqI,WAASxoI,EkW/vlIjB,cACA,SACA,SACA,SACA,QACA,SACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,GADA,OACA,QACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,SACA,UACA,UACA,UACA,SAEoBwoI,GAATA,SACPnrF,KAAM,GAAI8xQ,WAAY,SAAUC,UAAW,SAC3C/xQ,KAAM,QAAS59C,UAAWsrF,mBAC1B1tC,KAAM,YAAa59C,UAAWotF,uBAC9BxvC,KAAM,iDAAkD59C,UAAWouH,sBACnExwE,KAAM,YAAa59C,UAAW05F,uBAC9B97C,KAAM,QAAS59C,UAAW0iG,sBAC1B9kD,KAAM,eAAgB59C,UAAWuqB,kBACjCqzB,KAAM,WAAY59C,UAAWonG,yBAC7BxpD,KAAM,qBAAsB59C,UAAWq7B,qBACvCuiB,KAAM,UAAW59C,UAAW4oG,qBAC5BhrD,KAAM,YAAa59C,UAAW8tG,uBAC9BlwD,KAAM,QAAS59C,UAAWwwG,mBAC1B5yD,KAAM,qBAAsB59C,UAAW8xG,qBACvCl0D,KAAM,UAAW59C,UAAWi1G,qBAC5Br3D,KAAM,mBAAoB59C,UAAW4yG,oBACrCh1D,KAAM,gBAAiB59C,UAAWm4G,2BAClCv6D,KAAM,yBAA0B59C,UAAW43G,uBAC3Ch6D,KAAM,aAAc59C,UAAW24G,wBAC/B/6D,KAAM,oBAAqB59C,UAAW25G,oBACtC/7D,KAAM,mBAAoB59C,UAAW4yG,oBACrCh1D,KAAM,YAAa59C,UAAW43G,uBAC9Bh6D,KAAM,QAAS59C,UAAWk6G,mBAC1Bt8D,KAAM,gBAAiB59C,UAAWq+G,iBAClCzgE,KAAM,WAAY59C,UAAW2+G,sBAC7B/gE,KAAM,QAAS59C,UAAWi/G,mBAC1BrhE,KAAM,gBAAiB59C,UAAWshH,0BAClC1jE,KAAM,yBAA0B59C,UAAWiiH,2BAC3CrkE,KAAM,aAAc59C,UAAWujH,wBAC/B3lE,KAAM,aAAc59C,UAAW+jH,wBAC/BnmE,KAAM,QAAS59C,UAAWkmH,mBAC1BtoE,KAAM,YAAa59C,UAAW+rH,uBAC9BnuE,KAAM,WAAY59C,UAAWonH,yBAC7BxpE,KAAM,eAAgB59C,UAAW2sH,0BACjC/uE,KAAM,WAAY59C,UAAWgoH,sBAC7BpqE,KAAM,OAAQ59C,UAAW0oH,kBACzB9qE,KAAM,OAAQ59C,UAAW6oH,kBACzBjrE,KAAM,WAAY59C,UAAWgpH,sBAC7BprE,KAAM,4BAA6B59C,UAAWiuH,oBAC9CrwE,KAAM,mBAAoB59C,UAAW2uH,8BACrC/wE,KAAM,eAAgB59C,UAAWgwH,0BACjCpyE,KAAM,kBAAmB59C,UAAW0xH,8BACpC9zE,KAAM,iBAAkB59C,UAAWgzH,4BACnCp1E,KAAM,aAAc59C,UAAWg0H,wBAC/Bp2E,KAAM,UAAW59C,UAAWq2H,qBAC5Bz4E,KAAM,gBAAiB59C,UAAWi7H,2BAClCr9E,KAAM,oBAAqB59C,UAAWy7H,+BACtC79E,KAAM,YAAa59C,UAAW+7H,uBAC9Bn+E,KAAM,WAAY59C,UAAWq9H,sBAC7Bz/E,KAAM,iBAAkB59C,UAAW47H,4BACnCh+E,KAAM,aAAc59C,UAAW69H,wBAC/BjgF,KAAM,mBAAoB59C,UAAWs/H,8BACrC1hF,KAAM,gBAAiB59C,UAAWkjI,8BAClCtlF,KAAM,UAAW59C,UAAWqkI,sBAC5BzmF,KAAM,gBAAiB59C,UAAW6kI,4BAClCjnF,KAAM,YAAa59C,UAAWklI,wBAC9BtnF,KAAM,QAAS59C,UAAW+mI,oBAC1BnpF,KAAM,MAAO59C,UAAW0mH,sBACxB9oE,KAAM,MAAO59C,UAAW6mH,wBACxBjpE,KAAM,KAAM8xQ,WAAY,QACxB9xQ,KAAM,OAAQ59C,UAAWiuH,uBlW+vlI1B","file":"main.bundle.js","sourcesContent":["webpackJsonp([0],[\n/* 0 */,\n/* 1 */,\n/* 2 */,\n/* 3 */,\n/* 4 */,\n/* 5 */,\n/* 6 */,\n/* 7 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastContainerDirective\", function() { return ToastContainerDirective; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastContainerModule\", function() { return ToastContainerModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Toast\", function() { return Toast; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastrService\", function() { return ToastrService; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastPackage\", function() { return ToastPackage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DefaultGlobalConfig\", function() { return DefaultGlobalConfig; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastrModule\", function() { return ToastrModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastRef\", function() { return ToastRef; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastInjector\", function() { return ToastInjector; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"TOAST_CONFIG\", function() { return TOAST_CONFIG; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastNoAnimation\", function() { return ToastNoAnimation; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ToastNoAnimationModule\", function() { return ToastNoAnimationModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ComponentPortal\", function() { return ComponentPortal; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BasePortalHost\", function() { return BasePortalHost; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Overlay\", function() { return Overlay; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OVERLAY_PROVIDERS\", function() { return OVERLAY_PROVIDERS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OverlayContainer\", function() { return OverlayContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OverlayRef\", function() { return OverlayRef; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs__ = __webpack_require__(72);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_rxjs___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_rxjs__);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_tslib__ = __webpack_require__(33);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_platform_browser__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__angular_animations__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_5__angular_common__ = __webpack_require__(3);\n\n\n\n\n\n\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar ToastContainerDirective = /** @class */ (function () {\n    function ToastContainerDirective(el) {\n        this.el = el;\n    }\n    /**\n     * @return {?}\n     */\n    ToastContainerDirective.prototype.getContainerElement = /**\n     * @return {?}\n     */\n    function () {\n        return this.el.nativeElement;\n    };\n    ToastContainerDirective.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\n                    selector: '[toastContainer]',\n                    exportAs: 'toastContainer',\n                },] }\n    ];\n    /** @nocollapse */\n    ToastContainerDirective.ctorParameters = function () { return [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"] }\n    ]; };\n    return ToastContainerDirective;\n}());\nvar ToastContainerModule = /** @class */ (function () {\n    function ToastContainerModule() {\n    }\n    ToastContainerModule.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\n                    declarations: [ToastContainerDirective],\n                    exports: [ToastContainerDirective],\n                },] }\n    ];\n    return ToastContainerModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Everything a toast needs to launch\n */\nvar  /**\n * Everything a toast needs to launch\n */\nToastPackage = /** @class */ (function () {\n    function ToastPackage(toastId, config, message, title, toastType, toastRef) {\n        var _this = this;\n        this.toastId = toastId;\n        this.config = config;\n        this.message = message;\n        this.title = title;\n        this.toastType = toastType;\n        this.toastRef = toastRef;\n        this._onTap = new __WEBPACK_IMPORTED_MODULE_1_rxjs__[\"Subject\"]();\n        this._onAction = new __WEBPACK_IMPORTED_MODULE_1_rxjs__[\"Subject\"]();\n        this.toastRef.afterClosed().subscribe(function () {\n            _this._onAction.complete();\n            _this._onTap.complete();\n        });\n    }\n    /** Fired on click */\n    /**\n     * Fired on click\n     * @return {?}\n     */\n    ToastPackage.prototype.triggerTap = /**\n     * Fired on click\n     * @return {?}\n     */\n    function () {\n        this._onTap.next();\n        if (this.config.tapToDismiss) {\n            this._onTap.complete();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    ToastPackage.prototype.onTap = /**\n     * @return {?}\n     */\n    function () {\n        return this._onTap.asObservable();\n    };\n    /** available for use in custom toast */\n    /**\n     * available for use in custom toast\n     * @param {?=} action\n     * @return {?}\n     */\n    ToastPackage.prototype.triggerAction = /**\n     * available for use in custom toast\n     * @param {?=} action\n     * @return {?}\n     */\n    function (action) {\n        this._onAction.next(action);\n    };\n    /**\n     * @return {?}\n     */\n    ToastPackage.prototype.onAction = /**\n     * @return {?}\n     */\n    function () {\n        return this._onAction.asObservable();\n    };\n    return ToastPackage;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n * @template T\n */\nvar  /**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n * @template T\n */\nComponentPortal = /** @class */ (function () {\n    function ComponentPortal(component, injector) {\n        this.component = component;\n        this.injector = injector;\n    }\n    /** Attach this portal to a host. */\n    /**\n     * Attach this portal to a host.\n     * @param {?} host\n     * @param {?} newestOnTop\n     * @return {?}\n     */\n    ComponentPortal.prototype.attach = /**\n     * Attach this portal to a host.\n     * @param {?} host\n     * @param {?} newestOnTop\n     * @return {?}\n     */\n    function (host, newestOnTop) {\n        this._attachedHost = host;\n        return host.attach(this, newestOnTop);\n    };\n    /** Detach this portal from its host */\n    /**\n     * Detach this portal from its host\n     * @return {?}\n     */\n    ComponentPortal.prototype.detach = /**\n     * Detach this portal from its host\n     * @return {?}\n     */\n    function () {\n        /** @type {?} */\n        var host = this._attachedHost;\n        if (host) {\n            this._attachedHost = undefined;\n            return host.detach();\n        }\n    };\n    Object.defineProperty(ComponentPortal.prototype, \"isAttached\", {\n        /** Whether this portal is attached to a host. */\n        get: /**\n         * Whether this portal is attached to a host.\n         * @return {?}\n         */\n        function () {\n            return this._attachedHost != null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Sets the PortalHost reference without performing `attach()`. This is used directly by\n     * the PortalHost when it is performing an `attach()` or `detach()`.\n     */\n    /**\n     * Sets the PortalHost reference without performing `attach()`. This is used directly by\n     * the PortalHost when it is performing an `attach()` or `detach()`.\n     * @param {?=} host\n     * @return {?}\n     */\n    ComponentPortal.prototype.setAttachedHost = /**\n     * Sets the PortalHost reference without performing `attach()`. This is used directly by\n     * the PortalHost when it is performing an `attach()` or `detach()`.\n     * @param {?=} host\n     * @return {?}\n     */\n    function (host) {\n        this._attachedHost = host;\n    };\n    return ComponentPortal;\n}());\n/**\n * Partial implementation of PortalHost that only deals with attaching a\n * ComponentPortal\n * @abstract\n */\nvar  /**\n * Partial implementation of PortalHost that only deals with attaching a\n * ComponentPortal\n * @abstract\n */\nBasePortalHost = /** @class */ (function () {\n    function BasePortalHost() {\n    }\n    /**\n     * @param {?} portal\n     * @param {?} newestOnTop\n     * @return {?}\n     */\n    BasePortalHost.prototype.attach = /**\n     * @param {?} portal\n     * @param {?} newestOnTop\n     * @return {?}\n     */\n    function (portal, newestOnTop) {\n        this._attachedPortal = portal;\n        return this.attachComponentPortal(portal, newestOnTop);\n    };\n    /**\n     * @return {?}\n     */\n    BasePortalHost.prototype.detach = /**\n     * @return {?}\n     */\n    function () {\n        if (this._attachedPortal) {\n            this._attachedPortal.setAttachedHost();\n        }\n        this._attachedPortal = undefined;\n        if (this._disposeFn) {\n            this._disposeFn();\n            this._disposeFn = undefined;\n        }\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    BasePortalHost.prototype.setDisposeFn = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) {\n        this._disposeFn = fn;\n    };\n    return BasePortalHost;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * A PortalHost for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n *\n * This is the only part of the portal core that directly touches the DOM.\n */\nvar /**\n * A PortalHost for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n *\n * This is the only part of the portal core that directly touches the DOM.\n */\nDomPortalHost = /** @class */ (function (_super) {\n    Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"b\" /* __extends */])(DomPortalHost, _super);\n    function DomPortalHost(_hostDomElement, _componentFactoryResolver, _appRef) {\n        var _this = _super.call(this) || this;\n        _this._hostDomElement = _hostDomElement;\n        _this._componentFactoryResolver = _componentFactoryResolver;\n        _this._appRef = _appRef;\n        return _this;\n    }\n    /**\n     * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n     * @param portal Portal to be attached\n     */\n    /**\n     * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n     * @template T\n     * @param {?} portal Portal to be attached\n     * @param {?} newestOnTop\n     * @return {?}\n     */\n    DomPortalHost.prototype.attachComponentPortal = /**\n     * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n     * @template T\n     * @param {?} portal Portal to be attached\n     * @param {?} newestOnTop\n     * @return {?}\n     */\n    function (portal, newestOnTop) {\n        var _this = this;\n        /** @type {?} */\n        var componentFactory = this._componentFactoryResolver.resolveComponentFactory(portal.component);\n        /** @type {?} */\n        var componentRef;\n        // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n        // for the component (in terms of Angular's component tree, not rendering).\n        // When the ViewContainerRef is missing, we use the factory to create the component directly\n        // and then manually attach the ChangeDetector for that component to the application (which\n        // happens automatically when using a ViewContainer).\n        componentRef = componentFactory.create(portal.injector);\n        // When creating a component outside of a ViewContainer, we need to manually register\n        // its ChangeDetector with the application. This API is unfortunately not yet published\n        // in Angular core. The change detector must also be deregistered when the component\n        // is destroyed to prevent memory leaks.\n        this._appRef.attachView(componentRef.hostView);\n        this.setDisposeFn(function () {\n            _this._appRef.detachView(componentRef.hostView);\n            componentRef.destroy();\n        });\n        // At this point the component has been instantiated, so we move it to the location in the DOM\n        // where we want it to be rendered.\n        if (newestOnTop) {\n            this._hostDomElement.insertBefore(this._getComponentRootNode(componentRef), this._hostDomElement.firstChild);\n        }\n        else {\n            this._hostDomElement.appendChild(this._getComponentRootNode(componentRef));\n        }\n        return componentRef;\n    };\n    /**\n     * Gets the root HTMLElement for an instantiated component.\n     * @param {?} componentRef\n     * @return {?}\n     */\n    DomPortalHost.prototype._getComponentRootNode = /**\n     * Gets the root HTMLElement for an instantiated component.\n     * @param {?} componentRef\n     * @return {?}\n     */\n    function (componentRef) {\n        return /** @type {?} */ ((/** @type {?} */ (componentRef.hostView)).rootNodes[0]);\n    };\n    return DomPortalHost;\n}(BasePortalHost));\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nvar  /**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nOverlayRef = /** @class */ (function () {\n    function OverlayRef(_portalHost) {\n        this._portalHost = _portalHost;\n    }\n    /**\n     * @param {?} portal\n     * @param {?=} newestOnTop\n     * @return {?}\n     */\n    OverlayRef.prototype.attach = /**\n     * @param {?} portal\n     * @param {?=} newestOnTop\n     * @return {?}\n     */\n    function (portal, newestOnTop) {\n        if (newestOnTop === void 0) { newestOnTop = true; }\n        return this._portalHost.attach(portal, newestOnTop);\n    };\n    /**\n     * Detaches an overlay from a portal.\n     * @returns Resolves when the overlay has been detached.\n     */\n    /**\n     * Detaches an overlay from a portal.\n     * @return {?} Resolves when the overlay has been detached.\n     */\n    OverlayRef.prototype.detach = /**\n     * Detaches an overlay from a portal.\n     * @return {?} Resolves when the overlay has been detached.\n     */\n    function () {\n        return this._portalHost.detach();\n    };\n    return OverlayRef;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * The OverlayContainer is the container in which all overlays will load.\n * It should be provided in the root component to ensure it is properly shared.\n */\nvar  /**\n * The OverlayContainer is the container in which all overlays will load.\n * It should be provided in the root component to ensure it is properly shared.\n */\nOverlayContainer = /** @class */ (function () {\n    function OverlayContainer() {\n    }\n    /**\n     * This method returns the overlay container element.  It will lazily\n     * create the element the first time  it is called to facilitate using\n     * the container in non-browser environments.\n     * @returns the container element\n     */\n    /**\n     * This method returns the overlay container element.  It will lazily\n     * create the element the first time  it is called to facilitate using\n     * the container in non-browser environments.\n     * @return {?} the container element\n     */\n    OverlayContainer.prototype.getContainerElement = /**\n     * This method returns the overlay container element.  It will lazily\n     * create the element the first time  it is called to facilitate using\n     * the container in non-browser environments.\n     * @return {?} the container element\n     */\n    function () {\n        if (!this._containerElement) {\n            this._createContainer();\n        }\n        return this._containerElement;\n    };\n    /**\n     * Create the overlay container element, which is simply a div\n     * with the 'cdk-overlay-container' class on the document body.\n     * @return {?}\n     */\n    OverlayContainer.prototype._createContainer = /**\n     * Create the overlay container element, which is simply a div\n     * with the 'cdk-overlay-container' class on the document body.\n     * @return {?}\n     */\n    function () {\n        /** @type {?} */\n        var container = document.createElement('div');\n        container.classList.add('overlay-container');\n        document.body.appendChild(container);\n        this._containerElement = container;\n    };\n    return OverlayContainer;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalHost, so any kind of Portal can be loaded into one.\n */\nvar Overlay = /** @class */ (function () {\n    function Overlay(_overlayContainer, _componentFactoryResolver, _appRef) {\n        this._overlayContainer = _overlayContainer;\n        this._componentFactoryResolver = _componentFactoryResolver;\n        this._appRef = _appRef;\n        this._paneElements = new Map();\n    }\n    /**\n     * Creates an overlay.\n     * @returns A reference to the created overlay.\n     */\n    /**\n     * Creates an overlay.\n     * @param {?=} positionClass\n     * @param {?=} overlayContainer\n     * @return {?} A reference to the created overlay.\n     */\n    Overlay.prototype.create = /**\n     * Creates an overlay.\n     * @param {?=} positionClass\n     * @param {?=} overlayContainer\n     * @return {?} A reference to the created overlay.\n     */\n    function (positionClass, overlayContainer) {\n        // get existing pane if possible\n        return this._createOverlayRef(this.getPaneElement(positionClass, overlayContainer));\n    };\n    /**\n     * @param {?=} positionClass\n     * @param {?=} overlayContainer\n     * @return {?}\n     */\n    Overlay.prototype.getPaneElement = /**\n     * @param {?=} positionClass\n     * @param {?=} overlayContainer\n     * @return {?}\n     */\n    function (positionClass, overlayContainer) {\n        if (positionClass === void 0) { positionClass = ''; }\n        if (!this._paneElements.get(overlayContainer)) {\n            this._paneElements.set(overlayContainer, {});\n        }\n        if (!this._paneElements.get(overlayContainer)[positionClass]) {\n            this._paneElements.get(overlayContainer)[positionClass] = this._createPaneElement(positionClass, overlayContainer);\n        }\n        return this._paneElements.get(overlayContainer)[positionClass];\n    };\n    /**\n     * Creates the DOM element for an overlay and appends it to the overlay container.\n     * @param {?} positionClass\n     * @param {?=} overlayContainer\n     * @return {?} Newly-created pane element\n     */\n    Overlay.prototype._createPaneElement = /**\n     * Creates the DOM element for an overlay and appends it to the overlay container.\n     * @param {?} positionClass\n     * @param {?=} overlayContainer\n     * @return {?} Newly-created pane element\n     */\n    function (positionClass, overlayContainer) {\n        /** @type {?} */\n        var pane = document.createElement('div');\n        pane.id = 'toast-container';\n        pane.classList.add(positionClass);\n        pane.classList.add('toast-container');\n        if (!overlayContainer) {\n            this._overlayContainer.getContainerElement().appendChild(pane);\n        }\n        else {\n            overlayContainer.getContainerElement().appendChild(pane);\n        }\n        return pane;\n    };\n    /**\n     * Create a DomPortalHost into which the overlay content can be loaded.\n     * @param {?} pane The DOM element to turn into a portal host.\n     * @return {?} A portal host for the given DOM element.\n     */\n    Overlay.prototype._createPortalHost = /**\n     * Create a DomPortalHost into which the overlay content can be loaded.\n     * @param {?} pane The DOM element to turn into a portal host.\n     * @return {?} A portal host for the given DOM element.\n     */\n    function (pane) {\n        return new DomPortalHost(pane, this._componentFactoryResolver, this._appRef);\n    };\n    /**\n     * Creates an OverlayRef for an overlay in the given DOM element.\n     * @param {?} pane DOM element for the overlay\n     * @return {?}\n     */\n    Overlay.prototype._createOverlayRef = /**\n     * Creates an OverlayRef for an overlay in the given DOM element.\n     * @param {?} pane DOM element for the overlay\n     * @return {?}\n     */\n    function (pane) {\n        return new OverlayRef(this._createPortalHost(pane));\n    };\n    Overlay.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] }\n    ];\n    /** @nocollapse */\n    Overlay.ctorParameters = function () { return [\n        { type: OverlayContainer },\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ComponentFactoryResolver\"] },\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ApplicationRef\"] }\n    ]; };\n    return Overlay;\n}());\n/** *\n * Providers for Overlay and its related injectables.\n  @type {?} */\nvar OVERLAY_PROVIDERS = [\n    Overlay,\n    OverlayContainer,\n];\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/**\n * Reference to a toast opened via the Toastr service.\n * @template T\n */\nvar  /**\n * Reference to a toast opened via the Toastr service.\n * @template T\n */\nToastRef = /** @class */ (function () {\n    function ToastRef(_overlayRef) {\n        this._overlayRef = _overlayRef;\n        /**\n         * Subject for notifying the user that the toast has finished closing.\n         */\n        this._afterClosed = new __WEBPACK_IMPORTED_MODULE_1_rxjs__[\"Subject\"]();\n        /**\n         * triggered when toast is activated\n         */\n        this._activate = new __WEBPACK_IMPORTED_MODULE_1_rxjs__[\"Subject\"]();\n        /**\n         * notifies the toast that it should close before the timeout\n         */\n        this._manualClose = new __WEBPACK_IMPORTED_MODULE_1_rxjs__[\"Subject\"]();\n        /**\n         * notifies the toast that it should reset the timeouts\n         */\n        this._resetTimeout = new __WEBPACK_IMPORTED_MODULE_1_rxjs__[\"Subject\"]();\n    }\n    /**\n     * @return {?}\n     */\n    ToastRef.prototype.manualClose = /**\n     * @return {?}\n     */\n    function () {\n        this._manualClose.next();\n        this._manualClose.complete();\n    };\n    /**\n     * @return {?}\n     */\n    ToastRef.prototype.manualClosed = /**\n     * @return {?}\n     */\n    function () {\n        return this._manualClose.asObservable();\n    };\n    /**\n     * @return {?}\n     */\n    ToastRef.prototype.timeoutReset = /**\n     * @return {?}\n     */\n    function () {\n        return this._resetTimeout.asObservable();\n    };\n    /**\n     * Close the toast.\n     */\n    /**\n     * Close the toast.\n     * @return {?}\n     */\n    ToastRef.prototype.close = /**\n     * Close the toast.\n     * @return {?}\n     */\n    function () {\n        this._overlayRef.detach();\n        this._afterClosed.next();\n        this._manualClose.next();\n        this._afterClosed.complete();\n        this._manualClose.complete();\n        this._activate.complete();\n        this._resetTimeout.complete();\n    };\n    /** Gets an observable that is notified when the toast is finished closing. */\n    /**\n     * Gets an observable that is notified when the toast is finished closing.\n     * @return {?}\n     */\n    ToastRef.prototype.afterClosed = /**\n     * Gets an observable that is notified when the toast is finished closing.\n     * @return {?}\n     */\n    function () {\n        return this._afterClosed.asObservable();\n    };\n    /**\n     * @return {?}\n     */\n    ToastRef.prototype.isInactive = /**\n     * @return {?}\n     */\n    function () {\n        return this._activate.isStopped;\n    };\n    /**\n     * @return {?}\n     */\n    ToastRef.prototype.activate = /**\n     * @return {?}\n     */\n    function () {\n        this._activate.next();\n        this._activate.complete();\n    };\n    /** Gets an observable that is notified when the toast has started opening. */\n    /**\n     * Gets an observable that is notified when the toast has started opening.\n     * @return {?}\n     */\n    ToastRef.prototype.afterActivate = /**\n     * Gets an observable that is notified when the toast has started opening.\n     * @return {?}\n     */\n    function () {\n        return this._activate.asObservable();\n    };\n    /** Reset the toast timouts */\n    /**\n     * Reset the toast timouts\n     * @return {?}\n     */\n    ToastRef.prototype.resetTimeout = /**\n     * Reset the toast timouts\n     * @return {?}\n     */\n    function () {\n        this._resetTimeout.next();\n    };\n    return ToastRef;\n}());\n/**\n * Custom injector type specifically for instantiating components with a toast.\n */\nvar  /**\n * Custom injector type specifically for instantiating components with a toast.\n */\nToastInjector = /** @class */ (function () {\n    function ToastInjector(_toastPackage, _parentInjector) {\n        this._toastPackage = _toastPackage;\n        this._parentInjector = _parentInjector;\n    }\n    /* tslint:disable:deprecation */\n    /**\n     * @param {?} token\n     * @param {?=} notFoundValue\n     * @return {?}\n     */\n    ToastInjector.prototype.get = /**\n     * @param {?} token\n     * @param {?=} notFoundValue\n     * @return {?}\n     */\n    function (token, notFoundValue) {\n        if (token === ToastPackage && this._toastPackage) {\n            return this._toastPackage;\n        }\n        return this._parentInjector.get(token, notFoundValue);\n    };\n    return ToastInjector;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n/** @type {?} */\nvar TOAST_CONFIG = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"InjectionToken\"]('ToastConfig');\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar ToastrService = /** @class */ (function () {\n    function ToastrService(token, overlay, _injector, sanitizer, ngZone) {\n        this.overlay = overlay;\n        this._injector = _injector;\n        this.sanitizer = sanitizer;\n        this.ngZone = ngZone;\n        this.currentlyActive = 0;\n        this.toasts = [];\n        this.index = 0;\n        /** @type {?} */\n        var defaultConfig = new token.defaults();\n        this.toastrConfig = Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"a\" /* __assign */])({}, defaultConfig, token.config);\n        this.toastrConfig.iconClasses = Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"a\" /* __assign */])({}, defaultConfig.iconClasses, token.config.iconClasses);\n    }\n    /** show toast */\n    /**\n     * show toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @param {?=} type\n     * @return {?}\n     */\n    ToastrService.prototype.show = /**\n     * show toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @param {?=} type\n     * @return {?}\n     */\n    function (message, title, override, type) {\n        if (override === void 0) { override = {}; }\n        if (type === void 0) { type = ''; }\n        return this._preBuildNotification(type, message, title, this.applyConfig(override));\n    };\n    /** show successful toast */\n    /**\n     * show successful toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @return {?}\n     */\n    ToastrService.prototype.success = /**\n     * show successful toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @return {?}\n     */\n    function (message, title, override) {\n        if (override === void 0) { override = {}; }\n        /** @type {?} */\n        var type = this.toastrConfig.iconClasses.success || '';\n        return this._preBuildNotification(type, message, title, this.applyConfig(override));\n    };\n    /** show error toast */\n    /**\n     * show error toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @return {?}\n     */\n    ToastrService.prototype.error = /**\n     * show error toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @return {?}\n     */\n    function (message, title, override) {\n        if (override === void 0) { override = {}; }\n        /** @type {?} */\n        var type = this.toastrConfig.iconClasses.error || '';\n        return this._preBuildNotification(type, message, title, this.applyConfig(override));\n    };\n    /** show info toast */\n    /**\n     * show info toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @return {?}\n     */\n    ToastrService.prototype.info = /**\n     * show info toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @return {?}\n     */\n    function (message, title, override) {\n        if (override === void 0) { override = {}; }\n        /** @type {?} */\n        var type = this.toastrConfig.iconClasses.info || '';\n        return this._preBuildNotification(type, message, title, this.applyConfig(override));\n    };\n    /** show warning toast */\n    /**\n     * show warning toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @return {?}\n     */\n    ToastrService.prototype.warning = /**\n     * show warning toast\n     * @param {?=} message\n     * @param {?=} title\n     * @param {?=} override\n     * @return {?}\n     */\n    function (message, title, override) {\n        if (override === void 0) { override = {}; }\n        /** @type {?} */\n        var type = this.toastrConfig.iconClasses.warning || '';\n        return this._preBuildNotification(type, message, title, this.applyConfig(override));\n    };\n    /**\n     * Remove all or a single toast by id\n     */\n    /**\n     * Remove all or a single toast by id\n     * @param {?=} toastId\n     * @return {?}\n     */\n    ToastrService.prototype.clear = /**\n     * Remove all or a single toast by id\n     * @param {?=} toastId\n     * @return {?}\n     */\n    function (toastId) {\n        var e_1, _a;\n        try {\n            // Call every toastRef manualClose function\n            for (var _b = Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"c\" /* __values */])(this.toasts), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var toast = _c.value;\n                if (toastId !== undefined) {\n                    if (toast.toastId === toastId) {\n                        toast.toastRef.manualClose();\n                        return;\n                    }\n                }\n                else {\n                    toast.toastRef.manualClose();\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n    };\n    /**\n     * Remove and destroy a single toast by id\n     */\n    /**\n     * Remove and destroy a single toast by id\n     * @param {?} toastId\n     * @return {?}\n     */\n    ToastrService.prototype.remove = /**\n     * Remove and destroy a single toast by id\n     * @param {?} toastId\n     * @return {?}\n     */\n    function (toastId) {\n        /** @type {?} */\n        var found = this._findToast(toastId);\n        if (!found) {\n            return false;\n        }\n        found.activeToast.toastRef.close();\n        this.toasts.splice(found.index, 1);\n        this.currentlyActive = this.currentlyActive - 1;\n        if (!this.toastrConfig.maxOpened || !this.toasts.length) {\n            return false;\n        }\n        if (this.currentlyActive < this.toastrConfig.maxOpened &&\n            this.toasts[this.currentlyActive]) {\n            /** @type {?} */\n            var p = this.toasts[this.currentlyActive].toastRef;\n            if (!p.isInactive()) {\n                this.currentlyActive = this.currentlyActive + 1;\n                p.activate();\n            }\n        }\n        return true;\n    };\n    /**\n     * Determines if toast message is already shown\n     */\n    /**\n     * Determines if toast message is already shown\n     * @param {?} message\n     * @param {?} resetOnDuplicate\n     * @return {?}\n     */\n    ToastrService.prototype.isDuplicate = /**\n     * Determines if toast message is already shown\n     * @param {?} message\n     * @param {?} resetOnDuplicate\n     * @return {?}\n     */\n    function (message, resetOnDuplicate) {\n        for (var i = 0; i < this.toasts.length; i++) {\n            if (this.toasts[i].message === message) {\n                if (resetOnDuplicate &&\n                    this.toasts[i].toastRef.componentInstance.resetTimeout) {\n                    this.toasts[i].toastRef.resetTimeout();\n                }\n                return true;\n            }\n        }\n        return false;\n    };\n    /**\n     * create a clone of global config and apply individual settings\n     * @param {?=} override\n     * @return {?}\n     */\n    ToastrService.prototype.applyConfig = /**\n     * create a clone of global config and apply individual settings\n     * @param {?=} override\n     * @return {?}\n     */\n    function (override) {\n        if (override === void 0) { override = {}; }\n        return Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"a\" /* __assign */])({}, this.toastrConfig, override);\n    };\n    /**\n     * Find toast object by id\n     * @param {?} toastId\n     * @return {?}\n     */\n    ToastrService.prototype._findToast = /**\n     * Find toast object by id\n     * @param {?} toastId\n     * @return {?}\n     */\n    function (toastId) {\n        for (var i = 0; i < this.toasts.length; i++) {\n            if (this.toasts[i].toastId === toastId) {\n                return { index: i, activeToast: this.toasts[i] };\n            }\n        }\n        return null;\n    };\n    /**\n     * Determines the need to run inside angular's zone then builds the toast\n     * @param {?} toastType\n     * @param {?} message\n     * @param {?} title\n     * @param {?} config\n     * @return {?}\n     */\n    ToastrService.prototype._preBuildNotification = /**\n     * Determines the need to run inside angular's zone then builds the toast\n     * @param {?} toastType\n     * @param {?} message\n     * @param {?} title\n     * @param {?} config\n     * @return {?}\n     */\n    function (toastType, message, title, config) {\n        var _this = this;\n        if (config.onActivateTick) {\n            return this.ngZone.run(function () {\n                return _this._buildNotification(toastType, message, title, config);\n            });\n        }\n        return this._buildNotification(toastType, message, title, config);\n    };\n    /**\n     * Creates and attaches toast data to component\n     * returns null if toast is duplicate and preventDuplicates == True\n     * @param {?} toastType\n     * @param {?} message\n     * @param {?} title\n     * @param {?} config\n     * @return {?}\n     */\n    ToastrService.prototype._buildNotification = /**\n     * Creates and attaches toast data to component\n     * returns null if toast is duplicate and preventDuplicates == True\n     * @param {?} toastType\n     * @param {?} message\n     * @param {?} title\n     * @param {?} config\n     * @return {?}\n     */\n    function (toastType, message, title, config) {\n        var _this = this;\n        if (!config.toastComponent) {\n            throw new Error('toastComponent required');\n        }\n        // max opened and auto dismiss = true\n        if (message &&\n            this.toastrConfig.preventDuplicates &&\n            this.isDuplicate(message, this.toastrConfig.resetTimeoutOnDuplicate)) {\n            return null;\n        }\n        this.previousToastMessage = message;\n        /** @type {?} */\n        var keepInactive = false;\n        if (this.toastrConfig.maxOpened &&\n            this.currentlyActive >= this.toastrConfig.maxOpened) {\n            keepInactive = true;\n            if (this.toastrConfig.autoDismiss) {\n                this.clear(this.toasts[0].toastId);\n            }\n        }\n        /** @type {?} */\n        var overlayRef = this.overlay.create(config.positionClass, this.overlayContainer);\n        this.index = this.index + 1;\n        /** @type {?} */\n        var sanitizedMessage = message;\n        if (message && config.enableHtml) {\n            sanitizedMessage = this.sanitizer.sanitize(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"SecurityContext\"].HTML, message);\n        }\n        /** @type {?} */\n        var toastRef = new ToastRef(overlayRef);\n        /** @type {?} */\n        var toastPackage = new ToastPackage(this.index, config, sanitizedMessage, title, toastType, toastRef);\n        /** @type {?} */\n        var toastInjector = new ToastInjector(toastPackage, this._injector);\n        /** @type {?} */\n        var component = new ComponentPortal(config.toastComponent, toastInjector);\n        /** @type {?} */\n        var portal = overlayRef.attach(component, this.toastrConfig.newestOnTop);\n        toastRef.componentInstance = (/** @type {?} */ (portal))._component;\n        /** @type {?} */\n        var ins = {\n            toastId: this.index,\n            message: message || '',\n            toastRef: toastRef,\n            onShown: toastRef.afterActivate(),\n            onHidden: toastRef.afterClosed(),\n            onTap: toastPackage.onTap(),\n            onAction: toastPackage.onAction(),\n            portal: portal\n        };\n        if (!keepInactive) {\n            setTimeout(function () {\n                ins.toastRef.activate();\n                _this.currentlyActive = _this.currentlyActive + 1;\n            });\n        }\n        this.toasts.push(ins);\n        return ins;\n    };\n    ToastrService.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] }\n    ];\n    /** @nocollapse */\n    ToastrService.ctorParameters = function () { return [\n        { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [TOAST_CONFIG,] }] },\n        { type: Overlay },\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injector\"] },\n        { type: __WEBPACK_IMPORTED_MODULE_3__angular_platform_browser__[\"DomSanitizer\"] },\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgZone\"] }\n    ]; };\n    return ToastrService;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar Toast = /** @class */ (function () {\n    function Toast(toastrService, toastPackage, ngZone) {\n        var _this = this;\n        this.toastrService = toastrService;\n        this.toastPackage = toastPackage;\n        this.ngZone = ngZone;\n        /**\n         * width of progress bar\n         */\n        this.width = -1;\n        /**\n         * a combination of toast type and options.toastClass\n         */\n        this.toastClasses = '';\n        /**\n         * controls animation\n         */\n        this.state = {\n            value: 'inactive',\n            params: {\n                easeTime: this.toastPackage.config.easeTime,\n                easing: 'ease-in'\n            }\n        };\n        this.message = toastPackage.message;\n        this.title = toastPackage.title;\n        this.options = toastPackage.config;\n        this.originalTimeout = toastPackage.config.timeOut;\n        this.toastClasses = toastPackage.toastType + \" \" + toastPackage.config.toastClass;\n        this.sub = toastPackage.toastRef.afterActivate().subscribe(function () {\n            _this.activateToast();\n        });\n        this.sub1 = toastPackage.toastRef.manualClosed().subscribe(function () {\n            _this.remove();\n        });\n        this.sub2 = toastPackage.toastRef.timeoutReset().subscribe(function () {\n            _this.resetTimeout();\n        });\n    }\n    /**\n     * @return {?}\n     */\n    Toast.prototype.ngOnDestroy = /**\n     * @return {?}\n     */\n    function () {\n        this.sub.unsubscribe();\n        this.sub1.unsubscribe();\n        this.sub2.unsubscribe();\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeout);\n    };\n    /**\n     * activates toast and sets timeout\n     */\n    /**\n     * activates toast and sets timeout\n     * @return {?}\n     */\n    Toast.prototype.activateToast = /**\n     * activates toast and sets timeout\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        this.state = Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"a\" /* __assign */])({}, this.state, { value: 'active' });\n        if (!this.options.disableTimeOut && this.options.timeOut) {\n            this.outsideTimeout(function () { return _this.remove(); }, this.options.timeOut);\n            this.hideTime = new Date().getTime() + this.options.timeOut;\n            if (this.options.progressBar) {\n                this.outsideInterval(function () { return _this.updateProgress(); }, 10);\n            }\n        }\n    };\n    /**\n     * updates progress bar width\n     */\n    /**\n     * updates progress bar width\n     * @return {?}\n     */\n    Toast.prototype.updateProgress = /**\n     * updates progress bar width\n     * @return {?}\n     */\n    function () {\n        if (this.width === 0 || this.width === 100 || !this.options.timeOut) {\n            return;\n        }\n        /** @type {?} */\n        var now = new Date().getTime();\n        /** @type {?} */\n        var remaining = this.hideTime - now;\n        this.width = (remaining / this.options.timeOut) * 100;\n        if (this.options.progressAnimation === 'increasing') {\n            this.width = 100 - this.width;\n        }\n        if (this.width <= 0) {\n            this.width = 0;\n        }\n        if (this.width >= 100) {\n            this.width = 100;\n        }\n    };\n    /**\n     * @return {?}\n     */\n    Toast.prototype.resetTimeout = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        clearTimeout(this.timeout);\n        clearInterval(this.intervalId);\n        this.state = Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"a\" /* __assign */])({}, this.state, { value: 'active' });\n        this.outsideTimeout(function () { return _this.remove(); }, this.originalTimeout);\n        this.options.timeOut = this.originalTimeout;\n        this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n        this.width = -1;\n        if (this.options.progressBar) {\n            this.outsideInterval(function () { return _this.updateProgress(); }, 10);\n        }\n    };\n    /**\n     * tells toastrService to remove this toast after animation time\n     */\n    /**\n     * tells toastrService to remove this toast after animation time\n     * @return {?}\n     */\n    Toast.prototype.remove = /**\n     * tells toastrService to remove this toast after animation time\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        if (this.state.value === 'removed') {\n            return;\n        }\n        clearTimeout(this.timeout);\n        this.state = Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"a\" /* __assign */])({}, this.state, { value: 'removed' });\n        this.outsideTimeout(function () { return _this.toastrService.remove(_this.toastPackage.toastId); }, +this.toastPackage.config.easeTime);\n    };\n    /**\n     * @return {?}\n     */\n    Toast.prototype.tapToast = /**\n     * @return {?}\n     */\n    function () {\n        if (this.state.value === 'removed') {\n            return;\n        }\n        this.toastPackage.triggerTap();\n        if (this.options.tapToDismiss) {\n            this.remove();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    Toast.prototype.stickAround = /**\n     * @return {?}\n     */\n    function () {\n        if (this.state.value === 'removed') {\n            return;\n        }\n        clearTimeout(this.timeout);\n        this.options.timeOut = 0;\n        this.hideTime = 0;\n        // disable progressBar\n        clearInterval(this.intervalId);\n        this.width = 0;\n    };\n    /**\n     * @return {?}\n     */\n    Toast.prototype.delayedHideToast = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        if (this.options.disableTimeOut ||\n            this.options.extendedTimeOut === 0 ||\n            this.state.value === 'removed') {\n            return;\n        }\n        this.outsideTimeout(function () { return _this.remove(); }, this.options.extendedTimeOut);\n        this.options.timeOut = this.options.extendedTimeOut;\n        this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n        this.width = -1;\n        if (this.options.progressBar) {\n            this.outsideInterval(function () { return _this.updateProgress(); }, 10);\n        }\n    };\n    /**\n     * @param {?} func\n     * @param {?} timeout\n     * @return {?}\n     */\n    Toast.prototype.outsideTimeout = /**\n     * @param {?} func\n     * @param {?} timeout\n     * @return {?}\n     */\n    function (func, timeout) {\n        var _this = this;\n        if (this.ngZone) {\n            this.ngZone.runOutsideAngular(function () {\n                return (_this.timeout = setTimeout(function () { return _this.runInsideAngular(func); }, timeout));\n            });\n        }\n        else {\n            this.timeout = setTimeout(function () { return func(); }, timeout);\n        }\n    };\n    /**\n     * @param {?} func\n     * @param {?} timeout\n     * @return {?}\n     */\n    Toast.prototype.outsideInterval = /**\n     * @param {?} func\n     * @param {?} timeout\n     * @return {?}\n     */\n    function (func, timeout) {\n        var _this = this;\n        if (this.ngZone) {\n            this.ngZone.runOutsideAngular(function () {\n                return (_this.intervalId = setInterval(function () { return _this.runInsideAngular(func); }, timeout));\n            });\n        }\n        else {\n            this.intervalId = setInterval(function () { return func(); }, timeout);\n        }\n    };\n    /**\n     * @param {?} func\n     * @return {?}\n     */\n    Toast.prototype.runInsideAngular = /**\n     * @param {?} func\n     * @return {?}\n     */\n    function (func) {\n        if (this.ngZone) {\n            this.ngZone.run(function () { return func(); });\n        }\n        else {\n            func();\n        }\n    };\n    Toast.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"], args: [{\n                    selector: '[toast-component]',\n                    template: \"\\n  <button *ngIf=\\\"options.closeButton\\\" (click)=\\\"remove()\\\" class=\\\"toast-close-button\\\" aria-label=\\\"Close\\\">\\n    <span aria-hidden=\\\"true\\\">&times;</span>\\n  </button>\\n  <div *ngIf=\\\"title\\\" [class]=\\\"options.titleClass\\\" [attr.aria-label]=\\\"title\\\">\\n    {{ title }}\\n  </div>\\n  <div *ngIf=\\\"message && options.enableHtml\\\" role=\\\"alertdialog\\\" aria-live=\\\"polite\\\"\\n    [class]=\\\"options.messageClass\\\" [innerHTML]=\\\"message\\\">\\n  </div>\\n  <div *ngIf=\\\"message && !options.enableHtml\\\" role=\\\"alertdialog\\\" aria-live=\\\"polite\\\"\\n    [class]=\\\"options.messageClass\\\" [attr.aria-label]=\\\"message\\\">\\n    {{ message }}\\n  </div>\\n  <div *ngIf=\\\"options.progressBar\\\">\\n    <div class=\\\"toast-progress\\\" [style.width]=\\\"width + '%'\\\"></div>\\n  </div>\\n  \",\n                    animations: [\n                        Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"trigger\"])('flyInOut', [\n                            Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"state\"])('inactive', Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"style\"])({\n                                display: 'none',\n                                opacity: 0\n                            })),\n                            Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"state\"])('active', Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"style\"])({})),\n                            Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"state\"])('removed', Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"style\"])({ opacity: 0 })),\n                            Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"transition\"])('inactive => active', Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"animate\"])('{{ easeTime }}ms {{ easing }}')),\n                            Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"transition\"])('active => removed', Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations__[\"animate\"])('{{ easeTime }}ms {{ easing }}'))\n                        ])\n                    ],\n                    preserveWhitespaces: false\n                }] }\n    ];\n    /** @nocollapse */\n    Toast.ctorParameters = function () { return [\n        { type: ToastrService },\n        { type: ToastPackage },\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgZone\"] }\n    ]; };\n    Toast.propDecorators = {\n        toastClasses: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostBinding\"], args: ['class',] }],\n        state: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostBinding\"], args: ['@flyInOut',] }],\n        tapToast: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['click',] }],\n        stickAround: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['mouseenter',] }],\n        delayedHideToast: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['mouseleave',] }]\n    };\n    return Toast;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar DefaultGlobalConfig = /** @class */ (function () {\n    function DefaultGlobalConfig() {\n        // Global\n        this.maxOpened = 0;\n        this.autoDismiss = false;\n        this.newestOnTop = true;\n        this.preventDuplicates = false;\n        this.resetTimeoutOnDuplicate = false;\n        this.iconClasses = {\n            error: 'toast-error',\n            info: 'toast-info',\n            success: 'toast-success',\n            warning: 'toast-warning'\n        };\n        // Individual\n        this.toastComponent = Toast;\n        this.closeButton = false;\n        this.timeOut = 5000;\n        this.extendedTimeOut = 1000;\n        this.enableHtml = false;\n        this.progressBar = false;\n        this.toastClass = 'toast';\n        this.positionClass = 'toast-top-right';\n        this.titleClass = 'toast-title';\n        this.messageClass = 'toast-message';\n        this.easing = 'ease-in';\n        this.easeTime = 300;\n        this.tapToDismiss = true;\n        this.onActivateTick = false;\n        this.progressAnimation = 'decreasing';\n    }\n    return DefaultGlobalConfig;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar ToastrModule = /** @class */ (function () {\n    function ToastrModule(parentModule) {\n        if (parentModule) {\n            throw new Error('ToastrModule is already loaded. It should only be imported in your application\\'s main module.');\n        }\n    }\n    /**\n     * @param {?=} config\n     * @return {?}\n     */\n    ToastrModule.forRoot = /**\n     * @param {?=} config\n     * @return {?}\n     */\n    function (config) {\n        if (config === void 0) { config = {}; }\n        return {\n            ngModule: ToastrModule,\n            providers: [\n                { provide: TOAST_CONFIG, useValue: { config: config, defaults: DefaultGlobalConfig } },\n                OverlayContainer,\n                Overlay,\n                ToastrService,\n            ],\n        };\n    };\n    ToastrModule.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\n                    imports: [__WEBPACK_IMPORTED_MODULE_5__angular_common__[\"CommonModule\"]],\n                    exports: [Toast],\n                    declarations: [Toast],\n                    entryComponents: [Toast],\n                },] }\n    ];\n    /** @nocollapse */\n    ToastrModule.ctorParameters = function () { return [\n        { type: ToastrModule, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"SkipSelf\"] }] }\n    ]; };\n    return ToastrModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\nvar ToastNoAnimation = /** @class */ (function () {\n    function ToastNoAnimation(toastrService, toastPackage, appRef) {\n        var _this = this;\n        this.toastrService = toastrService;\n        this.toastPackage = toastPackage;\n        this.appRef = appRef;\n        /**\n         * width of progress bar\n         */\n        this.width = -1;\n        /**\n         * a combination of toast type and options.toastClass\n         */\n        this.toastClasses = '';\n        /**\n         * controls animation\n         */\n        this.state = 'inactive';\n        this.message = toastPackage.message;\n        this.title = toastPackage.title;\n        this.options = toastPackage.config;\n        this.originalTimeout = toastPackage.config.timeOut;\n        this.toastClasses = toastPackage.toastType + \" \" + toastPackage.config.toastClass;\n        this.sub = toastPackage.toastRef.afterActivate().subscribe(function () {\n            _this.activateToast();\n        });\n        this.sub1 = toastPackage.toastRef.manualClosed().subscribe(function () {\n            _this.remove();\n        });\n        this.sub2 = toastPackage.toastRef.timeoutReset().subscribe(function () {\n            _this.resetTimeout();\n        });\n    }\n    Object.defineProperty(ToastNoAnimation.prototype, \"displayStyle\", {\n        get: /**\n         * @return {?}\n         */\n        function () {\n            if (this.state === 'inactive') {\n                return 'none';\n            }\n            return 'inherit';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    ToastNoAnimation.prototype.ngOnDestroy = /**\n     * @return {?}\n     */\n    function () {\n        this.sub.unsubscribe();\n        this.sub1.unsubscribe();\n        this.sub2.unsubscribe();\n        clearInterval(this.intervalId);\n        clearTimeout(this.timeout);\n    };\n    /**\n     * activates toast and sets timeout\n     */\n    /**\n     * activates toast and sets timeout\n     * @return {?}\n     */\n    ToastNoAnimation.prototype.activateToast = /**\n     * activates toast and sets timeout\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        this.state = 'active';\n        if (!this.options.disableTimeOut && this.options.timeOut) {\n            this.timeout = setTimeout(function () {\n                _this.remove();\n            }, this.options.timeOut);\n            this.hideTime = new Date().getTime() + this.options.timeOut;\n            if (this.options.progressBar) {\n                this.intervalId = setInterval(function () { return _this.updateProgress(); }, 10);\n            }\n        }\n        if (this.options.onActivateTick) {\n            this.appRef.tick();\n        }\n    };\n    /**\n     * updates progress bar width\n     */\n    /**\n     * updates progress bar width\n     * @return {?}\n     */\n    ToastNoAnimation.prototype.updateProgress = /**\n     * updates progress bar width\n     * @return {?}\n     */\n    function () {\n        if (this.width === 0 || this.width === 100 || !this.options.timeOut) {\n            return;\n        }\n        /** @type {?} */\n        var now = new Date().getTime();\n        /** @type {?} */\n        var remaining = this.hideTime - now;\n        this.width = (remaining / this.options.timeOut) * 100;\n        if (this.options.progressAnimation === 'increasing') {\n            this.width = 100 - this.width;\n        }\n        if (this.width <= 0) {\n            this.width = 0;\n        }\n        if (this.width >= 100) {\n            this.width = 100;\n        }\n    };\n    /**\n     * @return {?}\n     */\n    ToastNoAnimation.prototype.resetTimeout = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        clearTimeout(this.timeout);\n        clearInterval(this.intervalId);\n        this.state = 'active';\n        this.options.timeOut = this.originalTimeout;\n        this.timeout = setTimeout(function () { return _this.remove(); }, this.originalTimeout);\n        this.hideTime = new Date().getTime() + (this.originalTimeout || 0);\n        this.width = -1;\n        if (this.options.progressBar) {\n            this.intervalId = setInterval(function () { return _this.updateProgress(); }, 10);\n        }\n    };\n    /**\n     * tells toastrService to remove this toast after animation time\n     */\n    /**\n     * tells toastrService to remove this toast after animation time\n     * @return {?}\n     */\n    ToastNoAnimation.prototype.remove = /**\n     * tells toastrService to remove this toast after animation time\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        if (this.state === 'removed') {\n            return;\n        }\n        clearTimeout(this.timeout);\n        this.state = 'removed';\n        this.timeout = setTimeout(function () {\n            return _this.toastrService.remove(_this.toastPackage.toastId);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    ToastNoAnimation.prototype.tapToast = /**\n     * @return {?}\n     */\n    function () {\n        if (this.state === 'removed') {\n            return;\n        }\n        this.toastPackage.triggerTap();\n        if (this.options.tapToDismiss) {\n            this.remove();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    ToastNoAnimation.prototype.stickAround = /**\n     * @return {?}\n     */\n    function () {\n        if (this.state === 'removed') {\n            return;\n        }\n        clearTimeout(this.timeout);\n        this.options.timeOut = 0;\n        this.hideTime = 0;\n        // disable progressBar\n        clearInterval(this.intervalId);\n        this.width = 0;\n    };\n    /**\n     * @return {?}\n     */\n    ToastNoAnimation.prototype.delayedHideToast = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        if (this.options.disableTimeOut ||\n            this.options.extendedTimeOut === 0 ||\n            this.state === 'removed') {\n            return;\n        }\n        this.timeout = setTimeout(function () { return _this.remove(); }, this.options.extendedTimeOut);\n        this.options.timeOut = this.options.extendedTimeOut;\n        this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n        this.width = -1;\n        if (this.options.progressBar) {\n            this.intervalId = setInterval(function () { return _this.updateProgress(); }, 10);\n        }\n    };\n    ToastNoAnimation.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"], args: [{\n                    selector: '[toast-component]',\n                    template: \"\\n  <button *ngIf=\\\"options.closeButton\\\" (click)=\\\"remove()\\\" class=\\\"toast-close-button\\\" aria-label=\\\"Close\\\">\\n    <span aria-hidden=\\\"true\\\">&times;</span>\\n  </button>\\n  <div *ngIf=\\\"title\\\" [class]=\\\"options.titleClass\\\" [attr.aria-label]=\\\"title\\\">\\n    {{ title }}\\n  </div>\\n  <div *ngIf=\\\"message && options.enableHtml\\\" role=\\\"alert\\\" aria-live=\\\"polite\\\"\\n    [class]=\\\"options.messageClass\\\" [innerHTML]=\\\"message\\\">\\n  </div>\\n  <div *ngIf=\\\"message && !options.enableHtml\\\" role=\\\"alert\\\" aria-live=\\\"polite\\\"\\n    [class]=\\\"options.messageClass\\\" [attr.aria-label]=\\\"message\\\">\\n    {{ message }}\\n  </div>\\n  <div *ngIf=\\\"options.progressBar\\\">\\n    <div class=\\\"toast-progress\\\" [style.width]=\\\"width + '%'\\\"></div>\\n  </div>\\n  \"\n                }] }\n    ];\n    /** @nocollapse */\n    ToastNoAnimation.ctorParameters = function () { return [\n        { type: ToastrService },\n        { type: ToastPackage },\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ApplicationRef\"] }\n    ]; };\n    ToastNoAnimation.propDecorators = {\n        toastClasses: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostBinding\"], args: ['class',] }],\n        displayStyle: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostBinding\"], args: ['style.display',] }],\n        tapToast: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['click',] }],\n        stickAround: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['mouseenter',] }],\n        delayedHideToast: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['mouseleave',] }]\n    };\n    return ToastNoAnimation;\n}());\nvar ToastNoAnimationModule = /** @class */ (function () {\n    function ToastNoAnimationModule() {\n    }\n    ToastNoAnimationModule.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\n                    imports: [__WEBPACK_IMPORTED_MODULE_5__angular_common__[\"CommonModule\"]],\n                    declarations: [ToastNoAnimation],\n                    exports: [ToastNoAnimation],\n                    entryComponents: [ToastNoAnimation]\n                },] }\n    ];\n    return ToastNoAnimationModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc\n */\n\n\n\n\n\n/***/ }),\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar DomHandler = /** @class */ (function () {\n    function DomHandler() {\n        this.calculatedScrollbarWidth = null;\n    }\n    DomHandler.prototype.addClass = function (element, className) {\n        if (element.classList)\n            element.classList.add(className);\n        else\n            element.className += ' ' + className;\n    };\n    DomHandler.prototype.addMultipleClasses = function (element, className) {\n        if (element.classList) {\n            var styles = className.split(' ');\n            for (var i = 0; i < styles.length; i++) {\n                element.classList.add(styles[i]);\n            }\n        }\n        else {\n            var styles = className.split(' ');\n            for (var i = 0; i < styles.length; i++) {\n                element.className += ' ' + styles[i];\n            }\n        }\n    };\n    DomHandler.prototype.removeClass = function (element, className) {\n        if (element.classList)\n            element.classList.remove(className);\n        else\n            element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n    };\n    DomHandler.prototype.hasClass = function (element, className) {\n        if (element.classList)\n            return element.classList.contains(className);\n        else\n            return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n    };\n    DomHandler.prototype.siblings = function (element) {\n        return Array.prototype.filter.call(element.parentNode.children, function (child) {\n            return child !== element;\n        });\n    };\n    DomHandler.prototype.find = function (element, selector) {\n        return element.querySelectorAll(selector);\n    };\n    DomHandler.prototype.findSingle = function (element, selector) {\n        return element.querySelector(selector);\n    };\n    DomHandler.prototype.index = function (element) {\n        var children = element.parentNode.childNodes;\n        var num = 0;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i] == element)\n                return num;\n            if (children[i].nodeType == 1)\n                num++;\n        }\n        return -1;\n    };\n    DomHandler.prototype.indexWithinGroup = function (element, attributeName) {\n        var children = element.parentNode.childNodes;\n        var num = 0;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i] == element)\n                return num;\n            if (children[i].attributes && children[i].attributes[attributeName] && children[i].nodeType == 1)\n                num++;\n        }\n        return -1;\n    };\n    DomHandler.prototype.relativePosition = function (element, target) {\n        var elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n        var targetHeight = target.offsetHeight;\n        var targetWidth = target.offsetWidth;\n        var targetOffset = target.getBoundingClientRect();\n        var windowScrollTop = this.getWindowScrollTop();\n        var viewport = this.getViewport();\n        var top, left;\n        if ((targetOffset.top + targetHeight + elementDimensions.height) > viewport.height) {\n            top = -1 * (elementDimensions.height);\n            if (targetOffset.top + top < 0) {\n                top = 0;\n            }\n        }\n        else {\n            top = targetHeight;\n        }\n        if ((targetOffset.left + elementDimensions.width) > viewport.width)\n            left = targetWidth - elementDimensions.width;\n        else\n            left = 0;\n        element.style.top = top + 'px';\n        element.style.left = left + 'px';\n    };\n    DomHandler.prototype.absolutePosition = function (element, target) {\n        var elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n        var elementOuterHeight = elementDimensions.height;\n        var elementOuterWidth = elementDimensions.width;\n        var targetOuterHeight = target.offsetHeight;\n        var targetOuterWidth = target.offsetWidth;\n        var targetOffset = target.getBoundingClientRect();\n        var windowScrollTop = this.getWindowScrollTop();\n        var windowScrollLeft = this.getWindowScrollLeft();\n        var viewport = this.getViewport();\n        var top, left;\n        if (targetOffset.top + targetOuterHeight + elementOuterHeight > viewport.height) {\n            top = targetOffset.top + windowScrollTop - elementOuterHeight;\n            if (top < 0) {\n                top = 0 + windowScrollTop;\n            }\n        }\n        else {\n            top = targetOuterHeight + targetOffset.top + windowScrollTop;\n        }\n        if (targetOffset.left + targetOuterWidth + elementOuterWidth > viewport.width)\n            left = targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth;\n        else\n            left = targetOffset.left + windowScrollLeft;\n        element.style.top = top + 'px';\n        element.style.left = left + 'px';\n    };\n    DomHandler.prototype.getHiddenElementOuterHeight = function (element) {\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        var elementHeight = element.offsetHeight;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n        return elementHeight;\n    };\n    DomHandler.prototype.getHiddenElementOuterWidth = function (element) {\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        var elementWidth = element.offsetWidth;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n        return elementWidth;\n    };\n    DomHandler.prototype.getHiddenElementDimensions = function (element) {\n        var dimensions = {};\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        dimensions.width = element.offsetWidth;\n        dimensions.height = element.offsetHeight;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n        return dimensions;\n    };\n    DomHandler.prototype.scrollInView = function (container, item) {\n        var borderTopValue = getComputedStyle(container).getPropertyValue('borderTopWidth');\n        var borderTop = borderTopValue ? parseFloat(borderTopValue) : 0;\n        var paddingTopValue = getComputedStyle(container).getPropertyValue('paddingTop');\n        var paddingTop = paddingTopValue ? parseFloat(paddingTopValue) : 0;\n        var containerRect = container.getBoundingClientRect();\n        var itemRect = item.getBoundingClientRect();\n        var offset = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;\n        var scroll = container.scrollTop;\n        var elementHeight = container.clientHeight;\n        var itemHeight = this.getOuterHeight(item);\n        if (offset < 0) {\n            container.scrollTop = scroll + offset;\n        }\n        else if ((offset + itemHeight) > elementHeight) {\n            container.scrollTop = scroll + offset - elementHeight + itemHeight;\n        }\n    };\n    DomHandler.prototype.fadeIn = function (element, duration) {\n        element.style.opacity = 0;\n        var last = +new Date();\n        var opacity = 0;\n        var tick = function () {\n            opacity = +element.style.opacity.replace(\",\", \".\") + (new Date().getTime() - last) / duration;\n            element.style.opacity = opacity;\n            last = +new Date();\n            if (+opacity < 1) {\n                (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n            }\n        };\n        tick();\n    };\n    DomHandler.prototype.fadeOut = function (element, ms) {\n        var opacity = 1, interval = 50, duration = ms, gap = interval / duration;\n        var fading = setInterval(function () {\n            opacity = opacity - gap;\n            if (opacity <= 0) {\n                opacity = 0;\n                clearInterval(fading);\n            }\n            element.style.opacity = opacity;\n        }, interval);\n    };\n    DomHandler.prototype.getWindowScrollTop = function () {\n        var doc = document.documentElement;\n        return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n    };\n    DomHandler.prototype.getWindowScrollLeft = function () {\n        var doc = document.documentElement;\n        return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n    };\n    DomHandler.prototype.matches = function (element, selector) {\n        var p = Element.prototype;\n        var f = p['matches'] || p.webkitMatchesSelector || p['mozMatchesSelector'] || p.msMatchesSelector || function (s) {\n            return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n        };\n        return f.call(element, selector);\n    };\n    DomHandler.prototype.getOuterWidth = function (el, margin) {\n        var width = el.offsetWidth;\n        if (margin) {\n            var style = getComputedStyle(el);\n            width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n        }\n        return width;\n    };\n    DomHandler.prototype.getHorizontalPadding = function (el) {\n        var style = getComputedStyle(el);\n        return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n    };\n    DomHandler.prototype.getHorizontalMargin = function (el) {\n        var style = getComputedStyle(el);\n        return parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n    };\n    DomHandler.prototype.innerWidth = function (el) {\n        var width = el.offsetWidth;\n        var style = getComputedStyle(el);\n        width += parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n        return width;\n    };\n    DomHandler.prototype.width = function (el) {\n        var width = el.offsetWidth;\n        var style = getComputedStyle(el);\n        width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n        return width;\n    };\n    DomHandler.prototype.getInnerHeight = function (el) {\n        var height = el.offsetHeight;\n        var style = getComputedStyle(el);\n        height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n        return height;\n    };\n    DomHandler.prototype.getOuterHeight = function (el, margin) {\n        var height = el.offsetHeight;\n        if (margin) {\n            var style = getComputedStyle(el);\n            height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n        }\n        return height;\n    };\n    DomHandler.prototype.getHeight = function (el) {\n        var height = el.offsetHeight;\n        var style = getComputedStyle(el);\n        height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n        return height;\n    };\n    DomHandler.prototype.getWidth = function (el) {\n        var width = el.offsetWidth;\n        var style = getComputedStyle(el);\n        width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) + parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);\n        return width;\n    };\n    DomHandler.prototype.getViewport = function () {\n        var win = window, d = document, e = d.documentElement, g = d.getElementsByTagName('body')[0], w = win.innerWidth || e.clientWidth || g.clientWidth, h = win.innerHeight || e.clientHeight || g.clientHeight;\n        return { width: w, height: h };\n    };\n    DomHandler.prototype.getOffset = function (el) {\n        var rect = el.getBoundingClientRect();\n        return {\n            top: rect.top + document.body.scrollTop,\n            left: rect.left + document.body.scrollLeft\n        };\n    };\n    DomHandler.prototype.replaceElementWith = function (element, replacementElement) {\n        var parentNode = element.parentNode;\n        if (!parentNode)\n            throw \"Can't replace element\";\n        return parentNode.replaceChild(replacementElement, element);\n    };\n    DomHandler.prototype.getUserAgent = function () {\n        return navigator.userAgent;\n    };\n    DomHandler.prototype.isIE = function () {\n        var ua = window.navigator.userAgent;\n        var msie = ua.indexOf('MSIE ');\n        if (msie > 0) {\n            // IE 10 or older => return version number\n            return true;\n        }\n        var trident = ua.indexOf('Trident/');\n        if (trident > 0) {\n            // IE 11 => return version number\n            var rv = ua.indexOf('rv:');\n            return true;\n        }\n        var edge = ua.indexOf('Edge/');\n        if (edge > 0) {\n            // Edge (IE 12+) => return version number\n            return true;\n        }\n        // other browser\n        return false;\n    };\n    DomHandler.prototype.appendChild = function (element, target) {\n        if (this.isElement(target))\n            target.appendChild(element);\n        else if (target.el && target.el.nativeElement)\n            target.el.nativeElement.appendChild(element);\n        else\n            throw 'Cannot append ' + target + ' to ' + element;\n    };\n    DomHandler.prototype.removeChild = function (element, target) {\n        if (this.isElement(target))\n            target.removeChild(element);\n        else if (target.el && target.el.nativeElement)\n            target.el.nativeElement.removeChild(element);\n        else\n            throw 'Cannot remove ' + element + ' from ' + target;\n    };\n    DomHandler.prototype.isElement = function (obj) {\n        return (typeof HTMLElement === \"object\" ? obj instanceof HTMLElement :\n            obj && typeof obj === \"object\" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === \"string\");\n    };\n    DomHandler.prototype.calculateScrollbarWidth = function () {\n        if (this.calculatedScrollbarWidth !== null)\n            return this.calculatedScrollbarWidth;\n        var scrollDiv = document.createElement(\"div\");\n        scrollDiv.className = \"ui-scrollbar-measure\";\n        document.body.appendChild(scrollDiv);\n        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n        document.body.removeChild(scrollDiv);\n        this.calculatedScrollbarWidth = scrollbarWidth;\n        return scrollbarWidth;\n    };\n    DomHandler.prototype.invokeElementMethod = function (element, methodName, args) {\n        element[methodName].apply(element, args);\n    };\n    DomHandler.prototype.clearSelection = function () {\n        if (window.getSelection) {\n            if (window.getSelection().empty) {\n                window.getSelection().empty();\n            }\n            else if (window.getSelection().removeAllRanges && window.getSelection().rangeCount > 0 && window.getSelection().getRangeAt(0).getClientRects().length > 0) {\n                window.getSelection().removeAllRanges();\n            }\n        }\n        else if (document['selection'] && document['selection'].empty) {\n            try {\n                document['selection'].empty();\n            }\n            catch (error) {\n                //ignore IE bug\n            }\n        }\n    };\n    DomHandler.prototype.getBrowser = function () {\n        if (!this.browser) {\n            var matched = this.resolveUserAgent();\n            this.browser = {};\n            if (matched.browser) {\n                this.browser[matched.browser] = true;\n                this.browser['version'] = matched.version;\n            }\n            if (this.browser['chrome']) {\n                this.browser['webkit'] = true;\n            }\n            else if (this.browser['webkit']) {\n                this.browser['safari'] = true;\n            }\n        }\n        return this.browser;\n    };\n    DomHandler.prototype.resolveUserAgent = function () {\n        var ua = navigator.userAgent.toLowerCase();\n        var match = /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(msie) ([\\w.]+)/.exec(ua) ||\n            ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) ||\n            [];\n        return {\n            browser: match[1] || \"\",\n            version: match[2] || \"0\"\n        };\n    };\n    DomHandler.zindex = 1000;\n    DomHandler = __decorate([\n        core_1.Injectable()\n    ], DomHandler);\n    return DomHandler;\n}());\nexports.DomHandler = DomHandler;\n//# sourceMappingURL=domhandler.js.map\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* Shorthand */\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(722));\n__export(__webpack_require__(15));\n__export(__webpack_require__(723));\n__export(__webpack_require__(724));\n__export(__webpack_require__(725));\n__export(__webpack_require__(726));\n__export(__webpack_require__(37));\n__export(__webpack_require__(727));\n__export(__webpack_require__(728));\n__export(__webpack_require__(729));\n__export(__webpack_require__(730));\n__export(__webpack_require__(731));\n__export(__webpack_require__(732));\n__export(__webpack_require__(232));\n__export(__webpack_require__(733));\n__export(__webpack_require__(734));\n__export(__webpack_require__(735));\n__export(__webpack_require__(736));\n__export(__webpack_require__(737));\n__export(__webpack_require__(738));\n__export(__webpack_require__(739));\n__export(__webpack_require__(740));\n__export(__webpack_require__(741));\n__export(__webpack_require__(742));\n__export(__webpack_require__(234));\n__export(__webpack_require__(233));\n__export(__webpack_require__(743));\n__export(__webpack_require__(749));\n__export(__webpack_require__(750));\n__export(__webpack_require__(751));\n__export(__webpack_require__(752));\n__export(__webpack_require__(753));\n__export(__webpack_require__(754));\n__export(__webpack_require__(238));\n__export(__webpack_require__(755));\n__export(__webpack_require__(65));\n__export(__webpack_require__(756));\n__export(__webpack_require__(239));\n__export(__webpack_require__(757));\n__export(__webpack_require__(758));\n__export(__webpack_require__(759));\n__export(__webpack_require__(760));\n__export(__webpack_require__(761));\n__export(__webpack_require__(235));\n__export(__webpack_require__(762));\n__export(__webpack_require__(763));\n__export(__webpack_require__(764));\n__export(__webpack_require__(765));\n__export(__webpack_require__(766));\n__export(__webpack_require__(79));\n__export(__webpack_require__(767));\n__export(__webpack_require__(768));\n__export(__webpack_require__(240));\n__export(__webpack_require__(769));\n__export(__webpack_require__(237));\n__export(__webpack_require__(770));\n__export(__webpack_require__(771));\n__export(__webpack_require__(772));\n__export(__webpack_require__(773));\n__export(__webpack_require__(774));\n__export(__webpack_require__(775));\n__export(__webpack_require__(776));\n__export(__webpack_require__(777));\n__export(__webpack_require__(778));\n__export(__webpack_require__(241));\n__export(__webpack_require__(779));\n__export(__webpack_require__(780));\n__export(__webpack_require__(781));\n__export(__webpack_require__(782));\n__export(__webpack_require__(783));\n__export(__webpack_require__(785));\n__export(__webpack_require__(786));\n__export(__webpack_require__(787));\n__export(__webpack_require__(242));\n__export(__webpack_require__(788));\n__export(__webpack_require__(789));\n__export(__webpack_require__(790));\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.GroupService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar GroupService = exports.GroupService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function GroupService(http) {\n        _classCallCheck(this, GroupService);\n\n        this._http = http;\n    }\n\n    _createClass(GroupService, [{\n        key: 'getGroups',\n        value: function getGroups() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"group\",\n                action: \"list\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'saveGroup',\n        value: function saveGroup(group) {\n            var token = localStorage.getItem('token');\n            group.module = \"group\";\n            group.action = \"insert\";\n            group.token = token;\n            return this._http.post(group).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUsersGroup',\n        value: function getUsersGroup(id_group) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"group\",\n                action: \"usersgroup\",\n                token: token,\n                id_group: id_group\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteGroup',\n        value: function deleteGroup(id_group) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"group\",\n                action: \"delete\",\n                token: token,\n                id_group: id_group\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteUserGroup',\n        value: function deleteUserGroup(user_id) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"group\",\n                action: \"deleteuser\",\n                token: token,\n                id_user: user_id\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getPendigUsers',\n        value: function getPendigUsers() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"group\",\n                action: \"pendingusers\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'saveUsersGroup',\n        value: function saveUsersGroup(grop_id, users) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"group\",\n                action: \"saveusers\",\n                token: token,\n                grop_id: grop_id,\n                users: users\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getmyGroups',\n        value: function getmyGroups() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"group\",\n                action: \"mygroups\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return GroupService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], GroupService);\n\n/***/ }),\n/* 12 */,\n/* 13 */,\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _trim = __webpack_require__(807);\n\nObject.keys(_trim).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _trim[key];\n    }\n  });\n});\n\nvar _filter = __webpack_require__(808);\n\nObject.keys(_filter).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _filter[key];\n    }\n  });\n});\n\nvar _filterfield = __webpack_require__(809);\n\nObject.keys(_filterfield).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _filterfield[key];\n    }\n  });\n});\n\nvar _filterdata = __webpack_require__(810);\n\nObject.keys(_filterdata).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _filterdata[key];\n    }\n  });\n});\n\nvar _truncate = __webpack_require__(811);\n\nObject.keys(_truncate).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _truncate[key];\n    }\n  });\n});\n\nvar _paginate = __webpack_require__(812);\n\nObject.keys(_paginate).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _paginate[key];\n    }\n  });\n});\n\nvar _order = __webpack_require__(813);\n\nObject.keys(_order).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _order[key];\n    }\n  });\n});\n\nvar _safehtml = __webpack_require__(814);\n\nObject.keys(_safehtml).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _safehtml[key];\n    }\n  });\n});\n\nvar _calculate = __webpack_require__(815);\n\nObject.keys(_calculate).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _calculate[key];\n    }\n  });\n});\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar core_2 = __webpack_require__(0);\nvar Header = /** @class */ (function () {\n    function Header() {\n    }\n    Header = __decorate([\n        core_2.Component({\n            selector: 'p-header',\n            template: '<ng-content></ng-content>'\n        })\n    ], Header);\n    return Header;\n}());\nexports.Header = Header;\nvar Footer = /** @class */ (function () {\n    function Footer() {\n    }\n    Footer = __decorate([\n        core_2.Component({\n            selector: 'p-footer',\n            template: '<ng-content></ng-content>'\n        })\n    ], Footer);\n    return Footer;\n}());\nexports.Footer = Footer;\nvar PrimeTemplate = /** @class */ (function () {\n    function PrimeTemplate(template) {\n        this.template = template;\n    }\n    PrimeTemplate.prototype.getType = function () {\n        return this.name;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PrimeTemplate.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input('pTemplate'),\n        __metadata(\"design:type\", String)\n    ], PrimeTemplate.prototype, \"name\", void 0);\n    PrimeTemplate = __decorate([\n        core_1.Directive({\n            selector: '[pTemplate]',\n            host: {}\n        }),\n        __metadata(\"design:paramtypes\", [core_1.TemplateRef])\n    ], PrimeTemplate);\n    return PrimeTemplate;\n}());\nexports.PrimeTemplate = PrimeTemplate;\n/* Deprecated */\nvar Column = /** @class */ (function () {\n    function Column() {\n        this.filterType = 'text';\n        this.exportable = true;\n        this.resizable = true;\n        this.sortFunction = new core_1.EventEmitter();\n    }\n    Column.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'header':\n                    _this.headerTemplate = item.template;\n                    break;\n                case 'body':\n                    _this.bodyTemplate = item.template;\n                    break;\n                case 'footer':\n                    _this.footerTemplate = item.template;\n                    break;\n                case 'filter':\n                    _this.filterTemplate = item.template;\n                    break;\n                case 'editor':\n                    _this.editorTemplate = item.template;\n                    break;\n                default:\n                    _this.bodyTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"field\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"colId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"sortField\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"filterField\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"sortable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"editable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"filter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"filterMatchMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"filterType\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"excludeGlobalFilter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Column.prototype, \"rowspan\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Column.prototype, \"colspan\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"scope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"exportable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"headerStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"headerStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"bodyStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"bodyStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"footerStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"footerStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"hidden\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"expander\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"filterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Column.prototype, \"filterMaxlength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"frozen\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"resizable\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Column.prototype, \"sortFunction\", void 0);\n    __decorate([\n        core_1.ContentChildren(PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Column.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ContentChild(core_1.TemplateRef),\n        __metadata(\"design:type\", core_1.TemplateRef)\n    ], Column.prototype, \"template\", void 0);\n    Column = __decorate([\n        core_2.Component({\n            selector: 'p-column',\n            template: ''\n        })\n    ], Column);\n    return Column;\n}());\nexports.Column = Column;\n/* Deprecated */\nvar Row = /** @class */ (function () {\n    function Row() {\n    }\n    __decorate([\n        core_1.ContentChildren(Column),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Row.prototype, \"columns\", void 0);\n    Row = __decorate([\n        core_2.Component({\n            selector: 'p-row',\n            template: \"\"\n        })\n    ], Row);\n    return Row;\n}());\nexports.Row = Row;\n/* Deprecated */\nvar HeaderColumnGroup = /** @class */ (function () {\n    function HeaderColumnGroup() {\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], HeaderColumnGroup.prototype, \"frozen\", void 0);\n    __decorate([\n        core_1.ContentChildren(Row),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], HeaderColumnGroup.prototype, \"rows\", void 0);\n    HeaderColumnGroup = __decorate([\n        core_2.Component({\n            selector: 'p-headerColumnGroup',\n            template: \"\"\n        })\n    ], HeaderColumnGroup);\n    return HeaderColumnGroup;\n}());\nexports.HeaderColumnGroup = HeaderColumnGroup;\n/* Deprecated */\nvar FooterColumnGroup = /** @class */ (function () {\n    function FooterColumnGroup() {\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FooterColumnGroup.prototype, \"frozen\", void 0);\n    __decorate([\n        core_1.ContentChildren(Row),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], FooterColumnGroup.prototype, \"rows\", void 0);\n    FooterColumnGroup = __decorate([\n        core_2.Component({\n            selector: 'p-footerColumnGroup',\n            template: \"\"\n        })\n    ], FooterColumnGroup);\n    return FooterColumnGroup;\n}());\nexports.FooterColumnGroup = FooterColumnGroup;\nvar SharedModule = /** @class */ (function () {\n    function SharedModule() {\n    }\n    SharedModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Header, Footer, Column, PrimeTemplate, Row, HeaderColumnGroup, FooterColumnGroup],\n            declarations: [Header, Footer, Column, PrimeTemplate, Row, HeaderColumnGroup, FooterColumnGroup]\n        })\n    ], SharedModule);\n    return SharedModule;\n}());\nexports.SharedModule = SharedModule;\n//# sourceMappingURL=shared.js.map\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.HttpService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _http = __webpack_require__(90);\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar HttpService = exports.HttpService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function HttpService(http, route, toastr) {\n        _classCallCheck(this, HttpService);\n\n        this._route = route;\n        this._http = http;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n    }\n\n    _createClass(HttpService, [{\n        key: 'jsonToFormData',\n        value: function jsonToFormData(inJSON, inTestJSON, inFormData, parentKey) {\n            var form_data = inFormData || new FormData();\n            var testJSON = inTestJSON || {};\n            for (var key in inJSON) {\n                var constructedKey = key;\n                if (parentKey) {\n                    constructedKey = parentKey + \".\" + key;\n                }\n\n                var value = inJSON[key];\n\n                if (value && value.constructor === {}.constructor) {\n                    // This is a JSON, we now need to recurse!\n                    this.jsonToFormData(value, testJSON, form_data, constructedKey);\n                } else if (Array.isArray(value)) {\n                    for (var i = 0; i < value.length; i++) {\n                        form_data.append(key + '[]', value[i]);\n                    }\n                } else {\n                    form_data.append(constructedKey, inJSON[key]);\n                    testJSON[constructedKey] = inJSON[key];\n                }\n            }\n            return form_data;\n        }\n    }, {\n        key: 'post',\n        value: function post(postData) {\n            var _this = this;\n\n            var withCredentials = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n            //var body = $.param(postData);\n            var headers = new Headers();\n            headers.append('Content-type', 'application/json');\n            var formData = this.jsonToFormData(postData);\n            return this._http.post(\"api/routes.php\", formData, { headers: headers, withCredentials: withCredentials }).map(function (res) {\n                var rs = { data: \"error\", message: \"error\" };\n                if (res.json()) {\n                    rs = res.json();\n                    if (rs.data === \"notlog\") {\n                        _this.toastr.warning(rs.message, \"warning!\");\n                        _this._route.navigate(['/login']);\n                        return { data: \"error\", message: \"error\" };\n                    }\n                }\n                return rs;\n            }).catch(function (error) {\n                _this.logError(postData.module, postData.action, error);\n                _this._route.navigate(['/login']);\n                return { data: error, message: \"error\" };\n            });\n        }\n    }, {\n        key: 'logError',\n        value: function logError(tmd, tac, error) {\n            var params = {\n                module: \"login\",\n                action: \"saverror\",\n                tomodule: tmd,\n                toaction: tac,\n                error: error,\n                token: localStorage.getItem('token')\n            };\n            var headers = new Headers();\n            headers.append('Content-type', 'application/json');\n            var formData = this.jsonToFormData(params);\n            this._http.post(\"api/routes.php\", formData, { headers: headers, withCredentials: true }).map(function (res) {\n                //console.log(res);\n            }).catch(function (error) {\n                //console.log(\"Error\");\n            });\n        }\n    }, {\n        key: 'postWithFile',\n        value: function postWithFile(postData, files) {\n            var withCredentials = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n\n\n            if (document.getElementById(\"loader\")) {\n                document.getElementById(\"loader\").style.display = \"display\";\n            }\n            /*var headers = this._http._defaultOptions.headers;\n            headers.append('Content-type','application/x-www-form-urlencoded');*/\n            var headers = new Headers();\n            var formData = this.jsonToFormData(postData);\n\n            // For multiple files\n            if (files && Array.isArray(files)) {\n                for (var i = 0; i < files.length; i++) {\n                    formData.append('files[]', (files[i], files[i].name));\n                }\n            }\n            return this._http.post(\"api/routes.php\", formData, { headers: headers, withCredentials: withCredentials }).map(function (res) {\n                var rs = res.json();\n                if (rs) {\n                    if (rs.data === \"error\") {\n                        this.toastr.error(rs.message, \"Error!\");\n                        this._route.navigate(['/login']);\n                        return { data: \"error\", message: rs.message };\n                    } else if (rs.data === \"notlog\") {\n                        this.toastr.warning(rs.message, \"warning!\");\n                        this._route.navigate(['/login']);\n                        return { data: \"error\", message: rs.message };\n                    }\n                }\n                if (document.getElementById(\"loader\")) {\n                    document.getElementById(\"loader\").style.display = \"none\";\n                }\n                return rs;\n            }.bind(this)).catch(function (error) {\n                if (document.getElementById(\"loader\")) {\n                    document.getElementById(\"loader\").style.display = \"none\";\n                }\n                this._route.navigate(['/login']);\n                return { data: error, message: \"error\" };\n            }.bind(this));\n        }\n    }, {\n        key: 'postExternal',\n        value: function postExternal(postData) {\n            var _this2 = this;\n\n            var withCredentials = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n\n            //var body = $.param(postData);\n            var headers = new Headers();\n            headers.append('Content-type', 'application/json');\n            var formData = this.jsonToFormData(postData);\n            return this._http.post(\"api/private/eroutes.php\", formData, { headers: headers, withCredentials: withCredentials }).map(function (res) {\n                var rs = { data: \"error\", message: \"error\" };\n                if (res.json()) {\n                    rs = res.json();\n                    if (rs.data === \"error\" && rs.message !== \"Session has Expired\" && rs.message !== \"User or Password incorrect!\") {\n                        _this2.toastr.error(rs.message, \"Error!\");\n                        _this2._route.navigate(['/login']);\n                        return { data: \"error\", message: rs.message };\n                    } else if (rs.data === \"notlog\") {\n                        _this2.toastr.warning(rs.message, \"warning!\");\n                        _this2._route.navigate(['/login']);\n                        return { data: \"error\", message: \"error\" };\n                    } else if (rs.data === \"error\" && rs.message == \"User or Password incorrect!\") {\n                        _this2.toastr.error(rs.message, \"Error!\");\n                        return { data: \"error\", message: rs.message };\n                    }\n                }\n                return rs;\n            }).catch(function (error) {\n                _this2.logError(postData.module, postData.action, error);\n                _this2._route.navigate(['/login']);\n                return { data: error, message: \"error\" };\n            });\n        }\n    }]);\n\n    return HttpService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.Http, _router.Router, _ngxToastr.ToastrService], HttpService);\n\n/***/ }),\n/* 17 */,\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ProjectService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ProjectService = exports.ProjectService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n  function ProjectService(http) {\n    _classCallCheck(this, ProjectService);\n\n    this.http = http;\n  }\n\n  _createClass(ProjectService, [{\n    key: \"getprojectList\",\n    value: function getprojectList(filter) {\n      var token = localStorage.getItem(\"token\");\n      filter.module = \"project\";\n      filter.action = \"listx\";\n      filter.token = token;\n      return this.http.post(filter).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getmyProjects\",\n    value: function getmyProjects() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"myprojects\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putproject\",\n    value: function putproject(project) {\n      var token = localStorage.getItem(\"token\");\n      project.module = \"project\";\n      project.action = \"insert\";\n      project.token = token;\n      return this.http.postWithFile(project, project.attachments).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putMilestone\",\n    value: function putMilestone(project) {\n      var token = localStorage.getItem(\"token\");\n      project.module = \"project\";\n      project.action = \"milestone\";\n      project.token = token;\n      return this.http.post(project).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getMilestone\",\n    value: function getMilestone(proj_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"mymilestone\",\n        token: token,\n        proj_id: proj_id\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putFromEvent\",\n    value: function putFromEvent(project) {\n      var token = localStorage.getItem(\"token\");\n      project.module = \"project\";\n      project.action = \"fromevent\";\n      project.token = token;\n      return this.http.postWithFile(project, project.attachments).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"deleteMilestone\",\n    value: function deleteMilestone(pjml_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"deletemilestone\",\n        token: token,\n        pjml_id: pjml_id\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getStates\",\n    value: function getStates() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"states\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getproject\",\n    value: function getproject(tkid) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"project\",\n        proj_id: tkid,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getprojectInfo\",\n    value: function getprojectInfo(tkid) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"projectinfo\",\n        proj_id: tkid,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getCategories\",\n    value: function getCategories() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"categories\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"approveproject\",\n    value: function approveproject(tkid) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"approve\",\n        proj_id: tkid,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(proj_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"attachments\",\n        proj_id: proj_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"deleteAttachmentProject\",\n    value: function deleteAttachmentProject(proj_id, att_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"deleteattachments\",\n        proj_id: proj_id,\n        att_id: att_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"setStatusproject\",\n    value: function setStatusproject(proj_id, status) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"setstatus\",\n        proj_id: proj_id,\n        para_status: status,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTimeline\",\n    value: function getTimeline(tkid) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"timeline\",\n        proj_id: tkid,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getprojectNotes\",\n    value: function getprojectNotes(proj_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"ProjectNote\",\n        proj_id: proj_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getCommentsUsers\",\n    value: function getCommentsUsers(proj_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"project\",\n        action: \"getcommentsusers\",\n        proj_id: proj_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }]);\n\n  return ProjectService;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_http.HttpService], ProjectService);\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TaskService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TaskService = exports.TaskService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n  function TaskService(http) {\n    _classCallCheck(this, TaskService);\n\n    this.http = http;\n  }\n\n  _createClass(TaskService, [{\n    key: \"getTasks\",\n    value: function getTasks() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"list\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"status\",\n    value: function status(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"status\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTaskList\",\n    value: function getTaskList(filter) {\n      var token = localStorage.getItem(\"token\");\n      filter.module = \"task\";\n      filter.action = \"listx\";\n      filter.token = token;\n      return this.http.post(filter).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getPercentage\",\n    value: function getPercentage() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"percentage\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getStates\",\n    value: function getStates() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"states\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getUserEvent\",\n    value: function getUserEvent() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"events\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getComments\",\n    value: function getComments(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"comments\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"rejectTask\",\n    value: function rejectTask(task_id, retk_description) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"reject\",\n        task_id: task_id,\n        retk_description: retk_description,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"backlogTask\",\n    value: function backlogTask(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"backlog\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"impTask\",\n    value: function impTask(task_id, imtk_description) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"improvement\",\n        task_id: task_id,\n        imtk_description: imtk_description,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getUserTasks\",\n    value: function getUserTasks() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"userlist\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"deleteTask\",\n    value: function deleteTask(task) {\n      var token = localStorage.getItem(\"token\");\n      task.module = \"task\";\n      task.action = \"delete\";\n      task.token = token;\n      return this.http.post(task).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putTask\",\n    value: function putTask(task) {\n      var token = localStorage.getItem(\"token\");\n      task.module = \"task\";\n      task.action = \"insert\";\n      task.token = token;\n      return this.http.postWithFile(task, task.attachments).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"duplicateTask\",\n    value: function duplicateTask(task) {\n      var token = localStorage.getItem(\"token\");\n      task.module = \"task\";\n      task.action = \"duplicate\";\n      task.token = token;\n      return this.http.postWithFile(task, task.attachments).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTask\",\n    value: function getTask(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"task\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"attachments\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task_id, att_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"deleteattachments\",\n        task_id: task_id,\n        att_id: att_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putExtra\",\n    value: function putExtra(task) {\n      var token = localStorage.getItem(\"token\");\n      task.module = \"task\";\n      task.action = \"extra\";\n      task.token = token;\n      return this.http.postWithFile(task, task.attachments).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"editTask\",\n    value: function editTask(task) {\n      var token = localStorage.getItem(\"token\");\n      task.module = \"task\";\n      task.action = \"edittask\";\n      task.token = token;\n      return this.http.post(task).map(function (result) {\n        return result;\n      });\n    }\n  }, {\n    key: \"setStatusTask\",\n    value: function setStatusTask(task_id, status) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"setstatus\",\n        task_id: task_id,\n        para_status: status,\n        //task_approved : task_approved,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTimeline\",\n    value: function getTimeline(tkid) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"timeline\",\n        tkid: tkid,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getRejected\",\n    value: function getRejected(tkid) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"rejected\",\n        tkid: tkid,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTaskproject\",\n    value: function getTaskproject(proj_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"taskproject\",\n        proj_id: proj_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getBadges\",\n    value: function getBadges() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getbadges\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"removeBadge\",\n    value: function removeBadge(id, type) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"removebadges\",\n        task_id: id,\n        not_type: type,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"acceptTask\",\n    value: function acceptTask(taskid, catid) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"accepttask\",\n        taskid: taskid,\n        catid: catid,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getBadges\",\n    value: function getBadges() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getbadges\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"removeBadge\",\n    value: function removeBadge(id, type) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"removebadges\",\n        task_id: id,\n        not_type: type,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putAttachments\",\n    value: function putAttachments(task) {\n      var token = localStorage.getItem(\"token\");\n      task.module = \"task\";\n      task.action = \"insertattachment\";\n      task.token = token;\n      return this.http.postWithFile(task, task.attachments).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getMyTags\",\n    value: function getMyTags() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"mytags\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTagsByTask\",\n    value: function getTagsByTask(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"gettagsbytask\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"deleteTagsByTask\",\n    value: function deleteTagsByTask(task_id, tag_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"deletetagsbytask\",\n        task_id: task_id,\n        tag_id: tag_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"setTag\",\n    value: function setTag(data) {\n      var token = localStorage.getItem(\"token\");\n      data.module = \"task\";\n      data.action = \"settag\";\n      data.token = token;\n      return this.http.post(data).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"saveNewTag\",\n    value: function saveNewTag(data) {\n      var token = localStorage.getItem(\"token\");\n      data.module = \"task\";\n      data.action = \"inserttag\";\n      data.token = token;\n      return this.http.post(data).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getAdjusted\",\n    value: function getAdjusted(taskid) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"adjusted\",\n        token: token,\n        taskid: taskid\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putTaskFields\",\n    value: function putTaskFields(taskid, fld) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"insertfields\",\n        token: token,\n        taskid: taskid,\n        fields: '{\"fields\": ' + JSON.stringify(fld) + '}'\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTaskFields\",\n    value: function getTaskFields(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getfields\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getCommentsUsers\",\n    value: function getCommentsUsers(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getcommentsusers\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getDailyTimeline\",\n    value: function getDailyTimeline(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getdailytimeline\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTimelinetk\",\n    value: function getTimelinetk(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"timelinetk\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"moveTaskCpImp\",\n    value: function moveTaskCpImp(task_id, retk_description) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"improvement\",\n        task_id: task_id,\n        retk_description: retk_description,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTasksbyMe\",\n    value: function getTasksbyMe() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getbyme\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getCurrentDate\",\n    value: function getCurrentDate() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"currentdate\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getPercentageDetail\",\n    value: function getPercentageDetail(state) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"percentagedetail\",\n        state: state,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getMyTask\",\n    value: function getMyTask(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"mytask\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getJoin\",\n    value: function getJoin(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getjoin\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getInfoTaskJoin\",\n    value: function getInfoTaskJoin(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getinfotaskjoin\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTaskSharedList\",\n    value: function getTaskSharedList(filter) {\n      var token = localStorage.getItem(\"token\");\n      filter.module = \"task\";\n      filter.action = \"liststaskshared\";\n      filter.token = token;\n      return this.http.post(filter).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"saveTaskJoin\",\n    value: function saveTaskJoin(task) {\n      var token = localStorage.getItem(\"token\");\n      task.module = \"task\";\n      task.action = \"savetaskjoin\";\n      task.token = token;\n      return this.http.post(task).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"associateTaskJoin\",\n    value: function associateTaskJoin(task) {\n      var token = localStorage.getItem(\"token\");\n      task.module = \"task\";\n      task.action = \"associatetaskjoin\";\n      task.token = token;\n      return this.http.post(task).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"deleteTaskJoin\",\n    value: function deleteTaskJoin(task_child_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"deletetaskjoin\",\n        task_child_id: task_child_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getInfoTaskCriteria\",\n    value: function getInfoTaskCriteria(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getinfotaskcriteria\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getFormTaskCriteria\",\n    value: function getFormTaskCriteria(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getformtaskcriteria\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"reopenTask\",\n    value: function reopenTask(task_id, status) {\n\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"reopen\",\n        task_id: task_id,\n        status: status,\n        token: token\n      };\n\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getLevels\",\n    value: function getLevels() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"getlevels\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"deletesprintbytask\",\n    value: function deletesprintbytask(task_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"task\",\n        action: \"deletesprintbytask\",\n        task_id: task_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getExcel\",\n    value: function getExcel(filter) {\n      var token = localStorage.getItem(\"token\");\n      filter.module = \"task\";\n      filter.action = \"excel\";\n      filter.token = token;\n      return this.http.post(filter).map(function (res) {\n        return res;\n      });\n    }\n  }]);\n\n  return TaskService;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_http.HttpService], TaskService);\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.UsersService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nvar _operators = __webpack_require__(228);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UsersService = exports.UsersService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function UsersService(httpService) {\n        _classCallCheck(this, UsersService);\n\n        this._http = httpService;\n    }\n\n    _createClass(UsersService, [{\n        key: 'getUserList',\n        value: function getUserList() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"getlist\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'listUsersEdit',\n        value: function listUsersEdit(grop_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"listusersedit\",\n                grop_id: grop_id,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUsersx',\n        value: function getUsersx(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"users\";\n            filter.action = \"listx\";\n            filter.token = token;\n            return this._http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCRMUsers',\n        value: function getCRMUsers() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"listcrm\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUsersExternal',\n        value: function getUsersExternal(bd_name) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"listuserexternal\",\n                dbname: bd_name,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyUsers',\n        value: function getMyUsers() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"listmyusers\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'saveUser',\n        value: function saveUser(data) {\n            var _this = this;\n\n            var token = localStorage.getItem('token');\n            data.module = \"users\";\n            data.action = \"saveUser\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n                _this.reload();\n            });\n        }\n    }, {\n        key: 'changePassword',\n        value: function changePassword(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"users\";\n            data.action = \"changepw\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'editUser',\n        value: function editUser(data) {\n            var token = localStorage.getItem(\"token\");\n            data.module = \"users\";\n            data.action = \"editUser\";\n            data.token = token;\n            //console.log(product);\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'geteditUser',\n        value: function geteditUser(user_id, noGroup) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"geteditUser\",\n                token: token,\n                user_id: user_id,\n                no_group: noGroup\n\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'editUserSettings',\n        value: function editUserSettings(data) {\n            var token = localStorage.getItem(\"token\");\n            data.module = \"users\";\n            data.action = \"editusersettings\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteUser',\n        value: function deleteUser(user_id) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"users\",\n                action: \"deleteuser\",\n                token: token,\n                user_id: user_id\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getNotificationsList',\n        value: function getNotificationsList() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"getnotificationslist\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUserInfo',\n        value: function getUserInfo(user_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"getuserinfo\",\n                user_id: user_id,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyUserData',\n        value: function getMyUserData() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"myuserdata\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getEmailList',\n        value: function getEmailList() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"emaillist\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getPreferences',\n        value: function getPreferences() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"getmypreferences\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'savePreferences',\n        value: function savePreferences(preferences) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"savepreferences\",\n                token: token,\n                preferences: preferences\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'verifyEmail',\n        value: function verifyEmail(email) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"users\",\n                action: \"verify\",\n                email: email,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getExternalList',\n        value: function getExternalList() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"externallist\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getDataBase',\n        value: function getDataBase(user_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"getdatabase\",\n                user_id: user_id,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getRolUser',\n        value: function getRolUser() {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"users\",\n                action: \"getroluser\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUserHistory',\n        value: function getUserHistory(user_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"gethistoryusersgroup\",\n                user_id: user_id,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'saveUserHistory',\n        value: function saveUserHistory(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"users\";\n            data.action = \"puthistoryusergroup\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'updateUserHistory',\n        value: function updateUserHistory(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"users\";\n            data.action = \"edithistoryusergroup\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteUserHistory',\n        value: function deleteUserHistory(grhi_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"users\",\n                action: \"deletehistoryusergroup\",\n                token: token,\n                grhi_id: grhi_id\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return UsersService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], UsersService);\n\n/***/ }),\n/* 21 */,\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.ProductService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ProductService = exports.ProductService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function ProductService(http) {\n        _classCallCheck(this, ProductService);\n\n        this.http = http;\n    }\n\n    _createClass(ProductService, [{\n        key: \"getProducts\",\n        value: function getProducts() {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"product\",\n                action: \"list\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: \"getProductsx\",\n        value: function getProductsx(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"product\";\n            filter.action = \"listx\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: \"getProduct\",\n        value: function getProduct(idprod) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"product\",\n                action: \"listproduct\",\n                prod_id: idprod,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: \"putProduct\",\n        value: function putProduct(product) {\n            var token = localStorage.getItem(\"token\");\n            product.module = \"product\";\n            product.action = \"insert\";\n            product.token = token;\n            //console.log(product);\n            return this.http.post(product).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: \"updateProduct\",\n        value: function updateProduct(product) {\n            var token = localStorage.getItem(\"token\");\n            product.module = \"product\";\n            product.action = \"update\";\n            product.token = token;\n            //console.log(product);\n            return this.http.post(product).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: \"deleteProduct\",\n        value: function deleteProduct(idprod) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"product\",\n                action: \"delete\",\n                prod_id: idprod,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return ProductService;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_http.HttpService], ProductService);\n\n/***/ }),\n/* 23 */,\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.NoteService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NoteService = exports.NoteService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function NoteService(http) {\n        _classCallCheck(this, NoteService);\n\n        this.http = http;\n    }\n\n    _createClass(NoteService, [{\n        key: 'getNotes',\n        value: function getNotes() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"note\",\n                action: \"list\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putNote',\n        value: function putNote(note) {\n            var token = localStorage.getItem('token');\n            note.module = \"note\";\n            note.action = \"insert\";\n            note.token = token;\n            if (!note.attachments) {\n                note.attachments = [];\n            }\n            return this.http.postWithFile(note, note.attachments).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getNote',\n        value: function getNote(ntid) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"note\",\n                action: \"note\",\n                ntid: ntid,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return NoteService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], NoteService);\n\n/***/ }),\n/* 25 */,\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SprintService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SprintService = exports.SprintService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n  function SprintService(http) {\n    _classCallCheck(this, SprintService);\n\n    this.http = http;\n  }\n\n  _createClass(SprintService, [{\n    key: \"getMySprints\",\n    value: function getMySprints() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"mysprints\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getSprintFull\",\n    value: function getSprintFull(spri_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"sprintfull\",\n        spri_id: spri_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getSprintDetail\",\n    value: function getSprintDetail(id_sprint) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"sprintdetails\",\n        token: token,\n        id_sprint: id_sprint\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getSprint\",\n    value: function getSprint(id_sprint) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"sprintn\",\n        token: token,\n        id_sprint: id_sprint\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getHead\",\n    value: function getHead(id_group) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"head\",\n        token: token,\n        grop_id: id_group\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTeam\",\n    value: function getTeam(id_group) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"team\",\n        token: token,\n        grop_id: id_group\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"saveSprintTasks\",\n    value: function saveSprintTasks(id_sprint, tasks) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"savespr\",\n        token: token,\n        id_sprint: id_sprint,\n        tasks: tasks\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"delSprintTasks\",\n    value: function delSprintTasks(id_sprint, tasks) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"delspr\",\n        token: token,\n        id_sprint: id_sprint,\n        tasks: tasks\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"saveTaskToSprint\",\n    value: function saveTaskToSprint(id_sprint, task) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"saveTasktoSprint\",\n        token: token,\n        id_sprint: id_sprint,\n        task: task\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"deleteSprint\",\n    value: function deleteSprint(id_sprint) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"deleteSprint\",\n        token: token,\n        id_sprint: id_sprint\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTasksWoSp\",\n    value: function getTasksWoSp(filter) {\n      var token = localStorage.getItem(\"token\");\n      filter.module = \"sprint\";\n      filter.action = \"TasksWoSp\";\n      filter.token = token;\n      return this.http.post(filter).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putSprint\",\n    value: function putSprint(spri) {\n      var token = localStorage.getItem(\"token\");\n\n      spri.module = \"sprint\";\n      spri.action = \"insert\";\n      spri.token = token;\n\n      return this.http.post(spri).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"putSprintDay\",\n    value: function putSprintDay(spri) {\n      var token = localStorage.getItem(\"token\");\n\n      spri.module = \"sprint\";\n      spri.action = \"insertdays\";\n      spri.token = token;\n\n      return this.http.post(spri).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getSum\",\n    value: function getSum(spri_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"sum\",\n        spri_id: spri_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getMySpri\",\n    value: function getMySpri() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"myspri\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getListSprints\",\n    value: function getListSprints() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"listsprints\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getMySprintDetail\",\n    value: function getMySprintDetail() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"mysprintdetails\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getListReport\",\n    value: function getListReport(grop_id) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"listreport\",\n        grop_id: grop_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getTasksReport\",\n    value: function getTasksReport(grop_id, date_init, date_end) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"tasksreport\",\n        grop_id: grop_id,\n        date_init: date_init,\n        date_end: date_end,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getUsersReport\",\n    value: function getUsersReport(grop_id, date_init, date_end) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"usersreport\",\n        grop_id: grop_id,\n        date_init: date_init,\n        date_end: date_end,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getProjectsReport\",\n    value: function getProjectsReport(grop_id, date_init, date_end) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"projectsreport\",\n        grop_id: grop_id,\n        date_init: date_init,\n        date_end: date_end,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getMySprintInfo\",\n    value: function getMySprintInfo(id_sprint) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"sprintinfo\",\n        id_sprint: id_sprint,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getExcel\",\n    value: function getExcel(type, grop_id, date_init, date_end) {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"sprint\",\n        action: \"excel\",\n        type: type,\n        grop_id: grop_id,\n        date_init: date_init,\n        date_end: date_end,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }]);\n\n  return SprintService;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_http.HttpService], SprintService);\n\n/***/ }),\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.DirectoryService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DirectoryService = exports.DirectoryService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function DirectoryService(httpService) {\n        _classCallCheck(this, DirectoryService);\n\n        this._http = httpService;\n    }\n\n    _createClass(DirectoryService, [{\n        key: 'getContacts',\n        value: function getContacts() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"directory\",\n                action: \"list\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getContact',\n        value: function getContact(cont_id) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"directory\",\n                action: \"listcontact\",\n                cont_id: cont_id,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'saveContact',\n        value: function saveContact(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"directory\";\n            data.action = \"savecontac\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'verifyEmaild',\n        value: function verifyEmaild(email) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"directory\",\n                action: \"verify\",\n                email: email,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'updateContact',\n        value: function updateContact(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"directory\";\n            data.action = \"updatecontac\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteContact',\n        value: function deleteContact(cont_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"directory\",\n                action: \"deleteContact\",\n                cont_id: cont_id,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUsersx',\n        value: function getUsersx(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"directory\";\n            filter.action = \"listx\";\n            filter.token = token;\n            return this._http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getGroups',\n        value: function getGroups() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"directory\",\n                action: \"listgroups\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCategories',\n        value: function getCategories(idusuario) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"directory\",\n                action: \"categories\",\n                idusuario: idusuario,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putEmail',\n        value: function putEmail(user_id, email) {\n            var token = localStorage.getItem('token');\n            var params = {\n                token: token,\n                module: \"directory\",\n                action: \"addemail\",\n                idusuario: user_id,\n                email: email\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return DirectoryService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], DirectoryService);\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.HeaderService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar HeaderService = exports.HeaderService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function HeaderService(httpService) {\n        _classCallCheck(this, HeaderService);\n\n        this._http = httpService;\n    }\n\n    _createClass(HeaderService, [{\n        key: 'getUser',\n        value: function getUser() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"menu\",\n                action: \"user\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMenuByUser',\n        value: function getMenuByUser() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"menu\",\n                action: \"menubyuser\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getDeskNotificatons',\n        value: function getDeskNotificatons() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"notifications\",\n                action: \"desknotification\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'clearNotificatons',\n        value: function clearNotificatons() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"notifications\",\n                action: \"clear\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'setCatNotification',\n        value: function setCatNotification(id, cat) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"notifications\",\n                action: \"setcatnotification\",\n                id_notification: id,\n                id_catnotification: cat,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCheckVersion',\n        value: function getCheckVersion() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"notifications\",\n                action: \"checkversion\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getListx',\n        value: function getListx(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"notifications\";\n            filter.action = \"listx\";\n            filter.token = token;\n            return this._http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return HeaderService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], HeaderService);\n\n/***/ }),\n/* 33 */,\n/* 34 */,\n/* 35 */,\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.MailService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MailService = exports.MailService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function MailService(httpService) {\n        _classCallCheck(this, MailService);\n\n        this._http = httpService;\n    }\n\n    _createClass(MailService, [{\n        key: 'searchMail',\n        value: function searchMail(search) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"search\",\n                token: token,\n                search: search\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getEmails',\n        value: function getEmails() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"inbox\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getFolders',\n        value: function getFolders() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"getfolders\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMessage',\n        value: function getMessage(msgid) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"email\",\n                token: token,\n                msgid: msgid\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'sendMessage',\n        value: function sendMessage(message) {\n            var token = localStorage.getItem('token');\n            message.module = \"mailbox\";\n            message.action = \"sendemail\";\n            message.token = token;\n            return this._http.postWithFile(message, message.attachments).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'emailUpdate',\n        value: function emailUpdate() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"update\",\n                token: token\n            };\n            return this._http.postWithFile(params, params.attachments).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getFlags',\n        value: function getFlags() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"getflags\",\n                token: token\n            };\n            return this._http.post(params).map(function (data) {\n                return data;\n            });\n        }\n    }, {\n        key: 'setFlag',\n        value: function setFlag(idmail, idflag) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"setflag\",\n                emailid: idmail,\n                flag: idflag,\n                token: token\n            };\n            return this._http.post(params).map(function (data) {\n                return data;\n            });\n        }\n    }, {\n        key: 'getFolders',\n        value: function getFolders() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"getfolders\",\n                token: token\n            };\n            return this._http.post(params).map(function (data) {\n                return data;\n            });\n        }\n    }, {\n        key: 'setFolder',\n        value: function setFolder(idmail, idfolder) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"setfolder\",\n                emailid: idmail,\n                folder: idfolder,\n                token: token\n            };\n            return this._http.post(params).map(function (data) {\n                return data;\n            });\n        }\n    }, {\n        key: 'NewMailbox',\n        value: function NewMailbox(connection) {\n            var token = localStorage.getItem('token');\n            connection.module = \"mailbox\";\n            connection.action = \"newmail\";\n            connection.token = token;\n            return this._http.post(connection).map(function (data) {\n                return data;\n            });\n        }\n    }, {\n        key: 'streamMessage',\n        value: function streamMessage(msgno, usem_id, folder) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"streammail\",\n                token: token,\n                msgno: msgno,\n                usem_id: usem_id,\n                folder: folder\n            };\n            return this._http.post(params).map(function (data) {\n                return data;\n            });\n        }\n    }, {\n        key: 'getMyAccounts',\n        value: function getMyAccounts() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"getmyaccounts\",\n                token: token\n            };\n            return this._http.post(params).map(function (data) {\n                return data;\n            });\n        }\n    }, {\n        key: 'saveNewAccount',\n        value: function saveNewAccount(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"mailbox\";\n            data.action = \"saveaccount\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'emailAction',\n        value: function emailAction(data) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"mailbox\",\n                action: \"emailaction\",\n                token: token,\n                data: data\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'editAccount',\n        value: function editAccount(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"mailbox\";\n            data.action = \"editaccount\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteAccount',\n        value: function deleteAccount(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"mailbox\";\n            data.action = \"deleteaccount\";\n            data.token = token;\n            return this._http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'sendEmail',\n        value: function sendEmail(data) {\n            var token = localStorage.getItem('token');\n            data.module = \"mailbox\";\n            data.action = \"sendmessage\";\n            data.token = token;\n            return this._http.postWithFile(data, data.attachments).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return MailService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], MailService);\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar domhandler_1 = __webpack_require__(9);\nvar common_1 = __webpack_require__(3);\nvar ButtonDirective = /** @class */ (function () {\n    function ButtonDirective(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.iconPos = 'left';\n        this.cornerStyleClass = 'ui-corner-all';\n    }\n    ButtonDirective.prototype.ngAfterViewInit = function () {\n        this.domHandler.addMultipleClasses(this.el.nativeElement, this.getStyleClass());\n        if (this.icon) {\n            var iconElement = document.createElement(\"span\");\n            iconElement.setAttribute(\"aria-hidden\", \"true\");\n            var iconPosClass = (this.iconPos == 'right') ? 'ui-button-icon-right' : 'ui-button-icon-left';\n            iconElement.className = iconPosClass + ' ui-clickable fa fa-fw ' + this.icon;\n            this.el.nativeElement.appendChild(iconElement);\n        }\n        var labelElement = document.createElement(\"span\");\n        labelElement.className = 'ui-button-text ui-clickable';\n        labelElement.appendChild(document.createTextNode(this.label || 'ui-btn'));\n        this.el.nativeElement.appendChild(labelElement);\n        this.initialized = true;\n    };\n    ButtonDirective.prototype.getStyleClass = function () {\n        var styleClass = 'ui-button ui-widget ui-state-default ' + this.cornerStyleClass;\n        if (this.icon) {\n            if (this.label != null && this.label != undefined) {\n                if (this.iconPos == 'left')\n                    styleClass = styleClass + ' ui-button-text-icon-left';\n                else\n                    styleClass = styleClass + ' ui-button-text-icon-right';\n            }\n            else {\n                styleClass = styleClass + ' ui-button-icon-only';\n            }\n        }\n        else {\n            if (this.label) {\n                styleClass = styleClass + ' ui-button-text-only';\n            }\n            else {\n                styleClass = styleClass + ' ui-button-text-empty';\n            }\n        }\n        return styleClass;\n    };\n    Object.defineProperty(ButtonDirective.prototype, \"label\", {\n        get: function () {\n            return this._label;\n        },\n        set: function (val) {\n            this._label = val;\n            if (this.initialized) {\n                this.domHandler.findSingle(this.el.nativeElement, '.ui-button-text').textContent = this._label;\n                if (!this.icon) {\n                    if (this._label) {\n                        this.domHandler.removeClass(this.el.nativeElement, 'ui-button-text-empty');\n                        this.domHandler.addClass(this.el.nativeElement, 'ui-button-text-only');\n                    }\n                    else {\n                        this.domHandler.addClass(this.el.nativeElement, 'ui-button-text-empty');\n                        this.domHandler.removeClass(this.el.nativeElement, 'ui-button-text-only');\n                    }\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ButtonDirective.prototype, \"icon\", {\n        get: function () {\n            return this._icon;\n        },\n        set: function (val) {\n            this._icon = val;\n            if (this.initialized) {\n                var iconPosClass = (this.iconPos == 'right') ? 'ui-button-icon-right' : 'ui-button-icon-left';\n                this.domHandler.findSingle(this.el.nativeElement, '.fa').className =\n                    iconPosClass + ' ui-clickable fa fa-fw ' + this.icon;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ButtonDirective.prototype.ngOnDestroy = function () {\n        while (this.el.nativeElement.hasChildNodes()) {\n            this.el.nativeElement.removeChild(this.el.nativeElement.lastChild);\n        }\n        this.initialized = false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ButtonDirective.prototype, \"iconPos\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ButtonDirective.prototype, \"cornerStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], ButtonDirective.prototype, \"label\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], ButtonDirective.prototype, \"icon\", null);\n    ButtonDirective = __decorate([\n        core_1.Directive({\n            selector: '[pButton]',\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], ButtonDirective);\n    return ButtonDirective;\n}());\nexports.ButtonDirective = ButtonDirective;\nvar Button = /** @class */ (function () {\n    function Button() {\n        this.type = 'button';\n        this.iconPos = 'left';\n        this.onClick = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"iconPos\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"icon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Button.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Button.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Button.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Button.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Button.prototype, \"onBlur\", void 0);\n    Button = __decorate([\n        core_1.Component({\n            selector: 'p-button',\n            template: \"\\n        <button [attr.type]=\\\"type\\\" [class]=\\\"styleClass\\\" [style]=\\\"style\\\" [disabled]=\\\"disabled\\\"\\n            [ngClass]=\\\"{'ui-button ui-widget ui-state-default ui-corner-all':true,\\n                        'ui-button-icon-only': (icon && !label),\\n                        'ui-button-text-icon-left': (icon && label && iconPos === 'left'),\\n                        'ui-button-text-icon-right': (icon && label && iconPos === 'right'),\\n                        'ui-button-text-only': (!icon && label),\\n                        'ui-button-text-empty': (!icon && !label),\\n                        'ui-state-disabled': disabled}\\\"\\n                        (click)=\\\"onClick.emit($event)\\\" (focus)=\\\"onFocus.emit($event)\\\" (blur)=\\\"onBlur.emit($event)\\\">\\n            <ng-content></ng-content>\\n            <span [ngClass]=\\\"{'ui-clickable': true,\\n                        'ui-button-icon-left': (iconPos === 'left'), \\n                        'ui-button-icon-right': (iconPos === 'right')}\\\"\\n                        [class]=\\\"icon\\\" *ngIf=\\\"icon\\\"></span>\\n            <span class=\\\"ui-button-text ui-clickable\\\">{{label||'ui-btn'}}</span>\\n        </button>\\n    \"\n        })\n    ], Button);\n    return Button;\n}());\nexports.Button = Button;\nvar ButtonModule = /** @class */ (function () {\n    function ButtonModule() {\n    }\n    ButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ButtonDirective, Button],\n            declarations: [ButtonDirective, Button]\n        })\n    ], ButtonModule);\n    return ButtonModule;\n}());\nexports.ButtonModule = ButtonModule;\n//# sourceMappingURL=button.js.map\n\n/***/ }),\n/* 38 */,\n/* 39 */,\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar ObjectUtils = /** @class */ (function () {\n    function ObjectUtils() {\n    }\n    ObjectUtils.prototype.equals = function (obj1, obj2, field) {\n        if (field)\n            return (this.resolveFieldData(obj1, field) === this.resolveFieldData(obj2, field));\n        else\n            return this.equalsByValue(obj1, obj2);\n    };\n    ObjectUtils.prototype.equalsByValue = function (obj1, obj2, visited) {\n        if (obj1 == null && obj2 == null) {\n            return true;\n        }\n        if (obj1 == null || obj2 == null) {\n            return false;\n        }\n        if (obj1 == obj2) {\n            return true;\n        }\n        if (typeof obj1 == 'object' && typeof obj2 == 'object') {\n            if (visited) {\n                if (visited.indexOf(obj1) !== -1)\n                    return false;\n            }\n            else {\n                visited = [];\n            }\n            visited.push(obj1);\n            for (var p in obj1) {\n                if (obj1.hasOwnProperty(p) !== obj2.hasOwnProperty(p)) {\n                    return false;\n                }\n                switch (typeof (obj1[p])) {\n                    case 'object':\n                        if (!this.equalsByValue(obj1[p], obj2[p], visited))\n                            return false;\n                        break;\n                    case 'function':\n                        if (typeof (obj2[p]) == 'undefined' || (p != 'compare' && obj1[p].toString() != obj2[p].toString()))\n                            return false;\n                        break;\n                    default:\n                        if (obj1[p] != obj2[p])\n                            return false;\n                        break;\n                }\n            }\n            for (var p in obj2) {\n                if (typeof (obj1[p]) == 'undefined')\n                    return false;\n            }\n            delete obj1._$visited;\n            return true;\n        }\n        return false;\n    };\n    ObjectUtils.prototype.resolveFieldData = function (data, field) {\n        if (data && field) {\n            if (field.indexOf('.') == -1) {\n                return data[field];\n            }\n            else {\n                var fields = field.split('.');\n                var value = data;\n                for (var i = 0, len = fields.length; i < len; ++i) {\n                    if (value == null) {\n                        return null;\n                    }\n                    value = value[fields[i]];\n                }\n                return value;\n            }\n        }\n        else {\n            return null;\n        }\n    };\n    ObjectUtils.prototype.filter = function (value, fields, filterValue) {\n        var filteredItems = [];\n        if (value) {\n            for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n                var item = value_1[_i];\n                for (var _a = 0, fields_1 = fields; _a < fields_1.length; _a++) {\n                    var field = fields_1[_a];\n                    if (String(this.resolveFieldData(item, field)).toLowerCase().indexOf(filterValue.toLowerCase()) > -1) {\n                        filteredItems.push(item);\n                        break;\n                    }\n                }\n            }\n        }\n        return filteredItems;\n    };\n    ObjectUtils.prototype.reorderArray = function (value, from, to) {\n        var target;\n        if (value && (from !== to)) {\n            if (to >= value.length) {\n                target = to - value.length;\n                while ((target--) + 1) {\n                    value.push(undefined);\n                }\n            }\n            value.splice(to, 0, value.splice(from, 1)[0]);\n        }\n    };\n    ObjectUtils.prototype.generateSelectItems = function (val, field) {\n        var selectItems;\n        if (val && val.length) {\n            selectItems = [];\n            for (var _i = 0, val_1 = val; _i < val_1.length; _i++) {\n                var item = val_1[_i];\n                selectItems.push({ label: this.resolveFieldData(item, field), value: item });\n            }\n        }\n        return selectItems;\n    };\n    ObjectUtils.prototype.insertIntoOrderedArray = function (item, index, arr, sourceArr) {\n        if (arr.length > 0) {\n            var injected = false;\n            for (var i = 0; i < arr.length; i++) {\n                var currentItemIndex = this.findIndexInList(arr[i], sourceArr);\n                if (currentItemIndex > index) {\n                    arr.splice(i, 0, item);\n                    injected = true;\n                    break;\n                }\n            }\n            if (!injected) {\n                arr.push(item);\n            }\n        }\n        else {\n            arr.push(item);\n        }\n    };\n    ObjectUtils.prototype.findIndexInList = function (item, list) {\n        var index = -1;\n        if (list) {\n            for (var i = 0; i < list.length; i++) {\n                if (list[i] == item) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    ObjectUtils = __decorate([\n        core_1.Injectable()\n    ], ObjectUtils);\n    return ObjectUtils;\n}());\nexports.ObjectUtils = ObjectUtils;\n//# sourceMappingURL=objectutils.js.map\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.TypeService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TypeService = exports.TypeService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function TypeService(http) {\n        _classCallCheck(this, TypeService);\n\n        this.http = http;\n    }\n\n    _createClass(TypeService, [{\n        key: 'getTypes',\n        value: function getTypes() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"type\",\n                action: \"list\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getTypeStatus',\n        value: function getTypeStatus() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"type\",\n                action: \"statuslist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getType',\n        value: function getType(type_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"type\",\n                action: \"listtype\",\n                type_id: type_id,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putType',\n        value: function putType(type) {\n            var token = localStorage.getItem('token');\n            type.module = \"type\";\n            type.action = \"insert\";\n            type.token = token;\n            return this.http.post(type).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'updateType',\n        value: function updateType(type) {\n            var token = localStorage.getItem('token');\n            type.module = \"type\";\n            type.action = \"update\";\n            type.token = token;\n            //console.log(type);\n            return this.http.post(type).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteType',\n        value: function deleteType(type_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"type\",\n                action: \"delete\",\n                type_id: type_id,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return TypeService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], TypeService);\n\n/***/ }),\n/* 42 */,\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.LoginService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LoginService = exports.LoginService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function LoginService(httpService) {\n        _classCallCheck(this, LoginService);\n\n        this._user = { user_name: \"Undefined\", user_lastname: \"Undefined\", urlimg: \"\" };\n\n        this._http = httpService;\n    }\n\n    _createClass(LoginService, [{\n        key: 'getCookie',\n        value: function getCookie() {\n            var params = {\n                module: \"login\",\n                action: \"cookie\"\n            };\n            return this._http.post(params).map(function (res) {\n                if (res.data) {\n                    return res.data;\n                }\n                return res;\n            });\n        }\n    }, {\n        key: 'siteKey',\n        value: function siteKey() {\n            var params = {\n                module: \"login\",\n                action: \"sitekey\"\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'captchaforever',\n        value: function captchaforever() {\n            var params = {\n                module: \"login\",\n                action: \"captchaforever\"\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getLoginBack',\n        value: function getLoginBack() {\n            var params = {\n                module: \"login\",\n                action: \"loginback\"\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getLoginBackW',\n        value: function getLoginBackW() {\n            var params = {\n                module: \"login\",\n                action: \"loginbackw\"\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'isLogged',\n        value: function isLogged() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"state\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'logOut',\n        value: function logOut() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"login\",\n                action: \"logout\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                localStorage.removeItem('token');\n                return res;\n            });\n        }\n    }, {\n        key: 'getAuth',\n        value: function getAuth(log) {\n            var _this = this;\n\n            var params = {\n                module: \"login\",\n                action: \"login\",\n                response: log.response, //recaptcha//\n                captchaforever: log.captchaforever,\n                token: log.token,\n                usuario: this.encryp(log.user, log.key),\n                key: this.encryp(log.pwd, log.key)\n            };\n            return this._http.post(params).map(function (res) {\n                _this._user = res.data;\n                return res;\n            });\n        }\n    }, {\n        key: 'encryp',\n        value: function encryp(text, pubkey) {\n            if (text) {\n                var encrypt = new JSEncrypt();\n                encrypt.setPublicKey(pubkey);\n                var encripcion = encrypt.encrypt(text);\n                return encripcion;\n            }\n            return false;\n        }\n    }, {\n        key: 'validateEmail',\n        value: function validateEmail(email) {\n            var token = localStorage.getItem('token');\n            var params = {\n                token: token,\n                module: \"login\",\n                action: \"validateemail\",\n                email: email\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'resetPassword',\n        value: function resetPassword(code, email) {\n            var token = localStorage.getItem('token');\n            var params = {\n                token: token,\n                module: \"login\",\n                action: \"pwreset\",\n                code: code,\n                email: email\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'setPassword',\n        value: function setPassword(authcode, pw) {\n            var token = localStorage.getItem('token');\n            var params = {\n                token: token,\n                module: \"login\",\n                action: \"setnewpw\",\n                pw: pw,\n                authcode: authcode\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getSettings',\n        value: function getSettings() {\n            var token = localStorage.getItem('token');\n            var params = {\n                token: token,\n                module: \"generalsettings\",\n                action: \"getsettings\"\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'saveGeneralSetting',\n        value: function saveGeneralSetting(data) {\n            var token = localStorage.getItem('token');\n            data.module = 'generalsettings';\n            data.action = 'savechanges';\n            data.token = token;\n            return this._http.postWithFile(data).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return LoginService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], LoginService);\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.DashboardService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DashboardService = exports.DashboardService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function DashboardService(http) {\n        _classCallCheck(this, DashboardService);\n\n        this.http = http;\n    }\n\n    _createClass(DashboardService, [{\n        key: 'getTaskboard',\n        value: function getTaskboard(spri_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"dashboard\",\n                action: \"tasks\",\n                spri_id: spri_id,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getBurndown',\n        value: function getBurndown(sprint_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"dashboard\",\n                action: \"burndown\",\n                sprint_id: sprint_id,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getStatustask',\n        value: function getStatustask() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"dashboard\",\n                action: \"statustask\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getStatusTasksUser',\n        value: function getStatusTasksUser() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"dashboard\",\n                action: \"statustaskuser\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return DashboardService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], DashboardService);\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.DailyService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DailyService = exports.DailyService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function DailyService(http) {\n        _classCallCheck(this, DailyService);\n\n        this.http = http;\n    }\n\n    _createClass(DailyService, [{\n        key: 'getDailyList',\n        value: function getDailyList(filter) {\n            var token = localStorage.getItem('token');\n            filter.module = \"daily\";\n            filter.action = \"list\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getDevtasks',\n        value: function getDevtasks() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"daily\",\n                action: \"devtasks\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getDay4Usr',\n        value: function getDay4Usr(idusr, day) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"daily\",\n                action: \"day4usr\",\n                user_id: idusr,\n                day: day,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getPtsToday',\n        value: function getPtsToday() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"daily\",\n                action: \"ptstoday\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getExtraList',\n        value: function getExtraList() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"daily\",\n                action: \"extralist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCategories',\n        value: function getCategories() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"daily\",\n                action: \"categories\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putDaily',\n        value: function putDaily(daily) {\n            var token = localStorage.getItem('token');\n            daily.module = \"daily\";\n            daily.action = \"insert\";\n            daily.token = token;\n            return this.http.post(daily).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteDay',\n        value: function deleteDay(dail_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"daily\",\n                action: \"delete\",\n                dail_id: dail_id,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getDaily',\n        value: function getDaily(dail_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"daily\",\n                action: \"daily\",\n                dail_id: dail_id,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return DailyService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], DailyService);\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.RolesService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RolesService = exports.RolesService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function RolesService(httpService) {\n        _classCallCheck(this, RolesService);\n\n        this._http = httpService;\n    }\n\n    _createClass(RolesService, [{\n        key: 'getModules',\n        value: function getModules(role) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"getmodules\",\n                roleid: role,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getSubmodules',\n        value: function getSubmodules(moduleId) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"getsubmodules\",\n                idmodule: moduleId,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getRoles',\n        value: function getRoles() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"getroles\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getPermits',\n        value: function getPermits() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"getpermits\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n\n        //=============funcion original==================\n        // savePermits(permits,submodule,role){\n        //     var token = localStorage.getItem('token');\n        //     var params = {\n        //         module : \"roles\",\n        //         action : \"savepermits\",\n        //         token : token,\n        //         permits : permits,\n        //         submodule : submodule,\n        //         role : role\n        //     }\n        //     return this._http.post(params).map(res => {\n        //         return res;\n        //     });\n        // }\n\n    }, {\n        key: 'savePermits',\n        value: function savePermits(permit, role) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"savepermit\",\n                token: token,\n                permit: permit,\n                role: role\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'saveRole',\n        value: function saveRole(role, modules) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"saverole\",\n                token: token,\n                role_NameNew: role.role_NameNew,\n                role_description: role.role_description,\n                modules: modules\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getRole',\n        value: function getRole(role_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"getrole\",\n                token: token,\n                role_id: role_id\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getChildModules',\n        value: function getChildModules(parent_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"getchildmodules\",\n                parent_id: parent_id,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getParentModules',\n        value: function getParentModules() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"getparentmodules\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteRole',\n        value: function deleteRole(role_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"delete\",\n                token: token,\n                role_id: role_id\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'updateRole',\n        value: function updateRole(role_id, role, modules) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"updaterole\",\n                token: token,\n                role_id: role_id,\n                role_NameNew: role.role_NameNew,\n                role_description: role.role_description,\n                modules: modules\n            };\n            return this._http.post(params).map(function (res) {\n\n                return res;\n            });\n        }\n    }, {\n        key: 'getPermModules',\n        value: function getPermModules(modu_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"roles\",\n                action: \"permrols\",\n                modu_id: modu_id,\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return RolesService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], RolesService);\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.CategoriesService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CategoriesService = exports.CategoriesService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function CategoriesService(http) {\n        _classCallCheck(this, CategoriesService);\n\n        this.http = http;\n    }\n\n    _createClass(CategoriesService, [{\n        key: 'getCategories',\n        value: function getCategories() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"list\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCategoryList',\n        value: function getCategoryList(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"categories\";\n            filter.action = \"listx\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getStates',\n        value: function getStates() {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"categories\",\n                action: \"states\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCategory',\n        value: function getCategory(cateid) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"category\",\n                cate_id: cateid,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getActiveCategories',\n        value: function getActiveCategories() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"getactcategories\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteCategory',\n        value: function deleteCategory(cate_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"delete\",\n                token: token,\n                cate_id: cate_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'innactiveCategory',\n        value: function innactiveCategory(cate_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"innactive\",\n                token: token,\n                cate_id: cate_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'reactiveCategory',\n        value: function reactiveCategory(cate_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"reactive\",\n                token: token,\n                cate_id: cate_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCategoryType',\n        value: function getCategoryType(type_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"typescat\",\n                token: token,\n                type_id: type_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getIdStatus',\n        value: function getIdStatus(clas, code) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"getstatus\",\n                clas: clas,\n                code: code,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'setStatusCategory',\n        value: function setStatusCategory(cate_id, status) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"setstatus\",\n                cate_id: cate_id,\n                status: status,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCategoryStatus',\n        value: function getCategoryStatus() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"statuslist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getType',\n        value: function getType() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"typelist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getApproval',\n        value: function getApproval() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"apprlist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putCategory',\n        value: function putCategory(cat) {\n            var token = localStorage.getItem('token');\n            cat.module = \"categories\";\n            cat.action = \"insert\";\n            cat.token = token;\n            return this.http.post(cat).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'updateCategory',\n        value: function updateCategory(cat) {\n            var token = localStorage.getItem('token');\n            cat.module = \"categories\";\n            cat.action = \"update\";\n            cat.token = token;\n            return this.http.post(cat).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyApprovals',\n        value: function getMyApprovals() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"getapprovals\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUsersCategory',\n        value: function getUsersCategory(cate_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"users\",\n                token: token,\n                cate_id: cate_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getFieldsCategory',\n        value: function getFieldsCategory(cate_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"fields\",\n                token: token,\n                cate_id: cate_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCategorie',\n        value: function getCategorie(cate_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"categories\",\n                action: \"getcategorie\",\n                token: token,\n                cate_id: cate_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return CategoriesService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], CategoriesService);\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.ExternalRequestService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ExternalRequestService = exports.ExternalRequestService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function ExternalRequestService(http) {\n        _classCallCheck(this, ExternalRequestService);\n\n        this.http = http;\n    }\n\n    _createClass(ExternalRequestService, [{\n        key: 'getProducts',\n        value: function getProducts(database) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"products\",\n                dbname: database,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getGroups',\n        value: function getGroups(database) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"externalrequests\",\n                action: \"groups\",\n                dbname: database,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getActiveCategories',\n        value: function getActiveCategories(database, type, idProduct) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"externalrequests\",\n                action: \"getactcategories\",\n                dbname: database,\n                type: type,\n                id_product: idProduct,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyRequests',\n        value: function getMyRequests(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"externalrequests\";\n            filter.action = \"requestsgroup\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getmyProjects',\n        value: function getmyProjects() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"externalrequests\",\n                action: \"myprojects\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putNote',\n        value: function putNote(note) {\n            var token = localStorage.getItem('token');\n            note.module = \"externalrequests\";\n            note.action = \"putnote\";\n            note.token = token;\n            if (!note.attachments) {\n                note.attachments = [];\n            }\n            return this.http.postWithFile(note, note.attachments).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getTask',\n        value: function getTask(task_id, database) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"task\",\n                task_id: task_id,\n                dbname: database,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getProjectInfo',\n        value: function getProjectInfo(pjid, dbname) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"externalrequests\",\n                action: \"projectinfo\",\n                proj_id: pjid,\n                dbname: dbname,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getComments',\n        value: function getComments(task_id, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"comments\",\n                task_id: task_id,\n                dbname: dbname,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getAttachments',\n        value: function getAttachments(task_id, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"attachments\",\n                task_id: task_id,\n                dbname: dbname,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getAdjusted',\n        value: function getAdjusted(taskid, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"adjusted\",\n                token: token,\n                taskid: taskid,\n                dbname: dbname\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getTimelinetk',\n        value: function getTimelinetk(task_id, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"timelinetk\",\n                task_id: task_id,\n                dbname: dbname,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getTaskFields',\n        value: function getTaskFields(task_id, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"getfields\",\n                task_id: task_id,\n                dbname: dbname,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getRejected',\n        value: function getRejected(tkid, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"rejected\",\n                tkid: tkid,\n                dbname: dbname,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getSprint',\n        value: function getSprint(id_sprint, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"sprintn\",\n                token: token,\n                dbname: dbname,\n                id_sprint: id_sprint\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putTask',\n        value: function putTask(task) {\n            var token = localStorage.getItem(\"token\");\n            task.module = \"externalrequests\";\n            task.action = \"puttask\";\n            task.token = token;\n            return this.http.postWithFile(task, task.attachments).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getFieldsCategory',\n        value: function getFieldsCategory(cate_id, database) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"externalrequests\",\n                action: \"fields\",\n                dbname: database,\n                token: token,\n                cate_id: cate_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteAttachmentTask',\n        value: function deleteAttachmentTask(task_id, att_id, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"deleteattachments\",\n                task_id: task_id,\n                att_id: att_id,\n                dbname: dbname,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putTaskFields',\n        value: function putTaskFields(fld, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"insertfields\",\n                token: token,\n                dbname: dbname,\n                fields: '{\"fields\": ' + JSON.stringify(fld) + '}'\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'setStatusTask',\n        value: function setStatusTask(database, task_id, status) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"setstatus\",\n                task_id: task_id,\n                para_status: status,\n                dbname: database,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'impTask',\n        value: function impTask(database, task_id, imtk_description) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"improvement\",\n                task_id: task_id,\n                imtk_description: imtk_description,\n                dbname: database,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getExternalList',\n        value: function getExternalList() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"externalrequests\",\n                action: \"externallist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getTagsByTask',\n        value: function getTagsByTask(task_id, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"gettagsbytask\",\n                task_id: task_id,\n                dbname: dbname,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'rejectTask',\n        value: function rejectTask(task_id, retk_description, dbname) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"reject\",\n                task_id: task_id,\n                dbname: dbname,\n                retk_description: retk_description,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getTaskList',\n        value: function getTaskList(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"externalrequests\";\n            filter.action = \"listx\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getCategories',\n        value: function getCategories(client) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"externalrequests\",\n                action: \"categories\",\n                client: client,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'reopenTask',\n        value: function reopenTask(tkid, dbname, status) {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"externalrequests\",\n                action: \"reopen\",\n                task_id: tkid,\n                dbname: dbname,\n                status: status,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getExcel',\n        value: function getExcel(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"externalrequests\";\n            filter.action = \"excel\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getExcelExternalTask',\n        value: function getExcelExternalTask(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"externalrequests\";\n            filter.action = \"exceltask\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return ExternalRequestService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], ExternalRequestService);\n\n/***/ }),\n/* 49 */,\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.EventsService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EventsService = exports.EventsService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function EventsService(http) {\n        _classCallCheck(this, EventsService);\n\n        this.http = http;\n    }\n\n    _createClass(EventsService, [{\n        key: 'getMyMeetings',\n        value: function getMyMeetings() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"mymeetings\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyMeetingsList',\n        value: function getMyMeetingsList(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"events\";\n            filter.action = \"mymeetingsx\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putMeeting',\n        value: function putMeeting(mt) {\n            var token = localStorage.getItem('token');\n            mt.module = \"events\";\n            mt.action = \"insert\";\n            mt.token = token;\n            return this.http.post(mt).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMeeting',\n        value: function getMeeting(meet_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"get\",\n                token: token,\n                meet_id: meet_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteMeeting',\n        value: function deleteMeeting(meet_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"delete\",\n                token: token,\n                meet_id: meet_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'setStatusMeeting',\n        value: function setStatusMeeting(meet_id, status) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"setstatus\",\n                meet_id: meet_id,\n                para_status: status,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'editMeeting',\n        value: function editMeeting(mt) {\n            var token = localStorage.getItem('token');\n            mt.module = \"events\";\n            mt.action = \"edit\";\n            mt.token = token;\n            return this.http.post(mt).map(function (result) {\n                return result;\n            });\n        }\n    }, {\n        key: 'getMeetingStatus',\n        value: function getMeetingStatus() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"statuslist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMeetingPlaces',\n        value: function getMeetingPlaces() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"placeslist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUsersMeeting',\n        value: function getUsersMeeting(meet_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"users\",\n                token: token,\n                meet_id: meet_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'addAsociateMail',\n        value: function addAsociateMail(id_mail, meet_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"asociatemail\",\n                meet_id: meet_id,\n                id_mail: id_mail,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'addAsociateTask',\n        value: function addAsociateTask(task_id, meet_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"asociatetask\",\n                task_id: task_id,\n                meet_id: meet_id,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getIdStatus',\n        value: function getIdStatus(clas, code) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"events\",\n                action: \"getstatus\",\n                clas: clas,\n                code: code,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return EventsService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], EventsService);\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.UnitsService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UnitsService = exports.UnitsService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function UnitsService(http) {\n        _classCallCheck(this, UnitsService);\n\n        this.http = http;\n    }\n\n    _createClass(UnitsService, [{\n        key: 'getUnits',\n        value: function getUnits() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"units\",\n                action: \"units\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getList',\n        value: function getList(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"units\";\n            filter.action = \"list\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getUnit',\n        value: function getUnit(unit_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"units\",\n                action: \"unit\",\n                token: token,\n                unit_id: unit_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putUnit',\n        value: function putUnit(unit) {\n            var token = localStorage.getItem('token');\n            unit.module = \"units\";\n            unit.action = \"addUnits\";\n            unit.token = token;\n            return this.http.post(unit).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'updateUnit',\n        value: function updateUnit(unit) {\n            var token = localStorage.getItem('token');\n            unit.module = \"units\";\n            unit.action = \"updateUnits\";\n            unit.token = token;\n            return this.http.post(unit).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteUnit',\n        value: function deleteUnit(unit_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"units\",\n                action: \"deleteUnits\",\n                token: token,\n                unit_id: unit_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return UnitsService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], UnitsService);\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TaskComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _task = __webpack_require__(19);\n\nvar _users = __webpack_require__(20);\n\nvar _product = __webpack_require__(22);\n\nvar _note = __webpack_require__(24);\n\nvar _mail = __webpack_require__(36);\n\nvar _sprint = __webpack_require__(26);\n\nvar _project = __webpack_require__(18);\n\nvar _taskTemplate = __webpack_require__(820);\n\nvar _taskTemplate2 = _interopRequireDefault(_taskTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TaskComponent = exports.TaskComponent = (_dec = (0, _core.Component)({\n  selector: \"task\",\n  template: _taskTemplate2.default\n}), _dec(_class = function () {\n  function TaskComponent(title, route, toastr, sanitizer, arouter, taskService, noteService, userService, productService, ProjectService, sprintService, mailService) {\n    _classCallCheck(this, TaskComponent);\n\n    this._title = title;\n    this._route = route;\n    this._tasks = taskService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._sprint = sprintService;\n    this._mail = mailService;\n    this.task = { attachments: [] };\n    this.subtask = { attachments: [] };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.isrequest = [\"\"];\n    this.searchMail = \"\";\n    this.listmails = [];\n    this.listmailsa = [];\n    this.crmusers = [];\n    this.contacts = [];\n    this.modalnotereply = 0;\n    this.tagMenuDupliTk = 1;\n    this.tagMenu = 1;\n    this.myProjects = [];\n    this.mysprints = [];\n    this.notereply = [];\n    this.category = {};\n    this.myTask = { usersShared: [], project: {}, criteriaTask: [], attachments: [] };\n    this.isLoading = false;\n  }\n\n  _createClass(TaskComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      var _this = this;\n\n      this.reload();\n      this._products.getProducts().subscribe(function (data) {\n        _this.products = [];\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(function (data) {\n        _this.users = data.data;\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var c = _step2.value;\n\n            _this.userslbl.push({\n              label: c.user_lastname + \", \" + c.user_name,\n              value: c.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      });\n      this._user.getEmailList().subscribe(function (data) {\n        _this.listmails = data.data;\n        _this.listmailsa = data.data;\n      });\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion3 = true;\n          var _didIteratorError3 = false;\n          var _iteratorError3 = undefined;\n\n          try {\n            for (var _iterator3 = res.data.planning[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n              var c = _step3.value;\n\n              _this.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError3 = true;\n            _iteratorError3 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                _iterator3.return();\n              }\n            } finally {\n              if (_didIteratorError3) {\n                throw _iteratorError3;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = res.data.buildup[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var _c = _step4.value;\n\n              _this.myProjects.push({\n                label: _c.proj_id + \" \" + _c.proj_subject,\n                value: _c.proj_id,\n                idcolor: _c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion5 = true;\n          var _didIteratorError5 = false;\n          var _iteratorError5 = undefined;\n\n          try {\n            for (var _iterator5 = res.data.implementation[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n              var _c2 = _step5.value;\n\n              _this.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError5 = true;\n            _iteratorError5 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                _iterator5.return();\n              }\n            } finally {\n              if (_didIteratorError5) {\n                throw _iteratorError5;\n              }\n            }\n          }\n        }\n      });\n\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this.mysprints = [];\n        _this.mysprints.push({\n          label: \"Backlog\",\n          value: 0\n        });\n        var _iteratorNormalCompletion6 = true;\n        var _didIteratorError6 = false;\n        var _iteratorError6 = undefined;\n\n        try {\n          for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n            var c = _step6.value;\n\n            _this.mysprints.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError6 = true;\n          _iteratorError6 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n              _iterator6.return();\n            }\n          } finally {\n            if (_didIteratorError6) {\n              throw _iteratorError6;\n            }\n          }\n        }\n      });\n\n      this.usersShareWith = [];\n      this.usersShareWith_a = [];\n      this._user.getCRMUsers().subscribe(function (data) {\n        _this.usersShareWith = data.data;\n        _this.usersShareWith_a = data.data;\n        _this.users = data.data;\n        var _iteratorNormalCompletion7 = true;\n        var _didIteratorError7 = false;\n        var _iteratorError7 = undefined;\n\n        try {\n          for (var _iterator7 = data.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n            var c = _step7.value;\n\n            _this.userslbl.push({\n              label: c.user_lastname + \", \" + c.user_name,\n              value: c.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError7 = true;\n          _iteratorError7 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion7 && _iterator7.return) {\n              _iterator7.return();\n            }\n          } finally {\n            if (_didIteratorError7) {\n              throw _iteratorError7;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(task_id) {\n      var _this2 = this;\n\n      this._tasks.getAttachments(task_id).subscribe(function (res) {\n        _this2.task.attachments = res.data;\n      });\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this3 = this;\n\n      this._aroute.params.forEach(function (params) {\n        _this3._title.setTitle(\".:: \" + localStorage.getItem(\"title\") + \" : Task #\" + params.idtask + \" ::.\");\n        _this3._tasks.getTask(params.idtask).subscribe(function (res) {\n          _this3.task = res.data;\n          if (_this3.task.length == 0) {\n            _this3._route.navigate(['/403']);\n          }\n        });\n        _this3.getTimeline(params.idtask);\n        _this3.getDailyTimeline(params.idtask);\n        _this3.getAttachments(params.idtask);\n      });\n    }\n  }, {\n    key: \"getTimeline\",\n    value: function getTimeline(task_id) {\n      var _this4 = this;\n\n      this._tasks.getCommentsUsers(task_id).subscribe(function (res) {\n        _this4.detail = res.data;\n        for (var i = 0; i < _this4.detail.length; i++) {\n          _this4.detail[i].active = false;\n        }\n      });\n    }\n  }, {\n    key: \"getDailyTimeline\",\n    value: function getDailyTimeline(task_id) {\n      var _this5 = this;\n\n      this._tasks.getDailyTimeline(task_id).subscribe(function (res) {\n        _this5.detail_daily = res.data;\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"enableBtn\",\n    value: function enableBtn() {\n      if (this.displaybtn) {\n        $(\".task\").animate({\n          right: \"20px\"\n        });\n        $(\".comment\").animate({\n          right: \"20px\"\n        });\n        $(\".atemail\").animate({\n          right: \"20px\"\n        });\n        $(\".sendemail\").animate({\n          right: \"20px\"\n        });\n        this.displaybtn = false;\n      } else {\n        $(\".task\").animate({\n          right: \"65px\"\n        });\n        $(\".comment\").animate({\n          right: \"110px\"\n        });\n        $(\".atemail\").animate({\n          right: \"155px\"\n        });\n        $(\".sendemail\").animate({\n          right: \"200px\"\n        });\n        this.displaybtn = true;\n      }\n    }\n  }, {\n    key: \"closedt\",\n    value: function closedt() {\n      $(\"#collapseNote\").css({ display: \"none\" });\n      this.note = { attachments: [] };\n      $(\"#collapseTask\").css({ display: \"none\" });\n      this.subtask = { attachments: [] };\n      $(\"#collapseMail\").css({ display: \"none\" });\n      this.mail = { attachments: [] };\n    }\n  }, {\n    key: \"addTask\",\n    value: function addTask() {\n      var _this6 = this;\n\n      if (this.displaybtn) {\n        if (this.crmusers.length == 0) {\n          this._user.getCRMUsers().subscribe(function (data) {\n            _this6.crmusers = data.data;\n          });\n        }\n        $(\"#collapseNote\").css({ display: \"none\" });\n        if ($(\"#collapseTask\").css(\"display\") == \"none\") {\n          $(\"#collapseTask\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseTask\").offset().top\n        }, 1000);\n        this.subtask.task_description = this.sanitizeHtml(this.task.task_description);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveNewTask\",\n    value: function saveNewTask() {\n      var _this7 = this;\n\n      if ((this.myTask.task_description2 != \"\" || this.myTask.task_description2 != null) && this.myTask.task_description == undefined) {\n        this.myTask.task_description = this.myTask.task_description2;\n      }\n      this.myTask.task_description = this.myTask.task_description.split(\"\\t\").join(\"\");\n      this.myTask.task_description = this.myTask.task_description.split(\"\\n\").join(\"\");\n      this.myTask.task_description = this.myTask.task_description.split(\"\\r\").join(\"\");\n      this.myTask.task_delivery = new Date(this.myTask.task_delivery);\n      this.myTask.task_delivery = this.myTask.task_delivery.getFullYear() + \"-\" + (this.myTask.task_delivery.getMonth() + 1) + \"-\" + this.myTask.task_delivery.getDate();\n\n      //reasignacion de la variable con un array de ids de usuarios\n      var users_share = [];\n\n      for (var user in this.myTask.usersShared) {\n        users_share.push(this.myTask.usersShared[user].user_id);\n      }\n\n      // Solve Bug Autocomplete users.\n      var task = Object.assign({}, this.myTask);\n      task.usersShared = users_share;\n\n      var criteria_task = [];\n      var fields_empty = false;\n\n      for (var i in this.myTask.criteriaTask) {\n        if (this.myTask.criteriaTask[i].tkcr_description && this.myTask.criteriaTask[i].tkcr_description.trim() != \"\") {\n          criteria_task.push(this.myTask.criteriaTask[i].tkcr_num + '|*|' + this.myTask.criteriaTask[i].tkcr_description);\n        } else {\n          fields_empty = true;\n        }\n      }\n\n      if (fields_empty == false) {\n        task.criteriaTask = criteria_task;\n        task.isrequest = \"false\";\n\n        this.isLoading = true;\n\n        this._tasks.putTask(task).subscribe(function (data) {\n\n          _this7.isLoading = false;\n          if (data.data === \"\" || data.data === \"0\") {\n            _this7.toastr.warning(data.message, \"Bad news! Error saving task\");\n          } else {\n            _this7.toastr.success(data.message, \"Task saved successfully\");\n          }\n          $(\"#mdEditTask\").modal(\"hide\");\n          _this7.reload();\n          _this7.myTask = { attachments: [] };\n          _this7.myTask.task_description = \"\";\n        });\n      } else {\n        this.toastr.warning(\"Empty form fields\");\n      }\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event) {\n      var files = event.srcElement.files;\n      this.subtask.attachments.push(files[0]);\n    }\n  }, {\n    key: \"addNote\",\n    value: function addNote() {\n      if (this.displaybtn) {\n        $(\"#collapseTask\").css({ display: \"none\" });\n        if ($(\"#collapseNote\").css(\"display\") == \"none\") {\n          $(\"#collapseNote\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseNote\").offset().top\n        }, 1000);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveNote\",\n    value: function saveNote() {\n      var _this8 = this;\n\n      if (this.note.note_text) {\n        this.note.task_id = this.task.task_id;\n        this._notes.putNote(this.note).subscribe(function (data) {\n          if (data.data != null) {\n            _this8.toastr.success(data.message, \"Note added Successfully\");\n            _this8.note = { attachments: [] };\n            _this8.getTimeline(_this8.task.task_id);\n          } else {\n            _this8.toastr.warning(\"\", data.message);\n            $('.imput-comments').val('');\n          }\n        });\n      }\n    }\n  }, {\n    key: \"saveNoteReply\",\n    value: function saveNoteReply(id_note, detail) {\n      var _this9 = this;\n\n      if (this.notereply.note_data == \"\" || !this.notereply.note_data || this.notereply.note_data && !detail.active) {\n        this.notereply = [];\n      } else {\n        if (this.notereply.note_data) {\n          this.note.note_text = this.notereply.note_data;\n          this.note.task_id = this.task.task_id;\n          this.note.note_parent = id_note;\n          this._notes.putNote(this.note).subscribe(function (data) {\n            if (data.data != null) {\n              _this9.toastr.success(data.message, \"Note added Successfully\");\n              _this9.note = { attachments: [] };\n              _this9.getTimeline(_this9.task.task_id);\n            } else {\n              _this9.toastr.warning(\"\", data.message);\n              $('.imput-comments').val('');\n            }\n          });\n          this.notereply = [];\n        }\n      }\n    }\n  }, {\n    key: \"showNoteReply\",\n    value: function showNoteReply(item) {\n      this.notereply = [];\n      for (var i = 0; i < this.detail.length; i++) {\n        if (i == item) {\n          this.detail[i].active = true;\n        } else {\n          this.detail[i].active = false;\n        }\n      }\n    }\n  }, {\n    key: \"createNoteReply\",\n    value: function createNoteReply(id_note) {\n      this.notereply = [];\n      this.notereply.push({\n        note_data: \"\"\n      });\n      // this.modalnotereply = 1;\n    }\n  }, {\n    key: \"onChangeNote\",\n    value: function onChangeNote(event) {\n      var files = event.srcElement.files;\n      this.note.attachments.push(files[0]);\n    }\n  }, {\n    key: \"showAsociateMail\",\n    value: function showAsociateMail() {\n      this.closedt();\n      $(\"#mdAsoMail\").modal(\"show\");\n    }\n  }, {\n    key: \"srchMail\",\n    value: function srchMail() {\n      var _this10 = this;\n\n      this.mails = [];\n      this.listmails = [];\n      this._mail.searchMail(this.searchMail).subscribe(function (data) {\n        _this10.mails = data.data;\n      });\n    }\n  }, {\n    key: \"addMail\",\n    value: function addMail() {\n      if (!this.loadmail) {\n        this.loadmail = true;\n        this._user.getEmailList().subscribe(function (data) {\n          // emails\n        });\n        /*\n              this._template.getTemplates().subscribe(data => {\n                  for (var i in data.data){\n                      if (data.data[i].id_catmailtemp == \"2\") {\n                          this.signatures.push(data.data[i]);\n                      } else {\n                          this.templates.push(data.data[i]);\n                      }\n                  }\n              });*/\n      }\n      if (this.displaybtn) {\n        $(\"#collapseMail\").css({ display: \"none\" });\n        if ($(\"#collapseMail\").css(\"display\") == \"none\") {\n          $(\"#collapseMail\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseMail\").offset().top\n        }, 1000);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveMail\",\n    value: function saveMail() {\n      var _this11 = this;\n\n      var mymails = [];\n      for (var x in this.mail.emails) {\n        mymails.push(this.mail.emails[x].correo);\n      }\n      this.mail.emails = mymails;\n      this.mail.content = this.mail.content.split(\"\\n\").join(\"\");\n      this.mail.content = this.mail.content.split(\"\\r\").join(\"\");\n      this.mail.task_id = this.task.task_id;\n      this._mail.sendMessage(this.mail).subscribe(function (data) {\n        _this11.toastr.success(data.message, \"Mail sent Successfully\");\n        _this11.getTimeline(_this11.task.task_id);\n      });\n      this.mail = { attachments: [] };\n      this.closedt();\n    }\n  }, {\n    key: \"showEditModal\",\n    value: function showEditModal() {\n      var _this12 = this;\n\n      this.myTask = { project: {}, attachments: [] };\n      this._tasks.getTask(this.task.task_id).subscribe(function (res) {\n        if (res.data.task_description) {\n          res.data.task_description = _this12.escapeHtml(res.data.task_description);\n        }\n        _this12.myTask = res.data;\n        _this12._tasks.getAttachments(_this12.task.task_id).subscribe(function (res) {\n          _this12.myTask.attachments = res.data;\n          _this12._tasks.getTaskFields(_this12.task.task_id).subscribe(function (res) {\n            _this12.myTask.form = res.data;\n          });\n        });\n        $(\"#mdEditTask\").modal(\"show\");\n        _this12.activeTabDescription_editTask();\n      });\n    }\n  }, {\n    key: \"openTask\",\n    value: function openTask(idtk) {\n      var _this13 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to open the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this13._tasks.setStatusTask(idtk, 35).subscribe(function (data) {\n              _this13.reload();\n              _this13.toastr.success(\"Task opened successfully\");\n            });\n          } else {\n            if (_this13.seltasks.length > 0) {\n              for (var x in _this13.seltasks) {\n                _this13._tasks.setStatusTask(_this13.seltasks[x], 35).subscribe(function (data) {});\n              }\n              _this13.seltasks = [];\n              _this13.reload();\n              _this13.toastr.success(\"Tasks opened successfully\");\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"closeTask\",\n    value: function closeTask(idtk) {\n      var _this14 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to close the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this14._tasks.setStatusTask(idtk, 42).subscribe(function (data) {\n              _this14.reload();\n              if (data.data == \"OK\") {\n                _this14.toastr.success(\"Task closed successfully\");\n              } else {\n                _this14.toastr.warning(data.message, \"There was an error\");\n              }\n            });\n          } else {\n            if (_this14.seltasks.length > 0) {\n              for (var x in _this14.seltasks) {\n                _this14._tasks.setStatusTask(_this14.seltasks[x], 42).subscribe(function (data) {\n                  if (data.data == \"OK\") {\n                    _this14.toastr.success(\"Tasks closed successfully\");\n                  } else {\n                    _this14.toastr.warning(data.message, \"There was an error\");\n                  }\n                });\n              }\n              _this14.seltasks = [];\n              _this14.reload();\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"deleteTask\",\n    value: function deleteTask(idtk) {\n      var _this15 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to delete the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this15._tasks.setStatusTask(idtk, 43).subscribe(function (data) {\n              _this15.reload();\n              _this15.toastr.success(\"Task deleted successfully\");\n            });\n          } else {\n            if (_this15.seltasks.length > 0) {\n              for (var x in _this15.seltasks) {\n                _this15._tasks.setStatusTask(_this15.seltasks[x], 43).subscribe(function (data) {});\n              }\n              _this15.seltasks = [];\n              _this15.toastr.success(\"Tasks deleted successfully\");\n              _this15.reload();\n            }\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (base64test.exec(input)) {\n        return false;\n      }\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n      do {\n        enc1 = keyStr.indexOf(input.charAt(i++));\n        enc2 = keyStr.indexOf(input.charAt(i++));\n        enc3 = keyStr.indexOf(input.charAt(i++));\n        enc4 = keyStr.indexOf(input.charAt(i++));\n\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n\n        output = output + String.fromCharCode(chr1);\n\n        if (enc3 != 64) {\n          output = output + String.fromCharCode(chr2);\n        }\n        if (enc4 != 64) {\n          output = output + String.fromCharCode(chr3);\n        }\n\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n\n      return unescape(output);\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      input = escape(input);\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      do {\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n        output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n      return output;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"showDuplicateTaskModal\",\n    value: function showDuplicateTaskModal(idtk) {\n      var _this16 = this;\n\n      this.myTask = { usersShared: [], project: {}, attachments: [] };\n      this._tasks.getTask(idtk).subscribe(function (res) {\n        _this16.myTask.criteriaTask = res.data.criteriaTask;\n        _this16._tasks.getTaskFields(idtk).subscribe(function (res) {\n          _this16.myTask.form = res.data;\n        });\n        _this16.myTask = res.data;\n        _this16.myTask.task_description_d = _this16.myTask.task_description;\n      });\n      $(\"#mdDuplicateTask\").modal(\"show\");\n      this.activeTabDescription_duplicateTask();\n    }\n  }, {\n    key: \"setPageDupliTk\",\n    value: function setPageDupliTk(opt) {\n      if (opt == 1) {\n        this.tagMenuDupliTk = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuDupliTk = 2;\n      }\n      if (opt == 3) {\n        this.tagMenuDupliTk = 3;\n      }\n      if (opt == 4) {\n        this.tagMenuDupliTk = 4;\n      }\n    }\n  }, {\n    key: \"saveDuplicateTask\",\n    value: function saveDuplicateTask() {\n      var _this17 = this;\n\n      var task = {};\n      this.myTask.task_description_d = this.myTask.task_description_d.split(\"\\t\").join(\"\");\n      this.myTask.task_description_d = this.myTask.task_description_d.split(\"\\n\").join(\"\");\n      this.myTask.task_description_d = this.myTask.task_description_d.split(\"\\r\").join(\"\");\n      this.myTask.task_delivery = new Date(this.myTask.task_delivery);\n      this.myTask.task_delivery = this.myTask.task_delivery.getFullYear() + \"-\" + (this.myTask.task_delivery.getMonth() + 1) + \"-\" + this.myTask.task_delivery.getDate();\n\n      task.task_subject = this.myTask.task_subject;\n      task.prod_id = this.myTask.prod_id;\n      task.user_asigned = this.myTask.user_asigned;\n      task.proj_id = this.myTask.proj_id;\n      task.spri_id = this.myTask.spri_id;\n      task.task_delivery = this.myTask.task_delivery;\n      task.task_points = this.myTask.task_points;\n      task.task_description = this.myTask.task_description_d;\n      task.attachments = this.myTask.attachments;\n\n      //reasignacion de la variable con un array de ids de usuarios\n      var users_share = [];\n\n      for (var user in this.myTask.usersShared) {\n        users_share.push(this.myTask.usersShared[user].user_id);\n      }\n\n      task.usersShared = users_share;\n\n      var criteria_task = [];\n      var campos = [];\n      var fields_empty = false;\n\n      for (var i in this.myTask.criteriaTask) {\n        if (this.myTask.criteriaTask[i].tkcr_description && this.myTask.criteriaTask[i].tkcr_description.trim() != \"\") {\n          criteria_task.push(this.myTask.criteriaTask[i].tkcr_num + '|*|' + this.myTask.criteriaTask[i].tkcr_description);\n        } else {\n          fields_empty = true;\n        }\n      }\n\n      for (var _i in this.myTask.form) {\n        campos.push(this.myTask.form[_i].form_id + '|*|' + this.myTask.form[_i].form_data);\n      }\n\n      if (fields_empty == false) {\n        task.criteriaTask = criteria_task;\n        task.form = campos;\n        this.isLoading = true;\n        this._tasks.duplicateTask(task).subscribe(function (res) {\n          _this17.isLoading = false;\n          if (res.data && res.data != null) {\n            _this17.toastr.success(res.message);\n          } else {\n            _this17.toastr.warning(res.message, \"Error\");\n          }\n          $(\"#mdDuplicateTask\").modal(\"hide\");\n          _this17.myTask = { attachments: [] };\n          _this17.myTask.task_description = \"\";\n        });\n      } else {\n        this.toastr.warning(\"Empty form fields\");\n      }\n    }\n  }, {\n    key: \"validateDuplicateTask\",\n    value: function validateDuplicateTask() {\n      return !this.myTask.task_subject || this.myTask.task_subject.trim() == \"\" || !this.myTask.task_description || this.myTask.task_description.trim() == \"\" || !this.myTask.prod_id || this.myTask.prod_id.trim() == \"\" || !this.myTask.task_delivery || this.myTask.task_delivery == \"\" || this.myTask.task_delivery == \"undefined\" || !this.myTask.task_points || this.myTask.task_points == \"\" || this.myTask.task_points == \"undefined\";\n    }\n  }, {\n    key: \"deleteFieldForm\",\n    value: function deleteFieldForm(i) {\n      this.myTask.criteriaTask.splice(i, 1);\n\n      var j = 1;\n\n      for (var _i2 = 0; _i2 < this.myTask.criteriaTask.length; _i2++) {\n        this.myTask.criteriaTask[_i2].tkcr_num = j;\n        j++;\n      }\n    }\n  }, {\n    key: \"addFieldForm\",\n    value: function addFieldForm() {\n      var j = 1;\n      if (this.myTask.criteriaTask.length == 4) {\n        this.toastr.warning(\"You have reached the maximum number of criteria\");\n      } else {\n        var valor = this.myTask.criteriaTask.length + j;\n        this.myTask.criteriaTask.push({ tkcr_num: valor, tkcr_description: \"\" });\n        j++;\n      }\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this18 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this18.toastr.error(res.message, \"Error!\");\n            } else {\n              _this18.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this18.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"onChangeDupliTk\",\n    value: function onChangeDupliTk(event) {\n      var files = event.srcElement.files;\n      this.myTask.attachments.push(files[0]);\n    }\n  }, {\n    key: \"getFormTaskCriteria\",\n    value: function getFormTaskCriteria(task_id) {\n      var _this19 = this;\n\n      this.myTask.criteriaTask = [];\n      this._tasks.getFormTaskCriteria(task_id).subscribe(function (res) {\n\n        _this19.myTask.criteriaTask = res.data.data;\n      });\n    }\n  }, {\n    key: \"filterMultipleShared\",\n    value: function filterMultipleShared(event) {\n      var query = event.query;\n      this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n    }\n  }, {\n    key: \"filterShared\",\n    value: function filterShared(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n      if (opt == 3) {\n        this.tagMenu = 3;\n      }\n      if (opt == 4) {\n        this.tagMenu = 4;\n      }\n    }\n  }, {\n    key: \"onChangeNewTask\",\n    value: function onChangeNewTask(event) {\n      var files = event.srcElement.files;\n      this.myTask.attachments.push(files[0]);\n    }\n  }, {\n    key: \"activeTabDescription_editTask\",\n    value: function activeTabDescription_editTask() {\n      this.tagMenu = 1;\n      $('#li_form_editTask_task').removeClass('active');\n      $('#li_attachments_editTask_task').removeClass('active');\n      $('#li_criteria_editTask_task').removeClass('active');\n      $('#li_description_editTask_task').addClass('active');\n    }\n  }, {\n    key: \"activeTabDescription_duplicateTask\",\n    value: function activeTabDescription_duplicateTask() {\n      this.tagMenuDupliTk = 1;\n      $('#li_form_duplicateTask_task').removeClass('active');\n      $('#li_attachments_duplicateTask').removeClass('active');\n      $('#li_criteria_duplicateTask').removeClass('active');\n      $('#li_description_duplicateTask').addClass('active');\n    }\n  }, {\n    key: \"deleteAttachmentTask_editTask\",\n    value: function deleteAttachmentTask_editTask(task, att) {\n      var _this20 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this20.toastr.error(res.message, \"Error!\");\n            } else {\n              _this20.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this20.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n\n      if (task.attachments.length == 0) {\n        this.activeTabDescription_editTask();\n      }\n    }\n  }, {\n    key: \"deleteAttachment_duplicateTask\",\n    value: function deleteAttachment_duplicateTask(att) {\n\n      var index = 0;\n      for (var i in this.myTask.attachments) {\n        if (att.name == this.myTask.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n      this.myTask.attachments.splice(index, 1);\n\n      if (this.myTask.attachments.length == 0) {\n        this.activeTabDescription_duplicateTask();\n      }\n    }\n  }, {\n    key: \"deleteFieldForm_editTask\",\n    value: function deleteFieldForm_editTask(i) {\n      this.myTask.criteriaTask.splice(i, 1);\n\n      var j = 1;\n\n      for (var _i3 = 0; _i3 < this.myTask.criteriaTask.length; _i3++) {\n        this.myTask.criteriaTask[_i3].tkcr_num = j;\n        j++;\n      }\n\n      if (this.myTask.criteriaTask.length == 0) {\n        this.activeTabDescription_editTask();\n      }\n    }\n  }, {\n    key: \"deleteFieldForm_duplicateTask\",\n    value: function deleteFieldForm_duplicateTask(i) {\n      this.myTask.criteriaTask.splice(i, 1);\n\n      var j = 1;\n\n      for (var _i4 = 0; _i4 < this.myTask.criteriaTask.length; _i4++) {\n        this.myTask.criteriaTask[_i4].tkcr_num = j;\n        j++;\n      }\n\n      if (this.myTask.criteriaTask.length == 0) {\n        this.activeTabDescription_duplicateTask();\n      }\n    }\n  }]);\n\n  return TaskComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _ngxToastr.ToastrService, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _task.TaskService, _note.NoteService, _users.UsersService, _product.ProductService, _project.ProjectService, _sprint.SprintService, _mail.MailService], TaskComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 53 */,\n/* 54 */,\n/* 55 */,\n/* 56 */,\n/* 57 */,\n/* 58 */,\n/* 59 */,\n/* 60 */,\n/* 61 */,\n/* 62 */,\n/* 63 */,\n/* 64 */,\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar forms_1 = __webpack_require__(17);\nvar common_1 = __webpack_require__(3);\nvar InputText = /** @class */ (function () {\n    function InputText(el, ngModel) {\n        this.el = el;\n        this.ngModel = ngModel;\n    }\n    InputText.prototype.ngDoCheck = function () {\n        this.updateFilledState();\n    };\n    //To trigger change detection to manage ui-state-filled for material labels when there is no value binding\n    InputText.prototype.onInput = function (e) {\n        this.updateFilledState();\n    };\n    InputText.prototype.updateFilledState = function () {\n        this.filled = (this.el.nativeElement.value && this.el.nativeElement.value.length) ||\n            (this.ngModel && this.ngModel.model);\n    };\n    __decorate([\n        core_1.HostListener('input', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputText.prototype, \"onInput\", null);\n    InputText = __decorate([\n        core_1.Directive({\n            selector: '[pInputText]',\n            host: {\n                '[class.ui-inputtext]': 'true',\n                '[class.ui-corner-all]': 'true',\n                '[class.ui-state-default]': 'true',\n                '[class.ui-widget]': 'true',\n                '[class.ui-state-filled]': 'filled'\n            }\n        }),\n        __param(1, core_1.Optional()),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, forms_1.NgModel])\n    ], InputText);\n    return InputText;\n}());\nexports.InputText = InputText;\nvar InputTextModule = /** @class */ (function () {\n    function InputTextModule() {\n    }\n    InputTextModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [InputText],\n            declarations: [InputText]\n        })\n    ], InputTextModule);\n    return InputTextModule;\n}());\nexports.InputTextModule = InputTextModule;\n//# sourceMappingURL=inputtext.js.map\n\n/***/ }),\n/* 66 */,\n/* 67 */,\n/* 68 */,\n/* 69 */,\n/* 70 */,\n/* 71 */,\n/* 72 */,\n/* 73 */,\n/* 74 */,\n/* 75 */,\n/* 76 */,\n/* 77 */,\n/* 78 */,\n/* 79 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar forms_1 = __webpack_require__(17);\nvar dropdown_1 = __webpack_require__(233);\nvar shared_1 = __webpack_require__(15);\nvar Paginator = /** @class */ (function () {\n    function Paginator() {\n        this.pageLinkSize = 5;\n        this.onPageChange = new core_1.EventEmitter();\n        this.alwaysShow = true;\n        this._totalRecords = 0;\n        this._first = 0;\n        this._rows = 0;\n    }\n    Paginator.prototype.ngOnInit = function () {\n        this.updatePaginatorState();\n    };\n    Object.defineProperty(Paginator.prototype, \"totalRecords\", {\n        get: function () {\n            return this._totalRecords;\n        },\n        set: function (val) {\n            this._totalRecords = val;\n            this.updatePageLinks();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Paginator.prototype, \"first\", {\n        get: function () {\n            return this._first;\n        },\n        set: function (val) {\n            this._first = val;\n            this.updatePageLinks();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Paginator.prototype, \"rows\", {\n        get: function () {\n            return this._rows;\n        },\n        set: function (val) {\n            this._rows = val;\n            this.updatePageLinks();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Paginator.prototype, \"rowsPerPageOptions\", {\n        get: function () {\n            return this._rowsPerPageOptions;\n        },\n        set: function (val) {\n            this._rowsPerPageOptions = val;\n            if (this._rowsPerPageOptions) {\n                this.rowsPerPageItems = [];\n                for (var _i = 0, _a = this._rowsPerPageOptions; _i < _a.length; _i++) {\n                    var opt = _a[_i];\n                    this.rowsPerPageItems.push({ label: String(opt), value: opt });\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Paginator.prototype.isFirstPage = function () {\n        return this.getPage() === 0;\n    };\n    Paginator.prototype.isLastPage = function () {\n        return this.getPage() === this.getPageCount() - 1;\n    };\n    Paginator.prototype.getPageCount = function () {\n        return Math.ceil(this.totalRecords / this.rows) || 1;\n    };\n    Paginator.prototype.calculatePageLinkBoundaries = function () {\n        var numberOfPages = this.getPageCount(), visiblePages = Math.min(this.pageLinkSize, numberOfPages);\n        //calculate range, keep current in middle if necessary\n        var start = Math.max(0, Math.ceil(this.getPage() - ((visiblePages) / 2))), end = Math.min(numberOfPages - 1, start + visiblePages - 1);\n        //check when approaching to last page\n        var delta = this.pageLinkSize - (end - start + 1);\n        start = Math.max(0, start - delta);\n        return [start, end];\n    };\n    Paginator.prototype.updatePageLinks = function () {\n        this.pageLinks = [];\n        var boundaries = this.calculatePageLinkBoundaries(), start = boundaries[0], end = boundaries[1];\n        for (var i = start; i <= end; i++) {\n            this.pageLinks.push(i + 1);\n        }\n    };\n    Paginator.prototype.changePage = function (p) {\n        var pc = this.getPageCount();\n        if (p >= 0 && p < pc) {\n            this.first = this.rows * p;\n            var state = {\n                page: p,\n                first: this.first,\n                rows: this.rows,\n                pageCount: pc\n            };\n            this.updatePageLinks();\n            this.onPageChange.emit(state);\n            this.updatePaginatorState();\n        }\n    };\n    Paginator.prototype.getPage = function () {\n        return Math.floor(this.first / this.rows);\n    };\n    Paginator.prototype.changePageToFirst = function (event) {\n        if (!this.isFirstPage()) {\n            this.changePage(0);\n        }\n        event.preventDefault();\n    };\n    Paginator.prototype.changePageToPrev = function (event) {\n        this.changePage(this.getPage() - 1);\n        event.preventDefault();\n    };\n    Paginator.prototype.changePageToNext = function (event) {\n        this.changePage(this.getPage() + 1);\n        event.preventDefault();\n    };\n    Paginator.prototype.changePageToLast = function (event) {\n        if (!this.isLastPage()) {\n            this.changePage(this.getPageCount() - 1);\n        }\n        event.preventDefault();\n    };\n    Paginator.prototype.onPageLinkClick = function (event, page) {\n        this.changePage(page);\n        event.preventDefault();\n    };\n    Paginator.prototype.onRppChange = function (event) {\n        this.changePage(this.getPage());\n    };\n    Paginator.prototype.updatePaginatorState = function () {\n        this.paginatorState = {\n            page: this.getPage(),\n            rows: this.rows,\n            first: this.first,\n            totalRecords: this.totalRecords\n        };\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Paginator.prototype, \"pageLinkSize\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Paginator.prototype, \"onPageChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Paginator.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Paginator.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Paginator.prototype, \"alwaysShow\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", core_1.TemplateRef)\n    ], Paginator.prototype, \"templateLeft\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", core_1.TemplateRef)\n    ], Paginator.prototype, \"templateRight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Paginator.prototype, \"dropdownAppendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], Paginator.prototype, \"totalRecords\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], Paginator.prototype, \"first\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], Paginator.prototype, \"rows\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Paginator.prototype, \"rowsPerPageOptions\", null);\n    Paginator = __decorate([\n        core_1.Component({\n            selector: 'p-paginator',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-paginator ui-widget ui-widget-header ui-unselectable-text ui-helper-clearfix'\\\"\\n            *ngIf=\\\"alwaysShow ? true : (pageLinks && pageLinks.length > 1)\\\">\\n            <div class=\\\"ui-paginator-left-content\\\" *ngIf=\\\"templateLeft\\\">\\n                <ng-container *ngTemplateOutlet=\\\"templateLeft; context: {$implicit: paginatorState}\\\"></ng-container>\\n            </div>\\n            <a href=\\\"#\\\" class=\\\"ui-paginator-first ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"changePageToFirst($event)\\\" [ngClass]=\\\"{'ui-state-disabled':isFirstPage()}\\\" [tabindex]=\\\"isFirstPage() ? -1 : null\\\">\\n                <span class=\\\"fa fa-step-backward\\\"></span>\\n            </a>\\n            <a href=\\\"#\\\" class=\\\"ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"changePageToPrev($event)\\\" [ngClass]=\\\"{'ui-state-disabled':isFirstPage()}\\\" [tabindex]=\\\"isFirstPage() ? -1 : null\\\">\\n                <span class=\\\"fa fa-backward\\\"></span>\\n            </a>\\n            <span class=\\\"ui-paginator-pages\\\">\\n                <a href=\\\"#\\\" *ngFor=\\\"let pageLink of pageLinks\\\" class=\\\"ui-paginator-page ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"onPageLinkClick($event, pageLink - 1)\\\" [ngClass]=\\\"{'ui-state-active': (pageLink-1 == getPage())}\\\">{{pageLink}}</a>\\n            </span>\\n            <a href=\\\"#\\\" class=\\\"ui-paginator-next ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"changePageToNext($event)\\\" [ngClass]=\\\"{'ui-state-disabled':isLastPage()}\\\" [tabindex]=\\\"isLastPage() ? -1 : null\\\">\\n                <span class=\\\"fa fa-forward\\\"></span>\\n            </a>\\n            <a href=\\\"#\\\" class=\\\"ui-paginator-last ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"changePageToLast($event)\\\" [ngClass]=\\\"{'ui-state-disabled':isLastPage()}\\\" [tabindex]=\\\"isLastPage() ? -1 : null\\\">\\n                <span class=\\\"fa fa-step-forward\\\"></span>\\n            </a>\\n            <p-dropdown [options]=\\\"rowsPerPageItems\\\" [(ngModel)]=\\\"rows\\\" *ngIf=\\\"rowsPerPageOptions\\\" \\n                (onChange)=\\\"onRppChange($event)\\\" [lazy]=\\\"false\\\" [autoWidth]=\\\"false\\\" [appendTo]=\\\"dropdownAppendTo\\\"></p-dropdown>\\n            <div class=\\\"ui-paginator-right-content\\\" *ngIf=\\\"templateRight\\\">\\n                <ng-container *ngTemplateOutlet=\\\"templateRight; context: {$implicit: paginatorState}\\\"></ng-container>\\n            </div>\\n        </div>\\n    \"\n        })\n    ], Paginator);\n    return Paginator;\n}());\nexports.Paginator = Paginator;\nvar PaginatorModule = /** @class */ (function () {\n    function PaginatorModule() {\n    }\n    PaginatorModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, dropdown_1.DropdownModule, forms_1.FormsModule, shared_1.SharedModule],\n            exports: [Paginator, dropdown_1.DropdownModule, forms_1.FormsModule, shared_1.SharedModule],\n            declarations: [Paginator]\n        })\n    ], PaginatorModule);\n    return PaginatorModule;\n}());\nexports.PaginatorModule = PaginatorModule;\n//# sourceMappingURL=paginator.js.map\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar common_1 = __webpack_require__(3);\nvar core_1 = __webpack_require__(0);\nvar rxjs_1 = __webpack_require__(72);\nexports.RECAPTCHA_LANGUAGE = new core_1.InjectionToken('recaptcha-language');\nexports.RECAPTCHA_BASE_URL = new core_1.InjectionToken('recaptcha-base-url');\nexports.RECAPTCHA_NONCE = new core_1.InjectionToken('recaptcha-nonce-tag');\nfunction loadScript(renderMode, onLoaded, urlParams, url, nonce) {\n    window.ng2recaptchaloaded = function () {\n        onLoaded(grecaptcha);\n    };\n    var script = document.createElement('script');\n    script.innerHTML = '';\n    var baseUrl = url || 'https://www.google.com/recaptcha/api.js';\n    script.src = baseUrl + \"?render=\" + renderMode + \"&onload=ng2recaptchaloaded\" + urlParams;\n    if (nonce) {\n        // tslint:disable-next-line:no-any Remove \"any\" cast once we upgrade Angular to 7 and TypeScript along with it\n        // tslint:disable-next-line:no-any Remove \"any\" cast once we upgrade Angular to 7 and TypeScript along with it\n        script.nonce = nonce;\n    }\n    script.async = true;\n    script.defer = true;\n    document.head.appendChild(script);\n}\nexports.loadScript = loadScript;\nvar RecaptchaLoaderService = /** @class */ (function () {\n    function RecaptchaLoaderService(\n    // tslint:disable-next-line:no-any\n    platformId, language, baseUrl, nonce) {\n        this.platformId = platformId;\n        this.language = language;\n        this.baseUrl = baseUrl;\n        this.nonce = nonce;\n        this.init();\n        this.ready = common_1.isPlatformBrowser(this.platformId) ? RecaptchaLoaderService.ready.asObservable() : rxjs_1.of();\n    }\n    /** @internal */\n    /** @internal */\n    RecaptchaLoaderService.prototype.init = /** @internal */\n    function () {\n        if (RecaptchaLoaderService.ready) {\n            return;\n        }\n        if (common_1.isPlatformBrowser(this.platformId)) {\n            var subject_1 = new rxjs_1.BehaviorSubject(null);\n            RecaptchaLoaderService.ready = subject_1;\n            var langParam = this.language ? '&hl=' + this.language : '';\n            loadScript('explicit', function (grecaptcha) { return subject_1.next(grecaptcha); }, langParam, this.baseUrl, this.nonce);\n        }\n    };\n    /**\n       * @internal\n       * @nocollapse\n       */\n    RecaptchaLoaderService.ready = null;\n    RecaptchaLoaderService.decorators = [\n        { type: core_1.Injectable },\n    ];\n    /** @nocollapse */\n    RecaptchaLoaderService.ctorParameters = function () { return [\n        { type: undefined, decorators: [{ type: core_1.Inject, args: [core_1.PLATFORM_ID,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [exports.RECAPTCHA_LANGUAGE,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [exports.RECAPTCHA_BASE_URL,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [exports.RECAPTCHA_NONCE,] },] },\n    ]; };\n    return RecaptchaLoaderService;\n}());\nexports.RecaptchaLoaderService = RecaptchaLoaderService;\n\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.RequestService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RequestService = exports.RequestService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function RequestService(http) {\n        _classCallCheck(this, RequestService);\n\n        this.http = http;\n    }\n\n    _createClass(RequestService, [{\n        key: 'getMyEvents',\n        value: function getMyEvents() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"requests\",\n                action: \"myevents\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyGroupEvents',\n        value: function getMyGroupEvents() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"requests\",\n                action: \"eventsgroup\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyRequests',\n        value: function getMyRequests(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"requests\";\n            filter.action = \"requestsgroup\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyGroupAccounts',\n        value: function getMyGroupAccounts() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"requests\",\n                action: \"accounts\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyGroupRules',\n        value: function getMyGroupRules() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"requests\",\n                action: \"rules\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'addRule',\n        value: function addRule(data) {\n            var token = localStorage.getItem('token');\n            data.token = token;\n            data.module = \"requests\";\n            data.action = \"newrule\";\n            return this.http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'runRule',\n        value: function runRule(rule) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"requests\",\n                action: \"runrule\",\n                token: token,\n                ruleid: rule\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteRule',\n        value: function deleteRule(rule) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"requests\",\n                action: \"deleterule\",\n                token: token,\n                ruleid: rule\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getRequests',\n        value: function getRequests() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"requests\",\n                action: \"requests\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getExcel',\n        value: function getExcel(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"requests\";\n            filter.action = \"excel\";\n            filter.token = token;\n            return this.http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return RequestService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], RequestService);\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.SchedulerService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SchedulerService = exports.SchedulerService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function SchedulerService(http) {\n        _classCallCheck(this, SchedulerService);\n\n        this.http = http;\n    }\n\n    _createClass(SchedulerService, [{\n        key: 'getMySchedule',\n        value: function getMySchedule() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"myscheduler\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getScheduler',\n        value: function getScheduler(id_scheduler) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"get\",\n                token: token,\n                id_scheduler: id_scheduler\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'editScheduler',\n        value: function editScheduler(sch) {\n            var token = localStorage.getItem('token');\n            sch.module = \"scheduler\";\n            sch.action = \"editscheduler\";\n            sch.token = token;\n            return this.http.post(sch).map(function (result) {\n                return result;\n            });\n        }\n    }, {\n        key: 'deleteScheduler',\n        value: function deleteScheduler(id_scheduler) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"delete\",\n                token: token,\n                id_scheduler: id_scheduler\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getSchedulerCategory',\n        value: function getSchedulerCategory() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"categorylist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getSchedulerStatus',\n        value: function getSchedulerStatus() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"statuslist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getSchedulerPlaces',\n        value: function getSchedulerPlaces() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"placeslist\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'setStatusScheduler',\n        value: function setStatusScheduler(sch, status) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"setstatus\",\n                id_scheduler: sch,\n                id_statusscheduler: status,\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putScheduler',\n        value: function putScheduler(sch) {\n            var token = localStorage.getItem('token');\n            sch.module = \"scheduler\";\n            sch.action = \"insert\";\n            sch.token = token;\n            return this.http.post(sch).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyMeeting',\n        value: function getMyMeeting() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"mymeeting\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putMeeting',\n        value: function putMeeting(mt) {\n            var token = localStorage.getItem('token');\n            mt.module = \"scheduler\";\n            mt.action = \"insertmeeting\";\n            mt.token = token;\n            return this.http.post(mt).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'deleteMeeting',\n        value: function deleteMeeting(meet_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"deletemeeting\",\n                token: token,\n                meet_id: meet_id\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'editMeeting',\n        value: function editMeeting(mt) {\n            var token = localStorage.getItem('token');\n            mt.module = \"scheduler\";\n            mt.action = \"editmeeting\";\n            mt.token = token;\n            return this.http.post(mt).map(function (result) {\n                return result;\n            });\n        }\n    }, {\n        key: 'getMeetingStatus',\n        value: function getMeetingStatus() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"scheduler\",\n                action: \"statuslistmeeting\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return SchedulerService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], SchedulerService);\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ProjectComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _task = __webpack_require__(19);\n\nvar _project = __webpack_require__(18);\n\nvar _users = __webpack_require__(20);\n\nvar _product = __webpack_require__(22);\n\nvar _note = __webpack_require__(24);\n\nvar _mail = __webpack_require__(36);\n\nvar _events = __webpack_require__(50);\n\nvar _sprint = __webpack_require__(26);\n\nvar _group = __webpack_require__(11);\n\nvar _projectTemplate = __webpack_require__(826);\n\nvar _projectTemplate2 = _interopRequireDefault(_projectTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ProjectComponent = exports.ProjectComponent = (_dec = (0, _core.Component)({\n  selector: \"project\",\n  template: _projectTemplate2.default,\n  providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n  function ProjectComponent(title, route, toastr, sanitizer, arouter, taskService, noteService, usersService, productService, mailService, ProjectService, confirmationService, sprintService, eventsService, groupService) {\n    var _this = this;\n\n    _classCallCheck(this, ProjectComponent);\n\n    this._title = title;\n    this._route = route;\n    this._tasks = taskService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._sanitizer = sanitizer;\n    this._user = usersService;\n    this.confirm = confirmationService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._mail = mailService;\n    this._events = eventsService;\n    this._sprint = sprintService;\n    this._groups = groupService;\n    this.project = { attachments: [] };\n    this.myproj = { attachments: [], userssh: [] };\n    this.task = { attachments: [] };\n    this.taskpj = { project: {}, attachments: [] };\n    this.taskpj_description = \"\";\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.searchMail = \"\";\n    this.currentpage = 1;\n    this.mdT = { project: {} };\n    this.minDate = new Date();\n    this.maxDate = new Date();\n    this.crmusers = [];\n    this.contacts = [];\n    this.statustasks = [];\n    this.limitpage = 0;\n    this.commentsusers = [];\n    this.notereply = [];\n    this.modalnotereply = 0;\n    this.milestone = { usershared: [] };\n    this.invalid_dates = [];\n    this.meeting = { usershared: [] };\n    this.plmt = [];\n    this.diasmileston = [];\n    this.diasmiles = 0;\n    this.milestones = [];\n    this.milestone_show = [];\n    this.selmiles = [];\n    this.taskattch = { attachments: [] };\n    this.isLoading = false;\n    this.tagMenu = 1;\n    this.reload();\n    this._products.getProducts().subscribe(function (data) {\n      _this.products = [];\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this.applicantlbl = [];\n    this._user.getEmailList().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          _this.applicantlbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n\n    this.userslbl = [];\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.users = data.data;\n\n      _this.usersShareWith = data.data;\n      _this.usersShareWith_a = data.data;\n\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var c = _step3.value;\n\n          _this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n    });\n\n    this.listmails = [];\n    this.listmailsa = [];\n    this._events.getMeetingPlaces().subscribe(function (res) {\n      var _iteratorNormalCompletion4 = true;\n      var _didIteratorError4 = false;\n      var _iteratorError4 = undefined;\n\n      try {\n        for (var _iterator4 = res.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n          var c = _step4.value;\n\n          _this.plmt.push({ label: c.para_name, value: c.para_id });\n        }\n      } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion4 && _iterator4.return) {\n            _iterator4.return();\n          }\n        } finally {\n          if (_didIteratorError4) {\n            throw _iteratorError4;\n          }\n        }\n      }\n    });\n    this.usersCRM = [];\n    this.usersCRMa = [];\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.usersCRM = data.data;\n      _this.usersCRMa = data.data;\n    });\n    this.groups = [];\n    this.lblgroups = [];\n    this._groups.getGroups().subscribe(function (data) {\n      _this.groups = data.data;\n      var _iteratorNormalCompletion5 = true;\n      var _didIteratorError5 = false;\n      var _iteratorError5 = undefined;\n\n      try {\n        for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n          var c = _step5.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n        }\n      } catch (err) {\n        _didIteratorError5 = true;\n        _iteratorError5 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion5 && _iterator5.return) {\n            _iterator5.return();\n          }\n        } finally {\n          if (_didIteratorError5) {\n            throw _iteratorError5;\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(ProjectComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this2 = this;\n\n      this._aroute.params.forEach(function (params) {\n        _this2.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n          _this2.stTitle = localStorage.getItem('title');\n        }\n        _this2._title.setTitle(\".:: \" + _this2.stTitle + \" : Project #\" + params.idproject + \" ::.\");\n        _this2._projects.getproject(params.idproject).subscribe(function (res) {\n          if (res.data.length == 0) {\n            _this2._route.navigate(['/403']);\n          }\n          res.data.proj_description = _this2.escapeHtml(_this2.sanitizeHtml(res.data.proj_description));\n          _this2.project = res.data;\n          _this2.minDate = new Date(_this2.project.proj_start);\n          _this2.maxDate = new Date(_this2.project.proj_end);\n          var y = Math.round(_this2.project.proj_percentage);\n          _this2.project.proj_percentage = y;\n          var _iteratorNormalCompletion6 = true;\n          var _didIteratorError6 = false;\n          var _iteratorError6 = undefined;\n\n          try {\n            for (var _iterator6 = _this2.project.tasklist[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n              var c = _step6.value;\n\n              var x = Math.round(c.task_percentage);\n              _this2.statustasks.push({\n                points: x,\n                datedelivery: c.datedelivery,\n                task: c.task_id,\n                subject: c.task_subject,\n                status: c.status,\n                proj_id: c.proj_id,\n                task_points: c.task_points,\n                task_pointsd: c.task_pointsd,\n                prod_name: c.prod_name,\n                task_date: c.task_date,\n                asigned: c.asigned,\n                creator: c.creator\n              });\n            }\n          } catch (err) {\n            _didIteratorError6 = true;\n            _iteratorError6 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                _iterator6.return();\n              }\n            } finally {\n              if (_didIteratorError6) {\n                throw _iteratorError6;\n              }\n            }\n          }\n\n          _this2.limitpage = _this2.statustasks.length > 4 ? 4 : _this2.statustasks.length;\n          _this2.itemcount = _this2.statustasks.length;\n          _this2.lastpage = _this2.itemcount / _this2.limitpage;\n          if (_this2.lastpage % 1 != 0) {\n            var countpag = 1 + parseInt(_this2.lastpage);\n            _this2.lastpage = countpag;\n          }\n          _this2.getTimeline();\n          _this2.getmilestone(_this2.project.proj_id);\n        });\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.myproj.attachments.push(files[0]);\n    }\n  }, {\n    key: \"getTimeline\",\n    value: function getTimeline() {\n      var _this3 = this;\n\n      this._projects.getCommentsUsers(this.project.proj_id).subscribe(function (res) {\n        _this3.detail = res.data;\n        for (var i = 0; i < _this3.detail.length; i++) {\n          _this3.detail[i].active = false;\n        }\n      });\n    }\n  }, {\n    key: \"getmilestone\",\n    value: function getmilestone(proj_id) {\n      var _this4 = this;\n\n      this._projects.getMilestone(proj_id).subscribe(function (res) {\n        _this4.milestones = res.data;\n        _this4.milestone_show = _this4.milestones[0];\n        _this4.invalid_dates = [];\n        for (var i = 0; i < _this4.milestones.length; i++) {\n          var di = new Date(_this4.milestones[i].meet_date);\n          di.setDate(di.getDate() + 1);\n          _this4.invalid_dates.push(di);\n        }\n      });\n    }\n  }, {\n    key: \"addMilestone\",\n    value: function addMilestone() {\n      this.milestone = { usershared: [] };\n      $(\"#mdAddMilestone\").modal(\"show\");\n    }\n  }, {\n    key: \"showMilestone\",\n    value: function showMilestone(mymilestone) {\n      this.milestone_show = mymilestone;\n    }\n  }, {\n    key: \"deleteAttachmentNT\",\n    value: function deleteAttachmentNT(att) {\n      for (var i in this.note.attachments) {\n        if (this.note.attachments[i] === att) {\n          this.note.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"validateMiles\",\n    value: function validateMiles() {\n      return !this.milestone.meet_datex || this.milestone.meet_datex == \"\" || this.milestone.meet_datex == \"undefined\" || !this.milestone.user_owner || this.milestone.user_owner.trim() == \"\" || !this.milestone.pjml_description || this.milestone.pjml_description.trim() == \"\" || !this.milestone.para_place || this.milestone.para_place.trim() == \"\" || !this.milestone.meet_text || this.milestone.meet_text.trim() == \"\"\n      // !this.milestone.usershared ||\n      // this.milestone.usershared == \"\"\n      ;\n    }\n  }, {\n    key: \"saveMilestone\",\n    value: function saveMilestone() {\n      var _this5 = this;\n\n      this.milestone.meet_date = this.milestone.meet_datex.getFullYear() + \"-\" + this.lpad(this.milestone.meet_datex.getMonth() + 1, 2) + \"-\" + this.lpad(this.milestone.meet_datex.getDate(), 2) + \" \" + this.lpad(this.milestone.meet_datex.getHours(), 2) + \":\" + this.lpad(this.milestone.meet_datex.getMinutes(), 2) + \":\" + this.lpad(this.milestone.meet_datex.getSeconds(), 2);\n\n      this.milestone.proj_id = this.project.proj_id;\n      var usarr = [];\n      for (var x in this.milestone.usershared) {\n        if (this.milestone.usershared[x].user_id) {\n          usarr.push(this.milestone.usershared[x].user_id);\n        }\n      }\n      this.milestone.users = usarr;\n\n      this._projects.putMilestone(this.milestone).subscribe(function (data) {\n        if (data.data === \"\") {\n          _this5.toastr.warning(data.message, \"Attention!\");\n        } else {\n          _this5.toastr.success(data.message, \"Milestone saved successfully\");\n        }\n        _this5.getmilestone(_this5.project.proj_id);\n        _this5.milestone = { usershared: [] };\n      });\n    }\n  }, {\n    key: \"deleteMilestone\",\n    value: function deleteMilestone(mlt) {\n      var _this6 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to proceed?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (mlt) {\n            _this6._projects.deleteMilestone(mlt).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this6.toastr.success(\"Milestone deleted successfully\");\n              } else {\n                _this6.toastr.error(data.message);\n              }\n              _this6.getmilestone(_this6.project.proj_id);\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"filterMultipleEmails\",\n    value: function filterMultipleEmails(event) {\n      var query = event.query;\n      this.listmails = this.filter(query, this.listmailsa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"lpad\",\n    value: function lpad(n, width, z) {\n      z = z || \"0\";\n      n = n || \"0\";\n      n = n + \"\";\n      return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n  }, {\n    key: \"noteAdd\",\n    value: function noteAdd(idtask, type) {\n      this.note.task_id = idtask;\n      if (this.note.note_text == undefined && this.note_text != null && this.note_text != \"\") {\n        this.note.note_text = this.note_text;\n      }\n      this._notes.putNote(this.note).subscribe(function (data) {});\n      this.getComments(idtask);\n      this.getTimelinetk(idtask);\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this7 = this;\n\n      this.task.proj_id = this.project.proj_id;\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      this._tasks.putTask(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this7.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this7.toastr.success(data.message, \"Saved Successfully\");\n        }\n        _this7.closedt();\n        _this7.getTimeline();\n      });\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event, action) {\n      if (action == \"new\") {\n        var files = event.files;\n        if (this.taskattch.attachments.length > 0) {\n          var _iteratorNormalCompletion7 = true;\n          var _didIteratorError7 = false;\n          var _iteratorError7 = undefined;\n\n          try {\n            for (var _iterator7 = this.taskattch.attachments[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n              var c = _step7.value;\n\n              if (files[0][\"name\"] == c.name) {} else {\n                this.taskattch.attachments.push(files[0]);\n              }\n            }\n          } catch (err) {\n            _didIteratorError7 = true;\n            _iteratorError7 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                _iterator7.return();\n              }\n            } finally {\n              if (_didIteratorError7) {\n                throw _iteratorError7;\n              }\n            }\n          }\n        } else {\n          this.taskattch.attachments.push(files[0]);\n        }\n      } else if (action == \"delete\") {\n        var file = event.file;\n        var _iteratorNormalCompletion8 = true;\n        var _didIteratorError8 = false;\n        var _iteratorError8 = undefined;\n\n        try {\n          for (var _iterator8 = this.taskattch.attachments[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n            var _c = _step8.value;\n\n            if (file[\"name\"] == _c.name) {\n              var posattch = this.taskattch.attachments.indexOf(_c);\n              this.taskattch.attachments.splice(posattch);\n            }\n          }\n        } catch (err) {\n          _didIteratorError8 = true;\n          _iteratorError8 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion8 && _iterator8.return) {\n              _iterator8.return();\n            }\n          } finally {\n            if (_didIteratorError8) {\n              throw _iteratorError8;\n            }\n          }\n        }\n      }\n    }\n  }, {\n    key: \"onUploadAttachment\",\n    value: function onUploadAttachment(taskid) {\n      var _this8 = this;\n\n      if (taskid) {\n        this.taskattch.task_id = taskid;\n        this._tasks.putAttachments(this.taskattch).subscribe(function (res) {\n          if (res.data === \"\" || res.data === \"0\") {\n            _this8.toastr.error(res.message, \"Error!\");\n          } else {\n            _this8.toastr.success(res.message, \"Attachments uploaded successfully\");\n            _this8.taskattch.attachments = [];\n            _this8.getAttachments(taskid);\n          }\n        });\n      }\n    }\n  }, {\n    key: \"saveNote\",\n    value: function saveNote() {\n      var _this9 = this;\n\n      if (this.note.note_text) {\n        this.note.proj_id = this.project.proj_id;\n        this._notes.putNote(this.note).subscribe(function (data) {\n          if (data.data != null) {\n            _this9.toastr.success(data.message, \"Note added Successfully\");\n            _this9.note = { attachments: [] };\n            _this9.getTimeline();\n          } else {\n            _this9.toastr.warning(\"\", data.message);\n            $('.imput-comments').val('');\n          }\n        });\n      }\n    }\n  }, {\n    key: \"saveNoteReply\",\n    value: function saveNoteReply(id_note, detail) {\n      var _this10 = this;\n\n      if (this.notereply.note_data == \"\" || !this.notereply.note_data || this.notereply.note_data && !detail.active) {\n        this.notereply = [];\n      } else {\n        if (this.notereply.note_data) {\n          this.note.note_text = this.notereply.note_data;\n          this.note.proj_id = this.project.proj_id;\n          this.note.note_parent = id_note;\n          this._notes.putNote(this.note).subscribe(function (data) {\n            if (data.data != null) {\n              _this10.toastr.success(data.message, \"Note added Successfully\");\n              _this10.note = { attachments: [] };\n              _this10.getTimeline();\n            } else {\n              _this10.toastr.warning(\"\", data.message);\n              $('.imput-comments').val('');\n            }\n          });\n          this.notereply = [];\n        }\n      }\n    }\n  }, {\n    key: \"showNoteReply\",\n    value: function showNoteReply(item) {\n      this.notereply = [];\n      for (var i = 0; i < this.detail.length; i++) {\n        if (i == item) {\n          this.detail[i].active = true;\n        } else {\n          this.detail[i].active = false;\n        }\n      }\n    }\n  }, {\n    key: \"createNoteReply\",\n    value: function createNoteReply(id_note) {\n      this.notereply = [];\n      this.notereply.push({\n        note_data: \"\"\n      });\n      // this.modalnotereply = 1;\n    }\n  }, {\n    key: \"onChangeNote\",\n    value: function onChangeNote(event) {\n      var files = event.srcElement.files;\n      this.note.attachments.push(files[0]);\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(value) {\n      if (value == 0) {\n        this.currentpage = 1;\n      } else {\n        this.currentpage = this.lastpage;\n      }\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (base64test.exec(input)) {\n        return false;\n      }\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n      do {\n        enc1 = keyStr.indexOf(input.charAt(i++));\n        enc2 = keyStr.indexOf(input.charAt(i++));\n        enc3 = keyStr.indexOf(input.charAt(i++));\n        enc4 = keyStr.indexOf(input.charAt(i++));\n\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n\n        output = output + String.fromCharCode(chr1);\n\n        if (enc3 != 64) {\n          output = output + String.fromCharCode(chr2);\n        }\n        if (enc4 != 64) {\n          output = output + String.fromCharCode(chr3);\n        }\n\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n\n      return unescape(output);\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      input = escape(input);\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      do {\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n        output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n      return output;\n    }\n  }, {\n    key: \"showEditModal\",\n    value: function showEditModal() {\n      var _this11 = this;\n\n      this._projects.getproject(this.project.proj_id).subscribe(function (res) {\n        _this11.myproj = { attachments: [] };\n        res.data.proj_description = _this11.escapeHtml(res.data.proj_description);\n        _this11.myproj = res.data;\n        _this11._projects.getAttachments(_this11.project.proj_id).subscribe(function (rx) {\n          _this11.myproj.attachments = rx.data;\n        });\n        $(\"#mdproject\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"validateProj\",\n    value: function validateProj() {\n      return !this.myproj.proj_subject || this.myproj.proj_subject.trim() == \"\" || !this.myproj.proj_description || this.myproj.proj_description.trim() == \"\" || !this.myproj.prod_id || this.myproj.prod_id.trim() == \"\" || !this.myproj.group_assigned || this.myproj.group_assigned.trim() == \"\" || !this.myproj.user_applicant || this.myproj.user_applicant.trim() == \"\" || !this.myproj.proj_end || this.myproj.proj_end == \"\" || this.myproj.proj_end == \"undefined\" || !this.myproj.proj_propoints || this.myproj.proj_propoints == \"\" || this.myproj.proj_propoints == \"undefined\";\n    }\n  }, {\n    key: \"savemyproj\",\n    value: function savemyproj() {\n      var _this12 = this;\n\n      this.myproj.proj_end = new Date(this.myproj.proj_end);\n      this.myproj.proj_end = this.myproj.proj_end.getFullYear() + \"-\" + (this.myproj.proj_end.getMonth() + 1) + \"-\" + this.myproj.proj_end.getDate();\n\n      var users_share = [];\n\n      for (var user in this.myproj.userssh) {\n        users_share.push(this.myproj.userssh[user].user_id);\n      }\n\n      var project = Object.assign({}, this.myproj);\n      project.users = users_share;\n\n      this.isLoading = true;\n\n      this._projects.putproject(project).subscribe(function (data) {\n        _this12.isLoading = false;\n        if (data.data === \"\" || data.data === \"0\" || data.data == null) {\n          _this12.toastr.warning(data.message, \"Attention!\");\n        } else {\n          _this12.toastr.success(data.message, \"project saved successfully\");\n        }\n        _this12.reload();\n        _this12.myproj = { attachments: [] };\n      });\n    }\n  }, {\n    key: \"closeproject\",\n    value: function closeproject() {\n      var _this13 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to close the project(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          _this13._projects.setStatusproject(_this13.project.proj_id, 3).subscribe(function (data) {\n            if (data.data == \"\") {\n              _this13.toastr.error(data.message);\n            } else {\n              _this13.reload();\n              _this13.toastr.success(\"project closed successfully\");\n            }\n          });\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"openproject\",\n    value: function openproject(idtk) {\n      var _this14 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to open the project(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          _this14._projects.setStatusproject(idtk, 2).subscribe(function (data) {\n            if (data.data == \"\") {\n              _this14.toastr.error(data.message);\n            } else {\n              _this14.reload();\n              _this14.toastr.success(\"Project Opened successfully\");\n            }\n          });\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"deleteproject\",\n    value: function deleteproject(idtk) {\n      var _this15 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to delete the project(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          _this15._projects.setStatusproject(idtk, 5).subscribe(function (data) {\n            if (data.data == \"\") {\n              _this15.toastr.error(data.message);\n            } else {\n              _this15.toastr.success(\"project deleted successfully\");\n            }\n            _this15.reload();\n          });\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      return text;\n    }\n  }, {\n    key: \"showModal\",\n    value: function showModal(mytk) {\n      $(\"#myTask\" + mytk.task).click();\n    }\n  }, {\n    key: \"filterMultipleShared\",\n    value: function filterMultipleShared(event) {\n      var query = event.query;\n      this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n    }\n  }, {\n    key: \"filterShared\",\n    value: function filterShared(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"setPageMenu\",\n    value: function setPageMenu(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n    }\n  }, {\n    key: \"deleteAttachmentProject\",\n    value: function deleteAttachmentProject(proj, att) {\n      var _this16 = this;\n\n      for (var i in proj.attachments) {\n        if (proj.attachments[i] === att) {\n          this._projects.deleteAttachmentProject(proj.proj_id, proj.attachments[i].pjat_id).subscribe(function (res) {\n            if (res.data != null) {\n              _this16.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this16.getAttachments(proj.proj_id);\n            } else {\n              _this16.toastr.warning(\"\", res.message);\n            }\n          });\n          proj.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n\n      var index = 0;\n      for (var i in this.myproj.attachments) {\n        if (att.name == this.myproj.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n      this.myproj.attachments.splice(index, 1);\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(projid) {\n      var _this17 = this;\n\n      this._projects.getAttachments(projid).subscribe(function (res) {\n        _this17.myproj.attachments = res.data;\n        for (var i = 0; i < _this17.myproj.attachments.length; i++) {\n          if (i == 0) {\n            _this17.myproj.total_attachments = 1;\n          } else {\n            _this17.myproj.total_attachments++;\n          }\n        }\n      });\n    }\n  }]);\n\n  return ProjectComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _ngxToastr.ToastrService, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _task.TaskService, _note.NoteService, _users.UsersService, _product.ProductService, _mail.MailService, _project.ProjectService, _primeng.ConfirmationService, _sprint.SprintService, _events.EventsService, _group.GroupService], ProjectComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 84 */,\n/* 85 */,\n/* 86 */,\n/* 87 */,\n/* 88 */,\n/* 89 */,\n/* 90 */,\n/* 91 */,\n/* 92 */,\n/* 93 */,\n/* 94 */,\n/* 95 */,\n/* 96 */,\n/* 97 */,\n/* 98 */,\n/* 99 */,\n/* 100 */,\n/* 101 */,\n/* 102 */,\n/* 103 */,\n/* 104 */,\n/* 105 */,\n/* 106 */,\n/* 107 */,\n/* 108 */,\n/* 109 */,\n/* 110 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar recaptcha_loader_service_1 = __webpack_require__(80);\nvar recaptcha_settings_1 = __webpack_require__(244);\nvar nextId = 0;\nvar RecaptchaComponent = /** @class */ (function () {\n    function RecaptchaComponent(elementRef, loader, zone, settings) {\n        this.elementRef = elementRef;\n        this.loader = loader;\n        this.zone = zone;\n        this.id = \"ngrecaptcha-\" + nextId++;\n        this.resolved = new core_1.EventEmitter();\n        if (settings) {\n            this.siteKey = settings.siteKey;\n            this.theme = settings.theme;\n            this.type = settings.type;\n            this.size = settings.size;\n            this.badge = settings.badge;\n        }\n    }\n    RecaptchaComponent.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.subscription = this.loader.ready.subscribe(function (grecaptcha) {\n            if (grecaptcha != null && grecaptcha.render instanceof Function) {\n                _this.grecaptcha = grecaptcha;\n                _this.renderRecaptcha();\n            }\n        });\n    };\n    RecaptchaComponent.prototype.ngOnDestroy = function () {\n        // reset the captcha to ensure it does not leave anything behind\n        // after the component is no longer needed\n        this.grecaptchaReset();\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    };\n    /**\n     * Executes the invisible recaptcha.\n     * Does nothing if component's size is not set to \"invisible\".\n     */\n    /**\n       * Executes the invisible recaptcha.\n       * Does nothing if component's size is not set to \"invisible\".\n       */\n    RecaptchaComponent.prototype.execute = /**\n       * Executes the invisible recaptcha.\n       * Does nothing if component's size is not set to \"invisible\".\n       */\n    function () {\n        if (this.size !== 'invisible') {\n            return;\n        }\n        if (this.widget != null) {\n            this.grecaptcha.execute(this.widget);\n        }\n        else {\n            // delay execution of recaptcha until it actually renders\n            this.executeRequested = true;\n        }\n    };\n    RecaptchaComponent.prototype.reset = function () {\n        if (this.widget != null) {\n            if (this.grecaptcha.getResponse(this.widget)) {\n                // Only emit an event in case if something would actually change.\n                // That way we do not trigger \"touching\" of the control if someone does a \"reset\"\n                // on a non-resolved captcha.\n                this.resolved.emit(null);\n            }\n            this.grecaptchaReset();\n        }\n    };\n    /** @internal */\n    /** @internal */\n    RecaptchaComponent.prototype.expired = /** @internal */\n    function () {\n        this.resolved.emit(null);\n    };\n    /** @internal */\n    /** @internal */\n    RecaptchaComponent.prototype.captchaResponseCallback = /** @internal */\n    function (response) {\n        this.resolved.emit(response);\n    };\n    /** @internal */\n    /** @internal */\n    RecaptchaComponent.prototype.grecaptchaReset = /** @internal */\n    function () {\n        var _this = this;\n        if (this.widget != null) {\n            this.zone.runOutsideAngular(function () { return _this.grecaptcha.reset(_this.widget); });\n        }\n    };\n    /** @internal */\n    /** @internal */\n    RecaptchaComponent.prototype.renderRecaptcha = /** @internal */\n    function () {\n        var _this = this;\n        this.widget = this.grecaptcha.render(this.elementRef.nativeElement, {\n            badge: this.badge,\n            callback: function (response) {\n                _this.zone.run(function () { return _this.captchaResponseCallback(response); });\n            },\n            'expired-callback': function () {\n                _this.zone.run(function () { return _this.expired(); });\n            },\n            sitekey: this.siteKey,\n            size: this.size,\n            tabindex: this.tabIndex,\n            theme: this.theme,\n            type: this.type,\n        });\n        if (this.executeRequested === true) {\n            this.executeRequested = false;\n            this.execute();\n        }\n    };\n    RecaptchaComponent.decorators = [\n        { type: core_1.Component, args: [{\n                    exportAs: 'reCaptcha',\n                    selector: 're-captcha',\n                    template: \"\",\n                },] },\n    ];\n    /** @nocollapse */\n    RecaptchaComponent.ctorParameters = function () { return [\n        { type: core_1.ElementRef, },\n        { type: recaptcha_loader_service_1.RecaptchaLoaderService, },\n        { type: core_1.NgZone, },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [recaptcha_settings_1.RECAPTCHA_SETTINGS,] },] },\n    ]; };\n    RecaptchaComponent.propDecorators = {\n        \"id\": [{ type: core_1.Input }, { type: core_1.HostBinding, args: ['attr.id',] },],\n        \"siteKey\": [{ type: core_1.Input },],\n        \"theme\": [{ type: core_1.Input },],\n        \"type\": [{ type: core_1.Input },],\n        \"size\": [{ type: core_1.Input },],\n        \"tabIndex\": [{ type: core_1.Input },],\n        \"badge\": [{ type: core_1.Input },],\n        \"resolved\": [{ type: core_1.Output },],\n    };\n    return RecaptchaComponent;\n}());\nexports.RecaptchaComponent = RecaptchaComponent;\n\n\n/***/ }),\n/* 111 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.TodolistService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TodolistService = exports.TodolistService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function TodolistService(httpService) {\n        _classCallCheck(this, TodolistService);\n\n        this._http = httpService;\n    }\n\n    _createClass(TodolistService, [{\n        key: 'setLevel',\n        value: function setLevel(item_id, new_level) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"todolist\",\n                action: \"setlevel\",\n                token: token,\n                item_id: item_id,\n                new_level: new_level\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getTasksMySprint',\n        value: function getTasksMySprint() {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"todolist\",\n                action: \"gettasksmysprint\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMyMeetings',\n        value: function getMyMeetings() {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"todolist\",\n                action: \"getmymeetings\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getMySchedulers',\n        value: function getMySchedulers() {\n            var token = localStorage.getItem(\"token\");\n            var params = {\n                module: \"todolist\",\n                action: \"getmyschedulers\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getListAll',\n        value: function getListAll(filter) {\n            var token = localStorage.getItem(\"token\");\n            filter.module = \"todolist\";\n            filter.action = \"listall\";\n            filter.token = token;\n            return this._http.post(filter).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return TodolistService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], TodolistService);\n\n/***/ }),\n/* 112 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.ParameterService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ParameterService = exports.ParameterService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function ParameterService(http) {\n        _classCallCheck(this, ParameterService);\n\n        this._http = http;\n    }\n\n    _createClass(ParameterService, [{\n        key: 'getClasses',\n        value: function getClasses() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"parameters\",\n                action: \"classes\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getParametersClass',\n        value: function getParametersClass(id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"parameters\",\n                action: \"listParams\",\n                token: token,\n                clas_id: id\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getParameters',\n        value: function getParameters() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"parameters\",\n                action: \"list\",\n                token: token\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putParameter',\n        value: function putParameter(param) {\n            var token = localStorage.getItem('token');\n            param.module = \"parameters\";\n            param.action = \"put\";\n            param.token = token;\n            return this._http.post(param).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'putClass',\n        value: function putClass(param) {\n            var token = localStorage.getItem('token');\n            param.module = \"parameters\";\n            param.action = \"putClass\";\n            param.token = token;\n            return this._http.post(param).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'updateClass',\n        value: function updateClass(param) {\n            var token = localStorage.getItem('token');\n            param.module = \"parameters\";\n            param.action = \"updateClass\";\n            param.token = token;\n            return this._http.post(param).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'delClass',\n        value: function delClass(class_id) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"parameters\",\n                action: \"deleteClass\",\n                token: token,\n                clas_id: class_id\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'getParametersbyClass',\n        value: function getParametersbyClass(clasid) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"parameters\",\n                action: \"paramcla\",\n                token: token,\n                clas_id: calsid\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'delParameter',\n        value: function delParameter(paraid) {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"parameters\",\n                action: \"delete\",\n                token: token,\n                para_id: paraid\n            };\n            return this._http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }, {\n        key: 'updateParameter',\n        value: function updateParameter(param) {\n            var token = localStorage.getItem('token');\n            param.module = \"parameters\";\n            param.action = \"updateParam\";\n            param.token = token;\n            return this._http.post(param).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return ParameterService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], ParameterService);\n\n/***/ }),\n/* 113 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LogService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LogService = exports.LogService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n  function LogService(http) {\n    _classCallCheck(this, LogService);\n\n    this.http = http;\n  }\n\n  _createClass(LogService, [{\n    key: \"getModules\",\n    value: function getModules() {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"log\",\n        action: \"modules\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: \"getLogs\",\n    value: function getLogs(filter) {\n      var token = localStorage.getItem(\"token\");\n      filter.module = \"log\";\n      filter.action = \"logs\";\n      filter.token = token;\n      return this.http.post(filter).map(function (res) {\n        return res;\n      });\n    }\n  }]);\n\n  return LogService;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_http.HttpService], LogService);\n\n/***/ }),\n/* 114 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CloudService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CloudService = exports.CloudService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n  function CloudService(http) {\n    _classCallCheck(this, CloudService);\n\n    this.http = http;\n  }\n\n  _createClass(CloudService, [{\n    key: 'documentsType',\n    value: function documentsType() {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"documentstype\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'getDocuments',\n    value: function getDocuments(id_type) {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"getdocuments\",\n        id_type: id_type,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'getDocument',\n    value: function getDocument(id_document) {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"getdocument\",\n        id_document: id_document,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'getGroups',\n    value: function getGroups() {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"groups\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'deleteDocument',\n    value: function deleteDocument(id_document, user_id) {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"delete\",\n        id_document: id_document,\n        user_id: user_id,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'editDocument',\n    value: function editDocument(document) {\n      var token = localStorage.getItem('token');\n      document.module = \"cloud\";\n      document.action = \"edit\";\n      document.token = token;\n      return this.http.postWithFile(document, document.clou_name).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'insertDocument',\n    value: function insertDocument(document) {\n      var token = localStorage.getItem('token');\n      document.module = \"cloud\";\n      document.action = \"insert\";\n      document.token = token;\n      return this.http.postWithFile(document, document.clou_name).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'downloadDocument',\n    value: function downloadDocument(id_document) {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"download\",\n        id_document: id_document,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n\n    //  Functions Module Cloud\n\n  }, {\n    key: 'listCloud',\n    value: function listCloud(id_type) {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"listcloud\",\n        id_type: id_type,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'getCloud',\n    value: function getCloud(id_document) {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"getcloud\",\n        id_document: id_document,\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'getUsers',\n    value: function getUsers() {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"users\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'editCloud',\n    value: function editCloud(document) {\n      var token = localStorage.getItem('token');\n      document.module = \"cloud\";\n      document.action = \"editcloud\";\n      document.token = token;\n      return this.http.postWithFile(document, document.clou_name).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'insertCloud',\n    value: function insertCloud(document) {\n      var token = localStorage.getItem('token');\n      document.module = \"cloud\";\n      document.action = \"insertcloud\";\n      document.token = token;\n      return this.http.postWithFile(document, document.clou_name).map(function (res) {\n        return res;\n      });\n    }\n  }]);\n\n  return CloudService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], CloudService);\n\n/***/ }),\n/* 115 */,\n/* 116 */,\n/* 117 */,\n/* 118 */,\n/* 119 */,\n/* 120 */,\n/* 121 */,\n/* 122 */,\n/* 123 */,\n/* 124 */,\n/* 125 */,\n/* 126 */,\n/* 127 */,\n/* 128 */,\n/* 129 */,\n/* 130 */,\n/* 131 */,\n/* 132 */,\n/* 133 */,\n/* 134 */,\n/* 135 */,\n/* 136 */,\n/* 137 */,\n/* 138 */,\n/* 139 */,\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */,\n/* 165 */,\n/* 166 */,\n/* 167 */,\n/* 168 */,\n/* 169 */,\n/* 170 */,\n/* 171 */,\n/* 172 */,\n/* 173 */,\n/* 174 */,\n/* 175 */,\n/* 176 */,\n/* 177 */,\n/* 178 */,\n/* 179 */,\n/* 180 */,\n/* 181 */,\n/* 182 */,\n/* 183 */,\n/* 184 */,\n/* 185 */,\n/* 186 */,\n/* 187 */,\n/* 188 */,\n/* 189 */,\n/* 190 */,\n/* 191 */,\n/* 192 */,\n/* 193 */,\n/* 194 */,\n/* 195 */,\n/* 196 */,\n/* 197 */,\n/* 198 */,\n/* 199 */,\n/* 200 */,\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */,\n/* 216 */,\n/* 217 */,\n/* 218 */,\n/* 219 */,\n/* 220 */,\n/* 221 */,\n/* 222 */,\n/* 223 */,\n/* 224 */,\n/* 225 */,\n/* 226 */,\n/* 227 */,\n/* 228 */,\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global, module) {var __WEBPACK_AMD_DEFINE_RESULT__;/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.15';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading and trailing whitespace. */\n  var reTrim = /^\\s+|\\s+$/g,\n      reTrimStart = /^\\s+/,\n      reTrimEnd = /\\s+$/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      var index = -1;\n      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n\n      var low = 0,\n          high = array == null ? 0 : array.length,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(array);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = value.replace(reTrim, '');\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n      // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      // Like with sourceURL, we take care to not check the option's prototype,\n      // as this configuration is a code injection vector.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrim, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimEnd, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (true) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {\n      return _;\n    }).call(exports, __webpack_require__, exports, module),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(49), __webpack_require__(109)(module)))\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar Subject_1 = __webpack_require__(23);\nvar TreeDragDropService = /** @class */ (function () {\n    function TreeDragDropService() {\n        this.dragStartSource = new Subject_1.Subject();\n        this.dragStopSource = new Subject_1.Subject();\n        this.dragStart$ = this.dragStartSource.asObservable();\n        this.dragStop$ = this.dragStopSource.asObservable();\n    }\n    TreeDragDropService.prototype.startDrag = function (event) {\n        this.dragStartSource.next(event);\n    };\n    TreeDragDropService.prototype.stopDrag = function (event) {\n        this.dragStopSource.next(event);\n    };\n    TreeDragDropService = __decorate([\n        core_1.Injectable()\n    ], TreeDragDropService);\n    return TreeDragDropService;\n}());\nexports.TreeDragDropService = TreeDragDropService;\n//# sourceMappingURL=treedragdropservice.js.map\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar Subject_1 = __webpack_require__(23);\nvar ConfirmationService = /** @class */ (function () {\n    function ConfirmationService() {\n        this.requireConfirmationSource = new Subject_1.Subject();\n        this.acceptConfirmationSource = new Subject_1.Subject();\n        this.requireConfirmation$ = this.requireConfirmationSource.asObservable();\n        this.accept = this.acceptConfirmationSource.asObservable();\n    }\n    ConfirmationService.prototype.confirm = function (confirmation) {\n        this.requireConfirmationSource.next(confirmation);\n        return this;\n    };\n    ConfirmationService.prototype.onAccept = function () {\n        this.acceptConfirmationSource.next();\n    };\n    ConfirmationService = __decorate([\n        core_1.Injectable()\n    ], ConfirmationService);\n    return ConfirmationService;\n}());\nexports.ConfirmationService = ConfirmationService;\n//# sourceMappingURL=confirmationservice.js.map\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar inputtext_1 = __webpack_require__(65);\nvar domhandler_1 = __webpack_require__(9);\nvar forms_1 = __webpack_require__(17);\nexports.CHIPS_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Chips; }),\n    multi: true\n};\nvar Chips = /** @class */ (function () {\n    function Chips(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.onAdd = new core_1.EventEmitter();\n        this.onRemove = new core_1.EventEmitter();\n        this.allowDuplicate = true;\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Chips.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Chips.prototype.onClick = function (event) {\n        this.inputViewChild.nativeElement.focus();\n    };\n    Chips.prototype.writeValue = function (value) {\n        this.value = value;\n        this.updateMaxedOut();\n    };\n    Chips.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Chips.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Chips.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Chips.prototype.resolveFieldData = function (data, field) {\n        if (data && field) {\n            if (field.indexOf('.') == -1) {\n                return data[field];\n            }\n            else {\n                var fields = field.split('.');\n                var value = data;\n                for (var i = 0, len = fields.length; i < len; ++i) {\n                    value = value[fields[i]];\n                }\n                return value;\n            }\n        }\n        else {\n            return null;\n        }\n    };\n    Chips.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        this.onFocus.emit(event);\n    };\n    Chips.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        if (this.addOnBlur && this.inputViewChild.nativeElement.value) {\n            this.addItem(event, this.inputViewChild.nativeElement.value);\n            this.inputViewChild.nativeElement.value = '';\n        }\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    };\n    Chips.prototype.removeItem = function (event, index) {\n        if (this.disabled) {\n            return;\n        }\n        var removedItem = this.value[index];\n        this.value = this.value.filter(function (val, i) { return i != index; });\n        this.onModelChange(this.value);\n        this.onRemove.emit({\n            originalEvent: event,\n            value: removedItem\n        });\n        this.updateMaxedOut();\n    };\n    Chips.prototype.addItem = function (event, item) {\n        this.value = this.value || [];\n        if (item && item.trim().length) {\n            if (this.allowDuplicate || this.value.indexOf(item) === -1) {\n                this.value = this.value.concat([item]);\n                this.onModelChange(this.value);\n                this.onAdd.emit({\n                    originalEvent: event,\n                    value: item\n                });\n            }\n        }\n        this.updateMaxedOut();\n    };\n    Chips.prototype.onKeydown = function (event) {\n        switch (event.which) {\n            //backspace\n            case 8:\n                if (this.inputViewChild.nativeElement.value.length === 0 && this.value && this.value.length > 0) {\n                    this.value = this.value.slice();\n                    var removedItem = this.value.pop();\n                    this.onModelChange(this.value);\n                    this.onRemove.emit({\n                        originalEvent: event,\n                        value: removedItem\n                    });\n                }\n                break;\n            //enter\n            case 13:\n                this.addItem(event, this.inputViewChild.nativeElement.value);\n                this.inputViewChild.nativeElement.value = '';\n                event.preventDefault();\n                break;\n            case 9:\n                if (this.addOnTab && this.inputViewChild.nativeElement.value !== '') {\n                    this.addItem(event, this.inputViewChild.nativeElement.value);\n                    this.inputViewChild.nativeElement.value = '';\n                    event.preventDefault();\n                }\n                break;\n            default:\n                if (this.max && this.value && this.max === this.value.length) {\n                    event.preventDefault();\n                }\n                break;\n        }\n    };\n    Chips.prototype.updateMaxedOut = function () {\n        if (this.inputViewChild && this.inputViewChild.nativeElement) {\n            if (this.max && this.value && this.max === this.value.length)\n                this.inputViewChild.nativeElement.disabled = true;\n            else\n                this.inputViewChild.nativeElement.disabled = false;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Chips.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Chips.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Chips.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Chips.prototype, \"onAdd\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Chips.prototype, \"onRemove\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Chips.prototype, \"field\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Chips.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Chips.prototype, \"max\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Chips.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Chips.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Chips.prototype, \"allowDuplicate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Chips.prototype, \"inputStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Chips.prototype, \"inputStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Chips.prototype, \"addOnTab\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Chips.prototype, \"addOnBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Chips.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Chips.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.ViewChild('inputtext'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Chips.prototype, \"inputViewChild\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Chips.prototype, \"templates\", void 0);\n    Chips = __decorate([\n        core_1.Component({\n            selector: 'p-chips',\n            template: \"\\n        <div [ngClass]=\\\"'ui-chips ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" (click)=\\\"onClick($event)\\\">\\n            <ul [ngClass]=\\\"{'ui-inputtext ui-state-default ui-corner-all':true,'ui-state-focus':focus,'ui-state-disabled':disabled}\\\">\\n                <li #token *ngFor=\\\"let item of value; let i = index;\\\" class=\\\"ui-chips-token ui-state-highlight ui-corner-all\\\">\\n                    <span *ngIf=\\\"!disabled\\\" class=\\\"ui-chips-token-icon fa fa-fw fa-close\\\" (click)=\\\"removeItem($event,i)\\\"></span>\\n                    <span *ngIf=\\\"!itemTemplate\\\" class=\\\"ui-chips-token-label\\\">{{field ? resolveFieldData(item,field) : item}}</span>\\n                    <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item}\\\"></ng-container>\\n                </li>\\n                <li class=\\\"ui-chips-input-token\\\">\\n                    <input #inputtext type=\\\"text\\\" [attr.id]=\\\"inputId\\\" [attr.placeholder]=\\\"(value && value.length ? null : placeholder)\\\" [attr.tabindex]=\\\"tabindex\\\" (keydown)=\\\"onKeydown($event)\\\" \\n                        (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" [disabled]=\\\"disabled\\\" [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\">\\n                </li>\\n            </ul>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, exports.CHIPS_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Chips);\n    return Chips;\n}());\nexports.Chips = Chips;\nvar ChipsModule = /** @class */ (function () {\n    function ChipsModule() {\n    }\n    ChipsModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, inputtext_1.InputTextModule, shared_1.SharedModule],\n            exports: [Chips, inputtext_1.InputTextModule, shared_1.SharedModule],\n            declarations: [Chips]\n        })\n    ], ChipsModule);\n    return ChipsModule;\n}());\nexports.ChipsModule = ChipsModule;\n//# sourceMappingURL=chips.js.map\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar objectutils_1 = __webpack_require__(40);\nvar forms_1 = __webpack_require__(17);\nexports.DROPDOWN_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Dropdown; }),\n    multi: true\n};\nvar Dropdown = /** @class */ (function () {\n    function Dropdown(el, domHandler, renderer, cd, objectUtils, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.objectUtils = objectUtils;\n        this.zone = zone;\n        this.scrollHeight = '200px';\n        this.autoWidth = true;\n        this.filterBy = 'label';\n        this.lazy = true;\n        this.resetFilterOnHide = false;\n        this.dropdownIcon = 'fa fa-fw fa-caret-down';\n        this.autoDisplayFirst = true;\n        this.emptyFilterMessage = 'No results found';\n        this.onChange = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onClick = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.panelVisible = false;\n    }\n    Dropdown.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                case 'selectedItem':\n                    _this.selectedItemTemplate = item.template;\n                    break;\n                case 'group':\n                    _this.groupTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Dropdown.prototype.ngOnInit = function () {\n        this.optionsToDisplay = this.options;\n        this.updateSelectedOption(null);\n    };\n    Object.defineProperty(Dropdown.prototype, \"options\", {\n        get: function () {\n            return this._options;\n        },\n        set: function (val) {\n            var opts = this.optionLabel ? this.objectUtils.generateSelectItems(val, this.optionLabel) : val;\n            this._options = opts;\n            this.optionsToDisplay = this._options;\n            this.updateSelectedOption(this.value);\n            this.optionsChanged = true;\n            if (this.filterValue && this.filterValue.length) {\n                this.activateFilter();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Dropdown.prototype.ngAfterViewInit = function () {\n        this.container = this.containerViewChild.nativeElement;\n        this.panel = this.panelViewChild.nativeElement;\n        this.itemsWrapper = this.itemsWrapperViewChild.nativeElement;\n        if (this.editable) {\n            this.updateEditableLabel();\n        }\n        this.updateDimensions();\n        this.initialized = true;\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panel);\n            else\n                this.domHandler.appendChild(this.panel, this.appendTo);\n        }\n    };\n    Object.defineProperty(Dropdown.prototype, \"label\", {\n        get: function () {\n            return (this.selectedOption ? this.selectedOption.label : null);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Dropdown.prototype.updateEditableLabel = function () {\n        if (this.editableInputViewChild && this.editableInputViewChild.nativeElement) {\n            this.editableInputViewChild.nativeElement.value = (this.selectedOption ? this.selectedOption.label : this.value || '');\n        }\n    };\n    Dropdown.prototype.onItemClick = function (event, option) {\n        this.itemClick = true;\n        this.selectItem(event, option);\n        this.focusViewChild.nativeElement.focus();\n        this.filled = true;\n        this.hide();\n    };\n    Dropdown.prototype.selectItem = function (event, option) {\n        if (this.selectedOption != option) {\n            this.selectedOption = option;\n            this.value = option.value;\n            this.onModelChange(this.value);\n            this.updateEditableLabel();\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    };\n    Dropdown.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        if (this.shown) {\n            this.onShow();\n            this.shown = false;\n        }\n        if (this.optionsChanged && this.panelVisible) {\n            this.optionsChanged = false;\n            this.zone.runOutsideAngular(function () {\n                setTimeout(function () {\n                    _this.updateDimensions();\n                    _this.alignPanel();\n                }, 1);\n            });\n        }\n        if (this.selectedOptionUpdated && this.itemsWrapper) {\n            this.updateDimensions();\n            var selectedItem = this.domHandler.findSingle(this.panel, 'li.ui-state-highlight');\n            if (selectedItem) {\n                this.domHandler.scrollInView(this.itemsWrapper, this.domHandler.findSingle(this.panel, 'li.ui-state-highlight'));\n            }\n            this.selectedOptionUpdated = false;\n        }\n    };\n    Dropdown.prototype.writeValue = function (value) {\n        if (this.filter) {\n            this.resetFilter();\n        }\n        this.value = value;\n        this.updateSelectedOption(value);\n        this.updateEditableLabel();\n        this.updateFilledState();\n        this.cd.markForCheck();\n    };\n    Dropdown.prototype.resetFilter = function () {\n        if (this.filterViewChild && this.filterViewChild.nativeElement) {\n            this.filterViewChild.nativeElement.value = '';\n        }\n        this.optionsToDisplay = this.options;\n    };\n    Dropdown.prototype.updateSelectedOption = function (val) {\n        this.selectedOption = this.findOption(val, this.optionsToDisplay);\n        if (this.autoDisplayFirst && !this.placeholder && !this.selectedOption && this.optionsToDisplay && this.optionsToDisplay.length && !this.editable) {\n            this.selectedOption = this.optionsToDisplay[0];\n        }\n        this.selectedOptionUpdated = true;\n    };\n    Dropdown.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Dropdown.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Dropdown.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Dropdown.prototype.updateDimensions = function () {\n        if (this.autoWidth && this.el.nativeElement && this.el.nativeElement.children[0]) {\n            var select = this.domHandler.findSingle(this.el.nativeElement, 'select');\n            if (select && !this.style || (this.style && (!this.style['width'] && !this.style['min-width']))) {\n                this.el.nativeElement.children[0].style.width = select.offsetWidth + 30 + 'px';\n            }\n        }\n    };\n    Dropdown.prototype.onMouseclick = function (event) {\n        var _this = this;\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        this.onClick.emit(event);\n        this.selfClick = true;\n        this.clearClick = this.domHandler.hasClass(event.target, 'ui-dropdown-clear-icon');\n        if (!this.itemClick && !this.clearClick) {\n            this.focusViewChild.nativeElement.focus();\n            if (this.panelVisible)\n                this.hide();\n            else {\n                this.show();\n                if (this.filterViewChild != undefined) {\n                    setTimeout(function () {\n                        _this.filterViewChild.nativeElement.focus();\n                    }, 200);\n                }\n            }\n        }\n    };\n    Dropdown.prototype.onEditableInputClick = function (event) {\n        this.itemClick = true;\n        this.bindDocumentClickListener();\n    };\n    Dropdown.prototype.onEditableInputFocus = function (event) {\n        this.focused = true;\n        this.hide();\n    };\n    Dropdown.prototype.onEditableInputChange = function (event) {\n        this.value = event.target.value;\n        this.updateSelectedOption(this.value);\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    Dropdown.prototype.onShow = function () {\n        this.bindDocumentClickListener();\n        if (this.options && this.options.length) {\n            this.alignPanel();\n            var selectedListItem = this.domHandler.findSingle(this.itemsWrapper, '.ui-dropdown-item.ui-state-highlight');\n            if (selectedListItem) {\n                this.domHandler.scrollInView(this.itemsWrapper, selectedListItem);\n            }\n        }\n    };\n    Dropdown.prototype.show = function () {\n        if (this.appendTo) {\n            this.panel.style.minWidth = this.domHandler.getWidth(this.container) + 'px';\n        }\n        this.panel.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n        this.panelVisible = true;\n        this.shown = true;\n    };\n    Dropdown.prototype.hide = function () {\n        this.panelVisible = false;\n        if (this.filter && this.resetFilterOnHide) {\n            this.resetFilter();\n        }\n    };\n    Dropdown.prototype.alignPanel = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.panel, this.container);\n        else\n            this.domHandler.relativePosition(this.panel, this.container);\n    };\n    Dropdown.prototype.onInputFocus = function (event) {\n        this.focused = true;\n        this.onFocus.emit(event);\n    };\n    Dropdown.prototype.onInputBlur = function (event) {\n        this.focused = false;\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    };\n    Dropdown.prototype.onKeydown = function (event) {\n        if (this.readonly || !this.optionsToDisplay || this.optionsToDisplay.length === null) {\n            return;\n        }\n        switch (event.which) {\n            //down\n            case 40:\n                if (!this.panelVisible && event.altKey) {\n                    this.show();\n                }\n                else {\n                    if (this.group) {\n                        var selectedItemIndex = this.selectedOption ? this.findOptionGroupIndex(this.selectedOption.value, this.optionsToDisplay) : -1;\n                        if (selectedItemIndex !== -1) {\n                            var nextItemIndex = selectedItemIndex.itemIndex + 1;\n                            if (nextItemIndex < (this.optionsToDisplay[selectedItemIndex.groupIndex].items.length)) {\n                                this.selectItem(event, this.optionsToDisplay[selectedItemIndex.groupIndex].items[nextItemIndex]);\n                                this.selectedOptionUpdated = true;\n                            }\n                            else if (this.optionsToDisplay[selectedItemIndex.groupIndex + 1]) {\n                                this.selectItem(event, this.optionsToDisplay[selectedItemIndex.groupIndex + 1].items[0]);\n                                this.selectedOptionUpdated = true;\n                            }\n                        }\n                        else {\n                            this.selectItem(event, this.optionsToDisplay[0].items[0]);\n                        }\n                    }\n                    else {\n                        var selectedItemIndex = this.selectedOption ? this.findOptionIndex(this.selectedOption.value, this.optionsToDisplay) : -1;\n                        var nextItemIndex = selectedItemIndex + 1;\n                        if (nextItemIndex != (this.optionsToDisplay.length)) {\n                            this.selectItem(event, this.optionsToDisplay[nextItemIndex]);\n                            this.selectedOptionUpdated = true;\n                        }\n                        else {\n                            this.selectItem(event, this.optionsToDisplay[0]);\n                        }\n                    }\n                }\n                event.preventDefault();\n                break;\n            //up\n            case 38:\n                if (this.group) {\n                    var selectedItemIndex = this.selectedOption ? this.findOptionGroupIndex(this.selectedOption.value, this.optionsToDisplay) : -1;\n                    if (selectedItemIndex !== -1) {\n                        var prevItemIndex = selectedItemIndex.itemIndex - 1;\n                        if (prevItemIndex >= 0) {\n                            this.selectItem(event, this.optionsToDisplay[selectedItemIndex.groupIndex].items[prevItemIndex]);\n                            this.selectedOptionUpdated = true;\n                        }\n                        else if (prevItemIndex < 0) {\n                            var prevGroup = this.optionsToDisplay[selectedItemIndex.groupIndex - 1];\n                            if (prevGroup) {\n                                this.selectItem(event, prevGroup.items[prevGroup.items.length - 1]);\n                                this.selectedOptionUpdated = true;\n                            }\n                        }\n                    }\n                }\n                else {\n                    var selectedItemIndex = this.selectedOption ? this.findOptionIndex(this.selectedOption.value, this.optionsToDisplay) : -1;\n                    if (selectedItemIndex > 0) {\n                        var prevItemIndex = selectedItemIndex - 1;\n                        this.selectItem(event, this.optionsToDisplay[prevItemIndex]);\n                        this.selectedOptionUpdated = true;\n                    }\n                }\n                event.preventDefault();\n                break;\n            //space\n            case 32:\n            case 32:\n                if (!this.panelVisible) {\n                    this.show();\n                    event.preventDefault();\n                }\n                break;\n            //enter\n            case 13:\n                if (!this.filter || (this.optionsToDisplay && this.optionsToDisplay.length > 0)) {\n                    this.hide();\n                }\n                event.preventDefault();\n                break;\n            //escape and tab\n            case 27:\n            case 9:\n                this.hide();\n                break;\n        }\n    };\n    Dropdown.prototype.findOptionIndex = function (val, opts) {\n        var index = -1;\n        if (opts) {\n            for (var i = 0; i < opts.length; i++) {\n                if ((val == null && opts[i].value == null) || this.objectUtils.equals(val, opts[i].value, this.dataKey)) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    Dropdown.prototype.findOptionGroupIndex = function (val, opts) {\n        var groupIndex, itemIndex;\n        if (opts) {\n            for (var i = 0; i < opts.length; i++) {\n                groupIndex = i;\n                itemIndex = this.findOptionIndex(val, opts[i].items);\n                if (itemIndex !== -1) {\n                    break;\n                }\n            }\n        }\n        if (itemIndex !== -1) {\n            return { groupIndex: groupIndex, itemIndex: itemIndex };\n        }\n        else {\n            return -1;\n        }\n    };\n    Dropdown.prototype.findOption = function (val, opts, inGroup) {\n        if (this.group && !inGroup) {\n            var opt = void 0;\n            if (opts && opts.length) {\n                for (var _i = 0, opts_1 = opts; _i < opts_1.length; _i++) {\n                    var optgroup = opts_1[_i];\n                    opt = this.findOption(val, optgroup.items, true);\n                    if (opt) {\n                        break;\n                    }\n                }\n            }\n            return opt;\n        }\n        else {\n            var index = this.findOptionIndex(val, opts);\n            return (index != -1) ? opts[index] : null;\n        }\n    };\n    Dropdown.prototype.onFilter = function (event) {\n        var inputValue = event.target.value.toLowerCase();\n        if (inputValue && inputValue.length) {\n            this.filterValue = inputValue;\n            this.activateFilter();\n        }\n        else {\n            this.filterValue = null;\n            this.optionsToDisplay = this.options;\n        }\n        this.optionsChanged = true;\n    };\n    Dropdown.prototype.activateFilter = function () {\n        var searchFields = this.filterBy.split(',');\n        if (this.options && this.options.length) {\n            if (this.group) {\n                var filteredGroups = [];\n                for (var _i = 0, _a = this.options; _i < _a.length; _i++) {\n                    var optgroup = _a[_i];\n                    var filteredSubOptions = this.objectUtils.filter(optgroup.items, searchFields, this.filterValue);\n                    if (filteredSubOptions && filteredSubOptions.length) {\n                        filteredGroups.push({\n                            label: optgroup.label,\n                            value: optgroup.value,\n                            items: filteredSubOptions\n                        });\n                    }\n                }\n                this.optionsToDisplay = filteredGroups;\n            }\n            else {\n                this.optionsToDisplay = this.objectUtils.filter(this.options, searchFields, this.filterValue);\n            }\n            this.optionsChanged = true;\n        }\n    };\n    Dropdown.prototype.applyFocus = function () {\n        if (this.editable)\n            this.domHandler.findSingle(this.el.nativeElement, '.ui-dropdown-label.ui-inputtext').focus();\n        else\n            this.domHandler.findSingle(this.el.nativeElement, 'input[readonly]').focus();\n    };\n    Dropdown.prototype.focus = function () {\n        this.applyFocus();\n    };\n    Dropdown.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.selfClick && !_this.itemClick) {\n                    _this.panelVisible = false;\n                    _this.unbindDocumentClickListener();\n                }\n                _this.selfClick = false;\n                _this.itemClick = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    Dropdown.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    Dropdown.prototype.updateFilledState = function () {\n        this.filled = (this.selectedOption != null);\n    };\n    Dropdown.prototype.clear = function (event) {\n        this.clearClick = true;\n        this.value = null;\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n        this.updateSelectedOption(this.value);\n        this.updateEditableLabel();\n        this.updateFilledState();\n    };\n    Dropdown.prototype.ngOnDestroy = function () {\n        this.initialized = false;\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panel);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"filter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dropdown.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dropdown.prototype, \"panelStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"panelStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"autoWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"editable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dropdown.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dropdown.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"filterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"filterBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"autofocus\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"resetFilterOnHide\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"dropdownIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"optionLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"autoDisplayFirst\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"group\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"showClear\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"emptyFilterMessage\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dropdown.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dropdown.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dropdown.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dropdown.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('panel'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"panelViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('itemswrapper'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"itemsWrapperViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('filter'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"filterViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('in'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"focusViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('editableInput'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"editableInputViewChild\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Dropdown.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Dropdown.prototype, \"options\", null);\n    Dropdown = __decorate([\n        core_1.Component({\n            selector: 'p-dropdown',\n            template: \"\\n         <div #container [ngClass]=\\\"{'ui-dropdown ui-widget ui-state-default ui-corner-all ui-helper-clearfix':true,\\n            'ui-state-disabled':disabled,'ui-dropdown-open':panelVisible,'ui-state-focus':focused, 'ui-dropdown-clearable': showClear && !disabled}\\\"\\n            (click)=\\\"onMouseclick($event)\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\" *ngIf=\\\"autoWidth\\\">\\n                <select [required]=\\\"required\\\" [attr.name]=\\\"name\\\" [attr.aria-label]=\\\"selectedOption ? selectedOption.label : ' '\\\" tabindex=\\\"-1\\\" aria-hidden=\\\"true\\\">\\n                    <option *ngIf=\\\"placeholder\\\">{{placeholder}}</option>\\n                    <ng-container *ngIf=\\\"group\\\">\\n                        <optgroup *ngFor=\\\"let option of options\\\" [attr.label]=\\\"option.label\\\">\\n                            <option *ngFor=\\\"let option of option.items\\\" [value]=\\\"option.value\\\" [selected]=\\\"selectedOption == option\\\">{{option.label}}</option>\\n                        <optgroup>\\n                    </ng-container>\\n                    <ng-container *ngIf=\\\"!group\\\">\\n                        <option *ngFor=\\\"let option of options\\\" [value]=\\\"option.value\\\" [selected]=\\\"selectedOption == option\\\">{{option.label}}</option>\\n                    </ng-container>\\n                </select>\\n            </div>\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #in [attr.id]=\\\"inputId\\\" type=\\\"text\\\" [attr.aria-label]=\\\"selectedOption ? selectedOption.label : ' '\\\" readonly (focus)=\\\"onInputFocus($event)\\\" role=\\\"listbox\\\"\\n                    (blur)=\\\"onInputBlur($event)\\\" (keydown)=\\\"onKeydown($event)\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\" [attr.autofocus]=\\\"autofocus\\\">\\n            </div>\\n            <label [ngClass]=\\\"{'ui-dropdown-label ui-inputtext ui-corner-all':true,'ui-dropdown-label-empty':(label == null || label.length === 0)}\\\" *ngIf=\\\"!editable && (label != null)\\\">\\n                <ng-container *ngIf=\\\"!selectedItemTemplate\\\">{{label||'empty'}}</ng-container>\\n                <ng-container *ngTemplateOutlet=\\\"selectedItemTemplate; context: {$implicit: selectedOption}\\\"></ng-container>\\n            </label>\\n            <label [ngClass]=\\\"{'ui-dropdown-label ui-inputtext ui-corner-all ui-placeholder':true,'ui-dropdown-label-empty': (placeholder == null || placeholder.length === 0)}\\\" *ngIf=\\\"!editable && (label == null)\\\">{{placeholder||'empty'}}</label>\\n            <input #editableInput type=\\\"text\\\" [attr.aria-label]=\\\"selectedOption ? selectedOption.label : ' '\\\" class=\\\"ui-dropdown-label ui-inputtext ui-corner-all\\\" *ngIf=\\\"editable\\\" [disabled]=\\\"disabled\\\" [attr.placeholder]=\\\"placeholder\\\"\\n                        (click)=\\\"onEditableInputClick($event)\\\" (input)=\\\"onEditableInputChange($event)\\\" (focus)=\\\"onEditableInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\">\\n            <i class=\\\"ui-dropdown-clear-icon fa fa-close\\\" (click)=\\\"clear($event)\\\" *ngIf=\\\"value != null && showClear && !disabled\\\"></i>\\n            <div class=\\\"ui-dropdown-trigger ui-state-default ui-corner-right\\\">\\n                <span class=\\\"ui-dropdown-trigger-icon ui-clickable\\\" [ngClass]=\\\"dropdownIcon\\\"></span>\\n            </div>\\n            <div #panel [ngClass]=\\\"'ui-dropdown-panel ui-widget-content ui-corner-all ui-shadow'\\\" [@panelState]=\\\"panelVisible ? 'visible' : 'hidden'\\\"\\n                [style.display]=\\\"panelVisible ? 'block' : 'none'\\\" [ngStyle]=\\\"panelStyle\\\" [class]=\\\"panelStyleClass\\\">\\n                <div *ngIf=\\\"filter\\\" class=\\\"ui-dropdown-filter-container\\\" (input)=\\\"onFilter($event)\\\" (click)=\\\"$event.stopPropagation()\\\">\\n                    <input #filter type=\\\"text\\\" autocomplete=\\\"off\\\" class=\\\"ui-dropdown-filter ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [attr.placeholder]=\\\"filterPlaceholder\\\"\\n                    (keydown.enter)=\\\"$event.preventDefault()\\\" (keydown)=\\\"onKeydown($event)\\\">\\n                    <span class=\\\"ui-dropdown-filter-icon fa fa-search\\\"></span>\\n                </div>\\n                <div #itemswrapper class=\\\"ui-dropdown-items-wrapper\\\" [style.max-height]=\\\"scrollHeight||'auto'\\\">\\n                    <ul class=\\\"ui-dropdown-items ui-dropdown-list ui-widget-content ui-widget ui-corner-all ui-helper-reset\\\" *ngIf=\\\"lazy ? panelVisible : true\\\">\\n                        <ng-container *ngIf=\\\"group\\\">\\n                            <ng-template ngFor let-optgroup [ngForOf]=\\\"optionsToDisplay\\\">\\n                                <li class=\\\"ui-dropdown-item-group\\\">\\n                                    <span *ngIf=\\\"!groupTemplate\\\">{{optgroup.label||'empty'}}</span>\\n                                    <ng-container *ngTemplateOutlet=\\\"groupTemplate; context: {$implicit: optgroup}\\\"></ng-container>\\n                                </li>\\n                                <ng-container *ngTemplateOutlet=\\\"itemslist; context: {$implicit: optgroup.items, selectedOption: selectedOption}\\\"></ng-container>\\n                            </ng-template>\\n                        </ng-container>\\n                        <ng-container *ngIf=\\\"!group\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"itemslist; context: {$implicit: optionsToDisplay, selectedOption: selectedOption}\\\"></ng-container>\\n                        </ng-container>\\n                        <ng-template #itemslist let-options let-selectedOption=\\\"selectedOption\\\">\\n                            <li *ngFor=\\\"let option of options;let i=index\\\" [ngClass]=\\\"{'ui-dropdown-item ui-corner-all':true, 'ui-state-highlight':(selectedOption == option), 'ui-dropdown-item-empty':!option.label||option.label.length === 0}\\\" \\n                                    (click)=\\\"onItemClick($event, option)\\\">\\n                                <span *ngIf=\\\"!itemTemplate\\\">{{option.label||'empty'}}</span>\\n                                <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option}\\\"></ng-container>\\n                            </li>\\n                        </ng-template>\\n                        <li *ngIf=\\\"filter && optionsToDisplay && optionsToDisplay.length === 0\\\">{{emptyFilterMessage}}</li>\\n                    </ul>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focused'\n            },\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils, exports.DROPDOWN_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef,\n            objectutils_1.ObjectUtils, core_1.NgZone])\n    ], Dropdown);\n    return Dropdown;\n}());\nexports.Dropdown = Dropdown;\nvar DropdownModule = /** @class */ (function () {\n    function DropdownModule() {\n    }\n    DropdownModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [Dropdown, shared_1.SharedModule],\n            declarations: [Dropdown]\n        })\n    ], DropdownModule);\n    return DropdownModule;\n}());\nexports.DropdownModule = DropdownModule;\n//# sourceMappingURL=dropdown.js.map\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar Draggable = /** @class */ (function () {\n    function Draggable(el, domHandler, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.zone = zone;\n        this.onDragStart = new core_1.EventEmitter();\n        this.onDragEnd = new core_1.EventEmitter();\n        this.onDrag = new core_1.EventEmitter();\n    }\n    Draggable.prototype.ngAfterViewInit = function () {\n        this.bindMouseListeners();\n    };\n    Draggable.prototype.bindDragListener = function () {\n        var _this = this;\n        if (!this.dragListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.dragListener = _this.drag.bind(_this);\n                _this.el.nativeElement.addEventListener('drag', _this.dragListener);\n            });\n        }\n    };\n    Draggable.prototype.unbindDragListener = function () {\n        var _this = this;\n        if (this.dragListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.el.nativeElement.removeEventListener('drag', _this.dragListener);\n                _this.dragListener = null;\n            });\n        }\n    };\n    Draggable.prototype.bindMouseListeners = function () {\n        var _this = this;\n        if (!this.mouseDownListener && !this.mouseUpListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.mouseDownListener = _this.mousedown.bind(_this);\n                _this.mouseUpListener = _this.mouseup.bind(_this);\n                _this.el.nativeElement.addEventListener('mousedown', _this.mouseDownListener);\n                _this.el.nativeElement.addEventListener('mouseup', _this.mouseUpListener);\n            });\n        }\n    };\n    Draggable.prototype.unbindMouseListeners = function () {\n        var _this = this;\n        if (this.mouseDownListener && this.mouseUpListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.el.nativeElement.removeEventListener('mousedown', _this.mouseDownListener);\n                _this.el.nativeElement.removeEventListener('mouseup', _this.mouseUpListener);\n                _this.mouseDownListener = null;\n                _this.mouseUpListener = null;\n            });\n        }\n    };\n    Draggable.prototype.drag = function (event) {\n        this.onDrag.emit(event);\n    };\n    Draggable.prototype.dragStart = function (event) {\n        if (this.allowDrag()) {\n            if (this.dragEffect) {\n                event.dataTransfer.effectAllowed = this.dragEffect;\n            }\n            event.dataTransfer.setData('text', this.scope);\n            this.onDragStart.emit(event);\n            this.bindDragListener();\n        }\n        else {\n            event.preventDefault();\n        }\n    };\n    Draggable.prototype.dragEnd = function (event) {\n        this.onDragEnd.emit(event);\n        this.unbindDragListener();\n    };\n    Draggable.prototype.mousedown = function (event) {\n        this.handle = event.target;\n    };\n    Draggable.prototype.mouseup = function (event) {\n        this.handle = null;\n    };\n    Draggable.prototype.allowDrag = function () {\n        if (this.dragHandle && this.handle)\n            return this.domHandler.matches(this.handle, this.dragHandle);\n        else\n            return true;\n    };\n    Draggable.prototype.ngOnDestroy = function () {\n        this.unbindDragListener();\n        this.unbindMouseListeners();\n    };\n    __decorate([\n        core_1.Input('pDraggable'),\n        __metadata(\"design:type\", String)\n    ], Draggable.prototype, \"scope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Draggable.prototype, \"dragEffect\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Draggable.prototype, \"dragHandle\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Draggable.prototype, \"onDragStart\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Draggable.prototype, \"onDragEnd\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Draggable.prototype, \"onDrag\", void 0);\n    __decorate([\n        core_1.HostListener('dragstart', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Draggable.prototype, \"dragStart\", null);\n    __decorate([\n        core_1.HostListener('dragend', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Draggable.prototype, \"dragEnd\", null);\n    Draggable = __decorate([\n        core_1.Directive({\n            selector: '[pDraggable]',\n            host: {\n                '[draggable]': 'true'\n            },\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.NgZone])\n    ], Draggable);\n    return Draggable;\n}());\nexports.Draggable = Draggable;\nvar Droppable = /** @class */ (function () {\n    function Droppable(el, domHandler, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.zone = zone;\n        this.onDragEnter = new core_1.EventEmitter();\n        this.onDragLeave = new core_1.EventEmitter();\n        this.onDrop = new core_1.EventEmitter();\n    }\n    Droppable.prototype.ngAfterViewInit = function () {\n        this.bindDragOverListener();\n    };\n    Droppable.prototype.bindDragOverListener = function () {\n        var _this = this;\n        if (!this.dragOverListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.dragOverListener = _this.dragOver.bind(_this);\n                _this.el.nativeElement.addEventListener('dragover', _this.dragOverListener);\n            });\n        }\n    };\n    Droppable.prototype.unbindDragOverListener = function () {\n        var _this = this;\n        if (this.dragOverListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.el.nativeElement.removeEventListener('dragover', _this.dragOverListener);\n                _this.dragOverListener = null;\n            });\n        }\n    };\n    Droppable.prototype.dragOver = function (event) {\n        event.preventDefault();\n    };\n    Droppable.prototype.drop = function (event) {\n        if (this.allowDrop(event)) {\n            event.preventDefault();\n            this.onDrop.emit(event);\n        }\n    };\n    Droppable.prototype.dragEnter = function (event) {\n        event.preventDefault();\n        if (this.dropEffect) {\n            event.dataTransfer.dropEffect = this.dropEffect;\n        }\n        this.onDragEnter.emit(event);\n    };\n    Droppable.prototype.dragLeave = function (event) {\n        event.preventDefault();\n        this.onDragLeave.emit(event);\n    };\n    Droppable.prototype.allowDrop = function (event) {\n        var dragScope = event.dataTransfer.getData('text');\n        if (typeof (this.scope) == \"string\" && dragScope == this.scope) {\n            return true;\n        }\n        else if (this.scope instanceof Array) {\n            for (var j = 0; j < this.scope.length; j++) {\n                if (dragScope == this.scope[j]) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    Droppable.prototype.ngOnDestroy = function () {\n        this.unbindDragOverListener();\n    };\n    __decorate([\n        core_1.Input('pDroppable'),\n        __metadata(\"design:type\", Object)\n    ], Droppable.prototype, \"scope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Droppable.prototype, \"dropEffect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Droppable.prototype, \"onDragEnter\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Droppable.prototype, \"onDragLeave\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Droppable.prototype, \"onDrop\", void 0);\n    __decorate([\n        core_1.HostListener('drop', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Droppable.prototype, \"drop\", null);\n    __decorate([\n        core_1.HostListener('dragenter', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Droppable.prototype, \"dragEnter\", null);\n    __decorate([\n        core_1.HostListener('dragleave', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Droppable.prototype, \"dragLeave\", null);\n    Droppable = __decorate([\n        core_1.Directive({\n            selector: '[pDroppable]',\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.NgZone])\n    ], Droppable);\n    return Droppable;\n}());\nexports.Droppable = Droppable;\nvar DragDropModule = /** @class */ (function () {\n    function DragDropModule() {\n    }\n    DragDropModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Draggable, Droppable],\n            declarations: [Draggable, Droppable]\n        })\n    ], DragDropModule);\n    return DragDropModule;\n}());\nexports.DragDropModule = DragDropModule;\n//# sourceMappingURL=dragdrop.js.map\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar messageservice_1 = __webpack_require__(236);\nvar Messages = /** @class */ (function () {\n    function Messages(messageService) {\n        this.messageService = messageService;\n        this.closable = true;\n        this.enableService = true;\n        this.valueChange = new core_1.EventEmitter();\n    }\n    Messages.prototype.ngOnInit = function () {\n        var _this = this;\n        if (this.messageService && this.enableService) {\n            this.subscription = this.messageService.messageObserver.subscribe(function (messages) {\n                if (messages) {\n                    if (messages instanceof Array) {\n                        var filteredMessages = messages.filter(function (m) { return _this.key === m.key; });\n                        _this.value = _this.value ? _this.value.concat(filteredMessages) : filteredMessages.slice();\n                    }\n                    else if (_this.key === messages.key) {\n                        _this.value = _this.value ? _this.value.concat([messages]) : [messages];\n                    }\n                }\n                else {\n                    _this.value = null;\n                }\n            });\n        }\n    };\n    Messages.prototype.hasMessages = function () {\n        return this.value && this.value.length > 0;\n    };\n    Messages.prototype.getSeverityClass = function () {\n        return this.value[0].severity;\n    };\n    Messages.prototype.clear = function (event) {\n        this.value = [];\n        this.valueChange.emit(this.value);\n        event.preventDefault();\n    };\n    Object.defineProperty(Messages.prototype, \"icon\", {\n        get: function () {\n            var icon = null;\n            if (this.hasMessages()) {\n                var msg = this.value[0];\n                switch (msg.severity) {\n                    case 'success':\n                        icon = 'fa-check';\n                        break;\n                    case 'info':\n                        icon = 'fa-info-circle';\n                        break;\n                    case 'error':\n                        icon = 'fa-close';\n                        break;\n                    case 'warn':\n                        icon = 'fa-warning';\n                        break;\n                    default:\n                        icon = 'fa-info-circle';\n                        break;\n                }\n            }\n            return icon;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Messages.prototype.ngOnDestroy = function () {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Messages.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Messages.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Messages.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Messages.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Messages.prototype, \"enableService\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Messages.prototype, \"key\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Messages.prototype, \"valueChange\", void 0);\n    Messages = __decorate([\n        core_1.Component({\n            selector: 'p-messages',\n            template: \"\\n        <div *ngIf=\\\"hasMessages()\\\" class=\\\"ui-messages ui-widget ui-corner-all\\\" style=\\\"display:block\\\"\\n                    [ngClass]=\\\"{'ui-messages-info':(value[0].severity === 'info'),\\n                    'ui-messages-warn':(value[0].severity === 'warn'),\\n                    'ui-messages-error':(value[0].severity === 'error'),\\n                    'ui-messages-success':(value[0].severity === 'success')}\\\"\\n                    [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <a href=\\\"#\\\" class=\\\"ui-messages-close\\\" (click)=\\\"clear($event)\\\" *ngIf=\\\"closable\\\">\\n                <i class=\\\"fa fa-close\\\"></i>\\n            </a>\\n            <span class=\\\"ui-messages-icon fa fa-fw fa-2x\\\" [ngClass]=\\\"icon\\\"></span>\\n            <ul>\\n                <li *ngFor=\\\"let msg of value\\\">\\n                    <span *ngIf=\\\"msg.summary\\\" class=\\\"ui-messages-summary\\\" [innerHTML]=\\\"msg.summary\\\"></span>\\n                    <span *ngIf=\\\"msg.detail\\\" class=\\\"ui-messages-detail\\\" [innerHTML]=\\\"msg.detail\\\"></span>\\n                </li>\\n            </ul>\\n        </div>\\n    \"\n        }),\n        __param(0, core_1.Optional()),\n        __metadata(\"design:paramtypes\", [messageservice_1.MessageService])\n    ], Messages);\n    return Messages;\n}());\nexports.Messages = Messages;\nvar MessagesModule = /** @class */ (function () {\n    function MessagesModule() {\n    }\n    MessagesModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Messages],\n            declarations: [Messages]\n        })\n    ], MessagesModule);\n    return MessagesModule;\n}());\nexports.MessagesModule = MessagesModule;\n//# sourceMappingURL=messages.js.map\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar Subject_1 = __webpack_require__(23);\nvar MessageService = /** @class */ (function () {\n    function MessageService() {\n        this.messageSource = new Subject_1.Subject();\n        this.messageObserver = this.messageSource.asObservable();\n    }\n    MessageService.prototype.add = function (message) {\n        if (message) {\n            this.messageSource.next(message);\n        }\n    };\n    MessageService.prototype.addAll = function (messages) {\n        if (messages && messages.length) {\n            this.messageSource.next(messages);\n        }\n    };\n    MessageService.prototype.clear = function () {\n        this.messageSource.next(null);\n    };\n    MessageService = __decorate([\n        core_1.Injectable()\n    ], MessageService);\n    return MessageService;\n}());\nexports.MessageService = MessageService;\n//# sourceMappingURL=messageservice.js.map\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar ProgressBar = /** @class */ (function () {\n    function ProgressBar() {\n        this.showValue = true;\n        this.unit = '%';\n        this.mode = 'determinate';\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ProgressBar.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ProgressBar.prototype, \"showValue\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ProgressBar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressBar.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressBar.prototype, \"unit\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressBar.prototype, \"mode\", void 0);\n    ProgressBar = __decorate([\n        core_1.Component({\n            selector: 'p-progressBar',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" role=\\\"progressbar\\\" aria-valuemin=\\\"0\\\" [attr.aria-valuenow]=\\\"value\\\" aria-valuemax=\\\"100\\\"\\n            [ngClass]=\\\"{'ui-progressbar ui-widget ui-widget-content ui-corner-all': true, 'ui-progressbar-determinate': (mode === 'determinate'), 'ui-progressbar-indeterminate': (mode === 'indeterminate')}\\\">\\n            <div class=\\\"ui-progressbar-value ui-progressbar-value-animate ui-widget-header ui-corner-all\\\" [style.width]=\\\"value + '%'\\\" style=\\\"display:block\\\"></div>\\n            <div class=\\\"ui-progressbar-label\\\" [style.display]=\\\"value != null ? 'block' : 'none'\\\" *ngIf=\\\"showValue\\\">{{value}}{{unit}}</div>\\n        </div>\\n    \"\n        })\n    ], ProgressBar);\n    return ProgressBar;\n}());\nexports.ProgressBar = ProgressBar;\nvar ProgressBarModule = /** @class */ (function () {\n    function ProgressBarModule() {\n    }\n    ProgressBarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ProgressBar],\n            declarations: [ProgressBar]\n        })\n    ], ProgressBarModule);\n    return ProgressBarModule;\n}());\nexports.ProgressBarModule = ProgressBarModule;\n//# sourceMappingURL=progressbar.js.map\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n    Port of jQuery MaskedInput by DigitalBush as a Native Angular2 Component in Typescript without jQuery\n    https://github.com/digitalBush/jquery.maskedinput/\n\n    Copyright (c) 2007-2014 Josh Bush (digitalbush.com)\n\n    Permission is hereby granted, free of charge, to any person\n    obtaining a copy of this software and associated documentation\n    files (the \"Software\"), to deal in the Software without\n    restriction, including without limitation the rights to use,\n    copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the\n    Software is furnished to do so, subject to the following\n    conditions:\n\n    The above copyright notice and this permission notice shall be\n    included in all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS IN THE SOFTWARE.\n*/\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar inputtext_1 = __webpack_require__(65);\nvar forms_1 = __webpack_require__(17);\nexports.INPUTMASK_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return InputMask; }),\n    multi: true\n};\nvar InputMask = /** @class */ (function () {\n    function InputMask(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.type = 'text';\n        this.slotChar = '_';\n        this.autoClear = true;\n        this.characterPattern = '[A-Za-z]';\n        this.onComplete = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    InputMask.prototype.ngOnInit = function () {\n        var ua = this.domHandler.getUserAgent();\n        this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua);\n        this.initMask();\n    };\n    Object.defineProperty(InputMask.prototype, \"mask\", {\n        get: function () {\n            return this._mask;\n        },\n        set: function (val) {\n            this._mask = val;\n            this.initMask();\n            this.writeValue('');\n            this.onModelChange(this.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    InputMask.prototype.initMask = function () {\n        this.tests = [];\n        this.partialPosition = this.mask.length;\n        this.len = this.mask.length;\n        this.firstNonMaskPos = null;\n        this.defs = {\n            '9': '[0-9]',\n            'a': this.characterPattern,\n            '*': this.characterPattern + \"|[0-9]\"\n        };\n        var maskTokens = this.mask.split('');\n        for (var i = 0; i < maskTokens.length; i++) {\n            var c = maskTokens[i];\n            if (c == '?') {\n                this.len--;\n                this.partialPosition = i;\n            }\n            else if (this.defs[c]) {\n                this.tests.push(new RegExp(this.defs[c]));\n                if (this.firstNonMaskPos === null) {\n                    this.firstNonMaskPos = this.tests.length - 1;\n                }\n                if (i < this.partialPosition) {\n                    this.lastRequiredNonMaskPos = this.tests.length - 1;\n                }\n            }\n            else {\n                this.tests.push(null);\n            }\n        }\n        this.buffer = [];\n        for (var i = 0; i < maskTokens.length; i++) {\n            var c = maskTokens[i];\n            if (c != '?') {\n                if (this.defs[c])\n                    this.buffer.push(this.getPlaceholder(i));\n                else\n                    this.buffer.push(c);\n            }\n        }\n        this.defaultBuffer = this.buffer.join('');\n    };\n    InputMask.prototype.writeValue = function (value) {\n        this.value = value;\n        if (this.inputViewChild.nativeElement) {\n            if (this.value == undefined || this.value == null)\n                this.inputViewChild.nativeElement.value = '';\n            else\n                this.inputViewChild.nativeElement.value = this.value;\n            this.checkVal();\n            this.focusText = this.inputViewChild.nativeElement.value;\n            this.updateFilledState();\n        }\n    };\n    InputMask.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    InputMask.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    InputMask.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    InputMask.prototype.caret = function (first, last) {\n        var range, begin, end;\n        if (!this.inputViewChild.nativeElement.offsetParent || this.inputViewChild.nativeElement !== document.activeElement) {\n            return;\n        }\n        if (typeof first == 'number') {\n            begin = first;\n            end = (typeof last === 'number') ? last : begin;\n            if (this.inputViewChild.nativeElement.setSelectionRange) {\n                this.inputViewChild.nativeElement.setSelectionRange(begin, end);\n            }\n            else if (this.inputViewChild.nativeElement['createTextRange']) {\n                range = this.inputViewChild.nativeElement['createTextRange']();\n                range.collapse(true);\n                range.moveEnd('character', end);\n                range.moveStart('character', begin);\n                range.select();\n            }\n        }\n        else {\n            if (this.inputViewChild.nativeElement.setSelectionRange) {\n                begin = this.inputViewChild.nativeElement.selectionStart;\n                end = this.inputViewChild.nativeElement.selectionEnd;\n            }\n            else if (document['selection'] && document['selection'].createRange) {\n                range = document['selection'].createRange();\n                begin = 0 - range.duplicate().moveStart('character', -100000);\n                end = begin + range.text.length;\n            }\n            return { begin: begin, end: end };\n        }\n    };\n    InputMask.prototype.isCompleted = function () {\n        var completed;\n        for (var i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) {\n            if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) {\n                return false;\n            }\n        }\n        return true;\n    };\n    InputMask.prototype.getPlaceholder = function (i) {\n        if (i < this.slotChar.length) {\n            return this.slotChar.charAt(i);\n        }\n        return this.slotChar.charAt(0);\n    };\n    InputMask.prototype.seekNext = function (pos) {\n        while (++pos < this.len && !this.tests[pos])\n            ;\n        return pos;\n    };\n    InputMask.prototype.seekPrev = function (pos) {\n        while (--pos >= 0 && !this.tests[pos])\n            ;\n        return pos;\n    };\n    InputMask.prototype.shiftL = function (begin, end) {\n        var i, j;\n        if (begin < 0) {\n            return;\n        }\n        for (i = begin, j = this.seekNext(end); i < this.len; i++) {\n            if (this.tests[i]) {\n                if (j < this.len && this.tests[i].test(this.buffer[j])) {\n                    this.buffer[i] = this.buffer[j];\n                    this.buffer[j] = this.getPlaceholder(j);\n                }\n                else {\n                    break;\n                }\n                j = this.seekNext(j);\n            }\n        }\n        this.writeBuffer();\n        this.caret(Math.max(this.firstNonMaskPos, begin));\n    };\n    InputMask.prototype.shiftR = function (pos) {\n        var i, c, j, t;\n        for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) {\n            if (this.tests[i]) {\n                j = this.seekNext(i);\n                t = this.buffer[i];\n                this.buffer[i] = c;\n                if (j < this.len && this.tests[j].test(t)) {\n                    c = t;\n                }\n                else {\n                    break;\n                }\n            }\n        }\n    };\n    InputMask.prototype.handleAndroidInput = function (e) {\n        var _this = this;\n        var curVal = this.inputViewChild.nativeElement.value;\n        var pos = this.caret();\n        if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length) {\n            // a deletion or backspace happened\n            this.checkVal(true);\n            while (pos.begin > 0 && !this.tests[pos.begin - 1])\n                pos.begin--;\n            if (pos.begin === 0) {\n                while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin])\n                    pos.begin++;\n            }\n            setTimeout(function () {\n                _this.caret(pos.begin, pos.begin);\n                _this.updateModel(e);\n                if (_this.isCompleted()) {\n                    _this.onComplete.emit();\n                }\n            }, 0);\n        }\n        else {\n            this.checkVal(true);\n            while (pos.begin < this.len && !this.tests[pos.begin])\n                pos.begin++;\n            setTimeout(function () {\n                _this.caret(pos.begin, pos.begin);\n                _this.updateModel(e);\n                if (_this.isCompleted()) {\n                    _this.onComplete.emit();\n                }\n            }, 0);\n        }\n    };\n    InputMask.prototype.onInputBlur = function (e) {\n        this.focus = false;\n        this.onModelTouched();\n        this.checkVal();\n        this.updateFilledState();\n        this.onBlur.emit(e);\n        if (this.inputViewChild.nativeElement.value != this.focusText) {\n            this.updateModel(e);\n            var event_1 = document.createEvent('HTMLEvents');\n            event_1.initEvent('change', true, false);\n            this.inputViewChild.nativeElement.dispatchEvent(event_1);\n        }\n    };\n    InputMask.prototype.onKeyDown = function (e) {\n        if (this.readonly) {\n            return;\n        }\n        var k = e.which || e.keyCode, pos, begin, end;\n        var iPhone = /iphone/i.test(this.domHandler.getUserAgent());\n        this.oldVal = this.inputViewChild.nativeElement.value;\n        //backspace, delete, and escape get special treatment\n        if (k === 8 || k === 46 || (iPhone && k === 127)) {\n            pos = this.caret();\n            begin = pos.begin;\n            end = pos.end;\n            if (end - begin === 0) {\n                begin = k !== 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1));\n                end = k === 46 ? this.seekNext(end) : end;\n            }\n            this.clearBuffer(begin, end);\n            this.shiftL(begin, end - 1);\n            this.updateModel(e);\n            e.preventDefault();\n        }\n        else if (k === 13) {\n            this.onInputBlur(e);\n            this.updateModel(e);\n        }\n        else if (k === 27) {\n            this.inputViewChild.nativeElement.value = this.focusText;\n            this.caret(0, this.checkVal());\n            this.updateModel(e);\n            e.preventDefault();\n        }\n    };\n    InputMask.prototype.onKeyPress = function (e) {\n        var _this = this;\n        if (this.readonly) {\n            return;\n        }\n        var k = e.which || e.keyCode, pos = this.caret(), p, c, next, completed;\n        if (e.ctrlKey || e.altKey || e.metaKey || k < 32 || (k > 34 && k < 41)) {\n            return;\n        }\n        else if (k && k !== 13) {\n            if (pos.end - pos.begin !== 0) {\n                this.clearBuffer(pos.begin, pos.end);\n                this.shiftL(pos.begin, pos.end - 1);\n            }\n            p = this.seekNext(pos.begin - 1);\n            if (p < this.len) {\n                c = String.fromCharCode(k);\n                if (this.tests[p].test(c)) {\n                    this.shiftR(p);\n                    this.buffer[p] = c;\n                    this.writeBuffer();\n                    next = this.seekNext(p);\n                    if (/android/i.test(this.domHandler.getUserAgent())) {\n                        //Path for CSP Violation on FireFox OS 1.1\n                        var proxy = function () {\n                            _this.caret(next);\n                        };\n                        setTimeout(proxy, 0);\n                    }\n                    else {\n                        this.caret(next);\n                    }\n                    if (pos.begin <= this.lastRequiredNonMaskPos) {\n                        completed = this.isCompleted();\n                    }\n                }\n            }\n            e.preventDefault();\n        }\n        this.updateModel(e);\n        this.updateFilledState();\n        if (completed) {\n            this.onComplete.emit();\n        }\n    };\n    InputMask.prototype.clearBuffer = function (start, end) {\n        var i;\n        for (i = start; i < end && i < this.len; i++) {\n            if (this.tests[i]) {\n                this.buffer[i] = this.getPlaceholder(i);\n            }\n        }\n    };\n    InputMask.prototype.writeBuffer = function () {\n        this.inputViewChild.nativeElement.value = this.buffer.join('');\n    };\n    InputMask.prototype.checkVal = function (allow) {\n        //try to place characters where they belong\n        var test = this.inputViewChild.nativeElement.value, lastMatch = -1, i, c, pos;\n        for (i = 0, pos = 0; i < this.len; i++) {\n            if (this.tests[i]) {\n                this.buffer[i] = this.getPlaceholder(i);\n                while (pos++ < test.length) {\n                    c = test.charAt(pos - 1);\n                    if (this.tests[i].test(c)) {\n                        this.buffer[i] = c;\n                        lastMatch = i;\n                        break;\n                    }\n                }\n                if (pos > test.length) {\n                    this.clearBuffer(i + 1, this.len);\n                    break;\n                }\n            }\n            else {\n                if (this.buffer[i] === test.charAt(pos)) {\n                    pos++;\n                }\n                if (i < this.partialPosition) {\n                    lastMatch = i;\n                }\n            }\n        }\n        if (allow) {\n            this.writeBuffer();\n        }\n        else if (lastMatch + 1 < this.partialPosition) {\n            if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {\n                // Invalid value. Remove it and replace it with the\n                // mask, which is the default behavior.\n                if (this.inputViewChild.nativeElement.value)\n                    this.inputViewChild.nativeElement.value = '';\n                this.clearBuffer(0, this.len);\n            }\n            else {\n                // Invalid value, but we opt to show the value to the\n                // user and allow them to correct their mistake.\n                this.writeBuffer();\n            }\n        }\n        else {\n            this.writeBuffer();\n            this.inputViewChild.nativeElement.value = this.inputViewChild.nativeElement.value.substring(0, lastMatch + 1);\n        }\n        return (this.partialPosition ? i : this.firstNonMaskPos);\n    };\n    InputMask.prototype.onInputFocus = function (event) {\n        var _this = this;\n        if (this.readonly) {\n            return;\n        }\n        this.focus = true;\n        clearTimeout(this.caretTimeoutId);\n        var pos;\n        this.focusText = this.inputViewChild.nativeElement.value;\n        pos = this.checkVal();\n        this.caretTimeoutId = setTimeout(function () {\n            if (_this.inputViewChild.nativeElement !== document.activeElement) {\n                return;\n            }\n            _this.writeBuffer();\n            if (pos == _this.mask.replace(\"?\", \"\").length) {\n                _this.caret(0, pos);\n            }\n            else {\n                _this.caret(pos);\n            }\n        }, 10);\n        this.onFocus.emit(event);\n    };\n    InputMask.prototype.onInput = function (event) {\n        if (this.androidChrome)\n            this.handleAndroidInput(event);\n        else\n            this.handleInputChange(event);\n    };\n    InputMask.prototype.handleInputChange = function (event) {\n        var _this = this;\n        if (this.readonly) {\n            return;\n        }\n        setTimeout(function () {\n            var pos = _this.checkVal(true);\n            _this.caret(pos);\n            _this.updateModel(event);\n            if (_this.isCompleted()) {\n                _this.onComplete.emit();\n            }\n        }, 0);\n    };\n    InputMask.prototype.getUnmaskedValue = function () {\n        var unmaskedBuffer = [];\n        for (var i = 0; i < this.buffer.length; i++) {\n            var c = this.buffer[i];\n            if (this.tests[i] && c != this.getPlaceholder(i)) {\n                unmaskedBuffer.push(c);\n            }\n        }\n        return unmaskedBuffer.join('');\n    };\n    InputMask.prototype.updateModel = function (e) {\n        var updatedValue = this.unmask ? this.getUnmaskedValue() : e.target.value;\n        if (updatedValue !== null || updatedValue !== undefined) {\n            this.value = updatedValue;\n            this.onModelChange(this.value);\n        }\n    };\n    InputMask.prototype.updateFilledState = function () {\n        this.filled = this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value != '';\n    };\n    InputMask.prototype.ngOnDestroy = function () {\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"slotChar\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"autoClear\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputMask.prototype, \"size\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputMask.prototype, \"maxlength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"unmask\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"characterPattern\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"autoFocus\", void 0);\n    __decorate([\n        core_1.ViewChild('input'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], InputMask.prototype, \"inputViewChild\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputMask.prototype, \"onComplete\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputMask.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputMask.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], InputMask.prototype, \"mask\", null);\n    InputMask = __decorate([\n        core_1.Component({\n            selector: 'p-inputMask',\n            template: \"<input #input pInputText [attr.id]=\\\"inputId\\\" [attr.type]=\\\"type\\\" [attr.name]=\\\"name\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"styleClass\\\" [attr.placeholder]=\\\"placeholder\\\"\\n        [attr.size]=\\\"size\\\" [attr.maxlength]=\\\"maxlength\\\" [attr.tabindex]=\\\"tabindex\\\" [disabled]=\\\"disabled\\\" [readonly]=\\\"readonly\\\" [attr.required]=\\\"required\\\"\\n        (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" (keydown)=\\\"onKeyDown($event)\\\" (keypress)=\\\"onKeyPress($event)\\\" [attr.autofocus]=\\\"autoFocus\\\"\\n        (input)=\\\"onInput($event)\\\" (paste)=\\\"handleInputChange($event)\\\">\",\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [exports.INPUTMASK_VALUE_ACCESSOR, domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], InputMask);\n    return InputMask;\n}());\nexports.InputMask = InputMask;\nvar InputMaskModule = /** @class */ (function () {\n    function InputMaskModule() {\n    }\n    InputMaskModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, inputtext_1.InputTextModule],\n            exports: [InputMask],\n            declarations: [InputMask]\n        })\n    ], InputMaskModule);\n    return InputMaskModule;\n}());\nexports.InputMaskModule = InputMaskModule;\n//# sourceMappingURL=inputmask.js.map\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar forms_1 = __webpack_require__(17);\nexports.KEYFILTER_VALIDATOR = {\n    provide: forms_1.NG_VALIDATORS,\n    useExisting: core_1.forwardRef(function () { return KeyFilter; }),\n    multi: true\n};\nvar KeyFilter = /** @class */ (function () {\n    function KeyFilter(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n    }\n    KeyFilter_1 = KeyFilter;\n    Object.defineProperty(KeyFilter.prototype, \"pattern\", {\n        get: function () {\n            return this._pattern;\n        },\n        set: function (_pattern) {\n            this._pattern = _pattern;\n            this.regex = KeyFilter_1.DEFAULT_MASKS[this._pattern] || this._pattern;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    KeyFilter.prototype.isNavKeyPress = function (e) {\n        var k = e.keyCode;\n        k = this.domHandler.getBrowser().safari ? (KeyFilter_1.SAFARI_KEYS[k] || k) : k;\n        return (k >= 33 && k <= 40) || k == KeyFilter_1.KEYS.RETURN || k == KeyFilter_1.KEYS.TAB || k == KeyFilter_1.KEYS.ESC;\n    };\n    ;\n    KeyFilter.prototype.isSpecialKey = function (e) {\n        var k = e.keyCode;\n        var c = e.charCode;\n        return k == 9 || k == 13 || k == 27 || k == 16 || k == 17 || (k >= 18 && k <= 20) ||\n            (this.domHandler.getBrowser().opera && !e.shiftKey && (k == 8 || (k >= 33 && k <= 35) || (k >= 36 && k <= 39) || (k >= 44 && k <= 45)));\n    };\n    KeyFilter.prototype.getKey = function (e) {\n        var k = e.keyCode || e.charCode;\n        return this.domHandler.getBrowser().safari ? (KeyFilter_1.SAFARI_KEYS[k] || k) : k;\n    };\n    KeyFilter.prototype.getCharCode = function (e) {\n        return e.charCode || e.keyCode || e.which;\n    };\n    ;\n    KeyFilter.prototype.onKeyPress = function (e) {\n        if (this.pValidateOnly) {\n            return;\n        }\n        var browser = this.domHandler.getBrowser();\n        if (e.ctrlKey || e.altKey) {\n            return;\n        }\n        var k = this.getKey(e);\n        if (browser.mozilla && (this.isNavKeyPress(e) || k == KeyFilter_1.KEYS.BACKSPACE || (k == KeyFilter_1.KEYS.DELETE && e.charCode == 0))) {\n            return;\n        }\n        var c = this.getCharCode(e);\n        var cc = String.fromCharCode(c);\n        var ok = true;\n        if (browser.mozilla && (this.isSpecialKey(e) || !cc)) {\n            return;\n        }\n        ok = this.regex.test(cc);\n        if (!ok) {\n            e.preventDefault();\n        }\n    };\n    KeyFilter.prototype.validate = function (c) {\n        if (this.pValidateOnly) {\n            var value = this.el.nativeElement.value;\n            if (value && !this.regex.test(value)) {\n                return {\n                    validatePattern: false\n                };\n            }\n        }\n    };\n    KeyFilter.DEFAULT_MASKS = {\n        pint: /[\\d]/,\n        'int': /[\\d\\-]/,\n        pnum: /[\\d\\.]/,\n        money: /[\\d\\.\\s,]/,\n        num: /[\\d\\-\\.]/,\n        hex: /[0-9a-f]/i,\n        email: /[a-z0-9_\\.\\-@]/i,\n        alpha: /[a-z_]/i,\n        alphanum: /[a-z0-9_]/i\n    };\n    KeyFilter.KEYS = {\n        TAB: 9,\n        RETURN: 13,\n        ESC: 27,\n        BACKSPACE: 8,\n        DELETE: 46\n    };\n    KeyFilter.SAFARI_KEYS = {\n        63234: 37,\n        63235: 39,\n        63232: 38,\n        63233: 40,\n        63276: 33,\n        63277: 34,\n        63272: 46,\n        63273: 36,\n        63275: 35 // end\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], KeyFilter.prototype, \"pValidateOnly\", void 0);\n    __decorate([\n        core_1.Input('pKeyFilter'),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], KeyFilter.prototype, \"pattern\", null);\n    __decorate([\n        core_1.HostListener('keypress', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [KeyboardEvent]),\n        __metadata(\"design:returntype\", void 0)\n    ], KeyFilter.prototype, \"onKeyPress\", null);\n    KeyFilter = KeyFilter_1 = __decorate([\n        core_1.Directive({\n            selector: '[pKeyFilter]',\n            providers: [domhandler_1.DomHandler, exports.KEYFILTER_VALIDATOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], KeyFilter);\n    return KeyFilter;\n    var KeyFilter_1;\n}());\nexports.KeyFilter = KeyFilter;\nvar KeyFilterModule = /** @class */ (function () {\n    function KeyFilterModule() {\n    }\n    KeyFilterModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [KeyFilter],\n            declarations: [KeyFilter]\n        })\n    ], KeyFilterModule);\n    return KeyFilterModule;\n}());\nexports.KeyFilterModule = KeyFilterModule;\n//# sourceMappingURL=keyfilter.js.map\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar Password = /** @class */ (function () {\n    function Password(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.promptLabel = 'Please enter a password';\n        this.weakLabel = 'Weak';\n        this.mediumLabel = 'Medium';\n        this.strongLabel = 'Strong';\n        this.feedback = true;\n    }\n    Password.prototype.ngAfterViewInit = function () {\n        this.panel = document.createElement('div');\n        this.panel.className = 'ui-password-panel ui-widget ui-state-highlight ui-corner-all ui-helper-hidden ui-password-panel-overlay';\n        this.meter = document.createElement('div');\n        this.meter.className = 'ui-password-meter';\n        this.info = document.createElement('div');\n        this.info.className = 'ui-password-info';\n        this.info.textContent = this.promptLabel;\n        if (this.feedback) {\n            this.panel.appendChild(this.meter);\n            this.panel.appendChild(this.info);\n            document.body.appendChild(this.panel);\n        }\n    };\n    Password.prototype.ngDoCheck = function () {\n        this.updateFilledState();\n    };\n    //To trigger change detection to manage ui-state-filled for material labels when there is no value binding\n    Password.prototype.onInput = function (e) {\n        this.updateFilledState();\n    };\n    Password.prototype.updateFilledState = function () {\n        this.filled = this.el.nativeElement.value && this.el.nativeElement.value.length;\n    };\n    Password.prototype.onFocus = function (e) {\n        this.panel.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n        this.domHandler.removeClass(this.panel, 'ui-helper-hidden');\n        this.domHandler.absolutePosition(this.panel, this.el.nativeElement);\n        this.domHandler.fadeIn(this.panel, 250);\n    };\n    Password.prototype.onBlur = function (e) {\n        this.domHandler.addClass(this.panel, 'ui-helper-hidden');\n    };\n    Password.prototype.onKeyup = function (e) {\n        var value = e.target.value, label = null, meterPos = null;\n        if (value.length === 0) {\n            label = this.promptLabel;\n            meterPos = '0px 0px';\n        }\n        else {\n            var score = this.testStrength(value);\n            if (score < 30) {\n                label = this.weakLabel;\n                meterPos = '0px -10px';\n            }\n            else if (score >= 30 && score < 80) {\n                label = this.mediumLabel;\n                meterPos = '0px -20px';\n            }\n            else if (score >= 80) {\n                label = this.strongLabel;\n                meterPos = '0px -30px';\n            }\n        }\n        this.meter.style.backgroundPosition = meterPos;\n        this.info.textContent = label;\n    };\n    Password.prototype.testStrength = function (str) {\n        var grade = 0;\n        var val;\n        val = str.match('[0-9]');\n        grade += this.normalize(val ? val.length : 1 / 4, 1) * 25;\n        val = str.match('[a-zA-Z]');\n        grade += this.normalize(val ? val.length : 1 / 2, 3) * 10;\n        val = str.match('[!@#$%^&*?_~.,;=]');\n        grade += this.normalize(val ? val.length : 1 / 6, 1) * 35;\n        val = str.match('[A-Z]');\n        grade += this.normalize(val ? val.length : 1 / 6, 1) * 30;\n        grade *= str.length / 8;\n        return grade > 100 ? 100 : grade;\n    };\n    Password.prototype.normalize = function (x, y) {\n        var diff = x - y;\n        if (diff <= 0)\n            return x / y;\n        else\n            return 1 + 0.5 * (x / (x + y / 4));\n    };\n    Object.defineProperty(Password.prototype, \"disabled\", {\n        get: function () {\n            return this.el.nativeElement.disabled;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Password.prototype.ngOnDestroy = function () {\n        if (!this.feedback)\n            return;\n        this.panel.removeChild(this.meter);\n        this.panel.removeChild(this.info);\n        document.body.removeChild(this.panel);\n        this.panel = null;\n        this.meter = null;\n        this.info = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Password.prototype, \"promptLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Password.prototype, \"weakLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Password.prototype, \"mediumLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Password.prototype, \"strongLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Password.prototype, \"feedback\", void 0);\n    __decorate([\n        core_1.HostListener('input', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Password.prototype, \"onInput\", null);\n    __decorate([\n        core_1.HostListener('focus', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Password.prototype, \"onFocus\", null);\n    __decorate([\n        core_1.HostListener('blur', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Password.prototype, \"onBlur\", null);\n    __decorate([\n        core_1.HostListener('keyup', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Password.prototype, \"onKeyup\", null);\n    Password = __decorate([\n        core_1.Directive({\n            selector: '[pPassword]',\n            host: {\n                '[class.ui-inputtext]': 'true',\n                '[class.ui-corner-all]': 'true',\n                '[class.ui-state-default]': 'true',\n                '[class.ui-widget]': 'true',\n                '[class.ui-state-filled]': 'filled'\n            },\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Password);\n    return Password;\n}());\nexports.Password = Password;\nvar PasswordModule = /** @class */ (function () {\n    function PasswordModule() {\n    }\n    PasswordModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Password],\n            declarations: [Password]\n        })\n    ], PasswordModule);\n    return PasswordModule;\n}());\nexports.PasswordModule = PasswordModule;\n//# sourceMappingURL=password.js.map\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar inputtext_1 = __webpack_require__(65);\nvar domhandler_1 = __webpack_require__(9);\nvar forms_1 = __webpack_require__(17);\nexports.SPINNER_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Spinner; }),\n    multi: true\n};\nvar Spinner = /** @class */ (function () {\n    function Spinner(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.onChange = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.step = 1;\n        this.decimalSeparator = '.';\n        this.thousandSeparator = ',';\n        this.formatInput = true;\n        this.type = 'text';\n        this.valueAsString = '';\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.keyPattern = /[0-9\\+\\-]/;\n        this.negativeSeparator = '-';\n    }\n    Spinner.prototype.ngOnInit = function () {\n        if (Math.floor(this.step) === 0) {\n            this.precision = this.step.toString().split(/[,]|[.]/)[1].length;\n        }\n    };\n    Spinner.prototype.repeat = function (event, interval, dir) {\n        var _this = this;\n        var i = interval || 500;\n        this.clearTimer();\n        this.timer = setTimeout(function () {\n            _this.repeat(event, 40, dir);\n        }, i);\n        this.spin(event, dir);\n    };\n    Spinner.prototype.spin = function (event, dir) {\n        var step = this.step * dir;\n        var currentValue = this.value || 0;\n        var newValue = null;\n        if (this.precision)\n            this.value = parseFloat(this.toFixed(currentValue + step, this.precision));\n        else\n            this.value = currentValue + step;\n        if (this.maxlength !== undefined && this.value.toString().length > this.maxlength) {\n            this.value = currentValue;\n        }\n        if (this.min !== undefined && this.value < this.min) {\n            this.value = this.min;\n        }\n        if (this.max !== undefined && this.value > this.max) {\n            this.value = this.max;\n        }\n        this.formatValue();\n        this.onModelChange(this.value);\n        this.onChange.emit(event);\n    };\n    Spinner.prototype.toFixed = function (value, precision) {\n        var power = Math.pow(10, precision || 0);\n        return String(Math.round(value * power) / power);\n    };\n    Spinner.prototype.onUpButtonMousedown = function (event) {\n        if (!this.disabled) {\n            this.inputfieldViewChild.nativeElement.focus();\n            this.repeat(event, null, 1);\n            this.updateFilledState();\n            event.preventDefault();\n        }\n    };\n    Spinner.prototype.onUpButtonMouseup = function (event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    };\n    Spinner.prototype.onUpButtonMouseleave = function (event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    };\n    Spinner.prototype.onDownButtonMousedown = function (event) {\n        if (!this.disabled) {\n            this.inputfieldViewChild.nativeElement.focus();\n            this.repeat(event, null, -1);\n            this.updateFilledState();\n            event.preventDefault();\n        }\n    };\n    Spinner.prototype.onDownButtonMouseup = function (event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    };\n    Spinner.prototype.onDownButtonMouseleave = function (event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    };\n    Spinner.prototype.onInputKeydown = function (event) {\n        if (event.which == 38) {\n            this.spin(event, 1);\n            event.preventDefault();\n        }\n        else if (event.which == 40) {\n            this.spin(event, -1);\n            event.preventDefault();\n        }\n    };\n    Spinner.prototype.onInputKeyPress = function (event) {\n        var inputChar = String.fromCharCode(event.charCode);\n        if (!this.keyPattern.test(inputChar) && inputChar != this.decimalSeparator && event.keyCode != 9 && event.keyCode != 8 && event.keyCode != 37 && event.keyCode != 39 && event.keyCode != 46) {\n            event.preventDefault();\n        }\n    };\n    Spinner.prototype.onInputKeyup = function (event) {\n        var inputValue = event.target.value;\n        if (event.key !== this.decimalSeparator && event.key !== this.thousandSeparator && event.key !== this.negativeSeparator) {\n            this.value = this.parseValue(inputValue);\n            this.formatValue();\n        }\n        this.onModelChange(this.value);\n        this.updateFilledState();\n    };\n    Spinner.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        this.restrictValue();\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    };\n    Spinner.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        this.onFocus.emit(event);\n    };\n    Spinner.prototype.parseValue = function (val) {\n        var value;\n        if (this.formatInput) {\n            val = val.split(this.thousandSeparator).join('');\n        }\n        if (val.trim() === '') {\n            value = null;\n        }\n        else {\n            if (this.precision) {\n                value = parseFloat(val.replace(',', '.'));\n            }\n            else {\n                value = parseInt(val);\n            }\n            if (isNaN(value)) {\n                value = null;\n            }\n        }\n        return value;\n    };\n    Spinner.prototype.restrictValue = function () {\n        var restricted;\n        if (this.max !== undefined && this.value > this.max) {\n            this.value = this.max;\n            restricted = true;\n        }\n        if (this.min !== undefined && this.value < this.min) {\n            this.value = this.min;\n            restricted = true;\n        }\n        if (restricted) {\n            this.onModelChange(this.value);\n            this.formatValue();\n        }\n    };\n    Spinner.prototype.formatValue = function () {\n        if (this.value !== null && this.value !== undefined) {\n            var textValue = String(this.value).replace('.', this.decimalSeparator);\n            if (this.formatInput) {\n                var parts = textValue.split(this.decimalSeparator);\n                parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandSeparator);\n                textValue = parts.join(this.decimalSeparator);\n            }\n            this.valueAsString = textValue;\n        }\n        else {\n            this.valueAsString = '';\n        }\n        this.inputfieldViewChild.nativeElement.value = this.valueAsString;\n    };\n    Spinner.prototype.handleChange = function (event) {\n        this.onChange.emit(event);\n    };\n    Spinner.prototype.clearTimer = function () {\n        if (this.timer) {\n            clearInterval(this.timer);\n        }\n    };\n    Spinner.prototype.writeValue = function (value) {\n        this.value = value;\n        this.formatValue();\n        this.updateFilledState();\n    };\n    Spinner.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Spinner.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Spinner.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Spinner.prototype.updateFilledState = function () {\n        this.filled = (this.value !== undefined && this.value != null);\n    };\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Spinner.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Spinner.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Spinner.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"step\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"min\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"max\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"maxlength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"size\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Spinner.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Spinner.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"decimalSeparator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"thousandSeparator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Spinner.prototype, \"formatInput\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Spinner.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"inputStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"inputStyleClass\", void 0);\n    __decorate([\n        core_1.ViewChild('inputfield'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Spinner.prototype, \"inputfieldViewChild\", void 0);\n    Spinner = __decorate([\n        core_1.Component({\n            selector: 'p-spinner',\n            template: \"\\n        <span class=\\\"ui-spinner ui-widget ui-corner-all\\\">\\n            <input #inputfield [attr.type]=\\\"type\\\" [attr.id]=\\\"inputId\\\" [value]=\\\"valueAsString\\\" [attr.name]=\\\"name\\\"\\n            [attr.size]=\\\"size\\\" [attr.maxlength]=\\\"maxlength\\\" [attr.tabindex]=\\\"tabindex\\\" [attr.placeholder]=\\\"placeholder\\\" [disabled]=\\\"disabled\\\" [attr.readonly]=\\\"readonly\\\" [attr.required]=\\\"required\\\"\\n            (keydown)=\\\"onInputKeydown($event)\\\" (keyup)=\\\"onInputKeyup($event)\\\" (keypress)=\\\"onInputKeyPress($event)\\\" (blur)=\\\"onInputBlur($event)\\\" (change)=\\\"handleChange($event)\\\" (focus)=\\\"onInputFocus($event)\\\"\\n            [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\" [ngClass]=\\\"'ui-spinner-input ui-inputtext ui-widget ui-state-default ui-corner-all'\\\">\\n            <button type=\\\"button\\\" [ngClass]=\\\"{'ui-spinner-button ui-spinner-up ui-corner-tr ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}\\\" [disabled]=\\\"disabled\\\" [attr.readonly]=\\\"readonly\\\"\\n                (mouseleave)=\\\"onUpButtonMouseleave($event)\\\" (mousedown)=\\\"onUpButtonMousedown($event)\\\" (mouseup)=\\\"onUpButtonMouseup($event)\\\">\\n                <span class=\\\"ui-spinner-button-icon fa fa-caret-up ui-clickable\\\"></span>\\n            </button>\\n            <button type=\\\"button\\\" [ngClass]=\\\"{'ui-spinner-button ui-spinner-down ui-corner-br ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}\\\" [disabled]=\\\"disabled\\\" [attr.readonly]=\\\"readonly\\\"\\n                (mouseleave)=\\\"onDownButtonMouseleave($event)\\\" (mousedown)=\\\"onDownButtonMousedown($event)\\\" (mouseup)=\\\"onDownButtonMouseup($event)\\\">\\n                <span class=\\\"ui-spinner-button-icon fa fa-caret-down ui-clickable\\\"></span>\\n            </button>\\n        </span>\\n    \",\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [domhandler_1.DomHandler, exports.SPINNER_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Spinner);\n    return Spinner;\n}());\nexports.Spinner = Spinner;\nvar SpinnerModule = /** @class */ (function () {\n    function SpinnerModule() {\n    }\n    SpinnerModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, inputtext_1.InputTextModule],\n            exports: [Spinner],\n            declarations: [Spinner]\n        })\n    ], SpinnerModule);\n    return SpinnerModule;\n}());\nexports.SpinnerModule = SpinnerModule;\n//# sourceMappingURL=spinner.js.map\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar Tooltip = /** @class */ (function () {\n    function Tooltip(el, domHandler, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.zone = zone;\n        this.tooltipPosition = 'right';\n        this.tooltipEvent = 'hover';\n        this.appendTo = 'body';\n        this.tooltipZIndex = 'auto';\n        this.escape = true;\n    }\n    Tooltip.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            if (_this.tooltipEvent === 'hover') {\n                _this.mouseEnterListener = _this.onMouseEnter.bind(_this);\n                _this.mouseLeaveListener = _this.onMouseLeave.bind(_this);\n                _this.clickListener = _this.onClick.bind(_this);\n                _this.el.nativeElement.addEventListener('mouseenter', _this.mouseEnterListener);\n                _this.el.nativeElement.addEventListener('mouseleave', _this.mouseLeaveListener);\n                _this.el.nativeElement.addEventListener('click', _this.clickListener);\n            }\n            else if (_this.tooltipEvent === 'focus') {\n                _this.focusListener = _this.onFocus.bind(_this);\n                _this.blurListener = _this.onBlur.bind(_this);\n                _this.el.nativeElement.addEventListener('focus', _this.focusListener);\n                _this.el.nativeElement.addEventListener('blur', _this.blurListener);\n            }\n        });\n    };\n    Tooltip.prototype.onMouseEnter = function (e) {\n        if (!this.container && !this.showTimeout) {\n            this.activate();\n        }\n    };\n    Tooltip.prototype.onMouseLeave = function (e) {\n        this.deactivate();\n    };\n    Tooltip.prototype.onFocus = function (e) {\n        this.activate();\n    };\n    Tooltip.prototype.onBlur = function (e) {\n        this.deactivate();\n    };\n    Tooltip.prototype.onClick = function (e) {\n        this.deactivate();\n    };\n    Tooltip.prototype.activate = function () {\n        var _this = this;\n        this.active = true;\n        this.clearHideTimeout();\n        if (this.showDelay)\n            this.showTimeout = setTimeout(function () { _this.show(); }, this.showDelay);\n        else\n            this.show();\n        if (this.life) {\n            var duration = this.showDelay ? this.life + this.showDelay : this.life;\n            this.hideTimeout = setTimeout(function () { _this.hide(); }, duration);\n        }\n    };\n    Tooltip.prototype.deactivate = function () {\n        var _this = this;\n        this.active = false;\n        this.clearShowTimeout();\n        if (this.hideDelay) {\n            this.clearHideTimeout(); //life timeout\n            this.hideTimeout = setTimeout(function () { _this.hide(); }, this.hideDelay);\n        }\n        else {\n            this.hide();\n        }\n    };\n    Object.defineProperty(Tooltip.prototype, \"text\", {\n        get: function () {\n            return this._text;\n        },\n        set: function (text) {\n            this._text = text;\n            if (this.active) {\n                if (this._text) {\n                    if (this.container && this.container.offsetParent)\n                        this.updateText();\n                    else\n                        this.show();\n                }\n                else {\n                    this.hide();\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Tooltip.prototype.create = function () {\n        this.container = document.createElement('div');\n        var tooltipArrow = document.createElement('div');\n        tooltipArrow.className = 'ui-tooltip-arrow';\n        this.container.appendChild(tooltipArrow);\n        this.tooltipText = document.createElement('div');\n        this.tooltipText.className = 'ui-tooltip-text ui-shadow ui-corner-all';\n        this.updateText();\n        if (this.positionStyle) {\n            this.container.style.position = this.positionStyle;\n        }\n        this.container.appendChild(this.tooltipText);\n        if (this.appendTo === 'body')\n            document.body.appendChild(this.container);\n        else if (this.appendTo === 'target')\n            this.domHandler.appendChild(this.container, this.el.nativeElement);\n        else\n            this.domHandler.appendChild(this.container, this.appendTo);\n        this.container.style.display = 'inline-block';\n    };\n    Tooltip.prototype.show = function () {\n        if (!this.text || this.disabled) {\n            return;\n        }\n        this.create();\n        this.align();\n        this.domHandler.fadeIn(this.container, 250);\n        if (this.tooltipZIndex === 'auto')\n            this.container.style.zIndex = ++domhandler_1.DomHandler.zindex;\n        else\n            this.container.style.zIndex = this.tooltipZIndex;\n        this.bindDocumentResizeListener();\n    };\n    Tooltip.prototype.hide = function () {\n        this.remove();\n    };\n    Tooltip.prototype.updateText = function () {\n        if (this.escape) {\n            this.tooltipText.innerHTML = '';\n            this.tooltipText.appendChild(document.createTextNode(this._text));\n        }\n        else {\n            this.tooltipText.innerHTML = this._text;\n        }\n    };\n    Tooltip.prototype.align = function () {\n        var position = this.tooltipPosition;\n        switch (position) {\n            case 'top':\n                this.alignTop();\n                if (this.isOutOfBounds()) {\n                    this.alignBottom();\n                }\n                break;\n            case 'bottom':\n                this.alignBottom();\n                if (this.isOutOfBounds()) {\n                    this.alignTop();\n                }\n                break;\n            case 'left':\n                this.alignLeft();\n                if (this.isOutOfBounds()) {\n                    this.alignRight();\n                    if (this.isOutOfBounds()) {\n                        this.alignTop();\n                        if (this.isOutOfBounds()) {\n                            this.alignBottom();\n                        }\n                    }\n                }\n                break;\n            case 'right':\n                this.alignRight();\n                if (this.isOutOfBounds()) {\n                    this.alignLeft();\n                    if (this.isOutOfBounds()) {\n                        this.alignTop();\n                        if (this.isOutOfBounds()) {\n                            this.alignBottom();\n                        }\n                    }\n                }\n                break;\n        }\n    };\n    Tooltip.prototype.getHostOffset = function () {\n        if (this.appendTo === 'body' || this.appendTo === 'target') {\n            var offset = this.el.nativeElement.getBoundingClientRect();\n            var targetLeft = offset.left + this.domHandler.getWindowScrollLeft();\n            var targetTop = offset.top + this.domHandler.getWindowScrollTop();\n            return { left: targetLeft, top: targetTop };\n        }\n        else {\n            return { left: 0, top: 0 };\n        }\n    };\n    Tooltip.prototype.alignRight = function () {\n        this.preAlign('right');\n        var hostOffset = this.getHostOffset();\n        var left = hostOffset.left + this.domHandler.getOuterWidth(this.el.nativeElement);\n        var top = hostOffset.top + (this.domHandler.getOuterHeight(this.el.nativeElement) - this.domHandler.getOuterHeight(this.container)) / 2;\n        this.container.style.left = left + 'px';\n        this.container.style.top = top + 'px';\n    };\n    Tooltip.prototype.alignLeft = function () {\n        this.preAlign('left');\n        var hostOffset = this.getHostOffset();\n        var left = hostOffset.left - this.domHandler.getOuterWidth(this.container);\n        var top = hostOffset.top + (this.domHandler.getOuterHeight(this.el.nativeElement) - this.domHandler.getOuterHeight(this.container)) / 2;\n        this.container.style.left = left + 'px';\n        this.container.style.top = top + 'px';\n    };\n    Tooltip.prototype.alignTop = function () {\n        this.preAlign('top');\n        var hostOffset = this.getHostOffset();\n        var left = hostOffset.left + (this.domHandler.getOuterWidth(this.el.nativeElement) - this.domHandler.getOuterWidth(this.container)) / 2;\n        var top = hostOffset.top - this.domHandler.getOuterHeight(this.container);\n        this.container.style.left = left + 'px';\n        this.container.style.top = top + 'px';\n    };\n    Tooltip.prototype.alignBottom = function () {\n        this.preAlign('bottom');\n        var hostOffset = this.getHostOffset();\n        var left = hostOffset.left + (this.domHandler.getOuterWidth(this.el.nativeElement) - this.domHandler.getOuterWidth(this.container)) / 2;\n        var top = hostOffset.top + this.domHandler.getOuterHeight(this.el.nativeElement);\n        this.container.style.left = left + 'px';\n        this.container.style.top = top + 'px';\n    };\n    Tooltip.prototype.preAlign = function (position) {\n        this.container.style.left = -999 + 'px';\n        this.container.style.top = -999 + 'px';\n        var defaultClassName = 'ui-tooltip ui-widget ui-tooltip-' + position;\n        this.container.className = this.tooltipStyleClass ? defaultClassName + ' ' + this.tooltipStyleClass : defaultClassName;\n    };\n    Tooltip.prototype.isOutOfBounds = function () {\n        var offset = this.container.getBoundingClientRect();\n        var targetTop = offset.top;\n        var targetLeft = offset.left;\n        var width = this.domHandler.getOuterWidth(this.container);\n        var height = this.domHandler.getOuterHeight(this.container);\n        var viewport = this.domHandler.getViewport();\n        return (targetLeft + width > viewport.width) || (targetLeft < 0) || (targetTop < 0) || (targetTop + height > viewport.height);\n    };\n    Tooltip.prototype.onWindowResize = function (e) {\n        this.hide();\n    };\n    Tooltip.prototype.bindDocumentResizeListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.resizeListener = _this.onWindowResize.bind(_this);\n            window.addEventListener('resize', _this.resizeListener);\n        });\n    };\n    Tooltip.prototype.unbindDocumentResizeListener = function () {\n        if (this.resizeListener) {\n            window.removeEventListener('resize', this.resizeListener);\n            this.resizeListener = null;\n        }\n    };\n    Tooltip.prototype.unbindEvents = function () {\n        if (this.tooltipEvent === 'hover') {\n            this.el.nativeElement.removeEventListener('mouseenter', this.mouseEnterListener);\n            this.el.nativeElement.removeEventListener('mouseleave', this.mouseLeaveListener);\n            this.el.nativeElement.removeEventListener('click', this.clickListener);\n        }\n        else if (this.tooltipEvent === 'focus') {\n            this.el.nativeElement.removeEventListener('focus', this.focusListener);\n            this.el.nativeElement.removeEventListener('blur', this.blurListener);\n        }\n        this.unbindDocumentResizeListener();\n    };\n    Tooltip.prototype.remove = function () {\n        if (this.container && this.container.parentElement) {\n            if (this.appendTo === 'body')\n                document.body.removeChild(this.container);\n            else if (this.appendTo === 'target')\n                this.el.nativeElement.removeChild(this.container);\n            else\n                this.domHandler.removeChild(this.container, this.appendTo);\n        }\n        this.unbindDocumentResizeListener();\n        this.clearTimeouts();\n        this.container = null;\n    };\n    Tooltip.prototype.clearShowTimeout = function () {\n        if (this.showTimeout) {\n            clearTimeout(this.showTimeout);\n            this.showTimeout = null;\n        }\n    };\n    Tooltip.prototype.clearHideTimeout = function () {\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n    };\n    Tooltip.prototype.clearTimeouts = function () {\n        this.clearShowTimeout();\n        this.clearHideTimeout();\n    };\n    Tooltip.prototype.ngOnDestroy = function () {\n        this.unbindEvents();\n        this.remove();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"tooltipPosition\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"tooltipEvent\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tooltip.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"positionStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"tooltipStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"tooltipZIndex\", void 0);\n    __decorate([\n        core_1.Input(\"tooltipDisabled\"),\n        __metadata(\"design:type\", Boolean)\n    ], Tooltip.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tooltip.prototype, \"escape\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Tooltip.prototype, \"showDelay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Tooltip.prototype, \"hideDelay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Tooltip.prototype, \"life\", void 0);\n    __decorate([\n        core_1.Input('pTooltip'),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], Tooltip.prototype, \"text\", null);\n    Tooltip = __decorate([\n        core_1.Directive({\n            selector: '[pTooltip]',\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.NgZone])\n    ], Tooltip);\n    return Tooltip;\n}());\nexports.Tooltip = Tooltip;\nvar TooltipModule = /** @class */ (function () {\n    function TooltipModule() {\n    }\n    TooltipModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Tooltip],\n            declarations: [Tooltip]\n        })\n    ], TooltipModule);\n    return TooltipModule;\n}());\nexports.TooltipModule = TooltipModule;\n//# sourceMappingURL=tooltip.js.map\n\n/***/ }),\n/* 243 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"providers\", function() { return providers; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DndModule\", function() { return DndModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AbstractComponent\", function() { return AbstractComponent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"AbstractHandleComponent\", function() { return AbstractHandleComponent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DataTransferEffect\", function() { return DataTransferEffect; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragImage\", function() { return DragImage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropConfig\", function() { return DragDropConfig; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropData\", function() { return DragDropData; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dragDropServiceFactory\", function() { return dragDropServiceFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropService\", function() { return DragDropService; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"dragDropSortableServiceFactory\", function() { return dragDropSortableServiceFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropSortableService\", function() { return DragDropSortableService; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DraggableComponent\", function() { return DraggableComponent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DraggableHandleComponent\", function() { return DraggableHandleComponent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DroppableComponent\", function() { return DroppableComponent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SortableContainer\", function() { return SortableContainer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SortableComponent\", function() { return SortableComponent; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"SortableHandleComponent\", function() { return SortableHandleComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_forms__ = __webpack_require__(17);\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n\n\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n/**\n * Check and return true if an object is type of string\n */\nfunction isString(obj) {\n    return typeof obj === \"string\";\n}\n/**\n * Check and return true if an object not undefined or null\n */\nfunction isPresent(obj) {\n    return obj !== undefined && obj !== null;\n}\n/**\n * Check and return true if an object is type of Function\n */\nfunction isFunction(obj) {\n    return typeof obj === \"function\";\n}\n/**\n * Create Image element with specified url string\n */\nfunction createImage(src) {\n    var img = new HTMLImageElement();\n    img.src = src;\n    return img;\n}\n/**\n * Call the function\n */\nfunction callFun(fun) {\n    return fun();\n}\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar DataTransferEffect = /** @class */ (function () {\n    function DataTransferEffect(name) {\n        this.name = name;\n    }\n    return DataTransferEffect;\n}());\nDataTransferEffect.COPY = new DataTransferEffect('copy');\nDataTransferEffect.LINK = new DataTransferEffect('link');\nDataTransferEffect.MOVE = new DataTransferEffect('move');\nDataTransferEffect.NONE = new DataTransferEffect('none');\nvar DragImage = /** @class */ (function () {\n    function DragImage(imageElement, x_offset, y_offset) {\n        if (x_offset === void 0) { x_offset = 0; }\n        if (y_offset === void 0) { y_offset = 0; }\n        this.imageElement = imageElement;\n        this.x_offset = x_offset;\n        this.y_offset = y_offset;\n        if (isString(this.imageElement)) {\n            // Create real image from string source\n            var imgScr = this.imageElement;\n            this.imageElement = new HTMLImageElement();\n            this.imageElement.src = imgScr;\n        }\n    }\n    return DragImage;\n}());\nvar DragDropConfig = /** @class */ (function () {\n    function DragDropConfig() {\n        this.onDragStartClass = \"dnd-drag-start\";\n        this.onDragEnterClass = \"dnd-drag-enter\";\n        this.onDragOverClass = \"dnd-drag-over\";\n        this.onSortableDragClass = \"dnd-sortable-drag\";\n        this.dragEffect = DataTransferEffect.MOVE;\n        this.dropEffect = DataTransferEffect.MOVE;\n        this.dragCursor = \"move\";\n        this.defaultCursor = \"pointer\";\n    }\n    return DragDropConfig;\n}());\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$1 = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n        r = Reflect.decorate(decorators, target, key, desc);\n    else\n        for (var i = decorators.length - 1; i >= 0; i--)\n            if (d = decorators[i])\n                r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n        return Reflect.metadata(k, v);\n};\nvar DragDropData = /** @class */ (function () {\n    function DragDropData() {\n    }\n    return DragDropData;\n}());\nfunction dragDropServiceFactory() {\n    return new DragDropService();\n}\nvar DragDropService = /** @class */ (function () {\n    function DragDropService() {\n        this.allowedDropZones = [];\n    }\n    return DragDropService;\n}());\nDragDropService = __decorate$1([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])()\n], DragDropService);\nfunction dragDropSortableServiceFactory(config) {\n    return new DragDropSortableService(config);\n}\nvar DragDropSortableService = /** @class */ (function () {\n    function DragDropSortableService(_config) {\n        this._config = _config;\n    }\n    Object.defineProperty(DragDropSortableService.prototype, \"elem\", {\n        get: function () {\n            return this._elem;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DragDropSortableService.prototype.markSortable = function (elem) {\n        if (isPresent(this._elem)) {\n            this._elem.classList.remove(this._config.onSortableDragClass);\n        }\n        if (isPresent(elem)) {\n            this._elem = elem;\n            this._elem.classList.add(this._config.onSortableDragClass);\n        }\n    };\n    return DragDropSortableService;\n}());\nDragDropSortableService = __decorate$1([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n    __metadata(\"design:paramtypes\", [DragDropConfig])\n], DragDropSortableService);\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$3 = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n        r = Reflect.decorate(decorators, target, key, desc);\n    else\n        for (var i = decorators.length - 1; i >= 0; i--)\n            if (d = decorators[i])\n                r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata$2 = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n        return Reflect.metadata(k, v);\n};\nvar AbstractComponent = /** @class */ (function () {\n    function AbstractComponent(elemRef, _dragDropService, _config, _cdr) {\n        var _this = this;\n        this._dragDropService = _dragDropService;\n        this._config = _config;\n        this._cdr = _cdr;\n        /**\n         * Whether the object is draggable. Default is true.\n         */\n        this._dragEnabled = false;\n        /**\n         * Allows drop on this element\n         */\n        this.dropEnabled = false;\n        this.dropZones = [];\n        this.cloneItem = false;\n        // Assign default cursor unless overridden\n        this._defaultCursor = _config.defaultCursor;\n        this._elem = elemRef.nativeElement;\n        this._elem.style.cursor = this._defaultCursor; // set default cursor on our element\n        //\n        // DROP events\n        //\n        this._elem.ondragenter = function (event) {\n            _this._onDragEnter(event);\n        };\n        this._elem.ondragover = function (event) {\n            _this._onDragOver(event);\n            //\n            if (event.dataTransfer != null) {\n                event.dataTransfer.dropEffect = _this._config.dropEffect.name;\n            }\n            return false;\n        };\n        this._elem.ondragleave = function (event) {\n            _this._onDragLeave(event);\n        };\n        this._elem.ondrop = function (event) {\n            _this._onDrop(event);\n        };\n        //\n        // Drag events\n        //\n        this._elem.onmousedown = function (event) {\n            _this._target = event.target;\n        };\n        this._elem.ondragstart = function (event) {\n            if (_this._dragHandle) {\n                if (!_this._dragHandle.contains(_this._target)) {\n                    event.preventDefault();\n                    return;\n                }\n            }\n            _this._onDragStart(event);\n            //\n            if (event.dataTransfer != null) {\n                event.dataTransfer.setData('text', '');\n                // Change drag effect\n                event.dataTransfer.effectAllowed = _this.effectAllowed || _this._config.dragEffect.name;\n                // Change drag image\n                if (isPresent(_this.dragImage)) {\n                    if (isString(_this.dragImage)) {\n                        event.dataTransfer.setDragImage(createImage(_this.dragImage));\n                    }\n                    else if (isFunction(_this.dragImage)) {\n                        event.dataTransfer.setDragImage(callFun(_this.dragImage));\n                    }\n                    else {\n                        var img = _this.dragImage;\n                        event.dataTransfer.setDragImage(img.imageElement, img.x_offset, img.y_offset);\n                    }\n                }\n                else if (isPresent(_this._config.dragImage)) {\n                    var dragImage = _this._config.dragImage;\n                    event.dataTransfer.setDragImage(dragImage.imageElement, dragImage.x_offset, dragImage.y_offset);\n                }\n                else if (_this.cloneItem) {\n                    _this._dragHelper = _this._elem.cloneNode(true);\n                    _this._dragHelper.classList.add('dnd-drag-item');\n                    _this._dragHelper.style.position = \"absolute\";\n                    _this._dragHelper.style.top = \"0px\";\n                    _this._dragHelper.style.left = \"-1000px\";\n                    _this._elem.parentElement.appendChild(_this._dragHelper);\n                    event.dataTransfer.setDragImage(_this._dragHelper, event.offsetX, event.offsetY);\n                }\n                // Change drag cursor\n                var cursorelem = (_this._dragHandle) ? _this._dragHandle : _this._elem;\n                if (_this._dragEnabled) {\n                    cursorelem.style.cursor = _this.effectCursor ? _this.effectCursor : _this._config.dragCursor;\n                }\n                else {\n                    cursorelem.style.cursor = _this._defaultCursor;\n                }\n            }\n        };\n        this._elem.ondragend = function (event) {\n            if (_this._elem.parentElement && _this._dragHelper) {\n                _this._elem.parentElement.removeChild(_this._dragHelper);\n            }\n            // console.log('ondragend', event.target);\n            _this._onDragEnd(event);\n            // Restore style of dragged element\n            var cursorelem = (_this._dragHandle) ? _this._dragHandle : _this._elem;\n            cursorelem.style.cursor = _this._defaultCursor;\n        };\n    }\n    Object.defineProperty(AbstractComponent.prototype, \"dragEnabled\", {\n        get: function () {\n            return this._dragEnabled;\n        },\n        set: function (enabled) {\n            this._dragEnabled = !!enabled;\n            this._elem.draggable = this._dragEnabled;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    AbstractComponent.prototype.setDragHandle = function (elem) {\n        this._dragHandle = elem;\n    };\n    /******* Change detection ******/\n    AbstractComponent.prototype.detectChanges = function () {\n        var _this = this;\n        // Programmatically run change detection to fix issue in Safari\n        setTimeout(function () {\n            if (_this._cdr && !_this._cdr.destroyed) {\n                _this._cdr.detectChanges();\n            }\n        }, 250);\n    };\n    //****** Droppable *******//\n    AbstractComponent.prototype._onDragEnter = function (event) {\n        // console.log('ondragenter._isDropAllowed', this._isDropAllowed);\n        if (this._isDropAllowed(event)) {\n            // event.preventDefault();\n            this._onDragEnterCallback(event);\n        }\n    };\n    AbstractComponent.prototype._onDragOver = function (event) {\n        // // console.log('ondragover._isDropAllowed', this._isDropAllowed);\n        if (this._isDropAllowed(event)) {\n            // The element is over the same source element - do nothing\n            if (event.preventDefault) {\n                // Necessary. Allows us to drop.\n                event.preventDefault();\n            }\n            this._onDragOverCallback(event);\n        }\n    };\n    AbstractComponent.prototype._onDragLeave = function (event) {\n        // console.log('ondragleave._isDropAllowed', this._isDropAllowed);\n        if (this._isDropAllowed(event)) {\n            // event.preventDefault();\n            this._onDragLeaveCallback(event);\n        }\n    };\n    AbstractComponent.prototype._onDrop = function (event) {\n        // console.log('ondrop._isDropAllowed', this._isDropAllowed);\n        if (this._isDropAllowed(event)) {\n            // Necessary. Allows us to drop.\n            this._preventAndStop(event);\n            this._onDropCallback(event);\n            this.detectChanges();\n        }\n    };\n    AbstractComponent.prototype._isDropAllowed = function (event) {\n        if ((this._dragDropService.isDragged || (event.dataTransfer && event.dataTransfer.files)) && this.dropEnabled) {\n            // First, if `allowDrop` is set, call it to determine whether the\n            // dragged element can be dropped here.\n            if (this.allowDrop) {\n                return this.allowDrop(this._dragDropService.dragData);\n            }\n            // Otherwise, use dropZones if they are set.\n            if (this.dropZones.length === 0 && this._dragDropService.allowedDropZones.length === 0) {\n                return true;\n            }\n            for (var i = 0; i < this._dragDropService.allowedDropZones.length; i++) {\n                var dragZone = this._dragDropService.allowedDropZones[i];\n                if (this.dropZones.indexOf(dragZone) !== -1) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    AbstractComponent.prototype._preventAndStop = function (event) {\n        if (event.preventDefault) {\n            event.preventDefault();\n        }\n        if (event.stopPropagation) {\n            event.stopPropagation();\n        }\n    };\n    //*********** Draggable **********//\n    AbstractComponent.prototype._onDragStart = function (event) {\n        //console.log('ondragstart.dragEnabled', this._dragEnabled);\n        if (this._dragEnabled) {\n            this._dragDropService.allowedDropZones = this.dropZones;\n            // console.log('ondragstart.allowedDropZones', this._dragDropService.allowedDropZones);\n            this._onDragStartCallback(event);\n        }\n    };\n    AbstractComponent.prototype._onDragEnd = function (event) {\n        this._dragDropService.allowedDropZones = [];\n        // console.log('ondragend.allowedDropZones', this._dragDropService.allowedDropZones);\n        this._onDragEndCallback(event);\n    };\n    //**** Drop Callbacks ****//\n    AbstractComponent.prototype._onDragEnterCallback = function (event) { };\n    AbstractComponent.prototype._onDragOverCallback = function (event) { };\n    AbstractComponent.prototype._onDragLeaveCallback = function (event) { };\n    AbstractComponent.prototype._onDropCallback = function (event) { };\n    //**** Drag Callbacks ****//\n    AbstractComponent.prototype._onDragStartCallback = function (event) { };\n    AbstractComponent.prototype._onDragEndCallback = function (event) { };\n    return AbstractComponent;\n}());\nAbstractComponent = __decorate$3([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"])(),\n    __metadata$2(\"design:paramtypes\", [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], DragDropService, DragDropConfig,\n        __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]])\n], AbstractComponent);\nvar AbstractHandleComponent = /** @class */ (function () {\n    function AbstractHandleComponent(elemRef, _dragDropService, _config, _Component, _cdr) {\n        this._dragDropService = _dragDropService;\n        this._config = _config;\n        this._Component = _Component;\n        this._cdr = _cdr;\n        this._elem = elemRef.nativeElement;\n        this._Component.setDragHandle(this._elem);\n    }\n    return AbstractHandleComponent;\n}());\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$2 = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n        r = Reflect.decorate(decorators, target, key, desc);\n    else\n        for (var i = decorators.length - 1; i >= 0; i--)\n            if (d = decorators[i])\n                r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata$1 = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n        return Reflect.metadata(k, v);\n};\nvar DraggableComponent = /** @class */ (function (_super) {\n    __extends(DraggableComponent, _super);\n    function DraggableComponent(elemRef, dragDropService, config, cdr) {\n        var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;\n        /**\n         * Callback function called when the drag actions happened.\n         */\n        _this.onDragStart = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.onDragEnd = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        /**\n         * Callback function called when the drag action ends with a valid drop action.\n         * It is activated after the on-drop-success callback\n         */\n        _this.onDragSuccessCallback = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this._defaultCursor = _this._elem.style.cursor;\n        _this.dragEnabled = true;\n        return _this;\n    }\n    Object.defineProperty(DraggableComponent.prototype, \"draggable\", {\n        set: function (value) {\n            this.dragEnabled = !!value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DraggableComponent.prototype, \"dropzones\", {\n        set: function (value) {\n            this.dropZones = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DraggableComponent.prototype, \"effectallowed\", {\n        /**\n         * Drag allowed effect\n         */\n        set: function (value) {\n            this.effectAllowed = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DraggableComponent.prototype, \"effectcursor\", {\n        /**\n         * Drag effect cursor\n         */\n        set: function (value) {\n            this.effectCursor = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DraggableComponent.prototype._onDragStartCallback = function (event) {\n        this._dragDropService.isDragged = true;\n        this._dragDropService.dragData = this.dragData;\n        this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;\n        this._elem.classList.add(this._config.onDragStartClass);\n        //\n        this.onDragStart.emit({ dragData: this.dragData, mouseEvent: event });\n    };\n    DraggableComponent.prototype._onDragEndCallback = function (event) {\n        this._dragDropService.isDragged = false;\n        this._dragDropService.dragData = null;\n        this._dragDropService.onDragSuccessCallback = null;\n        this._elem.classList.remove(this._config.onDragStartClass);\n        //\n        this.onDragEnd.emit({ dragData: this.dragData, mouseEvent: event });\n    };\n    return DraggableComponent;\n}(AbstractComponent));\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"dragEnabled\"),\n    __metadata$1(\"design:type\", Boolean),\n    __metadata$1(\"design:paramtypes\", [Boolean])\n], DraggableComponent.prototype, \"draggable\", null);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(),\n    __metadata$1(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], DraggableComponent.prototype, \"onDragStart\", void 0);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(),\n    __metadata$1(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], DraggableComponent.prototype, \"onDragEnd\", void 0);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n    __metadata$1(\"design:type\", Object)\n], DraggableComponent.prototype, \"dragData\", void 0);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(\"onDragSuccess\"),\n    __metadata$1(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], DraggableComponent.prototype, \"onDragSuccessCallback\", void 0);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"dropZones\"),\n    __metadata$1(\"design:type\", Array),\n    __metadata$1(\"design:paramtypes\", [Array])\n], DraggableComponent.prototype, \"dropzones\", null);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"effectAllowed\"),\n    __metadata$1(\"design:type\", String),\n    __metadata$1(\"design:paramtypes\", [String])\n], DraggableComponent.prototype, \"effectallowed\", null);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"effectCursor\"),\n    __metadata$1(\"design:type\", String),\n    __metadata$1(\"design:paramtypes\", [String])\n], DraggableComponent.prototype, \"effectcursor\", null);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n    __metadata$1(\"design:type\", Object)\n], DraggableComponent.prototype, \"dragImage\", void 0);\n__decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n    __metadata$1(\"design:type\", Boolean)\n], DraggableComponent.prototype, \"cloneItem\", void 0);\nDraggableComponent = __decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"])({ selector: '[dnd-draggable]' }),\n    __metadata$1(\"design:paramtypes\", [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], DragDropService, DragDropConfig,\n        __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]])\n], DraggableComponent);\nvar DraggableHandleComponent = /** @class */ (function (_super) {\n    __extends(DraggableHandleComponent, _super);\n    function DraggableHandleComponent(elemRef, dragDropService, config, _Component, cdr) {\n        return _super.call(this, elemRef, dragDropService, config, _Component, cdr) || this;\n    }\n    return DraggableHandleComponent;\n}(AbstractHandleComponent));\nDraggableHandleComponent = __decorate$2([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"])({ selector: '[dnd-draggable-handle]' }),\n    __metadata$1(\"design:paramtypes\", [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], DragDropService, DragDropConfig, DraggableComponent,\n        __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]])\n], DraggableHandleComponent);\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$4 = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n        r = Reflect.decorate(decorators, target, key, desc);\n    else\n        for (var i = decorators.length - 1; i >= 0; i--)\n            if (d = decorators[i])\n                r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata$3 = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n        return Reflect.metadata(k, v);\n};\nvar DroppableComponent = /** @class */ (function (_super) {\n    __extends(DroppableComponent, _super);\n    function DroppableComponent(elemRef, dragDropService, config, cdr) {\n        var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;\n        /**\n         * Callback function called when the drop action completes correctly.\n         * It is activated before the on-drag-success callback.\n         */\n        _this.onDropSuccess = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.onDragEnter = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.onDragOver = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.onDragLeave = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.dropEnabled = true;\n        return _this;\n    }\n    Object.defineProperty(DroppableComponent.prototype, \"droppable\", {\n        set: function (value) {\n            this.dropEnabled = !!value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DroppableComponent.prototype, \"allowdrop\", {\n        set: function (value) {\n            this.allowDrop = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DroppableComponent.prototype, \"dropzones\", {\n        set: function (value) {\n            this.dropZones = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DroppableComponent.prototype, \"effectallowed\", {\n        /**\n         * Drag allowed effect\n         */\n        set: function (value) {\n            this.effectAllowed = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DroppableComponent.prototype, \"effectcursor\", {\n        /**\n         * Drag effect cursor\n         */\n        set: function (value) {\n            this.effectCursor = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DroppableComponent.prototype._onDragEnterCallback = function (event) {\n        if (this._dragDropService.isDragged) {\n            this._elem.classList.add(this._config.onDragEnterClass);\n            this.onDragEnter.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n        }\n    };\n    DroppableComponent.prototype._onDragOverCallback = function (event) {\n        if (this._dragDropService.isDragged) {\n            this._elem.classList.add(this._config.onDragOverClass);\n            this.onDragOver.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n        }\n    };\n    ;\n    DroppableComponent.prototype._onDragLeaveCallback = function (event) {\n        if (this._dragDropService.isDragged) {\n            this._elem.classList.remove(this._config.onDragOverClass);\n            this._elem.classList.remove(this._config.onDragEnterClass);\n            this.onDragLeave.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n        }\n    };\n    ;\n    DroppableComponent.prototype._onDropCallback = function (event) {\n        var dataTransfer = event.dataTransfer;\n        if (this._dragDropService.isDragged || (dataTransfer && dataTransfer.files)) {\n            this.onDropSuccess.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n            if (this._dragDropService.onDragSuccessCallback) {\n                this._dragDropService.onDragSuccessCallback.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });\n            }\n            this._elem.classList.remove(this._config.onDragOverClass);\n            this._elem.classList.remove(this._config.onDragEnterClass);\n        }\n    };\n    return DroppableComponent;\n}(AbstractComponent));\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"dropEnabled\"),\n    __metadata$3(\"design:type\", Boolean),\n    __metadata$3(\"design:paramtypes\", [Boolean])\n], DroppableComponent.prototype, \"droppable\", null);\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(),\n    __metadata$3(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], DroppableComponent.prototype, \"onDropSuccess\", void 0);\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(),\n    __metadata$3(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], DroppableComponent.prototype, \"onDragEnter\", void 0);\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(),\n    __metadata$3(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], DroppableComponent.prototype, \"onDragOver\", void 0);\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(),\n    __metadata$3(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], DroppableComponent.prototype, \"onDragLeave\", void 0);\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"allowDrop\"),\n    __metadata$3(\"design:type\", Function),\n    __metadata$3(\"design:paramtypes\", [Function])\n], DroppableComponent.prototype, \"allowdrop\", null);\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"dropZones\"),\n    __metadata$3(\"design:type\", Array),\n    __metadata$3(\"design:paramtypes\", [Array])\n], DroppableComponent.prototype, \"dropzones\", null);\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"effectAllowed\"),\n    __metadata$3(\"design:type\", String),\n    __metadata$3(\"design:paramtypes\", [String])\n], DroppableComponent.prototype, \"effectallowed\", null);\n__decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"effectCursor\"),\n    __metadata$3(\"design:type\", String),\n    __metadata$3(\"design:paramtypes\", [String])\n], DroppableComponent.prototype, \"effectcursor\", null);\nDroppableComponent = __decorate$4([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"])({ selector: '[dnd-droppable]' }),\n    __metadata$3(\"design:paramtypes\", [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], DragDropService, DragDropConfig,\n        __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]])\n], DroppableComponent);\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate$5 = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n        r = Reflect.decorate(decorators, target, key, desc);\n    else\n        for (var i = decorators.length - 1; i >= 0; i--)\n            if (d = decorators[i])\n                r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata$4 = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\")\n        return Reflect.metadata(k, v);\n};\nvar SortableContainer = /** @class */ (function (_super) {\n    __extends(SortableContainer, _super);\n    function SortableContainer(elemRef, dragDropService, config, cdr, _sortableDataService) {\n        var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;\n        _this._sortableDataService = _sortableDataService;\n        _this._sortableData = [];\n        _this.dragEnabled = false;\n        return _this;\n    }\n    Object.defineProperty(SortableContainer.prototype, \"draggable\", {\n        set: function (value) {\n            this.dragEnabled = !!value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(SortableContainer.prototype, \"sortableData\", {\n        get: function () {\n            return this._sortableData;\n        },\n        set: function (sortableData) {\n            this._sortableData = sortableData;\n            if (sortableData instanceof __WEBPACK_IMPORTED_MODULE_1__angular_forms__[\"FormArray\"]) {\n                this.sortableHandler = new SortableFormArrayHandler();\n            }\n            else {\n                this.sortableHandler = new SortableArrayHandler();\n            }\n            //\n            this.dropEnabled = !!this._sortableData;\n            // console.log(\"collection is changed, drop enabled: \" + this.dropEnabled);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(SortableContainer.prototype, \"dropzones\", {\n        set: function (value) {\n            this.dropZones = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    SortableContainer.prototype._onDragEnterCallback = function (event) {\n        if (this._sortableDataService.isDragged) {\n            var item = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);\n            // Check does element exist in sortableData of this Container\n            if (this.indexOf(item) === -1) {\n                // Let's add it\n                // console.log('Container._onDragEnterCallback. drag node [' + this._sortableDataService.index.toString() + '] over parent node');\n                // Remove item from previouse list\n                this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);\n                if (this._sortableDataService.sortableContainer._sortableData.length === 0) {\n                    this._sortableDataService.sortableContainer.dropEnabled = true;\n                }\n                // Add item to new list\n                this.insertItemAt(item, 0);\n                this._sortableDataService.sortableContainer = this;\n                this._sortableDataService.index = 0;\n            }\n            // Refresh changes in properties of container component\n            this.detectChanges();\n        }\n    };\n    SortableContainer.prototype.getItemAt = function (index) {\n        return this.sortableHandler.getItemAt(this._sortableData, index);\n    };\n    SortableContainer.prototype.indexOf = function (item) {\n        return this.sortableHandler.indexOf(this._sortableData, item);\n    };\n    SortableContainer.prototype.removeItemAt = function (index) {\n        this.sortableHandler.removeItemAt(this._sortableData, index);\n    };\n    SortableContainer.prototype.insertItemAt = function (item, index) {\n        this.sortableHandler.insertItemAt(this._sortableData, item, index);\n    };\n    return SortableContainer;\n}(AbstractComponent));\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"dragEnabled\"),\n    __metadata$4(\"design:type\", Boolean),\n    __metadata$4(\"design:paramtypes\", [Boolean])\n], SortableContainer.prototype, \"draggable\", null);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n    __metadata$4(\"design:type\", Object),\n    __metadata$4(\"design:paramtypes\", [Object])\n], SortableContainer.prototype, \"sortableData\", null);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"dropZones\"),\n    __metadata$4(\"design:type\", Array),\n    __metadata$4(\"design:paramtypes\", [Array])\n], SortableContainer.prototype, \"dropzones\", null);\nSortableContainer = __decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"])({ selector: '[dnd-sortable-container]' }),\n    __metadata$4(\"design:paramtypes\", [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], DragDropService, DragDropConfig, __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"],\n        DragDropSortableService])\n], SortableContainer);\nvar SortableArrayHandler = /** @class */ (function () {\n    function SortableArrayHandler() {\n    }\n    SortableArrayHandler.prototype.getItemAt = function (sortableData, index) {\n        return sortableData[index];\n    };\n    SortableArrayHandler.prototype.indexOf = function (sortableData, item) {\n        return sortableData.indexOf(item);\n    };\n    SortableArrayHandler.prototype.removeItemAt = function (sortableData, index) {\n        sortableData.splice(index, 1);\n    };\n    SortableArrayHandler.prototype.insertItemAt = function (sortableData, item, index) {\n        sortableData.splice(index, 0, item);\n    };\n    return SortableArrayHandler;\n}());\nvar SortableFormArrayHandler = /** @class */ (function () {\n    function SortableFormArrayHandler() {\n    }\n    SortableFormArrayHandler.prototype.getItemAt = function (sortableData, index) {\n        return sortableData.at(index);\n    };\n    SortableFormArrayHandler.prototype.indexOf = function (sortableData, item) {\n        return sortableData.controls.indexOf(item);\n    };\n    SortableFormArrayHandler.prototype.removeItemAt = function (sortableData, index) {\n        sortableData.removeAt(index);\n    };\n    SortableFormArrayHandler.prototype.insertItemAt = function (sortableData, item, index) {\n        sortableData.insert(index, item);\n    };\n    return SortableFormArrayHandler;\n}());\nvar SortableComponent = /** @class */ (function (_super) {\n    __extends(SortableComponent, _super);\n    function SortableComponent(elemRef, dragDropService, config, _sortableContainer, _sortableDataService, cdr) {\n        var _this = _super.call(this, elemRef, dragDropService, config, cdr) || this;\n        _this._sortableContainer = _sortableContainer;\n        _this._sortableDataService = _sortableDataService;\n        /**\n         * Callback function called when the drag action ends with a valid drop action.\n         * It is activated after the on-drop-success callback\n         */\n        _this.onDragSuccessCallback = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.onDragStartCallback = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.onDragOverCallback = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.onDragEndCallback = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.onDropSuccessCallback = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        _this.dropZones = _this._sortableContainer.dropZones;\n        _this.dragEnabled = true;\n        _this.dropEnabled = true;\n        return _this;\n    }\n    Object.defineProperty(SortableComponent.prototype, \"draggable\", {\n        set: function (value) {\n            this.dragEnabled = !!value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(SortableComponent.prototype, \"droppable\", {\n        set: function (value) {\n            this.dropEnabled = !!value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(SortableComponent.prototype, \"effectallowed\", {\n        /**\n         * Drag allowed effect\n         */\n        set: function (value) {\n            this.effectAllowed = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(SortableComponent.prototype, \"effectcursor\", {\n        /**\n         * Drag effect cursor\n         */\n        set: function (value) {\n            this.effectCursor = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    SortableComponent.prototype._onDragStartCallback = function (event) {\n        // console.log('_onDragStartCallback. dragging elem with index ' + this.index);\n        this._sortableDataService.isDragged = true;\n        this._sortableDataService.sortableContainer = this._sortableContainer;\n        this._sortableDataService.index = this.index;\n        this._sortableDataService.markSortable(this._elem);\n        // Add dragData\n        this._dragDropService.isDragged = true;\n        this._dragDropService.dragData = this.dragData;\n        this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;\n        //\n        this.onDragStartCallback.emit(this._dragDropService.dragData);\n    };\n    SortableComponent.prototype._onDragOverCallback = function (event) {\n        if (this._sortableDataService.isDragged && this._elem !== this._sortableDataService.elem) {\n            // console.log('_onDragOverCallback. dragging elem with index ' + this.index);\n            this._sortableDataService.sortableContainer = this._sortableContainer;\n            this._sortableDataService.index = this.index;\n            this._sortableDataService.markSortable(this._elem);\n            this.onDragOverCallback.emit(this._dragDropService.dragData);\n        }\n    };\n    SortableComponent.prototype._onDragEndCallback = function (event) {\n        // console.log('_onDragEndCallback. end dragging elem with index ' + this.index);\n        this._sortableDataService.isDragged = false;\n        this._sortableDataService.sortableContainer = null;\n        this._sortableDataService.index = null;\n        this._sortableDataService.markSortable(null);\n        // Add dragGata\n        this._dragDropService.isDragged = false;\n        this._dragDropService.dragData = null;\n        this._dragDropService.onDragSuccessCallback = null;\n        //\n        this.onDragEndCallback.emit(this._dragDropService.dragData);\n    };\n    SortableComponent.prototype._onDragEnterCallback = function (event) {\n        if (this._sortableDataService.isDragged) {\n            this._sortableDataService.markSortable(this._elem);\n            if ((this.index !== this._sortableDataService.index) ||\n                (this._sortableDataService.sortableContainer.sortableData !== this._sortableContainer.sortableData)) {\n                // console.log('Component._onDragEnterCallback. drag node [' + this.index + '] over node [' + this._sortableDataService.index + ']');\n                // Get item\n                var item = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);\n                // Remove item from previouse list\n                this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);\n                if (this._sortableDataService.sortableContainer.sortableData.length === 0) {\n                    this._sortableDataService.sortableContainer.dropEnabled = true;\n                }\n                // Add item to new list\n                this._sortableContainer.insertItemAt(item, this.index);\n                if (this._sortableContainer.dropEnabled) {\n                    this._sortableContainer.dropEnabled = false;\n                }\n                this._sortableDataService.sortableContainer = this._sortableContainer;\n                this._sortableDataService.index = this.index;\n                this.detectChanges();\n            }\n        }\n    };\n    SortableComponent.prototype._onDropCallback = function (event) {\n        if (this._sortableDataService.isDragged) {\n            // console.log('onDropCallback.onDropSuccessCallback.dragData', this._dragDropService.dragData);\n            this.onDropSuccessCallback.emit(this._dragDropService.dragData);\n            if (this._dragDropService.onDragSuccessCallback) {\n                // console.log('onDropCallback.onDragSuccessCallback.dragData', this._dragDropService.dragData);\n                this._dragDropService.onDragSuccessCallback.emit(this._dragDropService.dragData);\n            }\n            // Refresh changes in properties of container component\n            this._sortableContainer.detectChanges();\n        }\n    };\n    return SortableComponent;\n}(AbstractComponent));\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])('sortableIndex'),\n    __metadata$4(\"design:type\", Number)\n], SortableComponent.prototype, \"index\", void 0);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"dragEnabled\"),\n    __metadata$4(\"design:type\", Boolean),\n    __metadata$4(\"design:paramtypes\", [Boolean])\n], SortableComponent.prototype, \"draggable\", null);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"dropEnabled\"),\n    __metadata$4(\"design:type\", Boolean),\n    __metadata$4(\"design:paramtypes\", [Boolean])\n], SortableComponent.prototype, \"droppable\", null);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(),\n    __metadata$4(\"design:type\", Object)\n], SortableComponent.prototype, \"dragData\", void 0);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"effectAllowed\"),\n    __metadata$4(\"design:type\", String),\n    __metadata$4(\"design:paramtypes\", [String])\n], SortableComponent.prototype, \"effectallowed\", null);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"])(\"effectCursor\"),\n    __metadata$4(\"design:type\", String),\n    __metadata$4(\"design:paramtypes\", [String])\n], SortableComponent.prototype, \"effectcursor\", null);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(\"onDragSuccess\"),\n    __metadata$4(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], SortableComponent.prototype, \"onDragSuccessCallback\", void 0);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(\"onDragStart\"),\n    __metadata$4(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], SortableComponent.prototype, \"onDragStartCallback\", void 0);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(\"onDragOver\"),\n    __metadata$4(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], SortableComponent.prototype, \"onDragOverCallback\", void 0);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(\"onDragEnd\"),\n    __metadata$4(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], SortableComponent.prototype, \"onDragEndCallback\", void 0);\n__decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"])(\"onDropSuccess\"),\n    __metadata$4(\"design:type\", __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"])\n], SortableComponent.prototype, \"onDropSuccessCallback\", void 0);\nSortableComponent = __decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"])({ selector: '[dnd-sortable]' }),\n    __metadata$4(\"design:paramtypes\", [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], DragDropService, DragDropConfig,\n        SortableContainer,\n        DragDropSortableService,\n        __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]])\n], SortableComponent);\nvar SortableHandleComponent = /** @class */ (function (_super) {\n    __extends(SortableHandleComponent, _super);\n    function SortableHandleComponent(elemRef, dragDropService, config, _Component, cdr) {\n        return _super.call(this, elemRef, dragDropService, config, _Component, cdr) || this;\n    }\n    return SortableHandleComponent;\n}(AbstractHandleComponent));\nSortableHandleComponent = __decorate$5([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"])({ selector: '[dnd-sortable-handle]' }),\n    __metadata$4(\"design:paramtypes\", [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], DragDropService, DragDropConfig, SortableComponent,\n        __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"]])\n], SortableHandleComponent);\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n        r = Reflect.decorate(decorators, target, key, desc);\n    else\n        for (var i = decorators.length - 1; i >= 0; i--)\n            if (d = decorators[i])\n                r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar providers = [\n    DragDropConfig,\n    { provide: DragDropService, useFactory: dragDropServiceFactory },\n    { provide: DragDropSortableService, useFactory: dragDropSortableServiceFactory, deps: [DragDropConfig] }\n];\nvar DndModule = DndModule_1 = /** @class */ (function () {\n    function DndModule() {\n    }\n    DndModule.forRoot = function () {\n        return {\n            ngModule: DndModule_1,\n            providers: providers\n        };\n    };\n    return DndModule;\n}());\nDndModule = DndModule_1 = __decorate([\n    Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"])({\n        declarations: [DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableContainer, SortableComponent, SortableHandleComponent],\n        exports: [DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableContainer, SortableComponent, SortableHandleComponent],\n    })\n], DndModule);\nvar DndModule_1;\n// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n/**\n * Generated bundle index. Do not edit.\n */\n\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nexports.RECAPTCHA_SETTINGS = new core_1.InjectionToken('recaptcha-settings');\n\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar common_1 = __webpack_require__(3);\nvar core_1 = __webpack_require__(0);\nvar rxjs_1 = __webpack_require__(72);\nvar recaptcha_loader_service_1 = __webpack_require__(80);\nexports.RECAPTCHA_V3_SITE_KEY = new core_1.InjectionToken('recaptcha-v3-site-key');\n/**\n * The main service for working with reCAPTCHA v3 APIs.\n *\n * Use the `execute` method for executing a single action, and\n * `onExecute` observable for listening to all actions at once.\n */\nvar ReCaptchaV3Service = /** @class */ (function () {\n    function ReCaptchaV3Service(zone, siteKey, \n    // tslint:disable-next-line:no-any\n    platformId, baseUrl, nonce) {\n        var _this = this;\n        /** @internal */\n        this.onLoadComplete = function (grecaptcha) {\n            _this.grecaptcha = grecaptcha;\n            if (_this.actionBacklog && _this.actionBacklog.length > 0) {\n                _this.actionBacklog.forEach(function (_a) {\n                    var action = _a[0], subject = _a[1];\n                    return _this.executeActionWithSubject(action, subject);\n                });\n                _this.actionBacklog = undefined;\n            }\n        };\n        this.zone = zone;\n        this.isBrowser = common_1.isPlatformBrowser(platformId);\n        this.siteKey = siteKey;\n        this.nonce = nonce;\n        this.baseUrl = baseUrl;\n        this.init();\n    }\n    Object.defineProperty(ReCaptchaV3Service.prototype, \"onExecute\", {\n        get: function () {\n            if (!this.onExecuteSubject) {\n                this.onExecuteSubject = new rxjs_1.Subject();\n                this.onExecuteObservable = this.onExecuteSubject.asObservable();\n            }\n            return this.onExecuteObservable;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Executes the provided `action` with reCAPTCHA v3 API.\n     * Use the emitted token value for verification purposes on the backend.\n     *\n     * For more information about reCAPTCHA v3 actions and tokens refer to the official documentation at\n     * https://developers.google.com/recaptcha/docs/v3.\n     *\n     * @param {string} action the action to execute\n     * @returns {Observable<string>} an `Observable` that will emit the reCAPTCHA v3 string `token` value whenever ready.\n     * The returned `Observable` completes immediately after emitting a value.\n     */\n    /**\n       * Executes the provided `action` with reCAPTCHA v3 API.\n       * Use the emitted token value for verification purposes on the backend.\n       *\n       * For more information about reCAPTCHA v3 actions and tokens refer to the official documentation at\n       * https://developers.google.com/recaptcha/docs/v3.\n       *\n       * @param {string} action the action to execute\n       * @returns {Observable<string>} an `Observable` that will emit the reCAPTCHA v3 string `token` value whenever ready.\n       * The returned `Observable` completes immediately after emitting a value.\n       */\n    ReCaptchaV3Service.prototype.execute = /**\n       * Executes the provided `action` with reCAPTCHA v3 API.\n       * Use the emitted token value for verification purposes on the backend.\n       *\n       * For more information about reCAPTCHA v3 actions and tokens refer to the official documentation at\n       * https://developers.google.com/recaptcha/docs/v3.\n       *\n       * @param {string} action the action to execute\n       * @returns {Observable<string>} an `Observable` that will emit the reCAPTCHA v3 string `token` value whenever ready.\n       * The returned `Observable` completes immediately after emitting a value.\n       */\n    function (action) {\n        var subject = new rxjs_1.Subject();\n        if (this.isBrowser) {\n            if (!this.grecaptcha) {\n                // todo: add to array of later executions\n                if (!this.actionBacklog) {\n                    this.actionBacklog = [];\n                }\n                this.actionBacklog.push([action, subject]);\n            }\n            else {\n                this.executeActionWithSubject(action, subject);\n            }\n        }\n        return subject.asObservable();\n    };\n    /** @internal */\n    /** @internal */\n    ReCaptchaV3Service.prototype.executeActionWithSubject = /** @internal */\n    function (action, subject) {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            // tslint:disable-next-line:no-any\n            // tslint:disable-next-line:no-any\n            _this.grecaptcha.execute(_this.siteKey, { action: action }).then(function (token) {\n                _this.zone.run(function () {\n                    subject.next(token);\n                    subject.complete();\n                    if (_this.onExecuteSubject) {\n                        _this.onExecuteSubject.next({ action: action, token: token });\n                    }\n                });\n            });\n        });\n    };\n    /** @internal */\n    /** @internal */\n    ReCaptchaV3Service.prototype.init = /** @internal */\n    function () {\n        if (this.isBrowser) {\n            if ('grecaptcha' in window) {\n                this.grecaptcha = grecaptcha;\n            }\n            else {\n                recaptcha_loader_service_1.loadScript(this.siteKey, this.onLoadComplete, '', this.baseUrl, this.nonce);\n            }\n        }\n    };\n    ReCaptchaV3Service.decorators = [\n        { type: core_1.Injectable },\n    ];\n    /** @nocollapse */\n    ReCaptchaV3Service.ctorParameters = function () { return [\n        { type: core_1.NgZone, },\n        { type: undefined, decorators: [{ type: core_1.Inject, args: [exports.RECAPTCHA_V3_SITE_KEY,] },] },\n        { type: undefined, decorators: [{ type: core_1.Inject, args: [core_1.PLATFORM_ID,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [recaptcha_loader_service_1.RECAPTCHA_BASE_URL,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [recaptcha_loader_service_1.RECAPTCHA_NONCE,] },] },\n    ]; };\n    return ReCaptchaV3Service;\n}());\nexports.ReCaptchaV3Service = ReCaptchaV3Service;\n\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.NotificationService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NotificationService = exports.NotificationService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function NotificationService(http) {\n        _classCallCheck(this, NotificationService);\n\n        this.http = http;\n    }\n\n    _createClass(NotificationService, [{\n        key: 'getMyVersionControl',\n        value: function getMyVersionControl() {\n            var token = localStorage.getItem('token');\n            var params = {\n                module: \"notifications\",\n                action: \"myversioncontrol\",\n                token: token\n            };\n            return this.http.post(params).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return NotificationService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], NotificationService);\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ConstantService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ConstantService = exports.ConstantService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n  function ConstantService(http) {\n    _classCallCheck(this, ConstantService);\n\n    this.http = http;\n  }\n\n  _createClass(ConstantService, [{\n    key: \"getConstants\",\n    value: function getConstants() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"constant\",\n        action: \"get\",\n        token: token\n      };\n      return this.http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }]);\n\n  return ConstantService;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_http.HttpService], ConstantService);\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.AppService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar AppService = exports.AppService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n    function AppService(http) {\n        _classCallCheck(this, AppService);\n\n        this.http = http;\n    }\n\n    _createClass(AppService, [{\n        key: 'getBurndown',\n        value: function getBurndown(data) {\n            var token = localStorage.getItem('token');\n            data.token = token;\n\n            return this.http.post(data).map(function (res) {\n                return res;\n            });\n        }\n    }]);\n\n    return AppService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], AppService);\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.WhiteboardService = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _http = __webpack_require__(16);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar WhiteboardService = exports.WhiteboardService = (_dec = (0, _core.Injectable)(), _dec(_class = function () {\n  function WhiteboardService(httpService) {\n    _classCallCheck(this, WhiteboardService);\n\n    this._http = httpService;\n  }\n\n  _createClass(WhiteboardService, [{\n    key: 'getMessage',\n    value: function getMessage() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"whiteboard\",\n        action: \"message\",\n        token: token\n      };\n      return this._http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'getGroups',\n    value: function getGroups() {\n      var token = localStorage.getItem(\"token\");\n      var params = {\n        module: \"whiteboard\",\n        action: \"groups\",\n        token: token\n      };\n      return this._http.post(params).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'putMessage',\n    value: function putMessage(messages) {\n      var token = localStorage.getItem('token');\n      messages.module = \"whiteboard\";\n      messages.action = \"insert\";\n      messages.token = token;\n      return this._http.post(messages).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'putComments',\n    value: function putComments(comments) {\n      var token = localStorage.getItem('token');\n      comments.module = \"whiteboard\";\n      comments.action = \"insertcomments\";\n      comments.token = token;\n      return this._http.post(comments).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'putLikes',\n    value: function putLikes(newlike) {\n      var token = localStorage.getItem('token');\n      newlike.module = \"whiteboard\";\n      newlike.action = \"insertlikes\";\n      newlike.token = token;\n      return this._http.post(newlike).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'putLove',\n    value: function putLove(newlove) {\n      var token = localStorage.getItem('token');\n      newlove.module = \"whiteboard\";\n      newlove.action = \"insertlove\";\n      newlove.token = token;\n      return this._http.post(newlove).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'putAngry',\n    value: function putAngry(newangry) {\n      var token = localStorage.getItem('token');\n      newangry.module = \"whiteboard\";\n      newangry.action = \"insertangry\";\n      newangry.token = token;\n      return this._http.post(newangry).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'putFun',\n    value: function putFun(newfun) {\n      var token = localStorage.getItem('token');\n      newfun.module = \"whiteboard\";\n      newfun.action = \"insertfun\";\n      newfun.token = token;\n      return this._http.post(newfun).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'putWow',\n    value: function putWow(newfun) {\n      var token = localStorage.getItem('token');\n      newfun.module = \"whiteboard\";\n      newfun.action = \"insertwow\";\n      newfun.token = token;\n      return this._http.post(newfun).map(function (res) {\n        return res;\n      });\n    }\n  }, {\n    key: 'deletePost',\n    value: function deletePost(deletepost) {\n      var token = localStorage.getItem('token');\n      deletepost.module = \"whiteboard\";\n      deletepost.action = \"deletepost\";\n      deletepost.token = token;\n      return this._http.post(deletepost).map(function (res) {\n        return res;\n      });\n    }\n  }]);\n\n  return WhiteboardService;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_http.HttpService], WhiteboardService);\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LoginComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _login = __webpack_require__(43);\n\nvar _loginTemplate = __webpack_require__(805);\n\nvar _loginTemplate2 = _interopRequireDefault(_loginTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LoginComponent = exports.LoginComponent = (_dec = (0, _core.Component)({\n  selector: \"login\",\n  template: _loginTemplate2.default,\n  styles: [\"input[type=text] { width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border: none; border-bottom: 2px solid #0fafde; text-align: center; }\", \"input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border: none; border-bottom: 2px solid #0fafde; text-align: center; }\", \"::-webkit-input-placeholder { color:#0fafde; font-size:20px; top:5px; }\", \"::-moz-placeholder { color:#0fafde; font-size:20px; top:5px; }\", \":-ms-input-placeholder { color:#0fafde; font-size:20px; top:5px; }\", \"input:-moz-placeholder { color:#0fafde; font-size:20px; top:5px; }\"]\n}), _dec(_class = function () {\n  function LoginComponent(title, meta, loginService, route, toastr) {\n    var _this = this;\n\n    _classCallCheck(this, LoginComponent);\n\n    this._title = title;\n    this._meta = meta;\n    this._route = route;\n    this._login = loginService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.loading = false;\n    this.captcha = 0;\n    this.sitkey = 0;\n    this.forgotPassword = window.location.href.split(\"/login\")[0] + \"/passwordrecovery\";\n    this.mainLogo = \"mainlogoW.svg\";\n    this.myLoginStyle = {\n      background: \"url('img/loginback.jpg') no-repeat fixed center / cover\",\n      height: \"100%\",\n      width: \"100%\",\n      \"overflow-y\": \"hidden\",\n      \"-webkit-background-size\": \"cover\",\n      \"-moz-background-size\": \"cover\",\n      \"-o-background-size\": \"cover\"\n    };\n    this._login.getLoginBack().subscribe(function (res) {\n      _this.myLoginStyle = {\n        background: \"url('img/\" + res.data.loginback + \"') no-repeat fixed center / cover\",\n        height: \"100%\",\n        width: \"100%\",\n        \"overflow-y\": \"hidden\",\n        \"-webkit-background-size\": \"cover\",\n        \"-moz-background-size\": \"cover\",\n        \"-o-background-size\": \"cover\"\n      };\n      _this.mainLogo = res.data.mainlogo;\n    });\n    this.times = 0;\n    // this.log = { user: \"\", pwd: \"\", key: \"\", token: \"\", response: \"\" };\n    this.log = {};\n    localStorage.clear();\n    this._login.getCookie().subscribe(function (res) {\n      _this.captcha = res.intentos;\n      _this.log.key = res.cookie.keyPub;\n      localStorage.setItem(\"token\", res.cookie.token);\n      localStorage.setItem(\"title\", res.title);\n      _this._title.setTitle(\".:: \" + res.title + \" : Login ::.\");\n    });\n\n    this.sitekey();\n    this.captchaForever();\n  }\n\n  _createClass(LoginComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"sitekey\",\n    value: function sitekey() {\n      var _this2 = this;\n\n      this._login.siteKey().subscribe(function (res) {\n        _this2.sitkey = res.data;\n        _this2.sitkey = _this2.sitkey.trim();\n      });\n    }\n  }, {\n    key: \"captchaForever\",\n    value: function captchaForever() {\n      var _this3 = this;\n\n      this._login.captchaforever().subscribe(function (res) {\n        _this3.captchaforever = res.data;\n      });\n    }\n  }, {\n    key: \"getAuth\",\n    value: function getAuth() {\n      var _this4 = this;\n\n      this.loading = true;\n      this.log.token = localStorage.getItem(\"token\");\n      this.log.captchaforever = this.captchaforever;\n      this._login.getAuth(this.log).subscribe(function (res) {\n        _this4.times++;\n        localStorage.setItem(\"token\", res.data.token);\n\n        if (res.data.status === \"error\") {\n          _this4.captcha = res.data.attempts;\n          _this4.loading = false;\n          if (res.message === \"Session has Expired\" && _this4.times <= 4) {\n            _this4._login.getCookie().subscribe(function (rx) {\n              _this4.log.key = rx.cookie.keyPub;\n              localStorage.setItem(\"token\", rx.cookie.token);\n              _this4.getAuth();\n            });\n          }\n          if (_this4.times > 4) {\n            setTimeout(function () {\n              location.reload();\n            }, 1000);\n          }\n          if (res.message != \"Session has Expired\") {\n            _this4.toastr.error(res.message, \"Error!\");\n          }\n\n          if (_this4.log.response && _this4.captcha > 0) {\n            grecaptcha.reset();\n          }\n        } else {\n\n          _this4.loading = false;\n          _this4.toastr.success(res.message);\n          _this4._route.navigate([\"/whiteboard\"]);\n        }\n      });\n    }\n  }, {\n    key: \"getAuthBeta\",\n    value: function getAuthBeta() {\n      var _this5 = this;\n\n      this.loading = true;\n      this.log.token = localStorage.getItem(\"token\");\n      this._login.getAuth(this.log).subscribe(function (res) {\n        _this5.times++;\n        localStorage.setItem(\"token\", res.data.token);\n        if (res.data === \"error\") {\n          _this5.loading = false;\n          if (res.message === \"Session has Expired\" && _this5.times <= 4) {\n            _this5._login.getCookie().subscribe(function (res) {\n              _this5.log.key = res.cookie.keyPub;\n              localStorage.setItem(\"token\", res.cookie.token);\n              _this5.getAuthBeta();\n            });\n          }\n          if (_this5.times > 4) {\n            setTimeout(function () {\n              location.reload();\n            }, 1000);\n          }\n        } else {\n          _this5.loading = false;\n          _this5.toastr.success(res.message);\n          window.location.href = window.location.href.replace(\"login\", \"beta/dashboard\");\n        }\n      });\n    }\n  }, {\n    key: \"validate\",\n    value: function validate() {\n      if (this.captcha > '0' || this.captchaforever == 1) {\n        return !this.log.user || this.log.user.trim() == \"\" || !this.log.pwd || this.log.pwd.trim() == \"\" || !this.log.response || this.log.response.trim() == \"\";\n      } else {\n        return !this.log.user || this.log.user.trim() == \"\" || !this.log.pwd || this.log.pwd.trim() == \"\";\n      }\n    }\n  }, {\n    key: \"resolved\",\n    value: function resolved(captchaResponse) {\n      this.log.response = captchaResponse;\n    }\n  }]);\n\n  return LoginComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _platformBrowser.Meta, _login.LoginService, _router.Router, _ngxToastr.ToastrService], LoginComponent);\n\n/***/ }),\n/* 251 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DashboardComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _dashboard = __webpack_require__(44);\n\nvar _task = __webpack_require__(19);\n\nvar _daily = __webpack_require__(45);\n\nvar _group = __webpack_require__(11);\n\nvar _users = __webpack_require__(20);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _note = __webpack_require__(24);\n\nvar _notification = __webpack_require__(246);\n\nvar _header = __webpack_require__(32);\n\nvar _scheduler = __webpack_require__(82);\n\nvar _events = __webpack_require__(50);\n\nvar _todolist = __webpack_require__(111);\n\nvar _ng2Dnd = __webpack_require__(243);\n\nvar _pipes = __webpack_require__(14);\n\nvar _dashboardTemplate = __webpack_require__(817);\n\nvar _dashboardTemplate2 = _interopRequireDefault(_dashboardTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DashboardComponent = exports.DashboardComponent = (_dec = (0, _core.Component)({\n  selector: \"dashboard\",\n  template: _dashboardTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe]\n}), _dec(_class = function () {\n  function DashboardComponent(title, router, sanitizer, groupService, dashboardService, taskService, dailyService, usersService, ProjectService, productService, noteService, notificationService, toastr, headerService, eventsService, schedulerService, todolistService) {\n    var _this = this;\n\n    _classCallCheck(this, DashboardComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._events = eventsService;\n    this._dashBoard = dashboardService;\n    this._tasks = taskService;\n    this._projects = ProjectService;\n    this._notes = noteService;\n    this._notifications = notificationService;\n    this._daily = dailyService;\n    this._user = usersService;\n    this._products = productService;\n    this._dailys = dailyService;\n    this._sanitizer = sanitizer;\n    this._header = headerService;\n    this._scheduler = schedulerService;\n    this._todolist = todolistService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.pending = [];\n    this.note = {};\n    this.getmyProjects();\n    this.developing = [];\n    this.improving = [];\n    this.complete = [];\n    this.contacts = [];\n    this.users = [];\n    this.products = [];\n    this.notifications = [];\n    this.noti = [];\n    this.sh = {};\n    this.dayJob = \"\";\n    this.status = {\n      sprint: { closedpoints: 0, devpoints: 0, delpoints: 0 },\n      closed: [],\n      delayed: [],\n      developing: [],\n      pending: []\n    };\n    this.search = \"\";\n    this.searchuser = \"\";\n    this.searchtask = \"\";\n    this.posState = \"user_asigned\";\n    this.posDState = \"user_id\";\n    this.mdT = { project: {} };\n    this.mcT = { project: {} };\n    this.daily = [];\n    this.selectedUsers = [];\n    this.task = { project: {}, attachments: [] };\n    this.dayView = [];\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.extra = { points: 0, text: \"\", delivery: \"\" };\n    this.catdaily = [];\n    this.todaypts = 0;\n    this.chartHtml = \"\";\n    this.chartUser = \"\";\n    this.mychart = \"\";\n    this.myUsers = [];\n    this.contactsTree = [];\n    this.burndownData = {};\n    this.events = [];\n    this.groups = [];\n    this.lblgroups = [];\n    this.taskid = 0;\n    this.idtk = [];\n    this.statustasks = [];\n    this.scheduler = {};\n    this.plsch = [];\n    this.stssche = [];\n    this.catsche = [];\n    this.items = [];\n    this.selectedNodes = [];\n    this.meeting = { usershared: [] };\n    this.userslbl = [];\n    this.cant_pend = 0;\n    this.cant_deve = 0;\n    this.cant_imp = 0;\n    this.cant_expi = 0;\n    this.cant_back = 0;\n    this.percentage_pend = 0;\n    this.percentage_deve = 0;\n    this.percentage_deve_aprox = 0;\n    this.percentage_impr = 0;\n    this.percentage_impr_aprox = 0;\n    this.percentage_expi = 0;\n    this.percentage_expi_aprox = 0;\n    this.percentage_back = 0;\n    this.todolist = [];\n    this.selectList = [];\n    this.add_items = [];\n    this.project = { users: [], attachments: [] };\n    this.limitpagetd = 0;\n    this.itemcounttd = 0;\n    this.currentpagetd = 1;\n    this.textGroup = \"\";\n    this.taskattch = { attachments: [] };\n    this.developing = [];\n    this.dailynew = 0;\n    this.spinner = false;\n    this.mytask = [];\n    this.totalp = 0;\n    this.taskbystatus = [];\n    this.stTitle = \"Squadlinx\";\n    this.tasksMySprint = [];\n    this.myMeetings = [];\n    this.mySchedulers = [];\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : DashBoard ::.\");\n    this.taskInDeveloping = false;\n    this.taskInPending = false;\n    this.getTasksMySprint();\n    this.getMyMeetings();\n    this.getMySchedulers();\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n\n    this.task = [];\n    this._tasks.getPercentage().subscribe(function (res) {\n      _this.task = res.data;\n\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var a = _step2.value;\n\n          if (a.tkstatus == \"pending\") {\n            _this.cant_pend = a.quantity;\n            _this.percentage_pend = a.percentage;\n          }\n          if (a.tkstatus == \"developing\") {\n            _this.cant_deve = a.quantity;\n            _this.percentage_deve = a.percentage;\n\n            _this.percentage_deve_aprox = Math.ceil(_this.percentage_deve);\n          }\n          if (a.tkstatus == \"improving\") {\n            _this.cant_imp = a.quantity;\n            _this.percentage_impr = a.percentage;\n            _this.percentage_impr_aprox = Math.ceil(_this.percentage_impr);\n          }\n          if (a.tkstatus == \"expiring\") {\n            _this.cant_expi = a.quantity;\n            _this.percentage_expi = a.percentage;\n            _this.percentage_expi_aprox = Math.ceil(_this.percentage_expi);\n          }\n          if (a.tkstatus == \"backlog\") {\n            _this.cant_back = a.quantity;\n            _this.percentage_back = a.percentage;\n          }\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n\n    this._daily.getCategories().subscribe(function (data) {\n      _this.catdaily = [];\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var c = _step3.value;\n\n          _this.catdaily.push({ label: c.cada_name, value: c.para_category });\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n    });\n    this.categories = [];\n    this._projects.getCategories().subscribe(function (data) {\n      var _iteratorNormalCompletion4 = true;\n      var _didIteratorError4 = false;\n      var _iteratorError4 = undefined;\n\n      try {\n        for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n          var c = _step4.value;\n\n          _this.categories.push({ label: c.para_name, value: c.para_id });\n        }\n      } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion4 && _iterator4.return) {\n            _iterator4.return();\n          }\n        } finally {\n          if (_didIteratorError4) {\n            throw _iteratorError4;\n          }\n        }\n      }\n    });\n    this._products.getProducts().subscribe(function (data) {\n      _this.products = [];\n      var _iteratorNormalCompletion5 = true;\n      var _didIteratorError5 = false;\n      var _iteratorError5 = undefined;\n\n      try {\n        for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n          var c = _step5.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      } catch (err) {\n        _didIteratorError5 = true;\n        _iteratorError5 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion5 && _iterator5.return) {\n            _iterator5.return();\n          }\n        } finally {\n          if (_didIteratorError5) {\n            throw _iteratorError5;\n          }\n        }\n      }\n    });\n    this.applicantlbl = [];\n    this._user.getEmailList().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion6 = true;\n      var _didIteratorError6 = false;\n      var _iteratorError6 = undefined;\n\n      try {\n        for (var _iterator6 = data.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n          var c = _step6.value;\n\n          _this.applicantlbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError6 = true;\n        _iteratorError6 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion6 && _iterator6.return) {\n            _iterator6.return();\n          }\n        } finally {\n          if (_didIteratorError6) {\n            throw _iteratorError6;\n          }\n        }\n      }\n    });\n    this._scheduler.getSchedulerCategory().subscribe(function (res) {\n      var _iteratorNormalCompletion7 = true;\n      var _didIteratorError7 = false;\n      var _iteratorError7 = undefined;\n\n      try {\n        for (var _iterator7 = res.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n          var c = _step7.value;\n\n          _this.catsche.push({ label: c.para_name, value: c.para_id });\n        }\n      } catch (err) {\n        _didIteratorError7 = true;\n        _iteratorError7 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion7 && _iterator7.return) {\n            _iterator7.return();\n          }\n        } finally {\n          if (_didIteratorError7) {\n            throw _iteratorError7;\n          }\n        }\n      }\n    });\n    this._scheduler.getSchedulerStatus().subscribe(function (res) {\n      // this.category = [];\n      var _iteratorNormalCompletion8 = true;\n      var _didIteratorError8 = false;\n      var _iteratorError8 = undefined;\n\n      try {\n        for (var _iterator8 = res.data[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n          var c = _step8.value;\n\n          _this.stssche.push({ label: c.para_name, value: c.para_id });\n        }\n      } catch (err) {\n        _didIteratorError8 = true;\n        _iteratorError8 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion8 && _iterator8.return) {\n            _iterator8.return();\n          }\n        } finally {\n          if (_didIteratorError8) {\n            throw _iteratorError8;\n          }\n        }\n      }\n    });\n    this._scheduler.getSchedulerPlaces().subscribe(function (res) {\n      var _iteratorNormalCompletion9 = true;\n      var _didIteratorError9 = false;\n      var _iteratorError9 = undefined;\n\n      try {\n        for (var _iterator9 = res.data[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n          var c = _step9.value;\n\n          _this.plsch.push({ label: c.para_name, value: c.para_id });\n        }\n      } catch (err) {\n        _didIteratorError9 = true;\n        _iteratorError9 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion9 && _iterator9.return) {\n            _iterator9.return();\n          }\n        } finally {\n          if (_didIteratorError9) {\n            throw _iteratorError9;\n          }\n        }\n      }\n    });\n    this._groups.getGroups().subscribe(function (data) {\n      _this.groups = data.data;\n      var _iteratorNormalCompletion10 = true;\n      var _didIteratorError10 = false;\n      var _iteratorError10 = undefined;\n\n      try {\n        for (var _iterator10 = data.data[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n          var c = _step10.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n        }\n      } catch (err) {\n        _didIteratorError10 = true;\n        _iteratorError10 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion10 && _iterator10.return) {\n            _iterator10.return();\n          }\n        } finally {\n          if (_didIteratorError10) {\n            throw _iteratorError10;\n          }\n        }\n      }\n    });\n    this.usersCRM = [];\n    this.usersCRMa = [];\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.usersCRM = data.data;\n      _this.usersCRMa = data.data;\n    });\n\n    this._user.getMyUserData().subscribe(function (data) {\n      _this.myuser = data.data[0].user_id;\n      _this.selectedUsers.push(_this.myuser);\n      _this.selectedNodes.push(_this.myuser);\n    });\n    this.getDevtask();\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.catdaily = [];\n    this._daily.getCategories().subscribe(function (data) {\n      _this.catdaily = [];\n      var _iteratorNormalCompletion11 = true;\n      var _didIteratorError11 = false;\n      var _iteratorError11 = undefined;\n\n      try {\n        for (var _iterator11 = data.data[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n          var c = _step11.value;\n\n          _this.catdaily.push({ label: c.para_name, value: c.para_codigo });\n        }\n      } catch (err) {\n        _didIteratorError11 = true;\n        _iteratorError11 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion11 && _iterator11.return) {\n            _iterator11.return();\n          }\n        } finally {\n          if (_didIteratorError11) {\n            throw _iteratorError11;\n          }\n        }\n      }\n    });\n    this.versionControl = \"\";\n  }\n\n  _createClass(DashboardComponent, [{\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      var _this2 = this;\n\n      this.header = {\n        left: \"prev,next\",\n        center: \"title\",\n        right: \"month,agendaWeek,agendaDay\"\n      };\n      this.items = [{ label: \"New Scheduler\", icon: \"fa-link\", url: \"http://angular.io\" }, { label: \"New Meeting\", icon: \"fa-paint-brush\", url: \"http://google.com\" }];\n      this._notifications.getMyVersionControl().subscribe(function (res) {\n        if (res.data.advc_description) {\n          _this2.versionControl = res.data.advc_description;\n          $(\"#mdVersionControl\").modal(\"show\");\n        }\n      });\n    }\n  }, {\n    key: \"getmyProjects\",\n    value: function getmyProjects() {\n      var _this3 = this;\n\n      this.myProjects = [];\n      this.selectedprojects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this3.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        _this3.selectedprojects = [0];\n        if (res.data.planning) {\n          var _iteratorNormalCompletion12 = true;\n          var _didIteratorError12 = false;\n          var _iteratorError12 = undefined;\n\n          try {\n            for (var _iterator12 = res.data.planning[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n              var c = _step12.value;\n\n              _this3.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n              _this3.selectedprojects.push(c.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError12 = true;\n            _iteratorError12 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                _iterator12.return();\n              }\n            } finally {\n              if (_didIteratorError12) {\n                throw _iteratorError12;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion13 = true;\n          var _didIteratorError13 = false;\n          var _iteratorError13 = undefined;\n\n          try {\n            for (var _iterator13 = res.data.buildup[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {\n              var _c = _step13.value;\n\n              _this3.myProjects.push({\n                label: _c.proj_id + \" \" + _c.proj_subject,\n                value: _c.proj_id,\n                idcolor: _c.idcolor\n              });\n              _this3.selectedprojects.push(_c.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError13 = true;\n            _iteratorError13 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion13 && _iterator13.return) {\n                _iterator13.return();\n              }\n            } finally {\n              if (_didIteratorError13) {\n                throw _iteratorError13;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion14 = true;\n          var _didIteratorError14 = false;\n          var _iteratorError14 = undefined;\n\n          try {\n            for (var _iterator14 = res.data.implementation[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {\n              var _c2 = _step14.value;\n\n              _this3.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n              _this3.selectedprojects.push(_c2.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError14 = true;\n            _iteratorError14 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion14 && _iterator14.return) {\n                _iterator14.return();\n              }\n            } finally {\n              if (_didIteratorError14) {\n                throw _iteratorError14;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpagetd + 1 : this.currentpagetd - 1;\n      if (cur <= 0) {\n        this.currentpagetd = 1;\n      } else {\n        if ((cur + 1) * this.limitpagetd - this.limitpagetd + 1 <= this.itemcounttd + this.limitpagetd) {\n          this.currentpagetd = cur;\n        }\n      }\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state) {\n      this.textGroup = state;\n      this.currentpagetd = 1;\n      this.limitpagetd = this.todolist.length > 8 ? 8 : this.todolist.length;\n      this.itemcounttd = this.todolist.length;\n    }\n  }, {\n    key: \"verifyLevels\",\n    value: function verifyLevels() {\n      var _this4 = this;\n\n      this._todolist.getTodolist().subscribe(function (res) {\n        _this4.todolist = res.data;\n        var c = 0;\n        var m = 0;\n        var level_next = 0;\n        var task_id_m = 0;\n        var level_m = 0;\n        var level_correct = 0;\n        var n = 0;\n        var total_items = _this4.todolist.length;\n        for (var i in _this4.todolist) {\n          if (_this4.todolist[i].task_level == 0) {\n            c++;\n          }\n          n = i;\n          n++;\n          if (n != _this4.todolist[i].task_level) {\n            m++;\n            task_id_m = _this4.todolist[i].task_id;\n            level_correct = n;\n            level_m++;\n            _this4._todolist.setLevel(_this4.todolist[i].task_id, n).subscribe(function (data) {});\n          } else {}\n          n = 0;\n        }\n        if (c > 0) {\n          level_next = total_items - c;\n          if (level_next == 0) {\n            level_next++;\n          } else {\n            level_next++;\n          }\n          for (var x in _this4.todolist) {\n            if (_this4.todolist[x].task_level == 0) {\n              _this4._todolist.setLevel(_this4.todolist[x].task_id, level_next).subscribe(function (data) {});\n              level_next++;\n            }\n          }\n        } else {}\n        _this4._todolist.getTodolist().subscribe(function (res) {\n          _this4.todolist = res.data;\n        });\n      });\n    }\n  }, {\n    key: \"addItem\",\n    value: function addItem() {\n      var _this5 = this;\n\n      this.selectList = [];\n      this.add_items = [];\n      this._todolist.getSelectlist().subscribe(function (res) {\n        _this5.selectList = res.data;\n      });\n      $(\"#mdAddItem\").modal(\"show\");\n    }\n  }, {\n    key: \"selectAll\",\n    value: function selectAll() {\n      if (this.add_items.length > 0) {\n        this.add_items = [];\n      } else {\n        this.add_items = [];\n        for (var t in this.selectList) {\n          this.add_items.push(this.selectList[t].task_id);\n        }\n      }\n    }\n  }, {\n    key: \"save\",\n    value: function save() {\n      this.msgs = [];\n      this.msgs.push({\n        severity: \"info\",\n        summary: \"Success\",\n        detail: \"Data Saved\"\n      });\n    }\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      var _this6 = this;\n\n      this.getNotifications();\n      this.getBurnDown();\n      this.getTree();\n      this._user.getMyUsers().subscribe(function (data) {\n        _this6.contacts = data.data;\n      });\n\n      this.getMySchedule();\n    }\n  }, {\n    key: \"getMySchedule\",\n    value: function getMySchedule() {\n      var _this7 = this;\n\n      this.events = [];\n      this._scheduler.getMySchedule().subscribe(function (data) {\n        if (data.data.length > 0) {\n          var _iteratorNormalCompletion15 = true;\n          var _didIteratorError15 = false;\n          var _iteratorError15 = undefined;\n\n          try {\n            for (var _iterator15 = data.data[Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) {\n              var c = _step15.value;\n\n              if (c.para_name != \"Meeting\") {\n                var part1 = c.sche_start.split(\" \");\n                c.sche_start = part1[0];\n                var part2 = c.sche_end.split(\" \");\n                c.sche_end = part2[0];\n                _this7.events.push({\n                  tittle: c.sche_title,\n                  start: c.sche_start,\n                  end: c.sche_end,\n                  place: c.place,\n                  description: c.sche_description,\n                  category: c.para_name,\n                  user: c.completename\n                });\n              }\n              _this7.events.push({\n                tittle: c.sche_title,\n                start: c.sche_start,\n                place: c.place,\n                description: c.sche_description,\n                category: c.para_name,\n                user: c.completename\n              });\n            }\n          } catch (err) {\n            _didIteratorError15 = true;\n            _iteratorError15 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion15 && _iterator15.return) {\n                _iterator15.return();\n              }\n            } finally {\n              if (_didIteratorError15) {\n                throw _iteratorError15;\n              }\n            }\n          }\n        }\n      });\n      this.statustasks = [];\n      this._dashBoard.getStatusTasksUser().subscribe(function (data) {\n        var _iteratorNormalCompletion16 = true;\n        var _didIteratorError16 = false;\n        var _iteratorError16 = undefined;\n\n        try {\n          for (var _iterator16 = data.data[Symbol.iterator](), _step16; !(_iteratorNormalCompletion16 = (_step16 = _iterator16.next()).done); _iteratorNormalCompletion16 = true) {\n            var c = _step16.value;\n\n            var x = Math.round(c.pointsdone * 100 / c.pointstk);\n            _this7.statustasks.push({\n              points: x,\n              datedelivery: c.datedelivery,\n              task: c.task_id,\n              subject: c.task_subject\n            });\n          }\n        } catch (err) {\n          _didIteratorError16 = true;\n          _iteratorError16 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion16 && _iterator16.return) {\n              _iterator16.return();\n            }\n          } finally {\n            if (_didIteratorError16) {\n              throw _iteratorError16;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"showburndown\",\n    value: function showburndown() {\n      this.getTree();\n      $(\"#mdBurndown\").modal(\"show\");\n    }\n  }, {\n    key: \"getNameUser\",\n    value: function getNameUser(user_name, user_lastname) {\n      if (user_name && user_lastname) {\n        var names = user_name;\n        var surnames = user_lastname;\n        var ellipsis = \"…\";\n        var fullName = names + ' ' + surnames;\n\n        if (fullName.length <= 14) {\n          return fullName;\n        } else {\n\n          if (names.length <= 14 && surnames.length <= 14) {\n            fullName = names + ' ' + surnames;\n          }\n\n          if (names.length <= 14 && surnames.length > 14) {\n            surnames = surnames.substring(0, 14) + ellipsis;\n            fullName = names + ' ' + surnames;\n          }\n\n          if (names.length > 14 && surnames.length <= 14) {\n            var arrayNames = names.split(' ');\n            var firstName = arrayNames[0];\n            fullName = firstName + ' ' + surnames;\n          }\n\n          if (names.length > 14 && surnames.length > 14) {\n            var _arrayNames = names.split(' ');\n            var _firstName = _arrayNames[0];\n            surnames = surnames.substring(0, 14) + ellipsis;\n            fullName = _firstName + ' ' + surnames;\n          }\n\n          return fullName;\n        }\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"getTree\",\n    value: function getTree() {\n      var _this8 = this;\n\n      this.myUsers = [];\n      this.contactsTree = [];\n      this._user.getMyUsers().subscribe(function (data) {\n        _this8.contacts = data.data;\n        var group = \"0\";\n        var groupname = \"\";\n        var children = [];\n\n        var _iteratorNormalCompletion17 = true;\n        var _didIteratorError17 = false;\n        var _iteratorError17 = undefined;\n\n        try {\n          for (var _iterator17 = data.data[Symbol.iterator](), _step17; !(_iteratorNormalCompletion17 = (_step17 = _iterator17.next()).done); _iteratorNormalCompletion17 = true) {\n            var u = _step17.value;\n\n            _this8.myUsers.push(u.user_id);\n            if (group != u.grop_id) {\n              if (group != \"0\") {\n                _this8.contactsTree.push({\n                  label: groupname,\n                  data: group,\n                  expanded: true,\n                  children: children\n                });\n              }\n              groupname = u.groupname;\n              group = u.grop_id;\n              children = [];\n            }\n            children.push({\n              label: _this8.getNameUser(u.user_name, u.user_lastname),\n              data: u.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError17 = true;\n          _iteratorError17 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion17 && _iterator17.return) {\n              _iterator17.return();\n            }\n          } finally {\n            if (_didIteratorError17) {\n              throw _iteratorError17;\n            }\n          }\n        }\n\n        if (group != \"0\") {\n          _this8.contactsTree.push({\n            label: groupname,\n            data: group,\n            expanded: true,\n            children: children\n          });\n        }\n      });\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"onChangeT\",\n    value: function onChangeT(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"onChangeP\",\n    value: function onChangeP(event) {\n      var files = event.srcElement.files;\n      this.project.attachments.push(files[0]);\n    }\n  }, {\n    key: \"selectAllItems\",\n    value: function selectAllItems() {\n      if (this.selectedNodes.length > 0) {\n        this.selectedNodes = [];\n      } else {\n        this.selectedNodes = [];\n        for (var t in this.contactsTree) {\n          this.selectedNodes.push(this.contactsTree[t].data);\n          if (this.contactsTree[t].children.length > 0) {\n            for (var c in this.contactsTree[t].children) {\n              this.selectedNodes.push(this.contactsTree[t].children[c].data);\n            }\n          }\n        }\n      }\n\n      this.updateSelect(event);\n    }\n  }, {\n    key: \"selectAllChildrens\",\n    value: function selectAllChildrens(childrens, idparent) {\n      var m = 0;\n      var n = 0;\n      for (var x in this.selectedNodes) {\n        if (this.selectedNodes[x] == idparent) {\n          m++;\n        } else {\n          n++;\n        }\n      }\n\n      if (m == 1 && n == 0) {\n        this.selectedNodes = [];\n        this.selectedNodes.push(idparent);\n        if (childrens.length > 0) {\n          for (var c in childrens) {\n            if (m == 1) {\n              this.selectedNodes.push(childrens[c].data);\n            }\n          }\n        }\n      } else {\n        this.selectedNodes = [];\n      }\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"showProject\",\n    value: function showProject(projid) {\n      var _this9 = this;\n\n      this.note = {};\n      this._projects.getproject(projid).subscribe(function (data) {\n        _this9.project = data.data;\n        _this9.getMessages(projid);\n        $(\"#mdprojectView\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"sendMessage\",\n    value: function sendMessage(projid) {\n      var _this10 = this;\n\n      this.note.proj_id = this.project.proj_id;\n      this._notes.putNote(this.note).subscribe(function (data) {\n        _this10.getMessages(projid);\n        _this10.note = { attachments: [] };\n      });\n    }\n  }, {\n    key: \"getMessages\",\n    value: function getMessages(projid) {\n      var _this11 = this;\n\n      this._projects.getprojectNotes(projid).subscribe(function (data) {\n        _this11.project.messages = data.data;\n      });\n    }\n  }, {\n    key: \"updateSelect\",\n    value: function updateSelect(event) {\n      this.selectedUsers = [];\n      var _iteratorNormalCompletion18 = true;\n      var _didIteratorError18 = false;\n      var _iteratorError18 = undefined;\n\n      try {\n        for (var _iterator18 = this.selectedNodes[Symbol.iterator](), _step18; !(_iteratorNormalCompletion18 = (_step18 = _iterator18.next()).done); _iteratorNormalCompletion18 = true) {\n          var c = _step18.value;\n\n          if (!c.children) {\n            this.selectedUsers.push(c);\n          }\n        }\n      } catch (err) {\n        _didIteratorError18 = true;\n        _iteratorError18 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion18 && _iterator18.return) {\n            _iterator18.return();\n          }\n        } finally {\n          if (_didIteratorError18) {\n            throw _iteratorError18;\n          }\n        }\n      }\n\n      this.getBurnDown();\n    }\n  }, {\n    key: \"updateSelectA\",\n    value: function updateSelectA(event, children, idparent) {\n      this.selectAllChildrens(children, idparent);\n      this.selectedUsers = [];\n      var _iteratorNormalCompletion19 = true;\n      var _didIteratorError19 = false;\n      var _iteratorError19 = undefined;\n\n      try {\n        for (var _iterator19 = this.selectedNodes[Symbol.iterator](), _step19; !(_iteratorNormalCompletion19 = (_step19 = _iterator19.next()).done); _iteratorNormalCompletion19 = true) {\n          var c = _step19.value;\n\n          if (!c.children) {\n            this.selectedUsers.push(c);\n          }\n        }\n      } catch (err) {\n        _didIteratorError19 = true;\n        _iteratorError19 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion19 && _iterator19.return) {\n            _iterator19.return();\n          }\n        } finally {\n          if (_didIteratorError19) {\n            throw _iteratorError19;\n          }\n        }\n      }\n\n      this.getBurnDown();\n    }\n  }, {\n    key: \"getBurnDown\",\n    value: function getBurnDown() {\n      var _this12 = this;\n\n      this._dashBoard.getBurndown(0).subscribe(function (res) {\n        if (res) {\n          var datasets = [];\n          for (var u in res.data.users) {\n            if (_this12.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n              datasets.push({\n                label: res.data.users[u].label,\n                data: res.data.users[u].data,\n                fill: false,\n                borderColor: res.data.users[u].color,\n                backgroundColor: res.data.users[u].color,\n                user: res.data.users[u].user_id\n              });\n            }\n          }\n          datasets.push({\n            label: res.data.users[0].label,\n            data: res.data.users[0].data,\n            fill: false,\n            borderColor: res.data.users[0].color,\n            backgroundColor: res.data.users[0].color\n          });\n          _this12.burndownData = {\n            labels: res.data.days,\n            datasets: datasets,\n            options: { legend: { boxWidth: 40 } },\n            daily: res.data.daily\n          };\n        }\n      });\n    }\n  }, {\n    key: \"chartClicked\",\n    value: function chartClicked(event) {\n      var _this13 = this;\n\n      this.dayJob = this.burndownData.daily[event.element._index];\n      this._daily.getDay4Usr(this.burndownData.datasets[event.element._datasetIndex].user, this.burndownData.daily[event.element._index]).subscribe(function (res) {\n        _this13.dayView = res.data;\n        _this13.totalp = 0;\n        var totalp = 0;\n        var a = 0;\n        for (var i = 0; i < _this13.dayView.length; i++) {\n          a = parseFloat(_this13.dayView[i].dail_points);\n          totalp += parseFloat(a);\n        }\n        _this13.totalp = totalp.toFixed(2);\n        $(\"#mdDayView\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"handleDayClick\",\n    value: function handleDayClick(e) {}\n  }, {\n    key: \"handleEventClick\",\n    value: function handleEventClick(e) {\n      if (e.calEvent) {\n        this.sh = e.calEvent;\n        document.getElementById(\"openschedule\").click();\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n      var pos = this.task.attachments.indexOf(att.name);\n      this.task.attachments.splice(pos, 1);\n    }\n  }, {\n    key: \"showNoti\",\n    value: function showNoti(n) {\n      var _this14 = this;\n\n      this.noti = n;\n      this._header.setCatNotification(this.noti.para_id, 18).subscribe(function (res) {\n        _this14.getNotifications();\n        // this._tasks.getTaskNotification(this.noti.noti_id).subscribe(res => {});\n      });\n    }\n  }, {\n    key: \"getNotifications\",\n    value: function getNotifications() {\n      var _this15 = this;\n\n      this._header.getDeskNotificatons().subscribe(function (res) {\n        _this15.notifications = res.data;\n      });\n    }\n  }, {\n    key: \"clearNotif\",\n    value: function clearNotif() {\n      var _this16 = this;\n\n      this._header.clearNotificatons().subscribe(function (res) {\n        _this16.notifications = [];\n      });\n    }\n  }, {\n    key: \"reloadComments\",\n    value: function reloadComments(tkid) {\n      var _this17 = this;\n\n      this._tasks.getComments(tkid).subscribe(function (res) {\n        _this17.mdT.comments = res.data;\n        var elem = document.getElementById(\"mdTComments\");\n        if (elem) {\n          elem.scrollTop = elem.scrollHeight;\n        }\n      });\n    }\n  }, {\n    key: \"addScheduler\",\n    value: function addScheduler() {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.scheduler = { scheduler: {} };\n    }\n  }, {\n    key: \"saveScheduler\",\n    value: function saveScheduler() {\n      var _this18 = this;\n\n      this.scheduler.sche_start = new Date(this.scheduler.sche_start);\n      this.scheduler.sche_start = this.scheduler.sche_start.getFullYear() + \"-\" + (this.scheduler.sche_start.getMonth() + 1) + \"-\" + this.scheduler.sche_start.getDate();\n      this.scheduler.sche_end = new Date(this.scheduler.sche_end);\n      this.scheduler.sche_end = this.scheduler.sche_end.getFullYear() + \"-\" + (this.scheduler.sche_end.getMonth() + 1) + \"-\" + this.scheduler.sche_end.getDate();\n      this._scheduler.putScheduler(this.scheduler).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this18.toastr.warning(data.message, \"Good news!\");\n        } else {\n          _this18.toastr.success(data.message, \"Scheduler updated successfully\");\n        }\n        _this18.ngOnInit();\n        _this18.getMySchedule();\n      });\n    }\n  }, {\n    key: \"saveMeeting\",\n    value: function saveMeeting() {\n      var _this19 = this;\n\n      var usarr = [];\n      for (var x in this.meeting.usershared) {\n        if (this.meeting.usershared[x].user_id) {\n          usarr.push(this.meeting.usershared[x].user_id);\n        }\n        if (this.meeting.usershared[x].user_id) {\n          usarr.push(this.meeting.usershared[x].user_id);\n        }\n      }\n      this.meeting.users = usarr;\n      this.meeting.meet_date = this.meeting.datetime.getFullYear() + \"-\" + this.lpad(this.meeting.datetime.getMonth() + 1, 2) + \"-\" + this.lpad(this.meeting.datetime.getDate(), 2) + \" \" + this.lpad(this.meeting.datetime.getHours(), 2) + \":\" + this.lpad(this.meeting.datetime.getMinutes(), 2) + \":\" + this.lpad(this.meeting.datetime.getSeconds(), 2);\n      this._events.putMeeting(this.meeting).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this19.toastr.warning(data.message, \"Error\");\n        } else {\n          _this19.toastr.success(data.message, \"Meeting Saved successfully\");\n        }\n        _this19.ngOnInit();\n        _this19.getMySchedule();\n      });\n    }\n  }, {\n    key: \"getForm\",\n    value: function getForm(task) {\n      var _this20 = this;\n\n      this._tasks.getTaskFields(task).subscribe(function (res) {\n        _this20.mdT.form = res.data;\n      });\n    }\n  }, {\n    key: \"noteAdd\",\n    value: function noteAdd(idtask, type) {\n      this.note.task_id = idtask;\n      if (this.note.note_text == undefined && this.note_text != null && this.note_text != \"\") {\n        this.note.note_text = this.note_text;\n      }\n      this._notes.putNote(this.note).subscribe(function (data) {});\n      this.getComments(idtask);\n      this.getTimelinetk(idtask);\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this21 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this21.toastr.error(res.message, \"Error!\");\n            } else {\n              _this21.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this21.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"showCreateTask\",\n    value: function showCreateTask() {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.task = { attachments: [] };\n      $(\"#mdAddTask\").modal(\"show\");\n    }\n  }, {\n    key: \"showCreateProject\",\n    value: function showCreateProject() {\n      this.project = { attachments: [] };\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      $(\"#mdproject\").modal(\"show\");\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this22 = this;\n\n      if ((this.task_description != \"\" || this.task_description != null) && this.task.task_description == undefined) {\n        this.task.task_description = this.task_description;\n      }\n\n      this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      this.task.task_delivery = new Date(this.task.task_delivery);\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      this._tasks.putTask(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this22.toastr.warning(data.message, \"Good news!\");\n        } else {\n          _this22.toastr.success(data.message, \"Task saved successfully\");\n        }\n        // this.reload();\n        _this22.task = { attachments: [] };\n      });\n    }\n  }, {\n    key: \"saveproject\",\n    value: function saveproject() {\n      var _this23 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      var usarr = [];\n      for (var x in this.project.users) {\n        usarr.push(this.project.users[x].user_id);\n      }\n      this.project.users = usarr;\n      this._projects.putproject(this.project).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this23.toastr.warning(data.message, \"Attention!\");\n        } else {\n          _this23.toastr.success(data.message, \"project saved successfully\");\n        }\n        // this.reload();\n      });\n      this.project = { users: [], attachments: [] };\n    }\n  }, {\n    key: \"validateProj\",\n    value: function validateProj() {\n      return !this.project.proj_subject || this.project.proj_subject.trim() == \"\" || !this.project.proj_description || this.project.proj_description.trim() == \"\" || !this.project.para_category || this.project.para_category.trim() == \"\" || !this.project.prod_id || this.project.prod_id.trim() == \"\" || !this.project.group_assigned || this.project.group_assigned.trim() == \"\" || !this.project.user_applicant || this.project.user_applicant.trim() == \"\" || !this.project.proj_end || this.project.proj_end == \"\" || this.project.proj_end == \"undefined\" || !this.project.proj_propoints || this.project.proj_propoints == \"\" || this.project.proj_propoints == \"undefined\";\n    }\n  }, {\n    key: \"lpad\",\n    value: function lpad(n, width, z) {\n      z = z || \"0\";\n      n = n || \"0\";\n      n = n + \"\";\n      return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n  }, {\n    key: \"parseFloat\",\n    value: function (_parseFloat) {\n      function parseFloat(_x) {\n        return _parseFloat.apply(this, arguments);\n      }\n\n      parseFloat.toString = function () {\n        return _parseFloat.toString();\n      };\n\n      return parseFloat;\n    }(function (pts) {\n      return parseFloat(pts);\n    })\n  }, {\n    key: \"round\",\n    value: function round(value, n) {\n      if (!n || n == 0) {\n        n = 1;\n      } else {\n        n = 10 * n;\n      }\n      return Math.round(value * n) / n;\n    }\n  }, {\n    key: \"getCurdate\",\n    value: function getCurdate() {\n      var today = new Date();\n      var dd = today.getDate();\n      var mm = today.getMonth() + 1;\n      var yyyy = today.getFullYear();\n\n      if (dd < 10) {\n        dd = \"0\" + dd;\n      }\n\n      if (mm < 10) {\n        mm = \"0\" + mm;\n      }\n\n      return yyyy + \"-\" + mm + \"-\" + dd;\n    }\n  }, {\n    key: \"validateDaily\",\n    value: function validateDaily(type) {\n      if (type == \"1\") {\n        return !this.day.dail_text || this.day.dail_text.trim() == \"\" || !this.day.dail_points || this.day.dail_points <= 0 || this.day.dail_points == \"undefined\" || !this.day.dail_date || this.day.dail_date == \"\" || this.day.dail_date == \"undefined\" || parseFloat(this.mytask.task_pointsd) + parseFloat(this.day.dail_points) > parseFloat(this.mytask.task_points);\n      }\n      if (type == \"2\") {\n        return !this.day.para_category || !this.day.prod_id || !this.day.dail_text_2 || this.day.dail_text_2.trim() == \"\" || !this.day.dail_points_2 || this.day.dail_points_2 <= 0 || this.day.dail_points_2 == \"undefined\" || !this.day.dail_date_2 || this.day.dail_date_2 == \"\" || this.day.dail_date_2 == \"undefined\";\n      }\n    }\n  }, {\n    key: \"saveDaily\",\n    value: function saveDaily(dv, idtask) {\n      var _this24 = this;\n\n      if (this.dailynew == 0) {\n        dv.dail_date = dv.dail_date_2;\n        dv.dail_points = dv.dail_points_2;\n        dv.dail_text = dv.dail_text_2;\n      }\n      dv.task_id = idtask;\n      dv.dail_date = dv.dail_date.getFullYear() + \"-\" + (dv.dail_date.getMonth() + 1) + \"-\" + dv.dail_date.getDate();\n      if (parseInt(this.mytask.task_pointsd) + parseInt(dv.dail_points) > this.mytask.task_points) {\n        this.toastr.error(\"Points selected exceed current task duration\", \"Error!\");\n      } else {\n        this._daily.putDaily(dv).subscribe(function (data) {\n          if (data.data == \"OK\") {\n            _this24.toastr.success(data.message, \"Daily saved Successfully\");\n          } else {\n            _this24.toastr.error(data.message, \"Error!\");\n          }\n          _this24.day = { dail_points: 1 };\n          _this24.setMytask(0);\n        });\n      }\n    }\n  }, {\n    key: \"setMytask\",\n    value: function setMytask(num) {\n      this.dailynew = 0;\n      this.mytask = 0;\n      this.day = { dail_points_2: 1, dail_text_2: \"\" };\n    }\n  }, {\n    key: \"getDevtask\",\n    value: function getDevtask() {\n      var _this25 = this;\n\n      this._daily.getDevtasks().subscribe(function (data) {\n        var developingx = [];\n        _this25.tasks = data.data;\n        if (_this25.tasks[38]) {\n          developingx = developingx.concat(_this25.tasks[38]);\n        }\n        _this25.developing = developingx;\n        _this25.dailynew == 0;\n        _this25.spinner = false;\n      });\n    }\n  }, {\n    key: \"addDaily\",\n    value: function addDaily() {\n      var _this26 = this;\n\n      this.lblmytasks = [];\n      this._tasks.getTasksbyMe().subscribe(function (data) {\n        _this26.myTasks = data.data;\n        var _iteratorNormalCompletion20 = true;\n        var _didIteratorError20 = false;\n        var _iteratorError20 = undefined;\n\n        try {\n          for (var _iterator20 = data.data[Symbol.iterator](), _step20; !(_iteratorNormalCompletion20 = (_step20 = _iterator20.next()).done); _iteratorNormalCompletion20 = true) {\n            var c = _step20.value;\n\n            _this26.lblmytasks.push({ label: \"#\" + c.task_id + \" \" + c.task_subject, value: c.task_id });\n          }\n        } catch (err) {\n          _didIteratorError20 = true;\n          _iteratorError20 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion20 && _iterator20.return) {\n              _iterator20.return();\n            }\n          } finally {\n            if (_didIteratorError20) {\n              throw _iteratorError20;\n            }\n          }\n        }\n      });\n      $(\"#mdDailyTask\").modal(\"show\");\n    }\n  }, {\n    key: \"showInfo\",\n    value: function showInfo(idtk) {\n      this.dailynew = -1;\n      this.day = { dail_points: 1, dail_text: \"\" };\n      this.mytask = idtk;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"doneFilter\",\n    value: function doneFilter() {\n      this.searchuser = \"\";\n    }\n  }, {\n    key: \"setNotify\",\n    value: function setNotify(idn) {\n      this._header.setCatNotification(idn, 18).subscribe(function (res) {});\n    }\n  }, {\n    key: \"showDetail\",\n    value: function showDetail(state) {\n      var _this27 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip('hide');\n      this._tasks.getPercentageDetail(state).subscribe(function (res) {\n        _this27.taskbystatus = res.data;\n      });\n      $(\"#mdTaskStatus\").modal(\"show\");\n    }\n  }, {\n    key: \"showModal\",\n    value: function showModal(id) {\n      if (id == 1) {\n        this.scheduler = { scheduler: {} };\n        $(\"#mdAddScheduler\").modal(\"show\");\n      } else {\n        this.meeting = { usershared: [] };\n        $(\"#mdAddMeeting\").modal(\"show\");\n      }\n    }\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"getTasksMySprint\",\n    value: function getTasksMySprint() {\n      var _this28 = this;\n\n      var ellipsis = \"…\";\n      this._todolist.getTasksMySprint().subscribe(function (res) {\n\n        _this28.tasksMySprint = res.data;\n\n        for (var i = 0; i < _this28.tasksMySprint.length; i++) {\n          if (_this28.tasksMySprint[i].task_subject.length > 80) {\n            _this28.tasksMySprint[i].task_subject = _this28.tasksMySprint[i].task_subject.substring(0, 80) + ellipsis;\n          }\n          if (_this28.tasksMySprint[i].para_status == 38) {\n            _this28.taskInDeveloping = true;\n          }\n          if (_this28.tasksMySprint[i].para_status == 35 || _this28.tasksMySprint[i].para_status == 36 || _this28.tasksMySprint[i].para_status == 37) {\n            _this28.taskInPending = true;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getMyMeetings\",\n    value: function getMyMeetings() {\n      var _this29 = this;\n\n      var ellipsis = \"…\";\n      this._todolist.getMyMeetings().subscribe(function (res) {\n\n        _this29.myMeetings = res.data;\n\n        for (var i = 0; i < _this29.myMeetings.length; i++) {\n          if (_this29.myMeetings[i].meet_text.length > 80) {\n            _this29.myMeetings[i].meet_text = _this29.myMeetings[i].meet_text.substring(0, 80) + ellipsis;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getMySchedulers\",\n    value: function getMySchedulers() {\n      var _this30 = this;\n\n      var ellipsis = \"…\";\n      this._todolist.getMySchedulers().subscribe(function (res) {\n\n        _this30.mySchedulers = res.data;\n\n        for (var i = 0; i < _this30.mySchedulers.length; i++) {\n          if (_this30.mySchedulers[i].sche_title.length > 80) {\n            _this30.mySchedulers[i].sche_title = _this30.mySchedulers[i].sche_title.substring(0, 80) + ellipsis;\n          }\n        }\n      });\n    }\n  }]);\n\n  return DashboardComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _group.GroupService, _dashboard.DashboardService, _task.TaskService, _daily.DailyService, _users.UsersService, _project.ProjectService, _product.ProductService, _note.NoteService, _notification.NotificationService, _ngxToastr.ToastrService, _header.HeaderService, _events.EventsService, _scheduler.SchedulerService, _todolist.TodolistService], DashboardComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 252 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TaskboardComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _login = __webpack_require__(43);\n\nvar _dashboard = __webpack_require__(44);\n\nvar _task = __webpack_require__(19);\n\nvar _daily = __webpack_require__(45);\n\nvar _users = __webpack_require__(20);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _note = __webpack_require__(24);\n\nvar _categories = __webpack_require__(47);\n\nvar _header = __webpack_require__(32);\n\nvar _sprint = __webpack_require__(26);\n\nvar _request = __webpack_require__(81);\n\nvar _group = __webpack_require__(11);\n\nvar _units = __webpack_require__(51);\n\nvar _pipes = __webpack_require__(14);\n\nvar _taskboardTemplate = __webpack_require__(818);\n\nvar _taskboardTemplate2 = _interopRequireDefault(_taskboardTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TaskboardComponent = exports.TaskboardComponent = (_dec = (0, _core.Component)({\n  selector: \"taskboard\",\n  template: _taskboardTemplate2.default,\n  pipes: [_pipes.FilterPipe, _pipes.CalculatePipe],\n  providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n  function TaskboardComponent(title, router, sanitizer, dashboardService, taskService, dailyService, userService, ProjectService, productService, noteService, toastr, headerService, categoriesService, sprintService, RequestService, groupService, confirmationService, unitsService) {\n    var _this = this;\n\n    _classCallCheck(this, TaskboardComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._dashBoard = dashboardService;\n    this._tasks = taskService;\n    this._projects = ProjectService;\n    this._notes = noteService;\n    this._daily = dailyService;\n    this._user = userService;\n    this._products = productService;\n    this._dailys = dailyService;\n    this._sanitizer = sanitizer;\n    this._header = headerService;\n    this._categories = categoriesService;\n    this._sprint = sprintService;\n    this.confirm = confirmationService;\n    this._event = RequestService;\n    this.toastr = toastr;\n    this._groups = groupService;\n    this._units = unitsService;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.draggedTask = {};\n    this.status = {};\n    this.events = [];\n    this.pending = [];\n    this.developing = [];\n    this.improving = [];\n    this.complete = [];\n    // this.backlog = [];\n    this.close = [];\n    this.users = [];\n    this.products = [];\n    this.notifications = [];\n    this.lblgroups = [];\n    this.note = { attachments: [] };\n    this.status = {\n      sprint: { closedpoints: 0, devpoints: 0, delpoints: 0 },\n      closed: [],\n      delayed: [],\n      developing: [],\n      pending: []\n    };\n    this.searching = \"\";\n    this.searchproduct = \"\";\n    this.searchuser = \"\";\n    this.searchproject = \"\";\n    this.posState = \"user_asigned\";\n    this.posDState = \"user_id\";\n    this.posCreator = \"user_creator\";\n    this.posProduct = \"prod_id\";\n    this.mdT = { project: {}, comments: [] };\n    this.mcT = { project: {} };\n    this.sumdv = 0;\n    this.sumdv_d = 0;\n    this.sumcp = 0;\n    this.sumimp = 0;\n    this.sumcl = 0;\n    this.rjtask = {};\n    this.selectedNodes = [];\n    this.selectedUsers = [];\n    this.selectedProduct = [];\n    this.selectedProduct_new = [];\n    this.selectedprojects = [];\n    this.selectedprojects_new = [];\n    this.task = { project: {}, attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.dayView = {};\n    this.day = { dail_points: \"\", dail_text: \"\" };\n    this.extra = { points: 0, text: \"\", delivery: \"\" };\n    this.catdaily = [];\n    this.todaypts = 0;\n    this.chartHtml = \"\";\n    this.chartUser = \"\";\n    this.mychart = \"\";\n    this.byme = false;\n    this.myUsers = [];\n    this.myProjects = [];\n    this.userslbl = [];\n    this.contactsTree = [];\n    this.categoryMenu = [];\n    this.note_text = \"\";\n    this.categories = [];\n    this.selectedCategory = {};\n    this.mytags = [];\n    this.tagsbytask = [];\n    this.keylist = [];\n    this.regexFromMyArray = [];\n    this.counterElements = 0;\n    this.notes = [];\n    this.taskslist = [];\n    this.globalist = {};\n    this.spinner = false;\n    this.posAsigned = \"asigned\";\n    this.selectedParents = [];\n    this.filter_projects = 0;\n    this.myuser = 0;\n    this.mdT.sprint = [];\n    this.mysprint = [];\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.cpimptask = {};\n    this.myrequest = 0;\n    this.requests = [];\n    this.showt = 0;\n    this.myteam = {};\n    this.textState = [\"\"];\n    this.infodone = false;\n    this.team = [];\n    this.tasks = [];\n    this.mysprints = [];\n    this.mysprint.spri_id = 0;\n    this.tagMenux = 1;\n    this.minDateDaily = null;\n    this.maxDateDaily = new Date();\n    this.tagbytask = {};\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : TaskBoard ::.\");\n    //document.getElementById (\"list-item\").addEventListener (\"click\", kkk, false);\n    this._sprint.getMySpri().subscribe(function (res) {\n      _this.mysprintsgroup = res.data;\n      _this.mysprintsgroup.push({\n        spri_id: \"0\",\n        spri_init: \"-\",\n        spri_end: \"-\",\n        spri_description: \"None (Backlog)\"\n      });\n    });\n    this._user.getMyUserData().subscribe(function (data) {\n      _this.myuser = data.data[0].user_id;\n      if (data.data[0].user_id.head != 0) {\n        _this.headteam = data.data[0].head;\n      } else {\n        _this.headteam = 0;\n      }\n      _this.selectedUsers.push(_this.myuser);\n      _this.selectedNodes.push(_this.myuser);\n      _this.getMyTeam(data.data[0].grop_id);\n    });\n\n    this._user.getMyUsers().subscribe(function (data) {\n      var group = \"0\";\n      var groupname = \"\";\n      var children = [];\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var u = _step.value;\n\n          _this.myUsers.push(u.user_id);\n          if (group != u.grop_id) {\n            if (group != \"0\") {\n              _this.contactsTree.push({\n                label: groupname,\n                data: group,\n                expanded: true,\n                children: children\n              });\n            }\n            groupname = u.groupname;\n            group = u.grop_id;\n            children = [];\n          }\n          children.push({\n            label: _this.getNameUser(u.user_name, u.user_lastname),\n            data: u.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n\n      if (group != \"0\") {\n        _this.contactsTree.push({\n          label: groupname,\n          data: group,\n          expanded: true,\n          children: children\n        });\n      }\n    });\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          _this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n    this._daily.getCategories().subscribe(function (data) {\n      _this.catdaily = [];\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var c = _step3.value;\n\n          _this.catdaily.push({ label: c.para_name, value: c.para_codigo });\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n    });\n    this._products.getProducts().subscribe(function (data) {\n      _this.products = [];\n      var _iteratorNormalCompletion4 = true;\n      var _didIteratorError4 = false;\n      var _iteratorError4 = undefined;\n\n      try {\n        for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n          var c = _step4.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n          _this.selectedProduct.push(c.prod_id);\n        }\n      } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion4 && _iterator4.return) {\n            _iterator4.return();\n          }\n        } finally {\n          if (_didIteratorError4) {\n            throw _iteratorError4;\n          }\n        }\n      }\n    });\n    this.mytsk = 0;\n    this.getRequests();\n    this.getCategories();\n    this.getMyProjects();\n    this.getTaskboard(0);\n    this.loadSprint();\n    // this.getMyTaggedTasks();\n    this._units.getUnits().subscribe(function (res) {\n      _this.units = [];\n      var _iteratorNormalCompletion5 = true;\n      var _didIteratorError5 = false;\n      var _iteratorError5 = undefined;\n\n      try {\n        for (var _iterator5 = res.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n          var c = _step5.value;\n\n          _this.units.push({ label: c.unit_desc, value: c.unit_id });\n        }\n      } catch (err) {\n        _didIteratorError5 = true;\n        _iteratorError5 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion5 && _iterator5.return) {\n            _iterator5.return();\n          }\n        } finally {\n          if (_didIteratorError5) {\n            throw _iteratorError5;\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(TaskboardComponent, [{\n    key: \"reloadTaskboard\",\n    value: function reloadTaskboard() {\n      var _this2 = this;\n\n      $(\"#mdRequestTask\").modal(\"hide\");\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this2.mysprintsgroup = res.data;\n        _this2.mysprintsgroup.push({\n          spri_id: \"0\",\n          spri_init: \"-\",\n          spri_end: \"-\",\n          spri_description: \"None (Backlog)\"\n        });\n      });\n\n      this._user.getMyUserData().subscribe(function (data) {\n        _this2.myuser = data.data[0].user_id;\n        if (data.data[0].user_id.head != 0) {\n          _this2.headteam = data.data[0].head;\n        } else {\n          _this2.headteam = 0;\n        }\n        _this2.selectedUsers.push(_this2.myuser);\n        _this2.selectedNodes.push(_this2.myuser);\n        _this2.getMyTeam(data.data[0].grop_id);\n      });\n    }\n  }, {\n    key: \"getNameUser\",\n    value: function getNameUser(user_name, user_lastname) {\n      if (user_name && user_lastname) {\n        var names = user_name;\n        var surnames = user_lastname;\n        var ellipsis = \"…\";\n        var fullName = names + ' ' + surnames;\n\n        if (fullName.length <= 12) {\n          return fullName;\n        } else {\n\n          if (names.length <= 12 && surnames.length <= 12) {\n            fullName = names + ' ' + surnames;\n          }\n\n          if (names.length <= 12 && surnames.length > 12) {\n            surnames = surnames.substring(0, 14) + ellipsis;\n            fullName = names + ' ' + surnames;\n          }\n\n          if (names.length > 12 && surnames.length <= 12) {\n            var arrayNames = names.split(' ');\n            var firstName = arrayNames[0];\n            fullName = firstName + ' ' + surnames;\n          }\n\n          if (names.length > 12 && surnames.length > 12) {\n            var _arrayNames = names.split(' ');\n            var _firstName = _arrayNames[0];\n            surnames = surnames.substring(0, 12) + ellipsis;\n            fullName = _firstName + ' ' + surnames;\n          }\n\n          return fullName;\n        }\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"updateSelect\",\n    value: function updateSelect(event) {\n      this.selectedUsers = [];\n      var _iteratorNormalCompletion6 = true;\n      var _didIteratorError6 = false;\n      var _iteratorError6 = undefined;\n\n      try {\n        for (var _iterator6 = this.selectedNodes[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n          var c = _step6.value;\n\n          if (!c.children) {\n            this.selectedUsers.push(c);\n          }\n        }\n      } catch (err) {\n        _didIteratorError6 = true;\n        _iteratorError6 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion6 && _iterator6.return) {\n            _iterator6.return();\n          }\n        } finally {\n          if (_didIteratorError6) {\n            throw _iteratorError6;\n          }\n        }\n      }\n    }\n  }, {\n    key: \"updateSelectA\",\n    value: function updateSelectA(event, children, idparent) {\n      this.selectAllChildrens(children, idparent);\n\n      this.selectedUsers = [];\n      var _iteratorNormalCompletion7 = true;\n      var _didIteratorError7 = false;\n      var _iteratorError7 = undefined;\n\n      try {\n        for (var _iterator7 = this.selectedNodes[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n          var c = _step7.value;\n\n          if (!c.children) {\n            this.selectedUsers.push(c);\n          }\n        }\n      } catch (err) {\n        _didIteratorError7 = true;\n        _iteratorError7 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion7 && _iterator7.return) {\n            _iterator7.return();\n          }\n        } finally {\n          if (_didIteratorError7) {\n            throw _iteratorError7;\n          }\n        }\n      }\n    }\n  }, {\n    key: \"changeStatus\",\n    value: function changeStatus(pd, status) {\n      var _this3 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to proceed?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (pd.task_approved == 1) {\n            _this3._tasks.setStatusTask(pd.task_id, status).subscribe(function (data) {\n              if (data.data != \"OK\") {\n                _this3.toastr.warning(data.message, \"Attention\");\n              } else {\n                _this3.toastr.success(data.message, \"Task status changed successfully\");\n              }\n              _this3.getTaskboard(_this3.myteam.grop_id);\n            });\n          } else {\n            _this3.toastr.warning(\"Action not allowed. This task must be accepted first by a manager.\", \"Attention\");\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"showCpImp\",\n    value: function showCpImp(cp) {\n      this.cpimptask.task_id = cp.task_id;\n      this.cpimptask.retk_description = \"\";\n      $(\"#mdCpImp\").modal(\"show\");\n    }\n  }, {\n    key: \"cpimpTask\",\n    value: function cpimpTask() {\n      var _this4 = this;\n\n      this._tasks.impTask(this.cpimptask.task_id, this.cpimptask.retk_description).subscribe(function (data) {\n        if (data.data != \"OK\") {\n          _this4.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this4.toastr.success(data.message, \"Task moved to improving\");\n        }\n        _this4.getTaskboard(_this4.myteam.grop_id);\n      });\n    }\n  }, {\n    key: \"showReject\",\n    value: function showReject(dv) {\n      this.rjtask.task_id = dv.task_id;\n      this.rjtask.retk_description = \"\";\n    }\n  }, {\n    key: \"sendBack\",\n    value: function sendBack(pd) {\n      var _this5 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to proceed?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          _this5._tasks.setStatusTask(pd.task_id, 44).subscribe(function (data) {\n            if (data.data != \"OK\") {\n              _this5.toastr.warning(data.message, \"Attention\");\n            } else {\n              _this5.toastr.success(data.message, \"Task sent successfully\");\n            }\n            _this5.getTaskboard(_this5.myteam.grop_id);\n          });\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"rejectTask\",\n    value: function rejectTask() {\n      var _this6 = this;\n\n      this._tasks.rejectTask(this.rjtask.task_id, this.rjtask.retk_description).subscribe(function (data) {\n        if (data.data != \"OK\") {\n          _this6.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this6.toastr.success(data.message, \"Task rejected\");\n        }\n        _this6.getTaskboard(_this6.myteam.grop_id);\n      });\n    }\n  }, {\n    key: \"collapseColumn\",\n    value: function collapseColumn(classC) {\n      var el = $(\".collapsed-box.\" + classC);\n      if (el.length > 0) {\n        $(\".collapsed-box.\" + classC).removeClass(\"collapsed-box\");\n      } else {\n        $(\".\" + classC).addClass(\"collapsed-box\");\n      }\n    }\n  }, {\n    key: \"getMyProjects\",\n    value: function getMyProjects() {\n      var _this7 = this;\n\n      this.myProjects = [];\n      this.selectedprojects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this7.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        _this7.selectedprojects = [0];\n        if (res.data.planning) {\n          var _iteratorNormalCompletion8 = true;\n          var _didIteratorError8 = false;\n          var _iteratorError8 = undefined;\n\n          try {\n            for (var _iterator8 = res.data.planning[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n              var c = _step8.value;\n\n              _this7.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n              _this7.selectedprojects.push(c.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError8 = true;\n            _iteratorError8 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                _iterator8.return();\n              }\n            } finally {\n              if (_didIteratorError8) {\n                throw _iteratorError8;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = res.data.buildup[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var _c = _step9.value;\n\n              _this7.myProjects.push({\n                label: _c.proj_id + \" \" + _c.proj_subject,\n                value: _c.proj_id,\n                idcolor: _c.idcolor\n              });\n              _this7.selectedprojects.push(_c.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion10 = true;\n          var _didIteratorError10 = false;\n          var _iteratorError10 = undefined;\n\n          try {\n            for (var _iterator10 = res.data.implementation[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n              var _c2 = _step10.value;\n\n              _this7.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n              _this7.selectedprojects.push(_c2.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError10 = true;\n            _iteratorError10 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                _iterator10.return();\n              }\n            } finally {\n              if (_didIteratorError10) {\n                throw _iteratorError10;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getTaskboard\",\n    value: function getTaskboard(grop_id) {\n      var _this8 = this;\n\n      this.spinner = true;\n      if (grop_id != 0 && this.mysprint.spri_id != 0) {\n        this._dashBoard.getTaskboard(this.mysprint.spri_id).subscribe(function (data) {\n          var pendingx = [];\n          var developingx = [];\n          var improvingx = [];\n          var completex = [];\n          var closex = [];\n          _this8.tasks = data.data;\n          if (_this8.tasks[42]) {\n            closex = closex.concat(_this8.tasks[42]);\n          }\n          _this8.close = closex;\n          if (_this8.tasks[35]) {\n            pendingx = pendingx.concat(_this8.tasks[35]);\n          }\n          if (_this8.tasks[36]) {\n            pendingx = pendingx.concat(_this8.tasks[36]);\n          }\n          if (_this8.tasks[37]) {\n            pendingx = pendingx.concat(_this8.tasks[37]);\n          }\n          _this8.pending = pendingx;\n          if (_this8.tasks[38]) {\n            developingx = developingx.concat(_this8.tasks[38]);\n          }\n          if (_this8.tasks[39]) {\n            developingx = developingx.concat(_this8.tasks[39]);\n          }\n          _this8.developing = developingx;\n          if (_this8.tasks[41]) {\n            improvingx = improvingx.concat(_this8.tasks[41]);\n          }\n          _this8.improving = improvingx;\n          if (_this8.tasks[40]) {\n            completex = completex.concat(_this8.tasks[40]);\n          }\n          _this8.complete = completex;\n          _this8.spinner = false;\n          _this8.getMyTaggedTasks();\n        });\n        this.events = [];\n        this._dailys.getPtsToday().subscribe(function (res) {\n          _this8.todaypts = res.data;\n        });\n      } else {\n        this.spinner = false;\n        this.tasks = [];\n      }\n    }\n  }, {\n    key: \"addEvent\",\n    value: function addEvent() {\n      this.task = { project: {}, attachments: [] };\n      $(\"#mdAddTask\").modal(\"show\");\n    }\n  }, {\n    key: \"onChangeNT\",\n    value: function onChangeNT(event) {\n      var files = event.srcElement.files;\n      this.note.attachments.push(files[0]);\n    }\n  }, {\n    key: \"deleteAttachmentNT\",\n    value: function deleteAttachmentNT(att) {\n      for (var i in this.note.attachments) {\n        if (this.note.attachments[i] === att) {\n          this.note.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event, action) {\n      if (action == \"new\") {\n        var files = event.files;\n        if (this.taskattch.attachments.length > 0) {\n          var _iteratorNormalCompletion11 = true;\n          var _didIteratorError11 = false;\n          var _iteratorError11 = undefined;\n\n          try {\n            for (var _iterator11 = this.taskattch.attachments[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n              var c = _step11.value;\n\n              if (files[0][\"name\"] == c.name) {} else {\n                this.taskattch.attachments.push(files[0]);\n              }\n            }\n          } catch (err) {\n            _didIteratorError11 = true;\n            _iteratorError11 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                _iterator11.return();\n              }\n            } finally {\n              if (_didIteratorError11) {\n                throw _iteratorError11;\n              }\n            }\n          }\n        } else {\n          this.taskattch.attachments.push(files[0]);\n        }\n      } else if (action == \"delete\") {\n        var file = event.file;\n        var _iteratorNormalCompletion12 = true;\n        var _didIteratorError12 = false;\n        var _iteratorError12 = undefined;\n\n        try {\n          for (var _iterator12 = this.taskattch.attachments[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n            var _c3 = _step12.value;\n\n            if (file[\"name\"] == _c3.name) {\n              var posattch = this.taskattch.attachments.indexOf(_c3);\n              this.taskattch.attachments.splice(posattch);\n            }\n          }\n        } catch (err) {\n          _didIteratorError12 = true;\n          _iteratorError12 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion12 && _iterator12.return) {\n              _iterator12.return();\n            }\n          } finally {\n            if (_didIteratorError12) {\n              throw _iteratorError12;\n            }\n          }\n        }\n      }\n    }\n  }, {\n    key: \"onUploadAttachment\",\n    value: function onUploadAttachment(taskid) {\n      var _this9 = this;\n\n      if (taskid) {\n        this.taskattch.task_id = taskid;\n        this._tasks.putAttachments(this.taskattch).subscribe(function (res) {\n          if (res.data === \"\" || res.data === \"0\") {\n            _this9.toastr.error(res.message, \"Error!\");\n          } else {\n            _this9.toastr.success(res.message, \"Attachments uploaded successfully\");\n            _this9.taskattch.attachments = [];\n            _this9.getAttachments(taskid);\n          }\n        });\n      }\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this10 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this10.toastr.error(res.message, \"Error!\");\n            } else {\n              _this10.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this10.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(taskid) {\n      var _this11 = this;\n\n      this._tasks.getAttachments(taskid).subscribe(function (res) {\n        _this11.mdT.attachments = res.data;\n        _this11.task.attachments = res.data;\n        for (var i = 0; i < _this11.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this11.mdT.total_attachments = 1;\n          } else {\n            _this11.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this11.task.attachments.length; i++) {\n          if (i == 0) {\n            _this11.task.total_attachments = 1;\n          } else {\n            _this11.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"editModal\",\n    value: function editModal(ev) {\n      if (!ev.attachments) {\n        ev.attachments = [];\n      }\n      this.note = { attachments: [] };\n      this.task = ev;\n      this.getAttachments(ev.task_id);\n      this.getComments(ev.task_id);\n      $(\"#addDescription\").removeClass(\"in\");\n    }\n  }, {\n    key: \"getComments\",\n    value: function getComments(tk) {\n      var _this12 = this;\n\n      this.mdT.comments = [];\n      this._tasks.getComments(tk).subscribe(function (res) {\n        _this12.task.comments = res.data;\n        _this12.mdT.comments = res.data;\n        var elem = document.getElementById(\"mdTComments\");\n        var elem2 = document.getElementById(\"taskComments\");\n        if (elem && elem2) {\n          elem.scrollTop = elem.scrollHeight;\n          elem2.scrollTop = elem2.scrollHeight;\n        }\n        return res.data;\n      });\n      this.note_text = \"\";\n      this.note = { attachments: [] };\n    }\n  }, {\n    key: \"setTime\",\n    value: function setTime(tk) {\n      this.showCurrentDate();\n      this.extra.task_id = tk.task_id;\n      this.extra.old_points = tk.task_points;\n      this.task = tk;\n    }\n  }, {\n    key: \"saveExtra\",\n    value: function saveExtra() {\n      var _this13 = this;\n\n      this.extra.delivery = this.extra.delivery.getFullYear() + \"-\" + (this.extra.delivery.getMonth() + 1) + \"-\" + this.extra.delivery.getDate();\n      var points_diff = parseFloat(this.extra.old_points) + parseFloat(this.extra.points);\n      if (points_diff > 0) {\n        this._tasks.putExtra(this.extra).subscribe(function (res) {\n          if (res.message == \"OK\") {\n            _this13.toastr.success(res.message, \"Task adjusted\");\n          } else {\n            _this13.toastr.error(res.message, \"Error!\");\n          }\n          _this13.extra = { points: 1, text: \"\", delivery: \"\" };\n          _this13.getTaskboard(_this13.myteam.grop_id);\n        });\n      } else {\n        this.toastr.error(\"Invalid adjustment. Duration can not equal to zero\", \"Error!\");\n      }\n    }\n  }, {\n    key: \"compareDate\",\n    value: function compareDate(date) {\n      if (this.day.dail_date != undefined && this.day.dail_date != \"\" && typeof this.day.dail_date != \"string\" && date != undefined) {\n        var date_aux = new Date(date.replace(\"-\", \"/\"));\n\n        if (this.day.dail_date.getTime() > date_aux.getTime()) {\n          return 1;\n        } else if (this.day.dail_date.getTime() < date_aux.getTime()) {\n          return -1;\n        } else {\n          return 0;\n        }\n      } else {\n        return false;\n      }\n    }\n  }, {\n    key: \"setTask\",\n    value: function setTask(idtk) {\n      var _this14 = this;\n\n      this.day = { dail_date: \"\", dail_points: \"\" };\n      this.mcT = { project: {} };\n      this.maxDateDaily = new Date();\n      this.minDateDaily = null;\n\n      this.minDateDaily = new Date(idtk.spri_init.replace(\"-\", \"/\"));\n      var spri_end = new Date(idtk.spri_end.replace(\"-\", \"/\"));\n\n      if (spri_end.getTime() < this.maxDateDaily.getTime()) {\n        this.maxDateDaily = spri_end;\n      }\n\n      this.day.dail_points = parseFloat(idtk.task_points - idtk.task_pointsd).toFixed(2);\n      if (idtk.unit_points) {\n        this.day.unit_points = idtk.unit_points - idtk.unit_pointsd;\n        this.day.unit_id = idtk.unit_id;\n      }\n      if (!idtk.proj_id) {\n        this.mcT = idtk;\n      } else {\n        this._projects.getproject(idtk.proj_id).subscribe(function (res) {\n          _this14.mcT = idtk;\n          _this14.mcT.project = res.data;\n        });\n      }\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this15 = this;\n\n      if (this.task.task_description2) {\n        this.task.task_description = this.task.task_description2;\n      }\n      if (this.task.task_description) {\n        this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n        this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n        this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      }\n      if (this.task.task_delivery) {\n        this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      }\n      this._tasks.putTask(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this15.toastr.error(data.message, \"Error!\");\n        } else {\n          _this15.task.task_id = data.data;\n          if (_this15.taskattch.attachments.length > 0) {\n            _this15.taskattch.task_id = _this15.task.task_id;\n            _this15._tasks.putAttachments(_this15.taskattch).subscribe(function (res) {\n              if (res.data === \"\" || res.data === \"0\") {\n                _this15.toastr.error(res.message, \"Error!\");\n              } else {\n                _this15.taskattch.attachments = [];\n              }\n            });\n          }\n          _this15.toastr.success(data.message, \"Task saved successfully\");\n          // $(\"#mdRequestTask\").modal(\"hide\");\n          // this.reloadTaskboard();\n        }\n        $(\"#clform2\").click();\n        // this.getTaskboard();\n        _this15.getRequests();\n        _this15.task = { project: {}, attachments: [] };\n      });\n    }\n  }, {\n    key: \"saveproject\",\n    value: function saveproject() {\n      var _this16 = this;\n\n      if (this.task.task_description) {\n        this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n        this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      }\n      if (this.task.task_delivery) {\n        this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      }\n      this._projects.putFromEvent(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this16.toastr.error(data.message, \"Error!\");\n        } else {\n          _this16.toastr.success(data.message, \"Saved Successfully\");\n        }\n        _this16.getMyProjects();\n        _this16.task = { project: {}, attachments: [] };\n      });\n    }\n  }, {\n    key: \"saveDaily\",\n    value: function saveDaily(dv, idtask) {\n      var _this17 = this;\n\n      if (dv.dail_date && dv.dail_date != \"\" && dv.dail_date != undefined && dv.dail_text && dv.dail_text.trim() != \"\" && dv.dail_points && dv.dail_points != null && dv.dail_points > 0) {\n\n        dv.task_id = idtask;\n        dv.dail_date = dv.dail_date.getFullYear() + \"-\" + (dv.dail_date.getMonth() + 1) + \"-\" + dv.dail_date.getDate();\n        if (parseInt(this.mcT.task_pointsd) + parseInt(dv.dail_points) > this.mcT.task_points) {\n          this.toastr.error(\"Points selected exceed current task duration\", \"Error!\");\n        } else {\n          this._daily.putDaily(dv).subscribe(function (data) {\n            if (data.data == \"OK\") {\n              _this17.toastr.success(data.message, \"Daily saved Successfully\");\n            } else {\n              _this17.toastr.warning(data.message, \"Action not allowed\");\n            }\n            _this17.day = { dail_date: \"\", dail_points: \"\" };\n            _this17.mcT = { project: {} };\n            _this17.maxDateDaily = new Date();\n            _this17.minDateDaily = null;\n            _this17.getTaskboard(_this17.myteam.grop_id);\n          });\n        }\n      } else {\n        this.toastr.warning(\"¡ Empty fields !\");\n      }\n    }\n  }, {\n    key: \"closeDaily\",\n    value: function closeDaily() {\n      this.day = { dail_date: \"\", dail_points: \"\" };\n      this.mcT = { project: {} };\n      this.maxDateDaily = new Date();\n      this.minDateDaily = null;\n    }\n  }, {\n    key: \"closeTask\",\n    value: function closeTask(tk) {\n      var _this18 = this;\n\n      this._tasks.setStatusTask(tk.task_id, 42).subscribe(function (data) {\n        if (data.data != \"OK\") {\n          _this18.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this18.toastr.success(data.message, \"Task closed successfully\");\n          _this18.getTaskboard(_this18.myteam.grop_id);\n        }\n      });\n    }\n  }, {\n    key: \"parseFloat\",\n    value: function (_parseFloat) {\n      function parseFloat(_x) {\n        return _parseFloat.apply(this, arguments);\n      }\n\n      parseFloat.toString = function () {\n        return _parseFloat.toString();\n      };\n\n      return parseFloat;\n    }(function (pts) {\n      return Math.round(parseFloat(pts) * 100) / 100;\n    })\n  }, {\n    key: \"getBackground\",\n    value: function getBackground(idproject) {\n      if (idproject) {\n        var _iteratorNormalCompletion13 = true;\n        var _didIteratorError13 = false;\n        var _iteratorError13 = undefined;\n\n        try {\n          for (var _iterator13 = this.myProjects[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {\n            var t = _step13.value;\n\n            if (t.value == idproject) {\n              return t.idcolor;\n            }\n          }\n        } catch (err) {\n          _didIteratorError13 = true;\n          _iteratorError13 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion13 && _iterator13.return) {\n              _iterator13.return();\n            }\n          } finally {\n            if (_didIteratorError13) {\n              throw _iteratorError13;\n            }\n          }\n        }\n      }\n      return \"#fff\";\n    }\n  }, {\n    key: \"round\",\n    value: function round(value, n) {\n      if (!n || n == 0) {\n        n = 1;\n      } else {\n        n = 10 * n;\n      }\n      return Math.round(value * n) / n;\n    }\n  }, {\n    key: \"editTask\",\n    value: function editTask() {\n      var _this19 = this;\n\n      this.mdT.task_delivery = new Date(this.mdT.task_delivery);\n      this.mdT.task_delivery = this.mdT.task_delivery.getFullYear() + \"-\" + (this.mdT.task_delivery.getMonth() + 1) + \"-\" + this.mdT.task_delivery.getDate();\n      this._tasks.editTask(this.mdT).subscribe(function (result) {\n        if (result.data == \"OK\") {\n          _this19.toastr.success(result.message, \"Task edited successfully\");\n        } else {\n          _this19.toastr.error(result.message, \"Error!\");\n        }\n        // this.mdTtask = { points: 1, text: \"\", delivery: \"\" };\n        _this19.getTaskboard(_this19.myteam.grop_id);\n      });\n    }\n  }, {\n    key: \"getCategories\",\n    value: function getCategories() {\n      var _this20 = this;\n\n      this.categories = [];\n      this.catIds = [];\n      this._categories.getCategories().subscribe(function (res) {\n        var _iteratorNormalCompletion14 = true;\n        var _didIteratorError14 = false;\n        var _iteratorError14 = undefined;\n\n        try {\n          for (var _iterator14 = res.data[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {\n            var c = _step14.value;\n\n            if (_this20.catIds.indexOf(c.cate_id) < 0) {\n              _this20.categories.push({\n                label: c.cate_desc,\n                value: c.cate_id,\n                approvalusers: [],\n                reqapproval: c.cate_appr\n              });\n              _this20.categoryMenu.push(c.cate_desc.toLowerCase());\n              _this20.catIds.push(c.cate_id);\n              for (var v = 0; v < _this20.categories.length; v++) {\n                if (_this20.categories[v].value == c.cate_id) {\n                  _this20.categories[v].approvalusers.push({\n                    label: c.user_name,\n                    value: c.user_id\n                  });\n                }\n              }\n            } else {\n              for (var i = 0; i < _this20.categories.length; i++) {\n                if (_this20.categories[i].value == c.cate_id) {\n                  _this20.categories[i].approvalusers.push({\n                    label: c.user_name,\n                    value: c.user_id\n                  });\n                }\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError14 = true;\n          _iteratorError14 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion14 && _iterator14.return) {\n              _iterator14.return();\n            }\n          } finally {\n            if (_didIteratorError14) {\n              throw _iteratorError14;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"updateCatSelect\",\n    value: function updateCatSelect(cat) {\n      var cat_array = [];\n      this.selectedCategory.cate_id = cat;\n      var _iteratorNormalCompletion15 = true;\n      var _didIteratorError15 = false;\n      var _iteratorError15 = undefined;\n\n      try {\n        for (var _iterator15 = this.categories[Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) {\n          var c = _step15.value;\n\n          cat_array.push(c.value);\n          if (cat_array.indexOf(cat) >= 0 && c.value == cat && c.reqapproval == 1) {\n            this.task.task_approved = 0;\n          } else if (cat_array.indexOf(cat) >= 0 && c.value == cat && c.reqapproval == 0) {\n            this.task.task_approved = 1;\n          } else if (cat_array.indexOf(cat) < 0) {\n            this.task.task_approved = 1;\n          }\n        }\n      } catch (err) {\n        _didIteratorError15 = true;\n        _iteratorError15 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion15 && _iterator15.return) {\n            _iterator15.return();\n          }\n        } finally {\n          if (_didIteratorError15) {\n            throw _iteratorError15;\n          }\n        }\n      }\n    }\n  }, {\n    key: \"getMyTags\",\n    value: function getMyTags() {\n      var _this21 = this;\n\n      this.mytags = [];\n      var counttag = [];\n      this._tasks.getMyTags().subscribe(function (res) {\n        var _iteratorNormalCompletion16 = true;\n        var _didIteratorError16 = false;\n        var _iteratorError16 = undefined;\n\n        try {\n          for (var _iterator16 = res.data[Symbol.iterator](), _step16; !(_iteratorNormalCompletion16 = (_step16 = _iterator16.next()).done); _iteratorNormalCompletion16 = true) {\n            var c = _step16.value;\n\n            if (c.tag_id && c.tag_id != \"\" && counttag.indexOf(c.tag_id) < 0) {\n              _this21.mytags.push({\n                tag_id: c.tag_id,\n                icon: c.icon,\n                color: c.color,\n                description: c.description\n              });\n              counttag.push(c.tag_id);\n            }\n          }\n        } catch (err) {\n          _didIteratorError16 = true;\n          _iteratorError16 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion16 && _iterator16.return) {\n              _iterator16.return();\n            }\n          } finally {\n            if (_didIteratorError16) {\n              throw _iteratorError16;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getTagsByTask\",\n    value: function getTagsByTask(task_id) {\n      var _this22 = this;\n\n      this.tagbytask = {};\n      this._tasks.getTagsByTask(task_id).subscribe(function (res) {\n        if (res) {\n          _this22.tagbytask = res.data;\n        }\n      });\n    }\n  }, {\n    key: \"deleteTagsByTask\",\n    value: function deleteTagsByTask(task_id, tag_id) {\n      var _this23 = this;\n\n      this._tasks.deleteTagsByTask(task_id, tag_id).subscribe(function (res) {\n        if (res.data != null) {\n          _this23.toastr.success(res.message, \"Tag deleted successfully\");\n          _this23.getTagsByTask(task_id);\n          _this23.getMyTaggedTasks();\n        } else {\n          _this23.toastr.warning(\"\", res.message);\n        }\n      });\n    }\n  }, {\n    key: \"getMyTaggedTasks\",\n    value: function getMyTaggedTasks() {\n      var _this24 = this;\n\n      var _iteratorNormalCompletion17 = true;\n      var _didIteratorError17 = false;\n      var _iteratorError17 = undefined;\n\n      try {\n        for (var _iterator17 = this.events[Symbol.iterator](), _step17; !(_iteratorNormalCompletion17 = (_step17 = _iterator17.next()).done); _iteratorNormalCompletion17 = true) {\n          var e = _step17.value;\n\n          e.tags = [];\n        }\n      } catch (err) {\n        _didIteratorError17 = true;\n        _iteratorError17 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion17 && _iterator17.return) {\n            _iterator17.return();\n          }\n        } finally {\n          if (_didIteratorError17) {\n            throw _iteratorError17;\n          }\n        }\n      }\n\n      var _iteratorNormalCompletion18 = true;\n      var _didIteratorError18 = false;\n      var _iteratorError18 = undefined;\n\n      try {\n        for (var _iterator18 = this.pending[Symbol.iterator](), _step18; !(_iteratorNormalCompletion18 = (_step18 = _iterator18.next()).done); _iteratorNormalCompletion18 = true) {\n          var p = _step18.value;\n\n          p.tags = [];\n        }\n      } catch (err) {\n        _didIteratorError18 = true;\n        _iteratorError18 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion18 && _iterator18.return) {\n            _iterator18.return();\n          }\n        } finally {\n          if (_didIteratorError18) {\n            throw _iteratorError18;\n          }\n        }\n      }\n\n      var _iteratorNormalCompletion19 = true;\n      var _didIteratorError19 = false;\n      var _iteratorError19 = undefined;\n\n      try {\n        for (var _iterator19 = this.developing[Symbol.iterator](), _step19; !(_iteratorNormalCompletion19 = (_step19 = _iterator19.next()).done); _iteratorNormalCompletion19 = true) {\n          var d = _step19.value;\n\n          d.tags = [];\n        }\n      } catch (err) {\n        _didIteratorError19 = true;\n        _iteratorError19 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion19 && _iterator19.return) {\n            _iterator19.return();\n          }\n        } finally {\n          if (_didIteratorError19) {\n            throw _iteratorError19;\n          }\n        }\n      }\n\n      var _iteratorNormalCompletion20 = true;\n      var _didIteratorError20 = false;\n      var _iteratorError20 = undefined;\n\n      try {\n        for (var _iterator20 = this.improving[Symbol.iterator](), _step20; !(_iteratorNormalCompletion20 = (_step20 = _iterator20.next()).done); _iteratorNormalCompletion20 = true) {\n          var i = _step20.value;\n\n          i.tags = [];\n        }\n      } catch (err) {\n        _didIteratorError20 = true;\n        _iteratorError20 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion20 && _iterator20.return) {\n            _iterator20.return();\n          }\n        } finally {\n          if (_didIteratorError20) {\n            throw _iteratorError20;\n          }\n        }\n      }\n\n      var _iteratorNormalCompletion21 = true;\n      var _didIteratorError21 = false;\n      var _iteratorError21 = undefined;\n\n      try {\n        for (var _iterator21 = this.complete[Symbol.iterator](), _step21; !(_iteratorNormalCompletion21 = (_step21 = _iterator21.next()).done); _iteratorNormalCompletion21 = true) {\n          var comp = _step21.value;\n\n          comp.tags = [];\n        }\n      } catch (err) {\n        _didIteratorError21 = true;\n        _iteratorError21 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion21 && _iterator21.return) {\n            _iterator21.return();\n          }\n        } finally {\n          if (_didIteratorError21) {\n            throw _iteratorError21;\n          }\n        }\n      }\n\n      var _iteratorNormalCompletion22 = true;\n      var _didIteratorError22 = false;\n      var _iteratorError22 = undefined;\n\n      try {\n        for (var _iterator22 = this.close[Symbol.iterator](), _step22; !(_iteratorNormalCompletion22 = (_step22 = _iterator22.next()).done); _iteratorNormalCompletion22 = true) {\n          var cl = _step22.value;\n\n          cl.tags = [];\n        }\n      } catch (err) {\n        _didIteratorError22 = true;\n        _iteratorError22 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion22 && _iterator22.return) {\n            _iterator22.return();\n          }\n        } finally {\n          if (_didIteratorError22) {\n            throw _iteratorError22;\n          }\n        }\n      }\n\n      this._tasks.getMyTags().subscribe(function (res) {\n        var _iteratorNormalCompletion23 = true;\n        var _didIteratorError23 = false;\n        var _iteratorError23 = undefined;\n\n        try {\n          for (var _iterator23 = res.data[Symbol.iterator](), _step23; !(_iteratorNormalCompletion23 = (_step23 = _iterator23.next()).done); _iteratorNormalCompletion23 = true) {\n            var c = _step23.value;\n            var _iteratorNormalCompletion24 = true;\n            var _didIteratorError24 = false;\n            var _iteratorError24 = undefined;\n\n            try {\n              for (var _iterator24 = _this24.events[Symbol.iterator](), _step24; !(_iteratorNormalCompletion24 = (_step24 = _iterator24.next()).done); _iteratorNormalCompletion24 = true) {\n                var _e = _step24.value;\n\n                if (_e.task_id == c.task_id) {\n                  if (!_e.tags || _e.tags.length == 0) {\n                    _e.tags = [];\n                    _e.tags.push(c);\n                  } else {\n                    _e.tags.push(c);\n                  }\n                }\n              }\n            } catch (err) {\n              _didIteratorError24 = true;\n              _iteratorError24 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion24 && _iterator24.return) {\n                  _iterator24.return();\n                }\n              } finally {\n                if (_didIteratorError24) {\n                  throw _iteratorError24;\n                }\n              }\n            }\n\n            var _iteratorNormalCompletion25 = true;\n            var _didIteratorError25 = false;\n            var _iteratorError25 = undefined;\n\n            try {\n              for (var _iterator25 = _this24.pending[Symbol.iterator](), _step25; !(_iteratorNormalCompletion25 = (_step25 = _iterator25.next()).done); _iteratorNormalCompletion25 = true) {\n                var _p = _step25.value;\n\n                if (_p.task_id == c.task_id) {\n                  if (!_p.tags || _p.tags.length == 0) {\n                    _p.tags = [];\n                    _p.tags.push(c);\n                  } else {\n                    _p.tags.push(c);\n                  }\n                }\n              }\n            } catch (err) {\n              _didIteratorError25 = true;\n              _iteratorError25 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion25 && _iterator25.return) {\n                  _iterator25.return();\n                }\n              } finally {\n                if (_didIteratorError25) {\n                  throw _iteratorError25;\n                }\n              }\n            }\n\n            var _iteratorNormalCompletion26 = true;\n            var _didIteratorError26 = false;\n            var _iteratorError26 = undefined;\n\n            try {\n              for (var _iterator26 = _this24.developing[Symbol.iterator](), _step26; !(_iteratorNormalCompletion26 = (_step26 = _iterator26.next()).done); _iteratorNormalCompletion26 = true) {\n                var _d = _step26.value;\n\n                if (_d.task_id == c.task_id) {\n                  if (!_d.tags || _d.tags.length == 0) {\n                    _d.tags = [];\n                    _d.tags.push(c);\n                  } else {\n                    _d.tags.push(c);\n                  }\n                }\n              }\n            } catch (err) {\n              _didIteratorError26 = true;\n              _iteratorError26 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion26 && _iterator26.return) {\n                  _iterator26.return();\n                }\n              } finally {\n                if (_didIteratorError26) {\n                  throw _iteratorError26;\n                }\n              }\n            }\n\n            var _iteratorNormalCompletion27 = true;\n            var _didIteratorError27 = false;\n            var _iteratorError27 = undefined;\n\n            try {\n              for (var _iterator27 = _this24.improving[Symbol.iterator](), _step27; !(_iteratorNormalCompletion27 = (_step27 = _iterator27.next()).done); _iteratorNormalCompletion27 = true) {\n                var _i = _step27.value;\n\n                if (_i.task_id == c.task_id) {\n                  if (!_i.tags || _i.tags.length == 0) {\n                    _i.tags = [];\n                    _i.tags.push(c);\n                  } else {\n                    _i.tags.push(c);\n                  }\n                }\n              }\n            } catch (err) {\n              _didIteratorError27 = true;\n              _iteratorError27 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion27 && _iterator27.return) {\n                  _iterator27.return();\n                }\n              } finally {\n                if (_didIteratorError27) {\n                  throw _iteratorError27;\n                }\n              }\n            }\n\n            var _iteratorNormalCompletion28 = true;\n            var _didIteratorError28 = false;\n            var _iteratorError28 = undefined;\n\n            try {\n              for (var _iterator28 = _this24.complete[Symbol.iterator](), _step28; !(_iteratorNormalCompletion28 = (_step28 = _iterator28.next()).done); _iteratorNormalCompletion28 = true) {\n                var _comp = _step28.value;\n\n                if (_comp.task_id == c.task_id) {\n                  if (!_comp.tags || _comp.tags.length == 0) {\n                    _comp.tags = [];\n                    _comp.tags.push(c);\n                  } else {\n                    _comp.tags.push(c);\n                  }\n                }\n              }\n            } catch (err) {\n              _didIteratorError28 = true;\n              _iteratorError28 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion28 && _iterator28.return) {\n                  _iterator28.return();\n                }\n              } finally {\n                if (_didIteratorError28) {\n                  throw _iteratorError28;\n                }\n              }\n            }\n\n            var _iteratorNormalCompletion29 = true;\n            var _didIteratorError29 = false;\n            var _iteratorError29 = undefined;\n\n            try {\n              for (var _iterator29 = _this24.close[Symbol.iterator](), _step29; !(_iteratorNormalCompletion29 = (_step29 = _iterator29.next()).done); _iteratorNormalCompletion29 = true) {\n                var _cl = _step29.value;\n\n                if (_cl.task_id == c.task_id) {\n                  if (!_cl.tags || _cl.tags.length == 0) {\n                    _cl.tags = [];\n                    _cl.tags.push(c);\n                  } else {\n                    _cl.tags.push(c);\n                  }\n                }\n              }\n            } catch (err) {\n              _didIteratorError29 = true;\n              _iteratorError29 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion29 && _iterator29.return) {\n                  _iterator29.return();\n                }\n              } finally {\n                if (_didIteratorError29) {\n                  throw _iteratorError29;\n                }\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError23 = true;\n          _iteratorError23 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion23 && _iterator23.return) {\n              _iterator23.return();\n            }\n          } finally {\n            if (_didIteratorError23) {\n              throw _iteratorError23;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"showTags\",\n    value: function showTags(tk) {\n      this.getMyTags();\n      this.getTagsByTask(tk.task_id);\n      this.tagMenu = 1;\n      this.tagSubmenu = 0;\n      this.chosenTag = { pattern: \"\", color: \"\", name: \"\" };\n      this.task = tk;\n      this.patterns = [\"fa fa-snowflake-o\", \"fa fa-star\", \"fa fa-rocket\", \"fa fa-diamond\", \"fa fa-headphones\", \"fa fa-clock-o\", \"fa fa-heart\", \"fa fa-thumbs-up\", \"fa fa-tree\"];\n      this.colorpalette = [\"#0FB4FF\", \"#007BD2\", \"#BA2D65\", \"#120480\", \"#670983\", \"#A108D9\", \"#F01458\", \"#D158D6\", \"#F8410A\", \"#F56363\", \"#F85F31\", \"#F78D4A\", \"#92CC66\", \"#CCD153\", \"#FFBE2C\", \"#F29E00\", \"#64AF2C\", \"#09C398\", \"#06D9D2\", \"#D50000\"];\n      $(\"#task_tag\").modal(\"show\");\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n        this.tagSubmenu = 0;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n        this.tagSubmenu = 1;\n      }\n      if (opt == 3) {\n        this.tagMenu = 3;\n        this.tagSubmenu = 0;\n      }\n    }\n  }, {\n    key: \"setPagex\",\n    value: function setPagex(opt) {\n      if (opt == 1) {\n        this.tagMenux = 1;\n      }\n      if (opt == 2) {\n        this.tagMenux = 2;\n      }\n      if (opt == 3) {\n        this.tagMenux = 3;\n      }\n      if (opt == 4) {\n        this.tagMenux = 4;\n      }\n    }\n  }, {\n    key: \"slidePage\",\n    value: function slidePage(dir) {\n      if (dir == \"prev\" && this.tagSubmenu > 1) {\n        this.tagSubmenu = this.tagSubmenu - 1;\n      } else if (dir == \"next\" && this.tagSubmenu < 3) {\n        this.tagSubmenu = this.tagSubmenu + 1;\n      }\n    }\n  }, {\n    key: \"chooseTagOption\",\n    value: function chooseTagOption(item, type) {\n      switch (type) {\n        case 1:\n          this.chosenTag.pattern = item;\n          if ($(\".menu-tiles\").hasClass(\"chosen-option\")) {\n            $(\".menu-tiles\").removeClass(\"chosen-option\");\n          }\n          break;\n        case 2:\n          this.chosenTag.color = item;\n          if ($(\".menu-brick\").hasClass(\"chosen-option\")) {\n            $(\".menu-brick\").removeClass(\"chosen-option\");\n          }\n          break;\n        case 3:\n          this.chosenTag.name = item;\n          break;\n        case 4:\n          this.chosenTag = item;\n          if ($(\".preview-tag-medium\").hasClass(\"chosen-option\")) {\n            $(\".preview-tag-medium\").removeClass(\"chosen-option\");\n          }\n          break;\n        default:\n          break;\n      }\n    }\n  }, {\n    key: \"saveNewTag\",\n    value: function saveNewTag() {\n      var _this25 = this;\n\n      if (this.chosenTag.tag_id == \"\" || !this.chosenTag.tag_id || this.chosenTag.tag_id == null) {\n        this._tasks.saveNewTag(this.chosenTag).subscribe(function (res) {\n          _this25.chosenTag.tag_id = res.data;\n          _this25.chosenTag.description = _this25.chosenTag.name;\n          _this25.getMyTaggedTasks();\n          _this25.toastr.success(res.message, \"Tag added successfully\");\n          $(\"#task_tag\").modal(\"hide\");\n        });\n      }\n    }\n  }, {\n    key: \"setTag\",\n    value: function setTag() {\n      var _this26 = this;\n\n      var data = {\n        task_id: this.task.task_id,\n        tag_id: this.chosenTag.tag_id,\n        description: this.chosenTag.description\n      };\n      this._tasks.setTag(data).subscribe(function (res) {\n        if (res.data != null) {\n          _this26.toastr.success(\"\", res.message);\n          _this26.getMyTaggedTasks();\n          _this26.getTagsByTask(res.data.task_id);\n          $(\"#task_tag\").modal(\"hide\");\n        } else {\n          _this26.toastr.warning(\"\", res.message);\n        }\n      });\n    }\n  }, {\n    key: \"showFilter\",\n    value: function showFilter() {\n      $(\"#sq-eraser > i\").css(\"color\", \"#b3dfff\");\n      $(\"#sq-eraser > i\").css(\"cursor\", \"not-allowed\");\n    }\n  }, {\n    key: \"seek\",\n    value: function seek(elemen) {\n      var index = this.keylist.indexOf(elemen.target.nextSibling.innerText);\n      if (this.keylist.length > 1) {\n        this.keylist.splice(index, 1);\n        this.regexFromMyArray = new RegExp(this.keylist.join(\"|\"), \"gi\");\n      } else {\n        this.keylist = [];\n        this.regexFromMyArray = new RegExp(\"/''/\", \"gi\");\n        $(\"#crumbs\").hide();\n      }\n      setTimeout(function config() {\n        var cantidad = 0;\n        cantidad = $(\".tabInfo\").length;\n        $(\"#total\").text(cantidad + \" results\");\n\n        $(\".description\").each(function (index) {\n          var new_text = $(this).text().replace(/<\\/?.+?>/gi, \"\");\n          $(this).text(new_text);\n        });\n      }, 100);\n    }\n  }, {\n    key: \"close\",\n    value: function close() {}\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.keylist = [];\n      this.globalist = {};\n      this.taskslist = [];\n      $(\"#item-key\").empty();\n      $(\"#crumbs\").hide();\n      $(\".sq sq-delete\").css(\"color\", \"#b3dfff\");\n      $(\"sq sq-delete\").css(\"cursor\", \"not-allowed\");\n    }\n  }, {\n    key: \"load_globalist\",\n    value: function load_globalist() {\n      $(\"#sq-eraser\").css(\"pointer-events\", \"auto\");\n      $(\"#sq-eraser > i\").css(\"color\", \"#007bd2\");\n      $(\"#sq-eraser > i\").css(\"cursor\", \"pointer\");\n      if (this.keylist.length > 0) {\n        this.regexFromMyArray = new RegExp(this.keylist.join(\"|\"), \"gi\");\n\n        $(\"#crumbs\").show();\n\n        if (this.taskslist.length > 0) {\n          this.taskslist = [];\n        }\n        var task_arr = Object.values(this.tasks);\n        var _iteratorNormalCompletion30 = true;\n        var _didIteratorError30 = false;\n        var _iteratorError30 = undefined;\n\n        try {\n          for (var _iterator30 = task_arr[Symbol.iterator](), _step30; !(_iteratorNormalCompletion30 = (_step30 = _iterator30.next()).done); _iteratorNormalCompletion30 = true) {\n            var task_inner = _step30.value;\n            var _iteratorNormalCompletion31 = true;\n            var _didIteratorError31 = false;\n            var _iteratorError31 = undefined;\n\n            try {\n              for (var _iterator31 = task_inner[Symbol.iterator](), _step31; !(_iteratorNormalCompletion31 = (_step31 = _iterator31.next()).done); _iteratorNormalCompletion31 = true) {\n                var task_obj = _step31.value;\n\n                this.taskslist.push(task_obj);\n              }\n            } catch (err) {\n              _didIteratorError31 = true;\n              _iteratorError31 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion31 && _iterator31.return) {\n                  _iterator31.return();\n                }\n              } finally {\n                if (_didIteratorError31) {\n                  throw _iteratorError31;\n                }\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError30 = true;\n          _iteratorError30 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion30 && _iterator30.return) {\n              _iterator30.return();\n            }\n          } finally {\n            if (_didIteratorError30) {\n              throw _iteratorError30;\n            }\n          }\n        }\n\n        this.globalist = {\n          tasks: this.taskslist\n        };\n\n        setTimeout(function config() {\n          var cantidad = 0;\n          cantidad = $(\".tabInfo\").length;\n          $(\"#total\").text(cantidad + \" results\");\n\n          $(\".description\").each(function (index) {\n            var new_text = $(this).text().replace(/<\\/?.+?>/gi, \"\");\n            $(this).text(new_text);\n          });\n        }, 100);\n      }\n    }\n  }, {\n    key: \"showMainFilter\",\n    value: function showMainFilter(num) {\n      if (this.selectedProduct.length == 0) {\n        this.selectedProduct = [];\n        for (var t in this.products) {\n          this.selectedProduct.push(this.products[t].value);\n        }\n      }\n      if (this.selectedprojects.length == 0) {\n        this.selectedprojects = [];\n        for (var t in this.myProjects) {\n          this.selectedprojects.push(this.myProjects[t].value);\n        }\n      }\n      $(\"#mdMainFilter\").modal(\"show\");\n    }\n  }, {\n    key: \"searchFilter\",\n    value: function searchFilter(num) {}\n  }, {\n    key: \"clearFilter\",\n    value: function clearFilter() {\n      this.selectedProduct = [];\n      this.selectedprojects = [];\n      this.selectedNodes = [];\n      this.searchproject = \"\";\n      this.searchproduct = \"\";\n      this.searchuser = \"\";\n      this.updateSelect(event);\n    }\n  }, {\n    key: \"selectAllItems\",\n    value: function selectAllItems(num) {\n      if (num == 1) {\n        if (this.selectedProduct.length > 0) {\n          this.selectedProduct = [];\n        } else {\n          this.selectedProduct = [];\n          for (var t in this.products) {\n            this.selectedProduct.push(this.products[t].value);\n          }\n        }\n      }\n      if (num == 2) {\n        if (this.selectedprojects.length > 0) {\n          this.selectedprojects = [];\n        } else {\n          this.selectedprojects = [];\n          for (var t in this.myProjects) {\n            this.selectedprojects.push(this.myProjects[t].value);\n          }\n        }\n      }\n      if (num == 3) {\n        if (this.selectedNodes.length > 0) {\n          this.selectedNodes = [];\n        } else {\n          this.selectedNodes = [];\n          for (var t in this.contactsTree) {\n            this.selectedNodes.push(this.contactsTree[t].data);\n            if (this.contactsTree[t].children.length > 0) {\n              for (var c in this.contactsTree[t].children) {\n                this.selectedNodes.push(this.contactsTree[t].children[c].data);\n              }\n            }\n          }\n        }\n      }\n      this.updateSelect(event);\n    }\n  }, {\n    key: \"selectAllChildrens\",\n    value: function selectAllChildrens(childrens, idparent) {\n      var m = 0;\n      var n = 0;\n      for (var x in this.selectedNodes) {\n        if (this.selectedNodes[x] == idparent) {\n          m++;\n        } else {\n          n++;\n        }\n      }\n\n      if (m == 1 && n == 0) {\n        this.selectedNodes = [];\n        this.selectedNodes.push(idparent);\n        if (childrens.length > 0) {\n          for (var c in childrens) {\n            if (m == 1) {\n              this.selectedNodes.push(childrens[c].data);\n            }\n          }\n        }\n      } else {\n        this.selectedNodes = [];\n      }\n    }\n  }, {\n    key: \"seek\",\n    value: function seek(elemen) {\n      var index = this.keylist.indexOf(elemen.target.nextSibling.innerText);\n      if (this.keylist.length > 0) {\n        this.keylist.splice(index, 1);\n        this.regexFromMyArray = new RegExp(this.keylist.join(\"|\"), \"gi\");\n      } else {\n        this.keylist = [];\n        this.regexFromMyArray = new RegExp(\"/''/\", \"gi\");\n      }\n    }\n  }, {\n    key: \"reset\",\n    value: function reset() {\n      this.keylist = [];\n      $(\"#item-key\").empty();\n      $(\"#crumbs\").hide();\n      $(\"#crumbs2\").hide();\n      $(\"#crumbs3\").hide();\n    }\n  }, {\n    key: \"go\",\n    value: function go() {\n      this.regexFromMyArray = new RegExp(this.keylist.join(\"|\"), \"gi\");\n      $(\"#crumbs\").show();\n      $(\"#crumbs2\").show();\n      $(\"#crumbs3\").show();\n    }\n  }, {\n    key: \"validate\",\n    value: function validate(value, e) {\n      if (value == 13) {\n        var tag = '<span id=\"list-item-' + this.counterElements + '\" class=\"item-search-taskboard\" style=\"display:inline-block\" >' + '<a class=\"times-item\">&times;</a>' + \"<span>\" + e.target.value + \"</span>\" + \"</span>\";\n\n        $(\"#item-key\").append(tag);\n        this.counterElements++;\n        this.keylist.push(e.target.value);\n\n        $(\"#search-input\").val(\"\");\n      }\n      $(\".times-item\").bind(\"click\", function (e) {\n        var elem = e.target.nextSibling.parentNode.id;\n        var dato = e.target.nextSibling.innerText;\n        $(\"#\" + elem).remove();\n      });\n    }\n  }, {\n    key: \"goto_component\",\n    value: function goto_component(id, key) {\n      switch (key) {\n        case 1:\n          this._router.navigateByUrl(\"/task/\" + id);\n          break;\n        case 2:\n          this._router.navigateByUrl(\"/daily\");\n          break;\n        case 3:\n          this._router.navigateByUrl(\"/daily\");\n          break;\n        case 4:\n          this._router.navigateByUrl(\"/contact/\" + id);\n          break;\n        default:\n          break;\n      }\n    }\n  }, {\n    key: \"showEditSprint\",\n    value: function showEditSprint(tk) {\n      this.sprintselected = [];\n      this.taskselected = [];\n      if (tk.spri_id) {\n        this.sprintselected.push(tk.spri_id);\n      } else {\n        this.sprintselected.push(\"0\");\n      }\n      this.taskselected.push(tk.task_id);\n    }\n  }, {\n    key: \"doneMdSprint\",\n    value: function doneMdSprint() {\n      this.taskselected = [];\n      this.sprintselected = [];\n    }\n  }, {\n    key: \"showSelected\",\n    value: function showSelected(event, idtk) {\n      this.sprintselected = [];\n      this.sprintselected.push(idtk);\n    }\n  }, {\n    key: \"saveChanges\",\n    value: function saveChanges() {\n      var _this27 = this;\n\n      var sprintselected = this.sprintselected[0];\n      var tasks = this.taskselected;\n      this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(function (res) {\n        if (res.data === \"OK\") {\n          _this27.toastr.success(\"updated successfully\");\n        } else {\n          _this27.toastr.warning(data.message, \"There was an error\");\n        }\n      });\n      this.getTaskboard(this.myteam.grop_id);\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        text = this.escapeHtml(text);\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"dragStart\",\n    value: function dragStart(event, dgt, drg) {\n      var _this28 = this;\n\n      this.draggedTask = dgt;\n      this.draggedTask.drag = drg;\n      this._tasks.status(this.draggedTask.task_id).subscribe(function (data) {\n        _this28.status = data.data;\n      });\n    }\n  }, {\n    key: \"drop\",\n    value: function drop(event, typ) {\n      var _this29 = this;\n\n      if (typ == \"41\" && this.status[0].para_status == 38) {\n        this.showCpImp(this.draggedTask);\n      } else if (typ == \"41\" && this.status[0].para_status == 40) {\n        this.showCpImp(this.draggedTask);\n      } else if (this.draggedTask.task_approved == 1) {\n        this._tasks.setStatusTask(this.draggedTask.task_id, typ, this.draggedTask.task_approved).subscribe(function (data) {\n          if (data.data != \"OK\") {\n            _this29.toastr.error(data.message, \"Error!\");\n          } else {\n            _this29.setPosTask(typ);\n          }\n        });\n      } else {\n        this.toastr.warning(\"Action not allowed. This task must be accepted first by a manager.\", \"Attention\");\n      }\n    }\n  }, {\n    key: \"setPosTask\",\n    value: function setPosTask(typ) {\n      switch (typ) {\n        case \"42\":\n          this.close = [this.draggedTask].concat(_toConsumableArray(this.close));\n          break;\n        case \"36\":\n          this.pending = [this.draggedTask].concat(_toConsumableArray(this.pending));\n          break;\n        case \"38\":\n          this.developing = [this.draggedTask].concat(_toConsumableArray(this.developing));\n          break;\n        case \"41\":\n          this.improving = [this.draggedTask].concat(_toConsumableArray(this.improving));\n          break;\n        case \"40\":\n          this.complete = [this.draggedTask].concat(_toConsumableArray(this.complete));\n          break;\n      }\n      var draggedIndex = 0;\n      switch (this.draggedTask.drag) {\n        case \"42\":\n          draggedIndex = this.findIndex(this.close, this.draggedTask);\n          this.close = this.close.filter(function (val, i) {\n            return i != draggedIndex;\n          });\n          break;\n        case \"36\":\n          draggedIndex = this.findIndex(this.pending, this.draggedTask);\n          this.pending = this.pending.filter(function (val, i) {\n            return i != draggedIndex;\n          });\n          break;\n        case \"38\":\n          draggedIndex = this.findIndex(this.developing, this.draggedTask);\n          this.developing = this.developing.filter(function (val, i) {\n            return i != draggedIndex;\n          });\n          break;\n        case \"41\":\n          draggedIndex = this.findIndex(this.improving, this.draggedTask);\n          this.improving = this.improving.filter(function (val, i) {\n            return i != draggedIndex;\n          });\n          break;\n        case \"40\":\n          draggedIndex = this.findIndex(this.complete, this.draggedTask);\n          this.complete = this.complete.filter(function (val, i) {\n            return i != draggedIndex;\n          });\n          break;\n      }\n      this.draggedTask = {};\n    }\n  }, {\n    key: \"findIndex\",\n    value: function findIndex(listtk, tk) {\n      var index = -1;\n      for (var i = 0; i < listtk.length; i++) {\n        if (tk.task_id === listtk[i].task_id) {\n          index = i;\n          break;\n        }\n      }\n      return index;\n    }\n  }, {\n    key: \"getRequests\",\n    value: function getRequests() {\n      var _this30 = this;\n\n      this._event.getRequests().subscribe(function (res) {\n        _this30.requests = res.data;\n        if (_this30.requests[0]) {\n          if (_this30.requests[0].task_description) {\n            _this30.requests[0].task_description2 = _this30.requests[0].task_description;\n          }\n          _this30.myrequest = _this30.requests[0];\n          _this30.task = _this30.requests[0];\n          _this30.getAttachments(_this30.task.task_id);\n        } else {\n          _this30.myrequest = {};\n          _this30.task = {};\n        }\n      });\n    }\n  }, {\n    key: \"showInfo\",\n    value: function showInfo(request) {\n      if (request.task_description) {\n        request.task_description2 = request.task_description;\n      }\n      this.myrequest = request;\n      this.task = request;\n      this.getAttachments(this.task.task_id);\n    }\n  }, {\n    key: \"showReqTask\",\n    value: function showReqTask() {\n      $(\"#mdRequestTask\").modal(\"show\");\n    }\n  }, {\n    key: \"showInfoTask\",\n    value: function showInfoTask(showt) {\n      if (this.showt == 1) {\n        this.showt = 0;\n      } else {\n        this.showt = 1;\n      }\n    }\n  }, {\n    key: \"showCurrentDate\",\n    value: function showCurrentDate() {\n      var _this31 = this;\n\n      this._tasks.getCurrentDate().subscribe(function (data) {\n        _this31.currentdate = new Date(data.data[0].CURRENT_TIMESTAMP);\n      });\n    }\n  }, {\n    key: \"updateTeam\",\n    value: function updateTeam(grop_id) {\n      var _this32 = this;\n\n      this.selectedUsers = [];\n      this.selectedNodes = [];\n      this._sprint.getTeam(grop_id).subscribe(function (ans) {\n        _this32.team = ans.data;\n        var group = _this32.team[0];\n        var usersel = false;\n        var user = {};\n        for (var i = 0; i < ans.data.length; i++) {\n          if (ans.data[i].usersel == 1) {\n            $('#team-name').text(ans.data[i].user_name + \" \" + ans.data[i].user_lastname);\n            $('#team-profile').text(ans.data[i].role_name);\n            _this32.textState.push(ans.data[i].user_id);\n            usersel = true;\n            user = ans.data[i];\n          }\n        }\n        if (_this32.team.length > 0) {\n          if (usersel == false) {\n            _this32.team[0].usersel = 1;\n            _this32.teamInfo(group.grop_id, group.user_name, group.user_lastname, group.role_name, [group.user_id], group.user_id);\n          } else {\n            _this32.teamInfo(user.grop_id, user.user_name, user.user_lastname, user.role_name, [user.user_id], user.user_id);\n          }\n          $('#team-name').text(_this32.team[0].user_name + \" \" + _this32.team[0].user_lastname);\n          $('#team-profile').text(_this32.team[0].role_name);\n        }\n        _this32.getListSprints(grop_id);\n      });\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"teamInfo\",\n    value: function teamInfo(grop_id, name, lastname, profile, state, userid) {\n      this.selectedNodes = [];\n      this.selectedUsers = [];\n      if (userid == 0) {\n        //this.selectedUsers = this.selectedUsers_2;\n        //this.selectedNodes = this.selectedNodes_2;\n        var _iteratorNormalCompletion32 = true;\n        var _didIteratorError32 = false;\n        var _iteratorError32 = undefined;\n\n        try {\n          for (var _iterator32 = this.contactsTree[Symbol.iterator](), _step32; !(_iteratorNormalCompletion32 = (_step32 = _iterator32.next()).done); _iteratorNormalCompletion32 = true) {\n            var c = _step32.value;\n\n            if (c.data == grop_id) {\n              // this.selectAllTeam(c.children, grop_id);\n              this.selectAllChild(c.children, grop_id);\n            }\n          }\n        } catch (err) {\n          _didIteratorError32 = true;\n          _iteratorError32 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion32 && _iterator32.return) {\n              _iterator32.return();\n            }\n          } finally {\n            if (_didIteratorError32) {\n              throw _iteratorError32;\n            }\n          }\n        }\n\n        this.selectedUsers = [];\n        var _iteratorNormalCompletion33 = true;\n        var _didIteratorError33 = false;\n        var _iteratorError33 = undefined;\n\n        try {\n          for (var _iterator33 = this.selectedNodes[Symbol.iterator](), _step33; !(_iteratorNormalCompletion33 = (_step33 = _iterator33.next()).done); _iteratorNormalCompletion33 = true) {\n            var _c4 = _step33.value;\n\n            if (!_c4.children) {\n              this.selectedUsers.push(_c4);\n            }\n          }\n        } catch (err) {\n          _didIteratorError33 = true;\n          _iteratorError33 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion33 && _iterator33.return) {\n              _iterator33.return();\n            }\n          } finally {\n            if (_didIteratorError33) {\n              throw _iteratorError33;\n            }\n          }\n        }\n      } else {\n        this.selectedNodes.push(userid);\n        this.selectedUsers.push(userid);\n      }\n      if (state == \"0\") {\n        this.textState = [\"\"];\n        this.posState = \"user_asigned\";\n      } else {\n        this.textState = state;\n        this.posState = \"user_asigned\";\n      }\n      $('#team-name').text(name + \" \" + lastname);\n      $('#team-profile').text(profile);\n    }\n  }, {\n    key: \"selectAllChild\",\n    value: function selectAllChild(childrens, idparent) {\n      this.selectedNodes = [];\n      this.selectedNodes.push(idparent);\n      if (childrens.length > 0) {\n        for (var c in childrens) {\n          this.selectedNodes.push(childrens[c].data);\n        }\n      }\n    }\n  }, {\n    key: \"getMyTeam\",\n    value: function getMyTeam(grop_id) {\n      var _this33 = this;\n\n      this._groups.getmyGroups().subscribe(function (data) {\n        _this33.groups = data.data;\n        var _iteratorNormalCompletion34 = true;\n        var _didIteratorError34 = false;\n        var _iteratorError34 = undefined;\n\n        try {\n          for (var _iterator34 = data.data[Symbol.iterator](), _step34; !(_iteratorNormalCompletion34 = (_step34 = _iterator34.next()).done); _iteratorNormalCompletion34 = true) {\n            var c = _step34.value;\n\n            _this33.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n          }\n        } catch (err) {\n          _didIteratorError34 = true;\n          _iteratorError34 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion34 && _iterator34.return) {\n              _iterator34.return();\n            }\n          } finally {\n            if (_didIteratorError34) {\n              throw _iteratorError34;\n            }\n          }\n        }\n\n        if (data.data.length > 0) {\n          _this33.myteam.grop_id = grop_id;\n          _this33.updateTeam(grop_id);\n          _this33.getListSprints(grop_id);\n        }\n        // this.getTaskboard(grop_id);\n      });\n    }\n  }, {\n    key: \"showModal\",\n    value: function showModal(mytk) {\n      $(\"#myTask\" + mytk.task_id).click();\n      setTimeout(function () {\n        $('#tabsTaskview a[href=\"#ptsk' + mytk.task_id + '\"]').click();\n      }, 500);\n    }\n  }, {\n    key: \"showModalTimeLine\",\n    value: function showModalTimeLine(mytk) {\n      $(\"#myTask\" + mytk.task_id).click();\n      setTimeout(function () {\n        $('#tabsTaskview a[href=\"#taskTimeline-' + mytk.task_id + '\"]').click();\n      }, 500);\n    }\n  }, {\n    key: \"sumx\",\n    value: function sumx(value, type) {\n      var pts = 0;\n      var ptsd = 0;\n      for (var item in value) {\n        switch (type) {\n          case \"36\":\n            pts += Number(value[item][\"task_points\"]);\n            break;\n          case \"38\":\n            pts += Number(value[item][\"task_points\"]);\n            ptsd += Number(value[item][\"task_pointsd\"]);\n            break;\n          case \"42\":\n            pts += Number(value[item][\"task_points\"]);\n            break;\n        }\n      }\n      switch (type) {\n        case \"36\":\n          return pts;\n          break;\n        case \"38\":\n          pts = this.round(pts, 2);\n          ptsd = this.round(ptsd, 2);\n          return ptsd + \"/\" + pts;\n          break;\n        case \"42\":\n          return pts;\n          break;\n\n      }\n    }\n  }, {\n    key: \"getListSprints\",\n    value: function getListSprints(group_id) {\n      var _this34 = this;\n\n      this.sprintslist = [];\n      // this.mysprint.spri_id = 0;\n      this._sprint.getListReport(group_id).subscribe(function (res) {\n        _this34.sprintslist = res.data;\n        if (_this34.sprintslist.length > 0) {\n          _this34.mysprint.spri_id = res.data[0].spri_id;\n        } else {\n          _this34.mysprint.spri_id = 0;\n        }\n        _this34.getTaskboard(group_id);\n      });\n    }\n  }, {\n    key: \"updateSprint\",\n    value: function updateSprint() {\n      this.getTaskboard(this.myteam.grop_id);\n    }\n  }, {\n    key: \"loadSprint\",\n    value: function loadSprint() {\n      var _this35 = this;\n\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this35.mysprints = [];\n        _this35.mysprints.push({\n          label: \"Backlog\",\n          value: 0\n        });\n        var _iteratorNormalCompletion35 = true;\n        var _didIteratorError35 = false;\n        var _iteratorError35 = undefined;\n\n        try {\n          for (var _iterator35 = res.data[Symbol.iterator](), _step35; !(_iteratorNormalCompletion35 = (_step35 = _iterator35.next()).done); _iteratorNormalCompletion35 = true) {\n            var c = _step35.value;\n\n            _this35.mysprints.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError35 = true;\n          _iteratorError35 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion35 && _iterator35.return) {\n              _iterator35.return();\n            }\n          } finally {\n            if (_didIteratorError35) {\n              throw _iteratorError35;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"validateDaily\",\n    value: function validateDaily() {\n      if (this.day.unit_id && this.day.unit_id != 0) {\n        return !this.day.dail_text || this.day.dail_text.trim() == \"\" || !this.day.dail_points || this.day.dail_points <= 0 || this.day.dail_points == \"undefined\" || !this.day.dail_date || this.day.dail_date == \"\" || this.day.dail_date == \"undefined\" || parseFloat(this.mcT.task_pointsd) + parseFloat(this.day.dail_points) > parseFloat(this.mcT.task_points) || !this.day.unit_points || this.day.unit_points <= 0 || this.day.unit_points == \"undefined\" || this.compareDate(this.mcT.spri_init) === -1 || this.compareDate(this.mcT.spri_end) === 1;\n      } else {\n        return !this.day.dail_text || this.day.dail_text.trim() == \"\" || !this.day.dail_points || this.day.dail_points <= 0 || this.day.dail_points == \"undefined\" || !this.day.dail_date || this.day.dail_date == \"\" || this.day.dail_date == \"undefined\" || parseFloat(this.mcT.task_pointsd) + parseFloat(this.day.dail_points) > parseFloat(this.mcT.task_points) || this.compareDate(this.mcT.spri_init) === -1 || this.compareDate(this.mcT.spri_end) === 1;\n      }\n    }\n  }]);\n\n  return TaskboardComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _dashboard.DashboardService, _task.TaskService, _daily.DailyService, _users.UsersService, _project.ProjectService, _product.ProductService, _note.NoteService, _ngxToastr.ToastrService, _header.HeaderService, _categories.CategoriesService, _sprint.SprintService, _request.RequestService, _group.GroupService, _primeng.ConfirmationService, _units.UnitsService], TaskboardComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 253 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, jQuery) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TaskListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _task = __webpack_require__(19);\n\nvar _users = __webpack_require__(20);\n\nvar _note = __webpack_require__(24);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nvar _externalrequest = __webpack_require__(48);\n\nvar _units = __webpack_require__(51);\n\nvar _pipes = __webpack_require__(14);\n\nvar _tasklistTemplate = __webpack_require__(819);\n\nvar _tasklistTemplate2 = _interopRequireDefault(_tasklistTemplate);\n\nvar _task2 = __webpack_require__(52);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TaskListComponent = exports.TaskListComponent = (_dec = (0, _core.Component)({\n  selector: \"tasks\",\n  template: _tasklistTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  providers: [_primeng.ConfirmationService],\n  declarations: [_task2.TaskViewComponent]\n}), _dec(_class = function () {\n  function TaskListComponent(title, route, sanitizer, toastr, taskService, groupService, userService, productService, ProjectService, noteService, sprintService, externalRequestService, confirmationService, unitsService) {\n    var _this = this;\n\n    _classCallCheck(this, TaskListComponent);\n\n    this._title = title;\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._sprint = sprintService;\n    this._externalrequest = externalRequestService;\n    this._units = unitsService;\n    this.textState = \"\";\n    this.isrequest = [\"\"];\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.task = { usersShared: [], project: {}, criteriaTask: [], attachments: [] };\n    this.units = [];\n    this.seltasks = [];\n    // this.task.task_description = \"\";\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.mdT = { project: {}, comments: [] };\n    this.idtk = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.namegroup = \"ALL\";\n    this.nameTypeTask = \"allmyteam\";\n    this.typeRol = {};\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.head = [];\n    this.mysprints = [];\n    this.tasks = [];\n    this.userslbl = [];\n    this.products = [];\n    this.states = [];\n    this.myProjects = [];\n    this.tagMenu = 1;\n    this.tagMenuNew = 1;\n    this.tagMenuDupliTk = 1;\n    this.levels = [];\n    this.filter_excel = null;\n    // this.critertiaTask = [];\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Tasks ::.\");\n    this.isLoading = false;\n    this.filter = false;\n    this.usrs = [\"\"];\n    this.assig = [\"\"];\n    this.projs = [\"\"];\n    this.desc = \"\";\n    this.task_ids = [\"\"];\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.prods = [\"\"];\n    this.projs = [\"\"];\n    this.mytask = [];\n    this.usersCRM = [];\n    this.usersCRMa = [];\n    this.rjtask = {};\n    this.statusdelete = [];\n    this.getLevels();\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.usersCRM = data.data;\n      _this.usersCRMa = data.data;\n    });\n    this.productsa = [];\n    this.productsb = [];\n    this.getRolUser();\n    this._products.getProducts().subscribe(function (data) {\n      _this.productsa = data.data;\n      _this.productsb = data.data;\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this.getunits();\n  }\n\n  _createClass(TaskListComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      var _this2 = this;\n\n      this.reload();\n      this._groups.getGroups().subscribe(function (data) {\n        _this2.groups = data.data;\n      });\n      this.states = [];\n      this._tasks.getStates().subscribe(function (data) {\n        _this2.states = data.data;\n      });\n      this._products.getProducts().subscribe(function (data) {\n        _this2.products = [];\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var c = _step2.value;\n\n            _this2.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      });\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this2.myProjectsx = [];\n        _this2.myProjectsxb = [];\n        _this2.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion3 = true;\n          var _didIteratorError3 = false;\n          var _iteratorError3 = undefined;\n\n          try {\n            for (var _iterator3 = res.data.planning[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n              var c = _step3.value;\n\n              _this2.myProjectsx.push(c);\n              _this2.myProjectsxb.push(c);\n              _this2.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError3 = true;\n            _iteratorError3 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                _iterator3.return();\n              }\n            } finally {\n              if (_didIteratorError3) {\n                throw _iteratorError3;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = res.data.buildup[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var _c = _step4.value;\n\n              _this2.myProjectsx.push(_c);\n              _this2.myProjectsxb.push(_c);\n              _this2.myProjects.push({\n                label: _c.proj_id + \" \" + _c.proj_subject,\n                value: _c.proj_id,\n                idcolor: _c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion5 = true;\n          var _didIteratorError5 = false;\n          var _iteratorError5 = undefined;\n\n          try {\n            for (var _iterator5 = res.data.implementation[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n              var _c2 = _step5.value;\n\n              _this2.myProjectsx.push(_c2);\n              _this2.myProjectsxb.push(_c2);\n              _this2.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError5 = true;\n            _iteratorError5 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                _iterator5.return();\n              }\n            } finally {\n              if (_didIteratorError5) {\n                throw _iteratorError5;\n              }\n            }\n          }\n        }\n      });\n\n      this.userslbl = [];\n      this.usersShareWith = [];\n      this.usersShareWith_a = [];\n      this._user.getCRMUsers().subscribe(function (data) {\n        _this2.usersShareWith = data.data;\n        _this2.usersShareWith_a = data.data;\n        _this2.users = data.data;\n        var _iteratorNormalCompletion6 = true;\n        var _didIteratorError6 = false;\n        var _iteratorError6 = undefined;\n\n        try {\n          for (var _iterator6 = data.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n            var c = _step6.value;\n\n            _this2.userslbl.push({\n              label: c.user_lastname + \", \" + c.user_name,\n              value: c.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError6 = true;\n          _iteratorError6 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n              _iterator6.return();\n            }\n          } finally {\n            if (_didIteratorError6) {\n              throw _iteratorError6;\n            }\n          }\n        }\n      });\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this2.mysprints = [];\n        _this2.mysprints.push({\n          label: \"Backlog\",\n          value: 0\n        });\n        var _iteratorNormalCompletion7 = true;\n        var _didIteratorError7 = false;\n        var _iteratorError7 = undefined;\n\n        try {\n          for (var _iterator7 = res.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n            var c = _step7.value;\n\n            _this2.mysprints.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError7 = true;\n          _iteratorError7 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion7 && _iterator7.return) {\n              _iterator7.return();\n            }\n          } finally {\n            if (_didIteratorError7) {\n              throw _iteratorError7;\n            }\n          }\n        }\n      });\n      this.leader = 0;\n      this._user.getMyUserData().subscribe(function (data) {\n        _this2.myuser = data.data[0].user_id;\n        _this2.leader = data.data[0].head;\n      });\n      // this._units.getUnits().subscribe(res => {\n      //   // this.units = [];\n      //   console.log(res);\n      //   this.units= res.data;\n      //   // for (let c of res.data) {\n      //   //   this.units.push({ label: c.unit_desc, value: c.unit_id });\n      //   // }\n      //   console.log(this.units);\n      // });\n    }\n  }, {\n    key: \"getunits\",\n    value: function getunits() {\n      var _this3 = this;\n\n      this._units.getUnits().subscribe(function (res) {\n        _this3.units = [];\n        var _iteratorNormalCompletion8 = true;\n        var _didIteratorError8 = false;\n        var _iteratorError8 = undefined;\n\n        try {\n          for (var _iterator8 = res.data[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n            var c = _step8.value;\n\n            _this3.units.push({ label: c.unit_desc, value: c.unit_id });\n          }\n        } catch (err) {\n          _didIteratorError8 = true;\n          _iteratorError8 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion8 && _iterator8.return) {\n              _iterator8.return();\n            }\n          } finally {\n            if (_didIteratorError8) {\n              throw _iteratorError8;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getmyProjects\",\n    value: function getmyProjects() {\n      var _this4 = this;\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this4.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = res.data.planning[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var c = _step9.value;\n\n              _this4.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion10 = true;\n          var _didIteratorError10 = false;\n          var _iteratorError10 = undefined;\n\n          try {\n            for (var _iterator10 = res.data.buildup[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n              var _c3 = _step10.value;\n\n              _this4.myProjects.push({\n                label: _c3.proj_id + \" \" + _c3.proj_subject,\n                value: _c3.proj_id,\n                idcolor: _c3.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError10 = true;\n            _iteratorError10 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                _iterator10.return();\n              }\n            } finally {\n              if (_didIteratorError10) {\n                throw _iteratorError10;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion11 = true;\n          var _didIteratorError11 = false;\n          var _iteratorError11 = undefined;\n\n          try {\n            for (var _iterator11 = res.data.implementation[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n              var _c4 = _step11.value;\n\n              _this4.myProjects.push({\n                label: _c4.proj_id + \" \" + _c4.proj_subject,\n                value: _c4.proj_id,\n                idcolor: _c4.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError11 = true;\n            _iteratorError11 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                _iterator11.return();\n              }\n            } finally {\n              if (_didIteratorError11) {\n                throw _iteratorError11;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      if (event.keyCode == 13) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.searchTask();\n      }\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n      this.searchTask();\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.searchTask();\n    }\n  }, {\n    key: \"goTo\",\n    value: function goTo(value) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      if (value == 0) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n      } else {\n        this.currentpage = Math.round(this.itemcount / this.limitpage);\n        var mod = this.itemcount % this.limitpage;\n        if (mod > 0 && mod < 5) {\n          this.currentpage += 1;\n        }\n      }\n      this.searchTask();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this5 = this;\n\n      this.isLoading = true;\n      this.tasks = [];\n      if (this.mytask.assigned && this.mytask.assigned.length > 0) {\n        this.assig = this.mytask.assigned;\n      } else {\n        this.assig = [\"\"];\n      }\n      if (this.mytask.creators && this.mytask.creators.length > 0) {\n        this.usrs = this.mytask.creators;\n      } else {\n        this.usrs = [\"\"];\n      }\n      if (this.mytask.description && this.mytask.description != \"\") {\n        this.desc = this.mytask.description;\n      } else {\n        this.desc = \"\";\n      }\n      if (this.mytask.task_ids && this.mytask.task_ids.length > 0) {\n        this.task_ids = this.mytask.task_ids;\n      } else {\n        this.task_ids = [\"\"];\n      }\n      if (this.mytask.date_ini != null && this.mytask.date_ini != \"\" && this.mytask.date_ini != \"undefined\") {\n        if (this.date_ini != \"\" && this.date_ini != null) {\n          this.date_ini = this.formatDate(this.mytask.date_ini);\n        } else {\n          this.date_ini = this.mytask.date_ini;\n        }\n      } else {\n        this.date_ini = \"\";\n        this.date_end = \"\";\n      }\n      if (this.mytask.date_end != null && this.mytask.date_end != \"\" && this.mytask.date_end != \"undefined\") {\n        if (this.date_end != \"\" && this.date_end != null) {\n          this.date_end = this.formatDate(this.mytask.date_end);\n        } else {\n          this.date_end = this.mytask.date_end;\n        }\n      } else {\n        this.date_end = \"\";\n        this.date_ini = \"\";\n      }\n      if (this.mytask.products && this.mytask.products.length > 0) {\n        this.prods = this.mytask.products;\n      } else {\n        this.prods = [\"\"];\n      }\n      if (this.mytask.projects && this.mytask.projects.length > 0) {\n        this.projs = this.mytask.projects;\n      } else {\n        this.projs = [\"\"];\n      }\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search.trim(),\n        state: this.textState,\n        group: this.textGroup,\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\",\n        assigned: this.assig,\n        creators: this.usrs,\n        desc: this.desc,\n        task_ids: this.task_ids,\n        date_ini: this.date_ini,\n        date_end: this.date_end,\n        products: this.prods,\n        projects: this.projs,\n\n        typeTask: this.nameTypeTask\n      };\n\n      this.filter_excel = filter;\n      this._tasks.getTaskList(filter).subscribe(function (res) {\n        _this5.isLoading = false;\n        _this5.tasks = res.data;\n        _this5.itemcount = res.count;\n        _this5.lastpage = _this5.itemcount / _this5.limitpage;\n        if (_this5.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this5.lastpage);\n          _this5.lastpage = countpag;\n        }\n        _this5.pages = [];\n        for (var i = 1; i <= _this5.lastpage; i++) {\n          _this5.pages.push(i);\n        }\n        if (_this5.pages.length == 0) {\n          _this5.pages = [1];\n        }\n      });\n    }\n  }, {\n    key: \"loadData\",\n    value: function loadData() {\n      var _this6 = this;\n\n      if (this.products.length == 0) {\n        this.products = [];\n        this._products.getProducts().subscribe(function (data) {\n          var _iteratorNormalCompletion12 = true;\n          var _didIteratorError12 = false;\n          var _iteratorError12 = undefined;\n\n          try {\n            for (var _iterator12 = data.data[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n              var c = _step12.value;\n\n              _this6.products.push({ label: c.prod_name, value: c.prod_id });\n            }\n          } catch (err) {\n            _didIteratorError12 = true;\n            _iteratorError12 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                _iterator12.return();\n              }\n            } finally {\n              if (_didIteratorError12) {\n                throw _iteratorError12;\n              }\n            }\n          }\n        });\n      }\n      if (this.userslbl.length == 0) {\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(function (data) {\n          _this6.users = data.data;\n          var _iteratorNormalCompletion13 = true;\n          var _didIteratorError13 = false;\n          var _iteratorError13 = undefined;\n\n          try {\n            for (var _iterator13 = data.data[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {\n              var c = _step13.value;\n\n              _this6.userslbl.push({\n                label: c.user_lastname + \", \" + c.user_name,\n                value: c.user_id\n              });\n            }\n          } catch (err) {\n            _didIteratorError13 = true;\n            _iteratorError13 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion13 && _iterator13.return) {\n                _iterator13.return();\n              }\n            } finally {\n              if (_didIteratorError13) {\n                throw _iteratorError13;\n              }\n            }\n          }\n        });\n      }\n    }\n  }, {\n    key: \"addComment\",\n    value: function addComment() {\n      var _this7 = this;\n\n      this.notemd.task_id = this.task.task_id;\n      this._notes.putNote(note).subscribe(function (data) {\n        _this7.notemd = { note_text: \"\" };\n      });\n    }\n  }, {\n    key: \"addTask\",\n    value: function addTask() {\n      // this.getmyProjects();\n      this.loadData();\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.task = { project: {}, attachments: [] };\n      this.task.criteriaTask = [];\n      this.task.task_description2 = \"\";\n      this.task.task_description = \"\";\n      this.task.unit_id = 0;\n      $(\"#mdAddTask\").modal(\"show\");\n      this.activeTabDescription_addTask();\n    }\n  }, {\n    key: \"showEditModal\",\n    value: function showEditModal(idtk) {\n      var _this8 = this;\n\n      // this.getmyProjects();\n      this.task = { usersShared: [], project: {}, attachments: [] };\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._tasks.getTask(idtk.task_id).subscribe(function (res) {\n        _this8.task.criteriaTask = res.data.criteriaTask;\n        // if (res.data.task_description) {\n        //     res.data.task_description = this.escapeHtml(res.data.task_description);\n        // }\n        _this8._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n          _this8.task.attachments = res.data;\n          _this8._tasks.getTaskFields(idtk.task_id).subscribe(function (res) {\n            _this8.task.form = res.data;\n          });\n        });\n        _this8.task = res.data;\n        _this8.task.task_description_e = _this8.task.task_description;\n        _this8.task.task_description = _this8.task.task_description_e;\n        $(\"#mdEditTask\").modal(\"show\");\n        _this8.activeTabDescription_editTask();\n      });\n    }\n  }, {\n    key: \"openTask\",\n    value: function openTask(idtk) {\n      var _this9 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to open the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n\n            _this9._tasks.reopenTask(idtk, 40).subscribe(function (data) {\n              _this9.searchTask();\n              _this9.toastr.success(\"Task opened successfully\");\n              _this9.reload();\n            });\n          } else {\n            if (_this9.seltasks.length > 0) {\n              for (var x in _this9.seltasks) {\n                _this9._tasks.reopenTask(_this9.seltasks[x], 40).subscribe(function (data) {});\n                _this9.reload();\n              }\n              _this9.seltasks = [];\n              _this9.searchTask();\n              _this9.toastr.success(\"Tasks opened successfully\");\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"closeTask\",\n    value: function closeTask(idtk) {\n      var _this10 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      var contadoritclo = \"\";\n      this.contadoritclo = this.seltasks.length;\n      if (this.contadoritclo == 0) {\n        this.confirm.confirm({\n          message: \"Do you want to close the task(s)?\",\n          header: \"Confirmation\",\n          icon: \"fa fa-question-circle\",\n          accept: function accept() {\n            if (idtk) {\n              _this10._tasks.setStatusTask(idtk, 42).subscribe(function (data) {\n                _this10.searchTask();\n                if (data.data == \"OK\") {\n                  _this10.toastr.success(\"Task closed successfully\");\n                } else {\n                  _this10.toastr.warning(data.message, \"There was an error\");\n                }\n                _this10.searchTask();\n              });\n            } else {\n              if (_this10.seltasks.length > 0) {\n                for (var x in _this10.seltasks) {\n                  _this10._tasks.setStatusTask(_this10.seltasks[x], 42).subscribe(function (data) {\n                    if (data.data == \"OK\") {\n                      _this10.toastr.success(\"Tasks closed successfully\");\n                    } else {\n                      _this10.toastr.warning(data.message, \"There was an error\");\n                    }\n                  });\n                }\n                _this10.seltasks = [];\n                _this10.searchTask();\n              }\n            }\n          },\n          reject: function reject() {\n            //\n          }\n        });\n      } else {\n        this.confirm.confirm({\n          message: \"Do you want to close the   .\" + this.contadoritclo + \".    task(s)?\",\n          header: \"Confirmation\",\n          icon: \"fa fa-question-circle\",\n          accept: function accept() {\n            if (idtk) {\n              _this10._tasks.setStatusTask(idtk, 42).subscribe(function (data) {\n                _this10.searchTask();\n                if (data.data == \"OK\") {\n                  _this10.toastr.success(\"Task closed successfully\");\n                } else {\n                  _this10.toastr.warning(data.message, \"There was an error\");\n                }\n              });\n            } else {\n              if (_this10.seltasks.length > 0) {\n                for (var x in _this10.seltasks) {\n                  _this10._tasks.setStatusTask(_this10.seltasks[x], 42).subscribe(function (data) {\n                    if (data.data == \"OK\") {\n                      _this10.toastr.success(\"Tasks closed successfully\");\n                      _this10.searchTask();\n                    } else {\n                      _this10.toastr.warning(data.message, \"There was an error\");\n                    }\n                  });\n                }\n                _this10.seltasks = [];\n              }\n            }\n          },\n          reject: function reject() {\n            //\n          }\n        });\n      }\n    }\n  }, {\n    key: \"verifyStatus\",\n    value: function verifyStatus(id) {\n\n      this.statusdelete = [];\n      for (var i = 0; i < this.tasks.length; i++) {\n        for (var j = 0; j < this.seltasks.length; j++) {\n          if (this.tasks[i].task_id == this.seltasks[j] && this.tasks[i].para_status == '43') {\n            this.statusdelete.push(this.tasks[i].task_id);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"deleteTask\",\n    value: function deleteTask(idtk) {\n      var _this11 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      var contadoritdele = \"\";\n      this.contadoritdele = this.seltasks.length;\n      if (this.contadoritdele == 0) {\n        this.confirm.confirm({\n          message: \"Do you want to delete the task(s)?\",\n          header: \"Confirmation\",\n          icon: \"fa fa-question-circle\",\n          accept: function accept() {\n            if (idtk) {\n              _this11._tasks.setStatusTask(idtk, 43).subscribe(function (data) {\n                if (data.data == \"OK\") {\n                  _this11.toastr.success(\"Task deleted successfully\");\n                  _this11.searchTask();\n                } else {\n                  _this11.toastr.error(data.message);\n                }\n              });\n            } else {\n              if (_this11.seltasks.length > 0) {\n                for (var x in _this11.seltasks) {\n                  _this11._tasks.setStatusTask(_this11.seltasks[x], 43).subscribe(function (data) {\n                    if (data.data == \"OK\") {\n                      _this11.toastr.success(\"Task deleted successfully\");\n                    } else {\n                      _this11.toastr.error(data.message);\n                    }\n                  });\n                }\n                _this11.seltasks = [];\n                _this11.searchTask();\n              }\n            }\n          },\n          reject: function reject() {}\n        });\n      } else {\n        this.confirm.confirm({\n          message: \"Do you want to delete the   .\" + this.contadoritdele + \".    task(s)?\",\n          header: \"Confirmation\",\n          icon: \"fa fa-question-circle\",\n          accept: function accept() {\n            if (idtk) {\n              _this11._tasks.setStatusTask(idtk, 43).subscribe(function (data) {\n                if (data.data == \"OK\") {\n                  _this11.toastr.success(\"Task deleted successfully\");\n                  _this11.searchTask();\n                } else {\n                  _this11.toastr.error(data.message);\n                }\n              });\n            } else {\n              if (_this11.seltasks.length > 0) {\n                for (var x in _this11.seltasks) {\n                  _this11._tasks.setStatusTask(_this11.seltasks[x], 43).subscribe(function (data) {\n                    if (data.data == \"OK\") {\n                      _this11.toastr.success(\"Task deleted successfully\");\n                    } else {\n                      _this11.toastr.error(data.message);\n                    }\n                  });\n                }\n                _this11.seltasks = [];\n                _this11.searchTask();\n              }\n            }\n          },\n          reject: function reject() {}\n        });\n      }\n    }\n  }, {\n    key: \"selectAll\",\n    value: function selectAll() {\n      if (this.seltasks.length > 0) {\n        this.seltasks = [];\n      } else {\n        this.seltasks = [];\n        for (var t in this.tasks) {\n          this.seltasks.push(this.tasks[t].task_id);\n        }\n      }\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      this.textState = state;\n      this.posState = \"para_status\";\n      this.currentpage = 1;\n      this.searchTask();\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state, name) {\n      this.namegroup = name;\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.searchTask();\n    }\n  }, {\n    key: \"typeTask\",\n    value: function typeTask(type) {\n      this.nameTypeTask = type;\n      this.currentpage = 1;\n      this.searchTask();\n    }\n  }, {\n    key: \"clearTask\",\n    value: function clearTask() {\n      this.task.task_description = \"\";\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this12 = this;\n\n      if (this.task.task_description2 != undefined && (this.task.task_description2 != \"\" || this.task.task_description2 != null)) {\n        this.task.task_description = this.task.task_description2;\n      } else if (this.task.task_description_e != undefined && (this.task.task_description_e != \"\" || this.task.task_description_e != null)) {\n        this.task.task_description = this.task.task_description_e;\n      }\n      this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      this.task.task_delivery = new Date(this.task.task_delivery);\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n\n      //reasignacion de la variable con un array de ids de usuarios\n      var users_share = [];\n\n      for (var user in this.task.usersShared) {\n        users_share.push(this.task.usersShared[user].user_id);\n      }\n\n      // Solve Bug Autocomplete users.   \n      var task = Object.assign({}, this.task);\n      task.unit_points = this.task.unit_points;\n      task.unit_id = this.task.unit_id;\n      task.usersShared = users_share;\n\n      var criteria_task = [];\n      var fields_empty = false;\n\n      for (var i in this.task.criteriaTask) {\n        if (this.task.criteriaTask[i].tkcr_description && this.task.criteriaTask[i].tkcr_description.trim() != \"\") {\n          criteria_task.push(this.task.criteriaTask[i].tkcr_num + '|*|' + this.task.criteriaTask[i].tkcr_description);\n        } else {\n          fields_empty = true;\n        }\n      }\n\n      if (fields_empty == false) {\n        task.criteriaTask = criteria_task;\n        task.isrequest = \"false\";\n        this.isLoading = true;\n\n        if (this.task.unit_points == 0 || this.task.unit_points == null) {\n          task.unit_points = \"\";\n        }\n        if (this.task.unit_id == 0) {\n          task.unit_id = \"\";\n        }\n\n        this._tasks.putTask(task).subscribe(function (data) {\n          _this12.isLoading = false;\n          if (data.data === \"\" || data.data === \"0\") {\n            _this12.toastr.warning(data.message, \"Bad news! Error saving task\");\n          } else {\n            _this12.toastr.success(data.message, \"Task saved successfully\");\n          }\n          $(\"#mdAddTask\").modal(\"hide\");\n          $(\"#mdEditTask\").modal(\"hide\");\n          _this12.searchTask();\n          _this12.task = { attachments: [] };\n          _this12.task.task_description = \"\";\n        });\n      } else {\n        this.toastr.warning(\"Empty form fields\");\n      }\n    }\n  }, {\n    key: \"saveDuplicateTask\",\n    value: function saveDuplicateTask() {\n      var _this13 = this;\n\n      var task = {};\n      this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      this.task.task_delivery = new Date(this.task.task_delivery);\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n\n      task.task_subject = this.task.task_subject;\n      task.prod_id = this.task.prod_id;\n      task.user_asigned = this.task.user_asigned;\n      task.proj_id = this.task.proj_id;\n      task.spri_id = this.task.spri_id;\n      task.task_delivery = this.task.task_delivery;\n      task.task_points = this.task.task_points;\n      task.task_description = this.task.task_description;\n      task.attachments = this.task.attachments;\n      task.tklv_id = this.task.tklv_id;\n      task.unit_points = this.task.unit_points;\n      task.unit_id = this.task.unit_id;\n      task.isrequest = false;\n\n      if (this.task.unit_points == 0 || this.task.unit_points == null) {\n        task.unit_points = \"\";\n      }\n      if (this.task.unit_id == 0) {\n        task.unit_id = \"\";\n      }\n\n      //reasignacion de la variable con un array de ids de usuarios\n      var users_share = [];\n\n      for (var user in this.task.usersShared) {\n        users_share.push(this.task.usersShared[user].user_id);\n      }\n\n      task.usersShared = users_share;\n\n      var criteria_task = [];\n      var campos = [];\n      var fields_empty = false;\n\n      for (var i in this.task.criteriaTask) {\n        if (this.task.criteriaTask[i].tkcr_description && this.task.criteriaTask[i].tkcr_description.trim() != \"\") {\n          criteria_task.push(this.task.criteriaTask[i].tkcr_num + '|*|' + this.task.criteriaTask[i].tkcr_description);\n        } else {\n          fields_empty = true;\n        }\n      }\n\n      for (var _i in this.task.form) {\n        campos.push(this.task.form[_i].form_id + '|*|' + this.task.form[_i].form_data);\n      }\n\n      if (fields_empty == false) {\n        task.criteriaTask = criteria_task;\n        task.form = campos;\n        this.isLoading = true;\n        this._tasks.duplicateTask(task).subscribe(function (res) {\n          _this13.isLoading = false;\n          if (res.data && res.data != null) {\n            _this13.toastr.success(res.message);\n            $(\"#mdDuplicateTask\").modal(\"hide\");\n            _this13.searchTask();\n          } else {\n            _this13.toastr.warning(res.message, \"Error\");\n          }\n          // this.task = { attachments: [] };\n          // this.task.task_description = \"\";\n        });\n      } else {\n        this.toastr.warning(\"Empty form fields\");\n      }\n    }\n  }, {\n    key: \"deleteFieldForm\",\n    value: function deleteFieldForm(i) {\n      this.task.criteriaTask.splice(i, 1);\n\n      var j = 1;\n\n      for (var _i2 = 0; _i2 < this.task.criteriaTask.length; _i2++) {\n        this.task.criteriaTask[_i2].tkcr_num = j;\n        j++;\n      }\n\n      if (this.task.criteriaTask.length == 0) {\n        this.activeTabDescription_addTask();\n      }\n    }\n  }, {\n    key: \"deleteFieldForm_editTask\",\n    value: function deleteFieldForm_editTask(i) {\n      this.task.criteriaTask.splice(i, 1);\n\n      var j = 1;\n\n      for (var _i3 = 0; _i3 < this.task.criteriaTask.length; _i3++) {\n        this.task.criteriaTask[_i3].tkcr_num = j;\n        j++;\n      }\n\n      if (this.task.criteriaTask.length == 0) {\n        this.activeTabDescription_editTask();\n      }\n    }\n  }, {\n    key: \"addFieldForm\",\n    value: function addFieldForm() {\n      var j = 1;\n      if (this.task.criteriaTask.length == 4) {\n        this.toastr.warning(\"You have reached the maximum number of criteria\");\n      } else {\n        var valor = this.task.criteriaTask.length + j;\n        this.task.criteriaTask.push({ tkcr_num: valor, tkcr_description: \"\" });\n        j++;\n      }\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this14 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this14.toastr.error(res.message, \"Error!\");\n            } else {\n              _this14.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this14.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n\n      if (task.attachments.length == 0) {\n        this.activeTabDescription_editTask();\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n\n      var index = 0;\n      for (var i in this.task.attachments) {\n        if (att.name == this.task.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n      this.task.attachments.splice(index, 1);\n\n      if (this.task.attachments.length == 0) {\n        this.activeTabDescription_addTask();\n      }\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(taskid) {\n      var _this15 = this;\n\n      this._tasks.getAttachments(taskid).subscribe(function (res) {\n        _this15.mdT.attachments = res.data;\n        _this15.task.attachments = res.data;\n        for (var i = 0; i < _this15.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this15.mdT.total_attachments = 1;\n          } else {\n            _this15.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this15.task.attachments.length; i++) {\n          if (i == 0) {\n            _this15.task.total_attachments = 1;\n          } else {\n            _this15.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"updateSprint\",\n    value: function updateSprint(task) {\n      this.sprintselected = [];\n      if (task.spri_id != null) {\n        this.sprintselected.push(task.spri_id);\n      } else {\n        this.sprintselected.push(\"0\");\n      }\n      this.taskselected = [];\n      this.taskselected.push(task.task_id);\n      $(\"#mdSprints\").modal(\"show\");\n    }\n  }, {\n    key: \"doneMdSprint\",\n    value: function doneMdSprint() {\n      this.taskselected = [];\n      this.sprintselected = [];\n    }\n  }, {\n    key: \"saveChanges\",\n    value: function saveChanges() {\n      var _this16 = this;\n\n      var sprintselected = this.sprintselected[0];\n      var tasks = this.taskselected;\n      this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(function (res) {\n        if (res.data === \"OK\") {\n          _this16.toastr.success(\"updated successfully\");\n        } else {\n          _this16.toastr.warning(\"There was an error\");\n        }\n      });\n      this.searchTask();\n    }\n  }, {\n    key: \"showSelected\",\n    value: function showSelected(event, idtk) {\n      this.sprintselected = [];\n      this.sprintselected.push(idtk);\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          // text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"validateTask\",\n    value: function validateTask() {\n      return !this.task.task_subject || this.task.task_subject.trim() == \"\" || !this.task.task_description2 || this.task.task_description2.trim() == \"\" || !this.task.prod_id || this.task.prod_id.trim() == \"\" || !this.task.user_asigned || this.task.user_asigned.trim() == \"\" || !this.task.task_delivery || this.task.task_delivery == \"\" || this.task.task_delivery == \"undefined\" || !this.task.task_points || this.task.task_points == \"\" || this.task.task_points == \"undefined\" || !this.task.unit_points && this.task.unit_id || this.task.unit_points && !this.task.unit_id || this.task.unit_points <= 0 && this.task.unit_id;\n    }\n  }, {\n    key: \"validateEditTask\",\n    value: function validateEditTask() {\n      return !this.task.task_description_e || this.task.task_description_e == '' || this.task.task_description_e == 'undefined' || !this.task.prod_id || !this.task.task_points || this.task.task_points <= 0 || !this.task.unit_points && this.task.unit_id || this.task.unit_points && !this.task.unit_id || this.task.unit_points <= 0 && this.task.unit_id;\n    }\n  }, {\n    key: \"validateDuplicateTask\",\n    value: function validateDuplicateTask() {\n      return !this.task.task_subject || this.task.task_subject.trim() == \"\" || !this.task.task_description || this.task.task_description.trim() == \"\" || !this.task.prod_id || this.task.prod_id.trim() == \"\" || !this.task.task_delivery || this.task.task_delivery == \"\" || this.task.task_delivery == \"undefined\" || !this.task.task_points || this.task.task_points == \"\" || this.task.task_points == \"undefined\";\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n      if (opt == 3) {\n        this.tagMenu = 3;\n      }\n      if (opt == 4) {\n        this.tagMenu = 4;\n      }\n    }\n  }, {\n    key: \"setPageNewTask\",\n    value: function setPageNewTask(opt) {\n      if (opt == 1) {\n        this.tagMenuNew = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuNew = 2;\n      }\n      if (opt == 3) {\n        this.tagMenuNew = 3;\n      }\n    }\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"filterMultipleShared\",\n    value: function filterMultipleShared(event) {\n      var query = event.query;\n      this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n    }\n  }, {\n    key: \"filterShared\",\n    value: function filterShared(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"showFilter\",\n    value: function showFilter() {\n      this.search = \"\";\n      $(\"#mdSearchTask\").modal(\"show\");\n    }\n  }, {\n    key: \"formatDate\",\n    value: function formatDate(date) {\n      date = new Date(date);\n      if (date && date !== \"\") {\n        var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n        var monthIndex = date.getMonth() + 1 < 10 ? \"0\" + (date.getMonth() + 1) : date.getMonth() + 1;\n        var year = date.getFullYear();\n        return year + '-' + monthIndex + '-' + day;\n      } else {\n        return '';\n      }\n    }\n  }, {\n    key: \"closeFilter\",\n    value: function closeFilter() {\n      this.mytask = [];\n      this.mytaskcopy = [];\n      this.search = \"\";\n      this.filter = false;\n      this.mytask.date_ini = \"\";\n      this.mytask.date_end = \"\";\n      this.usrs = [\"\"];\n      this.desc = \"\";\n      this.date_ini = \"\";\n      this.date_end = \"\";\n      this.assig = [\"\"];\n      this.projs = [\"\"];\n      this.task_ids = [\"\"];\n      this.prods = [\"\"];\n      this.projs = [\"\"];\n      this.reload();\n    }\n  }, {\n    key: \"filterTask\",\n    value: function filterTask() {\n      this.filter = true;\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.searchTask();\n    }\n  }, {\n    key: \"searchTask\",\n    value: function searchTask() {\n      this.mytaskcopy = jQuery.extend(true, {}, this.mytask);\n      var copy = [];\n\n      for (var x in this.mytask.assigned) {\n        copy.push(this.mytask.assigned[x].user_id);\n      }\n      this.mytask.assigned = copy;\n      var copyc = [];\n      for (var _x in this.mytask.creators) {\n        copyc.push(this.mytask.creators[_x].user_id);\n      }\n      this.mytask.creators = copyc;\n      var copyp = [];\n      for (var _x2 in this.mytask.projects) {\n        copyp.push(this.mytask.projects[_x2].proj_id);\n      }\n      this.mytask.projects = copyp;\n      var copypd = [];\n      for (var _x3 in this.mytask.products) {\n        copypd.push(this.mytask.products[_x3].prod_id);\n      }\n      this.mytask.products = copypd;\n\n      if (this.mytask.date_ini != null && this.mytask.date_ini != \"\" && this.mytask.date_end != null && this.mytask.date_end != \"\") {\n\n        this.mytask.date_ini = this.formatDate(this.mytask.date_ini);\n        this.mytask.date_end = this.formatDate(this.mytask.date_end);\n      } else {\n        this.mytask.date_ini = \"\";\n        this.mytask.date_end = \"\";\n      }\n      this.reload();\n      this.mytask = this.mytaskcopy;\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event, num) {\n      if (num == 1) {\n        var query = event.query;\n        this.productsa = this.filterP(query, this.productsb);\n      } else if (num == 2) {\n        var _query = event.query;\n        this.usersCRM = this.filterU(_query, this.usersCRMa);\n      } else if (num == 3) {\n        var _query2 = event.query;\n        this.myProjectsx = this.filterPj(_query2, this.myProjectsxb);\n      }\n    }\n  }, {\n    key: \"filterU\",\n    value: function filterU(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"filterP\",\n    value: function filterP(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.prod_name.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"filterPj\",\n    value: function filterPj(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.proj_subject.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"getFormTaskCriteria\",\n    value: function getFormTaskCriteria(task_id) {\n      var _this17 = this;\n\n      this.task.criteriaTask = [];\n      this._tasks.getFormTaskCriteria(task_id).subscribe(function (res) {\n        _this17.task.criteriaTask = res.data.data;\n      });\n    }\n  }, {\n    key: \"getInfoTaskCriteria\",\n    value: function getInfoTaskCriteria(task_id) {\n      var _this18 = this;\n\n      this.task.criteriaTask = [];\n      this._tasks.getInfoTaskCriteria(task_id).subscribe(function (res) {\n        _this18.task.criteriaTask = res.data.data;\n      });\n    }\n  }, {\n    key: \"getRolUser\",\n    value: function getRolUser() {\n      var _this19 = this;\n\n      this.typeRol = {};\n      this._user.getRolUser().subscribe(function (res) {\n        _this19.typeRol = res.data.role_id;\n      });\n    }\n  }, {\n    key: \"showDuplicateTaskModal\",\n    value: function showDuplicateTaskModal(idtk) {\n      var _this20 = this;\n\n      this.task = { usersShared: [], project: {}, attachments: [] };\n      this._tasks.getTask(idtk).subscribe(function (res) {\n        _this20.task.criteriaTask = res.data.criteriaTask;\n        _this20._tasks.getTaskFields(idtk).subscribe(function (res) {\n          _this20.task.form = res.data;\n        });\n        _this20.task = res.data;\n      });\n      $(\"#mdDuplicateTask\").modal(\"show\");\n      this.activeTabDescription_duplicateTask();\n    }\n  }, {\n    key: \"setPageDupliTk\",\n    value: function setPageDupliTk(opt) {\n      if (opt == 1) {\n        this.tagMenuDupliTk = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuDupliTk = 2;\n      }\n      if (opt == 3) {\n        this.tagMenuDupliTk = 3;\n      }\n      if (opt == 4) {\n        this.tagMenuDupliTk = 4;\n      }\n    }\n  }, {\n    key: \"activeTabDescription_addTask\",\n    value: function activeTabDescription_addTask() {\n      this.tagMenuNew = 1;\n      $('#li_criteria_task').removeClass('active');\n      $('#li_attachments_task').removeClass('active');\n      $('#li_description_task').addClass('active');\n    }\n  }, {\n    key: \"activeTabDescription_editTask\",\n    value: function activeTabDescription_editTask() {\n      this.tagMenu = 1;\n      $('#li_asocciateForm_editTask').removeClass('active');\n      $('#li_attachments_editTask').removeClass('active');\n      $('#li_criteria_editTask').removeClass('active');\n      $('#li_description_editTask').addClass('active');\n    }\n  }, {\n    key: \"activeTabDescription_duplicateTask\",\n    value: function activeTabDescription_duplicateTask() {\n      this.tagMenuDupliTk = 1;\n      $('#a_asocciateFormTask_duplicateTask').removeClass('active');\n      $('#li_attachments_duplicateTask').removeClass('active');\n      $('#a_criteriaTask_duplicateTask').removeClass('active');\n      $('#li_description_duplicateTask').addClass('active');\n    }\n  }, {\n    key: \"deleteFieldForm_duplicateTask\",\n    value: function deleteFieldForm_duplicateTask(i) {\n      this.task.criteriaTask.splice(i, 1);\n\n      var j = 1;\n\n      for (var _i4 = 0; _i4 < this.task.criteriaTask.length; _i4++) {\n        this.task.criteriaTask[_i4].tkcr_num = j;\n        j++;\n      }\n\n      if (this.task.criteriaTask.length == 0) {\n        this.activeTabDescription_duplicateTask();\n      }\n    }\n  }, {\n    key: \"deleteAttachment_duplicateTask\",\n    value: function deleteAttachment_duplicateTask(att) {\n\n      var index = 0;\n      for (var i in this.task.attachments) {\n        if (att.name == this.task.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n      this.task.attachments.splice(index, 1);\n\n      if (this.task.attachments.length == 0) {\n        this.activeTabDescription_duplicateTask();\n      }\n    }\n  }, {\n    key: \"getLevels\",\n    value: function getLevels() {\n      var _this21 = this;\n\n      this._tasks.getLevels().subscribe(function (res) {\n        var _iteratorNormalCompletion14 = true;\n        var _didIteratorError14 = false;\n        var _iteratorError14 = undefined;\n\n        try {\n          for (var _iterator14 = res.data[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {\n            var level = _step14.value;\n\n            _this21.levels.push({ label: level.tklv_description, value: level.tklv_id });\n          }\n        } catch (err) {\n          _didIteratorError14 = true;\n          _iteratorError14 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion14 && _iterator14.return) {\n              _iterator14.return();\n            }\n          } finally {\n            if (_didIteratorError14) {\n              throw _iteratorError14;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"showReject\",\n    value: function showReject(task) {\n      var _this22 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Reject this Task?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (task) {\n            _this22.rjtask.task_id = task.task_id;\n            _this22.rjtask.task_description = \"\";\n            $(\"#mdReject\").modal(\"show\");\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"rejectTask\",\n    value: function rejectTask() {\n      var _this23 = this;\n\n      this._tasks.rejectTask(this.rjtask.task_id, this.rjtask.task_description).subscribe(function (data) {\n        if (data.data != \"OK\") {\n          _this23.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this23._tasks.deletesprintbytask(_this23.rjtask.task_id).subscribe(function (res) {});\n          _this23.toastr.success(data.message, \"Task rejected\");\n        }\n        _this23.reload();\n      });\n    }\n  }, {\n    key: \"showBacklog\",\n    value: function showBacklog(task) {\n      var _this24 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Backlog this Task?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          _this24._tasks.backlogTask(task.task_id).subscribe(function (data) {\n            if (data.data == \"OK\") {\n              _this24.toastr.success(\"Task move to Backlog successfully\");\n            } else {\n              _this24.toastr.warning(data.message, \"Warning!\");\n            }\n            _this24.reload();\n          });\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"exportExcel\",\n    value: function exportExcel() {\n      var _this25 = this;\n\n      this._tasks.getExcel(this.filter_excel).subscribe(function (res) {\n        var route = res.data;\n        if (res.message == 'OK') {\n          _this25.toastr.success(\"report generated\");\n          //Usaremos un link para iniciar la descarga \n          var save = document.createElement('a');\n          save.href = route;\n          save.target = '_blank';\n          //Truco: así le damos el nombre al archivo\n          save.download = 'report_tasks';\n          var clicEvent = new MouseEvent('click', {\n            'view': window,\n            'bubbles': true,\n            'cancelable': true\n          });\n          //Simulamos un clic del usuario\n          save.dispatchEvent(clicEvent);\n          //Y liberamos recursos...\n          (window.URL || window.webkitURL).revokeObjectURL(save.href);\n        } else {\n          _this25.toastr.error(\"The document could not be generated\");\n        }\n      });\n    }\n  }]);\n\n  return TaskListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _users.UsersService, _product.ProductService, _project.ProjectService, _note.NoteService, _sprint.SprintService, _externalrequest.ExternalRequestService, _primeng.ConfirmationService, _units.UnitsService], TaskListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4), __webpack_require__(4)))\n\n/***/ }),\n/* 254 */,\n/* 255 */,\n/* 256 */,\n/* 257 */,\n/* 258 */,\n/* 259 */,\n/* 260 */,\n/* 261 */,\n/* 262 */,\n/* 263 */,\n/* 264 */,\n/* 265 */,\n/* 266 */,\n/* 267 */,\n/* 268 */,\n/* 269 */,\n/* 270 */,\n/* 271 */,\n/* 272 */,\n/* 273 */,\n/* 274 */,\n/* 275 */,\n/* 276 */,\n/* 277 */,\n/* 278 */,\n/* 279 */,\n/* 280 */,\n/* 281 */,\n/* 282 */,\n/* 283 */,\n/* 284 */,\n/* 285 */,\n/* 286 */,\n/* 287 */,\n/* 288 */,\n/* 289 */,\n/* 290 */,\n/* 291 */,\n/* 292 */,\n/* 293 */,\n/* 294 */,\n/* 295 */,\n/* 296 */,\n/* 297 */,\n/* 298 */,\n/* 299 */,\n/* 300 */,\n/* 301 */,\n/* 302 */,\n/* 303 */,\n/* 304 */,\n/* 305 */,\n/* 306 */,\n/* 307 */,\n/* 308 */,\n/* 309 */,\n/* 310 */,\n/* 311 */,\n/* 312 */,\n/* 313 */,\n/* 314 */,\n/* 315 */,\n/* 316 */,\n/* 317 */,\n/* 318 */,\n/* 319 */,\n/* 320 */,\n/* 321 */,\n/* 322 */,\n/* 323 */,\n/* 324 */,\n/* 325 */,\n/* 326 */,\n/* 327 */,\n/* 328 */,\n/* 329 */,\n/* 330 */,\n/* 331 */,\n/* 332 */,\n/* 333 */,\n/* 334 */,\n/* 335 */,\n/* 336 */,\n/* 337 */,\n/* 338 */,\n/* 339 */,\n/* 340 */,\n/* 341 */,\n/* 342 */,\n/* 343 */,\n/* 344 */,\n/* 345 */,\n/* 346 */,\n/* 347 */,\n/* 348 */,\n/* 349 */,\n/* 350 */,\n/* 351 */,\n/* 352 */,\n/* 353 */,\n/* 354 */,\n/* 355 */,\n/* 356 */,\n/* 357 */,\n/* 358 */,\n/* 359 */,\n/* 360 */,\n/* 361 */,\n/* 362 */,\n/* 363 */,\n/* 364 */,\n/* 365 */,\n/* 366 */,\n/* 367 */,\n/* 368 */,\n/* 369 */,\n/* 370 */,\n/* 371 */,\n/* 372 */,\n/* 373 */,\n/* 374 */,\n/* 375 */,\n/* 376 */,\n/* 377 */,\n/* 378 */,\n/* 379 */,\n/* 380 */,\n/* 381 */,\n/* 382 */,\n/* 383 */,\n/* 384 */,\n/* 385 */,\n/* 386 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, jQuery) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ProjectListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _constant = __webpack_require__(247);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _group = __webpack_require__(11);\n\nvar _users = __webpack_require__(20);\n\nvar _pipes = __webpack_require__(14);\n\nvar _projectlistTemplate = __webpack_require__(825);\n\nvar _projectlistTemplate2 = _interopRequireDefault(_projectlistTemplate);\n\nvar _project2 = __webpack_require__(83);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ProjectListComponent = exports.ProjectListComponent = (_dec = (0, _core.Component)({\n  selector: \"projectlist\",\n  template: _projectlistTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  declarations: [_project2.ProjectViewComponent],\n  encapsulation: _core.ViewEncapsulation.None\n}), _dec(_class = function () {\n  function ProjectListComponent(title, route, toastr, sanitizer, projectService, groupService, usersService, productService, confirmationService, constantService) {\n    var _this = this;\n\n    _classCallCheck(this, ProjectListComponent);\n\n    this._title = title;\n    this._route = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.confirm = confirmationService;\n    this._projects = projectService;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._user = usersService;\n    this._products = productService;\n    this._constants = constantService;\n    this.textState = \"\";\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.tagMenu = 1;\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem(\"title\")) {\n      this.stTitle = localStorage.getItem(\"title\");\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Projects ::.\");\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.project = { users: [], attachments: [], userssh: [] };\n    this.selprojects = [];\n    this.categories = [];\n    this.states = [];\n    this.namegroup = \"ALL\";\n    this._projects.getStates().subscribe(function (data) {\n      _this.states = data.data;\n    });\n    this._projects.getCategories().subscribe(function (data) {\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.categories.push({ label: c.para_name, value: c.para_id });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this.products = [];\n    this._products.getProducts().subscribe(function (data) {\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n    this.applicantlbl = [];\n    this._user.getEmailList().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var c = _step3.value;\n\n          _this.applicantlbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n    });\n    this.usersCRM = [];\n    this.usersCRMa = [];\n\n    this.userslbl = [];\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.usersCRM = data.data;\n      _this.usersCRMa = data.data;\n\n      _this.usersShareWith = data.data;\n      _this.usersShareWith_a = data.data;\n      var _iteratorNormalCompletion4 = true;\n      var _didIteratorError4 = false;\n      var _iteratorError4 = undefined;\n\n      try {\n        for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n          var c = _step4.value;\n\n          _this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion4 && _iterator4.return) {\n            _iterator4.return();\n          }\n        } finally {\n          if (_didIteratorError4) {\n            throw _iteratorError4;\n          }\n        }\n      }\n    });\n    this.groups = [];\n    this.lblgroups = [];\n    this._groups.getGroups().subscribe(function (data) {\n      _this.groups = data.data;\n      var _iteratorNormalCompletion5 = true;\n      var _didIteratorError5 = false;\n      var _iteratorError5 = undefined;\n\n      try {\n        for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n          var c = _step5.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n        }\n      } catch (err) {\n        _didIteratorError5 = true;\n        _iteratorError5 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion5 && _iterator5.return) {\n            _iterator5.return();\n          }\n        } finally {\n          if (_didIteratorError5) {\n            throw _iteratorError5;\n          }\n        }\n      }\n    });\n    this.projects = [];\n    this._constants.getConstants().subscribe(function (data) {});\n    this.cont = 0;\n    this.isLoading = false;\n    this.myproj = [];\n    this.filter = false;\n    this.usrs = [\"\"];\n    this.appl = [\"\"];\n    this.projs = [\"\"];\n    this.desc = \"\";\n    this.proj_id = [\"\"];\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.prods = [\"\"];\n    this.productsa = [];\n    this.productsb = [];\n    this.statusdelete = [];\n    this._products.getProducts().subscribe(function (data) {\n      _this.productsa = data.data;\n      _this.productsb = data.data;\n      var _iteratorNormalCompletion6 = true;\n      var _didIteratorError6 = false;\n      var _iteratorError6 = undefined;\n\n      try {\n        for (var _iterator6 = data.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n          var c = _step6.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      } catch (err) {\n        _didIteratorError6 = true;\n        _iteratorError6 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion6 && _iterator6.return) {\n            _iterator6.return();\n          }\n        } finally {\n          if (_didIteratorError6) {\n            throw _iteratorError6;\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(ProjectListComponent, [{\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      this.reload();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this2 = this;\n\n      this.isLoading = true;\n      if (this.myproj.applicants && this.myproj.applicants.length > 0) {\n        this.appl = this.myproj.applicants;\n      } else {\n        this.appl = [\"\"];\n      }\n      if (this.myproj.creators && this.myproj.creators.length > 0) {\n        this.usrs = this.myproj.creators;\n      } else {\n        this.usrs = [\"\"];\n      }\n      if (this.myproj.projects && this.myproj.projects.length > 0) {\n        this.projs = this.myproj.projects;\n      } else {\n        this.projs = [\"\"];\n      }\n      if (this.myproj.products && this.myproj.products.length > 0) {\n        this.prods = this.myproj.products;\n      } else {\n        this.prods = [\"\"];\n      }\n      if (this.myproj.description && this.myproj.description != \"\") {\n        this.desc = this.myproj.description;\n      } else {\n        this.desc = \"\";\n      }\n      if (this.myproj.proj_ids && this.myproj.proj_ids.length > 0) {\n        this.proj_id = this.myproj.proj_ids;\n      } else {\n        this.proj_id = [\"\"];\n      }\n      if (this.myproj.date_ini != null && this.myproj.date_ini != \"\" && this.myproj.date_ini != \"undefined\") {\n        if (this.date_ini != \"\" && this.date_ini != null) {\n          this.date_ini = this.formatDate(this.myproj.date_ini);\n        } else {\n          this.date_ini = this.myproj.date_ini;\n        }\n      } else {\n        this.date_ini = \"\";\n        this.date_end = \"\";\n      }\n      if (this.myproj.date_end != null && this.myproj.date_end != \"\" && this.myproj.date_end != \"undefined\") {\n        if (this.date_end != \"\" && this.date_end != null) {\n          this.date_end = this.formatDate(this.myproj.date_end);\n        } else {\n          this.date_end = this.myproj.date_end;\n        }\n      } else {\n        this.date_end = \"\";\n        this.date_ini = \"\";\n      }\n      this.projects = [];\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search.trim(),\n        state: this.textState,\n        group: this.textGroup,\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\",\n        applicants: this.appl,\n        creators: this.usrs,\n        projects: this.projs,\n        desc: this.desc,\n        proj_ids: this.proj_id,\n        date_ini: this.date_ini,\n        date_end: this.date_end,\n        products: this.prods\n      };\n      this._projects.getprojectList(filter).subscribe(function (res) {\n        _this2.isLoading = false;\n        _this2.projects = res.data.data;\n        _this2.itemcount = res.data.count;\n        _this2.lastpage = _this2.itemcount / _this2.limitpage;\n        if (_this2.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this2.lastpage);\n          _this2.lastpage = countpag;\n        }\n        _this2.pages = [];\n        for (var i = 1; i <= _this2.lastpage; i++) {\n          _this2.pages.push(i);\n        }\n        if (_this2.pages.length == 0) {\n          _this2.pages = [1];\n        }\n      });\n      this.cont = 0;\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      if (event.keyCode == 13) {\n        this.isLoading = true;\n        this.projects = [];\n        this.currentpage = 1;\n        this.searchProject();\n      }\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n      this.searchProject();\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.searchProject();\n    }\n  }, {\n    key: \"goTo\",\n    value: function goTo(value) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      if (value == 0) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n      } else {\n        this.currentpage = Math.round(this.itemcount / this.limitpage);\n        var mod = this.itemcount % this.limitpage;\n        if (mod > 0 && mod < 5) {\n          this.currentpage += 1;\n        }\n      }\n      this.searchProject();\n    }\n  }, {\n    key: \"addComment\",\n    value: function addComment() {\n      var _this3 = this;\n\n      this.notemd.proj_id = this.project.proj_id;\n      this._notes.putNote(note).subscribe(function (data) {\n        _this3.notemd = { note_text: \"\" };\n      });\n    }\n  }, {\n    key: \"deleteAttachmentProject\",\n    value: function deleteAttachmentProject(proj, att) {\n      var _this4 = this;\n\n      for (var i in proj.attachments) {\n        if (proj.attachments[i] === att) {\n          this._projects.deleteAttachmentProject(proj.proj_id, proj.attachments[i].pjat_id).subscribe(function (res) {\n            if (res.data != null) {\n              _this4.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this4.getAttachments(proj.proj_id);\n            } else {\n              _this4.toastr.warning(\"\", res.message);\n            }\n          });\n          proj.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n\n      var index = 0;\n      for (var i in this.project.attachments) {\n        if (att.name == this.project.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n      this.project.attachments.splice(index, 1);\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(projid) {\n      var _this5 = this;\n\n      this._projects.getAttachments(projid).subscribe(function (res) {\n        _this5.project.attachments = res.data;\n        for (var i = 0; i < _this5.project.attachments.length; i++) {\n          if (i == 0) {\n            _this5.project.total_attachments = 1;\n          } else {\n            _this5.project.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"addproject\",\n    value: function addproject() {\n      this.project = { users: [], attachments: [], userssh: [] };\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      $(\"#mdproject\").modal(\"show\");\n    }\n  }, {\n    key: \"showModalProject\",\n    value: function showModalProject(idproj) {\n      $(\"#myProject\" + idproj).click();\n    }\n  }, {\n    key: \"showEditModal\",\n    value: function showEditModal(idproj) {\n      var _this6 = this;\n\n      this.project = { users: [], attachments: [], userssh: [] };\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._projects.getproject(idproj.proj_id).subscribe(function (res) {\n        res.data.proj_description = _this6.escapeHtml(res.data.proj_description);\n        _this6.project = res.data;\n        _this6._projects.getAttachments(idproj.proj_id).subscribe(function (res) {\n          _this6.project.attachments = res.data;\n        });\n        $(\"#mdproject\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"openproject\",\n    value: function openproject(idtk) {\n      var _this7 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to open the project(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this7._projects.setStatusproject(idtk, 2).subscribe(function (data) {\n              if (data.data == \"\") {\n                _this7.toastr.error(data.message);\n              } else {\n                _this7.toastr.success(\"project opened successfully\");\n              }\n              _this7.searchProject();\n            });\n          } else {\n            if (_this7.selprojects.length > 0) {\n              for (var x in _this7.selprojects) {\n                _this7._projects.setStatusproject(_this7.selprojects[x], 2).subscribe(function (data) {});\n              }\n              _this7.selprojects = [];\n              _this7.searchProject();\n              _this7.toastr.success(\"projects opened successfully\");\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"closeproject\",\n    value: function closeproject(idtk) {\n      var _this8 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to close the project(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this8._projects.setStatusproject(idtk, 3).subscribe(function (data) {\n              if (data.data == \"\") {\n                _this8.toastr.error(data.message);\n              } else {\n                _this8.toastr.success(\"project closed successfully\");\n              }\n              _this8.searchProject();\n            });\n          } else {\n            if (_this8.selprojects.length > 0) {\n              for (var x in _this8.selprojects) {\n                _this8._projects.setStatusproject(_this8.selprojects[x], 3).subscribe(function (data) {});\n              }\n              _this8.selprojects = [];\n              _this8.toastr.success(\"projects closed successfully\");\n              _this8.searchProject();\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"verifyStatus\",\n    value: function verifyStatus() {\n\n      this.statusdelete = [];\n      for (var i = 0; i < this.projects.length; i++) {\n        for (var j = 0; j < this.selprojects.length; j++) {\n          if (this.projects[i].proj_id == this.selprojects[j] && this.projects[i].para_status == '5') {\n            this.statusdelete.push(this.projects[i].proj_id);\n          }\n        }\n      }\n    }\n  }, {\n    key: \"deleteproject\",\n    value: function deleteproject(idtk) {\n      var _this9 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to delete the project(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this9._projects.setStatusproject(idtk, 5).subscribe(function (data) {\n              if (data.data == \"\") {\n                _this9.toastr.error(data.message);\n              } else {\n                _this9.toastr.success(\"project deleted successfully\");\n              }\n              _this9.searchProject();\n            });\n          } else {\n            if (_this9.selprojects.length > 0) {\n              for (var x in _this9.selprojects) {\n                _this9._projects.setStatusproject(_this9.selprojects[x], 5).subscribe(function (data) {\n                  if (data.data == \"\") {\n                    _this9.toastr.error(data.message);\n                  } else {\n                    _this9.toastr.success(\"project deleted successfully\");\n                  }\n                });\n              }\n              _this9.selprojects = [];\n              _this9.searchProject();\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"validateProj\",\n    value: function validateProj() {\n      return !this.project.proj_subject || this.project.proj_subject.trim() == \"\" || !this.project.proj_description || this.project.proj_description.trim() == \"\" || !this.project.prod_id || this.project.prod_id.trim() == \"\" || !this.project.group_assigned || this.project.group_assigned.trim() == \"\" || !this.project.user_applicant || this.project.user_applicant.trim() == \"\" || !this.project.user_creator || this.project.user_creator.trim() == \"\" || !this.project.proj_end || this.project.proj_end == \"\" || this.project.proj_end == \"undefined\" || !this.project.proj_propoints || this.project.proj_propoints == \"\" || this.project.proj_propoints == \"undefined\";\n    }\n  }, {\n    key: \"saveproject\",\n    value: function saveproject() {\n      var _this10 = this;\n\n      this.project.proj_end = new Date(this.project.proj_end);\n      this.project.proj_end = this.project.proj_end.getFullYear() + \"-\" + (this.project.proj_end.getMonth() + 1) + \"-\" + this.project.proj_end.getDate();\n\n      var users_share = [];\n\n      for (var user in this.project.userssh) {\n        users_share.push(this.project.userssh[user].user_id);\n      }\n\n      var project = Object.assign({}, this.project);\n      project.users = users_share;\n      this.isLoading = true;\n\n      this._projects.putproject(project).subscribe(function (data) {\n        _this10.isLoading = false;\n        if (data.data === \"\" || data.data === \"0\" || data.data == null) {\n          _this10.toastr.warning(data.message, \"Attention!\");\n        } else {\n          _this10.toastr.success(data.message, \"project saved successfully\");\n          $(\"#mdproject\").modal(\"hide\");\n          _this10.reload();\n          _this10.project = { attachments: [] };\n        }\n      });\n    }\n  }, {\n    key: \"selectAll\",\n    value: function selectAll() {\n      if (this.selprojects.length > 0) {\n        this.selprojects = [];\n      } else {\n        this.selprojects = [];\n        for (var t in this.projects) {\n          this.selprojects.push(this.projects[t].proj_id);\n        }\n      }\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      this.textState = state;\n      this.posState = \"para_status\";\n      this.currentpage = 1;\n      this.searchProject();\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state, name) {\n      this.namegroup = name;\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.searchProject();\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.project.attachments.push(files[0]);\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (base64test.exec(input)) {\n        return false;\n      }\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n      do {\n        enc1 = keyStr.indexOf(input.charAt(i++));\n        enc2 = keyStr.indexOf(input.charAt(i++));\n        enc3 = keyStr.indexOf(input.charAt(i++));\n        enc4 = keyStr.indexOf(input.charAt(i++));\n\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n\n        output = output + String.fromCharCode(chr1);\n\n        if (enc3 != 64) {\n          output = output + String.fromCharCode(chr2);\n        }\n        if (enc4 != 64) {\n          output = output + String.fromCharCode(chr3);\n        }\n\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n\n      return unescape(output);\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      input = escape(input);\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      do {\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n        output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n      return output;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      return text;\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n      if (opt == 3) {\n        this.tagMenu = 3;\n      }\n    }\n  }, {\n    key: \"showFilter\",\n    value: function showFilter() {\n      //this.mydaily = [];\n      this.search = \"\";\n      $(\"#mdSearchProject\").modal(\"show\");\n    }\n  }, {\n    key: \"filterProject\",\n    value: function filterProject() {\n      this.filter = true;\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.searchProject();\n    }\n  }, {\n    key: \"searchProject\",\n    value: function searchProject() {\n      this.myprojcopy = jQuery.extend(true, {}, this.myproj);\n      var copy = [];\n      for (var x in this.myproj.applicants) {\n        copy.push(this.myproj.applicants[x].user_id);\n      }\n      this.myproj.applicants = copy;\n      var copya = [];\n      for (var _x in this.myproj.creators) {\n        copya.push(this.myproj.creators[_x].user_id);\n      }\n      this.myproj.creators = copya;\n      var copyp = [];\n      for (var _x2 in this.myproj.projects) {\n        copyp.push(this.myproj.projects[_x2].proj_id);\n      }\n      this.myproj.projects = copyp;\n      var copypd = [];\n      for (var _x3 in this.myproj.products) {\n        copypd.push(this.myproj.products[_x3].prod_id);\n      }\n      this.myproj.products = copypd;\n      if (this.myproj.date_ini != null && this.myproj.date_ini != \"\" && this.myproj.date_end != null && this.myproj.date_end != \"\") {\n        this.myproj.date_ini = this.formatDate(this.myproj.date_ini);\n        this.myproj.date_end = this.formatDate(this.myproj.date_end);\n      } else {\n        this.myproj.date_ini = \"\";\n        this.myproj.date_end = \"\";\n      }\n      this.reload();\n      this.myproj = this.myprojcopy;\n    }\n  }, {\n    key: \"formatDate\",\n    value: function formatDate(date) {\n      date = new Date(date);\n      if (date && date !== \"\") {\n        var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n        var monthIndex = date.getMonth() + 1 < 10 ? \"0\" + (date.getMonth() + 1) : date.getMonth() + 1;\n        var year = date.getFullYear();\n        return year + '-' + monthIndex + '-' + day;\n      } else {\n        return '';\n      }\n    }\n  }, {\n    key: \"closeFilter\",\n    value: function closeFilter() {\n      this.myproj = [];\n      this.myprojcopy = [];\n      this.search = \"\";\n      this.filter = false;\n      this.myproj.date_ini = \"\";\n      this.myproj.date_end = \"\";\n      this.usrs = [\"\"];\n      this.desc = \"\";\n      this.date_ini = \"\";\n      this.date_end = \"\";\n      this.appl = [\"\"];\n      this.projs = [\"\"];\n      this.proj_id = [\"\"];\n      this.prods = [\"\"];\n      this.reload();\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event, num) {\n      if (num == 1) {\n        var query = event.query;\n        this.productsa = this.filterP(query, this.productsb);\n      } else if (num == 2) {\n        var _query = event.query;\n        this.usersCRM = this.filterU(_query, this.usersCRMa);\n      } else if (num == 3) {\n        var _query2 = event.query;\n        this.myProjects = this.filterPj(_query2, this.myProjectsb);\n      }\n    }\n  }, {\n    key: \"filterU\",\n    value: function filterU(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"filterP\",\n    value: function filterP(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.prod_name.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"filterPj\",\n    value: function filterPj(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.proj_subject.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"filterMultipleShared\",\n    value: function filterMultipleShared(event) {\n      var query = event.query;\n      this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n    }\n  }, {\n    key: \"filterShared\",\n    value: function filterShared(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }]);\n\n  return ProjectListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _ngxToastr.ToastrService, _platformBrowser.DomSanitizer, _project.ProjectService, _group.GroupService, _users.UsersService, _product.ProductService, _primeng.ConfirmationService, _constant.ConstantService], ProjectListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4), __webpack_require__(4)))\n\n/***/ }),\n/* 387 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.MailboxComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _dec2, _class, _desc, _value, _class2, _descriptor;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _group = __webpack_require__(11);\n\nvar _directory = __webpack_require__(31);\n\nvar _mail = __webpack_require__(36);\n\nvar _pipes = __webpack_require__(14);\n\nvar _mailboxTemplate = __webpack_require__(829);\n\nvar _mailboxTemplate2 = _interopRequireDefault(_mailboxTemplate);\n\nvar _util = __webpack_require__(830);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _initDefineProp(target, property, descriptor, context) {\n    if (!descriptor) return;\n    Object.defineProperty(target, property, {\n        enumerable: descriptor.enumerable,\n        configurable: descriptor.configurable,\n        writable: descriptor.writable,\n        value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n    });\n}\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n    var desc = {};\n    Object['ke' + 'ys'](descriptor).forEach(function (key) {\n        desc[key] = descriptor[key];\n    });\n    desc.enumerable = !!desc.enumerable;\n    desc.configurable = !!desc.configurable;\n\n    if ('value' in desc || desc.initializer) {\n        desc.writable = true;\n    }\n\n    desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n        return decorator(target, property, desc) || desc;\n    }, desc);\n\n    if (context && desc.initializer !== void 0) {\n        desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n        desc.initializer = undefined;\n    }\n\n    if (desc.initializer === void 0) {\n        Object['define' + 'Property'](target, property, desc);\n        desc = null;\n    }\n\n    return desc;\n}\n\nfunction _initializerWarningHelper(descriptor, context) {\n    throw new Error('Decorating class property failed. Please ensure that transform-class-properties is enabled.');\n}\n\nvar MailboxComponent = exports.MailboxComponent = (_dec = (0, _core.Component)({\n    selector: 'login',\n    template: _mailboxTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec2 = (0, _core.ViewChild)('iframe'), _dec(_class = (_class2 = function () {\n    function MailboxComponent(route, toastr, mailService, sanitizer, ProjectService, groupService, directoryService, productService, confirmationService) {\n        _classCallCheck(this, MailboxComponent);\n\n        _initDefineProp(this, 'frame', _descriptor, this);\n\n        this._route = route;\n        this._inbox = mailService;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this.confirm = confirmationService;\n        this._projects = ProjectService;\n        this._groups = groupService;\n        this._directory = directoryService;\n        this._products = productService;\n        this.currentpage = 1;\n        this.limitpage = 0;\n        this.itemcount = 0;\n        this.selmails = [];\n        this._sanitizer = sanitizer;\n        this.emails = [];\n        this.project = { users: [], attachments: [] };\n        this.mymail = { message: \"\", attachments: [] };\n        this.mail = { message: \"\", attachments: [] };\n        this.posFlag = \"mbfl_id\";\n        this.posFolder = \"mbfo_id\";\n        this.selectedNodes = [];\n        this.selectedNodesFl = [];\n        this.selectedFolders = [];\n        this.foldersTree = [];\n        this.selectedFlag = [];\n        this.flagFilter = [];\n        this.lastemail = 0;\n        this.emailsnew = [];\n        this.currmailbox = \"ALL\";\n        this.topmail = 0;\n        this.botmail = 0;\n        this.curfilter = \"\";\n        // this.getMail();\n        this.listmails = [];\n        this.listmailsa = [];\n        this.mailaccounts = [];\n        this.activemenu = 0;\n        this.maildetails = [];\n        this.accountDetails = {};\n        this.newaccount = {};\n        this.curfolder = \"INBOX\";\n        this.selection = {};\n        this.sort = \"\";\n        this.sortoptions = [{ label: \"Date\", value: \"SORTARRIVAL\" }, { label: \"From\", value: \"SORTFROM\" }, { label: \"To\", value: \"SORTTO\" }, { label: \"Size\", value: \"SORTSIZE\" }, { label: \"Subject\", value: \"SORTSUBJECT\" }];\n        this.selectedOption = { label: \"Date\", value: \"SORTARRIVAL\" };\n        this.selectedOrder = {};\n        this.fromOptions = [];\n        this.tagMenuNew = 1;\n\n        switch (this.selectedOption.value) {\n            case \"SORTARRIVAL\":\n                this.sortorder = [{ label: \"Oldest Message on top\", value: 0 }, { label: \"Newest Message on top\", value: 1 }];\n                break;\n            case \"SORTFROM\":\n            case \"SORTTO\":\n            case \"SORTSUBJECT\":\n                this.sortorder = [{ label: \"A to Z\", value: 0 }, { label: \"Z to A\", value: 1 }];\n                break;\n            case \"SORTSIZE\":\n                this.sortorder = [{ label: \"Smaller Message on top\", value: 0 }, { label: \"Largest Message on top\", value: 1 }];\n                break;\n            default:\n                break;\n        }\n        this.newMessage = { to: [], cc: [], message: \"\", attachments: [] };\n    }\n\n    _createClass(MailboxComponent, [{\n        key: 'ngOnInit',\n        value: function ngOnInit() {\n            var _this = this;\n\n            this.categories = [];\n            this._projects.getCategories().subscribe(function (data) {\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var c = _step.value;\n\n                        _this.categories.push({ label: c.cati_user_name, value: c.id_caproject });\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n            });\n            this.products = [];\n            this._products.getProducts().subscribe(function (data) {\n                var _iteratorNormalCompletion2 = true;\n                var _didIteratorError2 = false;\n                var _iteratorError2 = undefined;\n\n                try {\n                    for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                        var c = _step2.value;\n\n                        _this.products.push({ label: c.prod_name, value: c.prod_id });\n                    }\n                } catch (err) {\n                    _didIteratorError2 = true;\n                    _iteratorError2 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                            _iterator2.return();\n                        }\n                    } finally {\n                        if (_didIteratorError2) {\n                            throw _iteratorError2;\n                        }\n                    }\n                }\n            });\n            this.applicantlbl = [];\n            this.usersCRM = [];\n            this.usersCRMa = [];\n            this.groups = [];\n            this.lblgroups = [];\n            this._groups.getGroups().subscribe(function (data) {\n                _this.groups = data.data;\n                var _iteratorNormalCompletion3 = true;\n                var _didIteratorError3 = false;\n                var _iteratorError3 = undefined;\n\n                try {\n                    for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                        var c = _step3.value;\n\n                        _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n                    }\n                } catch (err) {\n                    _didIteratorError3 = true;\n                    _iteratorError3 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                            _iterator3.return();\n                        }\n                    } finally {\n                        if (_didIteratorError3) {\n                            throw _iteratorError3;\n                        }\n                    }\n                }\n            });\n            this.getMyAccounts();\n            this.NewMailbox(this.currmailbox, this.lastemail, this.curfilter, this.curfolder);\n        }\n    }, {\n        key: 'addproject',\n        value: function addproject() {\n            this.project.proj_subject = this.mymail.mabo_subject;\n            this.project.proj_description = this.escapeHtml(this.mymail.mabo_htmlmessage);\n            this.project.attachments = [];\n            for (var i = 0; i < this.mymail.attachments.length; i++) {\n                this.mymail.attachments[i].tkat_type = this.mymail.attachments[i].type;\n                this.project.attachments.push(this.mymail.attachments[i]);\n            }\n            $('#mdAddproject').modal('show');\n        }\n    }, {\n        key: 'filterMultiple',\n        value: function filterMultiple(event) {\n            var query = event.query;\n            this.usersCRM = this.filter(query, this.usersCRMa);\n        }\n    }, {\n        key: 'filterMultipleEmails',\n        value: function filterMultipleEmails(event) {\n            var query = event.query;\n            this.listmails = this.filter(query, this.listmailsa);\n        }\n    }, {\n        key: 'filter',\n        value: function filter(query, countries) {\n            var filtered = [];\n            for (var i = 0; i < countries.length; i++) {\n                var country = countries[i];\n                if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n                    filtered.push(country);\n                }\n            }\n            return filtered;\n        }\n    }, {\n        key: 'saveproject',\n        value: function saveproject() {\n            var _this2 = this;\n\n            var usarr = [];\n            for (var x in this.project.users) {\n                usarr.push(this.project.users[x].user_id);\n            }\n            this.project.users = usarr;\n            this.project.id_mail_box = this.mymail.id;\n            this._projects.putproject(this.project).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this2.toastr.warning(data.message, \"Good news!\");\n                } else {\n                    _this2.toastr.success(data.message, \"project created successfully\");\n                }\n                _this2.readMail(_this2.mymail.id);\n            });\n            this.project = { users: [], attachments: [] };\n        }\n    }, {\n        key: 'setCurPage',\n        value: function setCurPage(value) {\n            if (value == 0) {\n                this.NewMailbox(this.currmailbox, this.lastemail - 40, this.curfilter, this.curfolder);\n            } else if (value == 1) {\n                this.NewMailbox(this.currmailbox, this.lastemail, this.curfilter, this.curfolder);\n            }\n        }\n    }, {\n        key: 'calculateTime',\n        value: function calculateTime(dateString) {\n            if (dateString) {\n                var months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n                var dt = dateString.split(/\\-|\\s/);\n                var ndt = new Date(dt[0], dt[1] - 1, dt[2]);\n                var today = new Date();\n                if (today.getFullYear() == ndt.getFullYear()) {\n                    if (today.getMonth() == ndt.getMonth()) {\n                        if (today.getDate() == ndt.getDate()) {\n                            return dt[3];\n                        }\n                    }\n                    return dt[2] + \" \" + months[ndt.getMonth()];\n                } else {\n                    return dt[2] + \" \" + months[ndt.getMonth()] + \" \" + ndt.getFullYear();\n                }\n            } else {\n                return dateString;\n            }\n        }\n    }, {\n        key: 'decode64',\n        value: function decode64(input) {\n            var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n            var output = \"\";\n            var chr1,\n                chr2,\n                chr3 = \"\";\n            var enc1,\n                enc2,\n                enc3,\n                enc4 = \"\";\n            var i = 0;\n\n            // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n            var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n            if (base64test.exec(input)) {\n                return false;\n            }\n            input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n            do {\n                enc1 = keyStr.indexOf(input.charAt(i++));\n                enc2 = keyStr.indexOf(input.charAt(i++));\n                enc3 = keyStr.indexOf(input.charAt(i++));\n                enc4 = keyStr.indexOf(input.charAt(i++));\n\n                chr1 = enc1 << 2 | enc2 >> 4;\n                chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n                chr3 = (enc3 & 3) << 6 | enc4;\n\n                output = output + String.fromCharCode(chr1);\n\n                if (enc3 != 64) {\n                    output = output + String.fromCharCode(chr2);\n                }\n                if (enc4 != 64) {\n                    output = output + String.fromCharCode(chr3);\n                }\n\n                chr1 = chr2 = chr3 = \"\";\n                enc1 = enc2 = enc3 = enc4 = \"\";\n            } while (i < input.length);\n\n            return unescape(output);\n        }\n    }, {\n        key: 'encode64',\n        value: function encode64(input) {\n            var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n            input = escape(input);\n            var output = \"\";\n            var chr1,\n                chr2,\n                chr3 = \"\";\n            var enc1,\n                enc2,\n                enc3,\n                enc4 = \"\";\n            var i = 0;\n\n            do {\n                chr1 = input.charCodeAt(i++);\n                chr2 = input.charCodeAt(i++);\n                chr3 = input.charCodeAt(i++);\n                enc1 = chr1 >> 2;\n                enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n                enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n                enc4 = chr3 & 63;\n                if (isNaN(chr2)) {\n                    enc3 = enc4 = 64;\n                } else if (isNaN(chr3)) {\n                    enc4 = 64;\n                }\n                output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n                chr1 = chr2 = chr3 = \"\";\n                enc1 = enc2 = enc3 = enc4 = \"\";\n            } while (i < input.length);\n            return output;\n        }\n    }, {\n        key: 'sanitizeHtml',\n        value: function sanitizeHtml(text) {\n            if (text) {\n                var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n                if (!base64test.exec(text)) {\n                    text = this.decode64(text);\n                }\n                text = this.escapeHtml(text);\n                text = this._sanitizer.bypassSecurityTrustHtml(text);\n                if (text.changingThisBreaksApplicationSecurity) {\n                    text = text.changingThisBreaksApplicationSecurity;\n                }\n                return text;\n            } else {\n                return \"\";\n            }\n        }\n    }, {\n        key: 'escapeHtml',\n        value: function escapeHtml(text) {\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }, {\n        key: 'encodeHtml',\n        value: function encodeHtml(text) {\n            return text.replace(\"&\", \"&amp;\").replace(\"<\", \"&lt;\").replace(\">\", \"&gt;\").replace('\"', \"&quot;\").replace(\"'\", \"&#039;\");\n        }\n    }, {\n        key: 'setFlag',\n        value: function setFlag(idmail, idflag) {\n            var _this3 = this;\n\n            this._inbox.setFlag(idmail, idflag).subscribe(function (data) {\n                _this3.getMail();\n                if (data.data != \"OK\") {\n                    _this3.toastr.error(data.message, \"Error\");\n                } else {\n                    _this3.toastr.success(data.message, \"Flag assigned\");\n                }\n            });\n        }\n    }, {\n        key: 'setFolder',\n        value: function setFolder(idmail, idfolder) {\n            var _this4 = this;\n\n            this._inbox.setFolder(idmail, idfolder).subscribe(function (data) {\n                _this4.getMail();\n                if (data.data != \"OK\") {\n                    _this4.toastr.error(data.message, \"Error\");\n                } else {\n                    _this4.toastr.success(data.message, \"Folder changed\");\n                }\n            });\n        }\n    }, {\n        key: 'updateSelect',\n        value: function updateSelect(event) {\n            this.selectedFolders = [];\n            var _iteratorNormalCompletion4 = true;\n            var _didIteratorError4 = false;\n            var _iteratorError4 = undefined;\n\n            try {\n                for (var _iterator4 = this.selectedNodes[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                    var c = _step4.value;\n\n                    this.selectedFolders.push(c.value);\n                }\n            } catch (err) {\n                _didIteratorError4 = true;\n                _iteratorError4 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                        _iterator4.return();\n                    }\n                } finally {\n                    if (_didIteratorError4) {\n                        throw _iteratorError4;\n                    }\n                }\n            }\n        }\n    }, {\n        key: 'selectAll',\n        value: function selectAll() {\n            if (this.selmails.length > 0) {\n                this.selmails = [];\n                this.selection = {};\n            } else {\n                this.selmails = [];\n                this.selection = { emails: [], action: \"\" };\n                for (var t in this.emails) {\n                    this.selmails.push(this.emails[t].number);\n                    this.selection.emails.push({ number: this.emails[t].number, account: this.emails[t].accountid });\n                }\n            }\n        }\n    }, {\n        key: 'NewMailbox',\n        value: function NewMailbox(mbox, lastemail, criteria, folder) {\n            var _this5 = this;\n\n            this.spinner = true;\n            if (this.activemenu == 1) {\n                this.activemenu = 0;\n            }\n            this.totalmsg = 0;\n            this.currmailbox = mbox;\n            this.emails = [];\n            this.curfolder = folder;\n            if (lastemail > 0) {\n                lastemail = lastemail + 1;\n            }\n            var emailrequest = { mbox: this.currmailbox, lmail: lastemail, criteria: criteria, folder: folder, order: this.selectedOrder.value };\n\n            this._inbox.NewMailbox(emailrequest).subscribe(function (res) {\n                var _iteratorNormalCompletion5 = true;\n                var _didIteratorError5 = false;\n                var _iteratorError5 = undefined;\n\n                try {\n                    for (var _iterator5 = res.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                        var c = _step5.value;\n\n                        var totalaccounts = res.data.length;\n                        for (var i = 0; i < c.length; i++) {\n                            if (i == 0) {\n                                _this5.lastemail = c[i][\"idx\"];\n                                _this5.totalmsg += c[i][\"total_msg\"];\n                                _this5.topmail = totalaccounts * (_this5.lastemail - 19) + 1;\n                                _this5.botmail = totalaccounts * (_this5.lastemail + 1);\n                            } else {\n                                _this5.emails.push({ subject: c[i].subject, sender: c[i].sender.sender_personal, date: c[i].date, number: c[i].number, usem_id: c[i].usem_id, status: c[i].status, attachments: c[i].attachments });\n                            }\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError5 = true;\n                    _iteratorError5 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                            _iterator5.return();\n                        }\n                    } finally {\n                        if (_didIteratorError5) {\n                            throw _iteratorError5;\n                        }\n                    }\n                }\n\n                if (_this5.topmail < 0) {\n                    _this5.topmail = 1;\n                    _this5.botmail = _this5.emails.length;\n                }\n                if (_this5.lastemail + 1 == _this5.totalmsg) {\n                    _this5.topmail = _this5.totalmsg - (_this5.emails.length - 1);\n                }\n                _this5.spinner = false;\n            });\n        }\n    }, {\n        key: 'streamMessage',\n        value: function streamMessage(email) {\n            var _this6 = this;\n\n            if ($(\"#mail-\" + email.number + \"acc-\" + email.usem_id).hasClass(\"email_unread\")) {\n                $(\"#mail-\" + email.number + \"acc-\" + email.usem_id).removeClass(\"email_unread\");\n                $(\"#unread\" + email.number + email.usem_id).toggle();\n            };\n\n            this.spinner = true;\n\n            if ($(\".email_element\").hasClass(\"email_selected\")) {\n                $(\".email_selected\").removeClass(\"email_selected\");\n            }\n            if ($(this).hasClass(\"email_element\")) {\n                $(this).addClass(\"email_selected\");\n            } else if ($(this).parent().hasClass(\"email_element\")) {\n                $(this).parent().addClass(\"email_selected\");\n            } else if ($(this).parent().parent().hasClass(\"email_element\")) {\n                $(this).parent().parent().addClass(\"email_selected\");\n            }\n\n            if (this.mymail.htmlmsg) {\n                this.mymail = { message: \"\", attachments: [] };\n            }\n            this._inbox.streamMessage(email.number, email.usem_id, this.curfolder).subscribe(function (res) {\n                _this6.mymail = res.data;\n                _this6.mymail.sender_personal = email.sender;\n                _this6.mymail.htmlmsg = _this6.sanitizeHtml(_this6.mymail.htmlmsg);\n                _this6.mymail.htmlmsg = _this6.escapeHtml(_this6.mymail.htmlmsg);\n                if (_this6.mymail.htmlmsg != \"\") {\n                    setTimeout(function () {\n                        _this6.loadHTML();\n                    }, 0);\n                } else {\n                    _this6.mymail.htmlmsg = \"<h3>This email has no content</h3>\";\n                    setTimeout(function () {\n                        _this6.loadHTML();\n                    }, 0);\n                }\n                _this6.mymail.to = \"\";\n                if (_this6.mymail.recipients.length > 0) {\n                    _this6.mymail.to = _this6.mymail.recipients[0].mailbox + '@' + _this6.mymail.recipients[0].host;\n                }\n                if (_this6.mymail.recipients.length > 1) {\n                    for (var i = 1; i < _this6.mymail.recipients.length; i++) {\n                        _this6.mymail.to += ',' + _this6.mymail.recipients[i].mailbox + '@' + _this6.mymail.recipients[i].host;\n                    }\n                }\n            });\n        }\n    }, {\n        key: 'searchEmail',\n        value: function searchEmail(text) {\n            text = text.replace(/['\"]+/g, '');\n            this.NewMailbox(0, text);\n            this.curfilter = text;\n        }\n    }, {\n        key: 'showSortMenu',\n        value: function showSortMenu() {\n            $(\"#sort-menu\").toggle();\n        }\n    }, {\n        key: 'showChildsMenu',\n        value: function showChildsMenu(e) {\n            var menu = e.srcElement.id;\n            switch (menu) {\n                case \"inbox-email\":\n                    $(\"#inbox-children\").toggle();\n                    break;\n                case \"draft-email\":\n                    $(\"#draft-children\").toggle();\n                    break;\n                case \"sent-email\":\n                    $(\"#sent-children\").toggle();\n                    break;\n                case \"junk-email\":\n                    $(\"#junk-children\").toggle();\n                    break;\n                case \"trash-email\":\n                    $(\"#trash-children\").toggle();\n                    break;\n                default:\n                    break;\n            }\n        }\n    }, {\n        key: 'getMyAccounts',\n        value: function getMyAccounts() {\n            var _this7 = this;\n\n            this.mailaccounts = [];\n            this.maildetails = [];\n            this._inbox.getMyAccounts().subscribe(function (res) {\n                _this7.maildetails = res.data;\n                var _iteratorNormalCompletion6 = true;\n                var _didIteratorError6 = false;\n                var _iteratorError6 = undefined;\n\n                try {\n                    for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                        var c = _step6.value;\n\n                        _this7.fromOptions.push({ label: c.mbac_email, value: c.mbus_mailacc });\n                        if (c.status == \"ONLINE\") {\n                            _this7.mailaccounts.push({ name: c.usem_title, id: c.mbus_mailacc, status: \"#92cc66\" });\n                        } else if (c.status == \"OFFLINE\") {\n                            _this7.mailaccounts.push({ name: c.usem_title, id: c.mbus_mailacc, status: \"#f01458\" });\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError6 = true;\n                    _iteratorError6 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                            _iterator6.return();\n                        }\n                    } finally {\n                        if (_didIteratorError6) {\n                            throw _iteratorError6;\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: 'showSettings',\n        value: function showSettings(option) {\n            this.getMyAccounts();\n            if (option == 1 && this.activemenu == 0) {\n                this.activemenu = option;\n            } else if (option == 0 && this.activemenu == 1) {\n                this.activemenu = option;\n            }\n        }\n    }, {\n        key: 'getAccountDetails',\n        value: function getAccountDetails(account) {\n            var _iteratorNormalCompletion7 = true;\n            var _didIteratorError7 = false;\n            var _iteratorError7 = undefined;\n\n            try {\n                for (var _iterator7 = this.maildetails[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n                    var c = _step7.value;\n\n                    if (c.mbus_mailacc == account.id) {\n                        this.accountDetails = c;\n                    }\n                }\n            } catch (err) {\n                _didIteratorError7 = true;\n                _iteratorError7 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                        _iterator7.return();\n                    }\n                } finally {\n                    if (_didIteratorError7) {\n                        throw _iteratorError7;\n                    }\n                }\n            }\n        }\n    }, {\n        key: 'saveNewAccount',\n        value: function saveNewAccount(account) {\n            var _this8 = this;\n\n            this._inbox.saveNewAccount(account).subscribe(function (res) {\n                if (res.data == \"OK\") {\n                    _this8.toastr.success(\"Email account added successfully\");\n                    $('#newMailAcccount').modal('hide');\n                    _this8.getMyAccounts();\n                } else {\n                    _this8.toastr.error(\"There was an error, please try again\");\n                    $('#newMailAcccount').modal('hide');\n                }\n            });\n        }\n    }, {\n        key: 'showActionMenu',\n        value: function showActionMenu() {\n            $(\"#action-menu\").toggle();\n        }\n    }, {\n        key: 'emailAction',\n        value: function emailAction(action) {\n            this.selection.action = action;\n            this.selection.folder = this.curfolder;\n            var data = JSON.stringify(this.selection);\n            this._inbox.emailAction(data).subscribe(function (res) {});\n        }\n    }, {\n        key: 'editAccount',\n        value: function editAccount() {\n            var _this9 = this;\n\n            this._inbox.editAccount(this.accountDetails).subscribe(function (res) {\n                if (res.data == \"OK\") {\n                    _this9.toastr.success(\"Email Updated\");\n                    _this9.getMyAccounts();\n                }\n            });\n        }\n    }, {\n        key: 'deleteAccount',\n        value: function deleteAccount() {\n            var _this10 = this;\n\n            this._inbox.deleteAccount(this.accountDetails).subscribe(function (res) {\n                if (res.data == \"OK\") {\n                    _this10.toastr.success(\"Email deleted successfully\");\n                    _this10.getMyAccounts();\n                }\n            });\n        }\n    }, {\n        key: 'changeSortOption',\n        value: function changeSortOption(sortoption) {\n            this.curfilter = sortoption.value;\n            this.NewMailbox(this.currmailbox, 0, this.curfilter, this.curfolder);\n            switch (this.selectedOption.value) {\n                case \"SORTARRIVAL\":\n                    this.sortorder = [{ label: \"Oldest Message on top\", value: 0 }, { label: \"Newest Message on top\", value: 1 }];\n                    break;\n                case \"SORTFROM\":\n                case \"SORTTO\":\n                case \"SORTSUBJECT\":\n                    this.sortorder = [{ label: \"A to Z\", value: 0 }, { label: \"Z to A\", value: 1 }];\n                    break;\n                case \"SORTSIZE\":\n                    this.sortorder = [{ label: \"Smaller Message on top\", value: 0 }, { label: \"Largest Message on top\", value: 1 }];\n                    break;\n                default:\n                    break;\n            }\n        }\n    }, {\n        key: 'showNewMessage',\n        value: function showNewMessage() {\n            this.newMessage = { to: [], cc: [], message: \"\", attachments: [] };\n            $('#NewMessage').modal('show');\n        }\n    }, {\n        key: 'sendMail',\n        value: function sendMail(email) {\n            var _this11 = this;\n\n            if (email.to.indexOf(',') > -1) {\n                this.newMessage.to = email.to.split(',');\n                var _iteratorNormalCompletion8 = true;\n                var _didIteratorError8 = false;\n                var _iteratorError8 = undefined;\n\n                try {\n                    for (var _iterator8 = this.newMessage.to[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n                        var v = _step8.value;\n\n                        v.trim();\n                    }\n                } catch (err) {\n                    _didIteratorError8 = true;\n                    _iteratorError8 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                            _iterator8.return();\n                        }\n                    } finally {\n                        if (_didIteratorError8) {\n                            throw _iteratorError8;\n                        }\n                    }\n                }\n            } else {\n                this.newMessage.to = [email.to];\n            }\n\n            if (email.cc.indexOf(',') > -1) {\n                this.newMessage.cc = email.cc.split(',');\n            } else {\n                if (email.cc != \"\" || email.cc != null) {\n                    this.newMessage.cc = [email.cc];\n                }\n            }\n\n            this._inbox.sendEmail(this.newMessage).subscribe(function (res) {\n                if (res.data == \"OK\") {\n                    _this11.toastr.success(\"Email sent successfully\");\n                    $('#NewMessage').modal('hide');\n                } else {\n                    _this11.toastr.error(\"There's an error with your email. Please try again.\");\n                }\n            });\n        }\n    }, {\n        key: 'changeFromOption',\n        value: function changeFromOption(e) {\n            e.value = [e.itemValue];\n            this.newMessage.from = [e.itemValue];\n        }\n    }, {\n        key: 'loadHTML',\n        value: function loadHTML() {\n            var result = this.mymail.htmlmsg.match(/<head([\\s\\S]*?)<\\/head>/g);\n            var rstyle = this.mymail.htmlmsg.match(/<style([\\s\\S]*?)<\\/style>/g);\n            var rbody = this.mymail.htmlmsg.match(/<body([\\s\\S]*?)<\\/body>/g);\n            var head = document.getElementById('someFrame').contentDocument.getElementsByTagName('head');\n            var body = document.getElementById('someFrame').contentDocument.getElementsByTagName('body');\n            if (result) {\n                head[0].innerHTML = result[0];\n                if (!rstyle) {\n                    result[0] = result[0].replace(/<head([\\s\\S]*?)<\\/head>/g, \"\");\n                    //     head[0].innerHTML = result[0]+\"<link href='https://fonts.googleapis.com/css?family=Quicksand' rel='stylesheet'><link href='style.bundle.css' rel='stylesheet'>\";\n                    head[0].innerHTML = result[0];\n                }\n            } else {\n                //  head[0].innerHTML = \"<link href='https://fonts.googleapis.com/css?family=Quicksand' rel='stylesheet'><link href='style.bundle.css' rel='stylesheet'>\";\n            }\n            if (rbody) {\n                body[0].innerHTML = rbody[0];\n            } else {\n                body[0].innerHTML = this.encodeHtml(this.mymail.htmlmsg).replace(\"\\t\", \"    \");\n            }\n        }\n    }, {\n        key: 'onChange',\n        value: function onChange(event) {\n            var files = event.srcElement.files;\n            this.newMessage.attachments.push(files[0]);\n        }\n    }, {\n        key: 'setPageNewEmail',\n        value: function setPageNewEmail(opt) {\n            if (opt == 1) {\n                this.tagMenuNew = 1;\n            }\n            if (opt == 2) {\n                this.tagMenuNew = 2;\n            }\n            if (opt == 3) {\n                this.tagMenuNew = 3;\n            }\n        }\n    }, {\n        key: 'activeTabDescription_addEmail',\n        value: function activeTabDescription_addEmail() {\n            this.tagMenuNew = 1;\n            $('#li_attachments_email').removeClass('active');\n            $('#li_description_email').addClass('active');\n        }\n    }, {\n        key: 'deleteAttachment',\n        value: function deleteAttachment(att) {\n            var index = 0;\n            for (var i in this.newMessage.attachments) {\n                if (att.name == this.newMessage.attachments[i].name) {\n                    index = i;\n                    break;\n                }\n            }\n            this.newMessage.attachments.splice(index, 1);\n\n            if (this.newMessage.attachments.length == 0) {\n                this.activeTabDescription_addEmail();\n            }\n        }\n    }]);\n\n    return MailboxComponent;\n}(), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, 'frame', [_dec2], {\n    enumerable: true,\n    initializer: function initializer() {\n        return new _core.ElementRef();\n    }\n})), _class2)) || _class);\nReflect.defineMetadata('design:paramtypes', [_router.Router, _ngxToastr.ToastrService, _mail.MailService, _platformBrowser.DomSanitizer, _project.ProjectService, _group.GroupService, _directory.DirectoryService, _product.ProductService, _primeng.ConfirmationService], MailboxComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 388 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DirectoryComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _directory = __webpack_require__(31);\n\nvar _pipes = __webpack_require__(14);\n\nvar _directoryTemplate = __webpack_require__(834);\n\nvar _directoryTemplate2 = _interopRequireDefault(_directoryTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DirectoryComponent = exports.DirectoryComponent = (_dec = (0, _core.Component)({\n  selector: \"directory\",\n  template: _directoryTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe],\n  styles: [\".container-photo { position: relative; margin-top: 50px; width: 500px; height: 300px; }, .myimg { position: absolute; height: 120px; width: 120px; left: 0; }, .labelbutton { border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer; position: absolute; width: 500px; left:0; top: 180px; text-align: center; opacity: 0; transition: opacity .35s ease; }\", \".labelbutton a { width: 200px; padding: 12px 48px; text-align: center; color: white; border: solid 2px white; z-index: 1; }, .container-photo:hover .labelbutton { opacity: 1; } \"]\n}), _dec(_class = function () {\n  function DirectoryComponent(route, toastr, directoryService, confirmationService) {\n    _classCallCheck(this, DirectoryComponent);\n\n    this.angularxQrCode = null;\n\n    this._route = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.confirm = confirmationService;\n    this._contacts = directoryService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 12;\n    this.itemcount = 0;\n    this.textState = [\"\"];\n    this.posState = \"\";\n    this.contact = { usersShared: [] };\n    this.contacts = [];\n    this.contactList = [];\n    this.profilepic = {};\n    this.user = [];\n  }\n\n  _createClass(DirectoryComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      var _this = this;\n\n      this.usersShareWith = [];\n      this.usersShareWith_a = [];\n      this._contacts.getGroups().subscribe(function (data) {\n        _this.usersShareWith = data.data;\n        _this.usersShareWith_a = data.data;\n      });\n      this.reload();\n    }\n  }, {\n    key: \"opensavecontact\",\n    value: function opensavecontact() {\n      this.contact = [];\n      $(\"#opensavecontact\").modal(\"show\");\n    }\n  }, {\n    key: \"quickciew\",\n    value: function quickciew(cont_id) {\n      var _this2 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.contact = [];\n      this._contacts.getContact(cont_id).subscribe(function (data) {\n        _this2.contact = data.data;\n        $(\"#quickciew\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"openuppcontact\",\n    value: function openuppcontact(cont_id) {\n      var _this3 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.contact = [];\n      this._contacts.getContact(cont_id).subscribe(function (data) {\n        _this3.contact = data.data;\n        $(\"#openuppcontact\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"openQrcode\",\n    value: function openQrcode(user) {\n      this.user = user;\n      $('#output').empty();\n      user = this.qrCode(user);\n      $('#mdqrcode').modal('show');\n    }\n  }, {\n    key: \"qrCode\",\n    value: function qrCode(user) {\n      var textVcard = \"BEGIN:VCARD VERSION:3.0\" + \"N:\" + user.cont_lastname + \";\" + cont_firstname + \"\\n\" + \"FN:\" + user.cont_firstname + \" \" + user.cont_lastname + \"\\n\" +\n      // +\"ORG:MDCloudPS\\n\"+ \n      \"TITLE: \" + user.cont_cargo + \"/\" + user.cont_cargo + \"\\n\" + \"TEL;TYPE=WORK,VOICE:\" + user.cont_cellphone + \"\\n\" +\n      // \"TEL;TYPE=HOME,VOICE:\" + user.telefonoA + \"\\n\" + \n      // \"TEL;TYPE=HOME,VOICE:\" + user.telefonoB + \"\\n\" + \n      \"EMAIL;TYPE=PREF,INTERNET:\" + user.cont_email + \"\\n\" + \"ADR;TYPE=intl,home,postal,parcel:;;\" + user.cont_workaddress + \";;;;\\n\" +\n      // +\"URL:mdcloudps.com\\n\"+ \n      // +\"REV:20111013T195243Z\\n\"+ \n      \"END:VCARD\";\n      $(\"#output\").qrcode({\n        render: \"canvas\",\n        text: textVcard,\n        width: 250,\n        height: 250,\n        background: \"#ffffff\",\n        foreground: \"#3092E9\",\n        // src: \"../../../assets/img/mdtext.svg\",\n        src: \"img/LogoSquadlinxQR.png\",\n        imgWidth: 90,\n        imgHeight: 90\n      });\n    }\n  }, {\n    key: \"UploadAddUser\",\n    value: function UploadAddUser(event, type) {\n      if (type == \"profile\") {\n        this.profilepic = event.target.files[0];\n      }\n\n      if (event.target.files && event.target.files[0]) {\n        var files = event.target.files;\n        if (files[0].size / 1024 / 1024 > 4) {\n          this.toastr.error(\"File size exceeds 4 MB\");\n        } else {\n          var reader = new FileReader();\n          reader.onload = function (e) {\n            if (type == \"profile\") {\n              $(\"#profile-img\").attr(\"src\", e.target.result);\n            }\n          };\n          reader.readAsDataURL(event.target.files[0]);\n        }\n      }\n    }\n  }, {\n    key: \"ChangeAddUser\",\n    value: function ChangeAddUser(type) {\n      if (type == \"profile\") {\n        $(\"#change-profileUser\").toggle();\n      }\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var _this4 = this;\n\n      var files = event.srcElement.files;\n      this.contact.photo = files[0];\n      var reader = new FileReader();\n      reader.onload = function (event) {\n        _this4.myImg = event.target.result;\n      };\n\n      reader.readAsDataURL(event.target.files[0]);\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.reload();\n    }\n  }, {\n    key: \"goTo\",\n    value: function goTo(value) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      if (value == 0) {\n        this.currentpage = 1;\n        this.limitpage = 12;\n      } else {\n        this.currentpage = Math.round(this.itemcount / this.limitpage);\n        var mod = this.itemcount % this.limitpage;\n        if (mod > 0 && mod < 5) {\n          this.currentpage += 1;\n        }\n      }\n      this.reload();\n    }\n  }, {\n    key: \"saveContact\",\n    value: function saveContact(contact) {\n      var _this5 = this;\n\n      if (this.profilepic != {}) {\n        this.contact.cont_photo = this.profilepic;\n      }\n      this.contact.cont_birthday = new Date(this.contact.cont_birthday);\n      this.contact.cont_birthday = this.contact.cont_birthday.getFullYear() + \"-\" + (this.contact.cont_birthday.getMonth() + 1) + \"-\" + this.contact.cont_birthday.getDate();\n      //reasignacion de la variable con un array de ids de usuarios\n      var users_share = [];\n\n      for (var user in this.contact.usersShared) {\n        users_share.push(this.contact.usersShared[user].value);\n      }\n\n      // Solve Bug Autocomplete users.\n      var contactaa = Object.assign({}, this.contact);\n      contact.usersShared = users_share;\n      this._contacts.saveContact(this.contact).subscribe(function (data) {\n        if (data.data == \"OK\") {\n          $('#addUser').modal('hide');\n          _this5.toastr.success(\"User has been created successfully\");\n          _this5.isLoadingcontact = false;\n          _this5.isLoadingpagination = false;\n          _this5.ngAfterViewInit();\n          _this5.contact = {};\n        } else {\n          _this5.toastr.error(data.message, \"Error!\");\n        }\n      });\n      this.reload();\n    }\n  }, {\n    key: \"verifyEmaild\",\n    value: function verifyEmaild(email) {\n      var _this6 = this;\n\n      this._contacts.verifyEmaild(email).subscribe(function (data) {\n        if (data.data == true) {\n          _this6.toastr.success(\"Email valid\");\n          _this6.errors = 0;\n          return true;\n        } else {\n          _this6.toastr.error(\"email invalid!\");\n          _this6.errors = 1;\n          return false;\n        }\n      });\n    }\n  }, {\n    key: \"updateContact\",\n    value: function updateContact(contact) {\n      var _this7 = this;\n\n      this.contact.cont_birthday = new Date(this.contact.cont_birthday);\n      this.contact.cont_birthday = this.contact.cont_birthday.getFullYear() + \"-\" + (this.contact.cont_birthday.getMonth() + 1) + \"-\" + this.contact.cont_birthday.getDate();\n      this._contacts.updateContact(this.contact).subscribe(function (data) {\n        if (data.data == \"OK\") {\n          $('#addUser').modal('hide');\n          _this7.toastr.success(\"User has been update successfully\");\n          _this7.isLoadingcontact = false;\n          _this7.isLoadingpagination = false;\n          _this7.ngAfterViewInit();\n          _this7.contact = [];\n        } else {\n          _this7.toastr.error(data.message, \"Error!\");\n        }\n      });\n      this.reload();\n    }\n  }, {\n    key: \"deleteContact\",\n    value: function deleteContact(ct) {\n      var _this8 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to delete this Contact?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          _this8._contacts.deleteContact(ct.cont_id).subscribe(function (data) {\n            if (data.data == \"OK\") {\n              _this8.toastr.error(data.message, \"Error!\");\n            } else {\n              _this8.toastr.success(\"Contact deleted successfully\");\n            }\n            _this8.isLoadingcontact = false;\n            _this8.isLoadingpagination = false;\n            _this8.ngAfterViewInit();\n          });\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this9 = this;\n\n      this.isLoading = true;\n      this.isLoadingcontact = true;\n      this.isLoadingpagination = true;\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search.trim(),\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\"\n      };\n      this._contacts.getUsersx(filter).subscribe(function (res) {\n        _this9.isLoading = false;\n        _this9.contacts = res.data.data;\n        _this9.itemcount = res.data.count;\n        _this9.lastpage = _this9.itemcount / _this9.limitpage;\n        _this9.contact = [];\n        if (_this9.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this9.lastpage);\n          _this9.lastpage = countpag;\n        }\n        _this9.pages = [];\n        for (var i = 1; i <= _this9.lastpage; i++) {\n          _this9.pages.push(i);\n        }\n        if (_this9.pages.length == 0) {\n          _this9.pages = [1];\n        }\n      });\n      this.cont = 0;\n    }\n  }, {\n    key: \"filterText\",\n    value: function filterText() {\n      var _this10 = this;\n\n      this.isLoading = true;\n      this.currentpage = 1;\n\n      var filter = {\n        start: 0,\n        end: this.limitpage,\n        all: this.search.trim(),\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\"\n      };\n      this._contacts.getUsersx(filter).subscribe(function (res) {\n        _this10.isLoading = false;\n        _this10.contacts = res.data.data;\n        _this10.itemcount = res.data.count;\n        _this10.lastpage = _this10.itemcount / _this10.limitpage;\n        if (_this10.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this10.lastpage);\n          _this10.lastpage = countpag;\n        }\n        _this10.pages = [];\n        for (var i = 1; i <= _this10.lastpage; i++) {\n          _this10.pages.push(i);\n        }\n        if (_this10.pages.length == 0) {\n          _this10.pages = [1];\n        }\n      });\n      this.cont = 0;\n      this.reload();\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      var _this11 = this;\n\n      if (event.keyCode == 13) {\n        this.isLoading = true;\n        this.currentpage = 1;\n\n        var filter = {\n          start: 0,\n          end: this.limitpage,\n          all: this.search.trim(),\n          orderby: this.posOrder,\n          orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._contacts.getUsersx(filter).subscribe(function (res) {\n          _this11.isLoading = false;\n          _this11.contacts = res.data.data;\n          _this11.itemcount = res.data.count;\n          _this11.lastpage = _this11.itemcount / _this11.limitpage;\n          if (_this11.lastpage % 1 != 0) {\n            var countpag = 1 + parseInt(_this11.lastpage);\n            _this11.lastpage = countpag;\n          }\n          _this11.pages = [];\n          for (var i = 1; i <= _this11.lastpage; i++) {\n            _this11.pages.push(i);\n          }\n          if (_this11.pages.length == 0) {\n            _this11.pages = [1];\n          }\n        });\n        this.cont = 0;\n        this.reload();\n      }\n    }\n  }, {\n    key: \"soloLetras\",\n    value: function soloLetras(e) {\n      var key = e.keyCode || e.which;\n      var teclado = String.fromCharCode(key).toLowerCase();\n      var letras = \"áéíóúabcdefghijklmnñopqrstuvwxyz \";\n      var especiales = \"13-37-38-46-164\";\n      var teclado_especial = false;\n      for (var i in especiales) {\n        if (key == especiales[i]) {\n          var teclado_especial = true;\n          break;\n        }\n      }\n      if (letras.indexOf(teclado) == -1 && !teclado_especial) {\n        return false;\n      }\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      return text ? text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\") : \"\";\n    }\n  }, {\n    key: \"filterMultipleShared\",\n    value: function filterMultipleShared(event) {\n      var query = event.query;\n      this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n    }\n  }, {\n    key: \"filterShared\",\n    value: function filterShared(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.label.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }]);\n\n  return DirectoryComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.Router, _ngxToastr.ToastrService, _directory.DirectoryService, _primeng.ConfirmationService], DirectoryComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 389 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, jQuery) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DailyComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _daily = __webpack_require__(45);\n\nvar _product = __webpack_require__(22);\n\nvar _group = __webpack_require__(11);\n\nvar _task = __webpack_require__(19);\n\nvar _note = __webpack_require__(24);\n\nvar _users = __webpack_require__(20);\n\nvar _sprint = __webpack_require__(26);\n\nvar _project = __webpack_require__(18);\n\nvar _units = __webpack_require__(51);\n\nvar _pipes = __webpack_require__(14);\n\nvar _dailyTemplate = __webpack_require__(835);\n\nvar _dailyTemplate2 = _interopRequireDefault(_dailyTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DailyComponent = exports.DailyComponent = (_dec = (0, _core.Component)({\n  selector: \"daily\",\n  template: _dailyTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe]\n}), _dec(_class = function () {\n  function DailyComponent(title, route, toastr, groupService, usersService, productService, confirmationService, taskService, sanitizer, noteService, sprintService, ProjectService, dailyService, unitsService) {\n    var _this = this;\n\n    _classCallCheck(this, DailyComponent);\n\n    this._title = title;\n    this._route = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.confirm = confirmationService;\n    this._groups = groupService;\n    this._user = usersService;\n    this._products = productService;\n    this._daily = dailyService;\n    this._tasks = taskService;\n    this._sanitizer = sanitizer;\n    this._notes = noteService;\n    this._sprint = sprintService;\n    this._projects = ProjectService;\n    this._units = unitsService;\n    this.sprintslist = [];\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem(\"title\")) {\n      this.stTitle = localStorage.getItem(\"title\");\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Daily ::.\");\n    this.search = \"\";\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.pages = [1];\n    this.daily = [];\n    this.myDay = {};\n    this.seldaily = [];\n    this.products = [];\n    this.developing = [];\n    this.spinner = false;\n    this.mytask = [];\n    this.dailynew = 0;\n    this.catdaily = [];\n    this.taskid = 0;\n    this.mdT = { project: {}, comments: [] };\n    this.note = { attachments: [] };\n    this.idtk = [];\n    this.task = { project: {}, attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.namegroup = \"ALL\";\n    this.minDateDaily = null;\n    this.maxDateDaily = new Date();\n    this.getNameUser();\n    this.mydaily = [];\n    this.mydailycopy = [];\n    this._daily.getCategories().subscribe(function (data) {\n      _this.catdaily = [];\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.catdaily.push({ label: c.para_name, value: c.para_codigo });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this.productsa = [];\n    this.productsb = [];\n    this._products.getProducts().subscribe(function (data) {\n      _this.productsa = data.data;\n      _this.productsb = data.data;\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n    this.applicantlbl = [];\n    this._user.getEmailList().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var c = _step3.value;\n\n          _this.applicantlbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n    });\n    this.usersCRM = [];\n    this.usersCRMa = [];\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.usersCRM = data.data;\n      _this.usersCRMa = data.data;\n    });\n    this.groups = [];\n    this.lblgroups = [];\n    this._groups.getGroups().subscribe(function (data) {\n      _this.groups = data.data;\n      var _iteratorNormalCompletion4 = true;\n      var _didIteratorError4 = false;\n      var _iteratorError4 = undefined;\n\n      try {\n        for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n          var c = _step4.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n        }\n      } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion4 && _iterator4.return) {\n            _iterator4.return();\n          }\n        } finally {\n          if (_didIteratorError4) {\n            throw _iteratorError4;\n          }\n        }\n      }\n    });\n    this.myTasks = [];\n    this.lblmytasks = [];\n    this._tasks.getTasksbyMe().subscribe(function (data) {\n      _this.myTasks = data.data;\n      var _iteratorNormalCompletion5 = true;\n      var _didIteratorError5 = false;\n      var _iteratorError5 = undefined;\n\n      try {\n        for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n          var c = _step5.value;\n\n          _this.lblmytasks.push({\n            label: \"#\" + c.task_id + \" \" + c.task_subject,\n            value: c.task_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError5 = true;\n        _iteratorError5 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion5 && _iterator5.return) {\n            _iterator5.return();\n          }\n        } finally {\n          if (_didIteratorError5) {\n            throw _iteratorError5;\n          }\n        }\n      }\n    });\n    this.tasks = [];\n    this.getmyProjects();\n    this.getDevtask();\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.day.task = {};\n    this.user = {};\n    this.isLoading = false;\n    this.mydaily.date_ini = \"\";\n    this.mydaily.date_end = \"\";\n    this.prods = [\"\"];\n    this.usrs = [\"\"];\n    this.projs = [\"\"];\n    this.desc = \"\";\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.filter = false;\n    this.dateActive = false;\n    this._units.getUnits().subscribe(function (res) {\n      _this.units = [];\n      var _iteratorNormalCompletion6 = true;\n      var _didIteratorError6 = false;\n      var _iteratorError6 = undefined;\n\n      try {\n        for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n          var c = _step6.value;\n\n          _this.units.push({ label: c.unit_desc, value: c.unit_id });\n        }\n      } catch (err) {\n        _didIteratorError6 = true;\n        _iteratorError6 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion6 && _iterator6.return) {\n            _iterator6.return();\n          }\n        } finally {\n          if (_didIteratorError6) {\n            throw _iteratorError6;\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(DailyComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      this.reload();\n    }\n  }, {\n    key: \"addDaily\",\n    value: function addDaily(mDay) {\n      this.getListSprints();\n      if (mDay) {\n        this.day = mDay;\n      }\n      $(\"#mdDailyTask\").modal(\"show\");\n    }\n  }, {\n    key: \"setMytask\",\n    value: function setMytask(num) {\n      this.maxDateDaily = new Date();\n      this.minDateDaily = null;\n      this.dailynew = 0;\n      this.mytask = 0;\n      this.day = { dail_points_2: 1, dail_text_2: \"\" };\n    }\n  }, {\n    key: \"onChangeSprint\",\n    value: function onChangeSprint() {\n      var _this2 = this;\n\n      this.maxDateDaily = new Date();\n      this.minDateDaily = null;\n      this._sprint.getSprint(this.day.spri_id).subscribe(function (res) {\n        _this2.minDateDaily = new Date(res.data.spri_init.replace(\"-\", \"/\"));\n        var spri_end = new Date(res.data.spri_end.replace(\"-\", \"/\"));\n\n        if (spri_end.getTime() < _this2.maxDateDaily.getTime()) {\n          _this2.maxDateDaily = spri_end;\n        }\n        _this2.day.spri_init = res.data.spri_init;\n        _this2.day.spri_end = res.data.spri_end;\n      });\n      this.day.dail_date_2 = \"\";\n    }\n  }, {\n    key: \"saveDaily\",\n    value: function saveDaily(dv, idtask) {\n      var _this3 = this;\n\n      if (this.dailynew == 0) {\n        dv.dail_points = dv.dail_points_2;\n        dv.dail_text = dv.dail_text_2;\n        dv.dail_date = dv.dail_date_2;\n      }\n      dv.task_id = idtask;\n      dv.dail_date = new Date(dv.dail_date);\n      dv.dail_date = dv.dail_date.getFullYear() + \"-\" + (dv.dail_date.getMonth() + 1) + \"-\" + dv.dail_date.getDate();\n      if (parseInt(this.mytask.task_pointsd) + parseInt(dv.dail_points) > this.mytask.task_points) {\n        this.toastr.error(\"Points selected exceed current task duration\", \"Error!\");\n      } else {\n        this._daily.putDaily(dv).subscribe(function (data) {\n          if (data.data == \"OK\") {\n            _this3.toastr.success(data.message, \"Daily saved Successfully\");\n            _this3.getDevtask();\n          } else {\n            _this3.toastr.warning(data.message, \"Action not allowed\");\n          }\n          _this3.day = { dail_points: 1 };\n          _this3.setMytask(0);\n          _this3.searchDaily();\n        });\n      }\n    }\n  }, {\n    key: \"showInfo\",\n    value: function showInfo(idtk) {\n      this.maxDateDaily = new Date();\n      this.minDateDaily = null;\n\n      this.minDateDaily = new Date(idtk.spri_init.replace(\"-\", \"/\"));\n      var spri_end = new Date(idtk.spri_end.replace(\"-\", \"/\"));\n\n      if (spri_end.getTime() < this.maxDateDaily.getTime()) {\n        this.maxDateDaily = spri_end;\n      }\n      this.dailynew = -1;\n      if (idtk.unit_id && idtk.unit_id > 0) {\n        this.day = { dail_points: 1, unit_points: idtk.unit_points - idtk.unit_pointsd, unit_id: idtk.unit_id, dail_text: \"\" };\n      } else {\n        this.day = { dail_points: 1, dail_text: \"\" };\n      }\n      this.day.spri_init = idtk.spri_init;\n      this.day.spri_end = idtk.spri_end;\n      this.mytask = idtk;\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n      this.searchDaily();\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.searchDaily();\n    }\n  }, {\n    key: \"goTo\",\n    value: function goTo(value) {\n      if (value == 0) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n      } else {\n        this.currentpage = Math.round(this.itemcount / this.limitpage);\n        var mod = this.itemcount % this.limitpage;\n        if (mod > 0 && mod < 5) {\n          this.currentpage += 1;\n        }\n      }\n      this.searchDaily();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this4 = this;\n\n      this.isLoading = true;\n      if (this.mydaily.products && this.mydaily.products.length > 0) {\n        this.prods = this.mydaily.products;\n      } else {\n        this.prods = [\"\"];\n      }\n      if (this.mydaily.creators && this.mydaily.creators.length > 0) {\n        this.usrs = this.mydaily.creators;\n      } else {\n        this.usrs = [\"\"];\n      }\n      if (this.mydaily.projects && this.mydaily.projects.length > 0) {\n        this.projs = this.mydaily.projects;\n      } else {\n        this.projs = [\"\"];\n      }\n      if (this.mydaily.description && this.mydaily.description != \"\") {\n        this.desc = this.mydaily.description;\n      } else {\n        this.desc = \"\";\n      }\n      if (this.mydaily.date_ini != null && this.mydaily.date_ini != \"\" && this.mydaily.date_ini != \"undefined\") {\n        if (this.date_ini != \"\" && this.date_ini != null) {\n          this.date_ini = this.mydaily.date_ini;\n        } else {\n          this.date_ini = this.mydaily.date_ini;\n        }\n      } else {\n        this.date_ini = \"\";\n        this.date_end = \"\";\n      }\n      if (this.mydaily.date_end != null && this.mydaily.date_end != \"\" && this.mydaily.date_end != \"undefined\") {\n        if (this.date_end != \"\" && this.date_end != null) {\n          this.date_end = this.mydaily.date_end;\n        } else {\n          this.date_end = this.mydaily.date_end;\n        }\n      } else {\n        this.date_end = \"\";\n        this.date_ini = \"\";\n      }\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search.trim(),\n        group: this.textGroup,\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\",\n        products: this.prods,\n        creators: this.usrs,\n        projects: this.projs,\n        desc: this.desc,\n        date_ini: this.date_ini,\n        date_end: this.date_end\n      };\n      this._daily.getDailyList(filter).subscribe(function (res) {\n        _this4.isLoading = false;\n        _this4.daily = res.data.data;\n        _this4.itemcount = res.data.count;\n        _this4.lastpage = _this4.itemcount / _this4.limitpage;\n        if (_this4.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this4.lastpage);\n          _this4.lastpage = countpag;\n        }\n        _this4.pages = [];\n        for (var i = 1; i <= _this4.lastpage; i++) {\n          _this4.pages.push(i);\n        }\n        if (_this4.pages.length == 0) {\n          _this4.pages = [1];\n        }\n      });\n    }\n  }, {\n    key: \"showModal\",\n    value: function showModal(idtk) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.myDay = idtk;\n      $(\"#mdDayView\").modal(\"show\");\n    }\n  }, {\n    key: \"showModalUser\",\n    value: function showModalUser(user_id) {\n      var _this5 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.user = {};\n      this._user.getUserInfo(user_id).subscribe(function (res) {\n        _this5.user = res.data;\n      });\n      $(\"#mdUser\").modal(\"show\");\n    }\n  }, {\n    key: \"deleteDay\",\n    value: function deleteDay(da) {\n      var _this6 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to delete this daily?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          _this6._daily.deleteDay(da.dail_id).subscribe(function (data) {\n            if (data.data == \"OK\") {\n              _this6.toastr.success(\"Daily deleted successfully\");\n            } else {\n              _this6.toastr.error(data.message, \"Error!\");\n            }\n            _this6.searchDaily();\n          });\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"validateDaily\",\n    value: function validateDaily(type) {\n      if (type == \"1\") {\n        if (this.day.unit_id && this.day.unit_id > 0) {\n          return !this.day.dail_text || this.day.dail_text.trim() == \"\" || !this.day.dail_points || this.day.dail_points <= 0 || this.day.dail_points == \"undefined\" || !this.day.dail_date || this.day.dail_date == \"\" || this.day.dail_date == \"undefined\" || parseFloat(this.mytask.task_pointsd) + parseFloat(this.day.dail_points) > parseFloat(this.mytask.task_points) || !this.day.unit_points || this.day.unit_points <= 0 || this.day.unit_points == \"undefined\" || this.compareDate(this.day.spri_init) === -1 || this.compareDate(this.day.spri_end) === 1;\n        } else {\n          return !this.day.dail_text || this.day.dail_text.trim() == \"\" || !this.day.dail_points || this.day.dail_points <= 0 || this.day.dail_points == \"undefined\" || !this.day.dail_date || this.day.dail_date == \"\" || this.day.dail_date == \"undefined\" || parseFloat(this.mytask.task_pointsd) + parseFloat(this.day.dail_points) > parseFloat(this.mytask.task_points) || this.compareDate(this.day.spri_init) === -1 || this.compareDate(this.day.spri_end) === 1;\n        }\n      }\n      if (type == \"2\") {\n        return !this.day.para_category || !this.day.prod_id || !this.day.dail_text_2 || this.day.dail_text_2.trim() == \"\" || !this.day.dail_points_2 || this.day.dail_points_2 <= 0 || this.day.dail_points_2 == \"undefined\" || !this.day.dail_date_2 || this.day.dail_date_2 == \"\" || this.day.dail_date_2 == \"undefined\" || this.compareDate2(this.day.spri_init) === -1 || this.compareDate2(this.day.spri_end) === 1;\n      }\n      if (type == \"3\") {\n        if (this.day.unit_id && this.day.unit_id != 0) {\n          return !this.day.dail_text || this.day.dail_text.trim() == \"\" || !this.day.dail_points || this.day.dail_points <= 0 || this.day.dail_points == \"undefined\" || !this.day.dail_date || this.day.dail_date == \"\" || this.day.dail_date == \"undefined\" || this.day.dail_points > this.day.pointsr || !this.day.unit_points || this.day.unit_points <= 0 || this.day.unit_points == \"undefined\" || this.compareDate(this.day.spri_init) === -1 || this.compareDate(this.day.spri_end) === 1;\n        } else {\n          return !this.day.dail_text || this.day.dail_text.trim() == \"\" || !this.day.dail_points || this.day.dail_points <= 0 || this.day.dail_points == \"undefined\" || !this.day.dail_date || this.day.dail_date == \"\" || this.day.dail_date == \"undefined\" || this.compareDate(this.day.spri_init) === -1 || this.compareDate(this.day.spri_end) === 1;\n        }\n      }\n      if (type == \"4\") {\n        return !this.day.para_category || !this.day.prod_id || !this.day.dail_text || this.day.dail_text.trim() == \"\" || !this.day.dail_points || this.day.dail_points <= 0 || this.day.dail_points == \"undefined\" || !this.day.dail_date || this.day.dail_date == \"\" || this.day.dail_date == \"undefined\";\n      }\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state, name) {\n      this.namegroup = name;\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.searchDaily();\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event, num) {\n      if (num == 1) {\n        var query = event.query;\n        this.productsa = this.filterP(query, this.productsb);\n      } else if (num == 2) {\n        var _query = event.query;\n        this.usersCRM = this.filterU(_query, this.usersCRMa);\n      } else if (num == 3) {\n        var _query2 = event.query;\n        this.myProjects = this.filterPj(_query2, this.myProjectsb);\n      }\n    }\n  }, {\n    key: \"filterU\",\n    value: function filterU(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"filterP\",\n    value: function filterP(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.prod_name.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"filterPj\",\n    value: function filterPj(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.proj_subject.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"editDaily\",\n    value: function editDaily(mDay) {\n      var _this7 = this;\n\n      this.day = {};\n      this.maxDateDaily = new Date();\n      this.minDateDaily = null;\n      this.dateActive = false;\n\n      this.minDateDaily = new Date(mDay.spri_init.replace(\"-\", \"/\"));\n      var spri_end = new Date(mDay.spri_end.replace(\"-\", \"/\"));\n\n      if (spri_end.getTime() < this.maxDateDaily.getTime()) {\n        this.maxDateDaily = spri_end;\n      }\n\n      this._daily.getDaily(mDay.dail_id).subscribe(function (res) {\n        res.data.dail_text = _this7.escapeHtml(res.data.dail_text);\n        _this7.day.task = {};\n        if (mDay) {\n          _this7.day = res.data;\n          _this7.day.spri_init = mDay.spri_init;\n          _this7.day.spri_end = mDay.spri_end;\n          _this7._tasks.getTask(mDay.task_id).subscribe(function (res) {\n            _this7.day.task = res.data;\n            var a = _this7.day.dail_points;\n            var b = _this7.day.task.task_pointsd;\n            var c = _this7.day.task.task_points;\n            if (b - c == 0) {\n              _this7.day.pointsr = a;\n            } else {\n              _this7.day.pointsr = a + (c - b);\n            }\n            if (_this7.day.task.unit_id && _this7.day.task.unit_id > 0) {\n              _this7.day.unit_id = _this7.day.task.unit_id;\n              var ax = _this7.day.unit_points;\n              var bx = _this7.day.task.unit_pointsd;\n              var cx = _this7.day.task.unit_points;\n              if (bx - cx == 0) {\n                _this7.day.pointsru = ax;\n              } else {\n                _this7.day.pointsru = ax + (cx - bx);\n              }\n            }\n          });\n        }\n        $(\"#mdEditDailyTask\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"compareDate2\",\n    value: function compareDate2(date) {\n      if (this.day.dail_date_2 != undefined && this.day.dail_date_2 != \"\" && typeof this.day.dail_date_2 != \"string\" && date != undefined) {\n        var date_aux = new Date(date.replace(\"-\", \"/\"));\n\n        if (this.day.dail_date_2.getTime() > date_aux.getTime()) {\n          return 1;\n        } else if (this.day.dail_date_2.getTime() < date_aux.getTime()) {\n          return -1;\n        } else {\n          return 0;\n        }\n      } else {\n        return false;\n      }\n    }\n  }, {\n    key: \"compareDate\",\n    value: function compareDate(date) {\n      if (this.day.dail_date != undefined && this.day.dail_date != \"\" && typeof this.day.dail_date != \"string\" && date != undefined) {\n        var date_aux = new Date(date.replace(\"-\", \"/\"));\n\n        if (this.day.dail_date.getTime() > date_aux.getTime()) {\n          return 1;\n        } else if (this.day.dail_date.getTime() < date_aux.getTime()) {\n          return -1;\n        } else {\n          return 0;\n        }\n      } else {\n        return false;\n      }\n    }\n  }, {\n    key: \"lpad\",\n    value: function lpad(n, width, z) {\n      z = z || \"0\";\n      n = n || \"0\";\n      n = n + \"\";\n      return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n  }, {\n    key: \"onChangeDate\",\n    value: function onChangeDate(type) {\n      if (type) {\n        this.dateActive = true;\n      }\n    }\n  }, {\n    key: \"onInputDate\",\n    value: function onInputDate(type) {\n      if (type) {\n        this.dateActive = true;\n      }\n    }\n  }, {\n    key: \"updateDaily\",\n    value: function updateDaily(dv, type) {\n      var _this8 = this;\n\n      if (this.dateActive) {\n        dv.dail_date = new Date(dv.dail_date);\n        dv.dail_date = dv.dail_date.getFullYear() + \"-\" + this.lpad(dv.dail_date.getMonth() + 1, 2) + \"-\" + this.lpad(dv.dail_date.getDate(), 2) + \" \" + this.lpad(dv.dail_date.getHours(), 2) + \":\" + this.lpad(dv.dail_date.getMinutes(), 2) + \":\" + this.lpad(dv.dail_date.getSeconds(), 2);\n      }\n\n      if (dv.dail_points > this.day.pointsr) {\n        this.toastr.error(\"Points selected exceed current task duration\", \"Error!\");\n      } else {\n        dv.type = \"update\";\n        this._daily.putDaily(dv).subscribe(function (data) {\n          if (data.data == \"OK\") {\n            _this8.toastr.success(data.message, \"Daily saved Successfully\");\n            _this8.getDevtask();\n          } else {\n            _this8.toastr.warning(data.message, \"Action not allowed\");\n          }\n          _this8.day = { dail_points: 1 };\n          _this8.searchDaily();\n        });\n      }\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      if (event.keyCode == 13) {\n        this.searchDaily();\n      }\n    }\n  }, {\n    key: \"getDevtask\",\n    value: function getDevtask() {\n      var _this9 = this;\n\n      this.tasks = [];\n      this._daily.getDevtasks().subscribe(function (data) {\n        var developingx = [];\n        _this9.tasks = data.data;\n        if (_this9.tasks[35]) {\n          developingx = developingx.concat(_this9.tasks[35]);\n        }\n        if (_this9.tasks[36]) {\n          developingx = developingx.concat(_this9.tasks[36]);\n        }\n        if (_this9.tasks[37]) {\n          developingx = developingx.concat(_this9.tasks[37]);\n        }\n        if (_this9.tasks[38]) {\n          developingx = developingx.concat(_this9.tasks[38]);\n        }\n        _this9.developing = developingx;\n        _this9.dailynew = 0;\n        _this9.spinner = false;\n      });\n    }\n  }, {\n    key: \"getNameUser\",\n    value: function getNameUser(user_name, user_lastname) {\n      if (user_name && user_lastname) {\n        var names = user_name;\n        var surnames = user_lastname;\n        var ellipsis = \"…\";\n        var fullName = names + \" \" + surnames;\n\n        if (fullName.length <= 14) {\n          return fullName;\n        } else {\n          if (names.length <= 14 && surnames.length <= 14) {\n            fullName = names + \" \" + surnames;\n          }\n\n          if (names.length <= 14 && surnames.length > 14) {\n            surnames = surnames.substring(0, 14) + ellipsis;\n            fullName = names + \" \" + surnames;\n          }\n\n          if (names.length > 14 && surnames.length <= 14) {\n            var arrayNames = names.split(\" \");\n            var firstName = arrayNames[0];\n            fullName = firstName + \" \" + surnames;\n          }\n\n          if (names.length > 14 && surnames.length > 14) {\n            var _arrayNames = names.split(\" \");\n            var _firstName = _arrayNames[0];\n            surnames = surnames.substring(0, 14) + ellipsis;\n            fullName = _firstName + \" \" + surnames;\n          }\n\n          return fullName;\n        }\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"parseFloat\",\n    value: function (_parseFloat) {\n      function parseFloat(_x) {\n        return _parseFloat.apply(this, arguments);\n      }\n\n      parseFloat.toString = function () {\n        return _parseFloat.toString();\n      };\n\n      return parseFloat;\n    }(function (pts) {\n      return parseFloat(pts);\n    })\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"showFilter\",\n    value: function showFilter() {\n      //this.mydaily = [];\n      this.search = \"\";\n      $(\"#mdSearchDaily\").modal(\"show\");\n    }\n  }, {\n    key: \"filterDaily\",\n    value: function filterDaily() {\n      this.filter = true;\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.searchDaily();\n    }\n  }, {\n    key: \"searchDaily\",\n    value: function searchDaily() {\n      this.mydailycopy = jQuery.extend(true, {}, this.mydaily);\n      var copy = [];\n      for (var x in this.mydaily.products) {\n        copy.push(this.mydaily.products[x].prod_id);\n      }\n      this.mydaily.products = copy;\n      copy = [];\n      for (var _x2 in this.mydaily.creators) {\n        copy.push(this.mydaily.creators[_x2].user_id);\n      }\n      this.mydaily.creators = copy;\n      copy = [];\n      for (var _x3 in this.mydaily.projects) {\n        copy.push(this.mydaily.projects[_x3].proj_id);\n      }\n      this.mydaily.projects = copy;\n      if (this.mydaily.date_ini != null && this.mydaily.date_ini != \"\" && this.mydaily.date_end != null && this.mydaily.date_end != \"\") {\n        this.mydaily.date_ini = this.formatDate(this.mydaily.date_ini);\n        this.mydaily.date_end = this.formatDate(this.mydaily.date_end);\n      } else {\n        this.mydaily.date_ini = \"\";\n        this.mydaily.date_end = \"\";\n      }\n      this.reload();\n      this.mydaily = this.mydailycopy;\n    }\n  }, {\n    key: \"formatDate\",\n    value: function formatDate(date) {\n      date = new Date(date);\n      if (date && date !== \"\") {\n        var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n        var monthIndex = date.getMonth() + 1 < 10 ? \"0\" + (date.getMonth() + 1) : date.getMonth() + 1;\n        var year = date.getFullYear();\n        return year + '-' + monthIndex + '-' + day;\n      } else {\n        return '';\n      }\n    }\n  }, {\n    key: \"getmyProjects\",\n    value: function getmyProjects() {\n      var _this10 = this;\n\n      this.myProjects = [];\n      this.myProjectsb = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        if (res.data.planning) {\n          var _iteratorNormalCompletion7 = true;\n          var _didIteratorError7 = false;\n          var _iteratorError7 = undefined;\n\n          try {\n            for (var _iterator7 = res.data.planning[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n              var c = _step7.value;\n\n              _this10.myProjects.push(c);\n              _this10.myProjectsb.push(c);\n            }\n          } catch (err) {\n            _didIteratorError7 = true;\n            _iteratorError7 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                _iterator7.return();\n              }\n            } finally {\n              if (_didIteratorError7) {\n                throw _iteratorError7;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion8 = true;\n          var _didIteratorError8 = false;\n          var _iteratorError8 = undefined;\n\n          try {\n            for (var _iterator8 = res.data.buildup[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n              var _c = _step8.value;\n\n              _this10.myProjects.push(_c);\n              _this10.myProjectsb.push(_c);\n            }\n          } catch (err) {\n            _didIteratorError8 = true;\n            _iteratorError8 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                _iterator8.return();\n              }\n            } finally {\n              if (_didIteratorError8) {\n                throw _iteratorError8;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = res.data.implementation[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var _c2 = _step9.value;\n\n              _this10.myProjects.push(_c2);\n              _this10.myProjectsb.push(_c2);\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getListSprints\",\n    value: function getListSprints() {\n      var _this11 = this;\n\n      this.sprintslist = [];\n      this._sprint.getListSprints().subscribe(function (res) {\n        _this11.sprintslist = [];\n        var _iteratorNormalCompletion10 = true;\n        var _didIteratorError10 = false;\n        var _iteratorError10 = undefined;\n\n        try {\n          for (var _iterator10 = res.data[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n            var c = _step10.value;\n\n            _this11.sprintslist.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError10 = true;\n          _iteratorError10 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion10 && _iterator10.return) {\n              _iterator10.return();\n            }\n          } finally {\n            if (_didIteratorError10) {\n              throw _iteratorError10;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"closeFilter\",\n    value: function closeFilter() {\n      this.mydaily = [];\n      this.mydailycopy = [];\n      this.search = \"\";\n      this.filter = false;\n      this.mydaily.date_ini = \"\";\n      this.mydaily.date_end = \"\";\n      this.prods = [\"\"];\n      this.usrs = [\"\"];\n      this.projs = [\"\"];\n      this.desc = \"\";\n      this.date_ini = \"\";\n      this.date_end = \"\";\n      this.reload();\n    }\n  }]);\n\n  return DailyComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _ngxToastr.ToastrService, _group.GroupService, _users.UsersService, _product.ProductService, _primeng.ConfirmationService, _task.TaskService, _platformBrowser.DomSanitizer, _note.NoteService, _sprint.SprintService, _project.ProjectService, _daily.DailyService, _units.UnitsService], DailyComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4), __webpack_require__(4)))\n\n/***/ }),\n/* 390 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.ContactComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _directory = __webpack_require__(31);\n\nvar _contactTemplate = __webpack_require__(836);\n\nvar _contactTemplate2 = _interopRequireDefault(_contactTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ContactComponent = exports.ContactComponent = (_dec = (0, _core.Component)({\n    selector: 'contact',\n    template: _contactTemplate2.default\n}), _dec(_class = function () {\n    function ContactComponent(route, toastr, sanitizer, arouter, directoryService) {\n        _classCallCheck(this, ContactComponent);\n\n        this._route = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this._aroute = arouter;\n        this._sanitizer = sanitizer;\n        this._directory = directoryService;\n        this.contact = {};\n        this.editcontact = { grupsShared: [] };\n        this.id_cont = 0;\n        this.tabActive = 'activity';\n        this.reload();\n    }\n\n    _createClass(ContactComponent, [{\n        key: 'ngOnInit',\n        value: function ngOnInit() {}\n    }, {\n        key: 'ngAfterViewInit',\n        value: function ngAfterViewInit() {\n            var _this = this;\n\n            this.usersShareWith = [];\n            this.usersShareWith_a = [];\n            this._directory.getGroups().subscribe(function (data) {\n                _this.usersShareWith = data.data;\n                _this.usersShareWith_a = data.data;\n            });\n            this.reload();\n        }\n    }, {\n        key: 'reload',\n        value: function reload() {\n            var _this2 = this;\n\n            this._aroute.params.forEach(function (params) {\n                _this2._directory.getContact(params.idcontact).subscribe(function (res) {\n                    _this2.contact = res.data;\n                    _this2.id_cont = _this2.contact.cont_id;\n                });\n            });\n        }\n    }, {\n        key: 'registerTab',\n        value: function registerTab(tab, click) {\n            var _this3 = this;\n\n            this.tabActive = tab;\n            if (tab == 'profile') {\n                this._directory.getContact(this.contact.cont_id).subscribe(function (res) {\n                    _this3.editcontact = res.data;\n                });\n            }\n        }\n    }, {\n        key: 'updateContact',\n        value: function updateContact() {\n            var _this4 = this;\n\n            //reasignacion de la variable con un array de ids de usuarios\n            var users_share = [];\n\n            for (var user in this.editcontact.grupsShared) {\n                users_share.push(this.editcontact.grupsShared[user].value);\n            }\n\n            // Solve Bug Autocomplete users.\n            var editcontactt = Object.assign({}, this.editcontact);\n            this.editcontact.grupsShared = users_share;\n            this._directory.updateContact(this.editcontact).subscribe(function (data) {\n                if (data.data == \"OK\") {\n                    _this4.toastr.success(\"User has been update successfully\");\n                } else {\n                    _this4.toastr.error(data.message, \"Error!\");\n                }\n            });\n            this.reload();\n            this.registerTab(this.tabActive);\n        }\n    }, {\n        key: 'validate',\n        value: function validate() {\n            return !this.editcontact.cont_firstname || this.editcontact.cont_firstname.trim() == \"\" || !this.editcontact.cont_lastname || this.editcontact.cont_lastname.trim() == \"\" || !this.editcontact.cont_birthday || this.editcontact.cont_birthday.trim() == \"\" || !this.editcontact.cont_cellphone || this.editcontact.cont_cellphone.trim() == \"\" || !this.editcontact.cont_email || this.editcontact.cont_email.trim() == \"\" || !this.editcontact.cont_workaddress || this.editcontact.cont_workaddress.trim() == \"\" || !this.editcontact.cont_cargo || this.editcontact.cont_cargo.trim() == \"\" || !this.editcontact.cont_workphone || this.editcontact.cont_workphone.trim() == \"\" || !this.editcontact.cont_homeaddress || this.editcontact.cont_homeaddress.trim() == \"\" || !this.editcontact.cont_homephone || this.editcontact.cont_homephone.trim() == \"\" || !this.editcontact.cont_personalemail || this.editcontact.cont_personalemail.trim() == \"\";\n        }\n    }, {\n        key: 'sanitizeHtml',\n        value: function sanitizeHtml(text) {\n            if (text) {\n                var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n                if (!base64test.exec(text)) {\n                    text = this.decode64(text);\n                }\n                text = this._sanitizer.bypassSecurityTrustHtml(text);\n                if (text.changingThisBreaksApplicationSecurity) {\n                    text = text.changingThisBreaksApplicationSecurity;\n                }\n                return text;\n            } else {\n                return \"\";\n            }\n        }\n    }, {\n        key: 'decode64',\n        value: function decode64(input) {\n            var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n            var output = \"\";\n            var chr1,\n                chr2,\n                chr3 = \"\";\n            var enc1,\n                enc2,\n                enc3,\n                enc4 = \"\";\n            var i = 0;\n\n            // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n            var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n            if (base64test.exec(input)) {\n                return false;\n            }\n            input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n            do {\n                enc1 = keyStr.indexOf(input.charAt(i++));\n                enc2 = keyStr.indexOf(input.charAt(i++));\n                enc3 = keyStr.indexOf(input.charAt(i++));\n                enc4 = keyStr.indexOf(input.charAt(i++));\n\n                chr1 = enc1 << 2 | enc2 >> 4;\n                chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n                chr3 = (enc3 & 3) << 6 | enc4;\n\n                output = output + String.fromCharCode(chr1);\n\n                if (enc3 != 64) {\n                    output = output + String.fromCharCode(chr2);\n                }\n                if (enc4 != 64) {\n                    output = output + String.fromCharCode(chr3);\n                }\n\n                chr1 = chr2 = chr3 = \"\";\n                enc1 = enc2 = enc3 = enc4 = \"\";\n            } while (i < input.length);\n\n            return unescape(output);\n        }\n    }, {\n        key: 'encode64',\n        value: function encode64(input) {\n            var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n            input = escape(input);\n            var output = \"\";\n            var chr1,\n                chr2,\n                chr3 = \"\";\n            var enc1,\n                enc2,\n                enc3,\n                enc4 = \"\";\n            var i = 0;\n\n            do {\n                chr1 = input.charCodeAt(i++);\n                chr2 = input.charCodeAt(i++);\n                chr3 = input.charCodeAt(i++);\n                enc1 = chr1 >> 2;\n                enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n                enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n                enc4 = chr3 & 63;\n                if (isNaN(chr2)) {\n                    enc3 = enc4 = 64;\n                } else if (isNaN(chr3)) {\n                    enc4 = 64;\n                }\n                output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n                chr1 = chr2 = chr3 = \"\";\n                enc1 = enc2 = enc3 = enc4 = \"\";\n            } while (i < input.length);\n            return output;\n        }\n    }, {\n        key: 'escapeHtml',\n        value: function escapeHtml(text) {\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }, {\n        key: 'filterMultipleShared',\n        value: function filterMultipleShared(event) {\n            var query = event.query;\n            this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n        }\n    }, {\n        key: 'filterShared',\n        value: function filterShared(query, countries) {\n            var filtered = [];\n            for (var i = 0; i < countries.length; i++) {\n                var country = countries[i];\n                if (country.label.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n                    filtered.push(country);\n                }\n            }\n            return filtered;\n        }\n    }]);\n\n    return ContactComponent;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_router.Router, _ngxToastr.ToastrService, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _directory.DirectoryService], ContactComponent);\n\n/***/ }),\n/* 391 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.SprintComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _primeng = __webpack_require__(10);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _project = __webpack_require__(18);\n\nvar _sprintTemplate = __webpack_require__(837);\n\nvar _sprintTemplate2 = _interopRequireDefault(_sprintTemplate);\n\nvar _task = __webpack_require__(19);\n\nvar _daily = __webpack_require__(45);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nvar _mail = __webpack_require__(36);\n\nvar _note = __webpack_require__(24);\n\nvar _users = __webpack_require__(20);\n\nvar _dashboard = __webpack_require__(44);\n\nvar _units = __webpack_require__(51);\n\nvar _pipes = __webpack_require__(14);\n\nvar _product = __webpack_require__(22);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SprintComponent = exports.SprintComponent = (_dec = (0, _core.Component)({\n    selector: \"sprint\",\n    template: _sprintTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe]\n}), _dec(_class = function () {\n    function SprintComponent(title, router, sanitizer, arouter, taskService, groupService, sprintService, mailService, ProjectService, productService, noteService, userService, toastr, dailyService, confirmationService, dashboardService, unitsService) {\n        _classCallCheck(this, SprintComponent);\n\n        this._title = title;\n        this._router = router;\n        this._sanitizer = sanitizer;\n        this._groups = groupService;\n        this._sprint = sprintService;\n        this._tasks = taskService;\n        this._projects = ProjectService;\n        this._notes = noteService;\n        this.confirm = confirmationService;\n        this._aroute = arouter;\n        this._dashBoard = dashboardService;\n        this._daily = dailyService;\n        this._products = productService;\n        this._user = userService;\n        this._projects = ProjectService;\n        this._units = unitsService;\n        this.search = \"\";\n        this.searchtask = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.limitpage = 10;\n        this.itemcount = 0;\n        this.groups = [];\n        this.lblgroups = [];\n        this.sptasks = [];\n        this.subtask = { attachments: [] };\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this.mail = { attachments: [] };\n        this.note = { attachments: [] };\n        this.mails = [];\n        this.searchMail = \"\";\n        this.listmails = [];\n        this.listmailsa = [];\n        this.sprints = [];\n        this.sprint = [];\n        this.team = [];\n        this.sprintTask = [];\n        this.mdT = { project: {} };\n        this.mcT = { project: {} };\n        this.selectedprojects = [];\n        this.task = { usersShared: [], project: {}, criteriaTask: [], attachments: [] };\n        this.mysprints = [];\n        this.myProjects = [];\n        this.sprintselected = \"\";\n        this.seltasks = [];\n        this.sprintn = [];\n        this.note = { attachments: [] };\n        this.mdT.total_adjusted = [];\n        this.mdT = { project: {}, comments: [] };\n        this.taskattch = { attachments: [] };\n        this.textState = [\"\"];\n        this.posState = \"user_asigned\";\n        this.getmyProjects();\n        this.sumpoints = [];\n        this.totalpoints_p = 0;\n        this.totalpoints_d = 0;\n        this.burndownData = {};\n        this.myUsers = [];\n        this.contactsTree = [];\n        this.contacts = [];\n        this.searchuser = \"\";\n        this.selectedNodes = [];\n        this.selectedUsers = [];\n        this.dayJob = \"\";\n        this.isLoading = false;\n        this.sprintrefs = true;\n        this.dayView = [];\n        this.pointssum = 0;\n        this.totalp = 0;\n        this.tagMenu = 1;\n        this.levels = [];\n        this.endSprind = 0;\n        this.getLevels();\n        this.getProducts();\n        this.getSprintDetail();\n        this.getSprint();\n        this.getAllMyUsers();\n        this.getMyUserData();\n        this.getCRMUsers();\n        this.getMySpri();\n    }\n\n    _createClass(SprintComponent, [{\n        key: \"ngAfterViewChecked\",\n        value: function ngAfterViewChecked() {\n            this.isLoading = false;\n            this.sprintrefs = true;\n        }\n    }, {\n        key: \"ngAfterViewInit\",\n        value: function ngAfterViewInit() {\n            var _this = this;\n\n            this._units.getUnits().subscribe(function (res) {\n                _this.units = [];\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var c = _step.value;\n\n                        _this.units.push({ label: c.unit_desc, value: c.unit_id });\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"getProducts\",\n        value: function getProducts() {\n            var _this2 = this;\n\n            this._products.getProducts().subscribe(function (data) {\n                _this2.isLoading = false;\n                _this2.sprintrefs = true;\n                _this2.products = [];\n                var _iteratorNormalCompletion2 = true;\n                var _didIteratorError2 = false;\n                var _iteratorError2 = undefined;\n\n                try {\n                    for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                        var c = _step2.value;\n\n                        _this2.products.push({ label: c.prod_name, value: c.prod_id });\n                    }\n                } catch (err) {\n                    _didIteratorError2 = true;\n                    _iteratorError2 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                            _iterator2.return();\n                        }\n                    } finally {\n                        if (_didIteratorError2) {\n                            throw _iteratorError2;\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"getAllMyUsers\",\n        value: function getAllMyUsers() {\n            var _this3 = this;\n\n            this.userslbl = [];\n            this._user.getMyUsers().subscribe(function (data) {\n                _this3.isLoading = false;\n                _this3.sprintrefs = true;\n                _this3.users = data.data;\n                var _iteratorNormalCompletion3 = true;\n                var _didIteratorError3 = false;\n                var _iteratorError3 = undefined;\n\n                try {\n                    for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                        var c = _step3.value;\n\n                        _this3.userslbl.push({ label: c.user_lastname + \", \" + c.user_name, value: c.user_id });\n                    }\n                } catch (err) {\n                    _didIteratorError3 = true;\n                    _iteratorError3 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                            _iterator3.return();\n                        }\n                    } finally {\n                        if (_didIteratorError3) {\n                            throw _iteratorError3;\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"showModalProject\",\n        value: function showModalProject(idproj) {\n            $(\"#myProject\" + idproj).click();\n        }\n    }, {\n        key: \"getMyUserData\",\n        value: function getMyUserData() {\n            var _this4 = this;\n\n            this._user.getMyUserData().subscribe(function (data) {\n                _this4.isLoading = false;\n                _this4.sprintrefs = true;\n                _this4.myuser = data.data[0].user_id;\n            });\n        }\n    }, {\n        key: \"getCRMUsers\",\n        value: function getCRMUsers() {\n            var _this5 = this;\n\n            this.userslblShareWith = [];\n            this.usersShareWith = [];\n            this.usersShareWith_a = [];\n            this._user.getCRMUsers().subscribe(function (data) {\n                _this5.isLoading = false;\n                _this5.sprintrefs = true;\n                _this5.usersShareWith = data.data;\n                _this5.usersShareWith_a = data.data;\n                _this5.users = data.data;\n                var _iteratorNormalCompletion4 = true;\n                var _didIteratorError4 = false;\n                var _iteratorError4 = undefined;\n\n                try {\n                    for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                        var c = _step4.value;\n\n                        _this5.userslblShareWith.push({\n                            label: c.user_lastname + \", \" + c.user_name,\n                            value: c.user_id\n                        });\n                    }\n                } catch (err) {\n                    _didIteratorError4 = true;\n                    _iteratorError4 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                            _iterator4.return();\n                        }\n                    } finally {\n                        if (_didIteratorError4) {\n                            throw _iteratorError4;\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"getMySpri\",\n        value: function getMySpri() {\n            var _this6 = this;\n\n            this._sprint.getMySpri().subscribe(function (res) {\n                _this6.isLoading = false;\n                _this6.sprintrefs = true;\n                _this6.mysprints = [];\n                _this6.mysprints.push({\n                    label: \"Backlog\",\n                    value: 0\n                });\n                var cont = 0;\n                var _iteratorNormalCompletion5 = true;\n                var _didIteratorError5 = false;\n                var _iteratorError5 = undefined;\n\n                try {\n                    for (var _iterator5 = res.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                        var c = _step5.value;\n\n                        if (cont == 0) {\n                            _this6.endSprind = c.spri_end;\n                        }\n                        _this6.mysprints.push({\n                            label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n                            value: c.spri_id\n                        });\n                        cont++;\n                    }\n                } catch (err) {\n                    _didIteratorError5 = true;\n                    _iteratorError5 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                            _iterator5.return();\n                        }\n                    } finally {\n                        if (_didIteratorError5) {\n                            throw _iteratorError5;\n                        }\n                    }\n                }\n            });\n            return this.endSprind;\n        }\n    }, {\n        key: \"reload\",\n        value: function reload() {\n            this.isLoading = true;\n            this.sprintrefs = false;\n            this.getProducts();\n            this.getSprintDetail();\n            this.getSprint();\n            this.getAllMyUsers();\n            this.getMyUserData();\n            this.getCRMUsers();\n            this.getMySpri();\n        }\n    }, {\n        key: \"getmyProjects\",\n        value: function getmyProjects() {\n            var _this7 = this;\n\n            this.myProjects = [];\n            this.selectedprojects = [];\n            this._projects.getmyProjects().subscribe(function (res) {\n                _this7.myProjects.push({ label: \" Untracked\", value: \"0\", idcolor: \"#fff\" });\n                _this7.selectedprojects = [0];\n                for (var i in res.data) {\n                    var _iteratorNormalCompletion6 = true;\n                    var _didIteratorError6 = false;\n                    var _iteratorError6 = undefined;\n\n                    try {\n                        for (var _iterator6 = res.data[i][Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                            var c = _step6.value;\n\n                            _this7.myProjects.push({ label: c.proj_subject, value: c.proj_id, idcolor: c.idcolor });\n                            _this7.selectedprojects.push(c.proj_id);\n                        }\n                    } catch (err) {\n                        _didIteratorError6 = true;\n                        _iteratorError6 = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                                _iterator6.return();\n                            }\n                        } finally {\n                            if (_didIteratorError6) {\n                                throw _iteratorError6;\n                            }\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"getSprintDetail\",\n        value: function getSprintDetail() {\n            var _this8 = this;\n\n            this.seltasks = [];\n            this._aroute.params.forEach(function (params) {\n                _this8._sprint.getSprintDetail(params.idsprint).subscribe(function (res) {\n                    _this8.sprints = res.data;\n                    _this8.sprintselected = params.idsprint;\n                    _this8.updatePoints(params.idsprint);\n                });\n            });\n        }\n    }, {\n        key: \"updatePoints\",\n        value: function updatePoints(spri_id) {\n            var _this9 = this;\n\n            this._sprint.getSum(spri_id).subscribe(function (res) {\n                _this9.sumpoints = res.data;\n                _this9.showPoints(_this9.textState);\n            });\n        }\n    }, {\n        key: \"updateList\",\n        value: function updateList(sptsel) {\n            if (this.textState[0] != \"\") {\n                this.updatePoints(sptsel);\n                this.showPoints(this.textState);\n            }\n        }\n    }, {\n        key: \"getSprint\",\n        value: function getSprint() {\n            var _this10 = this;\n\n            this._aroute.params.forEach(function (params) {\n                _this10._sprint.getSprint(params.idsprint).subscribe(function (res) {\n                    _this10.stTitle = \"Squadlinx\";\n                    if (localStorage.getItem('title')) {\n                        _this10.stTitle = localStorage.getItem('title');\n                    }\n                    _this10._title.setTitle(\".:: \" + _this10.stTitle + \" : Sprint #\" + params.idsprint + \" ::.\");\n                    _this10.sprint = res.data;\n                    _this10._sprint.getTeam(_this10.sprint.grop_id).subscribe(function (ans) {\n                        _this10.team = ans.data;\n                        for (var i = 0; i < ans.data.length; i++) {\n                            // if ( ans.data[i].user_id != this.team[1].user_id ){\n                            _this10.selectedUsers.push(ans.data[i].user_id);\n                            _this10.selectedNodes.push(ans.data[i].user_id);\n                            // }\n                            _this10.selectedUsers_2 = _this10.selectedUsers;\n                            _this10.selectedNodes_2 = _this10.selectedNodes;\n                        }\n                        if (_this10.team.length > 0) {\n                            $('#team-name').text(_this10.team[0].user_name + \" \" + _this10.team[0].user_lastname);\n                            $('#team-profile').text(_this10.team[0].role_name);\n                        }\n                        _this10.getBurnDown(_this10.sprint.spri_id);\n                    });\n                });\n            });\n        }\n    }, {\n        key: \"teamInfo\",\n        value: function teamInfo(name, lastname, profile, state, userid) {\n            this.pointssum = 0;\n            this.selectedNodes = [];\n            this.selectedUsers = [];\n            if (userid == 0) {\n                this.selectedUsers = this.selectedUsers_2;\n                this.selectedNodes = this.selectedNodes_2;\n            } else {\n                this.selectedNodes.push(userid);\n                this.selectedUsers.push(userid);\n            }\n            this.getBurnDown(this.sprintselected);\n            this.totalpoints_p = 0;\n            this.totalpoints_d = 0;\n            if (state == \"0\") {\n                this.textState = [\"\"];\n                this.posState = \"user_asigned\";\n            } else {\n                this.textState = state;\n                this.posState = \"user_asigned\";\n                this.showPoints(state);\n            }\n            $('#team-name').text(name + \" \" + lastname);\n            $('#team-profile').text(profile);\n        }\n    }, {\n        key: \"showPoints\",\n        value: function showPoints(st) {\n            for (var i = 0; i < this.sumpoints.length; i++) {\n                if (this.sumpoints[i].user_id == st) {\n                    for (var j = 0; j < this.sumpoints[i].points.length; j++) {\n                        if (this.sumpoints[i].points[j].sum_p != null) {\n                            this.totalpoints_p = this.sumpoints[i].points[j].sum_p;\n                            this.totalpoints_d = this.sumpoints[i].points[j].sum_d;\n                            this.totalpoints_pending = this.sumpoints[i].points[j].pendpoints;\n                        }\n                    }\n                }\n            }\n        }\n    }, {\n        key: \"getBurnDown\",\n        value: function getBurnDown(sp) {\n            var _this11 = this;\n\n            this._dashBoard.getBurndown(sp).subscribe(function (res) {\n                if (res) {\n                    var datasets = [];\n                    for (var u in res.data.users) {\n                        if (_this11.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n                            datasets.push({\n                                label: res.data.users[u].label,\n                                data: res.data.users[u].data,\n                                fill: false,\n                                borderColor: res.data.users[u].color,\n                                backgroundColor: res.data.users[u].color,\n                                user: res.data.users[u].user_id\n                            });\n                        }\n                    }\n                    datasets.push({\n                        label: res.data.users[0].label,\n                        data: res.data.users[0].data,\n                        fill: false,\n                        borderColor: res.data.users[0].color,\n                        backgroundColor: res.data.users[0].color\n                    });\n                    _this11.burndownData = {\n                        labels: res.data.days,\n                        datasets: datasets,\n                        options: { legend: { boxWidth: 40 } },\n                        daily: res.data.daily\n                    };\n                }\n            });\n        }\n    }, {\n        key: \"chartClicked\",\n        value: function chartClicked(event) {\n            var _this12 = this;\n\n            this.dayJob = this.burndownData.daily[event.element._index];\n            this._daily.getDay4Usr(this.burndownData.datasets[event.element._datasetIndex].user, this.burndownData.daily[event.element._index]).subscribe(function (res) {\n                _this12.dayView = res.data;\n                _this12.totalp = 0;\n                var totalp = 0;\n                var a = 0;\n                for (var i = 0; i < _this12.dayView.length; i++) {\n                    a = parseFloat(_this12.dayView[i].dail_points);\n                    totalp += parseFloat(a);\n                }\n                _this12.totalp = totalp.toFixed(2);\n                $(\"#mdDayView\").modal(\"show\");\n            });\n        }\n    }, {\n        key: \"showburndown\",\n        value: function showburndown() {\n            this.getTree();\n            $(\"#mdBurndown\").modal(\"show\");\n        }\n    }, {\n        key: \"getNameUser\",\n        value: function getNameUser(user_name, user_lastname) {\n            if (user_name && user_lastname) {\n                var names = user_name;\n                var surnames = user_lastname;\n                var ellipsis = \"…\";\n                var fullName = names + ' ' + surnames;\n\n                if (fullName.length <= 14) {\n                    return fullName;\n                } else {\n\n                    if (names.length <= 14 && surnames.length <= 14) {\n                        fullName = names + ' ' + surnames;\n                    }\n\n                    if (names.length <= 14 && surnames.length > 14) {\n                        surnames = surnames.substring(0, 14) + ellipsis;\n                        fullName = names + ' ' + surnames;\n                    }\n\n                    if (names.length > 14 && surnames.length <= 14) {\n                        var arrayNames = names.split(' ');\n                        var firstName = arrayNames[0];\n                        fullName = firstName + ' ' + surnames;\n                    }\n\n                    if (names.length > 14 && surnames.length > 14) {\n                        var _arrayNames = names.split(' ');\n                        var _firstName = _arrayNames[0];\n                        surnames = surnames.substring(0, 14) + ellipsis;\n                        fullName = _firstName + ' ' + surnames;\n                    }\n\n                    return fullName;\n                }\n            } else {\n                return \"\";\n            }\n        }\n    }, {\n        key: \"getTree\",\n        value: function getTree() {\n            var _this13 = this;\n\n            this.myUsers = [];\n            this.contactsTree = [];\n            this._user.getMyUsers().subscribe(function (data) {\n                _this13.contacts = data.data;\n                var group = \"0\";\n                var groupname = \"\";\n                var children = [];\n\n                var _iteratorNormalCompletion7 = true;\n                var _didIteratorError7 = false;\n                var _iteratorError7 = undefined;\n\n                try {\n                    for (var _iterator7 = data.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n                        var u = _step7.value;\n\n                        _this13.myUsers.push(u.user_id);\n                        if (group != u.grop_id) {\n                            if (group != \"0\") {\n                                _this13.contactsTree.push({\n                                    \"label\": groupname,\n                                    \"data\": group,\n                                    \"expanded\": true,\n                                    \"children\": children\n                                });\n                            }\n                            groupname = u.groupname;\n                            group = u.grop_id;\n                            children = [];\n                        }\n                        children.push({\n                            \"label\": _this13.getNameUser(u.user_name, u.user_lastname),\n                            \"data\": u.user_id\n                        });\n                    }\n                } catch (err) {\n                    _didIteratorError7 = true;\n                    _iteratorError7 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                            _iterator7.return();\n                        }\n                    } finally {\n                        if (_didIteratorError7) {\n                            throw _iteratorError7;\n                        }\n                    }\n                }\n\n                if (group != \"0\") {\n                    _this13.contactsTree.push({\n                        \"label\": groupname,\n                        \"data\": group,\n                        \"expanded\": true,\n                        \"children\": children\n                    });\n                }\n            });\n        }\n    }, {\n        key: \"updateSelect\",\n        value: function updateSelect(event) {\n            this.selectedUsers = [];\n            var _iteratorNormalCompletion8 = true;\n            var _didIteratorError8 = false;\n            var _iteratorError8 = undefined;\n\n            try {\n                for (var _iterator8 = this.selectedNodes[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n                    var c = _step8.value;\n\n                    if (!c.children) {\n                        this.selectedUsers.push(c);\n                    }\n                }\n            } catch (err) {\n                _didIteratorError8 = true;\n                _iteratorError8 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                        _iterator8.return();\n                    }\n                } finally {\n                    if (_didIteratorError8) {\n                        throw _iteratorError8;\n                    }\n                }\n            }\n\n            this.getBurnDown(this.sprintselected);\n        }\n    }, {\n        key: \"doneFilter\",\n        value: function doneFilter() {\n            this.searchuser = \"\";\n        }\n    }, {\n        key: \"selectAllItems\",\n        value: function selectAllItems() {\n\n            if (this.selectedNodes.length > 0) {\n                this.selectedNodes = [];\n            } else {\n                this.selectedNodes = [];\n                for (var t in this.contactsTree) {\n                    this.selectedNodes.push(this.contactsTree[t].data);\n                    if (this.contactsTree[t].children.length > 0) {\n                        for (var c in this.contactsTree[t].children) {\n                            this.selectedNodes.push(this.contactsTree[t].children[c].data);\n                        }\n                    }\n                }\n            }\n\n            this.updateSelect(event);\n        }\n    }, {\n        key: \"selectAllChildrens\",\n        value: function selectAllChildrens(childrens, idparent) {\n            var m = 0;\n            var n = 0;\n            for (var x in this.selectedNodes) {\n                if (this.selectedNodes[x] == idparent) {\n                    m++;\n                } else {\n                    n++;\n                }\n            }\n\n            if (m == 1 && n == 0) {\n                this.selectedNodes = [];\n                this.selectedNodes.push(idparent);\n                if (childrens.length > 0) {\n                    for (var c in childrens) {\n                        if (m == 1) {\n                            this.selectedNodes.push(childrens[c].data);\n                        }\n                    }\n                }\n            } else {\n                this.selectedNodes = [];\n            }\n        }\n    }, {\n        key: \"updateSelectA\",\n        value: function updateSelectA(event, children, idparent) {\n            this.selectAllChildrens(children, idparent);\n            this.selectedUsers = [];\n            var _iteratorNormalCompletion9 = true;\n            var _didIteratorError9 = false;\n            var _iteratorError9 = undefined;\n\n            try {\n                for (var _iterator9 = this.selectedNodes[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n                    var c = _step9.value;\n\n                    if (!c.children) {\n                        this.selectedUsers.push(c);\n                    }\n                }\n            } catch (err) {\n                _didIteratorError9 = true;\n                _iteratorError9 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                        _iterator9.return();\n                    }\n                } finally {\n                    if (_didIteratorError9) {\n                        throw _iteratorError9;\n                    }\n                }\n            }\n\n            this.getBurnDown(this.sprintselected);\n        }\n    }, {\n        key: \"getSprintTk\",\n        value: function getSprintTk(idsprint) {\n            var _this14 = this;\n\n            this._sprint.getSprint(idsprint).subscribe(function (res) {\n                _this14.mdT.sprint = res.data;\n            });\n        }\n    }, {\n        key: \"getAttachments\",\n        value: function getAttachments(taskid) {\n            var _this15 = this;\n\n            this._tasks.getAttachments(taskid).subscribe(function (res) {\n                _this15.mdT.attachments = res.data;\n                _this15.task.attachments = res.data;\n                for (var i = 0; i < _this15.mdT.attachments.length; i++) {\n                    if (i == 0) {\n                        _this15.mdT.total_attachments = 1;\n                    } else {\n                        _this15.mdT.total_attachments++;\n                    }\n                }\n                for (var i = 0; i < _this15.task.attachments.length; i++) {\n                    if (i == 0) {\n                        _this15.task.total_attachments = 1;\n                    } else {\n                        _this15.task.total_attachments++;\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"addSpTask\",\n        value: function addSpTask() {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.seltasks = [];\n            this.currentpage = 1;\n            this.task_description = \"\";\n            this.getList();\n            $(\"#mdAddSpTask\").modal(\"show\");\n        }\n    }, {\n        key: \"getList\",\n        value: function getList() {\n            var _this16 = this;\n\n            if (this.currentpage == 0) {\n                this.currentpage = 1;\n                var filter = {\n                    start: 0,\n                    end: this.limitpage,\n                    all: this.searchtask.trim()\n                };\n            } else {\n                var filter = {\n                    start: this.currentpage * this.limitpage - this.limitpage,\n                    end: this.limitpage,\n                    all: this.searchtask.trim()\n                };\n            }\n\n            this._sprint.getTasksWoSp(filter).subscribe(function (data) {\n                _this16.sprintTask = data.data.data;\n                _this16.itemcount = data.data.count;\n                _this16.lastpage = _this16.itemcount / _this16.limitpage;\n                if (_this16.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this16.lastpage);\n                    _this16.lastpage = countpag;\n                }\n                _this16.pages = [];\n                for (var i = 1; i <= _this16.lastpage; i++) {\n                    _this16.pages.push(i);\n                }\n                if (_this16.pages.length == 0) {\n                    _this16.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }, {\n        key: \"changedExtraHandler\",\n        value: function changedExtraHandler(event) {\n            var _this17 = this;\n\n            if (event.keyCode == 13) {\n                this.currentpage = 1;\n\n                var filter = {\n                    start: 0,\n                    end: this.limitpage,\n                    all: this.searchtask.trim()\n                };\n                this._sprint.getTasksWoSp(filter).subscribe(function (data) {\n                    _this17.sprintTask = data.data.data;\n                    _this17.itemcount = data.data.count;\n                    _this17.lastpage = _this17.itemcount / _this17.limitpage;\n                    if (_this17.lastpage % 1 != 0) {\n                        var countpag = 1 + parseInt(_this17.lastpage);\n                        _this17.lastpage = countpag;\n                    }\n                    _this17.pages = [];\n                    for (var i = 1; i <= _this17.lastpage; i++) {\n                        _this17.pages.push(i);\n                    }\n                    if (_this17.pages.length == 0) {\n                        _this17.pages = [1];\n                    }\n                });\n                this.cont = 0;\n            }\n        }\n    }, {\n        key: \"filterText\",\n        value: function filterText() {\n            var _this18 = this;\n\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.searchtask.trim()\n            };\n            this._sprint.getTasksWoSp(filter).subscribe(function (data) {\n                _this18.sprintTask = data.data.data;\n                _this18.itemcount = data.data.count;\n                _this18.lastpage = _this18.itemcount / _this18.limitpage;\n                if (_this18.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this18.lastpage);\n                    _this18.lastpage = countpag;\n                }\n                _this18.pages = [];\n                for (var i = 1; i <= _this18.lastpage; i++) {\n                    _this18.pages.push(i);\n                }\n                if (_this18.pages.length == 0) {\n                    _this18.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }, {\n        key: \"setCurPage\",\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.getList();\n        }\n    }, {\n        key: \"goTo\",\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 10;\n            } else {\n                this.currentpage = Math.round(this.itemcount / this.limitpage);\n                var mod = this.itemcount % this.limitpage;\n                if (mod > 0 && mod < 5) {\n                    this.currentpage += 1;\n                }\n            }\n            this.getList();\n        }\n    }, {\n        key: \"saveSpTask\",\n        value: function saveSpTask(tasks) {\n            var _this19 = this;\n\n            if (tasks.length) {\n                var sprintselected = this.sprintselected;\n                this.searchtask = \"\";\n                this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(function (res) {\n                    if (res.data === \"OK\") {\n                        _this19.toastr.success(\"task(s) added successfully\");\n                        _this19.getSprintDetail();\n                        _this19.updateList(sprintselected);\n                    } else {\n                        _this19.toastr.warning(data.message, \"There was an error\");\n                    }\n                });\n            }\n            this.showPoints(this.textState);\n        }\n    }, {\n        key: \"delTaskToSprint\",\n        value: function delTaskToSprint(idtk) {\n            var _this20 = this;\n\n            var ts = 0;\n            var sprintselected = this.sprintselected;\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.confirm.confirm({\n                message: 'Do you want to proceed?',\n                header: 'Confirmation',\n                icon: 'fa fa-question-circle',\n                accept: function accept() {\n                    if (idtk) {\n                        _this20.seltasks = [];\n                        _this20.seltasks.push(idtk);\n                        ts = _this20.seltasks;\n                    } else {\n                        ts = _this20.seltasks;\n                    }\n                    _this20._sprint.delSprintTasks(sprintselected, ts).subscribe(function (res) {\n                        if (res.data == \"OK\") {\n                            _this20.toastr.success(res.data.message, \"Task deleted successfully\");\n                            _this20.getSprintDetail();\n                            _this20.updateList(sprintselected);\n                        } else {\n                            _this20.toastr.error(res.message, \"You don't have permits for this action\");\n                        }\n                        _this20.seltasks = [];\n                        _this20.pointssum = 0;\n                    });\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"saveTaskToSprint\",\n        value: function saveTaskToSprint(idSprint) {\n            var _this21 = this;\n\n            if ((this.task_description != \"\" || this.task_description != null) && this.task.task_description == undefined) {\n                this.task.task_description = this.task_description;\n            }\n            this.task.spri_id = idSprint;\n            this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n            this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n            this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n            this.task.task_delivery = new Date(this.task.task_delivery);\n            this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n            //reasignacion de la variable con un array de ids de usuarios\n            var users_share = [];\n\n            for (var user in this.task.usersShared) {\n                users_share.push(this.task.usersShared[user].user_id);\n            }\n\n            var task = Object.assign({}, this.task);\n            task.unit_points = this.task.unit_points;\n            task.unit_id = this.task.unit_id;\n            task.usersShared = users_share;\n            task.isrequest = false;\n            var criteria_task = [];\n            var fields_empty = false;\n\n            for (var i in this.task.criteriaTask) {\n                if (this.task.criteriaTask[i].tkcr_description && this.task.criteriaTask[i].tkcr_description.trim() != \"\") {\n                    criteria_task.push(this.task.criteriaTask[i].tkcr_num + '|*|' + this.task.criteriaTask[i].tkcr_description);\n                } else {\n                    fields_empty = true;\n                }\n            }\n\n            if (this.task.unit_points == 0 || this.task.unit_points == null) {\n                task.unit_points = \"\";\n            }\n            if (this.task.unit_id == 0) {\n                task.unit_id = \"\";\n            }\n\n            if (fields_empty == false) {\n                task.criteriaTask = criteria_task;\n                this.isLoading = true;\n                this._tasks.putTask(task).subscribe(function (data) {\n                    _this21.isLoading = false;\n                    if (data.data === \"\" || data.data === \"0\") {\n                        _this21.toastr.warning(data.message, \"Bad news! Error saving task\");\n                    } else {\n                        _this21.toastr.success(data.message, \"Task saved successfully\");\n                    }\n                    $(\"#mdAddTaskToSprint\").modal(\"hide\");\n                    _this21.getSprintDetail();\n                    _this21.task = { attachments: [] };\n                });\n            } else {\n                this.toastr.warning(\"Empty form fields\");\n            }\n            this.pointssum = 0;\n        }\n    }, {\n        key: \"selectAll\",\n        value: function selectAll(type) {\n            if (type == 1) {\n                var items = this.sprints;\n            } else {\n                var items = this.sprintTask;\n            }\n            if (this.seltasks.length > 0) {\n                this.seltasks = [];\n            } else {\n                this.seltasks = [];\n                items;\n                for (var t in items) {\n                    this.seltasks.push(items[t].task_id);\n                }\n            }\n        }\n    }, {\n        key: \"filterMultiple\",\n        value: function filterMultiple(event) {\n            var query = event.query;\n            this.usersCRM = this.filter(query, this.usersCRMa);\n        }\n    }, {\n        key: \"filter\",\n        value: function filter(query, countries) {\n            var filtered = [];\n            for (var i = 0; i < countries.length; i++) {\n                var country = countries[i];\n                if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n                    filtered.push(country);\n                }\n            }\n            return filtered;\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            var temporal = document.createElement(\"div\");\n            temporal.innerHTML = text;\n            var text = temporal.textContent || temporal.innerText || \"\";\n\n            return text;\n        }\n    }, {\n        key: \"sanitizeHtml\",\n        value: function sanitizeHtml(text) {\n            if (text) {\n                var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n                if (!base64test.exec(text)) {\n                    text = this.decode64(text);\n                }\n                text = this._sanitizer.bypassSecurityTrustHtml(text);\n                if (text.changingThisBreaksApplicationSecurity) {\n                    text = text.changingThisBreaksApplicationSecurity;\n                }\n                return text;\n            } else {\n                return \"\";\n            }\n        }\n    }, {\n        key: \"onChangeTask\",\n        value: function onChangeTask(event, action) {\n            if (action == \"new\") {\n                var files = event.files;\n                if (this.taskattch.attachments.length > 0) {\n                    var _iteratorNormalCompletion10 = true;\n                    var _didIteratorError10 = false;\n                    var _iteratorError10 = undefined;\n\n                    try {\n                        for (var _iterator10 = this.taskattch.attachments[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n                            var c = _step10.value;\n\n                            if (files[0][\"name\"] == c.name) {} else {\n                                this.taskattch.attachments.push(files[0]);\n                            }\n                        }\n                    } catch (err) {\n                        _didIteratorError10 = true;\n                        _iteratorError10 = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                                _iterator10.return();\n                            }\n                        } finally {\n                            if (_didIteratorError10) {\n                                throw _iteratorError10;\n                            }\n                        }\n                    }\n                } else {\n                    this.taskattch.attachments.push(files[0]);\n                }\n            } else if (action == \"delete\") {\n                var file = event.file;\n                var _iteratorNormalCompletion11 = true;\n                var _didIteratorError11 = false;\n                var _iteratorError11 = undefined;\n\n                try {\n                    for (var _iterator11 = this.taskattch.attachments[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n                        var _c = _step11.value;\n\n                        if (file[\"name\"] == _c.name) {\n                            var posattch = this.taskattch.attachments.indexOf(_c);\n                            this.taskattch.attachments.splice(posattch);\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError11 = true;\n                    _iteratorError11 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                            _iterator11.return();\n                        }\n                    } finally {\n                        if (_didIteratorError11) {\n                            throw _iteratorError11;\n                        }\n                    }\n                }\n            }\n        }\n    }, {\n        key: \"onUploadAttachment\",\n        value: function onUploadAttachment(taskid, form) {\n            var _this22 = this;\n\n            this.task.task_id = taskid;\n            this._tasks.putAttachments(this.task).subscribe(function (res) {\n                if (res.data === \"\" || res.data === \"0\") {\n                    _this22.toastr.error(res.message, \"Error!\");\n                } else {\n                    _this22.toastr.success(res.message, \"Attachments uploaded successfully\");\n                    _this22.task.attachments = [];\n                    _this22.getAttachments(taskid);\n                    form.clear();\n                }\n            });\n        }\n    }, {\n        key: \"addTaskToSprint\",\n        value: function addTaskToSprint() {\n            this.task_description = \"\";\n            this.task = { usersShared: [], project: {}, attachments: [] };\n            this.task.criteriaTask = [];\n            this.activeTabDescription();\n        }\n    }, {\n        key: \"addTask\",\n        value: function addTask() {\n            this.task = { project: {}, attachments: [] };\n            this.task.criteriaTask = [];\n            this.task.task_description = \"\";\n            this.task.unit_id = 0;\n            $('#mdAddTaskToSprint').modal('show');\n            this.activeTabDescription();\n        }\n    }, {\n        key: \"editTask\",\n        value: function editTask(idtk) {\n            var _this23 = this;\n\n            this.task = { project: {}, attachments: [] };\n            this._tasks.getTask(idtk.task_id).subscribe(function (res) {\n                _this23.task.criteriaTask = res.data.criteriaTask;\n                // res.data.task_description = this.escapeHtml(res.data.task_description);\n                _this23._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n                    _this23.task.attachments = res.data;\n                    _this23._tasks.getTaskFields(idtk.task_id).subscribe(function (res) {\n                        _this23.task.form = res.data;\n                    });\n                });\n                _this23.task = res.data;\n                $('#mdAddTaskToSprint').modal('show');\n                _this23.activeTabDescription();\n            });\n        }\n    }, {\n        key: \"onChange\",\n        value: function onChange(event) {\n            var files = event.srcElement.files;\n            this.task.attachments.push(files[0]);\n        }\n    }, {\n        key: \"deleteAttachment\",\n        value: function deleteAttachment(att) {\n            var pos = this.task.attachments.indexOf(att.name);\n            this.task.attachments.splice(pos, 1);\n        }\n    }, {\n        key: \"deleteAttachmentNT\",\n        value: function deleteAttachmentNT(att) {\n            for (var i in this.note.attachments) {\n                if (this.note.attachments[i] === att) {\n                    this.note.attachments.splice(i, 1);\n                    break;\n                }\n            }\n        }\n    }, {\n        key: \"deleteAttachment_editTask\",\n        value: function deleteAttachment_editTask(task, att) {\n            var _this24 = this;\n\n            for (var i in task.attachments) {\n                if (task.attachments[i] === att) {\n                    this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n                        if (res.data === \"\" || res.data === \"0\") {\n                            _this24.toastr.error(res.message, \"Error!\");\n                        } else {\n                            _this24.toastr.success(res.message, \"Attachment deleted successfully\");\n                            _this24.getAttachments(task.task_id);\n                        }\n                    });\n                    task.attachments.splice(i, 1);\n                    break;\n                }\n            }\n\n            if (task.attachments.length == 0) {\n                this.activeTabDescription();\n            }\n        }\n    }, {\n        key: \"deleteAttachment_newTask\",\n        value: function deleteAttachment_newTask(att) {\n\n            var index = 0;\n            for (var i in this.task.attachments) {\n                if (att.name == this.task.attachments[i].name) {\n                    index = i;\n                    break;\n                }\n            }\n\n            this.task.attachments.splice(index, 1);\n\n            if (this.task.attachments.length == 0) {\n                this.activeTabDescription();\n            }\n        }\n    }, {\n        key: \"round\",\n        value: function round(value, n) {\n            if (!n || n == 0) {\n                n = 1;\n            } else {\n                n = 10 * n;\n            }\n            return Math.round(value * n) / n;\n        }\n    }, {\n        key: \"closeModal\",\n        value: function closeModal() {\n            this.searchtask = \"\";\n        }\n    }, {\n        key: \"validateTask\",\n        value: function validateTask() {\n            return !this.task.task_subject || this.task.task_subject.trim() == \"\" || !this.task.task_description || this.task.task_description.trim() == \"\" || !this.task.prod_id || this.task.prod_id.trim() == \"\" || !this.task.user_asigned || this.task.user_asigned.trim() == \"\" || !this.task.task_delivery || this.task.task_delivery == \"\" || this.task.task_delivery == \"undefined\" || !this.task.task_points || this.task.task_points == \"\" || this.task.task_points == \"undefined\" || !this.task.unit_points && this.task.unit_id || this.task.unit_points && !this.task.unit_id || this.task.unit_points <= 0 && this.task.unit_id;\n        }\n    }, {\n        key: \"setPage\",\n        value: function setPage(opt) {\n            if (opt == 1) {\n                this.tagMenu = 1;\n            }\n            if (opt == 2) {\n                this.tagMenu = 2;\n            }\n            if (opt == 3) {\n                this.tagMenu = 3;\n            }\n            if (opt == 4) {\n                this.tagMenu = 4;\n            }\n        }\n    }, {\n        key: \"showModaltk\",\n        value: function showModaltk(tkid) {\n            $(\"#myTask\" + tkid).click();\n        }\n\n        //Eliminar un criterio de aceptacion\n\n    }, {\n        key: \"deleteFieldForm\",\n        value: function deleteFieldForm(i) {\n            this.task.criteriaTask.splice(i, 1);\n\n            var j = 1;\n\n            for (var _i = 0; _i < this.task.criteriaTask.length; _i++) {\n                this.task.criteriaTask[_i].tkcr_num = j;\n                j++;\n            }\n\n            if (this.task.criteriaTask.length == 0) {\n                this.activeTabDescription();\n            }\n        }\n\n        //Obtener formulario new task para registrar los criterios de aceptacion\n\n    }, {\n        key: \"getFormTaskCriteria\",\n        value: function getFormTaskCriteria(task_id) {\n            var _this25 = this;\n\n            this.task.criteriaTask = [];\n            this._tasks.getFormTaskCriteria(task_id).subscribe(function (res) {\n\n                _this25.task.criteriaTask = res.data.data;\n            });\n        }\n\n        //Añadir un nuevo criterio de aceptacion\n\n    }, {\n        key: \"addFieldForm\",\n        value: function addFieldForm() {\n            var j = 1;\n            if (this.task.criteriaTask.length == 4) {\n                this.toastr.warning(\"You have reached the maximum number of criteria\");\n            } else {\n                var valor = this.task.criteriaTask.length + j;\n                this.task.criteriaTask.push({ tkcr_num: valor, tkcr_description: \"\" });\n                j++;\n            }\n        }\n\n        //Mostrar ventana duplicar tarea, con los datos de la tarea seleccionada\n\n    }, {\n        key: \"showDuplicateTaskModal\",\n        value: function showDuplicateTaskModal(idtk) {\n            var _this26 = this;\n\n            this.task = { usersShared: [], project: {}, attachments: [] };\n            this._tasks.getTask(idtk).subscribe(function (res) {\n                _this26.task.criteriaTask = res.data.criteriaTask;\n                _this26._tasks.getTaskFields(idtk).subscribe(function (res) {\n                    _this26.task.form = res.data;\n                });\n                _this26.task = res.data;\n                _this26.task.task_description_d = _this26.task.task_description;\n                _this26.task.task_delivery = _this26.endSprind;\n            });\n            $(\"#mdDuplicateTask\").modal(\"show\");\n            this.activeTabDescription_duplicateTask();\n        }\n    }, {\n        key: \"validateDuplicateTask\",\n        value: function validateDuplicateTask() {\n            return !this.task.task_subject || this.task.task_subject.trim() == \"\" || !this.task.task_description || this.task.task_description.trim() == \"\" || !this.task.prod_id || this.task.prod_id.trim() == \"\" || !this.task.task_delivery || this.task.task_delivery == \"\" || this.task.task_delivery == \"undefined\" || !this.task.task_points || this.task.task_points == \"\" || this.task.task_points == \"undefined\";\n        }\n    }, {\n        key: \"saveDuplicateTask\",\n        value: function saveDuplicateTask() {\n            var _this27 = this;\n\n            var task = {};\n            this.task.task_description_d = this.task.task_description_d.split(\"\\t\").join(\"\");\n            this.task.task_description_d = this.task.task_description_d.split(\"\\n\").join(\"\");\n            this.task.task_description_d = this.task.task_description_d.split(\"\\r\").join(\"\");\n            this.task.task_delivery = new Date(this.task.task_delivery);\n            this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n\n            task.task_subject = this.task.task_subject;\n            task.prod_id = this.task.prod_id;\n            task.user_asigned = this.task.user_asigned;\n            task.proj_id = this.task.proj_id;\n            task.spri_id = this.task.spri_id;\n            task.task_delivery = this.task.task_delivery;\n            task.task_points = this.task.task_points;\n            task.task_description = this.task.task_description_d;\n            task.attachments = this.task.attachments;\n            task.tklv_id = this.task.tklv_id;\n            task.unit_points = this.task.unit_points;\n            task.unit_id = this.task.unit_id;\n            task.isrequest = false;\n\n            if (this.task.unit_points == 0 || this.task.unit_points == null) {\n                task.unit_points = \"\";\n            }\n            if (this.task.unit_id == 0) {\n                task.unit_id = \"\";\n            }\n\n            //reasignacion de la variable con un array de ids de usuarios\n            var users_share = [];\n\n            for (var user in this.task.usersShared) {\n                users_share.push(this.task.usersShared[user].user_id);\n            }\n\n            task.usersShared = users_share;\n\n            var criteria_task = [];\n            var campos = [];\n            var fields_empty = false;\n\n            for (var i in this.task.criteriaTask) {\n                if (this.task.criteriaTask[i].tkcr_description && this.task.criteriaTask[i].tkcr_description.trim() != \"\") {\n                    criteria_task.push(this.task.criteriaTask[i].tkcr_num + '|*|' + this.task.criteriaTask[i].tkcr_description);\n                } else {\n                    fields_empty = true;\n                }\n            }\n\n            for (var _i2 in this.task.form) {\n                campos.push(this.task.form[_i2].form_id + '|*|' + this.task.form[_i2].form_data);\n            }\n\n            if (fields_empty == false) {\n                task.criteriaTask = criteria_task;\n                task.form = campos;\n                this.isLoading = true;\n\n                this._tasks.duplicateTask(task).subscribe(function (res) {\n                    _this27.isLoading = false;\n                    if (res.data && res.data != null) {\n                        _this27.toastr.success(res.message);\n                        $(\"#mdDuplicateTask\").modal(\"hide\");\n                        _this27.getSprintDetail();\n                    } else {\n                        _this27.toastr.warning(res.message, \"Error\");\n                    }\n                    // this.task = { attachments: [] };\n                    // this.task.task_description = \"\";\n                });\n            } else {\n                this.toastr.warning(\"Empty form fields\");\n            }\n        }\n    }, {\n        key: \"setPageDupliTk\",\n        value: function setPageDupliTk(opt) {\n            if (opt == 1) {\n                this.tagMenuDupliTk = 1;\n            }\n            if (opt == 2) {\n                this.tagMenuDupliTk = 2;\n            }\n            if (opt == 3) {\n                this.tagMenuDupliTk = 3;\n            }\n        }\n    }, {\n        key: \"filterMultipleShared\",\n        value: function filterMultipleShared(event) {\n            var query = event.query;\n            this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n        }\n    }, {\n        key: \"filterShared\",\n        value: function filterShared(query, countries) {\n            var filtered = [];\n            for (var i = 0; i < countries.length; i++) {\n                var country = countries[i];\n                if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n                    filtered.push(country);\n                }\n            }\n            return filtered;\n        }\n    }, {\n        key: \"deleteAttachmentDuplicateTask\",\n        value: function deleteAttachmentDuplicateTask(task, att) {\n\n            var index = 0;\n            for (var i in this.task.attachments) {\n                if (att.name == this.task.attachments[i].name) {\n                    index = i;\n                    break;\n                }\n            }\n\n            this.task.attachments.splice(index, 1);\n\n            if (this.task.attachments.length == 0) {\n                this.activeTabDescription_duplicateTask();\n            }\n        }\n    }, {\n        key: \"deleteFieldFormDuplicateTask\",\n        value: function deleteFieldFormDuplicateTask(i) {\n            this.task.criteriaTask.splice(i, 1);\n\n            var j = 1;\n\n            for (var _i3 = 0; _i3 < this.task.criteriaTask.length; _i3++) {\n                this.task.criteriaTask[_i3].tkcr_num = j;\n                j++;\n            }\n\n            if (this.task.criteriaTask.length == 0) {\n                this.activeTabDescription_duplicateTask();\n            }\n        }\n    }, {\n        key: \"activeTabDescription\",\n        value: function activeTabDescription() {\n            this.tagMenu = 1;\n            $('#li_criteria_sprint_newTask').removeClass('active');\n            $('#associateFormTask_AddTaskToSprint').removeClass('active');\n            $('#li_attachments_sprint_newtask').removeClass('active');\n            $('#descriptionTask_AddTaskToSprint').addClass('active');\n        }\n    }, {\n        key: \"activeTabDescription_duplicateTask\",\n        value: function activeTabDescription_duplicateTask() {\n            this.tagMenuDupliTk = 1;\n            $('#li_criteria_duplicateTask').removeClass('active');\n            $('#li_attachments_duplicateTask').removeClass('active');\n            $('#li_description_duplicateTask').addClass('active');\n        }\n    }, {\n        key: \"getLevels\",\n        value: function getLevels() {\n            var _this28 = this;\n\n            this._tasks.getLevels().subscribe(function (res) {\n                var _iteratorNormalCompletion12 = true;\n                var _didIteratorError12 = false;\n                var _iteratorError12 = undefined;\n\n                try {\n                    for (var _iterator12 = res.data[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n                        var level = _step12.value;\n\n                        _this28.levels.push({ label: level.tklv_description, value: level.tklv_id });\n                    }\n                } catch (err) {\n                    _didIteratorError12 = true;\n                    _iteratorError12 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                            _iterator12.return();\n                        }\n                    } finally {\n                        if (_didIteratorError12) {\n                            throw _iteratorError12;\n                        }\n                    }\n                }\n            });\n        }\n    }]);\n\n    return SprintComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _task.TaskService, _group.GroupService, _sprint.SprintService, _mail.MailService, _project.ProjectService, _product.ProductService, _note.NoteService, _users.UsersService, _ngxToastr.ToastrService, _daily.DailyService, _primeng.ConfirmationService, _dashboard.DashboardService, _units.UnitsService], SprintComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 392 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SprintsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _sprintsTemplate = __webpack_require__(838);\n\nvar _sprintsTemplate2 = _interopRequireDefault(_sprintsTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SprintsComponent = exports.SprintsComponent = (_dec = (0, _core.Component)({\n  selector: \"sprints\",\n  template: _sprintsTemplate2.default\n}), _dec(_class = function () {\n  function SprintsComponent(title, router, sanitizer, groupService, sprintService, toastr, confirmationService) {\n    var _this = this;\n\n    _classCallCheck(this, SprintsComponent);\n\n    this._title = title;\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.confirm = confirmationService;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._sprint = sprintService;\n    this.search = \"\";\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Sprints ::.\");\n    this.posOrder = \"\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.textState = [\"\"];\n    this.posState = \"para_status\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 16;\n    this.groups = [];\n    this.lblgroups = [];\n    this.sprint = [];\n    this.newSprint = [];\n    this.sprintdays = [];\n    this.sprints = [];\n    this.editvalue = false;\n    this.seletedDaysSprint = [];\n    this._groups.getmyGroups().subscribe(function (data) {\n      _this.groups = data.data;\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(SprintsComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      this.getMySprints();\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(changes) {\n      localStorage.setItem(\"sprisearch\", changes);\n    }\n  }, {\n    key: \"edit\",\n    value: function edit(spr) {\n      var _this2 = this;\n\n      this._sprint.getSprintFull(spr.spri_id).subscribe(function (res) {\n        _this2.newSprint = res.data;\n        _this2.seletedDaysSprint = [];\n        _this2.currSprintPts = 0;\n        _this2.currSprintPts_e = 0;\n        for (var i = 0; i < _this2.newSprint.spdays.length; i++) {\n          _this2.seletedDaysSprint.push(_this2.newSprint.spdays[i].spdy_date);\n          _this2.currSprintPts += parseFloat(_this2.newSprint.spdays[i].spdy_value);\n          _this2.newSprint.spdays[i].spdy_status = true;\n        }\n        _this2.currSprintPts_e += _this2.currSprintPts;\n        $(\"#mdAddSprint\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"getMySprints\",\n    value: function getMySprints() {\n      var _this3 = this;\n\n      this._sprint.getListSprints().subscribe(function (data) {\n        _this3.sprints = data.data;\n        _this3.limitpage = _this3.sprints.length > 16 ? 16 : _this3.sprints.length;\n        _this3.itemcount = _this3.sprints.length;\n        _this3.lastpage = _this3.itemcount / _this3.limitpage;\n        if (_this3.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this3.lastpage);\n          _this3.lastpage = countpag;\n        }\n      });\n      var items = document.querySelectorAll(\".group-item\");\n      $(items[0]).css(\"border-right\", \"5px solid #007bd2\");\n    }\n  }, {\n    key: \"updateTotal\",\n    value: function updateTotal(points) {\n\n      var selectdays = this.newSprint.spdays.filter(function (value) {\n        return value.spdy_status;\n      });\n      this.editvalue = false;\n      var defaultDur = points / selectdays.length;\n      var defaultDurrounded = Math.round(defaultDur * 10) / 10;\n\n      for (var i = 0; i < this.newSprint.spdays.length; i++) {\n        if (this.newSprint.spdays[i].spdy_status) {\n          this.newSprint.spdays[i].spdy_value = parseFloat(defaultDurrounded);\n        } else {\n          this.newSprint.spdays[i].spdy_value = 0;\n        }\n      }\n      this.calculateTotal();\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state) {\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.limitpage = this.sprints.length > 16 ? 16 : this.sprints.length;\n      this.itemcount = this.sprints.length;\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n    }\n  }, {\n    key: \"showModal\",\n    value: function showModal(spr) {\n      this.sprint = spr;\n      $(\"#mdSprint\").modal(\"show\");\n    }\n  }, {\n    key: \"delete\",\n    value: function _delete(spr) {\n      var _this4 = this;\n\n      var ts = 0;\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to proceed?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          _this4._sprint.deleteSprint(spr.spri_id).subscribe(function (res) {\n            if (res.data == \"OK\") {\n              _this4.toastr.success(res.data.message, \"Sprint deleted successfully\");\n            } else {\n              _this4.toastr.error(res.message, \"The Sprint has one or more associated Tasks! \");\n            }\n            _this4.getMySprints();\n          });\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"addSprint\",\n    value: function addSprint() {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.newSprint = {\n        spri_init: \"\",\n        spri_end: \"\",\n        grop_id: \"\",\n        default: \"\",\n        spri_description: \"\",\n        spri_points: \"\",\n        spdays: []\n      };\n      this.currSprintPts = 0;\n    }\n  }, {\n    key: \"calculateDays\",\n    value: function calculateDays(a, b, c) {\n      this.seletedDaysSprint = [];\n      if (!a || !b || !c || a == 0 || a == null || a == \"\" || b == 0 || b == null || b == \"\" || c == 0 || c == null || c == \"\") {\n        this.toastr.warning(\"Action restricted. There are incomplete fields.\", \"Warning!\");\n        return false;\n      }\n      if (typeof a == \"string\") {\n        var parts = a.split('-');\n        a = new Date(parts[0], parts[1] - 1, parts[2]);\n      }\n      if (typeof b == \"string\") {\n        var _parts = b.split('-');\n        b = new Date(_parts[0], _parts[1] - 1, _parts[2]);\n      }\n      this.newSprint.spdays = [];\n      this.currSprintPts = 0;\n      this.currSprintPts_e = 0;\n      var msToDay = 1000 * 3600 * 24;\n      var days = (b - a) / msToDay;\n      //var defaultDur = Math.floor(c / (days + 1));\n      var defaultDur = c / (days + 1);\n      var defaultDurrounded = Math.round(defaultDur * 10) / 10;\n      var dayDuration = 0;\n      var dayname = \"\";\n      var weekday = new Array(7);\n      weekday[0] = \"Sunday\";\n      weekday[1] = \"Monday\";\n      weekday[2] = \"Tuesday\";\n      weekday[3] = \"Wednesday\";\n      weekday[4] = \"Thursday\";\n      weekday[5] = \"Friday\";\n      weekday[6] = \"Saturday\";\n      for (var i = 0; i <= days; i++) {\n        var mydate = new Date(a);\n        mydate.setDate(mydate.getDate() + i);\n        dayname = weekday[mydate.getDay()];\n        mydate = mydate.getFullYear() + \"-\" + (mydate.getMonth() + 1) + \"-\" + mydate.getDate();\n        if (i == days) {\n          dayDuration = Math.round((defaultDurrounded + (this.newSprint.spri_points - (this.currSprintPts + defaultDurrounded))) * 10) / 10;\n        } else {\n          dayDuration = Math.round(defaultDurrounded * 10) / 10;\n        }\n        var sday = {\n          spdy_date: mydate,\n          spdy_value: parseFloat(dayDuration),\n          spdy_day_name: dayname,\n          spdy_status: true,\n          spdy_id: i + 1\n        };\n        this.newSprint.spdays.push(sday);\n        this.seletedDaysSprint.push(sday.spdy_date);\n        this.currSprintPts += sday.spdy_value;\n        this.currSprintPts_e += sday.spdy_value;\n      }\n      this.sprintDiff = this.newSprint.spri_points - this.currSprintPts;\n      this.sprintDiff_e = this.newSprint.spri_points - this.currSprintPts_e;\n    }\n\n    // RECALCULATES THE TOTAL POINTS FOR THE SPRINT\n\n  }, {\n    key: \"calculateTotal\",\n    value: function calculateTotal() {\n      this.editvalue = true;\n      this.currSprintPts_e = 0;\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = this.newSprint.spdays[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var days = _step2.value;\n\n          if (days.spdy_status === true) {\n            this.currSprintPts_e += days.spdy_value;\n          }\n        }\n        // this.sprintDiff = this.newSprint.spri_points - this.currSprintPts;\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n\n      this.currSprintPts = this.currSprintPts_e;\n      this.sprintDiff_e = this.newSprint.spri_points - this.currSprintPts_e;\n    }\n  }, {\n    key: \"validateSprint\",\n    value: function validateSprint() {\n      return !this.newSprint.grop_id || this.currSprintPts != this.newSprint.spri_points || this.newSprint.spri_points == 0 || this.newSprint.spri_points == 'null' || !this.newSprint.spri_init || this.newSprint.spri_init == 'null' || !this.newSprint.spri_end || this.newSprint.spri_end == 'null' || !this.newSprint.spri_description.trim();\n    }\n  }, {\n    key: \"saveSprint\",\n    value: function saveSprint() {\n      var _this5 = this;\n\n      if (!this.newSprint.spri_init || !this.newSprint.spri_end || this.newSprint.spri_init == \"\" || this.newSprint.spri_end == \"\" || this.newSprint.spri_init == null || this.newSprint.spri_end == null || this.newSprint.spri_points == \"\" || this.newSprint.spri_points == null || this.newSprint.spri_points == 0 || !this.newSprint.spri_points || !this.newSprint.spri_description || this.newSprint.spri_description == \"\" || this.newSprint.spri_description == null || this.currSprintPts != this.newSprint.spri_points) {\n        this.toastr.warning(\"Action restricted. There are incomplete fields.\", \"Warning!\");\n        return false;\n      }\n\n      if (typeof this.newSprint.spri_init == \"string\") {\n        var parts = this.newSprint.spri_init.split('-');\n        this.newSprint.spri_init = new Date(parts[0], parts[1] - 1, parts[2]);\n      }\n      this.newSprint.spri_init = this.newSprint.spri_init.getFullYear() + \"-\" + (this.newSprint.spri_init.getMonth() + 1) + \"-\" + this.newSprint.spri_init.getDate();\n      if (typeof this.newSprint.spri_end == \"string\") {\n        var _parts2 = this.newSprint.spri_end.split('-');\n        this.newSprint.spri_end = new Date(_parts2[0], _parts2[1] - 1, _parts2[2]);\n      }\n      this.newSprint.spri_end = this.newSprint.spri_end.getFullYear() + \"-\" + (this.newSprint.spri_end.getMonth() + 1) + \"-\" + this.newSprint.spri_end.getDate();\n      this._sprint.putSprint(this.newSprint).subscribe(function (data) {\n        _this5.sprintId = data.data;\n        if (data.data === \"\" || data.data === \"0\") {\n          _this5.toastr.warning(data.message, \"ERROR\");\n        } else {\n          _this5.toastr.success(data.message, \"Sprint saved successfully\");\n          $(\"#mdAddSprint\").modal(\"hide\");\n        }\n        var m = true;\n        var cont = 0;\n        var total = _this5.newSprint.spdays.length;\n        total--;\n        for (var i = 0; i < _this5.newSprint.spdays.length; i++) {\n          if (_this5.newSprint.spdays[i].spdy_status === true) {\n            var sprintday = _this5.newSprint.spdays[i];\n            if (m == true) {\n              var value_aggreg = sprintday.spdy_value;\n              m = false;\n            } else {\n              value_aggreg = sprintday.spdy_value + value_aggreg;\n            }\n            var balance = _this5.newSprint.spri_points - value_aggreg;\n            var sprint = {\n              sprint_id: _this5.sprintId,\n              spday_date: sprintday.spdy_date,\n              spday_value: sprintday.spdy_value,\n              spday_balance: balance\n            };\n            _this5._sprint.putSprintDay(sprint).subscribe(function (data) {});\n          }\n        }\n        _this5.getMySprints();\n      });\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n    }\n  }]);\n\n  return SprintsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _group.GroupService, _sprint.SprintService, _ngxToastr.ToastrService, _primeng.ConfirmationService], SprintsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 393 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SchedulerComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _task = __webpack_require__(19);\n\nvar _project = __webpack_require__(18);\n\nvar _events = __webpack_require__(50);\n\nvar _directory = __webpack_require__(31);\n\nvar _product = __webpack_require__(22);\n\nvar _scheduler = __webpack_require__(82);\n\nvar _note = __webpack_require__(24);\n\nvar _mail = __webpack_require__(36);\n\nvar _schedulerTemplate = __webpack_require__(839);\n\nvar _schedulerTemplate2 = _interopRequireDefault(_schedulerTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SchedulerComponent = exports.SchedulerComponent = (_dec = (0, _core.Component)({\n  selector: \"scheduler\",\n  template: _schedulerTemplate2.default\n}), _dec(_class = function () {\n  function SchedulerComponent(title, route, toastr, eventsService, sanitizer, arouter, taskService, noteService, schedulerService, directoryService, productService, mailService, ProjectService) {\n    _classCallCheck(this, SchedulerComponent);\n\n    this._title = title;\n    // this._tasks = taskService;\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._events = eventsService;\n    this._scheduler = schedulerService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._mail = mailService;\n    this.project = { attachments: [] };\n    this.task = { attachments: [] };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.searchMail = \"\";\n    this.crmusers = [];\n    this.contacts = [];\n    this.scheduler = {};\n    this.meeting = { usershared: [] };\n  }\n\n  _createClass(SchedulerComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      // this._aroute.params.forEach(params => {\n      // this._title.setTitle(\".:: \" + localStorage.getItem('title') + \" : Event #\" + params.idscheduler + \" ::.\");\n      //     this._scheduler.getScheduler(params.idscheduler).subscribe(res => {\n      //         res.data.sche_description = this.sanitizeHtml(res.data.sche_description);\n      //         $(\"#someFrame\").attr(\"srcdoc\", this.escapeHtml(res.data.sche_description));\n      //         this.scheduler = res.data;\n      //     });\n      // });\n      // this._products.getProducts().subscribe(data => {\n      //     this.products = [];\n      //     for (let c of data.data) {\n      //         this.products.push({ label: c.prod_name, value: c.prod_id });\n      //     }\n      // });\n      // this.userslbl = [];\n      // this._user.getCRMUsers().subscribe(data => {\n      //     this.users = data.data;\n      //     for (let c of data.data) {\n      //         this.userslbl.push({ label: c.user_lastname + \", \" + c.user_name, value: c.user_id });\n      //     }\n      // });\n      // this.listmails = [];\n      // this.listmailsa = [];\n      // this._user.getEmailList().subscribe(data => {\n      //     this.listmails = data.data;\n      //     this.listmailsa = data.data;\n      // });\n      // this.listtasks = [];\n      // this.listtasksa = [];\n      // this._tasks.getUserList().subscribe(data => {\n      //     console.log(data.data);\n      //     this.listtasks = data.data;\n      //     this.listtasksa = data.data;\n      // });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.project.attachments.push(files[0]);\n    }\n  }, {\n    key: \"getTimeline\",\n    value: function getTimeline() {\n      this._projects.getTimeline(this.project.proj_id).subscribe(function (res) {\n        this.detail = res.data;\n      }.bind(this));\n    }\n  }, {\n    key: \"enableBtn\",\n    value: function enableBtn() {\n      if (this.displaybtn) {\n        $(\".task\").animate({\n          right: \"20px\"\n        });\n        $(\".comment\").animate({\n          right: \"20px\"\n        });\n        $(\".atemail\").animate({\n          right: \"20px\"\n        });\n        $(\".sendemail\").animate({\n          right: \"20px\"\n        });\n        this.displaybtn = false;\n      } else {\n        $(\".task\").animate({\n          right: \"65px\"\n        });\n        $(\".comment\").animate({\n          right: \"110px\"\n        });\n        $(\".atemail\").animate({\n          right: \"155px\"\n        });\n        $(\".sendemail\").animate({\n          right: \"200px\"\n        });\n        this.displaybtn = true;\n      }\n    }\n  }, {\n    key: \"closedt\",\n    value: function closedt() {\n      $(\"#collapseNote\").css({ display: \"none\" });\n      this.note = { attachments: [] };\n      $(\"#collapseTask\").css({ display: \"none\" });\n      this.task = { attachments: [] };\n      $(\"#collapseMail\").css({ display: \"none\" });\n      this.mail = { attachments: [] };\n    }\n  }, {\n    key: \"addTask\",\n    value: function addTask() {\n      var _this = this;\n\n      if (this.displaybtn) {\n        if (this.crmusers.length == 0) {\n          this._user.getCRMUsers().subscribe(function (data) {\n            _this.crmusers = data.data;\n          });\n        }\n        $(\"#collapseNote\").css({ display: \"none\" });\n        if ($(\"#collapseTask\").css(\"display\") == \"none\") {\n          $(\"#collapseTask\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseTask\").offset().top\n        }, 1000);\n        this.task.task_description = this.sanitizeHtml(this.project.task_description);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this2 = this;\n\n      this.task.proj_id = this.project.proj_id;\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      this._tasks.putTask(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this2.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this2.toastr.success(data.message, \"Saved Successfully\");\n        }\n        _this2.closedt();\n        _this2.getTimeline();\n      });\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"addNote\",\n    value: function addNote() {\n      if (this.displaybtn) {\n        $(\"#collapseTask\").css({ display: \"none\" });\n        if ($(\"#collapseNote\").css(\"display\") == \"none\") {\n          $(\"#collapseNote\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseNote\").offset().top\n        }, 1000);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveNote\",\n    value: function saveNote() {\n      var _this3 = this;\n\n      this.note.proj_id = this.project.proj_id;\n      this._notes.putNote(this.note).subscribe(function (data) {\n        _this3.toastr.success(data.message, \"Note added Successfully\");\n        _this3.note = { attachments: [] };\n        _this3.getTimeline();\n      });\n    }\n  }, {\n    key: \"onChangeNote\",\n    value: function onChangeNote(event) {\n      var files = event.srcElement.files;\n      this.note.attachments.push(files[0]);\n    }\n  }, {\n    key: \"showAsociateMail\",\n    value: function showAsociateMail() {\n      this.closedt();\n      $(\"#mdAsoMail\").modal(\"show\");\n    }\n  }, {\n    key: \"addAsociateMail\",\n    value: function addAsociateMail() {\n      for (var x in this.listmails) {\n        this._events.addAsociateMail(this.listmails[x], this.ticket.proj_id).subscribe(function (res) {});\n      }\n      this.getTimeline();\n      this.toastr.success(\"Mail asociated successfully\");\n    }\n  }, {\n    key: \"srchMail\",\n    value: function srchMail() {\n      var _this4 = this;\n\n      this.mails = [];\n      this.listmails = [];\n      this._mail.searchMail(this.searchMail).subscribe(function (data) {\n        _this4.mails = data.data;\n      });\n    }\n  }, {\n    key: \"showAsociateTask\",\n    value: function showAsociateTask() {\n      this.closedt();\n      $(\"#mdAsoTask\").modal(\"show\");\n    }\n  }, {\n    key: \"addAsociateTask\",\n    value: function addAsociateTask() {\n      for (var x in this.listtasks) {\n        this._events.addAsociateTask(this.listtasks[x], this.meeting.meet_id).subscribe(function (res) {});\n      }\n      this.getTimeline();\n      this.toastr.success(\"Task asociated successfully\");\n    }\n  }, {\n    key: \"srchTask\",\n    value: function srchTask() {\n      var _this5 = this;\n\n      this.mails = [];\n      this.listtasks = [];\n      this._mail.searchMail(this.listtasks).subscribe(function (data) {\n        _this5.mails = data.data;\n      });\n    }\n  }, {\n    key: \"addMail\",\n    value: function addMail() {\n      if (this.displaybtn) {\n        $(\"#collapseMail\").css({ display: \"none\" });\n        if ($(\"#collapseMail\").css(\"display\") == \"none\") {\n          $(\"#collapseMail\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseMail\").offset().top\n        }, 1000);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveMail\",\n    value: function saveMail() {\n      var _this6 = this;\n\n      var mymails = [];\n      for (var x in this.mail.emails) {\n        mymails.push(this.mail.emails[x].correo);\n      }\n      this.mail.emails = mymails;\n      this.mail.content = this.mail.content.split(\"\\n\").join(\"\");\n      this.mail.content = this.mail.content.split(\"\\r\").join(\"\");\n      this.mail.proj_id = this.project.proj_id;\n      this._mail.sendMessage(this.mail).subscribe(function (data) {\n        _this6.toastr.success(data.message, \"Mail sent Successfully\");\n        _this6.getTimeline(_this6.project.proj_id);\n      });\n      this.mail = { attachments: [] };\n      this.closedt();\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.listmails = this.filter(query, this.listmailsa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, mails) {\n      var filtered = [];\n      for (var i = 0; i < mails.length; i++) {\n        var country = mails[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (base64test.exec(input)) {\n        return false;\n      }\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n      do {\n        enc1 = keyStr.indexOf(input.charAt(i++));\n        enc2 = keyStr.indexOf(input.charAt(i++));\n        enc3 = keyStr.indexOf(input.charAt(i++));\n        enc4 = keyStr.indexOf(input.charAt(i++));\n\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n\n        output = output + String.fromCharCode(chr1);\n\n        if (enc3 != 64) {\n          output = output + String.fromCharCode(chr2);\n        }\n        if (enc4 != 64) {\n          output = output + String.fromCharCode(chr3);\n        }\n\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n\n      return unescape(output);\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      input = escape(input);\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      do {\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n        output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n      return output;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n    }\n  }]);\n\n  return SchedulerComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _ngxToastr.ToastrService, _events.EventsService, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _task.TaskService, _note.NoteService, _scheduler.SchedulerService, _directory.DirectoryService, _product.ProductService, _mail.MailService, _project.ProjectService], SchedulerComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 394 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.SchedulerListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _schedulerlistTemplate = __webpack_require__(840);\n\nvar _schedulerlistTemplate2 = _interopRequireDefault(_schedulerlistTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _scheduler = __webpack_require__(82);\n\nvar _users = __webpack_require__(20);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SchedulerListComponent = exports.SchedulerListComponent = (_dec = (0, _core.Component)({\n    selector: \"schedulerlist\",\n    template: _schedulerlistTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function SchedulerListComponent(title, router, sanitizer, groupService, schedulerService, usersService, toastr, confirmationService) {\n        var _this = this;\n\n        _classCallCheck(this, SchedulerListComponent);\n\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._groups = groupService;\n        this._scheduler = schedulerService;\n        this._user = usersService;\n        this.confirm = confirmationService;\n        this.textState = [\"Active\", \"Canceled\", \"Finished\"];\n        this.posState = \"SchStatus\";\n        this.textGroup = \"\";\n        this.posGroup = \"grop_id\";\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.groups = [];\n        this.plsch = [];\n        this.categories = [];\n        this.catsche = [];\n        this.stssche = [];\n        this.schedules = [];\n        this.lblgroups = [];\n        this.selsch = [];\n        this.scheduler = {};\n        this.namegroup = \"ALL\";\n        this.itemcount = 0;\n        this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Scheduler ::.\");\n        this._scheduler.getSchedulerCategory().subscribe(function (res) {\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var c = _step.value;\n\n                    _this.catsche.push({ label: c.para_name, value: c.para_id });\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n        });\n        this._scheduler.getSchedulerStatus().subscribe(function (res) {\n            // this.category = [];\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n                for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                    var c = _step2.value;\n\n                    _this.stssche.push({ label: c.para_name, value: c.para_id });\n                }\n            } catch (err) {\n                _didIteratorError2 = true;\n                _iteratorError2 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                        _iterator2.return();\n                    }\n                } finally {\n                    if (_didIteratorError2) {\n                        throw _iteratorError2;\n                    }\n                }\n            }\n        });\n        this._scheduler.getSchedulerPlaces().subscribe(function (res) {\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n                for (var _iterator3 = res.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                    var c = _step3.value;\n\n                    _this.plsch.push({ label: c.para_name, value: c.para_id });\n                }\n            } catch (err) {\n                _didIteratorError3 = true;\n                _iteratorError3 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                        _iterator3.return();\n                    }\n                } finally {\n                    if (_didIteratorError3) {\n                        throw _iteratorError3;\n                    }\n                }\n            }\n        });\n\n        this._groups.getGroups().subscribe(function (data) {\n            _this.groups = data.data;\n            var _iteratorNormalCompletion4 = true;\n            var _didIteratorError4 = false;\n            var _iteratorError4 = undefined;\n\n            try {\n                for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                    var c = _step4.value;\n\n                    _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n                }\n            } catch (err) {\n                _didIteratorError4 = true;\n                _iteratorError4 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                        _iterator4.return();\n                    }\n                } finally {\n                    if (_didIteratorError4) {\n                        throw _iteratorError4;\n                    }\n                }\n            }\n        });\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(function (data) {\n            _this.users = data.data;\n            var _iteratorNormalCompletion5 = true;\n            var _didIteratorError5 = false;\n            var _iteratorError5 = undefined;\n\n            try {\n                for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                    var c = _step5.value;\n\n                    _this.userslbl.push({\n                        label: c.user_lastname + \", \" + c.user_name,\n                        value: c.user_id\n                    });\n                }\n            } catch (err) {\n                _didIteratorError5 = true;\n                _iteratorError5 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                        _iterator5.return();\n                    }\n                } finally {\n                    if (_didIteratorError5) {\n                        throw _iteratorError5;\n                    }\n                }\n            }\n        });\n        this.reload();\n    }\n\n    _createClass(SchedulerListComponent, [{\n        key: \"setGroupList\",\n        value: function setGroupList(state) {\n            this.textGroup = state;\n            this.namegroup = name;\n            this.currentpage = 1;\n            this.limitpage = this.schedules.length > 20 ? 20 : this.schedules.length;\n            this.itemcount = this.schedules.length;\n        }\n    }, {\n        key: \"setGroupList\",\n        value: function setGroupList(state, name) {\n            this.namegroup = name;\n            this.textGroup = state;\n            this.currentpage = 1;\n            this.limitpage = this.schedules.length > 20 ? 20 : this.schedules.length;\n            this.itemcount = this.schedules.length;\n            // this.reload();\n        }\n    }, {\n        key: \"filterMultiple\",\n        value: function filterMultiple(event) {\n            var query = event.query;\n            this.usersCRM = this.filter(query, this.usersCRMa);\n        }\n    }, {\n        key: \"filter\",\n        value: function filter(query, countries) {\n            var filtered = [];\n            for (var i = 0; i < countries.length; i++) {\n                var country = countries[i];\n                if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n                    filtered.push(country);\n                }\n            }\n            return filtered;\n        }\n    }, {\n        key: \"addScheduler\",\n        value: function addScheduler() {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.scheduler = { scheduler: {} };\n        }\n    }, {\n        key: \"showModal\",\n        value: function showModal(sch) {\n            var _this2 = this;\n\n            this.sch = sch;\n            this.scheduler = { scheduler: {} };\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this._scheduler.getMySchedule().subscribe(function (res) {\n                _this2.scheduler = sch;\n                _this2.scheduler = res.data;\n                $(\"#mdScheduler\").modal(\"show\");\n            });\n        }\n    }, {\n        key: \"showEditModal\",\n        value: function showEditModal(sch) {\n            var _this3 = this;\n\n            this.sch = sch;\n            this.scheduler = { scheduler: {} };\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this._scheduler.getMySchedule().subscribe(function (res) {\n                _this3.scheduler = sch;\n                _this3.scheduler = res.data;\n                $(\"#mdEditScheduler\").modal(\"show\");\n            });\n        }\n    }, {\n        key: \"deleteScheduler\",\n        value: function deleteScheduler(sch) {\n            var _this4 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.confirm.confirm({\n                message: \"Do you want to delete the Schedule(s)?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (sch) {\n                        _this4._scheduler.deleteScheduler(sch).subscribe(function (data) {\n                            _this4.reload();\n                            _this4.toastr.success(\"Schedule deleted successfully\");\n                        });\n                    } else {\n                        if (_this4.selsch.length > 0) {\n                            for (var x in _this4.selsch) {\n                                _this4._scheduler.deleteScheduler(_this4.selsch[x]).subscribe(function (data) {});\n                            }\n                            _this4.selsch = [];\n                            _this4.toastr.success(\"Schedules deleted successfully\");\n                            _this4.reload();\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"selectAll\",\n        value: function selectAll() {\n            if (this.selsch.length > 0) {\n                this.selsch = [];\n            } else {\n                this.selsch = [];\n                for (var t in this.schedules) {\n                    this.selsch.push(this.schedules[t].sche_id);\n                }\n            }\n        }\n    }, {\n        key: \"setStateList\",\n        value: function setStateList(state) {\n            if (state == \"Outstanding\") {\n                this.textState = [\"1\"];\n                this.posState = \"outst\";\n            } else {\n                this.textState = state;\n                this.posState = \"SchStatus\";\n            }\n            this.currentpage = 1;\n            this.limitpage = this.schedules.length > 20 ? 20 : this.schedules.length;\n            this.itemcount = this.schedules.length;\n        }\n    }, {\n        key: \"saveScheduler\",\n        value: function saveScheduler() {\n            var _this5 = this;\n\n            this.scheduler.sche_end = new Date(this.scheduler.sche_end);\n            this.scheduler.sche_end = this.scheduler.sche_end.getFullYear() + \"-\" + (this.scheduler.sche_end.getMonth() + 1) + \"-\" + this.scheduler.sche_end.getDate();\n            this.scheduler.sche_start = new Date(this.scheduler.sche_start);\n            this.scheduler.sche_start = this.scheduler.sche_start.getFullYear() + \"-\" + (this.scheduler.sche_start.getMonth() + 1) + \"-\" + this.scheduler.sche_start.getDate();\n            this._scheduler.putScheduler(this.scheduler).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this5.toastr.warning(data.message, \"Good news!\");\n                } else {\n                    _this5.toastr.success(data.message, \"Scheduler updated successfully\");\n                }\n                _this5.reload();\n            });\n        }\n    }, {\n        key: \"actScheduler\",\n        value: function actScheduler(sch) {\n            var _this6 = this;\n\n            sch.sche_end = new Date(sch.sche_end);\n            sch.sche_end = sch.sche_end.getFullYear() + \"-\" + (sch.sche_end.getMonth() + 1) + \"-\" + sch.sche_end.getDate();\n            sch.sche_start = new Date(sch.sche_start);\n            sch.sche_start = sch.sche_start.getFullYear() + \"-\" + (sch.sche_start.getMonth() + 1) + \"-\" + sch.sche_start.getDate();\n            this._scheduler.editScheduler(sch).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this6.toastr.warning(data.message, \"Good news!\");\n                } else {\n                    _this6.toastr.success(data.message, \"Scheduler updated successfully\");\n                }\n                _this6.reload();\n            });\n        }\n    }, {\n        key: \"reload\",\n        value: function reload() {\n            var _this7 = this;\n\n            this.isLoading = true;\n            var filter = {\n                start: this.currentpage * this.limitpage - this.limitpage,\n                end: this.limitpage,\n                all: this.search.trim(),\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n\n            this._scheduler.getMySchedule(filter).subscribe(function (res) {\n                _this7.isLoading = false;\n                _this7.schedules = res.data;\n                _this7.itemcount = res.data.count;\n                _this7.lastpage = _this7.itemcount / _this7.limitpage;\n                if (_this7.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this7.lastpage);\n                    _this7.lastpage = countpag;\n                }\n                _this7.pages = [];\n                for (var i = 1; i <= _this7.lastpage; i++) {\n                    _this7.pages.push(i);\n                }\n                if (_this7.pages.length == 0) {\n                    _this7.pages = [1];\n                }\n            });\n        }\n    }, {\n        key: \"setOrder\",\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n        }\n    }, {\n        key: \"setCurPage\",\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            var temporal = document.createElement(\"div\");\n            temporal.innerHTML = text;\n            var text = temporal.textContent || temporal.innerText || \"\";\n\n            return text;\n        }\n    }, {\n        key: \"goTo\",\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n            } else {\n                this.currentpage = this.lastpage;\n            }\n            this.reload();\n        }\n    }, {\n        key: \"changedExtraHandler\",\n        value: function changedExtraHandler(event) {\n            var _this8 = this;\n\n            if (event.keyCode == 13) {\n                this.isLoading = true;\n                this.currentpage = 1;\n\n                var filter = {\n                    start: 0,\n                    end: this.limitpage,\n                    all: this.search.trim(),\n                    orderby: this.posOrder,\n                    orderdesc: this.orderDesc ? \"desc\" : \"\"\n                };\n\n                this._scheduler.getMySchedule(filter).subscribe(function (res) {\n                    _this8.isLoading = false;\n                    _this8.schedules = res.data.data;\n                    _this8.itemcount = res.data.count;\n                    _this8.lastpage = _this8.itemcount / _this8.limitpage;\n                    if (_this8.lastpage % 1 != 0) {\n                        var countpag = 1 + parseInt(_this8.lastpage);\n                        _this8.lastpage = countpag;\n                    }\n                    _this8.pages = [];\n                    for (var i = 1; i <= _this8.lastpage; i++) {\n                        _this8.pages.push(i);\n                    }\n                    if (_this8.pages.length == 0) {\n                        _this8.pages = [1];\n                    }\n                });\n                this.cont = 0;\n            }\n        }\n    }]);\n\n    return SchedulerListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _group.GroupService, _scheduler.SchedulerService, _users.UsersService, _ngxToastr.ToastrService, _primeng.ConfirmationService], SchedulerListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 395 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.EventsListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _eventslistTemplate = __webpack_require__(841);\n\nvar _eventslistTemplate2 = _interopRequireDefault(_eventslistTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _events = __webpack_require__(50);\n\nvar _directory = __webpack_require__(31);\n\nvar _users = __webpack_require__(20);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EventsListComponent = exports.EventsListComponent = (_dec = (0, _core.Component)({\n    selector: \"eventslist\",\n    template: _eventslistTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function EventsListComponent(title, router, sanitizer, groupService, directoryService, toastr, eventsService, arouter, usersService, confirmationService) {\n        var _this = this;\n\n        _classCallCheck(this, EventsListComponent);\n\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._groups = groupService;\n        this._events = eventsService;\n        this._directory = directoryService;\n        this.confirm = confirmationService;\n        this._user = usersService;\n        this.textState = \"\";\n        this.posState = \"para_name\";\n        this.textGroup = \"\";\n        this.posGroup = \"grop_id\";\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.pages = [1];\n        this._aroute = arouter;\n        this.limitpage = 20;\n        this.groups = [];\n        this.categories = [];\n        this.plmt = [];\n        this.stsmt = [];\n        this.lblgroups = [];\n        this.selmee = [];\n        this.userlist = [];\n        this.meeting = { usershared: [] };\n        this.emails = [];\n        this.st_cancelled = 0;\n        this.itemcount = 0;\n        this.namegroup = \"ALL\";\n        this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Events ::.\");\n        if (localStorage.getItem(\"eventsearch\")) {\n            this.search = localStorage.getItem(\"eventsearch\");\n        }\n\n        this._events.getMeetingStatus().subscribe(function (res) {\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var c = _step.value;\n\n                    _this.stsmt.push({ label: c.para_name, value: c.para_id });\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n        });\n        this._events.getMeetingPlaces().subscribe(function (res) {\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n                for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                    var c = _step2.value;\n\n                    _this.plmt.push({ label: c.para_name, value: c.para_id });\n                }\n            } catch (err) {\n                _didIteratorError2 = true;\n                _iteratorError2 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                        _iterator2.return();\n                    }\n                } finally {\n                    if (_didIteratorError2) {\n                        throw _iteratorError2;\n                    }\n                }\n            }\n        });\n        this._groups.getGroups().subscribe(function (data) {\n            _this.groups = data.data;\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n                for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                    var c = _step3.value;\n\n                    _this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n                }\n            } catch (err) {\n                _didIteratorError3 = true;\n                _iteratorError3 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                        _iterator3.return();\n                    }\n                } finally {\n                    if (_didIteratorError3) {\n                        throw _iteratorError3;\n                    }\n                }\n            }\n        });\n        this.usersCRM = [];\n        this.usersCRMa = [];\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(function (data) {\n            _this.users = data.data;\n            _this.usersCRM = data.data;\n            _this.usersCRMa = data.data;\n            var _iteratorNormalCompletion4 = true;\n            var _didIteratorError4 = false;\n            var _iteratorError4 = undefined;\n\n            try {\n                for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                    var c = _step4.value;\n\n                    _this.userslbl.push({\n                        label: c.user_lastname + \", \" + c.user_name,\n                        value: c.user_id\n                    });\n                }\n            } catch (err) {\n                _didIteratorError4 = true;\n                _iteratorError4 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                        _iterator4.return();\n                    }\n                } finally {\n                    if (_didIteratorError4) {\n                        throw _iteratorError4;\n                    }\n                }\n            }\n        });\n        this.statuslist = [];\n        this._events.getIdStatus(10, 3).subscribe(function (data) {\n            _this.st_cancelled = data.data[0].para_id;\n\n            var _iteratorNormalCompletion5 = true;\n            var _didIteratorError5 = false;\n            var _iteratorError5 = undefined;\n\n            try {\n                for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                    var c = _step5.value;\n\n                    _this.statuslist.push({ label: c.para_name, value: c.para_codigo });\n                }\n            } catch (err) {\n                _didIteratorError5 = true;\n                _iteratorError5 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                        _iterator5.return();\n                    }\n                } finally {\n                    if (_didIteratorError5) {\n                        throw _iteratorError5;\n                    }\n                }\n            }\n        });\n\n        this.reload();\n    }\n\n    _createClass(EventsListComponent, [{\n        key: \"reload\",\n        value: function reload() {\n            var _this2 = this;\n\n            this.isLoading = true;\n            var filter = {\n                start: this.currentpage * this.limitpage - this.limitpage,\n                end: this.limitpage,\n                all: this.search.trim(),\n                state: this.textState,\n                group: this.textGroup,\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._events.getMyMeetingsList(filter).subscribe(function (res) {\n                _this2.isLoading = false;\n                _this2.events = res.data.data;\n                _this2.itemcount = res.data.data.count;\n                _this2.lastpage = _this2.itemcount / _this2.limitpage;\n                if (_this2.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this2.lastpage);\n                    _this2.lastpage = countpag;\n                }\n                _this2.pages = [];\n                for (var i = 1; i <= _this2.lastpage; i++) {\n                    _this2.pages.push(i);\n                }\n                if (_this2.pages.length == 0) {\n                    _this2.pages = [1];\n                }\n            });\n        }\n    }, {\n        key: \"changedExtraHandler\",\n        value: function changedExtraHandler(event) {\n            if (event.keyCode == 13) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n                this.reload();\n            }\n        }\n\n        // setGroupList(state) {\n        //     this.textGroup = state;\n        //     this.currentpage = 1;\n        //     // this.limitpage = this.events.length > 20 ? 20 : this.events.length;\n        //     // this.itemcount = this.events.length;\n        //     this.reload();\n        // }\n\n    }, {\n        key: \"setGroupList\",\n        value: function setGroupList(state, name) {\n            this.namegroup = name;\n            this.textGroup = state;\n            this.currentpage = 1;\n            // this.limitpage = this.events.length > 20 ? 20 : this.events.length;\n            // this.itemcount = this.events.length;\n            this.reload();\n        }\n    }, {\n        key: \"filterMultiple\",\n        value: function filterMultiple(event) {\n            var query = event.query;\n            this.usersCRM = this.filter(query, this.usersCRMa);\n        }\n    }, {\n        key: \"filterMultipleEmails\",\n        value: function filterMultipleEmails(event) {\n            var query = event.query;\n            this.listmails = this.filter(query, this.listmailsa);\n        }\n    }, {\n        key: \"filter\",\n        value: function filter(query, countries) {\n            var filtered = [];\n            for (var i = 0; i < countries.length; i++) {\n                var country = countries[i];\n                if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n                    filtered.push(country);\n                }\n            }\n            return filtered;\n        }\n    }, {\n        key: \"addMeeting\",\n        value: function addMeeting() {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.meeting = { usershared: [] };\n        }\n    }, {\n        key: \"showModal\",\n        value: function showModal(meet_id, modalname) {\n            var _this3 = this;\n\n            this.meeting = { usershared: [] };\n            this._events.getMeeting(meet_id).subscribe(function (res) {\n                var part1 = res.data.data.meet_date.split(\" \");\n                var day = part1[0].split(\"-\");\n                var time = part1[1].split(\":\");\n                res.data.data.datetime = new Date(day[0], day[1] - 1, day[2], time[0], time[1]);\n                res.data.data.usershared = [];\n                _this3.meeting = res.data.data;\n                _this3._events.getUsersMeeting(meet_id).subscribe(function (res) {\n                    var _iteratorNormalCompletion6 = true;\n                    var _didIteratorError6 = false;\n                    var _iteratorError6 = undefined;\n\n                    try {\n                        for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                            var c = _step6.value;\n\n                            _this3.meeting.usershared.push(c);\n                        }\n                    } catch (err) {\n                        _didIteratorError6 = true;\n                        _iteratorError6 = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                                _iterator6.return();\n                            }\n                        } finally {\n                            if (_didIteratorError6) {\n                                throw _iteratorError6;\n                            }\n                        }\n                    }\n                });\n                $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n                $(\"#\" + modalname).modal(\"show\");\n            });\n        }\n    }, {\n        key: \"saveMeeting\",\n        value: function saveMeeting() {\n            var _this4 = this;\n\n            var usarr = [];\n            for (var x in this.meeting.usershared) {\n                if (this.meeting.usershared[x].user_id) {\n                    usarr.push(this.meeting.usershared[x].user_id);\n                }\n            }\n            this.meeting.users = usarr;\n            this.meeting.meet_date = this.meeting.datetime.getFullYear() + \"-\" + this.lpad(this.meeting.datetime.getMonth() + 1, 2) + \"-\" + this.lpad(this.meeting.datetime.getDate(), 2) + \" \" + this.lpad(this.meeting.datetime.getHours(), 2) + \":\" + this.lpad(this.meeting.datetime.getMinutes(), 2) + \":\" + this.lpad(this.meeting.datetime.getSeconds(), 2);\n            this._events.putMeeting(this.meeting).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this4.toastr.warning(data.message, \"Error\");\n                } else {\n                    _this4.toastr.success(data.message, \"Meeting Saved successfully\");\n                }\n                _this4.reload();\n            });\n        }\n    }, {\n        key: \"cancelMeeting\",\n        value: function cancelMeeting(meet_id) {\n            var _this5 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.confirm.confirm({\n                message: \"Do you want to proceed?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (meet_id) {\n                        _this5._events.setStatusMeeting(meet_id, _this5.st_cancelled).subscribe(function (data) {\n                            _this5.reload();\n                            _this5.toastr.success(\"The Meeting was cancelled successfully\");\n                        });\n                    } else {\n                        if (_this5.selmee.length > 0) {\n                            for (var x in _this5.selmee) {\n                                _this5._events.setStatusMeeting(_this5.selmee[x], _this5.st_cancelled).subscribe(function (data) {});\n                            }\n                            _this5.selmee = [];\n                            _this5.reload();\n                            _this5.toastr.success(\"The Meetings was cancelled successfully\");\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"deleteMeeting\",\n        value: function deleteMeeting(mt) {\n            var _this6 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.confirm.confirm({\n                message: \"Do you want to proceed?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (mt) {\n                        _this6._events.deleteMeeting(mt).subscribe(function (data) {\n                            _this6.reload();\n                            _this6.toastr.success(\"Meeting deleted successfully\");\n                        });\n                    } else {\n                        if (_this6.selmee.length > 0) {\n                            for (var x in _this6.selmee) {\n                                _this6._events.deleteMeeting(_this6.selmee[x]).subscribe(function (data) {});\n                            }\n                            _this6.selmee = [];\n                            _this6.toastr.success(\"Meeting deleted successfully\");\n                            _this6.reload();\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"lpad\",\n        value: function lpad(n, width, z) {\n            z = z || \"0\";\n            n = n || \"0\";\n            n = n + \"\";\n            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n        }\n    }, {\n        key: \"selectAll\",\n        value: function selectAll() {\n            if (this.selmee.length > 0) {\n                this.selmee = [];\n            } else {\n                this.selmee = [];\n                for (var t in this.events) {\n                    this.selmee.push(this.events[t].meet_id);\n                }\n            }\n        }\n    }, {\n        key: \"setStateList\",\n        value: function setStateList(state) {\n            this.textState = state;\n            this.posState = \"para_name\";\n            this.currentpage = 1;\n            this.reload();\n        }\n    }, {\n        key: \"setStateList\",\n        value: function setStateList(state) {\n            this.textState = state;\n            this.posState = \"para_name\";\n            if (state == \"Outstanding\") {\n                this.textState = [\"1\"];\n                this.posState = \"outst\";\n            } else {\n                this.textState = state;\n                this.posState = \"para_name\";\n            }\n            this.currentpage = 1;\n            this.limitpage = this.events.length > 20 ? 20 : this.events.length;\n            this.itemcount = this.events.length;\n        }\n    }, {\n        key: \"setOrder\",\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n        }\n    }, {\n        key: \"setCurPage\",\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            var temporal = document.createElement(\"div\");\n            temporal.innerHTML = text;\n            var text = temporal.textContent || temporal.innerText || \"\";\n\n            return text;\n        }\n    }, {\n        key: \"goTo\",\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n            } else {\n                this.currentpage = Math.round(this.itemcount / this.limitpage);\n                var mod = this.itemcount % this.limitpage;\n                if (mod > 0 && mod < 5) {\n                    this.currentpage += 1;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"filterText\",\n        value: function filterText() {\n            this.isLoading = true;\n            this.currentpage = 1;\n            this.reload();\n        }\n    }]);\n\n    return EventsListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _group.GroupService, _directory.DirectoryService, _ngxToastr.ToastrService, _events.EventsService, _router.ActivatedRoute, _users.UsersService, _primeng.ConfirmationService], EventsListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 396 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.EventsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _task = __webpack_require__(19);\n\nvar _project = __webpack_require__(18);\n\nvar _events = __webpack_require__(50);\n\nvar _directory = __webpack_require__(31);\n\nvar _product = __webpack_require__(22);\n\nvar _note = __webpack_require__(24);\n\nvar _mail = __webpack_require__(36);\n\nvar _pipes = __webpack_require__(14);\n\nvar _eventsTemplate = __webpack_require__(842);\n\nvar _eventsTemplate2 = _interopRequireDefault(_eventsTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar EventsComponent = exports.EventsComponent = (_dec = (0, _core.Component)({\n  selector: \"events\",\n  template: _eventsTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe]\n}), _dec(_class = function () {\n  function EventsComponent(title, route, toastr, eventsService, sanitizer, arouter, taskService, noteService, directoryService, productService, mailService, ProjectService) {\n    _classCallCheck(this, EventsComponent);\n\n    this._title = title;\n    this._route = route;\n    this._tasks = taskService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._events = eventsService;\n    this._sanitizer = sanitizer;\n    this._user = usersService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._mail = mailService;\n    this.project = { attachments: [] };\n    this.task = { attachments: [] };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.taskid = [];\n    this.searchTask = \"\";\n    this.search = \"\";\n    this.crmusers = [];\n    this.contacts = [];\n    this.listmails = [];\n    this.listmails = [];\n\n    // this.detail = [];\n    this.meeting = { usershared: [] };\n  }\n\n  _createClass(EventsComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      var _this = this;\n\n      this.list = [];\n      this._products.getProducts().subscribe(function (data) {\n        _this.products = [];\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(function (data) {\n        _this.users = data.data;\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var c = _step2.value;\n\n            _this.userslbl.push({\n              label: c.user_lastname + \", \" + c.user_name,\n              value: c.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      });\n      this._user.getEmailList().subscribe(function (data) {\n        _this.listmails = data.data;\n        _this.listmailsa = data.data;\n      });\n      this._aroute.params.forEach(function (params) {\n        _this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n          _this.stTitle = localStorage.getItem('title');\n        }\n        _this._title.setTitle(\".:: \" + _this.stTitle + \" : Event #\" + params.idmeeting + \" ::.\");\n        _this._events.getMeeting(params.idmeeting).subscribe(function (res) {\n          res.data.meet_text = _this.sanitizeHtml(res.data.meet_text);\n          $(\"#someFrame\").attr(\"srcdoc\", _this.escapeHtml(res.data.meet_text));\n          res.data.data.usershared = [];\n          _this.meeting = res.data.data;\n          _this._events.getUsersMeeting(params.idmeeting).subscribe(function (res) {\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n              for (var _iterator3 = res.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                var c = _step3.value;\n\n                _this.meeting.usershared.push(c);\n              }\n            } catch (err) {\n              _didIteratorError3 = true;\n              _iteratorError3 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                  _iterator3.return();\n                }\n              } finally {\n                if (_didIteratorError3) {\n                  throw _iteratorError3;\n                }\n              }\n            }\n          });\n        });\n      });\n\n      this.listtasks = [];\n      this.listtasksa = [];\n      this._tasks.getUserTasks().subscribe(function (data) {\n        _this.listtasks = data.data;\n        _this.listtasksa = data.data;\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.meeting.attachments.push(files[0]);\n    }\n  }, {\n    key: \"enableBtn\",\n    value: function enableBtn() {\n      if (this.displaybtn) {\n        $(\".task\").animate({\n          right: \"20px\"\n        });\n        $(\".atetask\").animate({\n          right: \"20px\"\n        });\n        $(\".comment\").animate({\n          right: \"20px\"\n        });\n        $(\".atemail\").animate({\n          right: \"20px\"\n        });\n        $(\".sendemail\").animate({\n          right: \"20px\"\n        });\n        this.displaybtn = false;\n      } else {\n        $(\".task\").animate({\n          right: \"65px\"\n        });\n        $(\".atetask\").animate({\n          right: \"110px\"\n        });\n        $(\".comment\").animate({\n          right: \"155px\"\n        });\n        $(\".atemail\").animate({\n          right: \"200px\"\n        });\n        $(\".sendemail\").animate({\n          right: \"245px\"\n        });\n        this.displaybtn = true;\n      }\n    }\n  }, {\n    key: \"closedt\",\n    value: function closedt() {\n      $(\"#collapseNote\").css({ display: \"none\" });\n      this.note = { attachments: [] };\n      $(\"#collapseTask\").css({ display: \"none\" });\n      this.task = { attachments: [] };\n      $(\"#collapseMail\").css({ display: \"none\" });\n      this.mail = { attachments: [] };\n    }\n  }, {\n    key: \"addTask\",\n    value: function addTask() {\n      var _this2 = this;\n\n      if (this.displaybtn) {\n        if (this.crmusers.length == 0) {\n          this._user.getCRMUsers().subscribe(function (data) {\n            _this2.crmusers = data.data;\n          });\n        }\n        $(\"#collapseNote\").css({ display: \"none\" });\n        if ($(\"#collapseTask\").css(\"display\") == \"none\") {\n          $(\"#collapseTask\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseTask\").offset().top\n        }, 1000);\n        this.task.task_description = this.sanitizeHtml(this.project.task_description);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this3 = this;\n\n      this.task.meet_id = this.meeting.meet_id;\n      this.task.task_description = this.task.task_description.split(\"\\n\").join(\"<br />\");\n      this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      this.task.task_description = this.task.task_description;\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      this._tasks.putTask(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this3.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this3.toastr.success(data.message, \"Saved Successfully\");\n        }\n        _this3.closedt();\n      });\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"addNote\",\n    value: function addNote() {\n      if (this.displaybtn) {\n        $(\"#collapseTask\").css({ display: \"none\" });\n        if ($(\"#collapseNote\").css(\"display\") == \"none\") {\n          $(\"#collapseNote\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseNote\").offset().top\n        }, 1000);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveNote\",\n    value: function saveNote() {\n      var _this4 = this;\n\n      this.note.meet_id = this.meeting.meet_id;\n      this._notes.putNote(this.note).subscribe(function (data) {\n        _this4.toastr.success(data.message, \"Note added Successfully\");\n        _this4.note = { attachments: [] };\n      });\n    }\n  }, {\n    key: \"onChangeNote\",\n    value: function onChangeNote(event) {\n      var files = event.srcElement.files;\n      this.note.attachments.push(files[0]);\n    }\n  }, {\n    key: \"showAsociateMail\",\n    value: function showAsociateMail() {\n      this.closedt();\n      //$(\"#mdAsoMail\").modal('show');\n    }\n  }, {\n    key: \"addAsociateMail\",\n    value: function addAsociateMail() {\n      for (var x in this.listmails) {\n        this._events.addAsociateMail(this.listmails[x], this.meeting.meet_id).subscribe(function (res) {});\n      }\n      this.toastr.success(\"Mail asociated successfully\");\n    }\n  }, {\n    key: \"srchMail\",\n    value: function srchMail() {\n      var _this5 = this;\n\n      this.mails = [];\n      this.listmails = [];\n      this._mail.searchMail(this.searchMail).subscribe(function (data) {\n        _this5.mails = data.data;\n      });\n    }\n  }, {\n    key: \"showAsociateTask\",\n    value: function showAsociateTask() {\n      this.closedt();\n      $(\"#mdAsoTask\").modal(\"show\");\n    }\n  }, {\n    key: \"addAsociateTask\",\n    value: function addAsociateTask() {\n      for (var x in this.list) {\n        this._events.addAsociateTask(this.list[x], this.meeting.meet_id).subscribe(function (res) {});\n      }\n      this.list = [];\n    }\n  }, {\n    key: \"srchTask\",\n    value: function srchTask() {\n      var _this6 = this;\n\n      this.taskid = [];\n      this.listtasks = [];\n      this._task.searchTask(this.searchTask).subscribe(function (data) {\n        _this6.listtasks = data.data;\n      });\n    }\n  }, {\n    key: \"addMail\",\n    value: function addMail() {\n      if (this.displaybtn) {\n        $(\"#collapseMail\").css({ display: \"none\" });\n        if ($(\"#collapseMail\").css(\"display\") == \"none\") {\n          $(\"#collapseMail\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          //scrollTop: $(\"#collapseMail\").offset().top\n        }, 1000);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveMail\",\n    value: function saveMail() {\n      var _this7 = this;\n\n      var mymails = [];\n      for (var x in this.mail.emails) {\n        mymails.push(this.mail.emails[x].correo);\n      }\n      this.mail.emails = mymails;\n      this.mail.content = this.mail.content.split(\"\\n\").join(\"\");\n      this.mail.content = this.mail.content.split(\"\\r\").join(\"\");\n      this.mail.proj_id = this.project.proj_id;\n      this._mail.sendMessage(this.mail).subscribe(function (data) {\n        _this7.toastr.success(data.message, \"Mail sent Successfully\");\n        //this.getTimeline(this.project.proj_id);\n      });\n      this.mail = { attachments: [] };\n      this.closedt();\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.listmails = this.filter(query, this.listmailsa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, mails) {\n      var filtered = [];\n      for (var i = 0; i < mails.length; i++) {\n        var country = mails[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (base64test.exec(input)) {\n        return false;\n      }\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n      do {\n        enc1 = keyStr.indexOf(input.charAt(i++));\n        enc2 = keyStr.indexOf(input.charAt(i++));\n        enc3 = keyStr.indexOf(input.charAt(i++));\n        enc4 = keyStr.indexOf(input.charAt(i++));\n\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n\n        output = output + String.fromCharCode(chr1);\n\n        if (enc3 != 64) {\n          output = output + String.fromCharCode(chr2);\n        }\n        if (enc4 != 64) {\n          output = output + String.fromCharCode(chr3);\n        }\n\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n\n      return unescape(output);\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      input = escape(input);\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      do {\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n        output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n      return output;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n    }\n  }]);\n\n  return EventsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _ngxToastr.ToastrService, _events.EventsService, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _task.TaskService, _note.NoteService, _directory.DirectoryService, _product.ProductService, _mail.MailService, _project.ProjectService], EventsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 397 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.RolesComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _rolesTemplate = __webpack_require__(843);\n\nvar _rolesTemplate2 = _interopRequireDefault(_rolesTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _header = __webpack_require__(32);\n\nvar _roles = __webpack_require__(46);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RolesComponent = exports.RolesComponent = (_dec = (0, _core.Component)({\n  selector: \"roles\",\n  template: _rolesTemplate2.default,\n  providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n  function RolesComponent(title, router, sanitizer, toastr, groupService, rolesService, headerService, confirmationService) {\n    var _this = this;\n\n    _classCallCheck(this, RolesComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._roles = rolesService;\n    this._groups = groupService;\n    this.confirm = confirmationService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.lblgroups = [];\n    this.selectedRole = 0;\n    this.modulesTree = [];\n    this.subModules = [];\n    this.rolesMenu = [];\n    this.submoduleChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPer = [];\n    this.selectedPermits = [];\n    this.savePermit = [];\n    this.modulesAdd = [];\n    this.obj = [];\n    this._header = headerService;\n    this.role = [];\n    this.selRole = 0;\n    this.modulesMyTree = [];\n    this.submodChk = 0;\n    this.modAdd = [];\n    this.myRol = 0;\n    this.myRolName = \"\";\n    this.parentsTree = [];\n    this.parentsTree2 = [];\n    this.children_show = [];\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Roles ::.\");\n    this._groups.getGroups().subscribe(function (data) {\n      _this.groups = data.data;\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this._roles.getModules(0).subscribe(function (res) {\n      var parents = [];\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          if (c.parent == null) {\n            parents.push({ parentid: c.modid, parentname: c.moduleName });\n          } else {\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n              for (var _iterator3 = parents[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                var u = _step3.value;\n\n                if (c.parent == u.parentid) {\n                  _this.modulesAdd.push({ label: c.moduleName, value: c.modid });\n                }\n              }\n            } catch (err) {\n              _didIteratorError3 = true;\n              _iteratorError3 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                  _iterator3.return();\n                }\n              } finally {\n                if (_didIteratorError3) {\n                  throw _iteratorError3;\n                }\n              }\n            }\n          }\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(RolesComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      this.getRoles();\n    }\n  }, {\n    key: \"getAllModules\",\n    value: function getAllModules() {\n      var _this2 = this;\n\n      var listModChild = [];\n      this.parentsTree = [];\n      var childrens = [];\n      this.selectedPer = [];\n      var array = [];\n      this._roles.getParentModules().subscribe(function (res) {\n        array = res.data;\n        var _iteratorNormalCompletion4 = true;\n        var _didIteratorError4 = false;\n        var _iteratorError4 = undefined;\n\n        try {\n          for (var _iterator4 = res.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n            var u = _step4.value;\n\n            _this2.parentsTree.push({\n              label: u.modu_name,\n              data: u.modu_id,\n              expanded: false,\n              expandedIcon: \"fa-folder-open\",\n              collapsedIcon: \"fa-folder\",\n              children: childrens,\n              selectable: false\n            });\n          }\n        } catch (err) {\n          _didIteratorError4 = true;\n          _iteratorError4 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion4 && _iterator4.return) {\n              _iterator4.return();\n            }\n          } finally {\n            if (_didIteratorError4) {\n              throw _iteratorError4;\n            }\n          }\n        }\n\n        var _loop = function _loop(i) {\n          _this2.parentsTree[i].children = [];\n          _this2._roles.getChildModules(_this2.parentsTree[i].data).subscribe(function (res) {\n            var _iteratorNormalCompletion5 = true;\n            var _didIteratorError5 = false;\n            var _iteratorError5 = undefined;\n\n            try {\n              for (var _iterator5 = res.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                var c = _step5.value;\n\n                _this2.parentsTree[i].children.push({ label: c.modu_name, data: c.modu_id, parent: c.modu_parent, selectable: false });\n              }\n            } catch (err) {\n              _didIteratorError5 = true;\n              _iteratorError5 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                  _iterator5.return();\n                }\n              } finally {\n                if (_didIteratorError5) {\n                  throw _iteratorError5;\n                }\n              }\n            }\n\n            var _loop2 = function _loop2(j) {\n              _this2.parentsTree[i].children[j].permits = [];\n              _this2._roles.getPermModules(_this2.parentsTree[i].children[j].data).subscribe(function (res) {\n                var _iteratorNormalCompletion6 = true;\n                var _didIteratorError6 = false;\n                var _iteratorError6 = undefined;\n\n                try {\n                  for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                    var _c = _step6.value;\n\n                    _this2.parentsTree[i].children[j].permits.push({ \"label\": _c.perm_desc, \"data\": _c.perm_id, \"parent\": _c.modu_id, \"selectable\": false });\n                  }\n                } catch (err) {\n                  _didIteratorError6 = true;\n                  _iteratorError6 = err;\n                } finally {\n                  try {\n                    if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                      _iterator6.return();\n                    }\n                  } finally {\n                    if (_didIteratorError6) {\n                      throw _iteratorError6;\n                    }\n                  }\n                }\n              });\n            };\n\n            for (var j = 0; j < _this2.parentsTree[i].children.length; j++) {\n              _loop2(j);\n            }\n          });\n        };\n\n        for (var i = 0; i < _this2.parentsTree.length; i++) {\n          _loop(i);\n        }\n      });\n    }\n  }, {\n    key: \"getModulesRole\",\n    value: function getModulesRole(role) {\n      var _this3 = this;\n\n      this.selectedRole = role;\n      this.selectedSubmodule = [];\n      var c = 0;\n      this.parentsTree2 = [];\n      this.submoduleChk = 0;\n      this._roles.getModules(role).subscribe(function (res) {\n        var moduleid = \"0\";\n        var moduleName = \"\";\n        var children = [];\n        var parent = null;\n        var _iteratorNormalCompletion7 = true;\n        var _didIteratorError7 = false;\n        var _iteratorError7 = undefined;\n\n        try {\n          for (var _iterator7 = res.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n            var u = _step7.value;\n\n            if (moduleid != u.modid) {\n              if (moduleid != \"0\" && parent == null) {\n                _this3.parentsTree2.push({\n                  label: moduleName,\n                  data: moduleid,\n                  expanded: false,\n                  expandedIcon: \"fa-folder-open\",\n                  collapsedIcon: \"fa-folder\",\n                  children: children,\n                  selectable: false\n                });\n              }\n              moduleName = u.moduleName;\n              moduleid = u.modid;\n              children = [];\n              parent = u.parent;\n            }\n            if (parent != null) {\n              var _iteratorNormalCompletion8 = true;\n              var _didIteratorError8 = false;\n              var _iteratorError8 = undefined;\n\n              try {\n                for (var _iterator8 = _this3.parentsTree2[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n                  var v = _step8.value;\n\n                  if (v.data == parent) {\n                    v.children.push({ label: u.moduleName, data: u.modid });\n                    _this3.selectedSubmodule.push(u.modid);\n                  }\n                }\n              } catch (err) {\n                _didIteratorError8 = true;\n                _iteratorError8 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                    _iterator8.return();\n                  }\n                } finally {\n                  if (_didIteratorError8) {\n                    throw _iteratorError8;\n                  }\n                }\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError7 = true;\n          _iteratorError7 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion7 && _iterator7.return) {\n              _iterator7.return();\n            }\n          } finally {\n            if (_didIteratorError7) {\n              throw _iteratorError7;\n            }\n          }\n        }\n\n        if (moduleid != \"0\" && parent == null) {\n          _this3.parentsTree2.push({\n            label: moduleName,\n            data: moduleid,\n            expanded: false,\n            expandedIcon: \"fa-folder-open\",\n            collapsedIcon: \"fa-folder\",\n            children: children,\n            selectable: false\n          });\n        }\n      });\n    }\n  }, {\n    key: \"showModules\",\n    value: function showModules(id_parent, children) {\n      this.children_show = [];\n      this.children_show = children;\n    }\n  }, {\n    key: \"deleteRole\",\n    value: function deleteRole(role_id) {\n      var _this4 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to proceed?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (role_id) {\n            _this4._roles.deleteRole(role_id).subscribe(function (data) {\n\n              if (data.data == \"OK\") {\n                _this4.ngOnInit();\n                _this4.toastr.success(\"Role deleted successfully\");\n              } else {\n                _this4.toastr.warning(data.message, \"Action not allowed\");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"editRole\",\n    value: function editRole(role_id, rol_name, role_descr) {\n      this.myRol = role_id;\n      this.myRolName = rol_name;\n      this.getAllModules();\n      this.getModulesRole(role_id);\n      this.getPermits();\n      this.obj = {\n        role_NameNew: this.myRolName,\n        role_description: role_descr\n      };\n      $(\"#editRoleNew\").modal(\"show\");\n    }\n  }, {\n    key: \"showModal\",\n    value: function showModal(role_id, rol_name) {\n      this.myRol = role_id;\n      this.myRolName = rol_name;\n      this.getModulesRol(this.myRol);\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      $(\"#mdRole\").modal(\"show\");\n    }\n  }, {\n    key: \"getModulesRol\",\n    value: function getModulesRol(role) {\n      var _this5 = this;\n\n      this.getMyModules();\n      this.selRole = role;\n      this.modulesMyTree = [];\n      this.submodChk = 0;\n      this._roles.getModules(role).subscribe(function (res) {\n        var module_id = \"0\";\n        var moduleName = \"\";\n        var children = [];\n        var parent = null;\n\n        var _iteratorNormalCompletion9 = true;\n        var _didIteratorError9 = false;\n        var _iteratorError9 = undefined;\n\n        try {\n          for (var _iterator9 = res.data[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n            var u = _step9.value;\n\n            if (module_id != u.modid) {\n              if (module_id != \"0\" && parent == null) {\n                _this5.modulesMyTree.push({\n                  label: moduleName,\n                  data: module_id,\n                  expanded: false,\n                  expandedIcon: \"fa-folder-open\",\n                  collapsedIcon: \"fa-folder\",\n                  children: children,\n                  selectable: false\n                });\n              }\n              moduleName = u.moduleName;\n              module_id = u.modid;\n              children = [];\n              parent = u.parent;\n            }\n            if (parent != null) {\n              var _iteratorNormalCompletion10 = true;\n              var _didIteratorError10 = false;\n              var _iteratorError10 = undefined;\n\n              try {\n                for (var _iterator10 = _this5.modulesMyTree[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n                  var v = _step10.value;\n\n                  if (v.data == parent) {\n                    v.children.push({ label: u.moduleName, data: u.modid });\n                  }\n                }\n              } catch (err) {\n                _didIteratorError10 = true;\n                _iteratorError10 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                    _iterator10.return();\n                  }\n                } finally {\n                  if (_didIteratorError10) {\n                    throw _iteratorError10;\n                  }\n                }\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError9 = true;\n          _iteratorError9 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion9 && _iterator9.return) {\n              _iterator9.return();\n            }\n          } finally {\n            if (_didIteratorError9) {\n              throw _iteratorError9;\n            }\n          }\n        }\n\n        if (module_id != \"0\" && parent == null) {\n          _this5.modulesMyTree.push({\n            label: moduleName,\n            data: module_id,\n            expanded: false,\n            expandedIcon: \"fa-folder-open\",\n            collapsedIcon: \"fa-folder\",\n            children: children,\n            selectable: false\n          });\n        }\n      });\n    }\n  }, {\n    key: \"getMyModules\",\n    value: function getMyModules() {\n      var _this6 = this;\n\n      this._roles.getModules(0).subscribe(function (res) {\n        var parent = [];\n        var _iteratorNormalCompletion11 = true;\n        var _didIteratorError11 = false;\n        var _iteratorError11 = undefined;\n\n        try {\n          for (var _iterator11 = res.data[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n            var c = _step11.value;\n\n            if (c.parent == null) {\n              parent.push({ parentid: c.modid, parentname: c.moduleName });\n            } else {\n              var _iteratorNormalCompletion12 = true;\n              var _didIteratorError12 = false;\n              var _iteratorError12 = undefined;\n\n              try {\n                for (var _iterator12 = parent[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n                  var u = _step12.value;\n\n                  if (c.parent == u.parentid) {\n                    _this6.modAdd.push({ label: c.moduleName, value: c.modid });\n                  }\n                }\n              } catch (err) {\n                _didIteratorError12 = true;\n                _iteratorError12 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                    _iterator12.return();\n                  }\n                } finally {\n                  if (_didIteratorError12) {\n                    throw _iteratorError12;\n                  }\n                }\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError11 = true;\n          _iteratorError11 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion11 && _iterator11.return) {\n              _iterator11.return();\n            }\n          } finally {\n            if (_didIteratorError11) {\n              throw _iteratorError11;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getRoles\",\n    value: function getRoles() {\n      var _this7 = this;\n\n      this.roles = [];\n      this._roles.getRoles().subscribe(function (res) {\n        var _iteratorNormalCompletion13 = true;\n        var _didIteratorError13 = false;\n        var _iteratorError13 = undefined;\n\n        try {\n          for (var _iterator13 = res.data[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {\n            var c = _step13.value;\n\n            _this7.roles.push({\n              label: c.roleName,\n              value: c.roleId,\n              description: c.roleDescription,\n              creator: c.roleCreator,\n              date: c.roleDate,\n              icon: c.role_iconname\n            });\n            _this7.rolesMenu.push(c.roleName.toLowerCase());\n            _this7.rolesMenu.push(c.roleName);\n          }\n        } catch (err) {\n          _didIteratorError13 = true;\n          _iteratorError13 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion13 && _iterator13.return) {\n              _iterator13.return();\n            }\n          } finally {\n            if (_didIteratorError13) {\n              throw _iteratorError13;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state) {\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.limitpage = this.sprints.length > 20 ? 20 : this.sprints.length;\n      this.itemcount = this.sprints.length;\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n    }\n  }, {\n    key: \"getPermits\",\n    value: function getPermits() {\n      var _this8 = this;\n\n      this._roles.getPermits().subscribe(function (res) {\n        _this8.selectedPermits = [];\n        _this8.permits = [];\n        var permitverify = [];\n        if (_this8.submoduleChk > 0) {\n          var _iteratorNormalCompletion14 = true;\n          var _didIteratorError14 = false;\n          var _iteratorError14 = undefined;\n\n          try {\n            for (var _iterator14 = res.data[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {\n              var c = _step14.value;\n\n              if (c.role == _this8.selectedRole) {\n                if (c.submodule == _this8.submoduleChk) {\n                  if (permitverify.indexOf(c.permit) < 0) {\n                    _this8.permits.push({ label: c.description, value: c.permit });\n                    permitverify.push(c.permit);\n                  }\n                  _this8.selectedPermits.push(c.permit);\n                }\n              } else if (c.role == null || c.role != _this8.selectedRole) {\n                if (c.submodule == _this8.submoduleChk) {\n                  if (permitverify.indexOf(c.permit) < 0) {\n                    _this8.permits.push({ label: c.description, value: c.permit });\n                    permitverify.push(c.permit);\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError14 = true;\n            _iteratorError14 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion14 && _iterator14.return) {\n                _iterator14.return();\n              }\n            } finally {\n              if (_didIteratorError14) {\n                throw _iteratorError14;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"updateSelect\",\n    value: function updateSelect(sbmodule) {\n      this.submoduleChk = sbmodule;\n      this.getPermits();\n    }\n    //==== FUNCION ORIGINAL ============\n    // savePermits(permit) {\n    //   if (permit.length > 0) {\n    //     this._roles\n    //       .savePermits(permit, this.submoduleChk, this.selectedRole)\n    //       .subscribe(res => {\n    //         this.toastr.success(res.message, \"Permits saved\");\n    //         this.getPermits();\n    //       });\n    //   } else {\n    //     this._roles\n    //       .savePermits(0, this.submoduleChk, this.selectedRole)\n    //       .subscribe(res => {\n    //         this.toastr.success(res.message, \"Permits saved\");\n    //         this.getPermits();\n    //       });\n    //   }\n    // }\n\n  }, {\n    key: \"addRole\",\n    value: function addRole() {\n      this.children_show = [];\n      this.selectedSubmodule = [];\n      this.obj = {\n        role_NameNew: \"\",\n        role_description: \"\"\n      };\n      this.getAllModules();\n      //this.roleNameNew = \"\";\n      this.selectedModules = [];\n      $(\"#addRole\").modal(\"show\");\n    }\n  }, {\n    key: \"saveRole\",\n    value: function saveRole(role, modules, permit) {\n      var _this9 = this;\n\n      this._roles.saveRole(role, modules).subscribe(function (res) {\n        _this9.toastr.success(res.message, \"Role have been saved\");\n        _this9.getRoles();\n        _this9.role = {\n          role_NameNew: \"\",\n          role_description: \"\"\n        };\n        _this9.selectedModules = [];\n        _this9.savePermits(permit, res.data);\n      });\n    }\n  }, {\n    key: \"savePermits\",\n    value: function savePermits(permit, role) {\n      var _this10 = this;\n\n      if (permit.length > 0) {\n        this._roles.savePermits(permit, role).subscribe(function (res) {\n          _this10.toastr.success(res.message, \"Permits saved\");\n          _this10.getPermits();\n        });\n      }\n    }\n  }, {\n    key: \"updateRole\",\n    value: function updateRole(role_id, role, modules) {\n      var _this11 = this;\n\n      this._roles.updateRole(role_id, role, modules).subscribe(function (res) {\n        _this11.toastr.success(res.message, \"Role have been updated\");\n        _this11.getRoles();\n        //this.roleNameNew = \"\";\n        _this11.role = {\n          role_NameNew: \"\",\n          role_description: \"\"\n        };\n        _this11.selectedModules = [];\n      });\n    }\n  }]);\n\n  return RolesComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _group.GroupService, _roles.RolesService, _header.HeaderService, _primeng.ConfirmationService], RolesComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 398 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.RolComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _rolTemplate = __webpack_require__(844);\n\nvar _rolTemplate2 = _interopRequireDefault(_rolTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _header = __webpack_require__(32);\n\nvar _roles = __webpack_require__(46);\n\nvar _project = __webpack_require__(18);\n\nvar _task = __webpack_require__(19);\n\nvar _sprint = __webpack_require__(26);\n\nvar _mail = __webpack_require__(36);\n\nvar _product = __webpack_require__(22);\n\nvar _directory = __webpack_require__(31);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RolComponent = exports.RolComponent = (_dec = (0, _core.Component)({\n  selector: \"rol\",\n  template: _rolTemplate2.default\n}), _dec(_class = function () {\n  function RolComponent(title, router, sanitizer, arouter, toastr, groupService, rolesService, headerService) {\n    var _this = this;\n\n    _classCallCheck(this, RolComponent);\n\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._roles = rolesService;\n    this._groups = groupService;\n    this._aroute = arouter;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.lblgroups = [];\n    this.selRole = 0;\n    this.modulesMyTree = [];\n    this.subModules = [];\n    this.rolesMenu = [];\n    this.submodChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPermits = [];\n    this.modAdd = [];\n    this.children = [];\n    this._header = headerService;\n    this._groups.getGroups().subscribe(function (data) {\n      _this.groups = data.data;\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this._roles.getModules(0).subscribe(function (res) {\n      var parent = [];\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          if (c.parent == null) {\n            parent.push({ parentid: c.modid, parentname: c.moduleName });\n          } else {\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n              for (var _iterator3 = parent[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                var u = _step3.value;\n\n                if (c.parent == u.parentid) {\n                  _this.modAdd.push({ label: c.moduleName, value: c.modid });\n                }\n              }\n            } catch (err) {\n              _didIteratorError3 = true;\n              _iteratorError3 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                  _iterator3.return();\n                }\n              } finally {\n                if (_didIteratorError3) {\n                  throw _iteratorError3;\n                }\n              }\n            }\n          }\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(RolComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      var _this2 = this;\n\n      this._aroute.params.forEach(function (params) {\n        _this2.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n          _this2.stTitle = localStorage.getItem('title');\n        }\n        _this2._title.setTitle(\".:: \" + _this2.stTitle + \" : Rol #\" + params.idrole);\n        _this2.getModulesRol(params.idrole);\n      });\n      this.getMyRoles();\n      //this.getModules();\n    }\n  }, {\n    key: \"getModulesRol\",\n    value: function getModulesRol(role) {\n      var _this3 = this;\n\n      //console.log(role);\n      this.selRole = role;\n      this.modulesMyTree = [];\n      this.submodChk = 0;\n      this._roles.getModules(role).subscribe(function (res) {\n        var module_id = \"0\";\n        var moduleName = \"\";\n        var children = [];\n        var parent = null;\n        //console.log(res);\n        var _iteratorNormalCompletion4 = true;\n        var _didIteratorError4 = false;\n        var _iteratorError4 = undefined;\n\n        try {\n          for (var _iterator4 = res.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n            var u = _step4.value;\n\n            if (module_id != u.modid) {\n              if (module_id != \"0\" && parent == null) {\n                _this3.modulesMyTree.push({\n                  label: moduleName,\n                  data: module_id,\n                  expanded: false,\n                  expandedIcon: \"fa-folder-open\",\n                  collapsedIcon: \"fa-folder\",\n                  children: children,\n                  selectable: false\n                });\n              }\n              moduleName = u.moduleName;\n              module_id = u.modid;\n              children = [];\n              parent = u.parent;\n            }\n            if (parent != null) {\n              var _iteratorNormalCompletion5 = true;\n              var _didIteratorError5 = false;\n              var _iteratorError5 = undefined;\n\n              try {\n                for (var _iterator5 = _this3.modulesMyTree[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                  var v = _step5.value;\n\n                  if (v.data == parent) {\n                    v.children.push({ label: u.moduleName, data: u.modid });\n                  }\n                }\n              } catch (err) {\n                _didIteratorError5 = true;\n                _iteratorError5 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                    _iterator5.return();\n                  }\n                } finally {\n                  if (_didIteratorError5) {\n                    throw _iteratorError5;\n                  }\n                }\n              }\n            }\n          }\n        } catch (err) {\n          _didIteratorError4 = true;\n          _iteratorError4 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion4 && _iterator4.return) {\n              _iterator4.return();\n            }\n          } finally {\n            if (_didIteratorError4) {\n              throw _iteratorError4;\n            }\n          }\n        }\n\n        if (module_id != \"0\" && parent == null) {\n          _this3.modulesMyTree.push({\n            label: moduleName,\n            data: module_id,\n            expanded: false,\n            expandedIcon: \"fa-folder-open\",\n            collapsedIcon: \"fa-folder\",\n            children: children,\n            selectable: false\n          });\n        }\n      });\n    }\n  }, {\n    key: \"getMyRoles\",\n    value: function getMyRoles() {\n      var _this4 = this;\n\n      this.roles = [];\n      this._roles.getRoles().subscribe(function (res) {\n        var _iteratorNormalCompletion6 = true;\n        var _didIteratorError6 = false;\n        var _iteratorError6 = undefined;\n\n        try {\n          for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n            var c = _step6.value;\n\n            _this4.roles.push({ label: c.roleName, value: c.roleId });\n            _this4.rolesMenu.push(c.roleName.toLowerCase());\n            _this4.rolesMenu.push(c.roleName);\n          }\n        } catch (err) {\n          _didIteratorError6 = true;\n          _iteratorError6 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n              _iterator6.return();\n            }\n          } finally {\n            if (_didIteratorError6) {\n              throw _iteratorError6;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state) {\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.limitpage = this.sprints.length > 20 ? 20 : this.sprints.length;\n      this.itemcount = this.sprints.length;\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n    }\n  }, {\n    key: \"getPermits\",\n    value: function getPermits() {\n      var _this5 = this;\n\n      this._roles.getPermits().subscribe(function (res) {\n        _this5.selectedPermits = [];\n        _this5.permits = [];\n        var permitverify = [];\n        if (_this5.submodChk > 0) {\n          var _iteratorNormalCompletion7 = true;\n          var _didIteratorError7 = false;\n          var _iteratorError7 = undefined;\n\n          try {\n            for (var _iterator7 = res.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n              var c = _step7.value;\n\n              if (c.role == _this5.selRole) {\n                if (c.submodule == _this5.submodChk) {\n                  if (permitverify.indexOf(c.permit) < 0) {\n                    _this5.permits.push({ label: c.description, value: c.permit });\n                    permitverify.push(c.permit);\n                  }\n                  _this5.selectedPermits.push(c.permit);\n                }\n              } else if (c.role == null || c.role != _this5.selRole) {\n                if (c.submodule == _this5.submodChk) {\n                  if (permitverify.indexOf(c.permit) < 0) {\n                    _this5.permits.push({ label: c.description, value: c.permit });\n                    permitverify.push(c.permit);\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError7 = true;\n            _iteratorError7 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                _iterator7.return();\n              }\n            } finally {\n              if (_didIteratorError7) {\n                throw _iteratorError7;\n              }\n            }\n          }\n        }\n      });\n    }\n\n    // updateSelect(sbmodule) {\n    //   this.submodChk = sbmodule;\n    //   this.getPermits();\n    // }\n\n  }, {\n    key: \"savePermits\",\n    value: function savePermits(permits) {\n      var _this6 = this;\n\n      if (permits.length > 0) {\n        this._roles.savePermits(permits, this.submodChk, this.selRole).subscribe(function (res) {\n          _this6.toastr.success(res.message, \"Permits saved\");\n          _this6.getPermits();\n        });\n      } else {\n        this._roles.savePermits(0, this.submodChk, this.selRole).subscribe(function (res) {\n          _this6.toastr.success(res.message, \"Permits saved\");\n          _this6.getPermits();\n        });\n      }\n    }\n\n    // addRole() {\n    //   this.roleNameNew = \"\";\n    //   this.selectedModules = [];\n    //   $('#addRole').modal('show');\n    // }\n\n    // saveRole(rolename,modules){\n    //   this._roles.saveRole(rolename,modules).subscribe(res =>{\n    //     this.toastr.success(res.message, \"Permits saved\");\n    //     this.getRoles();\n    //     this.roleNameNew = \"\";\n    //     this.selectedModules = [];\n    //   });\n    // }\n\n  }, {\n    key: \"showMyModal\",\n    value: function showMyModal(idModule) {\n      if (this.modulesMyTree[idModule] === undefined) {\n        this.children = [];\n      } else {\n        this.children = this.modulesMyTree[idModule].children;\n      }\n      $(\"#mdSons\").modal(\"show\");\n    }\n  }]);\n\n  return RolComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _ngxToastr.ToastrService, _group.GroupService, _roles.RolesService, _header.HeaderService], RolComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 399 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.TodolistComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _todolistTemplate = __webpack_require__(845);\n\nvar _todolistTemplate2 = _interopRequireDefault(_todolistTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _header = __webpack_require__(32);\n\nvar _todolist = __webpack_require__(111);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TodolistComponent = exports.TodolistComponent = (_dec = (0, _core.Component)({\n    selector: 'todolist',\n    template: _todolistTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function TodolistComponent(router, sanitizer, toastr, groupService, todolistService, headerService, confirmationService) {\n        _classCallCheck(this, TodolistComponent);\n\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this._header = headerService;\n        this._sanitizer = sanitizer;\n        this._todolist = todolistService;\n        this._groups = groupService;\n        this.confirm = confirmationService;\n        this.todolist = [];\n        this.currentpage = 1;\n        this.textGroup = \"\";\n        this.currentpage = 1;\n        this.pages = [1];\n        this.limitpage = 20;\n        this.itemcount = 0;\n        this.search = \"\";\n        this.levels = [];\n    }\n\n    _createClass(TodolistComponent, [{\n        key: 'ngAfterViewInit',\n        value: function ngAfterViewInit() {\n            this.reload();\n        }\n    }, {\n        key: 'showModaltk',\n        value: function showModaltk(tkid) {\n            $(\"#myTask\" + tkid).click();\n        }\n    }, {\n        key: 'reload',\n        value: function reload() {\n            var _this = this;\n\n            var filter = {\n                start: this.currentpage * this.limitpage - this.limitpage,\n                end: this.limitpage\n            };\n\n            this._todolist.getListAll(filter).subscribe(function (res) {\n                _this.todolist = res.data.result;\n                _this.itemcount = res.data.count;\n                _this.lastpage = _this.itemcount / _this.limitpage;\n                if (_this.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this.lastpage);\n                    _this.lastpage = countpag;\n                }\n                _this.pages = [];\n                for (var i = 1; i <= _this.lastpage; i++) {\n                    _this.pages.push(i);\n                }\n                if (_this.pages.length == 0) {\n                    _this.pages = [1];\n                }\n            });\n        }\n    }, {\n        key: 'goTo',\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n            } else {\n                this.currentpage = Math.round(this.itemcount / this.limitpage);\n                var mod = this.itemcount % this.limitpage;\n                if (mod > 0 && mod < 5) {\n                    this.currentpage += 1;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: 'setCurPage',\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: 'escapeHtml',\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            var temporal = document.createElement(\"div\");\n            temporal.innerHTML = text;\n            var text = temporal.textContent || temporal.innerText || \"\";\n\n            return text;\n        }\n    }, {\n        key: 'getLevels',\n        value: function getLevels() {\n            var _this2 = this;\n\n            this._todolist.getLevels().subscribe(function (res) {\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var level = _step.value;\n\n                        _this2.levels.push({ label: level.tklv_level, value: level.id_level });\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n            });\n        }\n    }]);\n\n    return TodolistComponent;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _group.GroupService, _todolist.TodolistService, _header.HeaderService, _primeng.ConfirmationService], TodolistComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 400 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, jQuery) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.UsersComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _usersTemplate = __webpack_require__(846);\n\nvar _usersTemplate2 = _interopRequireDefault(_usersTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _roles = __webpack_require__(46);\n\nvar _users = __webpack_require__(20);\n\nvar _header = __webpack_require__(32);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UsersComponent = exports.UsersComponent = (_dec = (0, _core.Component)({\n    selector: \"users\",\n    template: _usersTemplate2.default,\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function UsersComponent(title, router, sanitizer, toastr, groupService, rolesService, usersService, headerService, confirmationService) {\n        _classCallCheck(this, UsersComponent);\n\n        this._title = title;\n        this._router = router;\n        this._sanitizer = sanitizer;\n        this._roles = rolesService;\n        this._groups = groupService;\n        this._users = usersService;\n        this._header = headerService;\n        this.confirm = confirmationService;\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.pages = [1];\n        this.limitpage = 20;\n        this.itemcount = 0;\n        this.groups = [];\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this.lblgroups = [];\n        this.selectedRole = 0;\n        this.modulesTree = [];\n        this.subModules = [];\n        this.roles = [];\n        this.submoduleChk = 0;\n        this.selectedSubmodule = [];\n        this.selectedPermits = [];\n        this.modulesAdd = [];\n        this.users = [];\n        this.user = [];\n        this.userList = [];\n        this.selectedUser = {};\n        this.seluser = [];\n        this.defaultpct = \"\";\n        this.errors = 0;\n        this.group = {};\n        this.validate = false;\n        this.stTitle = \"Squadlinx\";\n        this.textGroup = \"\";\n        this.namegroup = \"ALL\";\n        this.profilepic = {};\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Users ::.\");\n\n        this.isLoading = false;\n        this.filter = false;\n        this.usrs = [\"\"];\n        this.assig = [\"\"];\n        this.projs = [\"\"];\n        this.desc = \"\";\n        this.user_ids = [\"\"];\n        this.date_ini = \"\";\n        this.date_end = \"\";\n        this.prods = [\"\"];\n        this.projs = [\"\"];\n        this.myUser = [];\n        this.rjtask = {};\n\n        this.productsa = [];\n        this.productsb = [];\n    }\n\n    _createClass(UsersComponent, [{\n        key: \"ngOnInit\",\n        value: function ngOnInit() {\n            var _this = this;\n\n            this.getUsers();\n            this.getRoles();\n            this._groups.getGroups().subscribe(function (data) {\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var c = _step.value;\n\n                        _this.groups.push({ label: c.grop_name, value: c.grop_id });\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n            });\n            this.user = {};\n            this.user.user_name = \"\";\n            this.user.user_pwd = \"\";\n\n            this._groups.getGroups().subscribe(function (data) {\n                _this.groupsFilter = data.data;\n            });\n        }\n    }, {\n        key: \"reload\",\n        value: function reload() {\n            var _this2 = this;\n\n            this.isLoading = true;\n\n            this.users = [];\n            if (this.myUser.assigned && this.myUser.assigned.length > 0) {\n                this.assig = this.myUser.assigned;\n            } else {\n                this.assig = [\"\"];\n            }\n            if (this.myUser.creators && this.myUser.creators.length > 0) {\n                this.usrs = this.myUser.creators;\n            } else {\n                this.usrs = [\"\"];\n            }\n            if (this.myUser.description && this.myUser.description != \"\") {\n                this.desc = this.myUser.description;\n            } else {\n                this.desc = \"\";\n            }\n            if (this.myUser.user_ids && this.myUser.user_ids.length > 0) {\n                this.user_ids = this.myUser.user_ids;\n            } else {\n                this.user_ids = [\"\"];\n            }\n            if (this.myUser.date_ini != null && this.myUser.date_ini != \"\" && this.myUser.date_ini != \"undefined\") {\n                if (this.date_ini != \"\" && this.date_ini != null) {\n                    this.date_ini = this.formatDate(this.myUser.date_ini);\n                } else {\n                    this.date_ini = this.myUser.date_ini;\n                }\n            } else {\n                this.date_ini = \"\";\n                this.date_end = \"\";\n            }\n            if (this.myUser.date_end != null && this.myUser.date_end != \"\" && this.myUser.date_end != \"undefined\") {\n                if (this.date_end != \"\" && this.date_end != null) {\n                    this.date_end = this.formatDate(this.myUser.date_end);\n                } else {\n                    this.date_end = this.myUser.date_end;\n                }\n            } else {\n                this.date_end = \"\";\n                this.date_ini = \"\";\n            }\n            if (this.myUser.products && this.myUser.products.length > 0) {\n                this.prods = this.myUser.products;\n            } else {\n                this.prods = [\"\"];\n            }\n            if (this.myUser.projects && this.myUser.projects.length > 0) {\n                this.projs = this.myUser.projects;\n            } else {\n                this.projs = [\"\"];\n            }\n\n            var filter = {\n                start: this.currentpage * this.limitpage - this.limitpage,\n                end: this.limitpage,\n                all: this.search.trim(),\n                group: this.textGroup,\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\",\n                user_ids: this.user_ids,\n                date_ini: this.date_ini,\n                date_end: this.date_end,\n                products: this.prods,\n                projects: this.projs,\n                typeUser: this.nameTypeUser\n            };\n            this._users.getUsersx(filter).subscribe(function (res) {\n                _this2.isLoading = false;\n                _this2.userList = res.data.data;\n                _this2.itemcount = res.data.count;\n                _this2.lastpage = _this2.itemcount / _this2.limitpage;\n                if (_this2.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this2.lastpage);\n                    _this2.lastpage = countpag;\n                }\n                _this2.pages = [];\n                for (var i = 1; i <= _this2.lastpage; i++) {\n                    _this2.pages.push(i);\n                }\n                if (_this2.pages.length == 0) {\n                    _this2.pages = [1];\n                }\n            });\n        }\n    }, {\n        key: \"addUser\",\n        value: function addUser() {\n            this.errors = 0;\n            this.user = {};\n            this.profilepic = {};\n            this.user.urlimg = [];\n            $('#addUser').modal('show');\n        }\n    }, {\n        key: \"getUsers\",\n        value: function getUsers() {\n            var _this3 = this;\n\n            this.users = [];\n            this._users.getUserList().subscribe(function (data) {\n                _this3.user = data.data;\n                var _iteratorNormalCompletion2 = true;\n                var _didIteratorError2 = false;\n                var _iteratorError2 = undefined;\n\n                try {\n                    for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                        var c = _step2.value;\n\n                        if (c.user_name) {\n                            _this3.users.push({\n                                label: c.user_name + \" \" + c.user_lastname,\n                                value: c.user_id\n                            });\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError2 = true;\n                    _iteratorError2 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                            _iterator2.return();\n                        }\n                    } finally {\n                        if (_didIteratorError2) {\n                            throw _iteratorError2;\n                        }\n                    }\n                }\n            });\n            this.reload();\n        }\n    }, {\n        key: \"showModal\",\n        value: function showModal(user) {\n            var _this4 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            var noGroup = this.textGroup === 'noGroup' ? true : false;\n            this._users.geteditUser(user.user_id, noGroup).subscribe(function (res) {\n                if (res.data) {\n                    _this4.user = res.data;\n                }\n            });\n            $(\"#viewUser\").modal(\"show\");\n        }\n    }, {\n        key: \"showModalEditUser\",\n        value: function showModalEditUser(user) {\n            var _this5 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            var noGroup = this.textGroup === 'noGroup' ? true : false;\n            this._users.geteditUser(user.user_id, noGroup).subscribe(function (res) {\n                if (res.data) {\n                    _this5.user = res.data;\n                }\n            });\n            $(\"#EditUser\").modal(\"show\");\n        }\n    }, {\n        key: \"getRoles\",\n        value: function getRoles() {\n            var _this6 = this;\n\n            this.roles = [];\n            this._roles.getRoles().subscribe(function (res) {\n                var _iteratorNormalCompletion3 = true;\n                var _didIteratorError3 = false;\n                var _iteratorError3 = undefined;\n\n                try {\n                    for (var _iterator3 = res.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                        var c = _step3.value;\n\n                        _this6.roles.push({ label: c.roleName, value: c.roleId });\n                    }\n                } catch (err) {\n                    _didIteratorError3 = true;\n                    _iteratorError3 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                            _iterator3.return();\n                        }\n                    } finally {\n                        if (_didIteratorError3) {\n                            throw _iteratorError3;\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"saveUser\",\n        value: function saveUser(user) {\n            var _this7 = this;\n\n            if (this.errors == 1) {\n                this.toastr.warning(\"E-mail Address Incorrect!\");\n                return false;\n            }\n            if (!this.user.user_phone || this.user.user_phone == '') {\n                this.validate = false;\n            } else if (this.user.user_phone && this.user.user_phone.length < 13) {\n                this.toastr.warning(\"Phone Number Incorrect!\");\n                return false;\n            } else if (this.user.user_phone.length >= 13) {\n                this.validate = true;\n            }\n\n            if (!this.user.role_id || !this.user.grop_id || this.user.user_name.trim() == \"\" || this.user.user_lastname.trim() == \"\" || this.user.user_email.trim() == \"\") {\n                this.validate = false;\n            }\n\n            if (this.validate === true) {\n                if (this.profilepic != {}) {\n                    user.user_newpicture = this.profilepic;\n                }\n\n                var usrNew = false;\n                var email_e = user.user_email.toLowerCase();\n                var result_e = email_e.split(\"@\");\n                var user_name = user.user_name.trim() + \".\" + user.user_lastname.trim();\n\n                user.user_alias = this.getUserAlias(user_name);\n                user.user_user = result_e[0].toLowerCase();\n\n                this._users.saveUser(user).subscribe(function (data) {\n                    if (data.data == \"OK\") {\n                        _this7.toastr.success(\"User has been created successfully\");\n                        $(\"#addUser\").modal(\"hide\");\n                    } else {\n                        _this7.toastr.error(data.message, \"Error!\");\n                    }\n                    _this7.reload();\n                });\n            } else {\n                this.toastr.warning(\"Incomplete Fields!\");\n            }\n        }\n    }, {\n        key: \"getUserAlias\",\n        value: function getUserAlias(user) {\n            var split_user = user.toLowerCase().split(\".\");\n            var split_lastname = split_user[1].split(\" \");\n            return split_user[0].charAt(0).toUpperCase() + \".\" + this.firstUppercase(split_lastname[0]);\n        }\n    }, {\n        key: \"firstUppercase\",\n        value: function firstUppercase(str) {\n            return str.charAt(0).toUpperCase() + str.slice(1);\n        }\n    }, {\n        key: \"editUser\",\n        value: function editUser(user) {\n            var _this8 = this;\n\n            if (this.profilepic != {}) {\n                user.user_newpicture = this.profilepic;\n            }\n\n            var user_name = user.user_name.trim() + \".\" + user.user_lastname.trim();\n            user.user_alias = this.getUserAlias(user_name);\n\n            // this._users.editUser(this.user).subscribe(data => {\n            this._users.editUser(user).subscribe(function (data) {\n                if (data.data == \"OK\") {\n                    _this8.toastr.success(\"User updated successfully\");\n                } else {\n                    _this8.toastr.error(data.message, \"Error!\");\n                }\n                _this8.reload();\n            });\n        }\n\n        /*\n        Eliminar usuario\n         */\n\n    }, {\n        key: \"deleteUser\",\n        value: function deleteUser(user) {\n            var _this9 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.confirm.confirm({\n                message: \"Do you want to delete the user(s)?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (user) {\n                        _this9._users.deleteUser(user.user_id).subscribe(function (res) {\n                            if (res.data && res.data != null) {\n                                _this9.toastr.success(res.message);\n                            } else {\n                                _this9.toastr.error(res.message);\n                            }\n                            _this9.reload();\n                        });\n                    } else {\n                        if (_this9.user.length > 0) {\n                            for (var x in _this9.user) {\n                                _this9._users.deleteUser(_this9.user[x]).subscribe(function (data) {});\n                            }\n                            _this9.user = [];\n                            _this9.toastr.success(\"User deleted successfully\");\n                            _this9.reload();\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"addPicture\",\n        value: function addPicture(event) {\n            var files = event.srcElement.files;\n            this.selectedUser.urlimg.push(files[0]);\n        }\n    }, {\n        key: \"validateEmail\",\n        value: function validateEmail(email) {\n            var regexp = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n            return regexp.test(email);\n        }\n    }, {\n        key: \"verifyEmail\",\n        value: function verifyEmail(email) {\n            var _this10 = this;\n\n            // $(\"#result\").text(\"\");\n            this._users.verifyEmail(email).subscribe(function (data) {\n                if (data.data == true) {\n                    _this10.errors = 0;\n                    return true;\n                } else {\n                    _this10.errors = 1;\n                    return false;\n                }\n            });\n        }\n    }, {\n        key: \"soloLetras\",\n        value: function soloLetras(e) {\n            var key = e.keyCode || e.which;\n            var teclado = String.fromCharCode(key).toLowerCase();\n            var letras = \"áéíóúabcdefghijklmnñopqrstuvwxyz \";\n            var especiales = \"13-37-38-46-164\";\n            var teclado_especial = false;\n            for (var i in especiales) {\n                if (key == especiales[i]) {\n                    var teclado_especial = true;\n                    break;\n                }\n            }\n            if (letras.indexOf(teclado) == -1 && !teclado_especial) {\n                return false;\n            }\n        }\n    }, {\n        key: \"setOrder\",\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n            this.searchUser();\n        }\n    }, {\n        key: \"goTo\",\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n            } else {\n                this.currentpage = Math.round(this.itemcount / this.limitpage);\n                var mod = this.itemcount % this.limitpage;\n                if (mod > 0 && mod < 5) {\n                    this.currentpage += 1;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"setCurPage\",\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"changedExtraHandler\",\n        value: function changedExtraHandler(event) {\n            var _this11 = this;\n\n            if (event.keyCode == 13) {\n                this.isLoading = true;\n                this.currentpage = 1;\n\n                var filter = {\n                    start: 0,\n                    end: this.limitpage,\n                    all: this.search.trim(),\n                    group: this.textGroup,\n                    orderby: this.posOrder,\n                    orderdesc: this.orderDesc ? \"desc\" : \"\"\n                };\n                this._users.getUsersx(filter).subscribe(function (res) {\n                    _this11.isLoading = false;\n                    _this11.userList = res.data.data;\n                    _this11.itemcount = res.data.count;\n                    _this11.lastpage = _this11.itemcount / _this11.limitpage;\n                    if (_this11.lastpage % 1 != 0) {\n                        var countpag = 1 + parseInt(_this11.lastpage);\n                        _this11.lastpage = countpag;\n                    }\n                    _this11.pages = [];\n                    for (var i = 1; i <= _this11.lastpage; i++) {\n                        _this11.pages.push(i);\n                    }\n                    if (_this11.pages.length == 0) {\n                        _this11.pages = [1];\n                    }\n                });\n                this.cont = 0;\n            }\n        }\n    }, {\n        key: \"filterText\",\n        value: function filterText() {\n            var _this12 = this;\n\n            this.isLoading = true;\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                group: this.textGroup,\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._users.getUsersx(filter).subscribe(function (res) {\n\n                _this12.isLoading = false;\n                _this12.userList = res.data.data;\n                _this12.itemcount = res.data.count;\n                _this12.lastpage = _this12.itemcount / _this12.limitpage;\n                if (_this12.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this12.lastpage);\n                    _this12.lastpage = countpag;\n                }\n                _this12.pages = [];\n                for (var i = 1; i <= _this12.lastpage; i++) {\n                    _this12.pages.push(i);\n                }\n                if (_this12.pages.length == 0) {\n                    _this12.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }, {\n        key: \"refresh\",\n        value: function refresh() {\n            var _this13 = this;\n\n            this.search = \"\";\n            this.posOrder = \"\";\n            this.orderDesc = false;\n            this.currentpage = 1;\n            this.pages = [1];\n            this.limitpage = 20;\n            this.itemcount = 0;\n\n            this.isLoading = true;\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                group: this.textGroup,\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._users.getUsersx(filter).subscribe(function (res) {\n                _this13.isLoading = false;\n                _this13.userList = res.data.data;\n                _this13.itemcount = res.data.count;\n                _this13.lastpage = _this13.itemcount / _this13.limitpage;\n                if (_this13.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this13.lastpage);\n                    _this13.lastpage = countpag;\n                }\n                _this13.pages = [];\n                for (var i = 1; i <= _this13.lastpage; i++) {\n                    _this13.pages.push(i);\n                }\n                if (_this13.pages.length == 0) {\n                    _this13.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }, {\n        key: \"setGroupList\",\n        value: function setGroupList(state, name) {\n            this.namegroup = name;\n            this.textGroup = state;\n            this.currentpage = 1;\n            this.reload();\n        }\n    }, {\n        key: \"onBasicUpload\",\n        value: function onBasicUpload(event, type) {\n            if (type == \"profile\") {\n                this.profilepic = event.target.files[0];\n            }\n\n            if (event.target.files && event.target.files[0]) {\n                var files = event.target.files;\n                if (files[0].size / 1024 / 1024 > 4) {\n                    this.toastr.error(\"File size exceeds 4 MB\");\n                } else {\n                    var reader = new FileReader();\n                    reader.onload = function (e) {\n                        if (type == \"profile\") {\n                            $(\"#profile-img\").attr(\"src\", e.target.result);\n                        }\n                    };\n                    reader.readAsDataURL(event.target.files[0]);\n                }\n            }\n        }\n    }, {\n        key: \"showChangePicture\",\n        value: function showChangePicture(type) {\n            if (type == \"profile\") {\n                $(\"#change-profile\").toggle();\n            }\n        }\n    }, {\n        key: \"onBasicUploadUser\",\n        value: function onBasicUploadUser(event, type) {\n            if (type == \"profile\") {\n                this.profilepic = event.target.files[0];\n            }\n\n            if (event.target.files && event.target.files[0]) {\n                var files = event.target.files;\n                if (files[0].size / 1024 / 1024 > 4) {\n                    this.toastr.error(\"File size exceeds 4 MB\");\n                } else {\n                    var reader = new FileReader();\n                    reader.onload = function (e) {\n                        if (type == \"profile\") {\n                            $(\"#profile-img-user\").attr(\"src\", e.target.result);\n                        }\n                    };\n                    reader.readAsDataURL(event.target.files[0]);\n                }\n            }\n        }\n    }, {\n        key: \"showChangePictureUser\",\n        value: function showChangePictureUser(type) {\n            if (type == \"profile\") {\n                $(\"#change-profile-user\").toggle();\n            }\n        }\n    }, {\n        key: \"closeFilter\",\n        value: function closeFilter() {\n            this.myUser = [];\n            this.myUsercopy = [];\n            this.search = \"\";\n            this.filter = false;\n            this.myUser.date_ini = \"\";\n            this.myUser.date_end = \"\";\n            this.usrs = [\"\"];\n            this.desc = \"\";\n            this.date_ini = \"\";\n            this.date_end = \"\";\n            this.assig = [\"\"];\n            this.projs = [\"\"];\n            this.user_ids = [\"\"];\n            this.prods = [\"\"];\n            this.projs = [\"\"];\n            this.reload();\n        }\n    }, {\n        key: \"searchUser\",\n        value: function searchUser() {\n            this.myUsercopy = jQuery.extend(true, {}, this.myUser);\n            var copy = [];\n            for (var x in this.myUser.assigned) {\n                copy.push(this.myUser.assigned[x].user_id);\n            }\n            this.myUser.assigned = copy;\n            var copyc = [];\n            for (var _x in this.myUser.creators) {\n                copyc.push(this.myUser.creators[_x].user_id);\n            }\n            this.myUser.creators = copyc;\n            var copyp = [];\n            for (var _x2 in this.myUser.projects) {\n                copyp.push(this.myUser.projects[_x2].proj_id);\n            }\n            this.myUser.projects = copyp;\n            var copypd = [];\n            for (var _x3 in this.myUser.products) {\n                copypd.push(this.myUser.products[_x3].prod_id);\n            }\n            this.myUser.products = copypd;\n\n            if (this.myUser.date_ini != null && this.myUser.date_ini != \"\" && this.myUser.date_end != null && this.myUser.date_end != \"\") {\n\n                this.myUser.date_ini = this.formatDate(this.myUser.date_ini);\n                this.myUser.date_end = this.formatDate(this.myUser.date_end);\n            } else {\n                this.myUser.date_ini = \"\";\n                this.myUser.date_end = \"\";\n            }\n            this.reload();\n            this.myUser = this.myUsercopy;\n        }\n    }, {\n        key: \"validateTel\",\n        value: function validateTel(e) {\n\n            var tecla = document.all ? e.keyCode : e.which;\n            var patron = /([A-Z0-9\\s\\\\]+)/i;\n            var tecla_final = String.fromCharCode(tecla).toLowerCase();\n            return patron.test(tecla_final);\n        }\n    }, {\n        key: \"validateUser\",\n        value: function validateUser() {\n            return !this.user.role_id || !this.user.grop_id || this.user.user_name.trim() == \"\" || this.user.user_lastname.trim() == \"\" || this.user.user_email.trim() == \"\" || !this.user.user_phone || this.user.user_phone.trim() == \"\";\n        }\n    }]);\n\n    return UsersComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _group.GroupService, _roles.RolesService, _users.UsersService, _header.HeaderService, _primeng.ConfirmationService], UsersComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4), __webpack_require__(4)))\n\n/***/ }),\n/* 401 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.UsersHistoryComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _usershistoryTemplate = __webpack_require__(847);\n\nvar _usershistoryTemplate2 = _interopRequireDefault(_usershistoryTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _users = __webpack_require__(20);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UsersHistoryComponent = exports.UsersHistoryComponent = (_dec = (0, _core.Component)({\n    selector: \"usershistory\",\n    template: _usershistoryTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function UsersHistoryComponent(title, router, sanitizer, toastr, groupService, usersService, arouter, confirmationService) {\n        _classCallCheck(this, UsersHistoryComponent);\n\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._users = usersService;\n        this._groups = groupService;\n        this._confirm = confirmationService;\n        this._aroute = arouter;\n\n        this.stTitle = \"Squadlinx\";\n        this.seluser = [];\n        this.groups = [];\n        this.userHistories = [];\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.user_id = \"\";\n        this.user = {};\n        this.userHistory = {};\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.itemcount = 0;\n\n        this.reload();\n    }\n\n    _createClass(UsersHistoryComponent, [{\n        key: \"ngOnInit\",\n        value: function ngOnInit() {\n            var _this = this;\n\n            this._groups.getGroups().subscribe(function (data) {\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var c = _step.value;\n\n                        _this.groups.push({ label: c.grop_name, value: c.grop_id });\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"selectAll\",\n        value: function selectAll() {\n            if (this.seluser.length > 0) {\n                this.seluser = [];\n            } else {\n                this.seluser = [];\n                for (var u in this.userHistories) {\n                    this.seluser.push(this.userHistories[u].value);\n                }\n            }\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            var temporal = document.createElement(\"div\");\n            temporal.innerHTML = text;\n            var text = temporal.textContent || temporal.innerText || \"\";\n\n            return text;\n        }\n    }, {\n        key: \"reload\",\n        value: function reload() {\n            var _this2 = this;\n\n            this.isLoading = true;\n            this.user = {};\n            this.userHistories = [];\n\n            this._aroute.params.forEach(function (params) {\n                _this2.user_id = params.iduser;\n                _this2._users.getUserInfo(params.iduser).subscribe(function (res) {\n                    _this2.user = res.data;\n                    if (_this2.user == null) {\n                        _this2._router.navigate(['/403']);\n                    }\n                    _this2._title.setTitle(\".:: \" + localStorage.getItem(\"title\") + \" : \" + _this2.user.user_alias + \" ::.\");\n                });\n\n                _this2._users.getUserHistory(params.iduser).subscribe(function (res) {\n                    _this2.isLoading = false;\n                    _this2.userHistories = res.data;\n                });\n            });\n        }\n    }, {\n        key: \"showModal\",\n        value: function showModal(userHistory) {\n            this.userHistory = {};\n            this.userHistory = userHistory;\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            $(\"#mdDetail\").modal(\"show\");\n        }\n    }, {\n        key: \"showAddModal\",\n        value: function showAddModal() {\n            this.userHistory = {};\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        }\n    }, {\n        key: \"save\",\n        value: function save() {\n            var _this3 = this;\n\n            this.userHistory.user_id = this.user_id;\n            this.userHistory.date_init = this.formatDate(this.userHistory.date_init);\n            this.userHistory.date_end = this.formatDate(this.userHistory.date_end);\n            this._users.saveUserHistory(this.userHistory).subscribe(function (res) {\n                if (res.data) {\n                    _this3.toastr.success(res.message, \"History Group User saved successfully\");\n                } else {\n                    _this3.toastr.warning(res.message, \"Bad news!\");\n                }\n                $(\"#mdAdd\").modal(\"hide\");\n                _this3.reload();\n            });\n        }\n    }, {\n        key: \"showEditModal\",\n        value: function showEditModal(userHistory) {\n            this.userHistory = userHistory;\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            $(\"#mdEdit\").modal(\"show\");\n        }\n    }, {\n        key: \"update\",\n        value: function update() {\n            var _this4 = this;\n\n            this.userHistory.date_init = this.formatDate(this.userHistory.date_init);\n            this.userHistory.date_end = this.formatDate(this.userHistory.date_end);\n            this._users.updateUserHistory(this.userHistory).subscribe(function (res) {\n                if (res.data) {\n                    _this4.toastr.success(res.message, \"User History Group updated successfully\");\n                } else {\n                    _this4.toastr.warning(res.message, \"Bad news!\");\n                }\n                $(\"#mdEdit\").modal(\"hide\");\n                _this4.reload();\n            });\n        }\n    }, {\n        key: \"delete\",\n        value: function _delete(grhi_id) {\n            var _this5 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n\n            this._confirm.confirm({\n                message: \"Do you want to proceed?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (grhi_id) {\n                        _this5._users.deleteUserHistory(grhi_id).subscribe(function (res) {\n                            if (res.data == false) {\n                                _this5.toastr.error(\"The Unit have data base references, can't be deleted\");\n                                _this5.reload();\n                            } else {\n                                _this5.reload();\n                                _this5.toastr.success(\"Unit deleted successfully\");\n                            }\n                        });\n                    } else {\n                        if (_this5.seluser.length > 0) {\n                            for (var x in _this5.seluser) {\n                                _this5._users.deleteUserHistory(_this5.seluser[x]).subscribe(function (res) {\n                                    if (res.data == false) {\n                                        _this5.toastr.error(\"One or more Unit have data base references, can't be deleted\");\n                                        _this5.reload();\n                                    } else {\n                                        _this5.seluser = [];\n                                        _this5.toastr.success(\"User History deleted successfully\");\n                                        _this5.reload();\n                                    }\n                                });\n                            }\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"goTo\",\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n            } else {\n                this.currentpage = Math.round(this.itemcount / this.limitpage);\n                var mod = this.itemcount % this.limitpage;\n                if (mod > 0 && mod < 5) {\n                    this.currentpage += 1;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"setCurPage\",\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"setOrder\",\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n            this.reload();\n        }\n    }, {\n        key: \"lpad\",\n        value: function lpad(n, width, z) {\n            z = z || \"0\";\n            n = n || \"0\";\n            n = n + \"\";\n            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n        }\n    }, {\n        key: \"formatDate\",\n        value: function formatDate(date) {\n            if (date && date !== \"\") {\n                date = new Date(date);\n                var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n                var monthIndex = date.getMonth() + 1 < 10 ? \"0\" + (date.getMonth() + 1) : date.getMonth() + 1;\n                var year = date.getFullYear();\n                return year + '-' + monthIndex + '-' + day;\n            } else {\n                return '';\n            }\n        }\n    }, {\n        key: \"validateSave\",\n        value: function validateSave() {\n            return !this.userHistory.grop_id || this.userHistory.grop_id == \"\" || this.userHistory.grop_id == \"undefined\" || !this.userHistory.date_init || this.userHistory.date_init == \"\" || this.userHistory.date_init == \"undefined\";\n        }\n    }, {\n        key: \"changedExtraHandler\",\n        value: function changedExtraHandler(event) {\n            if (event.keyCode == 13) {\n                this.reload();\n            }\n        }\n    }, {\n        key: \"filterText\",\n        value: function filterText() {\n            this.reload();\n        }\n    }]);\n\n    return UsersHistoryComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _group.GroupService, _users.UsersService, _router.ActivatedRoute, _primeng.ConfirmationService], UsersHistoryComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 402 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ParameterListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _parameter = __webpack_require__(112);\n\nvar _parameterlistTemplate = __webpack_require__(848);\n\nvar _parameterlistTemplate2 = _interopRequireDefault(_parameterlistTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ParameterListComponent = exports.ParameterListComponent = (_dec = (0, _core.Component)({\n  selector: \"parameterlist\",\n  template: _parameterlistTemplate2.default\n}), _dec(_class = function () {\n  function ParameterListComponent(title, router, sanitizer, arouter, toastr, paramService) {\n    _classCallCheck(this, ParameterListComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._aroute = arouter;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._params = paramService;\n    this.posState = \"clas_id\";\n    this.textState = [\"1\"];\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.classes = [];\n    this.parameters = [];\n    this.clase = {};\n    this.classeslbl = [];\n    this.parameter = {};\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Parameters ::.\");\n  }\n\n  _createClass(ParameterListComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      this.load();\n    }\n  }, {\n    key: \"load\",\n    value: function load() {\n      var _this = this;\n\n      this._aroute.params.forEach(function (params) {\n        _this._params.getParametersClass(params.idclass).subscribe(function (res) {\n          _this.parameters = res.data;\n          _this.clase = _this.parameters[0];\n        });\n      });\n      this._params.getClasses().subscribe(function (res) {\n        _this.classes = res.data;\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.classeslbl.push({ label: c.clas_name, value: c.clas_id });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"mdAddParam\",\n    value: function mdAddParam() {\n      this.parameter = {};\n      $(\"#mdAddParam\").modal(\"show\");\n    }\n  }, {\n    key: \"mdEditParam\",\n    value: function mdEditParam(obj_Class) {\n      this.parameter = obj_Class;\n      $(\"#mdEditParam\").modal(\"show\");\n    }\n  }, {\n    key: \"mdShowParam\",\n    value: function mdShowParam(obj_Class) {\n      $(\"#mdShowParam\").modal(\"show\");\n    }\n  }, {\n    key: \"saveParameter\",\n    value: function saveParameter(idclas) {\n      var _this2 = this;\n\n      this.parameter.clas_id = idclas;\n      this._params.putParameter(this.parameter).subscribe(function (res) {\n        if (res.data != \"OK\") {\n          _this2.toastr.warning(res.message, \"Attention\");\n        } else {\n          _this2.toastr.success(res.message, \"Parameter save successfully\");\n        }\n        _this2.load();\n      });\n    }\n  }, {\n    key: \"delParameter\",\n    value: function delParameter(paramid) {\n      var _this3 = this;\n\n      this._params.delParameter(paramid).subscribe(function (res) {\n        if (res.data != \"OK\") {\n          _this3.toastr.warning(res.message, \"Attention\");\n        } else {\n          _this3.toastr.success(res.message, \"Parameter deleted successfully\");\n        }\n        _this3.load();\n      });\n    }\n  }, {\n    key: \"updateParameter\",\n    value: function updateParameter(idclas, idparam) {\n      var _this4 = this;\n\n      this.parameter.clas_id = idclas;\n      this.parameter.para_id = idparam;\n      this._params.updateParameter(this.parameter).subscribe(function (data) {\n        //console.log(data);\n        if (data.data === \"\" || data.data === \"0\") {\n          _this4.toastr.warning(data.message, \"Error saving Parameter!\");\n        } else {\n          _this4.toastr.success(data.message, \"Parameter updated successfully\");\n        }\n        _this4.load();\n      });\n    }\n  }]);\n\n  return ParameterListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _ngxToastr.ToastrService, _parameter.ParameterService], ParameterListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 403 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ParametersComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _parameter = __webpack_require__(112);\n\nvar _parametersTemplate = __webpack_require__(849);\n\nvar _parametersTemplate2 = _interopRequireDefault(_parametersTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ParametersComponent = exports.ParametersComponent = (_dec = (0, _core.Component)({\n  selector: \"parameters\",\n  template: _parametersTemplate2.default\n}), _dec(_class = function () {\n  function ParametersComponent(title, router, sanitizer, toastr, paramService, confirmationService) {\n    _classCallCheck(this, ParametersComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this.toastr = toastr;\n    this.confirm = confirmationService;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._params = paramService;\n    this.posState = \"clas_id\";\n    this.textState = [\"1\"];\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.classes = [];\n    this.parameters = [];\n    this.classeslbl = [];\n    this.parameter = {};\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Classes and Parameters ::.\");\n  }\n\n  _createClass(ParametersComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      this.load();\n    }\n  }, {\n    key: \"load\",\n    value: function load() {\n      var _this = this;\n\n      this._params.getParameters().subscribe(function (res) {\n        _this.parameters = res.data;\n      });\n      this._params.getClasses().subscribe(function (res) {\n        _this.classes = res.data;\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.classeslbl.push({ label: c.clas_name, value: c.clas_id });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"saveParamter\",\n    value: function saveParamter() {\n      var _this2 = this;\n\n      this._params.putParameter(this.parameter).subscribe(function (res) {\n        if (res.data != \"OK\") {\n          _this2.toastr.warning(res.message, \"Attention\");\n        } else {\n          _this2.toastr.success(res.message, \"Parameter save successfully\");\n        }\n        _this2.load();\n      });\n    }\n  }, {\n    key: \"delParamter\",\n    value: function delParamter(paraid) {\n      var _this3 = this;\n\n      this._params.delParameter(paraid).subscribe(function (res) {\n        if (res.data != \"OK\") {\n          _this3.toastr.warning(res.message, \"Attention\");\n        } else {\n          _this3.toastr.success(res.message, \"Parameter save successfully\");\n        }\n        _this3.load();\n      });\n    }\n  }, {\n    key: \"showClass\",\n    value: function showClass(obj_Class) {\n      this.parameter = obj_Class;\n      $(\"#mdClass\").modal(\"show\");\n    }\n  }, {\n    key: \"editClass\",\n    value: function editClass(obj_Class) {\n      this.parameter = obj_Class;\n      $(\"#mdEditClass\").modal(\"show\");\n    }\n  }, {\n    key: \"mdAddClass\",\n    value: function mdAddClass() {\n      this.parameter = {};\n      $(\"#mdAddClass\").modal(\"show\");\n    }\n  }, {\n    key: \"updateClass\",\n    value: function updateClass() {\n      var _this4 = this;\n\n      this.parameter.clas_description = this.parameter.clas_description.split(\"\\t\").join(\"\");\n      this.parameter.clas_description = this.parameter.clas_description.split(\"\\n\").join(\"\");\n      this.parameter.clas_description = this.parameter.clas_description.split(\"\\r\").join(\"\");\n      this._params.updateClass(this.parameter).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this4.toastr.warning(data.message, \"Error saving Class!\");\n        } else {\n          _this4.toastr.success(data.message, \"Class updated successfully\");\n        }\n        _this4.load();\n      });\n    }\n  }, {\n    key: \"delClass\",\n    value: function delClass(id) {\n      var _this5 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to proceed?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (id) {\n            _this5._params.delClass(id).subscribe(function (res) {\n              if (res.data == \"OK\") {\n                _this5.toastr.success(\"Class deleted successfully\");\n                _this5.load();\n              } else {\n                _this5.toastr.error(\"The Class has one or more associated parameters! \");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"saveClass\",\n    value: function saveClass() {\n      var _this6 = this;\n\n      this._params.putClass(this.parameter).subscribe(function (res) {\n        if (res.data != \"OK\") {\n          _this6.toastr.warning(res.message, \"Error saving class\");\n        } else {\n          _this6.toastr.success(res.message, \"Class saved successfully\");\n        }\n        _this6.load();\n      });\n    }\n  }]);\n\n  return ParametersComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _parameter.ParameterService, _primeng.ConfirmationService], ParametersComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 404 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.CategoriesComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _categoriesTemplate = __webpack_require__(850);\n\nvar _categoriesTemplate2 = _interopRequireDefault(_categoriesTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _categories = __webpack_require__(47);\n\nvar _type = __webpack_require__(41);\n\nvar _users = __webpack_require__(20);\n\nvar _product = __webpack_require__(22);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CategoriesComponent = exports.CategoriesComponent = (_dec = (0, _core.Component)({\n    selector: \"categories\",\n    template: _categoriesTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function CategoriesComponent(title, router, sanitizer, groupService, toastr, usersService, typeService, categoriesService, arouter, productService, confirmationService) {\n        var _this = this;\n\n        _classCallCheck(this, CategoriesComponent);\n\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._groups = groupService;\n        this._categories = categoriesService;\n        this._products = productService;\n        this.confirm = confirmationService;\n        this.textState = \"\";\n        this.posState = \"status\";\n        this.textType = \"\";\n        this.posGroup = \"grop_id\";\n        this.search = \"\";\n        this.posOrder = \"\";\n        this._types = typeService;\n        this._users = usersService;\n        this.products = [];\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this._aroute = arouter;\n        this.limitpage = 20;\n        this.itemcount = 0;\n        this.groups = [];\n        this.plmt = [];\n        this.stscat = [];\n        this.states = [];\n        this.lblgroups = [];\n        this.selcat = [];\n        this.userlist = [];\n        this.categories = [];\n        this.categorie = {\n            fields: [],\n            users: []\n        };\n        this.categoryMenu = [];\n        this.category = { approvalusers: [], fields: [], cate_appr: 0 };\n        this.emails = [];\n        this.st_deleted = 0;\n        //this.statuslist = [];\n        this.tycat = [];\n        this.tycate = [];\n        this.category.categoryNameNew = \"\";\n        // this.statuslist =[];\n        this.count = 0;\n        this.var = 0;\n        //this.categories.campos = 2;\n        this.campo = \"\";\n        // this.category.fields = [];\n        this.stTitle = \"Squadlinx\";\n        this.prodname = \"ALL\";\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Categories ::.\");\n\n        //Category status\n        this._categories.getCategoryStatus().subscribe(function (res) {\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var c = _step.value;\n\n                    _this.stscat.push({ label: c.para_name, value: c.para_id });\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n        });\n        this._types.getTypes().subscribe(function (res) {\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n                for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                    var c = _step2.value;\n\n                    _this.tycate.push({ label: c.type_name, value: c.type_id });\n                }\n            } catch (err) {\n                _didIteratorError2 = true;\n                _iteratorError2 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                        _iterator2.return();\n                    }\n                } finally {\n                    if (_didIteratorError2) {\n                        throw _iteratorError2;\n                    }\n                }\n            }\n        });\n        this._groups.getGroups().subscribe(function (data) {\n            _this.groups = data.data;\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n                for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                    var c = _step3.value;\n\n                    _this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n                }\n            } catch (err) {\n                _didIteratorError3 = true;\n                _iteratorError3 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                        _iterator3.return();\n                    }\n                } finally {\n                    if (_didIteratorError3) {\n                        throw _iteratorError3;\n                    }\n                }\n            }\n        });\n\n        this.states = [];\n        this._categories.getStates().subscribe(function (data) {\n            _this.states = data.data;\n        });\n\n        this._products.getProducts().subscribe(function (data) {\n            _this.products = [];\n            var _iteratorNormalCompletion4 = true;\n            var _didIteratorError4 = false;\n            var _iteratorError4 = undefined;\n\n            try {\n                for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                    var c = _step4.value;\n\n                    _this.products.push({ label: c.prod_name, value: c.prod_id });\n                }\n            } catch (err) {\n                _didIteratorError4 = true;\n                _iteratorError4 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                        _iterator4.return();\n                    }\n                } finally {\n                    if (_didIteratorError4) {\n                        throw _iteratorError4;\n                    }\n                }\n            }\n        });\n        this.prod_id = \"\";\n        this.usersCRM = [];\n        this.usersCRMa = [];\n        this._users.getCRMUsers().subscribe(function (data) {\n            _this.usersCRM = data.data;\n            _this.usersCRMa = data.data;\n        });\n        this.reload();\n    }\n\n    _createClass(CategoriesComponent, [{\n        key: \"ngOnInit\",\n        value: function ngOnInit() {}\n    }, {\n        key: \"reload\",\n        value: function reload() {\n            var _this2 = this;\n\n            this.isLoading = true;\n            this.categories = [];\n            var filter = {\n                start: this.currentpage * this.limitpage - this.limitpage,\n                end: this.limitpage,\n                all: this.search.trim(),\n                state: this.textState,\n                type: this.textType,\n                prod_id: this.prod_id,\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._categories.getCategoryList(filter).subscribe(function (res) {\n                _this2.isLoading = false;\n                _this2.categories = res.data.data;\n                _this2.itemcount = res.data.count;\n                _this2.lastpage = _this2.itemcount / _this2.limitpage;\n                if (_this2.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this2.lastpage);\n                    _this2.lastpage = countpag;\n                }\n                _this2.pages = [];\n                for (var i = 1; i <= _this2.lastpage; i++) {\n                    _this2.pages.push(i);\n                }\n                if (_this2.pages.length == 0) {\n                    _this2.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }, {\n        key: \"addCategory\",\n        value: function addCategory() {\n            // this.categories.campos = 2;\n            // this.var=0;\n            this.count = 0;\n            this.category.number = 0;\n            // this.campo = \"hola\";\n            this.category.categoryNameNew = \"\";\n            this.category = { approvalusers: [], fields: [] };\n            this.category.approvalusers = [];\n            this.category.fields = [];\n            this.selectedModules = [];\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            $(\"#AddCategory\").modal(\"show\");\n        }\n    }, {\n        key: \"createForm\",\n        value: function createForm(c) {\n            // console.log(this.categories.campos);\n            // for (var i = 0; i <= this.categories.campos; i++) {\n            //   this.categories.fields.push(this.campo);\n            // }\n\n            //this.category.fields.push('');\n\n            c--;\n            this.category.fields = [];\n            for (var i = 0; i <= c; i++) {\n                var campo = {\n                    campo_value: \"\",\n                    campo_mandatory: false\n                };\n                this.category.fields.push(campo);\n            }\n            //this.category.number =0;\n            //this.category.fields.push('');\n        }\n    }, {\n        key: \"actFields\",\n        value: function actFields(a) {\n            this.category.fields.push(a);\n        }\n    }, {\n        key: \"filterMultiple\",\n        value: function filterMultiple(event) {\n            var query = event.query;\n            this.usersCRM = this.filter(query, this.usersCRMa);\n        }\n    }, {\n        key: \"filterMultipleEmails\",\n        value: function filterMultipleEmails(event) {\n            var query = event.query;\n            this.listmails = this.filter(query, this.listmailsa);\n        }\n    }, {\n        key: \"filter\",\n        value: function filter(query, countries) {\n            var filtered = [];\n            for (var i = 0; i < countries.length; i++) {\n                var country = countries[i];\n                if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n                    filtered.push(country);\n                }\n            }\n            return filtered;\n        }\n    }, {\n        key: \"showModal\",\n        value: function showModal(cate) {\n            var _this3 = this;\n\n            cate.approvalusers = [];\n            cate.fields = [];\n            this.category = cate;\n            this._categories.getUsersCategory(cate.cate_id).subscribe(function (res) {\n                var _iteratorNormalCompletion5 = true;\n                var _didIteratorError5 = false;\n                var _iteratorError5 = undefined;\n\n                try {\n                    for (var _iterator5 = res.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                        var c = _step5.value;\n\n                        _this3.category.approvalusers.push(c);\n                    }\n                } catch (err) {\n                    _didIteratorError5 = true;\n                    _iteratorError5 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                            _iterator5.return();\n                        }\n                    } finally {\n                        if (_didIteratorError5) {\n                            throw _iteratorError5;\n                        }\n                    }\n                }\n            });\n            this._categories.getFieldsCategory(cate.cate_id).subscribe(function (res) {\n                var _iteratorNormalCompletion6 = true;\n                var _didIteratorError6 = false;\n                var _iteratorError6 = undefined;\n\n                try {\n                    for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                        var c = _step6.value;\n\n                        _this3.category.fields.push(c);\n                    }\n                } catch (err) {\n                    _didIteratorError6 = true;\n                    _iteratorError6 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                            _iterator6.return();\n                        }\n                    } finally {\n                        if (_didIteratorError6) {\n                            throw _iteratorError6;\n                        }\n                    }\n                }\n            });\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            $(\"#mdCategory\").modal(\"show\");\n        }\n    }, {\n        key: \"showModalEditCategory\",\n        value: function showModalEditCategory(cate) {\n            var _this4 = this;\n\n            this._categories.getCategorie(cate.cate_id).subscribe(function (res) {\n                if (res.data) {\n                    _this4.categorie = res.data;\n                }\n            });\n            $(\"#EditCategory\").modal(\"show\");\n        }\n    }, {\n        key: \"updateCategory\",\n        value: function updateCategory() {\n            var _this5 = this;\n\n            var category = {};\n\n            category.cate_id = this.categorie.cate_id;\n            category.cate_desc = this.categorie.cate_desc;\n            category.cate_appr = this.categorie.cate_appr;\n            category.para_status = this.categorie.para_status;\n            category.para_name = this.categorie.para_name;\n            category.para_type = this.categorie.para_type;\n            category.type_name = this.categorie.type_name;\n            category.prod_id = this.categorie.prod_id;\n\n            var users = [];\n            for (var i in this.categorie.users) {\n                if (this.categorie.users[i].user_id) {\n                    users.push(this.categorie.users[i].user_id);\n                }\n            }\n            category.users = users;\n\n            var fields_empty = false;\n            var campos = [];\n            for (var j in this.categorie.fields) {\n                if (this.categorie.fields[j].form_field && this.categorie.fields[j].form_field.trim() != \"\") {\n                    campos.push(this.categorie.fields[j].form_id + '|*|' + this.categorie.fields[j].form_field + '|*|' + this.categorie.fields[j].form_mandatory);\n                } else {\n                    fields_empty = true;\n                }\n            }\n\n            if (fields_empty == false) {\n                category.fields = campos;\n\n                this._categories.updateCategory(category).subscribe(function (res) {\n                    if (res.data && res.data != undefined && res.data == true) {\n                        _this5.toastr.success(res.message);\n                        $(\"#EditCategory\").modal(\"hide\");\n                        _this5.reload();\n                    } else {\n                        _this5.toastr.warning(res.message, \"Error\");\n                    }\n                });\n            } else {\n                this.toastr.warning(\"Empty form fields\");\n            }\n        }\n    }, {\n        key: \"deleteFieldForm\",\n        value: function deleteFieldForm(index) {\n            this.categorie.fields.splice(index, 1);\n        }\n    }, {\n        key: \"addFieldForm\",\n        value: function addFieldForm() {\n            this.categorie.fields.push({ form_id: 0, form_field: \"\" });\n        }\n    }, {\n        key: \"saveCategory\",\n        value: function saveCategory() {\n            var _this6 = this;\n\n            var usarr = [];\n            var fields_empty = false;\n            for (var x in this.category.approvalusers) {\n                if (this.category.approvalusers[x].user_id) {\n                    usarr.push(this.category.approvalusers[x].user_id);\n                }\n            }\n            this.category.users = usarr;\n            var campos = [];\n            for (var y in this.category.fields) {\n                if (this.category.fields[y].campo_value && this.category.fields[y].campo_value.trim() != \"\") {\n                    campos.push(this.category.fields[y].campo_value + '|*|' + this.category.fields[y].campo_mandatory);\n                    fields_empty = false;\n                } else {\n                    fields_empty = true;\n                }\n            }\n            if (fields_empty == false) {\n                this.category.fields = campos;\n                this._categories.putCategory(this.category).subscribe(function (data) {\n                    if (data.data === \"\" || data.data === \"0\") {\n                        _this6.toastr.warning(data.message, \"Error\");\n                    } else {\n                        _this6.toastr.success(data.message, \"Category Saved successfully\");\n                    }\n                    $(\"#AddCategory\").modal(\"hide\");\n                    _this6.reload();\n                });\n            } else {\n                this.toastr.warning(\"Empty form fields\");\n            }\n        }\n    }, {\n        key: \"deleteCategory\",\n        value: function deleteCategory(cat) {\n            var _this7 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.confirm.confirm({\n                message: \"Do you want to delete the categorie(s)?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (cat) {\n                        _this7._categories.deleteCategory(cat).subscribe(function (data) {\n                            if (data.data != null) {\n                                _this7.toastr.success(data.message, \"Categorie deleted successfully\");\n                                _this7.reload();\n                            } else {\n                                _this7.toastr.warning(\"\", data.message);\n                            }\n                        });\n                    } else {\n                        if (_this7.selcat.length > 0) {\n                            for (var x in _this7.selcat) {\n                                _this7._categories.deleteCategory(_this7.selcat[x]).subscribe(function (data) {});\n                            }\n                            _this7.selcat = [];\n                            _this7.toastr.success(\"Categories deleted successfully\");\n                            _this7.reload();\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"innactiveCategory\",\n        value: function innactiveCategory(cat) {\n            var _this8 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.confirm.confirm({\n                message: \"Do you want to innactive the categorie(s)?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (cat) {\n                        _this8._categories.innactiveCategory(cat).subscribe(function (data) {\n                            if (data.data != null) {\n                                _this8.toastr.success(data.message, \"Categorie innactived successfully\");\n                                _this8.reload();\n                            } else {\n                                _this8.toastr.warning(\"\", data.message);\n                            }\n                        });\n                    } else {\n                        if (_this8.selcat.length > 0) {\n                            for (var x in _this8.selcat) {\n                                _this8._categories.innactiveCategory(_this8.selcat[x]).subscribe(function (data) {});\n                            }\n                            _this8.selcat = [];\n                            _this8.toastr.success(\"Categories innactived successfully\");\n                            _this8.reload();\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"reactiveCategory\",\n        value: function reactiveCategory(cat) {\n            var _this9 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.confirm.confirm({\n                message: \"Do you want to reactive the categorie(s)?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (cat) {\n                        _this9._categories.reactiveCategory(cat).subscribe(function (data) {\n                            if (data.data != null) {\n                                _this9.toastr.success(data.message, \"Categorie reactived successfully\");\n                                _this9.reload();\n                            } else {\n                                _this9.toastr.warning(\"\", data.message);\n                            }\n                        });\n                    } else {\n                        if (_this9.selcat.length > 0) {\n                            for (var x in _this9.selcat) {\n                                _this9._categories.reactiveCategory(_this9.selcat[x]).subscribe(function (data) {});\n                            }\n                            _this9.selcat = [];\n                            _this9.toastr.success(\"Categories reactived successfully\");\n                            _this9.reload();\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"lpad\",\n        value: function lpad(n, width, z) {\n            z = z || \"0\";\n            n = n || \"0\";\n            n = n + \"\";\n            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n        }\n    }, {\n        key: \"selectAll\",\n        value: function selectAll() {\n            if (this.selcat.length > 0) {\n                this.selcat = [];\n            } else {\n                this.selcat = [];\n                for (var t in this.categories) {\n                    this.selcat.push(this.categories[t].value);\n                }\n            }\n        }\n    }, {\n        key: \"setStateList\",\n        value: function setStateList(state) {\n            this.textState = state;\n            this.posState = \"para_status\";\n            this.currentpage = 1;\n            this.reload();\n        }\n    }, {\n        key: \"setOrder\",\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n            this.reload();\n        }\n    }, {\n        key: \"setCurPage\",\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"goTo\",\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n            } else {\n                this.currentpage = Math.round(this.itemcount / this.limitpage);\n                var mod = this.itemcount % this.limitpage;\n                if (mod > 0 && mod < 5) {\n                    this.currentpage += 1;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            var temporal = document.createElement(\"div\");\n            temporal.innerHTML = text;\n            var text = temporal.textContent || temporal.innerText || \"\";\n\n            return text;\n        }\n    }, {\n        key: \"changedExtraHandler\",\n        value: function changedExtraHandler(event) {\n            var _this10 = this;\n\n            if (event.keyCode == 13) {\n                this.isLoading = true;\n                this.projects = [];\n                this.currentpage = 1;\n\n                var filter = {\n                    start: 0,\n                    end: this.limitpage,\n                    all: this.search.trim(),\n                    state: this.textState,\n                    type: this.textType,\n                    orderby: this.posOrder,\n                    orderdesc: this.orderDesc ? \"desc\" : \"\"\n                };\n                this._categories.getCategoryList(filter).subscribe(function (res) {\n                    _this10.isLoading = false;\n                    _this10.categories = res.data.data;\n                    _this10.itemcount = res.data.count;\n                    _this10.lastpage = _this10.itemcount / _this10.limitpage;\n                    if (_this10.lastpage % 1 != 0) {\n                        var countpag = 1 + parseInt(_this10.lastpage);\n                        _this10.lastpage = countpag;\n                    }\n                    _this10.pages = [];\n                    for (var i = 1; i <= _this10.lastpage; i++) {\n                        _this10.pages.push(i);\n                    }\n                    if (_this10.pages.length == 0) {\n                        _this10.pages = [1];\n                    }\n                });\n                this.cont = 0;\n            }\n        }\n    }, {\n        key: \"filterText\",\n        value: function filterText() {\n            var _this11 = this;\n\n            this.isLoading = true;\n            this.projects = [];\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                state: this.textState,\n                type: this.textType,\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._categories.getCategoryList(filter).subscribe(function (res) {\n                _this11.isLoading = false;\n                _this11.categories = res.data.data;\n                _this11.itemcount = res.data.count;\n                _this11.lastpage = _this11.itemcount / _this11.limitpage;\n                if (_this11.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this11.lastpage);\n                    _this11.lastpage = countpag;\n                }\n                _this11.pages = [];\n                for (var i = 1; i <= _this11.lastpage; i++) {\n                    _this11.pages.push(i);\n                }\n                if (_this11.pages.length == 0) {\n                    _this11.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }, {\n        key: \"setProductList\",\n        value: function setProductList(prodid, name) {\n            this.prodname = name;\n            this.prod_id = prodid;\n            this.currentpage = 1;\n            this.reload();\n        }\n    }]);\n\n    return CategoriesComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _group.GroupService, _ngxToastr.ToastrService, _users.UsersService, _type.TypeService, _categories.CategoriesService, _router.ActivatedRoute, _product.ProductService, _primeng.ConfirmationService], CategoriesComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 405 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.UnitsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _unitsTemplate = __webpack_require__(851);\n\nvar _unitsTemplate2 = _interopRequireDefault(_unitsTemplate);\n\nvar _units = __webpack_require__(51);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UnitsComponent = exports.UnitsComponent = (_dec = (0, _core.Component)({\n    selector: \"units\",\n    template: _unitsTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function UnitsComponent(title, router, sanitizer, toastr, unitsService, arouter, confirmationService) {\n        _classCallCheck(this, UnitsComponent);\n\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._units = unitsService;\n        this._confirm = confirmationService;\n        this._aroute = arouter;\n\n        this.stTitle = \"Squadlinx\";\n        this.selunit = [];\n        this.units = [];\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.unit = {};\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.itemcount = 0;\n\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Units ::.\");\n        this.reload();\n    }\n\n    _createClass(UnitsComponent, [{\n        key: \"ngOnInit\",\n        value: function ngOnInit() {}\n    }, {\n        key: \"selectAll\",\n        value: function selectAll() {\n            if (this.selunit.length > 0) {\n                this.selunit = [];\n            } else {\n                this.selunit = [];\n                for (var u in this.units) {\n                    this.selunit.push(this.units[u].value);\n                }\n            }\n        }\n    }, {\n        key: \"setOrder\",\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n            this.reload();\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            var temporal = document.createElement(\"div\");\n            temporal.innerHTML = text;\n            var text = temporal.textContent || temporal.innerText || \"\";\n\n            return text;\n        }\n    }, {\n        key: \"showModal\",\n        value: function showModal(unit) {\n            this.unit = unit;\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            $(\"#mdUnit\").modal(\"show\");\n        }\n    }, {\n        key: \"goTo\",\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n            } else {\n                this.currentpage = Math.round(this.itemcount / this.limitpage);\n                var mod = this.itemcount % this.limitpage;\n                if (mod > 0 && mod < 5) {\n                    this.currentpage += 1;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"setCurPage\",\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"reload\",\n        value: function reload() {\n            var _this = this;\n\n            this.isLoading = true;\n            this.units = [];\n            var filter = {\n                start: this.currentpage * this.limitpage - this.limitpage,\n                end: this.limitpage,\n                all: this.search.trim(),\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._units.getList(filter).subscribe(function (res) {\n                _this.isLoading = false;\n                _this.units = res.data.data;\n                _this.itemcount = res.data.count;\n                _this.lastpage = _this.itemcount / _this.limitpage;\n                if (_this.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this.lastpage);\n                    _this.lastpage = countpag;\n                }\n                _this.pages = [];\n                for (var i = 1; i <= _this.lastpage; i++) {\n                    _this.pages.push(i);\n                }\n                if (_this.pages.length == 0) {\n                    _this.pages = [1];\n                }\n            });\n        }\n    }, {\n        key: \"showAddModal\",\n        value: function showAddModal() {\n            this.unit = {};\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        }\n    }, {\n        key: \"showEditModal\",\n        value: function showEditModal(unit) {\n            var _this2 = this;\n\n            this.unit = {};\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this._units.getUnit(unit.unit_id).subscribe(function (res) {\n                if (res.data) {\n                    _this2.unit = res.data[0];\n                }\n            });\n            $(\"#mdEditUnit\").modal(\"show\");\n        }\n    }, {\n        key: \"saveUnit\",\n        value: function saveUnit() {\n            var _this3 = this;\n\n            this._units.putUnit(this.unit).subscribe(function (res) {\n                if (res.data) {\n                    _this3.toastr.success(res.message, \"Unit Saved successfully\");\n                } else {\n                    _this3.toastr.warning(res.message, \"Bad news!\");\n                }\n                $(\"#mdAddUnit\").modal(\"hide\");\n                _this3.reload();\n            });\n        }\n    }, {\n        key: \"updateUnit\",\n        value: function updateUnit() {\n            var _this4 = this;\n\n            this._units.updateUnit(this.unit).subscribe(function (res) {\n                if (res.data) {\n                    _this4.toastr.success(res.message, \"Unit updated successfully\");\n                } else {\n                    _this4.toastr.warning(res.message, \"Bad news!\");\n                }\n                $(\"#mdEditUnit\").modal(\"hide\");\n                _this4.reload();\n            });\n        }\n    }, {\n        key: \"deleteUnit\",\n        value: function deleteUnit(unit_id) {\n            var _this5 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n\n            this._confirm.confirm({\n                message: \"Do you want to proceed?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (unit_id) {\n                        _this5._units.deleteUnit(unit_id).subscribe(function (res) {\n                            if (res.data == false) {\n                                _this5.toastr.error(\"The Unit have data base references, can't be deleted\");\n                                _this5.reload();\n                            } else {\n                                _this5.reload();\n                                _this5.toastr.success(\"Unit deleted successfully\");\n                            }\n                        });\n                    } else {\n                        if (_this5.selunit.length > 0) {\n                            for (var x in _this5.selunit) {\n                                _this5._units.deleteUnit(_this5.selunit[x]).subscribe(function (res) {\n                                    if (res.data == false) {\n                                        _this5.toastr.error(\"One or more Unit have data base references, can't be deleted\");\n                                        _this5.reload();\n                                    } else {\n                                        _this5.selunit = [];\n                                        _this5.toastr.success(\"Units deleted successfully\");\n                                        _this5.reload();\n                                    }\n                                });\n                            }\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"lpad\",\n        value: function lpad(n, width, z) {\n            z = z || \"0\";\n            n = n || \"0\";\n            n = n + \"\";\n            return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n        }\n    }, {\n        key: \"changedExtraHandler\",\n        value: function changedExtraHandler(event) {\n            if (event.keyCode == 13) {\n                this.reload();\n            }\n        }\n    }, {\n        key: \"filterText\",\n        value: function filterText() {\n            this.reload();\n        }\n    }]);\n\n    return UnitsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _units.UnitsService, _router.ActivatedRoute, _primeng.ConfirmationService], UnitsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 406 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.NotfoundComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _notfoundTemplate = __webpack_require__(852);\n\nvar _notfoundTemplate2 = _interopRequireDefault(_notfoundTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NotfoundComponent = exports.NotfoundComponent = (_dec = (0, _core.Component)({\n    selector: 'notfound',\n    template: _notfoundTemplate2.default\n}), _dec(_class = function () {\n    function NotfoundComponent() {\n        _classCallCheck(this, NotfoundComponent);\n    }\n\n    _createClass(NotfoundComponent, [{\n        key: 'escapeHtml',\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }]);\n\n    return NotfoundComponent;\n}()) || _class);\n\n/***/ }),\n/* 407 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.NotpermitsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _notpermitsTemplate = __webpack_require__(853);\n\nvar _notpermitsTemplate2 = _interopRequireDefault(_notpermitsTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NotpermitsComponent = exports.NotpermitsComponent = (_dec = (0, _core.Component)({\n    selector: 'notpermits',\n    template: _notpermitsTemplate2.default\n}), _dec(_class = function () {\n    function NotpermitsComponent() {\n        _classCallCheck(this, NotpermitsComponent);\n    }\n\n    _createClass(NotpermitsComponent, [{\n        key: 'escapeHtml',\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }]);\n\n    return NotpermitsComponent;\n}()) || _class);\n\n/***/ }),\n/* 408 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ProductComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _task = __webpack_require__(19);\n\nvar _users = __webpack_require__(20);\n\nvar _product = __webpack_require__(22);\n\nvar _note = __webpack_require__(24);\n\nvar _mail = __webpack_require__(36);\n\nvar _productTemplate = __webpack_require__(854);\n\nvar _productTemplate2 = _interopRequireDefault(_productTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ProductComponent = exports.ProductComponent = (_dec = (0, _core.Component)({\n  selector: \"product\",\n  template: _productTemplate2.default\n}), _dec(_class = function () {\n  function ProductComponent(title, route, toastr, sanitizer, arouter, taskService, noteService, usersService, productService, mailService) {\n    _classCallCheck(this, ProductComponent);\n\n    this._title = title;\n    this._route = route;\n    this._tasks = taskService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._sanitizer = sanitizer;\n    this._user = usersService;\n    this._products = productService;\n    this._mail = mailService;\n    this.task = { attachments: [] };\n    this.subtask = { attachments: [] };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.searchMail = \"\";\n    this.listmails = [];\n    this.listmailsa = [];\n    this.crmusers = [];\n    this.contacts = [];\n  }\n\n  _createClass(ProductComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      var _this = this;\n\n      this._products.getProducts().subscribe(function (data) {\n        _this.products = [];\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(function (data) {\n        _this.users = data.data;\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var c = _step2.value;\n\n            _this.userslbl.push({\n              label: c.user_lastname + \", \" + c.user_name,\n              value: c.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      });\n      this._user.getEmailList().subscribe(function (data) {\n        _this.listmails = data.data;\n        _this.listmailsa = data.data;\n      });\n      this._aroute.params.forEach(function (params) {\n        _this._title.setTitle(\".:: \" + localStorage.getItem(\"title\") + \" : Product #\" + params.idtask + \" ::.\");\n        _this._tasks.getTask(params.idtask).subscribe(function (res) {\n          _this.task = res.data;\n          _this.getTimeline();\n        });\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"getTimeline\",\n    value: function getTimeline() {\n      var _this2 = this;\n\n      this._tasks.getTimeline(this.task.task_id).subscribe(function (res) {\n        _this2.detail = res.data;\n      });\n    }\n  }, {\n    key: \"enableBtn\",\n    value: function enableBtn() {\n      if (this.displaybtn) {\n        $(\".task\").animate({\n          right: \"20px\"\n        });\n        $(\".comment\").animate({\n          right: \"20px\"\n        });\n        $(\".atemail\").animate({\n          right: \"20px\"\n        });\n        $(\".sendemail\").animate({\n          right: \"20px\"\n        });\n        this.displaybtn = false;\n      } else {\n        $(\".task\").animate({\n          right: \"65px\"\n        });\n        $(\".comment\").animate({\n          right: \"110px\"\n        });\n        $(\".atemail\").animate({\n          right: \"155px\"\n        });\n        $(\".sendemail\").animate({\n          right: \"200px\"\n        });\n        this.displaybtn = true;\n      }\n    }\n  }, {\n    key: \"closedt\",\n    value: function closedt() {\n      $(\"#collapseNote\").css({ display: \"none\" });\n      this.note = { attachments: [] };\n      $(\"#collapseTask\").css({ display: \"none\" });\n      this.subtask = { attachments: [] };\n      $(\"#collapseMail\").css({ display: \"none\" });\n      this.mail = { attachments: [] };\n    }\n  }, {\n    key: \"addTask\",\n    value: function addTask() {\n      var _this3 = this;\n\n      if (this.displaybtn) {\n        if (this.crmusers.length == 0) {\n          this._user.getCRMUsers().subscribe(function (data) {\n            _this3.crmusers = data.data;\n          });\n        }\n        $(\"#collapseNote\").css({ display: \"none\" });\n        if ($(\"#collapseTask\").css(\"display\") == \"none\") {\n          $(\"#collapseTask\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseTask\").offset().top\n        }, 1000);\n        this.subtask.task_description = this.sanitizeHtml(this.task.task_description);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this4 = this;\n\n      this.subtask.id_parentask = this.task.task_id;\n      this.subtask.task_description = this.task.task_description.split(\"\\n\").join(\"<br />\");\n      this.subtask.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      this.subtask.task_description = this.task.task_description;\n      this.subtask.task_delivery = this.subtask.task_delivery.getFullYear() + \"-\" + (this.subtask.task_delivery.getMonth() + 1) + \"-\" + this.subtask.task_delivery.getDate();\n      this._tasks.putTask(this.subtask).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this4.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this4.toastr.success(data.message, \"Saved Successfully\");\n        }\n        _this4.closedt();\n        _this4.getTimeline();\n      });\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event) {\n      var files = event.srcElement.files;\n      this.subtask.attachments.push(files[0]);\n    }\n  }, {\n    key: \"addNote\",\n    value: function addNote() {\n      if (this.displaybtn) {\n        $(\"#collapseTask\").css({ display: \"none\" });\n        if ($(\"#collapseNote\").css(\"display\") == \"none\") {\n          $(\"#collapseNote\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseNote\").offset().top\n        }, 1000);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveNote\",\n    value: function saveNote() {\n      var _this5 = this;\n\n      this.note.task_id = this.task.task_id;\n      this._notes.putNote(this.note).subscribe(function (data) {\n        _this5.toastr.success(data.message, \"Note added Successfully\");\n        _this5.note = { attachments: [] };\n        _this5.getTimeline();\n      });\n    }\n  }, {\n    key: \"onChangeNote\",\n    value: function onChangeNote(event) {\n      var files = event.srcElement.files;\n      this.note.attachments.push(files[0]);\n    }\n  }, {\n    key: \"showAsociateMail\",\n    value: function showAsociateMail() {\n      this.closedt();\n      $(\"#mdAsoMail\").modal(\"show\");\n    }\n  }, {\n    key: \"srchMail\",\n    value: function srchMail() {\n      var _this6 = this;\n\n      this.mails = [];\n      this.listmails = [];\n      this._mail.searchMail(this.searchMail).subscribe(function (data) {\n        _this6.mails = data.data;\n      });\n    }\n  }, {\n    key: \"addMail\",\n    value: function addMail() {\n      if (!this.loadmail) {\n        this.loadmail = true;\n        this._user.getEmailList().subscribe(function (data) {\n          // emails\n        });\n        /*\n              this._template.getTemplates().subscribe(data => {\n                  for (var i in data.data){\n                      if (data.data[i].id_catmailtemp == \"2\") {\n                          this.signatures.push(data.data[i]);\n                      } else {\n                          this.templates.push(data.data[i]);\n                      }\n                  }\n              });*/\n      }\n      if (this.displaybtn) {\n        $(\"#collapseMail\").css({ display: \"none\" });\n        if ($(\"#collapseMail\").css(\"display\") == \"none\") {\n          $(\"#collapseMail\").toggle(\"slow\");\n        }\n        $(\"html, body\").animate({\n          scrollTop: $(\"#collapseMail\").offset().top\n        }, 1000);\n        this.enableBtn();\n      }\n    }\n  }, {\n    key: \"saveMail\",\n    value: function saveMail() {\n      var _this7 = this;\n\n      var mymails = [];\n      for (var x in this.mail.emails) {\n        mymails.push(this.mail.emails[x].correo);\n      }\n      this.mail.emails = mymails;\n      this.mail.content = this.mail.content.split(\"\\n\").join(\"\");\n      this.mail.content = this.mail.content.split(\"\\r\").join(\"\");\n      this.mail.task_id = this.task.task_id;\n      this._mail.sendMessage(this.mail).subscribe(function (data) {\n        _this7.toastr.success(data.message, \"Mail sent Successfully\");\n        _this7.getTimeline();\n      });\n      this.mail = { attachments: [] };\n      this.closedt();\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"decode64\",\n    value: function decode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (base64test.exec(input)) {\n        return false;\n      }\n      input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n      do {\n        enc1 = keyStr.indexOf(input.charAt(i++));\n        enc2 = keyStr.indexOf(input.charAt(i++));\n        enc3 = keyStr.indexOf(input.charAt(i++));\n        enc4 = keyStr.indexOf(input.charAt(i++));\n\n        chr1 = enc1 << 2 | enc2 >> 4;\n        chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n        chr3 = (enc3 & 3) << 6 | enc4;\n\n        output = output + String.fromCharCode(chr1);\n\n        if (enc3 != 64) {\n          output = output + String.fromCharCode(chr2);\n        }\n        if (enc4 != 64) {\n          output = output + String.fromCharCode(chr3);\n        }\n\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n\n      return unescape(output);\n    }\n  }, {\n    key: \"encode64\",\n    value: function encode64(input) {\n      var keyStr = \"ABCDEFGHIJKLMNOP\" + \"QRSTUVWXYZabcdef\" + \"ghijklmnopqrstuv\" + \"wxyz0123456789+/\" + \"=\";\n      input = escape(input);\n      var output = \"\";\n      var chr1,\n          chr2,\n          chr3 = \"\";\n      var enc1,\n          enc2,\n          enc3,\n          enc4 = \"\";\n      var i = 0;\n\n      do {\n        chr1 = input.charCodeAt(i++);\n        chr2 = input.charCodeAt(i++);\n        chr3 = input.charCodeAt(i++);\n        enc1 = chr1 >> 2;\n        enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n        enc3 = (chr2 & 15) << 2 | chr3 >> 6;\n        enc4 = chr3 & 63;\n        if (isNaN(chr2)) {\n          enc3 = enc4 = 64;\n        } else if (isNaN(chr3)) {\n          enc4 = 64;\n        }\n        output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + keyStr.charAt(enc3) + keyStr.charAt(enc4);\n        chr1 = chr2 = chr3 = \"\";\n        enc1 = enc2 = enc3 = enc4 = \"\";\n      } while (i < input.length);\n      return output;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n    }\n  }]);\n\n  return ProductComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _ngxToastr.ToastrService, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _task.TaskService, _note.NoteService, _users.UsersService, _product.ProductService, _mail.MailService], ProductComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 409 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.ProductListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _product = __webpack_require__(22);\n\nvar _task = __webpack_require__(19);\n\nvar _group = __webpack_require__(11);\n\nvar _directory = __webpack_require__(31);\n\nvar _project = __webpack_require__(18);\n\nvar _pipes = __webpack_require__(14);\n\nvar _productlistTemplate = __webpack_require__(855);\n\nvar _productlistTemplate2 = _interopRequireDefault(_productlistTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ProductListComponent = exports.ProductListComponent = (_dec = (0, _core.Component)({\n    selector: \"products\",\n    template: _productlistTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function ProductListComponent(title, route, toastr, taskService, groupService, directoryService, productService, ProjectService, confirmationService) {\n        var _this = this;\n\n        _classCallCheck(this, ProductListComponent);\n\n        this._title = title;\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this._tasks = taskService;\n        this._groups = groupService;\n        this._directory = directoryService;\n        this._projects = ProjectService;\n        this._products = productService;\n        this.confirm = confirmationService;\n        this.textState = [\"New\", \"Viewed\", \"Accepted\", \"Develop\", \"Developing\", \"Testing\", \"Completed\", \"Closed\", \"Deleted\", \"Backlog\"];\n        this.posState = \"status\";\n        this.textGroup = \"\";\n        this.posGroup = \"grop_id\";\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.pages = [1];\n        this.limitpage = 20;\n        this.itemcount = 0;\n        this.task = { project: {}, attachments: [] };\n        this.selproducts = [];\n        this.groups = [];\n        this.notemd = { note_text: \"\" };\n        this.product = {};\n        this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Products ::.\");\n\n        this.selproducts = [];\n\n        this._products.getProducts().subscribe(function (data) {\n            _this.groupsproducts = data.data;\n        });\n\n        this.groupslbl = [];\n        this._groups.getGroups().subscribe(function (data) {\n            _this.groups = data.data;\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = _this.groups[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var c = _step.value;\n\n                    _this.groupslbl.push({ label: c.grop_name, value: c.grop_id });\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n        });\n        this.reload();\n\n        this.selproducts = [];\n    }\n\n    _createClass(ProductListComponent, [{\n        key: \"setOrder\",\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n        }\n    }, {\n        key: \"setCurPage\",\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"goTo\",\n        value: function goTo(value) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (value == 0) {\n                this.currentpage = 1;\n                this.limitpage = 20;\n            } else {\n                this.currentpage = Math.round(this.itemcount / this.limitpage);\n                var mod = this.itemcount % this.limitpage;\n                if (mod > 0 && mod < 5) {\n                    this.currentpage += 1;\n                }\n            }\n            this.reload();\n        }\n    }, {\n        key: \"changedExtraHandler\",\n        value: function changedExtraHandler(event) {\n            var _this2 = this;\n\n            if (event.keyCode == 13) {\n                this.isLoading = true;\n                this.currentpage = 1;\n\n                var filter = {\n                    start: 0,\n                    end: this.limitpage,\n                    all: this.search.trim(),\n                    orderby: this.posOrder,\n                    orderdesc: this.orderDesc ? \"desc\" : \"\"\n                };\n                // console.log(filter);\n                this._products.getProductsx(filter).subscribe(function (res) {\n                    _this2.isLoading = false;\n                    _this2.products = res.data.data;\n                    _this2.itemcount = res.data.count;\n                    _this2.lastpage = _this2.itemcount / _this2.limitpage;\n                    if (_this2.lastpage % 1 != 0) {\n                        var countpag = 1 + parseInt(_this2.lastpage);\n                        _this2.lastpage = countpag;\n                    }\n                    _this2.pages = [];\n                    for (var i = 1; i <= _this2.lastpage; i++) {\n                        _this2.pages.push(i);\n                    }\n                    if (_this2.pages.length == 0) {\n                        _this2.pages = [1];\n                    }\n                });\n                this.cont = 0;\n            }\n        }\n    }, {\n        key: \"reload\",\n        value: function reload() {\n            var _this3 = this;\n\n            this.isLoading = true;\n            var filter = {\n                start: this.currentpage * this.limitpage - this.limitpage,\n                end: this.limitpage,\n                all: this.search.trim(),\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            // console.log(filter);\n            this._products.getProductsx(filter).subscribe(function (res) {\n                _this3.isLoading = false;\n                _this3.products = res.data.data;\n                _this3.itemcount = res.data.count;\n                _this3.lastpage = _this3.itemcount / _this3.limitpage;\n                if (_this3.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this3.lastpage);\n                    _this3.lastpage = countpag;\n                }\n                _this3.pages = [];\n                for (var i = 1; i <= _this3.lastpage; i++) {\n                    _this3.pages.push(i);\n                }\n                if (_this3.pages.length == 0) {\n                    _this3.pages = [1];\n                }\n            });\n        }\n    }, {\n        key: \"addProduct\",\n        value: function addProduct() {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.product = {};\n        }\n    }, {\n        key: \"showModal\",\n        value: function showModal(idprod) {\n            var _this4 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.product = {};\n            this._products.getProduct(idprod).subscribe(function (data) {\n                _this4.product = data.data[0];\n                $(\"#mdProduct\").modal(\"show\");\n            });\n        }\n    }, {\n        key: \"showEditModal\",\n        value: function showEditModal(prod_id) {\n            var _this5 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this._products.getProduct(prod_id).subscribe(function (data) {\n                _this5.product = data.data[0];\n                $(\"#mdEditProduct\").modal(\"show\");\n            });\n        }\n    }, {\n        key: \"deleteProduct\",\n        value: function deleteProduct(idprod) {\n            var _this6 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            //console.log(idprod);\n\n            this.confirm.confirm({\n                message: \"Do you want to proceed?\",\n                header: \"Confirmation\",\n                icon: \"fa fa-question-circle\",\n                accept: function accept() {\n                    if (idprod) {\n                        _this6._products.deleteProduct(idprod).subscribe(function (data) {\n                            if (data.data == false) {\n                                _this6.toastr.error(\"The Product have data base references, can't be deleted\");\n                                _this6.reload();\n                            } else {\n                                _this6.reload();\n                                _this6.toastr.success(\"Product deleted successfully\");\n                            }\n                        });\n                    } else {\n                        if (_this6.selproducts.length > 0) {\n                            for (var x in _this6.selproducts) {\n                                _this6._products.deleteProduct(_this6.selproducts[x]).subscribe(function (data) {\n                                    if (data.data == false) {\n                                        _this6.toastr.error(\"One or more Products have data base references, can't be deleted\");\n                                        _this6.reload();\n                                    } else {\n                                        _this6.selproducts = [];\n                                        _this6.toastr.success(\"Product deleted successfully\");\n                                        _this6.reload();\n                                    }\n                                });\n                            }\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: \"selectAll\",\n        value: function selectAll() {\n            if (this.selproducts.length > 0) {\n                this.selproducts = [];\n            } else {\n                this.selproducts = [];\n                for (var t in this.products) {\n                    this.selproducts.push(this.products[t].prod_id);\n                }\n            }\n        }\n    }, {\n        key: \"saveProduct\",\n        value: function saveProduct() {\n            var _this7 = this;\n\n            this._products.putProduct(this.product).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this7.toastr.warning(data.message, \"Bad news!\");\n                } else {\n                    _this7.toastr.success(data.message, \"\");\n                }\n                _this7.reload();\n            });\n        }\n    }, {\n        key: \"updateProduct\",\n        value: function updateProduct() {\n            var _this8 = this;\n\n            this._products.updateProduct(this.product).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this8.toastr.warning(data.message, \"Bad news!\");\n                } else {\n                    _this8.toastr.success(data.message, \"Product updated successfully\");\n                }\n                _this8.reload();\n            });\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }, {\n        key: \"checking\",\n        value: function checking() {\n            $(\"#flag\").on(\"click\", \"td\", function () {});\n        }\n    }, {\n        key: \"filterText\",\n        value: function filterText() {\n            var _this9 = this;\n\n            this.isLoading = true;\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._products.getProductsx(filter).subscribe(function (res) {\n                _this9.isLoading = false;\n                _this9.products = res.data.data;\n                _this9.itemcount = res.data.count;\n                _this9.lastpage = _this9.itemcount / _this9.limitpage;\n                if (_this9.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this9.lastpage);\n                    _this9.lastpage = countpag;\n                }\n                _this9.pages = [];\n                for (var i = 1; i <= _this9.lastpage; i++) {\n                    _this9.pages.push(i);\n                }\n                if (_this9.pages.length == 0) {\n                    _this9.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }, {\n        key: \"refresh\",\n        value: function refresh() {\n            var _this10 = this;\n\n            this.search = \"\";\n            this.posOrder = \"\";\n            this.orderDesc = false;\n            this.currentpage = 1;\n            this.pages = [1];\n            this.limitpage = 20;\n            this.itemcount = 0;\n\n            this.isLoading = true;\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._products.getProductsx(filter).subscribe(function (res) {\n                _this10.isLoading = false;\n                _this10.products = res.data.data;\n                _this10.itemcount = res.data.count;\n                _this10.lastpage = _this10.itemcount / _this10.limitpage;\n                if (_this10.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(_this10.lastpage);\n                    _this10.lastpage = countpag;\n                }\n                _this10.pages = [];\n                for (var i = 1; i <= _this10.lastpage; i++) {\n                    _this10.pages.push(i);\n                }\n                if (_this10.pages.length == 0) {\n                    _this10.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }]);\n\n    return ProductListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _directory.DirectoryService, _product.ProductService, _project.ProjectService, _primeng.ConfirmationService], ProductListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 410 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.TypeListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _type = __webpack_require__(41);\n\nvar _task = __webpack_require__(19);\n\nvar _group = __webpack_require__(11);\n\nvar _directory = __webpack_require__(31);\n\nvar _project = __webpack_require__(18);\n\nvar _pipes = __webpack_require__(14);\n\nvar _typelistTemplate = __webpack_require__(856);\n\nvar _typelistTemplate2 = _interopRequireDefault(_typelistTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TypeListComponent = exports.TypeListComponent = (_dec = (0, _core.Component)({\n    selector: 'typelist',\n    template: _typelistTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function TypeListComponent(route, toastr, taskService, groupService, directoryService, typeService, ProjectService, confirmationService) {\n        var _this = this;\n\n        _classCallCheck(this, TypeListComponent);\n\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this._tasks = taskService;\n        this._groups = groupService;\n        this._directory = directoryService;\n        this._projects = ProjectService;\n        this._types = typeService;\n        this.confirm = confirmationService;\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.search = \"\";\n        this.currentpage = 1;\n        this.limitpage = 0;\n        this.task = { project: {}, attachments: [] };\n        this.seltypes = [];\n        this.groups = [];\n        this.notemd = { note_text: \"\" };\n        this.types = [];\n        this.type = [];\n        this.stscat = [];\n        this.seltypes = [];\n        this.typeMenu = [];\n        this.catIds = [];\n        this.stsmt = [];\n        this._types.getTypeStatus().subscribe(function (res) {\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var c = _step.value;\n\n                    _this.stscat.push({ label: c.para_name, value: c.para_id });\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n        });\n\n        this.type.typeNameNew = \"\";\n        this.reload();\n    }\n\n    _createClass(TypeListComponent, [{\n        key: 'ngOnInit',\n        value: function ngOnInit() {}\n    }, {\n        key: 'setOrder',\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n        }\n    }, {\n        key: 'setCurPage',\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n        }\n    }, {\n        key: 'reload',\n        value: function reload() {\n            var _this2 = this;\n\n            this.types = [];\n            this.catIds = [];\n            this._types.getTypes().subscribe(function (data) {\n                var _iteratorNormalCompletion2 = true;\n                var _didIteratorError2 = false;\n                var _iteratorError2 = undefined;\n\n                try {\n                    for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                        var c = _step2.value;\n\n                        if (_this2.catIds.indexOf(c.type_id) < 0) {\n                            _this2.typeMenu.push(c.type_name.toLowerCase());\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError2 = true;\n                    _iteratorError2 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                            _iterator2.return();\n                        }\n                    } finally {\n                        if (_didIteratorError2) {\n                            throw _iteratorError2;\n                        }\n                    }\n                }\n\n                _this2.types = data.data;\n                _this2.limitpage = _this2.types.length > 20 ? 20 : _this2.types.length;\n                _this2.itemcount = _this2.types.length;\n            });\n        }\n    }, {\n        key: 'addType',\n        value: function addType() {\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.type = {};\n            this.type.typeNameNew = \"\";\n        }\n    }, {\n        key: 'showModal',\n        value: function showModal(type_id) {\n            var _this3 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.type = {};\n            this._types.getType(type_id).subscribe(function (data) {\n                _this3.type = data.data[0];\n                $('#mdType').modal('show');\n                _this3.limitpage = _this3.types.length > 20 ? 20 : _this3.types.length;\n                _this3.itemcount = _this3.types.length;\n            });\n        }\n    }, {\n        key: 'showEditModal',\n        value: function showEditModal(type) {\n            var _this4 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this._types.getType(type.type_id).subscribe(function (data) {\n                _this4.type = data.data[0];\n                _this4.type.typeNameNew = _this4.type.type_name;\n                $('#mdEditType').modal('show');\n            });\n        }\n    }, {\n        key: 'deleteType',\n        value: function deleteType(type_id) {\n            var _this5 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n\n            this.confirm.confirm({\n                message: 'Do you want to proceed?',\n                header: 'Confirmation',\n                icon: 'fa fa-question-circle',\n                accept: function accept() {\n                    if (type_id) {\n                        _this5._types.deleteType(type_id).subscribe(function (data) {\n                            if (data.data == false) {\n                                _this5.toastr.error(\"The type have data base references, can't be deleted\");\n                                _this5.reload();\n                            } else {\n                                _this5.reload();\n                                _this5.toastr.success(\"type deleted successfully\");\n                            }\n                        });\n                    } else {\n                        if (_this5.seltypes.length > 0) {\n                            for (var x in _this5.seltypes) {\n                                _this5._types.deleteType(_this5.seltypes[x]).subscribe(function (data) {\n                                    if (data.data == false) {\n                                        _this5.toastr.error(\"One or more types have data base references, can't be deleted\");\n                                        _this5.reload();\n                                    } else {\n                                        _this5.seltypes = [];\n                                        _this5.toastr.success(\"type deleted successfully\");\n                                        _this5.reload();\n                                    }\n                                });\n                            }\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: 'selectAll',\n        value: function selectAll() {\n            if (this.seltypes.length > 0) {\n                this.seltypes = [];\n            } else {\n                this.seltypes = [];\n                for (var t in this.types) {\n                    this.seltypes.push(this.types[t].type_id);\n                }\n            }\n        }\n    }, {\n        key: 'setStateList',\n        value: function setStateList(state) {\n            if (state == \"Outstanding\") {\n                this.textState = [\"1\"];\n                this.posState = \"outst\";\n            } else {\n                this.textState = state;\n                this.posState = \"tsst_name\";\n            }\n            this.currentpage = 1;\n            this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n            this.itemcount = this.tasks.length;\n        }\n    }, {\n        key: 'setGroupList',\n        value: function setGroupList(state) {\n            this.textGroup = state;\n            this.currentpage = 1;\n            this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n            this.itemcount = this.tasks.length;\n        }\n    }, {\n        key: 'saveType',\n        value: function saveType() {\n            var _this6 = this;\n\n            this._types.putType(this.type).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this6.toastr.warning(data.message, \"Bad news!\");\n                } else {\n                    _this6.toastr.success(data.message, \"Type saved successfull\");\n                }\n                _this6.reload();\n            });\n        }\n    }, {\n        key: 'updateType',\n        value: function updateType() {\n            var _this7 = this;\n\n            this._types.updateType(this.type).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this7.toastr.warning(data.message, \"Bad news!\");\n                } else {\n                    _this7.toastr.success(data.message, \"Type updated successfully\");\n                }\n                _this7.reload();\n            });\n        }\n\n        /*onChange(event) {\n            var files = event.srcElement.files;\n            this.task.attachments.push(files[0]);\n        }*/\n\n    }, {\n        key: 'escapeHtml',\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }, {\n        key: 'checking',\n        value: function checking() {\n            $(\"#flag\").on(\"click\", \"td\", function () {});\n        }\n    }]);\n\n    return TypeListComponent;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_router.Router, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _directory.DirectoryService, _type.TypeService, _project.ProjectService, _primeng.ConfirmationService], TypeListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 411 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CodeComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _type = __webpack_require__(41);\n\nvar _task = __webpack_require__(19);\n\nvar _group = __webpack_require__(11);\n\nvar _directory = __webpack_require__(31);\n\nvar _project = __webpack_require__(18);\n\nvar _pipes = __webpack_require__(14);\n\nvar _codeTemplate = __webpack_require__(857);\n\nvar _codeTemplate2 = _interopRequireDefault(_codeTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CodeComponent = exports.CodeComponent = (_dec = (0, _core.Component)({\n  selector: \"coder\",\n  template: _codeTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n  function CodeComponent(route, toastr, taskService, groupService, directoryService, typeService, ProjectService, confirmationService) {\n    var _this = this;\n\n    _classCallCheck(this, CodeComponent);\n\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._directory = directoryService;\n    this._projects = ProjectService;\n    this._types = typeService;\n    this.confirm = confirmationService;\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.task = { project: {}, attachments: [] };\n    this.seltypes = [];\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.types = [];\n    this.type = [];\n    this.stscat = [];\n    this.seltypes = [];\n    this.typeMenu = [];\n    this.catIds = [];\n    this.stsmt = [];\n    this._types.getTypeStatus().subscribe(function (res) {\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.stscat.push({ label: c.para_name, value: c.para_id });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n\n    this.type.typeNameNew = \"\";\n    this.reload();\n  }\n\n  _createClass(CodeComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this2 = this;\n\n      this.types = [];\n      this.catIds = [];\n      this._types.getTypes().subscribe(function (data) {\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var c = _step2.value;\n\n            if (_this2.catIds.indexOf(c.type_id) < 0) {\n              _this2.typeMenu.push(c.type_name.toLowerCase());\n            }\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n\n        _this2.types = data.data;\n        _this2.limitpage = _this2.types.length > 20 ? 20 : _this2.types.length;\n        _this2.itemcount = _this2.types.length;\n      });\n    }\n  }, {\n    key: \"addType\",\n    value: function addType() {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.type = {};\n      this.type.typeNameNew = \"\";\n    }\n  }, {\n    key: \"showFilter\",\n    value: function showFilter() {\n      $(\".filter-panel\").toggle();\n    }\n  }, {\n    key: \"showEditModal\",\n    value: function showEditModal(type) {\n      var _this3 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._types.getType(type.type_id).subscribe(function (data) {\n        _this3.type = data.data[0];\n        _this3.type.typeNameNew = _this3.type.type_name;\n        $(\"#mdEditType\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"deleteType\",\n    value: function deleteType(type_id) {\n      var _this4 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n\n      this.confirm.confirm({\n        message: \"Do you want to proceed?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (type_id) {\n            _this4._types.deleteType(type_id).subscribe(function (data) {\n              if (data.data == false) {\n                _this4.toastr.error(\"The type have data base references, can't be deleted\");\n                _this4.reload();\n              } else {\n                _this4.reload();\n                _this4.toastr.success(\"type deleted successfully\");\n              }\n            });\n          } else {\n            if (_this4.seltypes.length > 0) {\n              for (var x in _this4.seltypes) {\n                _this4._types.deleteType(_this4.seltypes[x]).subscribe(function (data) {\n                  if (data.data == false) {\n                    _this4.toastr.error(\"One or more types have data base references, can't be deleted\");\n                    _this4.reload();\n                  } else {\n                    _this4.seltypes = [];\n                    _this4.toastr.success(\"type deleted successfully\");\n                    _this4.reload();\n                  }\n                });\n              }\n            }\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"selectAll\",\n    value: function selectAll() {\n      if (this.seltypes.length > 0) {\n        this.seltypes = [];\n      } else {\n        this.seltypes = [];\n        for (var t in this.types) {\n          this.seltypes.push(this.types[t].type_id);\n        }\n      }\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      if (state == \"Outstanding\") {\n        this.textState = [\"1\"];\n        this.posState = \"outst\";\n      } else {\n        this.textState = state;\n        this.posState = \"tsst_name\";\n      }\n      this.currentpage = 1;\n      this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n      this.itemcount = this.tasks.length;\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state) {\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n      this.itemcount = this.tasks.length;\n    }\n  }, {\n    key: \"saveType\",\n    value: function saveType() {\n      var _this5 = this;\n\n      this._types.putType(this.type).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this5.toastr.warning(data.message, \"Bad news!\");\n        } else {\n          _this5.toastr.success(data.message, \"Type saved successfull\");\n        }\n        _this5.reload();\n      });\n    }\n  }, {\n    key: \"updateType\",\n    value: function updateType() {\n      var _this6 = this;\n\n      this._types.updateType(this.type).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this6.toastr.warning(data.message, \"Bad news!\");\n        } else {\n          _this6.toastr.success(data.message, \"Type updated successfully\");\n        }\n        _this6.reload();\n      });\n    }\n\n    /*onChange(event) {\n          var files = event.srcElement.files;\n          this.task.attachments.push(files[0]);\n      }*/\n\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n    }\n  }, {\n    key: \"checking\",\n    value: function checking() {\n      $(\"#flag\").on(\"click\", \"td\", function () {});\n    }\n  }]);\n\n  return CodeComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.Router, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _directory.DirectoryService, _type.TypeService, _project.ProjectService, _primeng.ConfirmationService], CodeComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 412 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.WikiComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _type = __webpack_require__(41);\n\nvar _task = __webpack_require__(19);\n\nvar _group = __webpack_require__(11);\n\nvar _directory = __webpack_require__(31);\n\nvar _project = __webpack_require__(18);\n\nvar _pipes = __webpack_require__(14);\n\nvar _wikiTemplate = __webpack_require__(858);\n\nvar _wikiTemplate2 = _interopRequireDefault(_wikiTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar WikiComponent = exports.WikiComponent = (_dec = (0, _core.Component)({\n    selector: 'wikit',\n    template: _wikiTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function WikiComponent(route, toastr, taskService, groupService, directoryService, typeService, ProjectService, confirmationService) {\n        var _this = this;\n\n        _classCallCheck(this, WikiComponent);\n\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this._tasks = taskService;\n        this._groups = groupService;\n        this._directory = directoryService;\n        this._projects = ProjectService;\n        this._types = typeService;\n        this.confirm = confirmationService;\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.search = \"\";\n        this.currentpage = 1;\n        this.limitpage = 0;\n        this.task = { project: {}, attachments: [] };\n        this.seltypes = [];\n        this.groups = [];\n        this.notemd = { note_text: \"\" };\n        this.types = [];\n        this.type = [];\n        this.stscat = [];\n        this.seltypes = [];\n        this.typeMenu = [];\n        this.catIds = [];\n        this.stsmt = [];\n        this._types.getTypeStatus().subscribe(function (res) {\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var c = _step.value;\n\n                    _this.stscat.push({ label: c.para_name, value: c.para_id });\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n        });\n\n        this.type.typeNameNew = \"\";\n        this.reload();\n    }\n\n    _createClass(WikiComponent, [{\n        key: 'ngOnInit',\n        value: function ngOnInit() {}\n    }, {\n        key: 'setOrder',\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n        }\n    }, {\n        key: 'setCurPage',\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n        }\n    }, {\n        key: 'reload',\n        value: function reload() {\n            var _this2 = this;\n\n            this.types = [];\n            this.catIds = [];\n            this._types.getTypes().subscribe(function (data) {\n                var _iteratorNormalCompletion2 = true;\n                var _didIteratorError2 = false;\n                var _iteratorError2 = undefined;\n\n                try {\n                    for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                        var c = _step2.value;\n\n                        if (_this2.catIds.indexOf(c.type_id) < 0) {\n                            _this2.typeMenu.push(c.type_name.toLowerCase());\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError2 = true;\n                    _iteratorError2 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                            _iterator2.return();\n                        }\n                    } finally {\n                        if (_didIteratorError2) {\n                            throw _iteratorError2;\n                        }\n                    }\n                }\n\n                _this2.types = data.data;\n                _this2.limitpage = _this2.types.length > 20 ? 20 : _this2.types.length;\n                _this2.itemcount = _this2.types.length;\n            });\n        }\n    }, {\n        key: 'addType',\n        value: function addType() {\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.type = {};\n            this.type.typeNameNew = \"\";\n        }\n    }, {\n        key: 'showModal',\n        value: function showModal(type_id) {\n            var _this3 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.type = {};\n            this._types.getType(type_id).subscribe(function (data) {\n                _this3.type = data.data[0];\n                $('#mdType').modal('show');\n                _this3.limitpage = _this3.types.length > 20 ? 20 : _this3.types.length;\n                _this3.itemcount = _this3.types.length;\n            });\n        }\n    }, {\n        key: 'showEditModal',\n        value: function showEditModal(type) {\n            var _this4 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this._types.getType(type.type_id).subscribe(function (data) {\n                _this4.type = data.data[0];\n                _this4.type.typeNameNew = _this4.type.type_name;\n                $('#mdEditType').modal('show');\n            });\n        }\n    }, {\n        key: 'deleteType',\n        value: function deleteType(type_id) {\n            var _this5 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n\n            this.confirm.confirm({\n                message: 'Do you want to proceed?',\n                header: 'Confirmation',\n                icon: 'fa fa-question-circle',\n                accept: function accept() {\n                    if (type_id) {\n                        _this5._types.deleteType(type_id).subscribe(function (data) {\n                            if (data.data == false) {\n                                _this5.toastr.error(\"The type have data base references, can't be deleted\");\n                                _this5.reload();\n                            } else {\n                                _this5.reload();\n                                _this5.toastr.success(\"type deleted successfully\");\n                            }\n                        });\n                    } else {\n                        if (_this5.seltypes.length > 0) {\n                            for (var x in _this5.seltypes) {\n                                _this5._types.deleteType(_this5.seltypes[x]).subscribe(function (data) {\n                                    if (data.data == false) {\n                                        _this5.toastr.error(\"One or more types have data base references, can't be deleted\");\n                                        _this5.reload();\n                                    } else {\n                                        _this5.seltypes = [];\n                                        _this5.toastr.success(\"type deleted successfully\");\n                                        _this5.reload();\n                                    }\n                                });\n                            }\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: 'selectAll',\n        value: function selectAll() {\n            if (this.seltypes.length > 0) {\n                this.seltypes = [];\n            } else {\n                this.seltypes = [];\n                for (var t in this.types) {\n                    this.seltypes.push(this.types[t].type_id);\n                }\n            }\n        }\n    }, {\n        key: 'setStateList',\n        value: function setStateList(state) {\n            if (state == \"Outstanding\") {\n                this.textState = [\"1\"];\n                this.posState = \"outst\";\n            } else {\n                this.textState = state;\n                this.posState = \"tsst_name\";\n            }\n            this.currentpage = 1;\n            this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n            this.itemcount = this.tasks.length;\n        }\n    }, {\n        key: 'setGroupList',\n        value: function setGroupList(state) {\n            this.textGroup = state;\n            this.currentpage = 1;\n            this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n            this.itemcount = this.tasks.length;\n        }\n    }, {\n        key: 'saveType',\n        value: function saveType() {\n            var _this6 = this;\n\n            this._types.putType(this.type).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this6.toastr.warning(data.message, \"Bad news!\");\n                } else {\n                    _this6.toastr.success(data.message, \"Type saved successfull\");\n                }\n                _this6.reload();\n            });\n        }\n    }, {\n        key: 'updateType',\n        value: function updateType() {\n            var _this7 = this;\n\n            this._types.updateType(this.type).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this7.toastr.warning(data.message, \"Bad news!\");\n                } else {\n                    _this7.toastr.success(data.message, \"Type updated successfully\");\n                }\n                _this7.reload();\n            });\n        }\n\n        /*onChange(event) {\n            var files = event.srcElement.files;\n            this.task.attachments.push(files[0]);\n        }*/\n\n    }, {\n        key: 'escapeHtml',\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }, {\n        key: 'checking',\n        value: function checking() {\n            $(\"#flag\").on(\"click\", \"td\", function () {});\n        }\n    }]);\n\n    return WikiComponent;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_router.Router, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _directory.DirectoryService, _type.TypeService, _project.ProjectService, _primeng.ConfirmationService], WikiComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 413 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.RequestsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _requestsTemplate = __webpack_require__(859);\n\nvar _requestsTemplate2 = _interopRequireDefault(_requestsTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _task = __webpack_require__(19);\n\nvar _type = __webpack_require__(41);\n\nvar _request = __webpack_require__(81);\n\nvar _product = __webpack_require__(22);\n\nvar _project = __webpack_require__(18);\n\nvar _categories = __webpack_require__(47);\n\nvar _note = __webpack_require__(24);\n\nvar _users = __webpack_require__(20);\n\nvar _sprint = __webpack_require__(26);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RequestsComponent = exports.RequestsComponent = (_dec = (0, _core.Component)({\n  selector: \"requests\",\n  template: _requestsTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  providers: [_primeng.ConfirmationService],\n  styles: [\".box-header {background-color: #c7c7c7; color: #fff;}\"]\n}), _dec(_class = function () {\n  function RequestsComponent(title, router, sanitizer, sprintService, productService, groupService, usersService, toastr, typeService, ProjectService, RequestService, taskService, noteService, arouter, confirmationService, categoriesService) {\n    var _this = this;\n\n    _classCallCheck(this, RequestsComponent);\n\n    this._title = title;\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._request = RequestService;\n    this._categories = categoriesService;\n    this._tasks = taskService;\n    this._notes = noteService;\n    this._user = usersService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._sprint = sprintService;\n    this.confirm = confirmationService;\n    this._types = typeService;\n    this.products = [];\n    this.textState = [\"\"];\n    this.isrequest = \"\";\n    this.posState = \"type_name\";\n    this.textCreator = [\"\"];\n    this.posCreator = \"asigned_to\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.filter_excel = null;\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem(\"title\")) {\n      this.stTitle = localStorage.getItem(\"title\");\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Requests ::.\");\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this._aroute = arouter;\n    this.limitpage = 20;\n    this.groups = [];\n    this.plmt = [];\n    this.stsmt = [];\n    this.lblgroups = [];\n    this.seleve = [];\n    this.userlist = [];\n    this.requests = [];\n    this.emails = [];\n    this.st_cancelled = 0;\n    this.categories = [];\n    this.catIds = [];\n    this.categoryMenu = [];\n    this.idtype = [];\n    this.tycate = [];\n    this.catlist = [];\n    this.note_text = \"\";\n    this.selectedCategory = {};\n    this.myProjects = [];\n    this.mdT = { project: {}, comments: [] };\n    this.note = { attachments: [] };\n    this.selectedprojects = [];\n    this.task = { project: {}, attachments: [] };\n    this.task_description = \"\";\n    this.userslbl = [];\n    this.taskattch = { attachments: [] };\n    this.myfilterfield = { pos: \"para_type\", text: \"4\", typetittle: \"Implementation\", icon: \"sq sq-errors\", style: { 'background': '#F01458', 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    this.taskid = 0;\n    this.idtk = [];\n    this.cant_e = 0;\n    this.cant_ia = 0;\n    this.cant_im = 0;\n    this.status = [];\n    this.position = -1;\n    this.mylist = [];\n    this.mytask = 0;\n    this.mysprints = [];\n    this.taskfields = [];\n    this.mylist.fields = [];\n    this.textInfo = [\"Info\", \"Project related\", \"Adjustments\", \"Timeline\", \"Form\"];\n    this.pages = [1];\n    this.posInfo = \"info_id\";\n    this.timeline = 0;\n    this.mdT.total_adjusted = [];\n    this.task.taskid = 0;\n    this.imptask = {};\n    this.rjtask = {};\n    this.head = [];\n    this.cont = 0;\n    this.tagMenu = 1;\n    this.tagMenuRequest = 2;\n    this.results = [20, 30, 40, 50];\n    this.project = {};\n    this.rejected = false;\n    this.filterRequestRejected = '';\n    this._tasks.getStates().subscribe(function (data) {\n      _this.status = data.data;\n    });\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.users = data.data;\n      _this.usersShareWith = data.data;\n      _this.usersShareWith_a = data.data;\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this._products.getProducts().subscribe(function (data) {\n      _this.products = [];\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n    this._user.getMyUserData().subscribe(function (data) {\n      _this.myuser = data.data[0].user_id;\n    });\n    this.groupscombo = [];\n    this._groups.getGroups().subscribe(function (data) {\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var c = _step3.value;\n\n          _this.groups.push({ label: c.grop_name, value: c.grop_id });\n          _this.groupscombo.push({ label: c.grop_name, value: c.grop_id });\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n    });\n\n    this.userapplicant = [];\n    this._user.getEmailList().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion4 = true;\n      var _didIteratorError4 = false;\n      var _iteratorError4 = undefined;\n\n      try {\n        for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n          var c = _step4.value;\n\n          _this.userapplicant.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion4 && _iterator4.return) {\n            _iterator4.return();\n          }\n        } finally {\n          if (_didIteratorError4) {\n            throw _iteratorError4;\n          }\n        }\n      }\n    });\n\n    this.types = [];\n    this._types.getTypes().subscribe(function (res) {\n      _this.types = res.data;\n    });\n    this.loadSprint();\n    this.reload();\n    this.getCategories();\n    this.isLoading = false;\n    this.typeSelected = '1,3,4';\n    this.link = \"\";\n  }\n\n  _createClass(RequestsComponent, [{\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      this.reload();\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      if (event.keyCode == 13) {\n        this.searchFilter();\n      }\n    }\n  }, {\n    key: \"searchFilter\",\n    value: function searchFilter() {\n      this.currentpage = 1;\n      this.reload();\n    }\n  }, {\n    key: \"filterRequest\",\n    value: function filterRequest(num) {\n      this.isrequest = num;\n      this.reload();\n    }\n  }, {\n    key: \"filterRejected\",\n    value: function filterRejected() {\n      this.reload();\n    }\n  }, {\n    key: \"loadSprint\",\n    value: function loadSprint() {\n      var _this2 = this;\n\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this2.mysprints = [];\n        _this2.mysprints.push({\n          label: \"Backlog\",\n          value: 0\n        });\n        var _iteratorNormalCompletion5 = true;\n        var _didIteratorError5 = false;\n        var _iteratorError5 = undefined;\n\n        try {\n          for (var _iterator5 = res.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n            var c = _step5.value;\n\n            _this2.mysprints.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n            _this2.selectedprojects.push(c.proj_id);\n          }\n        } catch (err) {\n          _didIteratorError5 = true;\n          _iteratorError5 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion5 && _iterator5.return) {\n              _iterator5.return();\n            }\n          } finally {\n            if (_didIteratorError5) {\n              throw _iteratorError5;\n            }\n          }\n        }\n      });\n      this.getprojects();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this3 = this;\n\n      this.isLoading = true;\n      this.requests = [];\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search.trim(),\n        type: this.textState,\n        orderby: this.posOrder,\n        isrequest: this.isrequest,\n        orderdesc: this.orderDesc ? \"desc\" : \"\",\n        rejected: this.rejected\n      };\n      this.filter_excel = filter;\n      this._request.getMyRequests(filter).subscribe(function (res) {\n        _this3.requests = res.data.data;\n        _this3.isLoading = false;\n        if (_this3.textState[0] == \"\" || _this3.textState.length == 0 || _this3.textState.length == 3) {\n          _this3.itemcount = res.data.count;\n        } else {\n          if (_this3.textState[0] == \"1\") {\n            _this3.itemcount = res.data.errors;\n          }\n          if (_this3.textState[0] == \"3\") {\n            _this3.itemcount = res.data.improving;\n          }\n          if (_this3.textState[0] == \"4\") {\n            _this3.itemcount = res.data.implementations;\n          }\n        }\n        _this3.lastpage = _this3.itemcount / _this3.limitpage;\n        if (_this3.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this3.lastpage);\n          _this3.lastpage = countpag;\n        }\n        _this3.cant_e = res.data.errors;\n        _this3.cant_ia = res.data.improving;\n        _this3.cant_im = res.data.implementations;\n\n        _this3.pages = [];\n        for (var i = 1; i <= _this3.lastpage; i++) {\n          _this3.pages.push(i);\n        }\n        for (var _i = 0; _i < _this3.types.length; _i++) {\n          if (_this3.types[_i].type_id == 1) {\n            _this3.types[_i].count = _this3.cant_e;\n          } else if (_this3.types[_i].type_id == 3) {\n            _this3.types[_i].count = _this3.cant_ia;\n          } else if (_this3.types[_i].type_id == 4) {\n            _this3.types[_i].count = _this3.cant_im;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getComments\",\n    value: function getComments(tk) {\n      var _this4 = this;\n\n      this.mdT.comments = [];\n      this._tasks.getComments(tk).subscribe(function (res) {\n        _this4.task.comments = res.data;\n        _this4.mdT.comments = res.data;\n        var elem = document.getElementById(\"mdTComments\");\n        var elem2 = document.getElementById(\"taskComments\");\n        if (elem && elem2) {\n          elem.scrollTop = elem.scrollHeight;\n          elem2.scrollTop = elem2.scrollHeight;\n        }\n      });\n      this.note_text = \"\";\n      this.note = { attachments: [] };\n    }\n  }, {\n    key: \"editModal\",\n    value: function editModal(ev) {\n      if (!ev.attachments) {\n        ev.attachments = [];\n      }\n      this.note = { attachments: [] };\n      this.task = ev;\n      this.getComments(ev.task_id);\n      $(\"#addDescription\").removeClass(\"in\");\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(taskid) {\n      var _this5 = this;\n\n      this._tasks.getAttachments(taskid).subscribe(function (res) {\n        _this5.mdT.attachments = res.data;\n        _this5.task.attachments = res.data;\n        for (var i = 0; i < _this5.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this5.mdT.total_attachments = 1;\n          } else {\n            _this5.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this5.task.attachments.length; i++) {\n          if (i == 0) {\n            _this5.task.total_attachments = 1;\n          } else {\n            _this5.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event, action) {\n      if (action == \"new\") {\n        var files = event.files;\n        if (this.taskattch.attachments.length > 0) {\n          var _iteratorNormalCompletion6 = true;\n          var _didIteratorError6 = false;\n          var _iteratorError6 = undefined;\n\n          try {\n            for (var _iterator6 = this.taskattch.attachments[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n              var c = _step6.value;\n\n              if (files[0][\"name\"] == c.name) {} else {\n                this.taskattch.attachments.push(files[0]);\n              }\n            }\n          } catch (err) {\n            _didIteratorError6 = true;\n            _iteratorError6 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                _iterator6.return();\n              }\n            } finally {\n              if (_didIteratorError6) {\n                throw _iteratorError6;\n              }\n            }\n          }\n        } else {\n          this.taskattch.attachments.push(files[0]);\n        }\n      } else if (action == \"delete\") {\n        var file = event.file;\n        var _iteratorNormalCompletion7 = true;\n        var _didIteratorError7 = false;\n        var _iteratorError7 = undefined;\n\n        try {\n          for (var _iterator7 = this.taskattch.attachments[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n            var _c = _step7.value;\n\n            if (file[\"name\"] == _c.name) {\n              var posattch = this.taskattch.attachments.indexOf(_c);\n              this.taskattch.attachments.splice(posattch);\n            }\n          }\n        } catch (err) {\n          _didIteratorError7 = true;\n          _iteratorError7 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion7 && _iterator7.return) {\n              _iterator7.return();\n            }\n          } finally {\n            if (_didIteratorError7) {\n              throw _iteratorError7;\n            }\n          }\n        }\n      }\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n\n      var files = event.target.files;\n      if (!this.task.attachments) {\n        this.task.attachments = [];\n      }\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"downloadFile\",\n    value: function downloadFile(item, event) {\n      var file = item;\n      var filename = item.name;\n      var blob = new Blob([file]);\n      var url = URL.createObjectURL(blob);\n\n      var element = event.srcElement;\n      $(element).attr({ 'download': filename, 'href': url });\n    }\n  }, {\n    key: \"deleteAttachmentNT\",\n    value: function deleteAttachmentNT(att) {\n      for (var i in this.note.attachments) {\n        if (this.note.attachments[i] === att) {\n          this.note.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this6 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this6.toastr.error(res.message, \"Error!\");\n            } else {\n              _this6.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this6.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n\n      var index = 0;\n      for (var i in this.task.attachments) {\n        if (att.name == this.task.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n\n      this.task.attachments.splice(index, 1);\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"filterMultipleEmails\",\n    value: function filterMultipleEmails(event) {\n      var query = event.query;\n      this.listmails = this.filter(query, this.listmailsa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"addEvent\",\n    value: function addEvent(type_cod, title, background, icon) {\n      this.task = { project: {}, attachments: [] };\n      this.task.taskid = 0;\n      this.mylist.fields = [];\n      this.myfilterfield = { pos: \"para_type\", text: [type_cod], typetittle: title, icon: icon, style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n      $(\"#mdEditRequest\").modal(\"show\");\n      this.activeTabDescription_editRequest();\n    }\n  }, {\n    key: \"showRequest\",\n    value: function showRequest(asigned_to, canclose, type, task_id, type_id, type_name) {\n      var _this7 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.mytask = task_id;\n      if (type == \"Request\") {\n        if (asigned_to == \"forme\") {\n          this._tasks.getTask(task_id).subscribe(function (res) {\n            _this7.task = res.data;\n            _this7._tasks.getTaskFields(task_id).subscribe(function (res) {\n              // this.task.form = res.data;\n              _this7.task.fields = res.data;\n              _this7.getAttachments(task_id);\n            });\n            $(\"#mdEditTask\").modal(\"show\");\n            _this7.activeTabDescription_editTask();\n          });\n        } else {\n          if (canclose == 1) {\n            this._tasks.getMyTask(task_id).subscribe(function (res) {\n              _this7.task = res.data;\n              _this7.myfilterfield = { pos: \"para_type\", text: [_this7.task.para_type], typetittle: type_name, icon: _this7.task.icon, style: { 'background': _this7.task.background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n              _this7.task.task_description_r = _this7.task.task_description;\n              _this7.task.task_description = \"\";\n              _this7._tasks.getTaskFields(task_id).subscribe(function (res) {\n                _this7.task.fields = res.data;\n              });\n              $(\"#mdEditRequest\").modal(\"show\");\n              _this7.activeTabDescription_editRequest();\n            });\n          }\n        }\n      }\n    }\n  }, {\n    key: \"getCategories\",\n    value: function getCategories() {\n      var _this8 = this;\n\n      this.categorieslbl = [];\n      this._categories.getCategories().subscribe(function (data) {\n        _this8.categories = data.data;\n        var _iteratorNormalCompletion8 = true;\n        var _didIteratorError8 = false;\n        var _iteratorError8 = undefined;\n\n        try {\n          for (var _iterator8 = data.data[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n            var c = _step8.value;\n\n            _this8.categorieslbl.push({\n              label: c.cate_desc + ' - ' + c.prod_name,\n              value: c.cate_id,\n              para_type: c.para_type,\n              prod_id: c.prod_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError8 = true;\n          _iteratorError8 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion8 && _iterator8.return) {\n              _iterator8.return();\n            }\n          } finally {\n            if (_didIteratorError8) {\n              throw _iteratorError8;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"showCategories\",\n    value: function showCategories(type_cod, title, background, icon) {\n      this.myfilterfield = { pos: \"para_type\", text: [type_cod], typetittle: title, icon: icon, style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n      $(\"#mdCategory\").modal(\"show\");\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this9 = this;\n\n      var fields_valid = true;\n      for (var i in this.task.fields) {\n        if (this.task.fields[i].form_mandatory == true && (this.task.fields[i].form_data == undefined || this.task.fields[i].form_data.trim() == \"\")) {\n          fields_valid = false;\n        }\n      }\n\n      if (fields_valid) {\n        if (this.task.task_description_r) {\n          this.task.task_description = this.task.task_description_r;\n        }\n        this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\").split(\"\\n\").join(\"\").split(\"\\r\").join(\"\");\n        if (this.task.task_delivery) {\n          this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n        }\n        this.task.isrequest = \"true\";\n        $('.addRequest').attr(\"disabled\");\n        this.isLoading = true;\n        this._tasks.putTask(this.task).subscribe(function (res) {\n          _this9.isLoading = false;\n          if (res.data == \"\" || res.data == \"0\") {\n            _this9.toastr.error(res.message, \"Error!\");\n          } else {\n            for (var i = 0; i < _this9.task.fields.length; i++) {\n              if (_this9.task.fields[i].form_data != undefined) {\n                _this9.task.fields[i].form_data = _this9.task.fields[i].form_data.trim();\n              }\n              if (!_this9.task.fields[i].task_id > 0) {\n                _this9.task.fields[i].task_id = res.data;\n              }\n            }\n            _this9._tasks.putTaskFields(_this9.task.task_id, _this9.task.fields).subscribe(function (rex) {});\n            _this9.toastr.success(res.message, \"Task saved successfully\");\n          }\n          _this9.task = { project: {}, attachments: [] };\n          $(\"#mdEditRequest\").modal(\"hide\");\n          $(\"#mdEditTask\").modal(\"hide\");\n          _this9.reload();\n        });\n        this.mytask = 0;\n      } else {\n        this.toastr.warning(\"Please fill out all required fields\");\n      }\n    }\n  }, {\n    key: \"getprojects\",\n    value: function getprojects() {\n      var _this10 = this;\n\n      var closure = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function () {};\n\n      this.myProjects = [];\n      this.selectedprojects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this10.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        _this10.selectedprojects = [0];\n        if (res.data.planning) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = res.data.planning[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var c = _step9.value;\n\n              _this10.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n              _this10.selectedprojects.push(c.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion10 = true;\n          var _didIteratorError10 = false;\n          var _iteratorError10 = undefined;\n\n          try {\n            for (var _iterator10 = res.data.buildup[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n              var _c2 = _step10.value;\n\n              _this10.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n              _this10.selectedprojects.push(_c2.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError10 = true;\n            _iteratorError10 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                _iterator10.return();\n              }\n            } finally {\n              if (_didIteratorError10) {\n                throw _iteratorError10;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion11 = true;\n          var _didIteratorError11 = false;\n          var _iteratorError11 = undefined;\n\n          try {\n            for (var _iterator11 = res.data.implementation[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n              var _c3 = _step11.value;\n\n              _this10.myProjects.push({\n                label: _c3.proj_id + \" \" + _c3.proj_subject,\n                value: _c3.proj_id,\n                idcolor: _c3.idcolor\n              });\n              _this10.selectedprojects.push(_c3.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError11 = true;\n            _iteratorError11 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                _iterator11.return();\n              }\n            } finally {\n              if (_didIteratorError11) {\n                throw _iteratorError11;\n              }\n            }\n          }\n        }\n        closure();\n      });\n    }\n  }, {\n    key: \"noteAdd\",\n    value: function noteAdd(idtask, type) {\n      var _this11 = this;\n\n      this.note.task_id = idtask;\n      if (this.note.note_text == undefined && this.note_text != null && this.note_text != \"\") {\n        this.note.note_text = this.note_text;\n      }\n      this._notes.putNote(this.note).subscribe(function (data) {\n        if (data.data != null) {\n          _this11.toastr.success(data.message, \"Note added Successfully\");\n          _this11.getComments(idtask);\n        } else {\n          _this11.toastr.warning(\"\", data.message);\n          $(\".textarea-comments\").val(\"\");\n        }\n      });\n    }\n  }, {\n    key: \"createForm\",\n    value: function createForm(catid) {\n      var _this12 = this;\n\n      this.position = -1;\n      var array_list = [];\n      this.task.fields = [];\n      this._categories.getFieldsCategory(catid).subscribe(function (res) {\n        _this12.task.fields = res.data;\n        if (_this12.task.fields && _this12.task.fields.length > 0) {\n          _this12.tagMenuRequest = 1;\n          $('#li_description_request').removeClass('active');\n          $('#li_associate_form_request').addClass('active');\n        } else {\n          _this12.tagMenuRequest = 2;\n          $('#li_associate_form_request').removeClass('active');\n          $('#li_description_request').addClass('active');\n        }\n      });\n    }\n  }, {\n    key: \"activeTabs\",\n    value: function activeTabs() {\n      this.tagMenuRequest = 2;\n      $('#li_associate_form_request').removeClass('active');\n      $('#li_description_request').addClass('active');\n    }\n  }, {\n    key: \"lpad\",\n    value: function lpad(n, width, z) {\n      z = z || \"0\";\n      n = n || \"0\";\n      n = n + \"\";\n      return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      this.typeSelected = state.toString();\n      this.textState = state;\n      this.posState = \"type_name\";\n      this.currentpage = 1;\n      this.isrequest = \"\";\n      this.reload();\n    }\n  }, {\n    key: \"setInfoTask\",\n    value: function setInfoTask(info) {\n      this.timeline = info;\n      //this.textInfo = info;\n      //this.posInfo = \"info_text\";\n    }\n  }, {\n    key: \"closeTask\",\n    value: function closeTask(idtk) {\n      var _this13 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Close this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this13._tasks.setStatusTask(idtk, 42).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this13.toastr.success(\"Request closed successfully\");\n                _this13.reload();\n              } else {\n                _this13.toastr.error(\"This action is not allowed. Only Completed tasks can be moved to Closed\");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"deleteTask\",\n    value: function deleteTask(idtk) {\n      var _this14 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Delete this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this14._tasks.setStatusTask(idtk, 43).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this14.toastr.success(\"Request deleted successfully\");\n                _this14.reload();\n              } else {\n                _this14.toastr.error(\"\");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"reopenTask\",\n    value: function reopenTask(idtk) {\n      var _this15 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to Reopen this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this15._tasks.reopenTask(idtk, 37).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this15.toastr.success(\"Request reopen successfully\");\n                _this15.reload();\n              } else {\n                _this15.toastr.error(\"\");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"rejectTask\",\n    value: function rejectTask() {\n      var _this16 = this;\n\n      this._tasks.rejectTask(this.rjtask.task_id, this.rjtask.retk_description).subscribe(function (data) {\n        if (data.data != \"OK\") {\n          _this16.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this16.toastr.success(data.message, \"Task rejected\");\n        }\n        _this16.reload();\n      });\n    }\n  }, {\n    key: \"showReject\",\n    value: function showReject(dv) {\n      var _this17 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Reject this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (dv) {\n            _this17.rjtask.task_id = dv.task_id;\n            _this17.rjtask.retk_description = \"\";\n            $(\"#mdRj\").modal(\"show\");\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"showImprov\",\n    value: function showImprov(dv) {\n      var _this18 = this;\n\n      this.head = [];\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want move to Improving this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (dv) {\n            _this18.imptask.task_id = dv.task_id;\n            _this18.imptask.imtk_description = \"\";\n            $(\"#mdImp\").modal(\"show\");\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"impTask\",\n    value: function impTask() {\n      var _this19 = this;\n\n      this._tasks.impTask(this.imptask.task_id, this.rjtask.retk_description, 2).subscribe(function (data) {\n        if (data.data != \"OK\") {\n          _this19.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this19.toastr.success(data.message, \"Task moved to improving\");\n        }\n        _this19.reload();\n      });\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n      this.reload();\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.reload();\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          // text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n      if (opt == 3) {\n        this.tagMenu = 3;\n      }\n    }\n  }, {\n    key: \"setPageRequest\",\n    value: function setPageRequest(opt) {\n      if (opt == 1) {\n        this.tagMenuRequest = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuRequest = 2;\n      }\n      if (opt == 3) {\n        this.tagMenuRequest = 3;\n      }\n    }\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"activeTabDescription_editTask\",\n    value: function activeTabDescription_editTask() {\n      this.tagMenu = 1;\n      $('#li_associate_form_task').removeClass('active');\n      $('#li_attachments_editTask').removeClass('active');\n      $('#li_description_task').addClass('active');\n    }\n  }, {\n    key: \"activeTabDescription_editRequest\",\n    value: function activeTabDescription_editRequest() {\n      this.tagMenuRequest = 2;\n      $('#li_associate_form_request').removeClass('active');\n      $('#li_attachments_request').removeClass('active');\n      $('#li_description_request').addClass('active');\n    }\n  }, {\n    key: \"deleteAttachmentTask_editTask\",\n    value: function deleteAttachmentTask_editTask(task, att) {\n      var _this20 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this20.toastr.error(res.message, \"Error!\");\n            } else {\n              _this20.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this20.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n\n      if (task.attachments.length == 0) {\n        this.activeTabDescription_editTask();\n      }\n    }\n  }, {\n    key: \"deleteAttachment_editTask\",\n    value: function deleteAttachment_editTask(att) {\n\n      var index = 0;\n      for (var i in this.task.attachments) {\n        if (att.name == this.task.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n\n      this.task.attachments.splice(index, 1);\n\n      if (this.task.attachments.length == 0) {\n        this.activeTabDescription_editTask();\n      }\n    }\n  }, {\n    key: \"deleteAttachmentTask_editRequest\",\n    value: function deleteAttachmentTask_editRequest(task, att) {\n      var _this21 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this21.toastr.error(res.message, \"Error!\");\n            } else {\n              _this21.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this21.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n\n      if (task.attachments.length == 0) {\n        this.activeTabDescription_editRequest();\n      }\n    }\n  }, {\n    key: \"deleteAttachment_editRequest\",\n    value: function deleteAttachment_editRequest(att) {\n\n      var index = 0;\n      for (var i in this.task.attachments) {\n        if (att.name == this.task.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n\n      this.task.attachments.splice(index, 1);\n\n      if (this.task.attachments.length == 0) {\n        this.activeTabDescription_editRequest();\n      }\n    }\n  }, {\n    key: \"createNewProject\",\n    value: function createNewProject(task) {\n\n      this.project.proj_subject = task.task_subject;\n      this.project.prod_id = task.prod_id;\n      this.project.user_applicant = task.user_asigned;\n      this.project.group_assigned = task.grop_id;\n      this.project.prod_id = task.prod_id;\n      this.project.proj_end = task.task_delivery;\n      this.project.proj_propoints = task.task_points;\n      this.project.proj_description = task.task_description;\n      this.project.attachments = task.attachments;\n\n      $('#li_description_project').addClass('active');\n      $(\"#mdproject\").modal(\"show\");\n    }\n  }, {\n    key: \"validateProj\",\n    value: function validateProj() {\n      return !this.project.proj_subject || this.project.proj_subject.trim() == \"\" || !this.project.proj_description || this.project.proj_description.trim() == \"\" || !this.project.prod_id || this.project.prod_id.trim() == \"\" || !this.project.group_assigned || this.project.group_assigned.trim() == \"\" || !this.project.user_applicant || this.project.user_applicant.trim() == \"\" || !this.project.proj_end || this.project.proj_end == \"\" || this.project.proj_end == \"undefined\" || !this.project.proj_propoints || this.project.proj_propoints == \"\" || this.project.proj_propoints == \"undefined\";\n    }\n  }, {\n    key: \"filterMultipleShared\",\n    value: function filterMultipleShared(event) {\n      var query = event.query;\n      this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n    }\n  }, {\n    key: \"filterShared\",\n    value: function filterShared(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"saveproject\",\n    value: function saveproject() {\n      var _this22 = this;\n\n      var newProject = 0;\n      this.project.proj_end = new Date(this.project.proj_end);\n      this.project.proj_end = this.project.proj_end.getFullYear() + \"-\" + (this.project.proj_end.getMonth() + 1) + \"-\" + this.project.proj_end.getDate();\n\n      var users_share = [];\n\n      for (var user in this.project.userssh) {\n        users_share.push(this.project.userssh[user].user_id);\n      }\n\n      var project = Object.assign({}, this.project);\n      project.users = users_share;\n\n      this.isLoading = true;\n\n      this._projects.putproject(project).subscribe(function (data) {\n        newProject = data.data;\n\n        _this22.isLoading = false;\n\n        if (data.data === \"\" || data.data === \"0\" || data.data == null) {\n          _this22.toastr.warning(data.message, \"Attention!\");\n        } else {\n          _this22.toastr.success(data.message, \"project saved successfully\");\n        }\n\n        _this22.getprojects(function () {\n          _this22.task.proj_id = newProject;\n        });\n\n        _this22.project = { attachments: [] };\n      });\n    }\n  }, {\n    key: \"reloadResults\",\n    value: function reloadResults() {\n      this.currentpage = 1;\n      this.reload();\n    }\n  }, {\n    key: \"exportExcel\",\n    value: function exportExcel() {\n      var _this23 = this;\n\n      this._request.getExcel(this.filter_excel).subscribe(function (res) {\n        var route = res.data;\n        if (res.message == 'OK') {\n          _this23.toastr.success(\"report generated\");\n          //Usaremos un link para iniciar la descarga \n          var save = document.createElement('a');\n          save.href = route;\n          save.target = '_blank';\n          //Truco: así le damos el nombre al archivo\n          save.download = 'report_request';\n          var clicEvent = new MouseEvent('click', {\n            'view': window,\n            'bubbles': true,\n            'cancelable': true\n          });\n          //Simulamos un clic del usuario\n          save.dispatchEvent(clicEvent);\n          //Y liberamos recursos...\n          (window.URL || window.webkitURL).revokeObjectURL(save.href);\n        } else {\n          _this23.toastr.error(\"The document could not be generated\");\n        }\n      });\n    }\n  }]);\n\n  return RequestsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _sprint.SprintService, _product.ProductService, _group.GroupService, _users.UsersService, _ngxToastr.ToastrService, _type.TypeService, _project.ProjectService, _request.RequestService, _task.TaskService, _note.NoteService, _router.ActivatedRoute, _primeng.ConfirmationService, _categories.CategoriesService], RequestsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 414 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.ApprovalsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _task = __webpack_require__(19);\n\nvar _users = __webpack_require__(20);\n\nvar _group = __webpack_require__(11);\n\nvar _categories = __webpack_require__(47);\n\nvar _pipes = __webpack_require__(14);\n\nvar _approvalsTemplate = __webpack_require__(860);\n\nvar _approvalsTemplate2 = _interopRequireDefault(_approvalsTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ApprovalsComponent = exports.ApprovalsComponent = (_dec = (0, _core.Component)({\n    selector: 'approval',\n    template: _approvalsTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n    function ApprovalsComponent(route, toastr, taskService, groupService, userService, productService, projectService, confirmationService, categoriesService) {\n        var _this = this;\n\n        _classCallCheck(this, ApprovalsComponent);\n\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this._categories = categoriesService;\n        this._tasks = taskService;\n        this._groups = groupService;\n        this._user = userService;\n        this._projects = projectService;\n        this._products = productService;\n        this.confirm = confirmationService;\n        this.textState = [\"New\", \"Viewed\", \"Accepted\", \"Develop\", \"Developing\", \"Testing\", \"Completed\", \"Closed\", \"Deleted\", \"Backlog\"];\n        this.posState = \"status\";\n        this.textGroup = \"\";\n        this.posGroup = \"grop_id\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.search = \"\";\n        this.currentpage = 1;\n        this.limitpage = 0;\n        this.task = { ticket: {}, attachments: [] };\n        this.seltasks = [];\n        this.groups = [];\n        this.notemd = { note_text: \"\" };\n        this.getmyProjects();\n        this._groups.getGroups().subscribe(function (data) {\n            _this.groups = data.data;\n        });\n        this._products.getProducts().subscribe(function (data) {\n            _this.products = [];\n            var _iteratorNormalCompletion = true;\n            var _didIteratorError = false;\n            var _iteratorError = undefined;\n\n            try {\n                for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                    var c = _step.value;\n\n                    _this.products.push({ label: c.prod_name, value: c.prod_id });\n                }\n            } catch (err) {\n                _didIteratorError = true;\n                _iteratorError = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion && _iterator.return) {\n                        _iterator.return();\n                    }\n                } finally {\n                    if (_didIteratorError) {\n                        throw _iteratorError;\n                    }\n                }\n            }\n        });\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(function (data) {\n            _this.users = data.data;\n            var _iteratorNormalCompletion2 = true;\n            var _didIteratorError2 = false;\n            var _iteratorError2 = undefined;\n\n            try {\n                for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                    var c = _step2.value;\n\n                    _this.userslbl.push({ label: c.user_lastname + \", \" + c.user_name, value: c.user_id });\n                }\n            } catch (err) {\n                _didIteratorError2 = true;\n                _iteratorError2 = err;\n            } finally {\n                try {\n                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                        _iterator2.return();\n                    }\n                } finally {\n                    if (_didIteratorError2) {\n                        throw _iteratorError2;\n                    }\n                }\n            }\n        });\n        this.reload();\n    }\n\n    _createClass(ApprovalsComponent, [{\n        key: 'ngOnInit',\n        value: function ngOnInit() {}\n    }, {\n        key: 'getmyProjects',\n        value: function getmyProjects() {\n            var _this2 = this;\n\n            this.myProjects = [];\n            this.selectedprojects = [];\n            this._projects.getmyProjects().subscribe(function (res) {\n                _this2.myProjects.push({ label: \" Untracked\", value: \"0\", idcolor: \"#fff\" });\n                _this2.selectedprojects = [0];\n\n                var _iteratorNormalCompletion3 = true;\n                var _didIteratorError3 = false;\n                var _iteratorError3 = undefined;\n\n                try {\n                    for (var _iterator3 = res.data.planning[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                        var c = _step3.value;\n\n                        _this2.myProjects.push({ label: c.proj_id + \" \" + c.proj_subject, value: c.proj_id, idcolor: c.idcolor, productvalue: c.prod_id, productlabel: c.prod_name });\n                        _this2.selectedprojects.push(c.proj_id);\n                    }\n                } catch (err) {\n                    _didIteratorError3 = true;\n                    _iteratorError3 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                            _iterator3.return();\n                        }\n                    } finally {\n                        if (_didIteratorError3) {\n                            throw _iteratorError3;\n                        }\n                    }\n                }\n\n                var _iteratorNormalCompletion4 = true;\n                var _didIteratorError4 = false;\n                var _iteratorError4 = undefined;\n\n                try {\n                    for (var _iterator4 = res.data.buildup[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n                        var _c = _step4.value;\n\n                        _this2.myProjects.push({ label: _c.proj_id + \" \" + _c.proj_subject, value: _c.proj_id, idcolor: _c.idcolor, productvalue: _c.prod_id, productlabel: _c.prod_name });\n                        _this2.selectedprojects.push(_c.proj_id);\n                    }\n                } catch (err) {\n                    _didIteratorError4 = true;\n                    _iteratorError4 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                            _iterator4.return();\n                        }\n                    } finally {\n                        if (_didIteratorError4) {\n                            throw _iteratorError4;\n                        }\n                    }\n                }\n\n                var _iteratorNormalCompletion5 = true;\n                var _didIteratorError5 = false;\n                var _iteratorError5 = undefined;\n\n                try {\n                    for (var _iterator5 = res.data.implementation[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                        var _c2 = _step5.value;\n\n                        _this2.myProjects.push({ label: _c2.proj_id + \" \" + _c2.proj_subject, value: _c2.proj_id, idcolor: _c2.idcolor, productvalue: _c2.prod_id, productlabel: _c2.prod_name });\n                        _this2.selectedprojects.push(_c2.proj_id);\n                    }\n                } catch (err) {\n                    _didIteratorError5 = true;\n                    _iteratorError5 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                            _iterator5.return();\n                        }\n                    } finally {\n                        if (_didIteratorError5) {\n                            throw _iteratorError5;\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: 'setOrder',\n        value: function setOrder(value) {\n            if (this.posOrder === value) {\n                this.orderDesc = !this.orderDesc;\n            }\n            this.posOrder = value;\n        }\n    }, {\n        key: 'setCurPage',\n        value: function setCurPage(value) {\n            var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n            if (cur <= 0) {\n                this.currentpage = 1;\n            } else {\n                if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n                    this.currentpage = cur;\n                }\n            }\n        }\n    }, {\n        key: 'reload',\n        value: function reload() {\n            var _this3 = this;\n\n            this.tareas = [];\n            this.approvals = [];\n            this._categories.getMyApprovals().subscribe(function (data) {\n                var _iteratorNormalCompletion6 = true;\n                var _didIteratorError6 = false;\n                var _iteratorError6 = undefined;\n\n                try {\n                    for (var _iterator6 = data.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                        var v = _step6.value;\n\n                        _this3.approvals.push(v.cate_id);\n                    }\n                } catch (err) {\n                    _didIteratorError6 = true;\n                    _iteratorError6 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                            _iterator6.return();\n                        }\n                    } finally {\n                        if (_didIteratorError6) {\n                            throw _iteratorError6;\n                        }\n                    }\n                }\n            });\n\n            this._tasks.getTasks().subscribe(function (data) {\n                var _iteratorNormalCompletion7 = true;\n                var _didIteratorError7 = false;\n                var _iteratorError7 = undefined;\n\n                try {\n                    for (var _iterator7 = data.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n                        var c = _step7.value;\n\n                        if (c.task_approved == 0 && c.task_closed == null && _this3.approvals.indexOf(c.cate_id) >= 0) {\n                            _this3.tareas.push(c);\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError7 = true;\n                    _iteratorError7 = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                            _iterator7.return();\n                        }\n                    } finally {\n                        if (_didIteratorError7) {\n                            throw _iteratorError7;\n                        }\n                    }\n                }\n\n                _this3.tasks = _this3.tareas;\n                _this3.limitpage = _this3.tasks.length > 20 ? 20 : _this3.tasks.length;\n                _this3.itemcount = _this3.tasks.length;\n            });\n        }\n    }, {\n        key: 'addComment',\n        value: function addComment() {\n            var _this4 = this;\n\n            this.notemd.task_id = this.task.task_id;\n            this._notes.putNote(note).subscribe(function (data) {\n                _this4.notemd = { note_text: \"\" };\n            });\n        }\n    }, {\n        key: 'addTask',\n        value: function addTask() {\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.task = { ticket: {}, attachments: [] };\n        }\n    }, {\n        key: 'showModal',\n        value: function showModal(idtk) {\n            var _this5 = this;\n\n            // console.log(idtk);\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.task = { ticket: {}, attachments: [] };\n            if (!idtk.proj_id) {\n                this._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n                    idtk.attachments = res.data;\n                    _this5.task = idtk;\n                    $('#mdTask').modal('show');\n                });\n            } else {\n                this._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n                    idtk.attachments = res.data;\n                    _this5.task = idtk;\n                });\n                this._projects.getTicket(idtk.proj_id).subscribe(function (res) {\n                    _this5.task = idtk;\n                    _this5.task.ticket = res.data;\n                    _this5.task.ticket.proj_description = _this5._sanitizer.bypassSecurityTrustHtml(_this5.task.ticket.proj_description.split('\"').join(\"'\"));\n                    $('#mdTask').modal('show');\n                });\n            }\n        }\n    }, {\n        key: 'showEditModal',\n        value: function showEditModal(idtk) {\n            var _this6 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n                idtk.attachments = res.data;\n                _this6.task = idtk;\n                $('#mdEditTask').modal('show');\n            });\n        }\n    }, {\n        key: 'openTask',\n        value: function openTask(idtk) {\n            var _this7 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.confirm.confirm({\n                message: 'Do you want to proceed?',\n                header: 'Confirmation',\n                icon: 'fa fa-question-circle',\n                accept: function accept() {\n                    if (idtk) {\n                        _this7._tasks.setStatusTask(idtk, 1).subscribe(function (data) {\n                            _this7.reload();\n                            _this7.toastr.success(\"Task opened successfully\");\n                        });\n                    } else {\n                        if (_this7.seltasks.length > 0) {\n                            for (var x in _this7.seltasks) {\n                                _this7._tasks.setStatusTask(_this7.seltasks[x], 1).subscribe(function (data) {});\n                            }\n                            _this7.seltasks = [];\n                            _this7.reload();\n                            _this7.toastr.success(\"Task opened successfully\");\n                        }\n                    }\n                },\n                reject: function reject() {\n                    //\n                }\n            });\n        }\n    }, {\n        key: 'closeTask',\n        value: function closeTask(idtk) {\n            var _this8 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.confirm.confirm({\n                message: 'Do you want to proceed?',\n                header: 'Confirmation',\n                icon: 'fa fa-question-circle',\n                accept: function accept() {\n                    if (idtk) {\n                        _this8._tasks.setStatusTask(idtk, 42).subscribe(function (data) {\n                            _this8.reload();\n                            _this8.toastr.success(\"Task closed successfully\");\n                        });\n                    } else {\n                        if (_this8.seltasks.length > 0) {\n                            for (var x in _this8.seltasks) {\n                                _this8._tasks.setStatusTask(_this8.seltasks[x], 42).subscribe(function (data) {});\n                            }\n                            _this8.seltasks = [];\n                            _this8.reload();\n                            _this8.toastr.success(\"Task closed successfully\");\n                        }\n                    }\n                },\n                reject: function reject() {\n                    //\n                }\n            });\n        }\n    }, {\n        key: 'deleteTask',\n        value: function deleteTask(idtk) {\n            var _this9 = this;\n\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.confirm.confirm({\n                message: 'Do you want to proceed?',\n                header: 'Confirmation',\n                icon: 'fa fa-question-circle',\n                accept: function accept() {\n                    if (idtk) {\n                        _this9._tasks.setStatusTask(idtk, 43).subscribe(function (data) {\n                            _this9.reload();\n                            _this9.toastr.success(\"Task deleted successfully\");\n                        });\n                    } else {\n                        if (_this9.seltasks.length > 0) {\n                            for (var x in _this9.seltasks) {\n                                _this9._tasks.setStatusTask(_this9.seltasks[x], 43).subscribe(function (data) {});\n                            }\n                            _this9.seltasks = [];\n                            _this9.toastr.success(\"Tasks deleted successfully\");\n                            _this9.reload();\n                        }\n                    }\n                },\n                reject: function reject() {}\n            });\n        }\n    }, {\n        key: 'selectAll',\n        value: function selectAll() {\n            if (this.seltasks.length > 0) {\n                this.seltasks = [];\n            } else {\n                this.seltasks = [];\n                for (var t in this.tasks) {\n                    this.seltasks.push(this.tasks[t].task_id);\n                }\n            }\n        }\n    }, {\n        key: 'setStateList',\n        value: function setStateList(state) {\n            this.textState = state;\n            this.posState = \"tsst_name\";\n            this.currentpage = 1;\n            this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n            this.itemcount = this.tasks.length;\n        }\n    }, {\n        key: 'setGroupList',\n        value: function setGroupList(state) {\n            this.textGroup = state;\n            this.currentpage = 1;\n            this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n            this.itemcount = this.tasks.length;\n        }\n    }, {\n        key: 'saveTask',\n        value: function saveTask() {\n            var _this10 = this;\n\n            this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n            this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n            this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n            this.task.task_delivery = new Date(this.task.task_delivery);\n            this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n            this._tasks.putTask(this.task).subscribe(function (data) {\n                if (data.data === \"\" || data.data === \"0\") {\n                    _this10.toastr.warning(data.message, \"Good news!\");\n                } else {\n                    _this10.toastr.success(data.message, \"Task saved successfully\");\n                }\n                _this10.reload();\n                _this10.task = { attachments: [] };\n            });\n        }\n    }, {\n        key: 'onChange',\n        value: function onChange(event) {\n            var files = event.srcElement.files;\n            this.task.attachments.push(files[0]);\n        }\n    }, {\n        key: 'escapeHtml',\n        value: function escapeHtml(text) {\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }, {\n        key: 'acceptTask',\n        value: function acceptTask(task) {\n            var _this11 = this;\n\n            if (this.approvals.indexOf(task.cate_id) >= 0) {\n                this._tasks.acceptTask(task.task_id, task.cate_id).subscribe(function (data) {\n                    _this11.toastr.success(data.message, \"Task accepted Successfully\");\n                });\n            }\n            $('[data-toggle=\"tooltip\"]').tooltip('hide');\n            this.reload();\n        }\n    }]);\n\n    return ApprovalsComponent;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_router.Router, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _users.UsersService, _product.ProductService, _project.ProjectService, _primeng.ConfirmationService, _categories.CategoriesService], ApprovalsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 415 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ProjectboardComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _note = __webpack_require__(24);\n\nvar _pipes = __webpack_require__(14);\n\nvar _projectboardTemplate = __webpack_require__(861);\n\nvar _projectboardTemplate2 = _interopRequireDefault(_projectboardTemplate);\n\nvar _project2 = __webpack_require__(83);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ProjectboardComponent = exports.ProjectboardComponent = (_dec = (0, _core.Component)({\n  selector: \"projectboard\",\n  template: _projectboardTemplate2.default,\n  pipes: [_pipes.FilterPipe],\n  providers: [_primeng.ConfirmationService],\n  declarations: [_project2.ProjectViewComponent],\n  styles: [\".box-header {background-color: #c7c7c7; color: #fff;}\"]\n}), _dec(_class = function () {\n  function ProjectboardComponent(title, router, sanitizer, ProjectService, productService, noteService, confirmationService, toastr) {\n    var _this = this;\n\n    _classCallCheck(this, ProjectboardComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.project = {};\n    this.note = {};\n    this.products = [];\n    this.selectedProduct = [];\n    this.selectedprojects = [];\n    this.costreport = [];\n    this.variablereport = [];\n    this.showAddItem = false;\n    this.fixedreport = [];\n    this.totalcost = 0;\n    this.totalfixed = 0;\n    this.totalvariable = 0;\n    this.totalvariablemoney = 0;\n    this.totalfixedmoney = 0;\n    this.itemTotal = \"\";\n    this.curBudget = 'fixed';\n    this.costDisplayed = {};\n    this.costtypes = [{ label: 'Unit Cost', value: 'unit' }, { label: 'Total Cost', value: 'total' }];\n    this.units = [];\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : ProjectBoard ::.\");\n    this._products.getProducts().subscribe(function (data) {\n      _this.products = [];\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.products.push({ label: c.prod_name, value: c.prod_id });\n          _this.selectedProduct.push(c.prod_id);\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this.reload();\n  }\n\n  _createClass(ProjectboardComponent, [{\n    key: \"reload\",\n    value: function reload() {\n      var _this2 = this;\n\n      this.myprojects = [];\n      this._projects.getmyProjects().subscribe(function (data) {\n        _this2.myprojects = data.data;\n      });\n    }\n  }, {\n    key: \"showProject\",\n    value: function showProject(projid) {\n\n      $(\"#myProject\" + projid).click();\n    }\n  }, {\n    key: \"sendMessage\",\n    value: function sendMessage(projid) {\n      var _this3 = this;\n\n      this.note.proj_id = this.project.proj_id;\n      this._notes.putNote(this.note).subscribe(function (data) {\n        _this3.getMessages(projid);\n        _this3.note = { attachments: [] };\n      });\n    }\n  }, {\n    key: \"getMessages\",\n    value: function getMessages(projid) {\n      var _this4 = this;\n\n      this._projects.getprojectNotes(projid).subscribe(function (data) {\n        _this4.project.messages = data.data;\n      });\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      return text ? text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\") : \"\";\n    }\n  }, {\n    key: \"transformToMoney\",\n    value: function transformToMoney(number) {\n      var money = '';\n      var parts = number.toString().split(\".\");\n      parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n      money = parts.join(\".\");\n      return money;\n    }\n  }, {\n    key: \"updateUnits\",\n    value: function updateUnits(type) {\n      switch (type) {\n        case 'unit':\n          this.units = [{ label: '$/Hour', value: 'hour' }, { label: '$/Month', value: 'month' }];\n          break;\n        case 'total':\n          this.costDisplayed = {};\n          this.itemTotal = 0;\n          break;\n        default:\n          break;\n      }\n    }\n  }, {\n    key: \"displayUnits\",\n    value: function displayUnits(unitSelected) {\n      switch (unitSelected) {\n        case 'hour':\n          this.costDisplayed = { title: 'Cost per hour', measure: '# of Hours', units: '# of Units' };\n          break;\n        case 'point':\n          this.costDisplayed = { title: 'Cost per point', measure: '# of Points', units: '# of Units' };\n          break;\n        case 'month':\n          this.costDisplayed = { title: 'Cost per month', measure: '# of months', units: '# of Units' };\n          break;\n        default:\n          break;\n      }\n    }\n  }, {\n    key: \"changeBudget\",\n    value: function changeBudget(budget) {\n      if (this.curBudget != budget) {\n        this.curBudget = budget;\n        $('.tab-squadlinx').toggleClass('selected');\n      }\n    }\n  }, {\n    key: \"showAddMenu\",\n    value: function showAddMenu(show) {\n      this.newItem = {};\n      this.showAddItem = show;\n      this.costDisplayed = {};\n    }\n  }, {\n    key: \"setStatusproject\",\n    value: function setStatusproject(project, status) {\n      var _this5 = this;\n\n      this._projects.setStatusproject(project.proj_id, status).subscribe(function (res) {\n        if (res.data != \"OK\") {\n          _this5.toastr.error(res.message);\n        } else {\n          _this5.reload();\n        }\n      });\n    }\n  }, {\n    key: \"getBackground\",\n    value: function getBackground(idproject) {\n      // if (idproject) {\n      //   for (let t of this.myProjects) {\n      //     if (t.value == idproject) {\n      //       return t.idcolor;\n      //     }\n      //   }\n      // }\n      return \"#fff\";\n    }\n  }]);\n\n  return ProjectboardComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _project.ProjectService, _product.ProductService, _note.NoteService, _primeng.ConfirmationService, _ngxToastr.ToastrService], ProjectboardComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 416 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.StaticComponent = undefined;\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _staticTemplate = __webpack_require__(862);\n\nvar _staticTemplate2 = _interopRequireDefault(_staticTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar StaticComponent = exports.StaticComponent = (_dec = (0, _core.Component)({\n  selector: \"static\",\n  template: _staticTemplate2.default\n}), _dec(_class = function StaticComponent(router, sanitizer, groupService, sprintService, toastr, confirmationService) {\n  var _this = this;\n\n  _classCallCheck(this, StaticComponent);\n\n  this._router = router;\n  this.toastr = toastr;\n  this.toastr.options = {\n    \"preventDuplicates\": true,\n    \"preventOpenDuplicates\": true\n  };\n  this.confirm = confirmationService;\n  this._sanitizer = sanitizer;\n  this._groups = groupService;\n  this._sprint = sprintService;\n  this.search = \"\";\n  this.posOrder = \"\";\n  this.orderDesc = false;\n  this.currentpage = 1;\n  this.limitpage = 0;\n  this.groups = [];\n  this.lblgroups = [];\n  this._groups.getGroups().subscribe(function (data) {\n    _this.groups = data.data;\n    var _iteratorNormalCompletion = true;\n    var _didIteratorError = false;\n    var _iteratorError = undefined;\n\n    try {\n      for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n        var c = _step.value;\n\n        _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n    } catch (err) {\n      _didIteratorError = true;\n      _iteratorError = err;\n    } finally {\n      try {\n        if (!_iteratorNormalCompletion && _iterator.return) {\n          _iterator.return();\n        }\n      } finally {\n        if (_didIteratorError) {\n          throw _iteratorError;\n        }\n      }\n    }\n  });\n}) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.Router, _platformBrowser.DomSanitizer, _group.GroupService, _sprint.SprintService, _ngxToastr.ToastrService, _primeng.ConfirmationService], StaticComponent);\n\n/***/ }),\n/* 417 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.BurndownComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _dashboard = __webpack_require__(44);\n\nvar _app = __webpack_require__(248);\n\nvar _burndownTemplate = __webpack_require__(863);\n\nvar _burndownTemplate2 = _interopRequireDefault(_burndownTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar BurndownComponent = exports.BurndownComponent = (_dec = (0, _core.Component)({\n  selector: \"dashboard\",\n  template: _burndownTemplate2.default\n}), _dec(_class = function () {\n  function BurndownComponent(router, sanitizer, dashboardService, appService, arouter) {\n    _classCallCheck(this, BurndownComponent);\n\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._dashBoard = dashboardService;\n    this._aroute = arouter;\n    this._app = appService;\n    this.pending = [];\n    this.note = { attachments: [] };\n    this.developing = [];\n    this.improving = [];\n    this.complete = [];\n    this.contacts = [];\n    this.users = [];\n    this.products = [];\n    this.notifications = [];\n    this.noti = [];\n    this.sh = {};\n    this.dayJob = \"\";\n    this.search = \"\";\n    this.posState = \"user_asigned\";\n    this.posDState = \"id_usuario\";\n    this.mdT = { project: {} };\n    this.mcT = { project: {} };\n    this.daily = [];\n    this.selectedUsers = [1];\n    this.task = {};\n    this.dayView = [];\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.extra = { points: 0, text: \"\", delivery: \"\" };\n    this.catdaily = [];\n    this.todaypts = 0;\n    this.chartHtml = \"\";\n    this.chartUser = \"\";\n    this.mychart = \"\";\n    this.myUsers = [];\n    this.contactsTree = [];\n    this.burndownData = {};\n    this.events = [];\n    this.groups = [];\n    this.lblgroups = [];\n    this.taskid = 0;\n    this.idtk = [];\n    this.statustasks = [];\n    this.scheduler = {};\n    this.plsch = [];\n    this.stssche = [];\n    this.catsche = [];\n    this.items = [];\n    this.selectedNodes = [];\n    this.meeting = { usershared: [] };\n    this.userslbl = [];\n    this.usersCRM = [];\n    this.usersCRMa = [];\n  }\n\n  _createClass(BurndownComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      var _this = this;\n\n      this._aroute.params.forEach(function (params) {\n        _this.selectedUsers = JSON.parse(params.users);\n        _this.userdetail = JSON.parse(params.userdetail);\n        _this.userdetail.module = params.module;\n        _this.userdetail.action = params.action;\n      });\n    }\n  }, {\n    key: \"save\",\n    value: function save() {\n      this.msgs = [];\n      this.msgs.push({\n        severity: \"info\",\n        summary: \"Success\",\n        detail: \"Data Saved\"\n      });\n    }\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      this.getBurnDown();\n\n      this.events = [];\n      this.statustasks = [];\n    }\n  }, {\n    key: \"getBurnDown\",\n    value: function getBurnDown() {\n      var _this2 = this;\n\n      this._app.getBurndown(this.userdetail).subscribe(function (res) {\n        if (res) {\n          var datasets = [];\n          for (var u in res.data.users) {\n            if (_this2.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n              datasets.push({\n                label: res.data.users[u].label,\n                data: res.data.users[u].data,\n                fill: false,\n                borderColor: res.data.users[u].color,\n                backgroundColor: res.data.users[u].color,\n                user: res.data.users[u].user_id\n              });\n            }\n          }\n          datasets.push({\n            label: res.data.users[0].label,\n            data: res.data.users[0].data,\n            fill: false,\n            borderColor: res.data.users[0].color,\n            backgroundColor: res.data.users[0].color\n          });\n          _this2.burndownData = {\n            labels: res.data.days,\n            datasets: datasets,\n            options: { legend: { boxWidth: 40 } },\n            daily: res.data.daily\n          };\n        }\n      });\n    }\n  }, {\n    key: \"chartClicked\",\n    value: function chartClicked(event) {\n      var _this3 = this;\n\n      this.dayJob = this.burndownData.daily[event.element._index];\n      this._daily.getDay4Usr(this.burndownData.datasets[event.element._datasetIndex].user, this.burndownData.daily[event.element._index]).subscribe(function (res) {\n        _this3.dayView = res.data;\n        $(\"#mdDayView\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"handleDayClick\",\n    value: function handleDayClick(e) {}\n  }, {\n    key: \"handleEventClick\",\n    value: function handleEventClick(e) {\n      if (e.calEvent) {\n        this.sh = e.calEvent;\n        document.getElementById(\"openschedule\").click();\n      }\n    }\n  }]);\n\n  return BurndownComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.Router, _platformBrowser.DomSanitizer, _dashboard.DashboardService, _app.AppService, _router.ActivatedRoute], BurndownComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 418 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.PasswordRecoveryComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _login = __webpack_require__(43);\n\nvar _passwordrecoveryTemplate = __webpack_require__(864);\n\nvar _passwordrecoveryTemplate2 = _interopRequireDefault(_passwordrecoveryTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PasswordRecoveryComponent = exports.PasswordRecoveryComponent = (_dec = (0, _core.Component)({\n  selector: \"passwordrecovery\",\n  template: _passwordrecoveryTemplate2.default,\n  styles: [\"input[type=text] { width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border: none; border-bottom: 2px solid #0fafde; text-align: center; }\", \"input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border: none; border-bottom: 2px solid #0fafde; text-align: center; }\", \"::-webkit-input-placeholder { color:#0fafde; font-size:20px; top:5px; }\", \"::-moz-placeholder { color:#0fafde; font-size:20px; top:5px; }\", \":-ms-input-placeholder { color:#0fafde; font-size:20px; top:5px; }\", \"input:-moz-placeholder { color:#0fafde; font-size:20px; top:5px; }\"]\n}), _dec(_class = function () {\n  function PasswordRecoveryComponent(loginService, route, toastr) {\n    var _this = this;\n\n    _classCallCheck(this, PasswordRecoveryComponent);\n\n    this._route = route;\n    this._login = loginService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    /*\n    this.myLoginStyle = {\n      background: \"url('img/loginbackW.jpg') no-repeat fixed center / cover\",\n      height: \"100%\",\n      width: \"100%\",\n      \"overflow-y\": \"hidden\",\n      \"-webkit-background-size\": \"cover\",\n      \"-moz-background-size\": \"cover\",\n      \"-o-background-size\": \"cover\"\n    };\n    */\n    this.mainLogoW = \"mainLogoWhite.svg\";\n    this.loginScreen = window.location.href.split(\"/passwordrecovery\")[0] + \"/login\";\n    this._login.getLoginBackW().subscribe(function (res) {\n      _this.myLoginStyle = {\n        background: \"url('img/\" + res.data.loginback + \"') no-repeat fixed center / cover\",\n        height: \"100%\",\n        width: \"100%\",\n        \"overflow-y\": \"hidden\",\n        \"-webkit-background-size\": \"cover\",\n        \"-moz-background-size\": \"cover\",\n        \"-o-background-size\": \"cover\"\n      };\n      _this.mainLogoW = res.data.mainlogow;\n    });\n    this.mainLogo = \"mainLogoW.svg\";\n    this._login.getLoginBack().subscribe(function (res) {\n      _this.mainLogo = res.data.mainlogo;\n    });\n    this.times = 0;\n    this.passwordmsg = [];\n    this.pwValidated = false;\n    this.log = { pwd1: \"\", pwd2: \"\" };\n    this.codeConfirmed = false;\n    this._login.getCookie().subscribe(function (res) {\n      // this.log.key = res.cookie.keyPub;\n      localStorage.setItem(\"token\", res.cookie.token);\n    });\n    this.validated = false;\n  }\n\n  _createClass(PasswordRecoveryComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"validateEmail\",\n    value: function validateEmail(email) {\n      var _this2 = this;\n\n      this.email = email;\n      this._login.validateEmail(email).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this2.validated = true;\n          _this2.toastr.success(res.message);\n        } else {\n          _this2.toastr.error(res.message);\n        }\n      });\n    }\n  }, {\n    key: \"changeFocus\",\n    value: function changeFocus() {\n      var pincode = $(\".pin-code-pad\");\n      var curpincode = $(event.target);\n      var key = event.keyCode || event.charCode;\n      for (var i = 0; i < pincode.length; i++) {\n        if ($(event.target).is($(\".pin-code-pad\")[i])) {\n          if (key != 8 && key != 46 && key != 9 && key != 20 && key != 16 && i < pincode.length - 1) {\n            $(\".pin-code-pad\")[i + 1].focus();\n            $(\".pin-code-pad\")[i + 1].select();\n          } else if (key != 8 && key != 46 && key != 9 && key != 20 && key != 16 && i == pincode.length - 1) {\n            $(\".pin-code-pad\")[i].blur();\n          } else if (key == 8 || key == 46 && i > 0) {\n            $(\".pin-code-pad\")[i - 1].focus();\n            $(\".pin-code-pad\")[i - 1].select();\n          }\n        }\n      }\n    }\n  }, {\n    key: \"resetPassword\",\n    value: function resetPassword() {\n      var _this3 = this;\n\n      var pincode = $(\".pin-code-pad\");\n      var authcode = \"\";\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = pincode[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var v = _step.value;\n\n          authcode += $(v).val();\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n\n      this.authcode = authcode;\n      this._login.resetPassword(authcode, this.email).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this3.codeConfirmed = true;\n        } else {\n          _this3.toastr.error(res.message);\n        }\n      });\n    }\n  }, {\n    key: \"requestNewCode\",\n    value: function requestNewCode() {\n      this.validated = false;\n    }\n  }, {\n    key: \"validateNewPassword\",\n    value: function validateNewPassword() {\n      if (this.log.pwd1 == \"\" || this.log.pwd1 == null || this.log.pwd1 == false) {\n        this.passwordmsg = [];\n      }\n      if (!this.log.pwd1) {\n        return false;\n      }\n      var rgx = [{ desc: \"eightchars\", regx: /.{8,}/ }, { desc: \"uppercase\", regx: /[A-Z]/ }, { desc: \"lowercase\", regx: /[a-z]/ }, { desc: \"number\", regx: /[0-9]/ }, { desc: \"specialchar\", regx: /[@#$&*^%!+=\\/\\\\[\\]|?.,<>)(;:'\"~`]/ }];\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = rgx[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          if (c.regx.test(this.log.pwd1) === true) {\n            if (this.passwordmsg.indexOf(c.desc) < 0) {\n              this.passwordmsg.push(c.desc);\n            }\n          } else {\n            if (this.passwordmsg.indexOf(c.desc) >= 0) {\n              var index = this.passwordmsg.indexOf(c.desc);\n              this.passwordmsg.splice(index, 1);\n            }\n          }\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n\n      if (this.passwordmsg.length == rgx.length) {\n        this.pwValidated = true;\n      } else {\n        this.pwValidated = false;\n      }\n    }\n  }, {\n    key: \"setNewPassword\",\n    value: function setNewPassword() {\n      var _this4 = this;\n\n      if (this.pwValidated === true) {\n        if (this.log.pwd1 == this.log.pwd2) {\n          this._login.setPassword(this.authcode, this.log.pwd1).subscribe(function (res) {\n            if (res.data == \"OK\") {\n              _this4.toastr.success(\"Your new password has been set. Redirecting to login screen.\");\n              _this4._route.navigate([\"/login\"]);\n            } else if (res.data == \"ERROR\") {\n              _this4.toastr.error(res.message);\n            }\n          });\n        } else {\n          this.toastr.error(\"Passwords don't match\");\n        }\n      } else {\n        this.toastr.error(\"Password doesn't meet the requirements\");\n      }\n    }\n  }]);\n\n  return PasswordRecoveryComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_login.LoginService, _router.Router, _ngxToastr.ToastrService], PasswordRecoveryComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 419 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UserSettingsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _usersettingsTemplate = __webpack_require__(865);\n\nvar _usersettingsTemplate2 = _interopRequireDefault(_usersettingsTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _roles = __webpack_require__(46);\n\nvar _users = __webpack_require__(20);\n\nvar _header = __webpack_require__(32);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UserSettingsComponent = exports.UserSettingsComponent = (_dec = (0, _core.Component)({\n  selector: \"usersettings\",\n  template: _usersettingsTemplate2.default\n}), _dec(_class = function () {\n  function UserSettingsComponent(title, router, sanitizer, toastr, groupService, rolesService, usersService, headerService) {\n    var _this = this;\n\n    _classCallCheck(this, UserSettingsComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._roles = rolesService;\n    this._groups = groupService;\n    this._users = usersService;\n    this._header = headerService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.lblgroups = [];\n    this.selectedRole = 0;\n    this.modulesTree = [];\n    this.subModules = [];\n    this.roles = [];\n    this.submoduleChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPermits = [];\n    this.modulesAdd = [];\n    this.users = [];\n    this.selectedUser = {};\n    this.userlist = [];\n    this.user = {};\n    this.editData = {};\n    this._header.getUser().subscribe(function (res) {\n      _this.user = res.data;\n    });\n    this.passwordmsg = [];\n    this.pwValidated = false;\n    this.prev_password = \"\";\n    this.new_password = \"\";\n    this.confirmed_password = \"\";\n    this.notificationstype = [];\n    this.userPreferences = { desktop: [], email: [] };\n    this.myPreferences = [];\n    this.profilepic = {};\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : User Settings ::.\");\n  }\n\n  _createClass(UserSettingsComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      // this.getNotificationsList();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      this.selectedUser = {};\n      this.filteredUsers = [];\n      this.users = [];\n    }\n  }, {\n    key: \"showChangePicture\",\n    value: function showChangePicture(type) {\n      if (type == \"profile\") {\n        $(\"#change-profile\").toggle();\n        $(\"#informative_message\").toggle();\n      }\n    }\n  }, {\n    key: \"validateNewPassword\",\n    value: function validateNewPassword() {\n      if (this.new_password == \"\" || this.new_password == null || this.new_password == false) {\n        this.passwordmsg = [];\n      }\n      if (!this.new_password) {\n        return false;\n      }\n      var rgx = [{ desc: \"sixchars\", regx: /.{6,}/ }, { desc: \"uppercase\", regx: /[A-Z]/ }, { desc: \"lowercase\", regx: /[a-z]/ }, { desc: \"number\", regx: /[0-9]/ }, { desc: \"specialchar\", regx: /[@#$&*^%!+=\\/\\\\[\\]|?.,<>)(;:'\"~`]/ }];\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = rgx[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          if (c.regx.test(this.new_password) === true) {\n            if (this.passwordmsg.indexOf(c.desc) < 0) {\n              this.passwordmsg.push(c.desc);\n            }\n          } else {\n            if (this.passwordmsg.indexOf(c.desc) >= 0) {\n              var index = this.passwordmsg.indexOf(c.desc);\n              this.passwordmsg.splice(index, 1);\n            }\n          }\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n\n      if (this.passwordmsg.length == rgx.length) {\n        this.pwValidated = true;\n      } else {\n        this.pwValidated = false;\n      }\n    }\n  }, {\n    key: \"saveNewPassword\",\n    value: function saveNewPassword() {\n      var _this2 = this;\n\n      if (this.pwValidated === true) {\n        if (this.new_password == this.confirmed_password) {\n          var pwSet = {};\n          pwSet.new_pw = this.new_password;\n          pwSet.old_pw = this.prev_password;\n          this._users.changePassword(pwSet).subscribe(function (res) {\n            if (res.data == \"OK\") {\n              _this2.toastr.success(\"Your new password has been set.\");\n              $(\"#changePassword\").modal(\"hide\");\n            } else if (res.data == \"ERROR\") {\n              _this2.toastr.error(res.message);\n            }\n          });\n        } else {\n          this.toastr.error(\"Passwords don't match\");\n        }\n      } else {\n        this.toastr.error(\"Password doesn't meet the requirements\");\n      }\n    }\n  }, {\n    key: \"showModalPw\",\n    value: function showModalPw() {\n      this.new_password = \"\";\n      this.prev_password = \"\";\n      this.confirmed_password = \"\";\n      this.passwordmsg = [];\n    }\n  }, {\n    key: \"editUser\",\n    value: function editUser(user) {\n      var _this3 = this;\n\n      if (this.profilepic != {}) {\n        user.user_newpicture = this.profilepic;\n      }\n      this._users.editUserSettings(user).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this3.toastr.success(res.message);\n          _this3._header.getUser().subscribe(function (res) {\n            _this3.user = res.data;\n          });\n        } else {\n          _this3.toastr.error(res.message);\n        }\n      });\n    }\n  }, {\n    key: \"getNotificationsList\",\n    value: function getNotificationsList() {\n      var _this4 = this;\n\n      this.notificationstype = [];\n      this._users.getNotificationsList().subscribe(function (res) {\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var c = _step2.value;\n            var _iteratorNormalCompletion3 = true;\n            var _didIteratorError3 = false;\n            var _iteratorError3 = undefined;\n\n            try {\n              for (var _iterator3 = _this4.myPreferences[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n                var v = _step3.value;\n\n                var desktop = \"\";\n                var email = \"\";\n                if (v.id == c.para_id) {\n                  desktop = v.desktop;\n                  email = v.email;\n                }\n              }\n            } catch (err) {\n              _didIteratorError3 = true;\n              _iteratorError3 = err;\n            } finally {\n              try {\n                if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                  _iterator3.return();\n                }\n              } finally {\n                if (_didIteratorError3) {\n                  throw _iteratorError3;\n                }\n              }\n            }\n\n            _this4.notificationstype.push({\n              id: c.para_id,\n              name: c.para_name,\n              emailnotif: email,\n              desknotif: desktop\n            });\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getPreferences\",\n    value: function getPreferences() {\n      var _this5 = this;\n\n      this.myPreferences = [];\n      this.userPreferences = { desktop: [], email: [] };\n      this._users.getPreferences().subscribe(function (res) {\n        var _iteratorNormalCompletion4 = true;\n        var _didIteratorError4 = false;\n        var _iteratorError4 = undefined;\n\n        try {\n          for (var _iterator4 = res.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n            var c = _step4.value;\n\n            var preferences = { id: \"\", desktop: \"\", email: \"\" };\n            preferences.id = c.noti_type;\n            if (c.pref_desk == \"1\" || c.pref_desk == 1) {\n              preferences.desktop = \"desktop|\" + c.noti_type;\n              _this5.userPreferences.desktop.push(\"desktop|\" + c.noti_type);\n            }\n            if (c.pref_email == \"1\" || c.pref_email == 1) {\n              preferences.email = \"email|\" + c.noti_type;\n              _this5.userPreferences.email.push(\"email|\" + c.noti_type);\n            }\n            _this5.myPreferences.push(preferences);\n          }\n        } catch (err) {\n          _didIteratorError4 = true;\n          _iteratorError4 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion4 && _iterator4.return) {\n              _iterator4.return();\n            }\n          } finally {\n            if (_didIteratorError4) {\n              throw _iteratorError4;\n            }\n          }\n        }\n\n        _this5.getNotificationsList();\n      });\n    }\n  }, {\n    key: \"savePreferences\",\n    value: function savePreferences() {\n      var _this6 = this;\n\n      this._users.savePreferences(this.userPreferences).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this6.toastr.success(\"Your preferences have been saved.\");\n        } else {\n          _this6.toastr.success(\"An error occurred while trying to save your preferences.\");\n        }\n      });\n    }\n  }, {\n    key: \"onBasicUpload\",\n    value: function onBasicUpload(event, type) {\n      if (type == \"profile\") {\n        this.profilepic = event.target.files[0];\n      }\n\n      if (event.target.files && event.target.files[0]) {\n        var files = event.target.files;\n        if (files[0].size / 1024 / 1024 > 4) {\n          this.toastr.error(\"File size exceeds 4 MB\");\n        } else {\n          var reader = new FileReader();\n          reader.onload = function (e) {\n            if (type == \"profile\") {\n              $(\"#profile-img\").attr(\"src\", e.target.result);\n            }\n          };\n          reader.readAsDataURL(event.target.files[0]);\n        }\n      }\n    }\n  }, {\n    key: \"getNameUser\",\n    value: function getNameUser(user_name, user_lastname) {\n      if (user_name && user_lastname) {\n        var names = user_name;\n        var surnames = user_lastname;\n        var ellipsis = \"…\";\n        var fullName = names + ' ' + surnames;\n\n        if (fullName.length <= 14) {\n          return fullName;\n        } else {\n\n          if (names.length <= 14 && surnames.length <= 14) {\n            fullName = names + ' ' + surnames;\n          }\n\n          if (names.length <= 14 && surnames.length > 14) {\n            surnames = surnames.substring(0, 14) + ellipsis;\n            fullName = names + ' ' + surnames;\n          }\n\n          if (names.length > 14 && surnames.length <= 14) {\n            var arrayNames = names.split(' ');\n            var firstName = arrayNames[0];\n            fullName = firstName + ' ' + surnames;\n          }\n\n          if (names.length > 14 && surnames.length > 14) {\n            var _arrayNames = names.split(' ');\n            var _firstName = _arrayNames[0];\n            surnames = surnames.substring(0, 14) + ellipsis;\n            fullName = _firstName + ' ' + surnames;\n          }\n\n          return fullName;\n        }\n      } else {\n        return \"\";\n      }\n    }\n  }]);\n\n  return UserSettingsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _group.GroupService, _roles.RolesService, _users.UsersService, _header.HeaderService], UserSettingsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 420 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.RequestsSettingsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _preferencesTemplate = __webpack_require__(866);\n\nvar _preferencesTemplate2 = _interopRequireDefault(_preferencesTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _task = __webpack_require__(19);\n\nvar _type = __webpack_require__(41);\n\nvar _request = __webpack_require__(81);\n\nvar _product = __webpack_require__(22);\n\nvar _project = __webpack_require__(18);\n\nvar _categories = __webpack_require__(47);\n\nvar _note = __webpack_require__(24);\n\nvar _directory = __webpack_require__(31);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RequestsSettingsComponent = exports.RequestsSettingsComponent = (_dec = (0, _core.Component)({\n  selector: \"requestsettings\",\n  template: _preferencesTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  providers: [_primeng.ConfirmationService],\n  styles: [\".box-header {background-color: #c7c7c7; color: #fff;}\"]\n}), _dec(_class = function () {\n  function RequestsSettingsComponent(router, sanitizer, productService, groupService, directoryService, toastr, typeService, ProjectService, RequestService, taskService, noteService, arouter, confirmationService, categoriesService) {\n    var _this = this;\n\n    _classCallCheck(this, RequestsSettingsComponent);\n\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._event = RequestService;\n    this._categories = categoriesService;\n    this._tasks = taskService;\n    this._notes = noteService;\n    this._directory = directoryService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this.confirm = confirmationService;\n    this._types = typeService;\n    this.products = [];\n    this.textState = [\"\"];\n    this.posState = \"type_name\";\n    this.textCreator = [\"\"];\n    this.posCreator = \"asigned_to\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this._aroute = arouter;\n    this.limitpage = 0;\n    this.groups = [];\n    this.plmt = [];\n    this.stsmt = [];\n    this.lblgroups = [];\n    this.seleve = [];\n    this.userlist = [];\n    this.events = [];\n    this.emails = [];\n    this.st_cancelled = 0;\n    this.categories = [];\n    this.catIds = [];\n    this.categoryMenu = [];\n    this.idtype = [];\n    this.tycate = [];\n    this.catlist = [];\n    this.note_text = \"\";\n    this.selectedCategory = {};\n    this.selectedProduct = [];\n    this.myProjects = [];\n    this.mdT = { project: {} };\n    this.note = { attachments: [] };\n    this.selectedprojects = [];\n    this.task = { project: {}, attachments: [] };\n    this.task_description = \"\";\n    this.userslbl = [];\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.idtk = [];\n    this.cant_e = 0;\n    this.cant_ia = 0;\n    this.cant_im = 0;\n    this.status = [];\n    this.mailAccounts = [];\n    this.groupRules = [];\n    this.position = -1;\n    this.mylist = [];\n    this.typetittle = \"\";\n    this.mytype = 0;\n    this.mytask = 0;\n    this.taskfields = [];\n    this.mylist.fields = [];\n    this.textInfo = [\"Info\", \"Project related\", \"Adjustments\", \"Timeline\"];\n    this.posInfo = \"info_id\";\n    this.timeline = 0;\n    this.mdT.total_adjusted = [];\n    this.newRule = {};\n    this.ruleFields = [{ label: \"Subject\", value: \"SUBJECT\" }, { label: \"Sender\", value: \"FROM\" }];\n    this.ruleOperators = [{ label: \"Is\", value: \"IS\" }, { label: \"Contains\", value: \"CONTAINS\" }];\n\n    this._categories.getActiveCategories().subscribe(function (res) {\n      _this.cateids = [];\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          if (_this.cateids.indexOf(c.cate_id) < 0) {\n            _this.cateids.push(c.cate_id);\n            _this.categories.push({ label: c.cate_desc + ' (' + c.type_name + ' )', value: c.cate_id });\n          }\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(RequestsSettingsComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      this.getMyGroupAccounts();\n      this.getMyGroupRules();\n      this.getAllGroups();\n    }\n  }, {\n    key: \"getMyGroupAccounts\",\n    value: function getMyGroupAccounts() {\n      var _this2 = this;\n\n      this._event.getMyGroupAccounts().subscribe(function (res) {\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var c = _step2.value;\n\n            _this2.mailAccounts.push({ label: c.mbac_email, value: c.mbac_id });\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getMyGroupRules\",\n    value: function getMyGroupRules() {\n      var _this3 = this;\n\n      this.groupRules = [];\n      this._event.getMyGroupRules().subscribe(function (res) {\n        var _iteratorNormalCompletion3 = true;\n        var _didIteratorError3 = false;\n        var _iteratorError3 = undefined;\n\n        try {\n          for (var _iterator3 = res.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n            var c = _step3.value;\n\n            _this3.groupRules.push({ ruleid: c.mbrq_ruleid, description: c.mbrq_field + \" \" + c.mbrq_operator + \": \" + c.mbrq_criteria, criteria: c.mbrq_criteria, account: c.mbac_email, type: c.type_name, assigned: c.grop_name, category: c.cate_desc });\n          }\n        } catch (err) {\n          _didIteratorError3 = true;\n          _iteratorError3 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion3 && _iterator3.return) {\n              _iterator3.return();\n            }\n          } finally {\n            if (_didIteratorError3) {\n              throw _iteratorError3;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"showModalRule\",\n    value: function showModalRule() {\n      $(\"#newRule\").modal(\"show\");\n      this.newRule = {};\n    }\n  }, {\n    key: \"saveRule\",\n    value: function saveRule(rule) {\n      var _this4 = this;\n\n      this._event.addRule(rule).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this4.toastr.success(\"Rule created successfully\");\n          _this4.getMyGroupRules();\n          $(\"#newRule\").modal(\"hide\");\n        } else {\n          _this4.toastr.error(\"An error occurred while creating the rule. Please try again\");\n        }\n      });\n    }\n  }, {\n    key: \"runRule\",\n    value: function runRule(rule) {\n      var _this5 = this;\n\n      this._event.runRule(rule.ruleid).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this5.toastr.success(res.message);\n        } else {\n          _this5.toastr.warning(res.message);\n        }\n      });\n    }\n  }, {\n    key: \"getAllGroups\",\n    value: function getAllGroups() {\n      var _this6 = this;\n\n      this._groups.getGroups().subscribe(function (res) {\n        var _iteratorNormalCompletion4 = true;\n        var _didIteratorError4 = false;\n        var _iteratorError4 = undefined;\n\n        try {\n          for (var _iterator4 = res.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n            var c = _step4.value;\n\n            _this6.groups.push({ label: c.grop_name, value: c.grop_id });\n          }\n        } catch (err) {\n          _didIteratorError4 = true;\n          _iteratorError4 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion4 && _iterator4.return) {\n              _iterator4.return();\n            }\n          } finally {\n            if (_didIteratorError4) {\n              throw _iteratorError4;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"deleteRule\",\n    value: function deleteRule(rule) {\n      var _this7 = this;\n\n      this._event.deleteRule(rule.ruleid).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this7.toastr.success(\"Rule deleted successfully\");\n        } else {\n          _this7.toastr.error(\"Rule couldn't be deleted\");\n        }\n      });\n    }\n  }]);\n\n  return RequestsSettingsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.Router, _platformBrowser.DomSanitizer, _product.ProductService, _group.GroupService, _directory.DirectoryService, _ngxToastr.ToastrService, _type.TypeService, _project.ProjectService, _request.RequestService, _task.TaskService, _note.NoteService, _router.ActivatedRoute, _primeng.ConfirmationService, _categories.CategoriesService], RequestsSettingsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 421 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ClientSettingsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _clientsettingsTemplate = __webpack_require__(867);\n\nvar _clientsettingsTemplate2 = _interopRequireDefault(_clientsettingsTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _login = __webpack_require__(43);\n\nvar _header = __webpack_require__(32);\n\nvar _users = __webpack_require__(20);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ClientSettingsComponent = exports.ClientSettingsComponent = (_dec = (0, _core.Component)({\n  selector: 'clientsettings',\n  template: _clientsettingsTemplate2.default\n}), _dec(_class = function () {\n  function ClientSettingsComponent(router, sanitizer, toastr, groupService, headerService, loginService, usersService) {\n    var _this = this;\n\n    _classCallCheck(this, ClientSettingsComponent);\n\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._header = headerService;\n    this._login = loginService;\n    this._users = usersService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.lblgroups = [];\n    this.selectedRole = 0;\n    this.modulesTree = [];\n    this.subModules = [];\n    this.roles = [];\n    this.submoduleChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPermits = [];\n    this.modulesAdd = [];\n    this.users = [];\n    this.selectedUser = {};\n    this.userlist = [];\n    this.user = {};\n    this.client = {};\n    this._header.getUser().subscribe(function (res) {\n      _this.user = res.data;\n      _this._login.getLoginBack().subscribe(function (res) {\n        _this.mainLogo = \"img/\" + res.data.mainlogo;\n        _this.loginBack = \"img/\" + res.data.loginback;\n        _this.myLoginStyle = {\n          background: \"url('img/\" + res.data.loginback + \"') no-repeat center / cover\",\n          height: \"500px\",\n          width: \"100%\",\n          \"overflow-y\": \"hidden\",\n          \"-webkit-background-size\": \"cover\",\n          \"-moz-background-size\": \"cover\",\n          \"-o-background-size\": \"cover\",\n          position: \"relative\"\n        };\n      });\n    });\n  }\n\n  _createClass(ClientSettingsComponent, [{\n    key: 'ngOnInit',\n    value: function ngOnInit() {\n      this.getSettings();\n    }\n  }, {\n    key: 'showChangePicture',\n    value: function showChangePicture(type) {\n      if (type == 'logo') {\n        $(\"#change-logo\").toggle();\n      } else if (type == 'background') {\n        $(\"#change-background\").toggle();\n      }\n    }\n  }, {\n    key: 'changePicture',\n    value: function changePicture(type) {\n      if (type == 'main-logo') {}\n    }\n  }, {\n    key: 'onBasicUpload',\n    value: function onBasicUpload(event, type) {\n      if (event.target.files && event.target.files[0]) {\n        var reader = new FileReader();\n        reader.onload = function (e) {\n          if (type == 'mainlogo') {\n            var image_logo = new Image();\n            image_logo.src = e.target.result;\n            image_logo.onload = function () {\n              if (this.width == 300 && this.height == 96) {\n                $('#logo-img').attr('src', e.target.result);\n                $('#preview-logo').attr('src', e.target.result);\n                return 1;\n              } else {\n                return 0;\n              }\n            };\n            if (image_logo) {\n              return 0;\n            } else {\n              return 1;\n            }\n          } else if (type == 'background') {\n            var image_back = new Image();\n            image_back.src = e.target.result;\n            image_back.onload = function () {\n              if (this.width == 1920 && this.height == 1080) {\n                $('#background-img').attr('src', e.target.result);\n                $('#preview-background').css('background', \"url(\" + e.target.result + \") no-repeat center / cover\");\n                // console.log(\"si\");\n                return 1;\n              } else {\n                // console.log(\"no\");\n                return 0;\n              }\n            };\n            if (image_back) {\n              // console.log(\"si\");\n              return 1;\n            } else {\n              // console.log(\"no\");\n              return 0;\n            }\n          }\n        };\n        if (reader) {\n          // console.log(\"SI\");\n        } else {\n          reader.readAsDataURL(event.target.files[0]);\n          if (type == 'mainlogo') {\n            this.client.logo = event.target.files[0];\n          } else if (type == 'background') {\n            this.client.background = event.target.files[0];\n          }\n          // console.log(\"no\");\n        }\n      }\n    }\n  }, {\n    key: 'saveCompanyDetails',\n    value: function saveCompanyDetails() {\n      var _this2 = this;\n\n      var client = this.client;\n      // console.log(client);\n      this._login.saveGeneralSetting(client).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this2.toastr.success(\"Changes saved successfully.\");\n        }\n      });\n    }\n  }, {\n    key: 'getSettings',\n    value: function getSettings() {\n      var _this3 = this;\n\n      this._login.getSettings().subscribe(function (res) {\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this3.client.companyname = c.companyname;\n            _this3.client.email = c.emailsubscription;\n            _this3.client.policies = c.policies;\n            _this3.client.id = c.id;\n            _this3.client.emailnotif = c.emailnotif;\n            _this3.client.password = c.password;\n            _this3.client.host = c.host;\n            _this3.client.imap = c.imap;\n            _this3.client.smtp = c.smtp;\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: 'validate',\n    value: function validate() {\n      return !this.client.companyname || this.client.companyname.trim() == \"\" || !this.client.email || this.client.email.trim() == \"\" || !this.client.policies || this.client.policies.trim() == \"\" || !this.client.emailnotif || this.client.emailnotif.trim() == \"\" || !this.client.host || this.client.host.trim() == \"\" || !this.client.imap || this.client.imap.trim() == \"\" || !this.client.smtp || this.client.smtp.trim() == \"\";\n    }\n  }]);\n\n  return ClientSettingsComponent;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _group.GroupService, _header.HeaderService, _login.LoginService, _users.UsersService], ClientSettingsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 422 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DailyBoardComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _IntervalObservable = __webpack_require__(101);\n\nvar _dailyboardTemplate = __webpack_require__(868);\n\nvar _dailyboardTemplate2 = _interopRequireDefault(_dailyboardTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _login = __webpack_require__(43);\n\nvar _header = __webpack_require__(32);\n\nvar _users = __webpack_require__(20);\n\nvar _dashboard = __webpack_require__(44);\n\nvar _directory = __webpack_require__(31);\n\nvar _task = __webpack_require__(19);\n\nvar _daily = __webpack_require__(45);\n\nvar _project = __webpack_require__(18);\n\nvar _sprint = __webpack_require__(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DailyBoardComponent = exports.DailyBoardComponent = (_dec = (0, _core.Component)({\n  selector: 'dailyboard',\n  template: _dailyboardTemplate2.default\n}), _dec(_class = function () {\n  function DailyBoardComponent(router, sanitizer, toastr, groupService, headerService, loginService, usersService, dashboardService, taskService, dailyService, directoryService, projectService, sprintService) {\n    var _this = this;\n\n    _classCallCheck(this, DailyBoardComponent);\n\n    this._projects = projectService;\n    this._directory = directoryService;\n    this._dailys = dailyService;\n    this._tasks = taskService;\n    this._dashBoard = dashboardService;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._header = headerService;\n    this._login = loginService;\n    this._users = usersService;\n    this._group = groupService;\n    this._sprint = sprintService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.lblgroups = [];\n    this.selectedRole = 0;\n    this.modulesTree = [];\n    this.subModules = [];\n    this.roles = [];\n    this.submoduleChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPermits = [];\n    this.modulesAdd = [];\n    this.users = [];\n    this.selectedUser = {};\n    this.userlist = [];\n    this.user = {};\n    this.groupUsers = [];\n    this.groupTasks = [];\n    this.selectedUsers = [];\n    this.burndownTeams = [];\n    this.scrollOn = false;\n    this.topDistance = 0;\n    this.teamDisplay = '';\n    this.teamDisplayIdx = 0;\n    this.mdT = { project: {} };\n    this.mdT.total_adjusted = [];\n    this.mdT.sprint = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.task = { project: {}, attachments: [] };\n\n    this._group.getGroups().subscribe(function (data) {\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.groupUsers.push({ gropid: c.grop_id, title: c.grop_name, users: [], current_sprint: c.current_sprint, tasks: { today: [], inprogress: [], improving: [], done: [] } });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n\n      for (var i = 0; i < _this.groupUsers.length; i++) {\n        if (i == 0) {\n          _this.teamDisplay = _this.groupUsers[i].title;\n          _this.teamDisplayIdx = 0;\n        }\n      }\n    });\n    this._directory.getMyUsers().subscribe(function (data) {\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = _this.groupUsers[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var v = _step4.value;\n\n              if (v.gropid == c.grop_id) {\n                v.users.push(c.user_id);\n              }\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = _this.groupUsers[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var grp = _step3.value;\n\n          _this.getBurnDown(grp);\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n    });\n\n    this.subscriber2 = _IntervalObservable.IntervalObservable.create(2 * this.groupUsers.length * 15000)\n    // .takeWhile(n => this.scrollOn) // only fires when component is alive\n    .subscribe(function (n) {});\n    this.subscriber = _IntervalObservable.IntervalObservable.create(15000)\n    // .takeWhile(n => this.scrollOn) // only fires when component is alive\n    .subscribe(function (n) {\n      if (_this.scrollOn) {\n        _this.prevScroll = $('.body-dailyboard')[1].scrollTop;\n        if (_this.prevScroll + 320 < _this.groupUsers.length * 300) {\n          _this.topDistance += 320;\n          $('.body-dailyboard').animate({ scrollTop: _this.topDistance }, 4500);\n          $('#burndown-scroll').animate({ scrollTop: _this.topDistance + 5 }, 4500);\n          _this.teamDisplayIdx++;\n          for (var i = 0; i < _this.groupUsers.length; i++) {\n            if (i == _this.teamDisplayIdx) {\n              if (i == _this.groupUsers.length - 1) {\n                _this.teamDisplay = _this.groupUsers[_this.teamDisplayIdx].title;\n                _this.teamDisplayIdx = 0;\n                _this.groupUsers = [];\n                _this._group.getGroups().subscribe(function (data) {\n                  var _iteratorNormalCompletion5 = true;\n                  var _didIteratorError5 = false;\n                  var _iteratorError5 = undefined;\n\n                  try {\n                    for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n                      var c = _step5.value;\n\n                      _this.groupUsers.push({ gropid: c.grop_id, title: c.grop_name, users: [], current_sprint: c.current_sprint, tasks: { today: [], inprogress: [], improving: [], done: [] } });\n                    }\n                  } catch (err) {\n                    _didIteratorError5 = true;\n                    _iteratorError5 = err;\n                  } finally {\n                    try {\n                      if (!_iteratorNormalCompletion5 && _iterator5.return) {\n                        _iterator5.return();\n                      }\n                    } finally {\n                      if (_didIteratorError5) {\n                        throw _iteratorError5;\n                      }\n                    }\n                  }\n                });\n                _this._directory.getMyUsers().subscribe(function (data) {\n                  var _iteratorNormalCompletion6 = true;\n                  var _didIteratorError6 = false;\n                  var _iteratorError6 = undefined;\n\n                  try {\n                    for (var _iterator6 = data.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n                      var c = _step6.value;\n                      var _iteratorNormalCompletion8 = true;\n                      var _didIteratorError8 = false;\n                      var _iteratorError8 = undefined;\n\n                      try {\n                        for (var _iterator8 = _this.groupUsers[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n                          var v = _step8.value;\n\n                          if (v.gropid == c.grop_id) {\n                            v.users.push(c.user_id);\n                          }\n                        }\n                      } catch (err) {\n                        _didIteratorError8 = true;\n                        _iteratorError8 = err;\n                      } finally {\n                        try {\n                          if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                            _iterator8.return();\n                          }\n                        } finally {\n                          if (_didIteratorError8) {\n                            throw _iteratorError8;\n                          }\n                        }\n                      }\n                    }\n                  } catch (err) {\n                    _didIteratorError6 = true;\n                    _iteratorError6 = err;\n                  } finally {\n                    try {\n                      if (!_iteratorNormalCompletion6 && _iterator6.return) {\n                        _iterator6.return();\n                      }\n                    } finally {\n                      if (_didIteratorError6) {\n                        throw _iteratorError6;\n                      }\n                    }\n                  }\n\n                  var _iteratorNormalCompletion7 = true;\n                  var _didIteratorError7 = false;\n                  var _iteratorError7 = undefined;\n\n                  try {\n                    for (var _iterator7 = _this.groupUsers[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n                      var grp = _step7.value;\n\n                      _this.getBurnDown(grp);\n                    }\n                  } catch (err) {\n                    _didIteratorError7 = true;\n                    _iteratorError7 = err;\n                  } finally {\n                    try {\n                      if (!_iteratorNormalCompletion7 && _iterator7.return) {\n                        _iterator7.return();\n                      }\n                    } finally {\n                      if (_didIteratorError7) {\n                        throw _iteratorError7;\n                      }\n                    }\n                  }\n                });\n                _this.getTaskboard();\n              }\n              _this.teamDisplay = _this.groupUsers[_this.teamDisplayIdx].title;\n            }\n          }\n        } else {\n          _this.topDistance = 0;\n          $('.body-dailyboard').animate({ scrollTop: _this.topDistance }, 4500);\n          $('#burndown-scroll').animate({ scrollTop: _this.topDistance }, 4500);\n          _this.teamDisplay = _this.groupUsers[0].title;\n          _this.teamDisplayIdx = 0;\n        }\n      } else {\n        _this.scrollOn = false;\n      }\n    });\n  }\n\n  _createClass(DailyBoardComponent, [{\n    key: 'ngOnInit',\n    value: function ngOnInit() {\n      this.getTaskboard();\n    }\n  }, {\n    key: 'getTaskboard',\n    value: function getTaskboard() {\n      var _this2 = this;\n\n      this.spinner = true;\n      this.myProjects = [];\n      this.selectedprojects = [];\n      this._dashBoard.getTaskboard().subscribe(function (data) {\n        _this2.tasks = data.data;\n\n        if (_this2.tasks[35]) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = _this2.tasks[35][Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var pdx = _step9.value;\n              var _iteratorNormalCompletion10 = true;\n              var _didIteratorError10 = false;\n              var _iteratorError10 = undefined;\n\n              try {\n                for (var _iterator10 = _this2.groupUsers[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n                  var v = _step10.value;\n\n                  if (v.users.indexOf(pdx.user_asigned) >= 0) {\n                    v.tasks.today.push(pdx);\n                  }\n                }\n              } catch (err) {\n                _didIteratorError10 = true;\n                _iteratorError10 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                    _iterator10.return();\n                  }\n                } finally {\n                  if (_didIteratorError10) {\n                    throw _iteratorError10;\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n        if (_this2.tasks[36]) {\n          var _iteratorNormalCompletion11 = true;\n          var _didIteratorError11 = false;\n          var _iteratorError11 = undefined;\n\n          try {\n            for (var _iterator11 = _this2.tasks[36][Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n              var pdx2 = _step11.value;\n              var _iteratorNormalCompletion12 = true;\n              var _didIteratorError12 = false;\n              var _iteratorError12 = undefined;\n\n              try {\n                for (var _iterator12 = _this2.groupUsers[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n                  var _v = _step12.value;\n\n                  if (_v.users.indexOf(pdx2.user_asigned) >= 0) {\n                    _v.tasks.today.push(pdx2);\n                  }\n                }\n              } catch (err) {\n                _didIteratorError12 = true;\n                _iteratorError12 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                    _iterator12.return();\n                  }\n                } finally {\n                  if (_didIteratorError12) {\n                    throw _iteratorError12;\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError11 = true;\n            _iteratorError11 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                _iterator11.return();\n              }\n            } finally {\n              if (_didIteratorError11) {\n                throw _iteratorError11;\n              }\n            }\n          }\n        }\n        if (_this2.tasks[37]) {\n          var _iteratorNormalCompletion13 = true;\n          var _didIteratorError13 = false;\n          var _iteratorError13 = undefined;\n\n          try {\n            for (var _iterator13 = _this2.tasks[37][Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {\n              var pdx3 = _step13.value;\n              var _iteratorNormalCompletion14 = true;\n              var _didIteratorError14 = false;\n              var _iteratorError14 = undefined;\n\n              try {\n                for (var _iterator14 = _this2.groupUsers[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {\n                  var _v2 = _step14.value;\n\n                  if (_v2.users.indexOf(pdx3.user_asigned) >= 0) {\n                    _v2.tasks.today.push(pdx3);\n                  }\n                }\n              } catch (err) {\n                _didIteratorError14 = true;\n                _iteratorError14 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion14 && _iterator14.return) {\n                    _iterator14.return();\n                  }\n                } finally {\n                  if (_didIteratorError14) {\n                    throw _iteratorError14;\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError13 = true;\n            _iteratorError13 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion13 && _iterator13.return) {\n                _iterator13.return();\n              }\n            } finally {\n              if (_didIteratorError13) {\n                throw _iteratorError13;\n              }\n            }\n          }\n        }\n        if (_this2.tasks[38]) {\n          var _iteratorNormalCompletion15 = true;\n          var _didIteratorError15 = false;\n          var _iteratorError15 = undefined;\n\n          try {\n            for (var _iterator15 = _this2.tasks[38][Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) {\n              var dvp = _step15.value;\n              var _iteratorNormalCompletion16 = true;\n              var _didIteratorError16 = false;\n              var _iteratorError16 = undefined;\n\n              try {\n                for (var _iterator16 = _this2.groupUsers[Symbol.iterator](), _step16; !(_iteratorNormalCompletion16 = (_step16 = _iterator16.next()).done); _iteratorNormalCompletion16 = true) {\n                  var _v3 = _step16.value;\n\n                  if (_v3.users.indexOf(dvp.user_asigned) >= 0) {\n                    _v3.tasks.inprogress.push(dvp);\n                  }\n                }\n              } catch (err) {\n                _didIteratorError16 = true;\n                _iteratorError16 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion16 && _iterator16.return) {\n                    _iterator16.return();\n                  }\n                } finally {\n                  if (_didIteratorError16) {\n                    throw _iteratorError16;\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError15 = true;\n            _iteratorError15 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion15 && _iterator15.return) {\n                _iterator15.return();\n              }\n            } finally {\n              if (_didIteratorError15) {\n                throw _iteratorError15;\n              }\n            }\n          }\n        }\n        if (_this2.tasks[39]) {\n          var _iteratorNormalCompletion17 = true;\n          var _didIteratorError17 = false;\n          var _iteratorError17 = undefined;\n\n          try {\n            for (var _iterator17 = _this2.tasks[39][Symbol.iterator](), _step17; !(_iteratorNormalCompletion17 = (_step17 = _iterator17.next()).done); _iteratorNormalCompletion17 = true) {\n              var dvp2 = _step17.value;\n              var _iteratorNormalCompletion18 = true;\n              var _didIteratorError18 = false;\n              var _iteratorError18 = undefined;\n\n              try {\n                for (var _iterator18 = _this2.groupUsers[Symbol.iterator](), _step18; !(_iteratorNormalCompletion18 = (_step18 = _iterator18.next()).done); _iteratorNormalCompletion18 = true) {\n                  var _v4 = _step18.value;\n\n                  if (_v4.users.indexOf(dvp2.user_asigned) >= 0) {\n                    _v4.tasks.inprogress.push(dvp2);\n                  }\n                }\n              } catch (err) {\n                _didIteratorError18 = true;\n                _iteratorError18 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion18 && _iterator18.return) {\n                    _iterator18.return();\n                  }\n                } finally {\n                  if (_didIteratorError18) {\n                    throw _iteratorError18;\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError17 = true;\n            _iteratorError17 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion17 && _iterator17.return) {\n                _iterator17.return();\n              }\n            } finally {\n              if (_didIteratorError17) {\n                throw _iteratorError17;\n              }\n            }\n          }\n        }\n        if (_this2.tasks[41]) {\n          var _iteratorNormalCompletion19 = true;\n          var _didIteratorError19 = false;\n          var _iteratorError19 = undefined;\n\n          try {\n            for (var _iterator19 = _this2.tasks[41][Symbol.iterator](), _step19; !(_iteratorNormalCompletion19 = (_step19 = _iterator19.next()).done); _iteratorNormalCompletion19 = true) {\n              var imp = _step19.value;\n              var _iteratorNormalCompletion20 = true;\n              var _didIteratorError20 = false;\n              var _iteratorError20 = undefined;\n\n              try {\n                for (var _iterator20 = _this2.groupUsers[Symbol.iterator](), _step20; !(_iteratorNormalCompletion20 = (_step20 = _iterator20.next()).done); _iteratorNormalCompletion20 = true) {\n                  var _v5 = _step20.value;\n\n                  if (_v5.users.indexOf(imp.user_asigned) >= 0) {\n                    _v5.tasks.improving.push(imp);\n                  }\n                }\n              } catch (err) {\n                _didIteratorError20 = true;\n                _iteratorError20 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion20 && _iterator20.return) {\n                    _iterator20.return();\n                  }\n                } finally {\n                  if (_didIteratorError20) {\n                    throw _iteratorError20;\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError19 = true;\n            _iteratorError19 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion19 && _iterator19.return) {\n                _iterator19.return();\n              }\n            } finally {\n              if (_didIteratorError19) {\n                throw _iteratorError19;\n              }\n            }\n          }\n        }\n        if (_this2.tasks[40]) {\n          var _iteratorNormalCompletion21 = true;\n          var _didIteratorError21 = false;\n          var _iteratorError21 = undefined;\n\n          try {\n            for (var _iterator21 = _this2.tasks[40][Symbol.iterator](), _step21; !(_iteratorNormalCompletion21 = (_step21 = _iterator21.next()).done); _iteratorNormalCompletion21 = true) {\n              var cmp = _step21.value;\n              var _iteratorNormalCompletion22 = true;\n              var _didIteratorError22 = false;\n              var _iteratorError22 = undefined;\n\n              try {\n                for (var _iterator22 = _this2.groupUsers[Symbol.iterator](), _step22; !(_iteratorNormalCompletion22 = (_step22 = _iterator22.next()).done); _iteratorNormalCompletion22 = true) {\n                  var _v6 = _step22.value;\n\n                  if (_v6.users.indexOf(cmp.user_asigned) >= 0) {\n                    _v6.tasks.done.push(cmp);\n                  }\n                }\n              } catch (err) {\n                _didIteratorError22 = true;\n                _iteratorError22 = err;\n              } finally {\n                try {\n                  if (!_iteratorNormalCompletion22 && _iterator22.return) {\n                    _iterator22.return();\n                  }\n                } finally {\n                  if (_didIteratorError22) {\n                    throw _iteratorError22;\n                  }\n                }\n              }\n            }\n          } catch (err) {\n            _didIteratorError21 = true;\n            _iteratorError21 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion21 && _iterator21.return) {\n                _iterator21.return();\n              }\n            } finally {\n              if (_didIteratorError21) {\n                throw _iteratorError21;\n              }\n            }\n          }\n        }\n        _this2.spinner = false;\n      });\n      this._dailys.getPtsToday().subscribe(function (res) {\n        _this2.todaypts = res.data;\n      });\n      // this.pending.total_badges = 0;\n    }\n  }, {\n    key: 'getBurnDown',\n    value: function getBurnDown(workgroup) {\n      this._dashBoard.getBurndown(workgroup.current_sprint).subscribe(function (res) {\n        if (res) {\n          var datasets = [];\n          for (var u in res.data.users) {\n            if (workgroup.users.indexOf(res.data.users[u].user_id) >= 0) {\n              datasets.push({\n                label: res.data.users[u].label,\n                data: res.data.users[u].data,\n                fill: false,\n                borderColor: res.data.users[u].color,\n                backgroundColor: res.data.users[u].color,\n                user: res.data.users[u].user_id\n              });\n            }\n          }\n          datasets.push({\n            label: res.data.users[0].label,\n            data: res.data.users[0].data,\n            fill: false,\n            borderColor: res.data.users[0].color,\n            backgroundColor: res.data.users[0].color\n          });\n          workgroup.burndownData = {\n            labels: res.data.days,\n            datasets: datasets,\n            options: { legend: { boxWidth: 40 } },\n            daily: res.data.daily\n          };\n        }\n      });\n    }\n  }, {\n    key: 'startScroll',\n    value: function startScroll(scrollBool) {\n      this.scrollOn = scrollBool;\n    }\n  }, {\n    key: 'resetScrollTop',\n    value: function resetScrollTop() {\n      $('#table-scroll').animate({ scrollTop: 0 }, 2500);\n      $('#burndown-scroll').animate({ scrollTop: 0 }, 2500);\n    }\n  }, {\n    key: 'handleScroll',\n    value: function handleScroll(event) {\n      $('.body-dailyboard').scrollTop(event.originalEvent.target.scrollTop);\n      $('#burndown-scroll').scrollTop(event.originalEvent.target.scrollTop);\n    }\n  }, {\n    key: 'showModal',\n    value: function showModal(idtk) {\n      var _this3 = this;\n\n      this.note = { attachments: [] };\n      this.mdT.attachments = [];\n      this.mdT.total_attachments = 0;\n      this.mdT.timeline = [];\n      this.mdT.form = [];\n      this.mdT.total_adjusted = [];\n      this.mdT.sprint = [];\n      if (idtk != null) {\n        this._sprint.getSprint(idtk.spri_id).subscribe(function (res) {\n          _this3.mdT.sprint = res.data;\n        });\n      }\n      if (!idtk.proj_id) {\n        this.mdT = idtk;\n        if (this.mdT.total_adjusted > 0) {\n          this.getAdjusted(idtk.task_id);\n        } else {\n          this.mdT.total_adjusted = [];\n        }\n      } else {\n        this._projects.getproject(idtk.proj_id).subscribe(function (res) {\n          _this3.mdT = idtk;\n          _this3.mdT.project = res.data;\n          if (_this3.mdT.project.proj_description) {\n            _this3.mdT.project.proj_description = _this3.sanitizeHtml(res.data.proj_description);\n            $(\"#someFrame\").attr(\"srcdoc\", _this3.escapeHtml(_this3.mdT.project.proj_description));\n          }\n          if (_this3.mdT.total_adjusted > 0) {\n            _this3.getAdjusted(idtk.task_id);\n          } else {\n            _this3.mdT.total_adjusted = [];\n          }\n        });\n      }\n      this.getComments(idtk.task_id);\n      this.getAttachments(idtk.task_id);\n      this.getTimeline(idtk.task_id);\n      this.getForm(idtk.task_id);\n    }\n  }, {\n    key: 'getForm',\n    value: function getForm(task) {\n      var _this4 = this;\n\n      this._tasks.getTaskFields(task).subscribe(function (res) {\n        _this4.mdT.form = res.data;\n      });\n    }\n  }, {\n    key: 'getTimeline',\n    value: function getTimeline(task) {\n      var _this5 = this;\n\n      this._tasks.getTimelinetk(task).subscribe(function (res) {\n        _this5.mdT.timeline = res.data;\n      });\n    }\n  }, {\n    key: 'getAttachments',\n    value: function getAttachments(taskid) {\n      var _this6 = this;\n\n      this._tasks.getAttachments(taskid).subscribe(function (res) {\n        _this6.mdT.attachments = res.data;\n        _this6.task.attachments = res.data;\n        for (var i = 0; i < _this6.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this6.mdT.total_attachments = 1;\n          } else {\n            _this6.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this6.task.attachments.length; i++) {\n          if (i == 0) {\n            _this6.task.total_attachments = 1;\n          } else {\n            _this6.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: 'getComments',\n    value: function getComments(tk) {\n      var _this7 = this;\n\n      this._tasks.getComments(tk).subscribe(function (res) {\n        _this7.task.comments = res.data;\n        _this7.mdT.comments = res.data;\n        var elem = document.getElementById('mdTComments');\n        var elem2 = document.getElementById('taskComments');\n        if (elem && elem2) {\n          elem.scrollTop = elem.scrollHeight;\n          elem2.scrollTop = elem2.scrollHeight;\n        }\n        return res.data;\n      });\n      this.note_text = \"\";\n      this.note = { attachments: [] };\n    }\n  }, {\n    key: 'getAdjusted',\n    value: function getAdjusted(task) {\n      var _this8 = this;\n\n      this.mdT.total_adjusted = [];\n      this._tasks.getAdjusted(task).subscribe(function (res) {\n        if (res.data.length > 0) {\n          var _iteratorNormalCompletion23 = true;\n          var _didIteratorError23 = false;\n          var _iteratorError23 = undefined;\n\n          try {\n            for (var _iterator23 = res.data[Symbol.iterator](), _step23; !(_iteratorNormalCompletion23 = (_step23 = _iterator23.next()).done); _iteratorNormalCompletion23 = true) {\n              var c = _step23.value;\n\n              var message = \"\";\n              var header = \"\";\n              var points = \"\";\n              header = c.user_name + \" \" + c.user_lastname;\n              if (c.taex_points > 0) {\n                points = \"Added \" + Math.abs(c.taex_points) + \" points\";\n              } else if (c.taex_points < 0) {\n                points = \"Removed \" + Math.abs(c.taex_points) + \" points\";\n              } else {\n                points = \"0 Points added or removed.\";\n              }\n              var delivery = \" Delivery date : \" + c.taex_delivery;\n              _this8.mdT.total_adjusted.push({ header: header, message: message, points: points, delivery: delivery, date: c.taex_updated, reason: c.taex_description, urlimagen: c.urlimagen });\n            }\n          } catch (err) {\n            _didIteratorError23 = true;\n            _iteratorError23 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion23 && _iterator23.return) {\n                _iterator23.return();\n              }\n            } finally {\n              if (_didIteratorError23) {\n                throw _iteratorError23;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: 'escapeHtml',\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: 'sanitizeHtml',\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          text = this.decode64(text);\n        }\n        text = this.escapeHtml(text);\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }]);\n\n  return DailyBoardComponent;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _group.GroupService, _header.HeaderService, _login.LoginService, _users.UsersService, _dashboard.DashboardService, _task.TaskService, _daily.DailyService, _directory.DirectoryService, _project.ProjectService, _sprint.SprintService], DailyBoardComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 423 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ReportsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _reportsTemplate = __webpack_require__(869);\n\nvar _reportsTemplate2 = _interopRequireDefault(_reportsTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ReportsComponent = exports.ReportsComponent = (_dec = (0, _core.Component)({\n  selector: \"reports\",\n  template: _reportsTemplate2.default\n}), _dec(_class = function () {\n  function ReportsComponent(title, router, sanitizer, groupService, sprintService, toastr, confirmationService) {\n    var _this = this;\n\n    _classCallCheck(this, ReportsComponent);\n\n    this._title = title;\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.confirm = confirmationService;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._sprint = sprintService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.textState = [\"\"];\n    this.posState = \"para_status\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.lblgroups = [];\n    this.sprint = [];\n    this.newSprint = [];\n    this.sprintdays = [];\n    this.sprints = [];\n    this.editvalue = false;\n    this.selectedsprint = 0;\n    this.seletedDaysSprint = [];\n    this.mysprints = [];\n    this.projectsnames = {};\n    this.labelsproj = [];\n    this.tableinfo = [];\n    this.tableinfoU = [];\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Reports ::.\");\n    this.icon = \"sq sq-down-arrow\";\n    this._groups.getGroups().subscribe(function (data) {\n      _this.sprint.grop_id = data.data[0].grop_id; //Por defecto el primer grupo es seleccionado para mostar su informacion\n      _this.groups = data.data;\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n\n      _this.getListReport(_this.sprint.grop_id);\n    });\n    this.tagMenu = 1;\n    this.drawn = false;\n    this.emptyReport = false;\n    this.isLoading = false;\n  }\n\n  _createClass(ReportsComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      //this.getPieSprint();\n      // this.getBarSprint();\n      // this.getTable();\n    }\n  }, {\n    key: \"getListReport\",\n    value: function getListReport(group_id) {\n      var _this2 = this;\n\n      this.mysprints = [];\n      this._sprint.getListReport(group_id).subscribe(function (res) {\n        _this2.mysprints = res.data;\n        if (_this2.mysprints.length > 0) {\n          _this2.sprint.date_init = res.data[0].spri_init;\n          _this2.sprint.date_end = res.data[0].spri_end;\n          _this2.sprint.spri_id = res.data[0].spri_id;\n        } else {\n          _this2.sprint.spri_id = 0;\n        }\n        _this2.getReport();\n      });\n    }\n  }, {\n    key: \"showSprint\",\n    value: function showSprint(sprint) {\n      this.selectedsprint = sprint; //se actualiza cada vez que se selecciona un SPRINT\n      for (var i = 0; i < this.mysprints.length; i++) {\n        if (this.mysprints[i].value == sprint) {\n          this.sprint = this.mysprints[i];\n          this.sprint.date_init = this.mysprints[i].spri_init;\n          this.sprint.date_end = this.mysprints[i].spri_end;\n        }\n      }\n    }\n  }, {\n    key: \"getReport\",\n    value: function getReport() {\n      var _this3 = this;\n\n      this.drawn = false;\n      this.isLoading = true;\n      this._sprint.getTasksReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(function (res) {\n        _this3.isLoading = false;\n        _this3.tableinfo = res.data;\n        _this3.emptyReport = _this3.tableinfo.length ? false : true;\n      });\n      this._sprint.getUsersReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(function (res) {\n        if (res.data.userstable.length > 0) {\n          _this3.tableinfoU = res.data.userstable;\n        }\n      });\n      // this._sprint.getProjectsReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(res => {\n      //   if(res.data.projecttable.length > 0){\n      //     this.projectsnames = res.data.projecttable;\n      //     this.labelsproj = res.data.projectpie.labels;\n      //   }\n      // });\n      this.getPieSprint();\n      this.getBarSprint();\n      this.getTable();\n      this.updatePuglins();\n    }\n  }, {\n    key: \"getSprints\",\n    value: function getSprints(sprints) {\n      var mydate_init = new Date();\n      var month = new Array();\n      month[0] = \"Jan\";\n      month[1] = \"Feb\";\n      month[2] = \"Mar\";\n      month[3] = \"Apr\";\n      month[4] = \"May\";\n      month[5] = \"Jun\";\n      month[6] = \"Jul\";\n      month[7] = \"Aug\";\n      month[8] = \"Sep\";\n      month[9] = \"Oct\";\n      month[10] = \"Nov\";\n      month[11] = \"Dec\";\n\n      for (var i = 0; i < sprints.length; i++) {\n        var mydate_init = new Date(sprints[i].spri_init);\n        var month_init = month[mydate_init.getMonth()];\n        var mydate_end = new Date(sprints[i].spri_end);\n        var month_end = month[mydate_end.getMonth()];\n        var label = \"\";\n        var date1 = \"\";\n        var date2 = \"\";\n        label = month_init + \" \" + parseInt(mydate_init.getDate() + 1) + \" \" + \" through \" + month_end + \" \" + parseInt(mydate_end.getDate() + 1) + \" \" + mydate_end.getFullYear();\n        date1 = parseInt(mydate_init.getFullYear()) + \"-\" + parseInt(mydate_init.getMonth() + 1) + \"-\" + parseInt(mydate_init.getDate() + 1);\n        date2 = parseInt(mydate_end.getFullYear()) + \"-\" + parseInt(mydate_end.getMonth() + 1) + \"-\" + parseInt(mydate_end.getDate() + 1);\n        this.mysprints[i].date_init = date1;\n        this.mysprints[i].date_end = date2;\n        this.mysprints[i].label = label;\n        this.mysprints[i].value = sprints[i].spri_id;\n        if (this.mysprints[i].value == this.sprint.spri_id) {\n          this.sprint = this.mysprints[i];\n        }\n      }\n      this.selectedsprint = this.mysprints[0].spri_id; //Por defecto el primer SPRINT es seleccionado para mostar su informacion\n    }\n  }, {\n    key: \"getPieSprint\",\n    value: function getPieSprint() {\n      var _this4 = this;\n\n      var datasetspie = [];\n      var background = [];\n      var costs = [];\n      var labelscosts = [];\n      var labelspoints = [];\n      var points = [];\n      // let labels = [];\n      var rect = [];\n      this._sprint.getProjectsReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(function (res) {\n        if (res.data.projecttable.length > 0) {\n          _this4.projectsnames = res.data.projecttable;\n          _this4.labelsproj = res.data.projectpie.labels;\n          background = res.data.projectpie.background;\n          costs = res.data.projectpie.costs;\n          points = res.data.projectpie.points;\n          labelscosts = res.data.projectpie.labelscosts;\n          labelspoints = res.data.projectpie.labelspoints;\n          rect = res.data.projectpie.rect;\n          datasetspie.push({\n            data: points,\n            backgroundColor: background,\n            hoverBackgroundColor: background,\n            cost: labelscosts,\n            type: \"doughnut\"\n          });\n          datasetspie.push({\n            data: points,\n            pointStyle: rect,\n            backgroundColor: background,\n            hoverBackgroundColor: background,\n            points: labelspoints\n          });\n          _this4.datapie = {\n            labels: _this4.labelsproj,\n            datasets: datasetspie\n          };\n          _this4.optionspie = {\n            responsive: true,\n            legend: {\n              display: true,\n              position: \"bottom\",\n              fullWidth: true,\n              labels: {\n                usePointStyle: true\n              }\n            }\n          };\n        }\n      });\n    }\n  }, {\n    key: \"getBarSprint\",\n    value: function getBarSprint() {\n      var _this5 = this;\n\n      this.tableinfoU = [];\n      var labels = [];\n      var pending_points = [];\n      var estimated_points = [];\n      var registered_points = [];\n      var extra_points = [];\n      var datasetsbar = [];\n      this._sprint.getUsersReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(function (res) {\n        if (res.data.userstable.length > 0) {\n          _this5.tableinfoU = res.data.userstable;\n          labels = res.data.usersbar.labels;\n          pending_points = res.data.usersbar.pending_points;\n          estimated_points = res.data.usersbar.estimated_points;\n          registered_points = res.data.usersbar.registered_points;\n          extra_points = res.data.usersbar.extra_points;\n          datasetsbar.push({\n            label: \"Pending Points\",\n            backgroundColor: \"#ed3d66\",\n            data: pending_points,\n            pointStyle: \"rect\"\n          });\n          datasetsbar.push({\n            label: \"Estimated Points\",\n            backgroundColor: \"#59d5f4\",\n            data: estimated_points,\n            pointStyle: \"rect\"\n          });\n          datasetsbar.push({\n            label: \"Registered Points\",\n            backgroundColor: \"rgb(28,110,198)\",\n            data: registered_points,\n            pointStyle: \"rect\"\n          });\n          datasetsbar.push({\n            label: \"Extra Points\",\n            backgroundColor: \"#ffbe2c\",\n            data: extra_points,\n            pointStyle: \"rect\"\n          });\n          _this5.databar = {\n            labels: labels,\n            datasets: datasetsbar\n          };\n          _this5.optionsbar = {\n            tooltips: {\n              mode: \"index\",\n              intersect: false\n            },\n            responsive: true,\n            legend: {\n              display: true,\n              position: \"bottom\",\n              labels: {\n                usePointStyle: true\n              }\n            },\n            scales: {\n              xAxes: [{\n                stacked: true\n              }],\n              yAxes: [{\n                stacked: true,\n                ticks: {\n                  max: 120,\n                  min: -45,\n                  stepSize: 25.5\n                }\n              }]\n            },\n            title: {\n              display: false,\n              text: \"bar-report\"\n            }\n          };\n        }\n      });\n    }\n  }, {\n    key: \"updatePuglins\",\n    value: function updatePuglins() {\n      if (this.drawn == false) {\n        var cont = 0;\n        // Define a plugin to provide data labels - ajustar colores y ubicacion de acuerdo a la Grafica y al valor de los datos.\n        Chart.plugins.register({\n          afterDatasetsDraw: function afterDatasetsDraw(chart) {\n\n            var ctx = chart.ctx;\n            var label = chart.data.datasets.label;\n            chart.data.datasets.forEach(function (dataset, i) {\n\n              var meta = chart.getDatasetMeta(i);\n              var label = chart.data.datasets[i].label;\n              if (!meta.hidden) {\n                meta.data.forEach(function (element, index) {\n\n                  if (meta.type == \"bar\") {\n                    var dataString = dataset.data[index].toString();\n                    if (label == \"Pending Points\" || label == \"Extra Points\") {\n                      if (dataString == 0 || dataString < 0) {\n                        var padding = -10;\n                      } else {\n                        var padding = 5;\n                      }\n                      if (dataString == 0) {\n                        ctx.fillStyle = \"transparent\";\n                      } else {\n                        ctx.fillStyle = \"gray\";\n                        var fontStyle = \"normal\";\n                      }\n                    } else {\n                      ctx.fillStyle = \"white\";\n                      var fontStyle = \"bold\";\n                      var padding = -20;\n                    }\n                    var fontSize = 10;\n\n                    var fontFamily = \"Helvetica Neue\";\n                    ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);\n                    ctx.textAlign = \"center\";\n                    ctx.textBaseline = \"middle\";\n                    var position = element.tooltipPosition();\n                    ctx.fillText(dataString, position.x, position.y - fontSize / 2 - padding);\n                  } else {\n                    if (meta.type == \"doughnut\") {\n                      if (dataset.cost[index] != null) {\n                        var dataString = dataset.cost[index].toString();\n                        var padding = -2;\n                        var fontStyle = \"normal\";\n                        var fontFamily = \"Helvetica Neue\";\n                        var fontSize = 10;\n                        ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);\n                        ctx.fillStyle = \"gray\";\n                        ctx.textAlign = \"center\";\n                        ctx.textBaseline = \"middle\";\n                        var position = element.tooltipPosition();\n                        ctx.fillText(dataString, position.x, position.y - fontSize / 2 - padding);\n                      }\n                    } else {\n                      if (dataset.points[index] != null) {\n                        var dataString = dataset.points[index].toString();\n                        var padding = -2;\n                        var fontStyle = \"normal\";\n                        var fontFamily = \"Helvetica Neue\";\n                        var fontSize = 10;\n                        ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);\n                        ctx.fillStyle = \"gray\";\n                        ctx.textAlign = \"center\";\n                        ctx.textBaseline = \"middle\";\n                        var position = element.tooltipPosition();\n                        ctx.fillText(dataString, position.x, position.y - fontSize / 2 - padding);\n                      }\n                    }\n\n                    // }\n                  }\n                });\n                meta.data.forEach(function (element, index) {});\n              }\n            });\n          }\n        });\n        //\n        this.drawn = true;\n      }\n    }\n  }, {\n    key: \"getTable\",\n    value: function getTable() {\n      var _this6 = this;\n\n      this._sprint.getTasksReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(function (res) {\n        _this6.tableinfo = res.data;\n      });\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      if (state == \"Outstanding\") {\n        this.textState = [\"1\"];\n        this.posState = \"outst\";\n      } else {\n        this.textState = state;\n        this.posState = \"para_status\";\n      }\n      this.currentpage = 1;\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state) {\n      this.sprint.grop_id = state;\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.getListReport(this.sprint.grop_id);\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n    }\n  }, {\n    key: \"exportExcel\",\n    value: function exportExcel(type) {\n      var _this7 = this;\n\n      if (!this.emptyReport) {\n        this._sprint.getExcel(type, this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(function (res) {\n          var route = res.data;\n          if (res.message == 'OK') {\n            _this7.toastr.success(\"report generated\");\n            //Usaremos un link para iniciar la descarga \n            var save = document.createElement('a');\n            save.href = route;\n            save.target = '_blank';\n            //Truco: así le damos el nombre al archivo\n            save.download = 'report';\n            var clicEvent = new MouseEvent('click', {\n              'view': window,\n              'bubbles': true,\n              'cancelable': true\n            });\n            //Simulamos un clic del usuario\n            save.dispatchEvent(clicEvent);\n            //Y liberamos recursos...\n            (window.URL || window.webkitURL).revokeObjectURL(save.href);\n          } else {\n            _this7.toastr.error(\"The document could not be generated\");\n          }\n        });\n      } else {\n        this.toastr.warning(\"No data in the report\");\n      }\n    }\n  }, {\n    key: \"formatDate\",\n    value: function formatDate(date) {\n      date = new Date(date);\n      if (date && date !== \"\") {\n        var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n        var monthIndex = date.getMonth() + 1 < 10 ? \"0\" + (date.getMonth() + 1) : date.getMonth() + 1;\n        var year = date.getFullYear();\n        return year + '-' + monthIndex + '-' + day;\n      } else {\n        return '';\n      }\n    }\n  }]);\n\n  return ReportsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _group.GroupService, _sprint.SprintService, _ngxToastr.ToastrService, _primeng.ConfirmationService], ReportsComponent);\n\n/***/ }),\n/* 424 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.GuideburndownComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _guideburndownTemplate = __webpack_require__(870);\n\nvar _guideburndownTemplate2 = _interopRequireDefault(_guideburndownTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar GuideburndownComponent = exports.GuideburndownComponent = (_dec = (0, _core.Component)({\n  selector: \"guideburndown\",\n  template: _guideburndownTemplate2.default\n\n}), _dec(_class = function () {\n  function GuideburndownComponent(route, router, toastr) {\n    _classCallCheck(this, GuideburndownComponent);\n\n    this._route = route;\n    this.fragment = \"\";\n    this.toastr = toastr;\n\n    router.events.subscribe(function (s) {\n      if (s instanceof _router.NavigationEnd) {\n        var tree = router.parseUrl(router.url);\n        if (tree.fragment) {\n          var element = document.querySelector(\"#\" + tree.fragment);\n          if (element) {\n            element.scrollIntoView(true);\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(GuideburndownComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      var _this = this;\n\n      this._route.fragment.subscribe(function (fragment) {\n        _this.fragment = fragment;\n      });\n    }\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      try {\n        document.querySelector('#' + this.fragment).scrollIntoView();\n      } catch (e) {}\n    }\n  }]);\n\n  return GuideburndownComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.ActivatedRoute, _router.Router, _ngxToastr.ToastrService], GuideburndownComponent);\n\n/***/ }),\n/* 425 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.GuideprojectboardComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _guideprojectboardTemplate = __webpack_require__(871);\n\nvar _guideprojectboardTemplate2 = _interopRequireDefault(_guideprojectboardTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar GuideprojectboardComponent = exports.GuideprojectboardComponent = (_dec = (0, _core.Component)({\n  selector: \"guideprojectboard\",\n  template: _guideprojectboardTemplate2.default\n\n}), _dec(_class = function () {\n  function GuideprojectboardComponent(route, router, toastr) {\n    _classCallCheck(this, GuideprojectboardComponent);\n\n    this._route = route;\n    this.fragment = \"\";\n    this.toastr = toastr;\n\n    router.events.subscribe(function (s) {\n      if (s instanceof _router.NavigationEnd) {\n        var tree = router.parseUrl(router.url);\n        if (tree.fragment) {\n          var element = document.querySelector(\"#\" + tree.fragment);\n          if (element) {\n            element.scrollIntoView(true);\n          }\n        }\n      }\n    });\n  }\n\n  _createClass(GuideprojectboardComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      var _this = this;\n\n      this._route.fragment.subscribe(function (fragment) {\n        _this.fragment = fragment;\n      });\n    }\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      try {\n        document.querySelector('#' + this.fragment).scrollIntoView();\n      } catch (e) {}\n    }\n  }]);\n\n  return GuideprojectboardComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.ActivatedRoute, _router.Router, _ngxToastr.ToastrService], GuideprojectboardComponent);\n\n/***/ }),\n/* 426 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.UserguideloginComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _userguideloginTemplate = __webpack_require__(872);\n\nvar _userguideloginTemplate2 = _interopRequireDefault(_userguideloginTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar UserguideloginComponent = exports.UserguideloginComponent = (_dec = (0, _core.Component)({\n  selector: \"userguidelogin\",\n  template: _userguideloginTemplate2.default\n\n}), _dec(_class = function () {\n  function UserguideloginComponent(route, toastr) {\n    _classCallCheck(this, UserguideloginComponent);\n\n    this._route = route;\n\n    this.toastr = toastr;\n  }\n\n  _createClass(UserguideloginComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }]);\n\n  return UserguideloginComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.Router, _ngxToastr.ToastrService], UserguideloginComponent);\n\n/***/ }),\n/* 427 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.GroupListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _group = __webpack_require__(11);\n\nvar _users = __webpack_require__(20);\n\nvar _roles = __webpack_require__(46);\n\nvar _pipes = __webpack_require__(14);\n\nvar _grouplistTemplate = __webpack_require__(873);\n\nvar _grouplistTemplate2 = _interopRequireDefault(_grouplistTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar GroupListComponent = exports.GroupListComponent = (_dec = (0, _core.Component)({\n  selector: \"grouplist\",\n  template: _grouplistTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe]\n}), _dec(_class = function () {\n  function GroupListComponent(title, router, sanitizer, rolesService, toastr, groupService, usersService, confirmationService) {\n    _classCallCheck(this, GroupListComponent);\n\n    this.loadingGroup = false;\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this.toastr = toastr;\n    this._group = groupService;\n    this._users = usersService;\n    this._roles = rolesService;\n    this.confirm = confirmationService;\n    this.groups = [];\n    this.grouplist = [];\n    this.group = [];\n    this.roles = [];\n    this.user = {};\n    this.errors = 0;\n    this.searchuser = \"\";\n    this.selusrs = [];\n    this.users = [];\n    this.usersEdit = [];\n    this.usersg = [];\n    this.pendingusers = [];\n    this.selectedgroup = 0;\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Groups ::.\");\n  }\n\n  _createClass(GroupListComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {\n      this.getUsers();\n      this.getRoles();\n      this.reload();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this = this;\n\n      this.grouplist = [];\n      this._group.getmyGroups().subscribe(function (res) {\n        _this.groups = res.data;\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.grouplist.push({ label: c.grop_name, value: c.grop_id });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n      this.errors = 0;\n    }\n  }, {\n    key: \"showGroup\",\n    value: function showGroup(grop) {\n      this.group = grop;\n      this.group.users = [];\n      this.getUsersGroup(grop.grop_id);\n      $(\"#mdGroup\").modal(\"show\");\n    }\n  }, {\n    key: \"getUsersGroup\",\n    value: function getUsersGroup(id_group) {\n      var _this2 = this;\n\n      this._group.getUsersGroup(id_group).subscribe(function (res) {\n        if (res.data.length > 0) {\n          _this2.group.users = res.data;\n        } else {\n          _this2.group.users = [];\n        }\n      });\n    }\n  }, {\n    key: \"editGroup\",\n    value: function editGroup(grop) {\n      var _this3 = this;\n\n      this.group = grop;\n      this.group.users = [];\n      this.usersEdit = [];\n\n      this._users.listUsersEdit(grop.grop_id).subscribe(function (data) {\n        _this3.userListEdit = data.data;\n      });\n\n      this._group.getUsersGroup(grop.grop_id).subscribe(function (res) {\n        if (res.data.length > 0) {\n          _this3.group.users = res.data;\n        }\n      });\n      $(\"#mdEditGroup\").modal(\"show\");\n    }\n  }, {\n    key: \"addGroup\",\n    value: function addGroup() {\n      this.group = {};\n      $(\"#addGroup\").modal(\"show\");\n    }\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this.group = {};\n    }\n  }, {\n    key: \"saveGroup\",\n    value: function saveGroup(gr) {\n      var _this4 = this;\n\n      if (this.group.grop_name && this.group.user_id) {\n        if (this.group.grop_name.trim() != \"\" && this.group.user_id != 0) {\n          this._group.saveGroup(gr).subscribe(function (data) {\n            if (data.data == \"OK\") {\n              _this4.toastr.success(\"Group has been created successfully\");\n              _this4.reload();\n            } else {\n              _this4.toastr.error(data.message, \"Error!\");\n            }\n          });\n        } else {\n          this.toastr.warning(\"Incomplete Fields!\");\n        }\n      } else {\n        this.toastr.warning(\"Incomplete Fields!\");\n      }\n    }\n  }, {\n    key: \"getUsers\",\n    value: function getUsers() {\n      var _this5 = this;\n\n      this.users = [];\n      this._users.getUserList().subscribe(function (data) {\n        _this5.userList = data.data;\n        var _iteratorNormalCompletion2 = true;\n        var _didIteratorError2 = false;\n        var _iteratorError2 = undefined;\n\n        try {\n          for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n            var c = _step2.value;\n\n            if (c.user_name) {\n              _this5.users.push({\n                label: c.user_name + \" \" + c.user_lastname,\n                value: c.user_id\n              });\n            }\n          }\n        } catch (err) {\n          _didIteratorError2 = true;\n          _iteratorError2 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n              _iterator2.return();\n            }\n          } finally {\n            if (_didIteratorError2) {\n              throw _iteratorError2;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"addUser\",\n    value: function addUser() {\n      this.user = {};\n      $(\"#addUser\").modal(\"show\");\n    }\n  }, {\n    key: \"getUserAlias\",\n    value: function getUserAlias(user) {\n\n      var split_user = user.toLowerCase().split(\".\");\n      var split_lastname = split_user[1].split(\" \");\n      return split_user[0].charAt(0).toUpperCase() + \".\" + this.firstUppercase(split_lastname[0]);\n    }\n  }, {\n    key: \"firstUppercase\",\n    value: function firstUppercase(str) {\n      return str.charAt(0).toUpperCase() + str.slice(1);\n    }\n  }, {\n    key: \"saveUser\",\n    value: function saveUser(usr, type) {\n      var _this6 = this;\n\n      var usrNew = false;\n      var email_e = usr.user_email.toLowerCase();\n      var result_e = email_e.split(\"@\");\n      if (type == \"new\") {\n        usr.user_user = result_e[0].toLowerCase();\n        var user_name = usr.user_name.trim() + \".\" + usr.user_lastname.trim();\n        usr.user_alias = this.getUserAlias(user_name);\n\n        this._users.saveUser(usr).subscribe(function (data) {\n          if (data.data = \"OK\") {\n            _this6.toastr.success(\"User has been created successfully\");\n          } else {\n            _this6.toastr.error(data.message, \"Error!\");\n          }\n        });\n      }\n      this.reload();\n    }\n  }, {\n    key: \"verifyEmail\",\n    value: function verifyEmail(email) {\n      var _this7 = this;\n\n      this._users.verifyEmail(email).subscribe(function (data) {\n        if (data.data == true) {\n          _this7.errors = 0;\n          return true;\n        } else {\n          // $(\"#result2\").text(\"Invalid email\");\n          // $(\"#result2\").css(\"color\", \"red\");\n          _this7.errors = 1;\n          return false;\n        }\n      });\n    }\n  }, {\n    key: \"getRoles\",\n    value: function getRoles() {\n      var _this8 = this;\n\n      this.roles = [];\n      this._roles.getRoles().subscribe(function (res) {\n        var _iteratorNormalCompletion3 = true;\n        var _didIteratorError3 = false;\n        var _iteratorError3 = undefined;\n\n        try {\n          for (var _iterator3 = res.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n            var c = _step3.value;\n\n            _this8.roles.push({ label: c.roleName, value: c.roleId });\n          }\n        } catch (err) {\n          _didIteratorError3 = true;\n          _iteratorError3 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion3 && _iterator3.return) {\n              _iterator3.return();\n            }\n          } finally {\n            if (_didIteratorError3) {\n              throw _iteratorError3;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"validate2\",\n    value: function validate2() {\n      $(\"#result2\").text(\"\");\n      var email = $(\"#float-input-email2\").val();\n      if (this.validateEmail(email)) {\n        $(\"#result2\").text(email + \" is valid :)\");\n        $(\"#result2\").css(\"color\", \"green\");\n        return true;\n      } else {\n        $(\"#result2\").text(email + \" is not valid :(\");\n        $(\"#result2\").css(\"color\", \"red\");\n        this.errors = this.errors + 1;\n        return false;\n      }\n    }\n  }, {\n    key: \"validateEmail\",\n    value: function validateEmail(email) {\n      var regexp = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n      return regexp.test(email);\n    }\n  }, {\n    key: \"deleteGroup\",\n    value: function deleteGroup(id_group) {\n      var _this9 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to proceed?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (id_group) {\n            _this9._group.deleteGroup(id_group).subscribe(function (data) {\n              if (data.data === \"OK\") {\n                _this9.toastr.success(\"Group has been deleted successfully\");\n              } else {\n                _this9.toastr.error(data.message, \"Error!\");\n              }\n              _this9.ngOnInit();\n            });\n          } else {}\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"deleteUserGroup\",\n    value: function deleteUserGroup(user) {\n      var _this10 = this;\n\n      this._group.deleteUserGroup(user.user_id).subscribe(function (data) {\n        if (data.data = \"OK\") {\n          _this10.toastr.success(\"user has been deleted successfully\");\n        } else {\n          _this10.toastr.error(data.message, \"Error!\");\n        }\n        _this10.getUsersGroup(user.grop_id);\n        _this10.reload();\n      });\n    }\n  }, {\n    key: \"addUserGroup\",\n    value: function addUserGroup() {\n      this.pendingUsers();\n      $(\"#mdAddUsrGroup\").modal(\"show\");\n    }\n  }, {\n    key: \"pendingUsers\",\n    value: function pendingUsers() {\n      var _this11 = this;\n\n      this._group.getPendigUsers().subscribe(function (data) {\n        if (data.data.length > 0) {\n          _this11.pendingusers = data.data;\n          _this11.usersg.grop_id = _this11.pendingusers[0].grop_id;\n          _this11.usersg.grop_name = _this11.pendingusers[0].grop_name;\n          _this11.usersg.permits = _this11.pendingusers[0].permits;\n        } else if (data.data.length === 0) {\n          _this11.pendingusers = [];\n          _this11.usersg.grop_id = '';\n          _this11.usersg.grop_name = '';\n          _this11.usersg.permits = '';\n        }\n        _this11.loadingGroup = false;\n      });\n    }\n  }, {\n    key: \"closeModal\",\n    value: function closeModal() {\n      this.searchuser = \"\";\n    }\n  }, {\n    key: \"saveUsers\",\n    value: function saveUsers(selusrs, grop_id) {\n      var _this12 = this;\n\n      this.loadingGroup = true;\n      this._group.saveUsersGroup(grop_id, selusrs).subscribe(function (res) {\n        if (res.data === \"OK\") {\n          _this12.toastr.success(\"User(s) added successfully\");\n        } else {\n          _this12.toastr.warning(data.message, \"There was an error\");\n        }\n        _this12.reload();\n        _this12.users = {};\n        _this12.selusrs = [];\n        _this12.pendingUsers();\n      });\n    }\n  }, {\n    key: \"validateGroup\",\n    value: function validateGroup() {\n      return !this.group.grop_name || this.group.grop_name.trim() == \"\" || this.group.user_id == 0 || !this.group.user_id;\n    }\n  }, {\n    key: \"soloLetras\",\n    value: function soloLetras(e) {\n      var key = e.keyCode || e.which;\n      var teclado = String.fromCharCode(key).toLowerCase();\n      var letras = \"áéíóúabcdefghijklmnñopqrstuvwxyz \";\n      var especiales = \"13-37-38-46-164\";\n      var teclado_especial = false;\n      for (var i in especiales) {\n        if (key == especiales[i]) {\n          var teclado_especial = true;\n          break;\n        }\n      }\n      if (letras.indexOf(teclado) == -1 && !teclado_especial) {\n        return false;\n      }\n    }\n  }]);\n\n  return GroupListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _roles.RolesService, _ngxToastr.ToastrService, _group.GroupService, _users.UsersService, _primeng.ConfirmationService], GroupListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 428 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.MySprintComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _primeng = __webpack_require__(10);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _project = __webpack_require__(18);\n\nvar _mysprintTemplate = __webpack_require__(874);\n\nvar _mysprintTemplate2 = _interopRequireDefault(_mysprintTemplate);\n\nvar _task = __webpack_require__(19);\n\nvar _daily = __webpack_require__(45);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nvar _mail = __webpack_require__(36);\n\nvar _note = __webpack_require__(24);\n\nvar _users = __webpack_require__(20);\n\nvar _dashboard = __webpack_require__(44);\n\nvar _pipes = __webpack_require__(14);\n\nvar _product = __webpack_require__(22);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar MySprintComponent = exports.MySprintComponent = (_dec = (0, _core.Component)({\n  selector: \"mysprint\",\n  template: _mysprintTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe]\n}), _dec(_class = function () {\n  function MySprintComponent(title, router, sanitizer, arouter, taskService, groupService, sprintService, mailService, ProjectService, productService, noteService, userService, toastr, dailyService, confirmationService, dashboardService) {\n    var _this = this;\n\n    _classCallCheck(this, MySprintComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._sprint = sprintService;\n    this._tasks = taskService;\n    this._projects = ProjectService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._aroute = arouter;\n    this._dashBoard = dashboardService;\n    this._daily = dailyService;\n    this._products = productService;\n    this._user = userService;\n    this._projects = ProjectService;\n    this.search = \"\";\n    this.searchtask = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.lblgroups = [];\n    this.sptasks = [];\n    this.subtask = { attachments: [] };\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.searchMail = \"\";\n    this.listmails = [];\n    this.listmailsa = [];\n    this.sprints = [];\n    this.sprint = [];\n    this.team = [];\n    this.sprintTask = [];\n    this.mdT = { project: {}, comments: [] };\n    this.mcT = { project: {} };\n    this.selectedprojects = [];\n    this.task = { project: {}, attachments: [] };\n    this.myProjects = [];\n    this.sprintselected = \"\";\n    this.seltasks = [];\n    this.sprintn = [];\n    this.note = { attachments: [] };\n    this.mdT.total_adjusted = [];\n    this.mdT = { project: {} };\n    this.taskattch = { attachments: [] };\n    this.textState = [];\n    this.posState = \"user_asigned\";\n    this.getmyProjects();\n    this.sumpoints = [];\n    this.totalpoints_p = 0;\n    this.totalpoints_d = 0;\n    this.burndownData = {};\n    this.myUsers = [];\n    this.contactsTree = [];\n    this.contacts = [];\n    this.searchuser = \"\";\n    this.selectedNodes = [];\n    this.selectedUsers = [];\n    this.dayJob = \"\";\n    this.dayView = [];\n    this.pointssum = 0;\n    this.totalp = 0;\n    this.totalpoints_pending = 0;\n    this.mysprint = [];\n    this.mygroupid = 0;\n    this.isLoading = false;\n    this.sprintrefs = true;\n    this.icon = \"sq sq-down-arrow\";\n    this._groups.getGroups().subscribe(function (data) {\n      _this.groups = data.data;\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this.getSprintDetail();\n\n    this.userslbl = [];\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          _this.userslbl.push({ label: c.user_lastname + \", \" + c.user_name, value: c.user_id });\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n    this._user.getMyUserData().subscribe(function (data) {\n      _this.myuser = data.data[0].user_id;\n    });\n  }\n\n  _createClass(MySprintComponent, [{\n    key: \"showModalProject\",\n    value: function showModalProject(idproj) {\n      $(\"#myProject\" + idproj).click();\n    }\n  }, {\n    key: \"getProducts\",\n    value: function getProducts() {\n      var _this2 = this;\n\n      this._products.getProducts().subscribe(function (data) {\n        _this2.isLoading = false;\n        _this2.sprintrefs = true;\n        _this2.products = [];\n        var _iteratorNormalCompletion3 = true;\n        var _didIteratorError3 = false;\n        var _iteratorError3 = undefined;\n\n        try {\n          for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n            var c = _step3.value;\n\n            _this2.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        } catch (err) {\n          _didIteratorError3 = true;\n          _iteratorError3 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion3 && _iterator3.return) {\n              _iterator3.return();\n            }\n          } finally {\n            if (_didIteratorError3) {\n              throw _iteratorError3;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getmyProjects\",\n    value: function getmyProjects() {\n      var _this3 = this;\n\n      this.myProjects = [];\n      this.selectedprojects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this3.myProjects.push({ label: \" Untracked\", value: \"0\", idcolor: \"#fff\" });\n        _this3.selectedprojects = [0];\n        for (var i in res.data) {\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = res.data[i][Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var c = _step4.value;\n\n              _this3.myProjects.push({ label: c.proj_subject, value: c.proj_id, idcolor: c.idcolor });\n              _this3.selectedprojects.push(c.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getSprintDetail\",\n    value: function getSprintDetail() {\n      var _this4 = this;\n\n      this.seltasks = [];\n      this._sprint.getMySprintDetail().subscribe(function (res) {\n        if (res.data[0].tasks > 0) {\n          _this4.sprints = res.data;\n          _this4.sprintselected = _this4.sprints[0].spri_id;\n          _this4.getSprint(_this4.sprints[0].spri_id);\n          _this4.updatePoints(_this4.sprints[0].spri_id);\n          _this4.mysprint.grop_id = res.data[0].grop_id;\n        } else {\n          _this4.sprints = [];\n          _this4.sprintselected = res.data[0].spri_id;\n          _this4.getSprint(res.data[0].spri_id);\n          _this4.mysprint.grop_id = res.data[0].grop_id;\n        }\n        _this4.mygroupid = _this4.mysprint.grop_id;\n        _this4.getListSprints(_this4.mysprint.grop_id);\n      });\n    }\n  }, {\n    key: \"getBurnDown\",\n    value: function getBurnDown() {\n      var _this5 = this;\n\n      this._dashBoard.getBurndown(0).subscribe(function (res) {\n        if (res) {\n          var datasets = [];\n          for (var u in res.data.users) {\n            if (_this5.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n              datasets.push({\n                label: res.data.users[u].label,\n                data: res.data.users[u].data,\n                fill: false,\n                borderColor: res.data.users[u].color,\n                backgroundColor: res.data.users[u].color,\n                user: res.data.users[u].user_id\n              });\n            }\n          }\n          datasets.push({\n            label: res.data.users[0].label,\n            data: res.data.users[0].data,\n            fill: false,\n            borderColor: res.data.users[0].color,\n            backgroundColor: res.data.users[0].color\n          });\n          _this5.burndownData = {\n            labels: res.data.days,\n            datasets: datasets,\n            options: { legend: { boxWidth: 40 } },\n            daily: res.data.daily\n          };\n        }\n      });\n    }\n  }, {\n    key: \"updatePoints\",\n    value: function updatePoints(spri_id) {\n      var _this6 = this;\n\n      this._sprint.getSum(spri_id).subscribe(function (res) {\n        _this6.sumpoints = res.data;\n        _this6.showPoints(_this6.textState);\n      });\n    }\n  }, {\n    key: \"getSprint\",\n    value: function getSprint(num) {\n      var _this7 = this;\n\n      this._sprint.getSprint(num).subscribe(function (res) {\n        _this7.sprint = res.data;\n        _this7.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n          _this7.stTitle = localStorage.getItem('title');\n        }\n        _this7._title.setTitle(\".:: \" + _this7.stTitle + \" : Sprint #\" + _this7.sprint.spri_id + \" ::.\");\n        _this7._sprint.getTeam(_this7.sprint.grop_id).subscribe(function (ans) {\n          _this7.team = ans.data;\n          for (var i = 0; i < ans.data.length; i++) {\n            if (ans.data[i].usersel == 1) {\n              _this7.selectedUsers.push(ans.data[i].user_id);\n              _this7.selectedNodes.push(ans.data[i].user_id);\n              $('#team-name').text(ans.data[i].user_name + \" \" + ans.data[i].user_lastname);\n              $('#team-profile').text(ans.data[i].role_name);\n              _this7.textState.push(ans.data[i].user_id);\n              _this7.showPoints(_this7.textState);\n            }\n            _this7.selectedUsers_2 = _this7.selectedUsers;\n            _this7.selectedNodes_2 = _this7.selectedNodes;\n          }\n          _this7.getBurnDown(num);\n        });\n      });\n    }\n  }, {\n    key: \"showPoints\",\n    value: function showPoints(st) {\n      if (this.sumpoints.length > 0) {\n        for (var i = 0; i < this.sumpoints.length; i++) {\n          if (this.sumpoints[i].user_id == st) {\n            for (var j = 0; j < this.sumpoints[i].points.length; j++) {\n              if (this.sumpoints[i].points[j].sum_p != null) {\n                this.totalpoints_p = this.sumpoints[i].points[j].sum_p;\n                this.totalpoints_d = this.sumpoints[i].points[j].sum_d;\n                this.totalpoints_pending = this.sumpoints[i].points[j].pendpoints;\n              }\n            }\n          }\n        }\n      } else {\n        this.totalpoints_p = 0;\n        this.totalpoints_d = 0;\n        this.totalpoints_pending = 0;\n        this.sumpoints = [];\n      }\n    }\n  }, {\n    key: \"getBurnDown\",\n    value: function getBurnDown(num) {\n      var _this8 = this;\n\n      this._dashBoard.getBurndown(num).subscribe(function (res) {\n        if (res) {\n          var datasets = [];\n          for (var u in res.data.users) {\n            if (_this8.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n              datasets.push({\n                label: res.data.users[u].label,\n                data: res.data.users[u].data,\n                fill: false,\n                borderColor: res.data.users[u].color,\n                backgroundColor: res.data.users[u].color,\n                user: res.data.users[u].user_id\n              });\n            }\n          }\n          datasets.push({\n            label: res.data.users[0].label,\n            data: res.data.users[0].data,\n            fill: false,\n            borderColor: res.data.users[0].color,\n            backgroundColor: res.data.users[0].color\n          });\n          _this8.burndownData = {\n            labels: res.data.days,\n            datasets: datasets,\n            options: { legend: { boxWidth: 40 } },\n            daily: res.data.daily\n          };\n        }\n      });\n    }\n  }, {\n    key: \"chartClicked\",\n    value: function chartClicked(event) {\n      var _this9 = this;\n\n      this.dayJob = this.burndownData.daily[event.element._index];\n      this._daily.getDay4Usr(this.burndownData.datasets[event.element._datasetIndex].user, this.burndownData.daily[event.element._index]).subscribe(function (res) {\n        _this9.dayView = res.data;\n        _this9.totalp = 0;\n        var totalp = 0;\n        var a = 0;\n        for (var i = 0; i < _this9.dayView.length; i++) {\n          a = parseFloat(_this9.dayView[i].dail_points);\n          totalp += parseFloat(a);\n        }\n        _this9.totalp = totalp.toFixed(2);\n        $(\"#mdDayView\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"showburndown\",\n    value: function showburndown() {\n      this.getTree();\n      $(\"#mdBurndown\").modal(\"show\");\n    }\n  }, {\n    key: \"getTree\",\n    value: function getTree() {\n      var _this10 = this;\n\n      this.myUsers = [];\n      this.contactsTree = [];\n      this._user.getMyUsers().subscribe(function (data) {\n        _this10.contacts = data.data;\n        var group = \"0\";\n        var groupname = \"\";\n        var children = [];\n\n        var _iteratorNormalCompletion5 = true;\n        var _didIteratorError5 = false;\n        var _iteratorError5 = undefined;\n\n        try {\n          for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n            var u = _step5.value;\n\n            _this10.myUsers.push(u.user_id);\n            if (group != u.grop_id) {\n              if (group != \"0\") {\n                _this10.contactsTree.push({\n                  \"label\": groupname,\n                  \"data\": group,\n                  \"expanded\": true,\n                  \"children\": children\n                });\n              }\n              groupname = u.groupname;\n              group = u.grop_id;\n              children = [];\n            }\n            children.push({\n              \"label\": u.user_name + \" \" + u.user_lastname, \"data\": u.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError5 = true;\n          _iteratorError5 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion5 && _iterator5.return) {\n              _iterator5.return();\n            }\n          } finally {\n            if (_didIteratorError5) {\n              throw _iteratorError5;\n            }\n          }\n        }\n\n        if (group != \"0\") {\n          _this10.contactsTree.push({\n            \"label\": groupname,\n            \"data\": group,\n            \"expanded\": true,\n            \"children\": children\n          });\n        }\n      });\n    }\n  }, {\n    key: \"updateSelect\",\n    value: function updateSelect(event) {\n      this.selectedUsers = [];\n      var _iteratorNormalCompletion6 = true;\n      var _didIteratorError6 = false;\n      var _iteratorError6 = undefined;\n\n      try {\n        for (var _iterator6 = this.selectedNodes[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n          var c = _step6.value;\n\n          if (!c.children) {\n            this.selectedUsers.push(c);\n          }\n        }\n      } catch (err) {\n        _didIteratorError6 = true;\n        _iteratorError6 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion6 && _iterator6.return) {\n            _iterator6.return();\n          }\n        } finally {\n          if (_didIteratorError6) {\n            throw _iteratorError6;\n          }\n        }\n      }\n\n      this.getBurnDown(this.sprintselected);\n    }\n  }, {\n    key: \"doneFilter\",\n    value: function doneFilter() {\n      this.searchuser = \"\";\n    }\n  }, {\n    key: \"selectAllItems\",\n    value: function selectAllItems() {\n\n      if (this.selectedNodes.length > 0) {\n        this.selectedNodes = [];\n      } else {\n        this.selectedNodes = [];\n        for (var t in this.contactsTree) {\n          this.selectedNodes.push(this.contactsTree[t].data);\n          if (this.contactsTree[t].children.length > 0) {\n            for (var c in this.contactsTree[t].children) {\n              this.selectedNodes.push(this.contactsTree[t].children[c].data);\n            }\n          }\n        }\n      }\n\n      this.updateSelect(event);\n    }\n  }, {\n    key: \"selectAllChildrens\",\n    value: function selectAllChildrens(childrens, idparent) {\n      var m = 0;\n      var n = 0;\n      for (var x in this.selectedNodes) {\n        if (this.selectedNodes[x] == idparent) {\n          m++;\n        } else {\n          n++;\n        }\n      }\n\n      if (m == 1 && n == 0) {\n        this.selectedNodes = [];\n        this.selectedNodes.push(idparent);\n        if (childrens.length > 0) {\n          for (var c in childrens) {\n            if (m == 1) {\n              this.selectedNodes.push(childrens[c].data);\n            }\n          }\n        }\n      } else {\n        this.selectedNodes = [];\n      }\n    }\n  }, {\n    key: \"updateSelectA\",\n    value: function updateSelectA(event, children, idparent) {\n      this.selectAllChildrens(children, idparent);\n      this.selectedUsers = [];\n      var _iteratorNormalCompletion7 = true;\n      var _didIteratorError7 = false;\n      var _iteratorError7 = undefined;\n\n      try {\n        for (var _iterator7 = this.selectedNodes[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n          var c = _step7.value;\n\n          if (!c.children) {\n            this.selectedUsers.push(c);\n          }\n        }\n      } catch (err) {\n        _didIteratorError7 = true;\n        _iteratorError7 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion7 && _iterator7.return) {\n            _iterator7.return();\n          }\n        } finally {\n          if (_didIteratorError7) {\n            throw _iteratorError7;\n          }\n        }\n      }\n\n      this.getBurnDown(this.sprintselected);\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(taskid) {\n      var _this11 = this;\n\n      this._tasks.getAttachments(taskid).subscribe(function (res) {\n        _this11.mdT.attachments = res.data;\n        _this11.task.attachments = res.data;\n        for (var i = 0; i < _this11.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this11.mdT.total_attachments = 1;\n          } else {\n            _this11.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this11.task.attachments.length; i++) {\n          if (i == 0) {\n            _this11.task.total_attachments = 1;\n          } else {\n            _this11.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"addSpTask\",\n    value: function addSpTask() {\n      var _this12 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.seltasks = [];\n      this.task_description = \"\";\n      this._sprint.getTasksWoSp().subscribe(function (data) {\n        _this12.sprintTask = data.data;\n      });\n      $(\"#mdAddSpTask\").modal(\"show\");\n    }\n  }, {\n    key: \"selectAll\",\n    value: function selectAll(type) {\n      if (type == 1) {\n        var items = this.sprints;\n      } else {\n        var items = this.sprintTask;\n      }\n      if (this.seltasks.length > 0) {\n        this.seltasks = [];\n      } else {\n        this.seltasks = [];\n        items;\n        for (var t in items) {\n          this.seltasks.push(items[t].task_id);\n        }\n      }\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state) {\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.limitpage = this.sprints.length > 20 ? 20 : this.sprints.length;\n      this.itemcount = this.sprints.length;\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event, action) {\n      if (action == \"new\") {\n        var files = event.files;\n        if (this.taskattch.attachments.length > 0) {\n          var _iteratorNormalCompletion8 = true;\n          var _didIteratorError8 = false;\n          var _iteratorError8 = undefined;\n\n          try {\n            for (var _iterator8 = this.taskattch.attachments[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n              var c = _step8.value;\n\n              if (files[0][\"name\"] == c.name) {} else {\n                this.taskattch.attachments.push(files[0]);\n              }\n            }\n          } catch (err) {\n            _didIteratorError8 = true;\n            _iteratorError8 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                _iterator8.return();\n              }\n            } finally {\n              if (_didIteratorError8) {\n                throw _iteratorError8;\n              }\n            }\n          }\n        } else {\n          this.taskattch.attachments.push(files[0]);\n        }\n      } else if (action == \"delete\") {\n        var file = event.file;\n        var _iteratorNormalCompletion9 = true;\n        var _didIteratorError9 = false;\n        var _iteratorError9 = undefined;\n\n        try {\n          for (var _iterator9 = this.taskattch.attachments[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n            var _c = _step9.value;\n\n            if (file[\"name\"] == _c.name) {\n              var posattch = this.taskattch.attachments.indexOf(_c);\n              this.taskattch.attachments.splice(posattch);\n            }\n          }\n        } catch (err) {\n          _didIteratorError9 = true;\n          _iteratorError9 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion9 && _iterator9.return) {\n              _iterator9.return();\n            }\n          } finally {\n            if (_didIteratorError9) {\n              throw _iteratorError9;\n            }\n          }\n        }\n      }\n    }\n  }, {\n    key: \"onUploadAttachment\",\n    value: function onUploadAttachment(taskid, form) {\n      var _this13 = this;\n\n      this.task.task_id = taskid;\n      this._tasks.putAttachments(this.task).subscribe(function (res) {\n        if (res.data === \"\" || res.data === \"0\") {\n          _this13.toastr.error(res.message, \"Error!\");\n        } else {\n          _this13.toastr.success(res.message, \"Attachments uploaded successfully\");\n          _this13.task.attachments = [];\n          _this13.getAttachments(taskid);\n          form.clear();\n        }\n      });\n    }\n  }, {\n    key: \"addTaskToSprint\",\n    value: function addTaskToSprint() {\n      this.task_description = \"\";\n      $('[data-toggle=\"tooltip\"]').tooltip('hide');\n      this.task = { project: {}, attachments: [] };\n    }\n  }, {\n    key: \"editTask\",\n    value: function editTask(idtk) {\n      var _this14 = this;\n\n      this._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n        idtk.attachments = res.data;\n        _this14.task = idtk;\n        $('#mdAddTaskToSprint').modal('show');\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n      var pos = this.task.attachments.indexOf(att.name);\n      this.task.attachments.splice(pos, 1);\n    }\n  }, {\n    key: \"deleteAttachmentNT\",\n    value: function deleteAttachmentNT(att) {\n      for (var i in this.note.attachments) {\n        if (this.note.attachments[i] === att) {\n          this.note.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this15 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].tsat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this15.toastr.error(res.message, \"Error!\");\n            } else {\n              _this15.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this15.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"round\",\n    value: function round(value, n) {\n      if (!n || n == 0) {\n        n = 1;\n      } else {\n        n = 10 * n;\n      }\n      return Math.round(value * n) / n;\n    }\n  }, {\n    key: \"closeModal\",\n    value: function closeModal() {\n      this.searchtask = \"\";\n    }\n  }, {\n    key: \"getListSprints\",\n    value: function getListSprints(group_id) {\n      var _this16 = this;\n\n      this._sprint.getListReport(group_id).subscribe(function (res) {\n        _this16.sprintslist = res.data;\n        _this16.mysprint.spri_id = res.data[0].spri_id;\n      });\n    }\n  }, {\n    key: \"getSprintInfo\",\n    value: function getSprintInfo(id_sprint) {\n      var _this17 = this;\n\n      this.seltasks = [];\n      this._sprint.getMySprintInfo(id_sprint).subscribe(function (res) {\n        if (res.data[0].tasks > 0) {\n          _this17.sprints = res.data;\n          _this17.sprintselected = _this17.sprints[0].spri_id;\n          _this17.getSprint(_this17.sprints[0].spri_id);\n          _this17.updatePoints(_this17.sprints[0].spri_id);\n          _this17.mysprint.grop_id = res.data[0].grop_id;\n        } else {\n          _this17.sprints = [];\n          _this17.sprintselected = res.data[0].spri_id;\n          _this17.getSprint(res.data[0].spri_id);\n          _this17.mysprint.grop_id = res.data[0].grop_id;\n        }\n      });\n    }\n  }, {\n    key: \"updateSprint\",\n    value: function updateSprint(num) {\n      var _this18 = this;\n\n      this.getSprintTask(num);\n      this.updatePoints(num);\n      this._sprint.getSprint(num).subscribe(function (res) {\n        _this18.sprint = res.data;\n        _this18.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n          _this18.stTitle = localStorage.getItem('title');\n        }\n        _this18._title.setTitle(\".:: \" + _this18.stTitle + \" : Sprint #\" + _this18.sprint.spri_id + \" ::.\");\n        _this18.getBurnDown(num);\n      });\n    }\n  }, {\n    key: \"getSprintTask\",\n    value: function getSprintTask(id_sprint) {\n      var _this19 = this;\n\n      this.seltasks = [];\n      this._sprint.getMySprintInfo(id_sprint).subscribe(function (res) {\n        if (res.data.length > 0) {\n          _this19.sprints = res.data;\n          _this19.sprintselected = _this19.sprints[0].spri_id;\n          _this19.updatePoints(_this19.sprints[0].spri_id);\n          _this19.mysprint.grop_id = res.data[0].grop_id;\n        } else {\n          _this19.sprints = [];\n          _this19.sprintselected = id_sprint;\n          _this19.mysprint.grop_id = _this19.mygroupid;\n          _this19.totalpoints_p = 0;\n          _this19.totalpoints_d = 0;\n          _this19.totalpoints_pending = 0;\n          _this19.sumpoints = [];\n        }\n      });\n    }\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }]);\n\n  return MySprintComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _router.ActivatedRoute, _task.TaskService, _group.GroupService, _sprint.SprintService, _mail.MailService, _project.ProjectService, _product.ProductService, _note.NoteService, _users.UsersService, _ngxToastr.ToastrService, _daily.DailyService, _primeng.ConfirmationService, _dashboard.DashboardService], MySprintComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 429 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.WhiteboardComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _whiteboardTemplate = __webpack_require__(875);\n\nvar _whiteboardTemplate2 = _interopRequireDefault(_whiteboardTemplate);\n\nvar _group = __webpack_require__(11);\n\nvar _header = __webpack_require__(32);\n\nvar _roles = __webpack_require__(46);\n\nvar _whiteboard = __webpack_require__(249);\n\nvar _note = __webpack_require__(24);\n\nvar _moment = __webpack_require__(2);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar WhiteboardComponent = exports.WhiteboardComponent = (_dec = (0, _core.Component)({\n  selector: \"whiteboard\",\n  template: _whiteboardTemplate2.default,\n  providers: [_primeng.ConfirmationService]\n}), _dec(_class = function () {\n  function WhiteboardComponent(title, router, sanitizer, toastr, groupService, rolesService, headerService, confirmationService, whiteboardService, noteService) {\n    _classCallCheck(this, WhiteboardComponent);\n\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this.toastr = toastr;\n    this._groupService = groupService;\n    this._roles = rolesService;\n    this._headerService = headerService;\n    this._whiteboard = whiteboardService;\n    this._notes = noteService;\n    this.notemd = { note_text: \"\" };\n    this.note = { attachments: [] };\n    this.confirm = confirmationService;\n    this.messageslist = {};\n    this.messages = {};\n    this.groups = [];\n    this.selectuser = [];\n    this.comments = {};\n    this.newlike = {};\n    this.newlove = {};\n    this.newangry = {};\n    this.newfun = {};\n    this.newsurprise = {};\n    this.deletepost = {};\n    this.isLoading = false;\n    this.selectedTeams = [];\n    this.c = [];\n    this.myTeams = [{ label: 'DFW Team', value: '1' }, { label: 'USAP Demographer', value: '2' }, { label: 'USAP RCM Leader', value: '3' }, { label: 'AGS HEALTH Team', value: '4' }];\n    this.getMessage();\n    this.getGroups();\n  }\n\n  _createClass(WhiteboardComponent, [{\n    key: \"getMessage\",\n    value: function getMessage() {\n      var _this = this;\n\n      this.isLoading = true;\n      this._whiteboard.getMessage().subscribe(function (res) {\n        _this.messageslist = res.data;\n        _this.isLoading = false;\n      });\n    }\n  }, {\n    key: \"getGroups\",\n    value: function getGroups() {\n      var _this2 = this;\n\n      this._whiteboard.getGroups().subscribe(function (res) {\n        _this2.groups = res.data;\n      });\n    }\n  }, {\n    key: \"saveMessage\",\n    value: function saveMessage() {\n      var _this3 = this;\n\n      this._whiteboard.putMessage(this.messages).subscribe(function (data) {\n        if (data.data.message == \"OK\") {\n          _this3.toastr.success(\"Message added Successfully\");\n        } else {\n          _this3.toastr.warning(data.data.message);\n        }\n        _this3.getMessage();\n      });\n    }\n  }, {\n    key: \"saveComments\",\n    value: function saveComments() {\n      var _this4 = this;\n\n      this._whiteboard.putComments(this.comments).subscribe(function (data) {\n        if (data.data.message == \"OK\") {\n          _this4.toastr.success(\"Message added Successfully\");\n        } else {\n          _this4.toastr.warning(data.data.message);\n        }\n        _this4.getMessage();\n      });\n    }\n  }, {\n    key: \"addLike\",\n    value: function addLike(type, id, reaction) {\n      var _this5 = this;\n\n      this.newlike.type = type;\n      this.newlike.id = id;\n      this.newlike.id_reaction = reaction;\n      this._whiteboard.putLikes(this.newlike).subscribe(function (data) {\n        _this5.getMessage();\n      });\n    }\n  }, {\n    key: \"addLove\",\n    value: function addLove(type, id, reaction) {\n      var _this6 = this;\n\n      this.newlove.type = type;\n      this.newlove.id = id;\n      this.newlove.id_reaction = reaction;\n      this._whiteboard.putLove(this.newlove).subscribe(function (data) {\n        _this6.getMessage();\n      });\n    }\n  }, {\n    key: \"addAngry\",\n    value: function addAngry(type, id, reaction) {\n      var _this7 = this;\n\n      this.newangry.type = type;\n      this.newangry.id = id;\n      this.newangry.id_reaction = reaction;\n      this._whiteboard.putAngry(this.newangry).subscribe(function (data) {\n        _this7.getMessage();\n      });\n    }\n  }, {\n    key: \"addFun\",\n    value: function addFun(type, id, reaction) {\n      var _this8 = this;\n\n      this.newfun.type = type;\n      this.newfun.id = id;\n      this.newfun.id_reaction = reaction;\n      this._whiteboard.putFun(this.newfun).subscribe(function (data) {\n        _this8.getMessage();\n      });\n    }\n  }, {\n    key: \"addWow\",\n    value: function addWow(type, id, reaction) {\n      var _this9 = this;\n\n      this.newsurprise.type = type;\n      this.newsurprise.id = id;\n      this.newsurprise.id_reaction = reaction;\n      this._whiteboard.putWow(this.newsurprise).subscribe(function (data) {\n        _this9.getMessage();\n      });\n    }\n  }, {\n    key: \"deletePost\",\n    value: function deletePost(type, id) {\n      var _this10 = this;\n\n      this.deletepost.type = type;\n      this.deletepost.id = id;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        icon: \"fa fa-exclamation\",\n        message: \"Do you want to delete this message?\",\n        header: \"Confirmation\",\n        accept: function accept() {\n          if (_this10.deletepost) {\n            _this10._whiteboard.deletePost(_this10.deletepost).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this10.toastr.success(\"Deleted successfully\");\n              } else {\n                _this10.toastr.error(\"User does not have permission for this action\");\n              }\n              _this10.getMessage();\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"showMessage\",\n    value: function showMessage() {\n      this.messages.description = \"\";\n      this.messages.notify = false;\n      // this.messages.selectuser = [];\n      this.messages.group = [];\n      $('#mdMessage').modal('show');\n    }\n  }, {\n    key: \"showComments\",\n    value: function showComments(idmuro) {\n      this.comments.id = idmuro;\n      this.comments.description = \"\";\n      $('#mdComments').modal('show');\n    }\n  }, {\n    key: \"validate\",\n    value: function validate() {\n      return !this.messages.description || this.messages.description.trim() == \"\" || !this.messages.group || this.messages.group == \"\";\n    }\n  }, {\n    key: \"validateComment\",\n    value: function validateComment() {\n      return !this.comments.description || this.comments.description.trim() == \"\";\n    }\n  }]);\n\n  return WhiteboardComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _group.GroupService, _roles.RolesService, _header.HeaderService, _primeng.ConfirmationService, _whiteboard.WhiteboardService, _note.NoteService], WhiteboardComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 430 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ExternalRequestsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _primeng = __webpack_require__(10);\n\nvar _externalrequestsTemplate = __webpack_require__(876);\n\nvar _externalrequestsTemplate2 = _interopRequireDefault(_externalrequestsTemplate);\n\nvar _externalrequest = __webpack_require__(48);\n\nvar _users = __webpack_require__(20);\n\nvar _sprint = __webpack_require__(26);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _task = __webpack_require__(19);\n\nvar _categories = __webpack_require__(47);\n\nvar _group = __webpack_require__(11);\n\nvar _type = __webpack_require__(41);\n\nvar _pipes = __webpack_require__(14);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ExternalRequestsComponent = exports.ExternalRequestsComponent = (_dec = (0, _core.Component)({\n  selector: \"externalrequests\",\n  template: _externalrequestsTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  providers: [_primeng.ConfirmationService],\n  styles: [\".box-header {background-color: #c7c7c7; color: #fff;}\"]\n}), _dec(_class = function () {\n  function ExternalRequestsComponent(title, router, sanitizer, toastr, confirmationService, externalRequestService, usersService, ProjectService, taskService, productService, categoriesService, groupService, typeService, sprintService) {\n    var _this = this;\n\n    _classCallCheck(this, ExternalRequestsComponent);\n\n    this._title = title;\n    this._router = router;\n    this.toastr = toastr;\n    this._user = usersService;\n    this._sprint = sprintService;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._sanitizer = sanitizer;\n    this._externalrequest = externalRequestService;\n    this.confirm = confirmationService;\n    this._projects = ProjectService;\n    this._tasks = taskService;\n    this._products = productService;\n    this._categories = categoriesService;\n    this._groups = groupService;\n    this._types = typeService;\n    this.products = [];\n    this.textState = [\"\"];\n    this.posState = \"type_name\";\n    this.textCreator = [\"\"];\n    this.posCreator = \"asigned_to\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.filter_excel = null;\n    this.search = \"\";\n    this._title.setTitle(\".:: \" + localStorage.getItem('title') + \" : External Requests ::.\");\n    if (localStorage.getItem(\"extrequsearch\")) {\n      this.search = localStorage.getItem(\"extrequsearch\");\n    }\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    // this._aroute = arouter;\n    this.limitpage = 20;\n    this.groups = [];\n    this.plmt = [];\n    this.stsmt = [];\n    this.lblgroups = [];\n    this.seleve = [];\n    this.userlist = [];\n    this.requests = [];\n    this.emails = [];\n    this.st_cancelled = 0;\n    this.categories = [];\n    this.categoriesNewTask = [];\n    this.infoTaskFather = {};\n    this.infoTaskFatherAssociate = {};\n    this.catIds = [];\n    this.categoryMenu = [];\n    this.idtype = [];\n    this.tycate = [];\n    this.catlist = [];\n    this.note_text = \"\";\n    this.selectedCategory = {};\n    this.selectedProduct = [];\n    this.myProjects = [];\n    this.mdT = { project: {}, comments: [] };\n    this.note = { attachments: [] };\n    this.selectedprojects = [];\n    this.task = { project: {}, attachments: [] };\n    this.task_description = \"\";\n    this.taskJoin = {};\n    this.tagMenuNew = 1;\n    this.userslbl = [];\n    this.taskattch = { attachments: [] };\n    this.myfilterfield = { pos: \"para_type\", text: \"4\", typetittle: \"Implementation\", icon: \"sq sq-errors\", style: { 'background': '#F01458', 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    this.myfilterfieldNewTask = { pos: \"para_type\", text: \"4\", typetittle: \"Implementation\", icon: \"sq sq-errors\", style: { 'background': '#F01458', 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    this.taskid = 0;\n    this.idtk = [];\n    this.cant_e = 0;\n    this.cant_ia = 0;\n    this.cant_im = 0;\n    this.status = [];\n    this.position = -1;\n    this.mylist = [];\n    this.typetittle = \"\";\n    this.mytype = 0;\n    this.mytask = 0;\n    this.mysprints = [];\n    this.taskfields = [];\n    this.mylist.fields = [];\n    this.textInfo = [\"Info\", \"Project related\", \"Adjustments\", \"Timeline\", \"Form\"];\n    this.pages = [1];\n    this.posInfo = \"info_id\";\n    this.timeline = 0;\n    this.mdT.total_adjusted = [];\n    this.task.taskid = 0;\n    this.imptask = {};\n    this.rjtask = {};\n    this.head = [];\n    this.cont = 0;\n    this.tagMenu = 1;\n    this.tagMenuRequest = 2;\n    this.existClient = true;\n    this.existProduct = true;\n    this.dbname = '';\n    this.selectedtype = 0;\n    this.clientlist = [];\n    this.searchTaskShared = \"\";\n    this.posOrderTaskShared = \"\";\n    this.limitpageTaskShared = 20;\n    this.itemcountTaskShared = 0;\n    this.orderDescTaskShared = false;\n    this.currentpageTaskShared = 1;\n    this.taskShared = [];\n    this.taskChecked = 0;\n    this.results = [20, 30, 40, 50];\n    this._user.getExternalList().subscribe(function (res) {\n      _this.clients = [];\n      var _iteratorNormalCompletion = true;\n      var _didIteratorError = false;\n      var _iteratorError = undefined;\n\n      try {\n        for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n          var c = _step.value;\n\n          _this.clients.push({ label: c.client_name, value: c.client_id });\n          _this.clientlist.push({ client_name: c.client_name, client_id: c.client_id, usex_dbname: c.usex_dbname });\n        }\n      } catch (err) {\n        _didIteratorError = true;\n        _iteratorError = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion && _iterator.return) {\n            _iterator.return();\n          }\n        } finally {\n          if (_didIteratorError) {\n            throw _iteratorError;\n          }\n        }\n      }\n    });\n    this._user.getCRMUsers().subscribe(function (data) {\n      _this.users = data.data;\n      var _iteratorNormalCompletion2 = true;\n      var _didIteratorError2 = false;\n      var _iteratorError2 = undefined;\n\n      try {\n        for (var _iterator2 = data.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n          var c = _step2.value;\n\n          _this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      } catch (err) {\n        _didIteratorError2 = true;\n        _iteratorError2 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion2 && _iterator2.return) {\n            _iterator2.return();\n          }\n        } finally {\n          if (_didIteratorError2) {\n            throw _iteratorError2;\n          }\n        }\n      }\n    });\n    this._products.getProducts().subscribe(function (data) {\n      _this.myproducts = [];\n      var _iteratorNormalCompletion3 = true;\n      var _didIteratorError3 = false;\n      var _iteratorError3 = undefined;\n\n      try {\n        for (var _iterator3 = data.data[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n          var c = _step3.value;\n\n          _this.myproducts.push({ label: c.prod_name, value: c.prod_id });\n        }\n      } catch (err) {\n        _didIteratorError3 = true;\n        _iteratorError3 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion3 && _iterator3.return) {\n            _iterator3.return();\n          }\n        } finally {\n          if (_didIteratorError3) {\n            throw _iteratorError3;\n          }\n        }\n      }\n    });\n    this._groups.getGroups().subscribe(function (data) {\n      _this.groupsNewTask = [];\n      var _iteratorNormalCompletion4 = true;\n      var _didIteratorError4 = false;\n      var _iteratorError4 = undefined;\n\n      try {\n        for (var _iterator4 = data.data[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n          var c = _step4.value;\n\n          _this.groupsNewTask.push({ label: c.grop_name, value: c.grop_id });\n        }\n      } catch (err) {\n        _didIteratorError4 = true;\n        _iteratorError4 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion4 && _iterator4.return) {\n            _iterator4.return();\n          }\n        } finally {\n          if (_didIteratorError4) {\n            throw _iteratorError4;\n          }\n        }\n      }\n    });\n    this.types = [];\n    this._types.getTypes().subscribe(function (res) {\n      _this.types = res.data;\n    });\n    this.products = [];\n    this.groups = [];\n    this.loadSprint();\n    this.getCategories();\n    this.isLoading = false;\n    this.typeSelected = '1,3,4';\n  }\n\n  _createClass(ExternalRequestsComponent, [{\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      this.reload();\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      if (event.keyCode == 13) {\n        this.searchFilter();\n      }\n    }\n  }, {\n    key: \"searchFilter\",\n    value: function searchFilter() {\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.reload();\n    }\n  }, {\n    key: \"loadSprint\",\n    value: function loadSprint() {\n      var _this2 = this;\n\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this2.mysprints = [];\n        _this2.mysprints.push({\n          label: \"Backlog\",\n          value: 0\n        });\n        var _iteratorNormalCompletion5 = true;\n        var _didIteratorError5 = false;\n        var _iteratorError5 = undefined;\n\n        try {\n          for (var _iterator5 = res.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n            var c = _step5.value;\n\n            _this2.mysprints.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n            _this2.selectedprojects.push(c.proj_id);\n          }\n        } catch (err) {\n          _didIteratorError5 = true;\n          _iteratorError5 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion5 && _iterator5.return) {\n              _iterator5.return();\n            }\n          } finally {\n            if (_didIteratorError5) {\n              throw _iteratorError5;\n            }\n          }\n        }\n      });\n      this.getprojects();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this3 = this;\n\n      this.taskChecked = 0;\n      this.isLoading = true;\n      this.requests = [];\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search.trim(),\n        type: this.textState,\n        client: this.textGroup,\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\"\n      };\n      this.filter_excel = filter;\n      this._externalrequest.getMyRequests(filter).subscribe(function (res) {\n        _this3.requests = res.data.data;\n        _this3.isLoading = false;\n        if (_this3.textState[0] == \"\" || _this3.textState.length == 0 || _this3.textState.length == 3) {\n          _this3.itemcount = res.data.count;\n        } else {\n          if (_this3.textState[0] == \"1\") {\n            _this3.itemcount = res.data.errors;\n          }\n          if (_this3.textState[0] == \"3\") {\n            _this3.itemcount = res.data.improving;\n          }\n          if (_this3.textState[0] == \"4\") {\n            _this3.itemcount = res.data.implementations;\n          }\n        }\n        _this3.lastpage = _this3.itemcount / _this3.limitpage;\n        if (_this3.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this3.lastpage);\n          _this3.lastpage = countpag;\n        }\n        _this3.cant_e = res.data.errors;\n        _this3.cant_ia = res.data.improving;\n        _this3.cant_im = res.data.implementations;\n\n        _this3.pages = [];\n        for (var i = 1; i <= _this3.lastpage; i++) {\n          _this3.pages.push(i);\n        }\n        for (var _i = 0; _i < _this3.types.length; _i++) {\n          if (_this3.types[_i].type_id == 1) {\n            _this3.types[_i].count = _this3.cant_e;\n          } else if (_this3.types[_i].type_id == 3) {\n            _this3.types[_i].count = _this3.cant_ia;\n          } else if (_this3.types[_i].type_id == 4) {\n            _this3.types[_i].count = _this3.cant_im;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getComments\",\n    value: function getComments(tk, dbname) {\n      var _this4 = this;\n\n      this._externalrequest.getComments(tk, dbname).subscribe(function (res) {\n        _this4.task.comments = res.data;\n        _this4.mdT.comments = res.data;\n        var elem = document.getElementById(\"mdTComments\");\n        var elem2 = document.getElementById(\"taskComments\");\n        if (elem && elem2) {\n          elem.scrollTop = elem.scrollHeight;\n          elem2.scrollTop = elem2.scrollHeight;\n        }\n      });\n      this.note_text = \"\";\n      this.note = { attachments: [] };\n    }\n  }, {\n    key: \"editModal\",\n    value: function editModal(ev) {\n      if (!ev.attachments) {\n        ev.attachments = [];\n      }\n      this.note = { attachments: [] };\n      this.task = ev;\n      this.getComments(ev.task_id, ev.usex_dbname);\n      $(\"#addDescription\").removeClass(\"in\");\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(taskid, dbname) {\n      var _this5 = this;\n\n      this._externalrequest.getAttachments(taskid, dbname).subscribe(function (res) {\n        _this5.mdT.attachments = res.data;\n        _this5.task.attachments = res.data;\n        for (var i = 0; i < _this5.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this5.mdT.total_attachments = 1;\n          } else {\n            _this5.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this5.task.attachments.length; i++) {\n          if (i == 0) {\n            _this5.task.total_attachments = 1;\n          } else {\n            _this5.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"downloadFile\",\n    value: function downloadFile(item, event) {\n      var file = item;\n      var filename = item.name;\n      var blob = new Blob([file]);\n      var url = URL.createObjectURL(blob);\n\n      var element = event.srcElement;\n      $(element).attr({ 'download': filename, 'href': url });\n    }\n  }, {\n    key: \"deleteAttachmentNT\",\n    value: function deleteAttachmentNT(att) {\n      for (var i in this.note.attachments) {\n        if (this.note.attachments[i] === att) {\n          this.note.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this6 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._externalrequest.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id, task.dbname).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this6.toastr.error(res.message, \"Error!\");\n            } else {\n              _this6.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this6.getAttachments(task.task_id, task.dbname);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n\n      var index = 0;\n      for (var i in this.task.attachments) {\n        if (att.name == this.task.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n      this.task.attachments.splice(index, 1);\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event) {\n      var query = event.query;\n      this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n  }, {\n    key: \"filterMultipleEmails\",\n    value: function filterMultipleEmails(event) {\n      var query = event.query;\n      this.listmails = this.filter(query, this.listmailsa);\n    }\n  }, {\n    key: \"filter\",\n    value: function filter(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"addEvent\",\n    value: function addEvent(type_cod, title, background, icon) {\n      this.task = { project: {}, attachments: [] };\n      this.task.taskid = 0;\n      this.task.islocal = false;\n      this.mylist.fields = [];\n      this.myfilterfield = { pos: \"para_type\", text: [type_cod], typetittle: title, icon: icon, style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n      this.existClient = true;\n      this.existProduct = true;\n      $(\"#mdEditRequest\").modal(\"show\");\n    }\n  }, {\n    key: \"mdShowCreateTaskJoin\",\n    value: function mdShowCreateTaskJoin(type_cod, title, background, icon) {\n      var _this7 = this;\n\n      this.tagMenuNew = 2;\n      this.mylist.fields = [];\n      this.myfilterfieldNewTask = {\n        pos: \"para_type\",\n        text: [type_cod],\n        typetittle: title,\n        icon: icon,\n        style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' }\n      };\n\n      //vaciar el formulario al cambiar de vista de request\n      this.taskJoin.fields = [];\n\n      var taskChild = this.infoTaskFather;\n      this._tasks.getInfoTaskJoin(taskChild.task_id).subscribe(function (res) {\n        if (res.data && res.data != null) {\n          _this7.taskJoin = res.data;\n          _this7.taskJoin.attachments = [];\n          _this7.taskJoin.cate_id = 0;\n        }\n      });\n      $(\"#mdCreateTaskJoin\").modal(\"show\");\n    }\n  }, {\n    key: \"mdShowTypeTaskJoin\",\n    value: function mdShowTypeTaskJoin(eve) {\n      this.infoTaskFather = eve;\n      $(\"#mdTypeTaskJoin\").modal(\"show\");\n    }\n  }, {\n    key: \"mdShowAssociateTaskJoin\",\n    value: function mdShowAssociateTaskJoin(eve) {\n      this.infoTaskFatherAssociate = eve;\n      this.taskChecked = 0;\n      this.reloadTaskShared();\n      $(\"#mdAssociateTaskJoin\").modal(\"show\");\n    }\n  }, {\n    key: \"reloadTaskShared\",\n    value: function reloadTaskShared() {\n      var _this8 = this;\n\n      this.isLoadingTaskShared = true;\n      this.taskChecked = 0;\n\n      var filter = {\n        start: this.currentpageTaskShared * this.limitpageTaskShared - this.limitpageTaskShared,\n        end: this.limitpageTaskShared,\n        all: this.searchTaskShared.trim(),\n        orderby: this.posOrderTaskShared,\n        orderdesc: this.orderDescTaskShared ? \"desc\" : \"\"\n      };\n      this._tasks.getTaskSharedList(filter).subscribe(function (res) {\n\n        _this8.isLoadingTaskShared = false;\n        _this8.taskShared = res.data.data;\n        _this8.itemcountTaskShared = res.data.count;\n        _this8.lastpageTaskShared = _this8.itemcountTaskShared / _this8.limitpageTaskShared;\n        if (_this8.lastpageTaskShared % 1 != 0) {\n          var countpagTaskShared = 1 + parseInt(_this8.lastpageTaskShared);\n          _this8.lastpageTaskShared = countpagTaskShared;\n        }\n        _this8.pagesTaskShared = [];\n        for (var i = 1; i <= _this8.lastpageTaskShared; i++) {\n          _this8.pagesTaskShared.push(i);\n        }\n        if (_this8.pagesTaskShared.length == 0) {\n          _this8.pagesTaskShared = [1];\n        }\n      });\n      this.contTaskShared = 0;\n    }\n  }, {\n    key: \"deleteTaskJoin\",\n    value: function deleteTaskJoin(task_child_id) {\n      var _this9 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Delete the Task Related ?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (task_child_id && task_child_id != 0) {\n            _this9._tasks.deleteTaskJoin(task_child_id).subscribe(function (res) {\n              if (res.data && res.data != null) {\n                if (res.data.data && res.data.data != null) {\n                  _this9.toastr.success(res.message, \"Task Related deleted successfully\");\n                  _this9.reload();\n                } else {\n                  _this9.toastr.warning(\"\", res.data.message);\n                }\n              } else {\n                _this9.toastr.warning(\"\", res.message);\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"setPageNewTask\",\n    value: function setPageNewTask(opt) {\n      if (opt == 1) {\n        this.tagMenuNew = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuNew = 2;\n      }\n      if (opt == 3) {\n        this.tagMenuNew = 3;\n      }\n    }\n  }, {\n    key: \"saveTaskJoin\",\n    value: function saveTaskJoin() {\n      var _this10 = this;\n\n      var newTaskJoin = {};\n\n      var campos = [];\n\n      var fields_empty = false;\n\n      if (this.taskJoin.task_subject && this.taskJoin.task_subject.trim() != \"\" && this.taskJoin.prod_id && this.taskJoin.prod_id != 0 && this.taskJoin.cate_id && this.taskJoin.cate_id != 0 && this.taskJoin.grop_id && this.taskJoin.grop_id != 0 && this.taskJoin.task_description && this.taskJoin.task_description.trim() != \"\") {\n\n        this.taskJoin.task_description = this.taskJoin.task_description.split(\"\\t\").join(\"\");\n        this.taskJoin.task_description = this.taskJoin.task_description.split(\"\\n\").join(\"\");\n        this.taskJoin.task_description = this.taskJoin.task_description.split(\"\\r\").join(\"\");\n\n        newTaskJoin.task_subject = this.taskJoin.task_subject;\n        newTaskJoin.cate_id = this.taskJoin.cate_id;\n        newTaskJoin.prod_id = this.taskJoin.prod_id;\n        newTaskJoin.grop_id = this.taskJoin.grop_id;\n        newTaskJoin.task_description = this.taskJoin.task_description;\n        newTaskJoin.task_father_id = this.taskJoin.task_id;\n        newTaskJoin.attachments = this.taskJoin.attachments;\n\n        for (var i in this.taskJoin.fields) {\n          if (this.taskJoin.fields[i].form_data && this.taskJoin.fields[i].form_data.trim() != \"\") {\n            campos.push(this.taskJoin.fields[i].form_id + '|*|' + this.taskJoin.fields[i].form_data);\n          } else {\n            fields_empty = true;\n          }\n        }\n\n        if (fields_empty == false) {\n          newTaskJoin.fields = campos;\n          newTaskJoin.isrequest = \"true\";\n          this.isLoading = true;\n          this._tasks.saveTaskJoin(newTaskJoin).subscribe(function (res) {\n            _this10.isLoading = false;\n            if (res.data && res.data != null) {\n              _this10.toastr.success(res.message);\n              $(\"#mdCreateTaskJoin\").modal(\"hide\");\n              $(\"#mdTypeTaskJoin\").modal(\"hide\");\n              _this10.reload();\n            } else {\n              _this10.toastr.warning(res.message, \"Error\");\n            }\n          });\n        } else {\n          this.toastr.warning(\"Empty form fields\");\n        }\n      } else {\n        this.toastr.warning(\"¡ Fields Empty !\");\n      }\n    }\n  }, {\n    key: \"setCurPageTaskShared\",\n    value: function setCurPageTaskShared(value) {\n      var cur = value == 1 ? this.currentpageTaskShared + 1 : this.currentpageTaskShared - 1;\n      if (cur <= 0) {\n        this.currentpageTaskShared = 1;\n      } else {\n        if ((cur + 1) * this.limitpageTaskShared - this.limitpageTaskShared + 1 <= this.itemcountTaskShared + this.limitpageTaskShared) {\n          this.currentpageTaskShared = cur;\n        }\n      }\n      this.reloadTaskShared();\n    }\n  }, {\n    key: \"goToTaskShared\",\n    value: function goToTaskShared(value) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      if (value == 0) {\n        this.currentpageTaskShared = 1;\n        this.limitpageTaskShared = 20;\n      } else {\n        this.currentpage = Math.round(this.itemcountTaskShared / this.limitpageTaskShared);\n        var mod = this.itemcountTaskShared % this.limitpageTaskShared;\n        if (mod > 0 && mod < 5) {\n          this.currentpageTaskShared += 1;\n        }\n      }\n      this.reloadTaskShared();\n    }\n  }, {\n    key: \"setOrderTaskShared\",\n    value: function setOrderTaskShared(value) {\n      if (this.posOrderTaskShared === value) {\n        this.orderDescTaskShared = !this.orderDescTaskShared;\n      }\n      this.posOrderTaskShared = value;\n      this.reloadTaskShared();\n    }\n  }, {\n    key: \"changedExtraHandlerTaskShared\",\n    value: function changedExtraHandlerTaskShared(event) {\n      var _this11 = this;\n\n      if (event.keyCode == 13) {\n        this.isLoadingTaskShared = true;\n        this.currentpageTaskShared = 1;\n\n        var filter = {\n          start: 0,\n          end: this.limitpageTaskShared,\n          all: this.searchTaskShared.trim(),\n          orderby: this.posOrderTaskShared,\n          orderdesc: this.orderDescTaskShared ? \"desc\" : \"\"\n        };\n        this._tasks.getTaskSharedList(filter).subscribe(function (res) {\n          _this11.isLoadingTaskShared = false;\n          _this11.taskShared = res.data.data;\n          _this11.itemcountTaskShared = res.data.count;\n          _this11.lastpageTaskShared = _this11.itemcountTaskShared / _this11.limitpageTaskShared;\n          if (_this11.lastpageTaskShared % 1 != 0) {\n            var countpagTaskShared = 1 + parseInt(_this11.lastpageTaskShared);\n            _this11.lastpageTaskShared = countpagTaskShared;\n          }\n          _this11.pagesTaskShared = [];\n          for (var i = 1; i <= _this11.lastpageTaskShared; i++) {\n            _this11.pagesTaskShared.push(i);\n          }\n          if (_this11.pagesTaskShared.length == 0) {\n            _this11.pagesTaskShared = [1];\n          }\n        });\n        this.contTaskShared = 0;\n      }\n    }\n  }, {\n    key: \"filterTextTaskShared\",\n    value: function filterTextTaskShared() {\n      var _this12 = this;\n\n      this.isLoadingTaskShared = true;\n      this.currentpageTaskShared = 1;\n\n      var filter = {\n        start: 0,\n        end: this.limitpageTaskShared,\n        all: this.searchTaskShared.trim(),\n        orderby: this.posOrderTaskShared,\n        orderdesc: this.orderDescTaskShared ? \"desc\" : \"\"\n      };\n      this._tasks.getTaskSharedList(filter).subscribe(function (res) {\n        _this12.isLoadingTaskShared = false;\n        _this12.taskShared = res.data.data;\n        _this12.itemcountTaskShared = res.data.count;\n        _this12.lastpageTaskShared = _this12.itemcountTaskShared / _this12.limitpageTaskShared;\n        if (_this12.lastpageTaskShared % 1 != 0) {\n          var countpagTaskShared = 1 + parseInt(_this12.lastpageTaskShared);\n          _this12.lastpageTaskShared = countpagTaskShared;\n        }\n        _this12.pagesTaskShared = [];\n        for (var i = 1; i <= _this12.lastpageTaskShared; i++) {\n          _this12.pagesTaskShared.push(i);\n        }\n        if (_this12.pagesTaskShared.length == 0) {\n          _this12.pagesTaskShared = [1];\n        }\n      });\n      this.contTaskShared = 0;\n    }\n  }, {\n    key: \"checkTask\",\n    value: function checkTask(task_id) {\n      this.taskChecked = task_id;\n    }\n  }, {\n    key: \"associateTaskJoin\",\n    value: function associateTaskJoin() {\n      var _this13 = this;\n\n      var newTaskJoin = {};\n\n      if (this.taskChecked && this.taskChecked != 0 && this.infoTaskFatherAssociate.task_id && this.infoTaskFatherAssociate.task_id != 0) {\n        newTaskJoin.task_child_id = this.taskChecked;\n        newTaskJoin.task_father_id = this.infoTaskFatherAssociate.task_id;\n\n        this._tasks.associateTaskJoin(newTaskJoin).subscribe(function (res) {\n          if (res.data && res.data != null) {\n            _this13.toastr.success(res.message);\n            $(\"#mdAssociateTaskJoin\").modal(\"hide\");\n            _this13.reload();\n          } else {\n            _this13.toastr.warning(res.message);\n          }\n        });\n      } else {\n        this.toastr.error(\"Error !\");\n      }\n    }\n  }, {\n    key: \"getCategories\",\n    value: function getCategories() {\n      var _this14 = this;\n\n      this.categorieslblNewTask = [];\n      this._categories.getCategories().subscribe(function (data) {\n        _this14.categoriesNewTask = data.data;\n        var _iteratorNormalCompletion6 = true;\n        var _didIteratorError6 = false;\n        var _iteratorError6 = undefined;\n\n        try {\n          for (var _iterator6 = data.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n            var c = _step6.value;\n\n            _this14.categorieslblNewTask.push({\n              label: c.cate_desc,\n              value: c.cate_id,\n              para_type: c.para_type\n            });\n          }\n        } catch (err) {\n          _didIteratorError6 = true;\n          _iteratorError6 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n              _iterator6.return();\n            }\n          } finally {\n            if (_didIteratorError6) {\n              throw _iteratorError6;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"createFormNewTask\",\n    value: function createFormNewTask(cate_id) {\n      var _this15 = this;\n\n      this.position = -1;\n      var array_list = [];\n      this.taskJoin.fields = [];\n      this._categories.getFieldsCategory(cate_id).subscribe(function (res) {\n        _this15.taskJoin.fields = res.data;\n        if (_this15.taskJoin.fields && _this15.taskJoin.fields.length > 0) {\n          _this15.tagMenuNew = 1;\n          $('#li_description_taskJoin').removeClass('active');\n          $('#li_associateForm_taskJoin').addClass('active');\n        } else {\n          _this15.tagMenuNew = 2;\n          $('#li_associateForm_taskJoin').removeClass('active');\n          $('#li_description_taskJoin').addClass('active');\n        }\n      });\n    }\n  }, {\n    key: \"onChangeTask\",\n    value: function onChangeTask(event) {\n\n      var files = event.srcElement.files;\n      if (!this.taskJoin.attachments) {\n        this.taskJoin.attachments = [];\n      }\n      this.taskJoin.attachments.push(files[0]);\n    }\n  }, {\n    key: \"deleteAttachmentNewTaskJoin\",\n    value: function deleteAttachmentNewTaskJoin(att) {\n      var index = 0;\n      for (var i in this.taskJoin.attachments) {\n        if (att.name == this.taskJoin.attachments[i].name) {\n          index = i;\n          break;\n        }\n      }\n      this.taskJoin.attachments.splice(index, 1);\n    }\n  }, {\n    key: \"showRequest\",\n    value: function showRequest(request) {\n      var _this16 = this;\n\n      this.mylist = [];\n      this.mytask = 0;\n      this.timeline = 0;\n      this.taskfields = [];\n      this.mytask = request.task_id;\n      if (request.tktype == \"Request\") {\n        if (request.asigned_to == \"forme\") {\n          $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n          if (request.islocal) {\n            this._tasks.getTask(request.task_id).subscribe(function (res) {\n              _this16.task = res.data;\n              _this16.task.islocal = true;\n              _this16._tasks.getTaskFields(request.task_id).subscribe(function (res) {\n                _this16.task.form = res.data;\n              });\n              $(\"#mdEditTask\").modal(\"show\");\n            });\n          } else {\n            this._externalrequest.getTask(request.task_id, request.bd_external).subscribe(function (res) {\n              _this16.task = res.data;\n              _this16._externalrequest.getTaskFields(request.task_id, request.bd_external).subscribe(function (res) {\n                _this16.task.form = res.data;\n              });\n              $(\"#mdEditTask\").modal(\"show\");\n            });\n          }\n        } else {\n          if (request.canclose == 1) {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            if (request.islocal) {\n              this._tasks.getMyTask(request.task_id).subscribe(function (res) {\n                _this16.task = res.data;\n                _this16.myfilterfield = { pos: \"para_type\", text: [request.type], typetittle: request.type_name, icon: _this16.task.icon, style: { 'background': _this16.task.background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n                _this16.task.task_description_r = _this16.task.task_description;\n                _this16.task.task_description = \"\";\n                _this16._tasks.getTaskFields(request.task_id).subscribe(function (res) {\n                  _this16.task.fields = res.data;\n                });\n                $(\"#mdEditRequest\").modal(\"show\");\n              });\n            } else {\n              this._externalrequest.getTask(request.task_id, request.bd_external).subscribe(function (res) {\n                _this16.task = res.data;\n                _this16.task.islocal = false;\n                _this16.myfilterfield = { pos: \"para_type\", text: [request.type], typetittle: request.type_name, icon: _this16.task.icon, style: { 'background': _this16.task.background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n                _this16.task.task_description_rext = _this16.task.task_description;\n                _this16._externalrequest.getTaskFields(request.task_id, request.bd_external).subscribe(function (res) {\n                  _this16.task.fields = res.data;\n                });\n                $(\"#mdEditExtRequest\").modal(\"show\");\n              });\n            }\n          }\n        }\n      }\n    }\n  }, {\n    key: \"updateCatSelect\",\n    value: function updateCatSelect(cat, listcat) {\n      var cat_array = [];\n      this.selectedCategory.cate_id = cat;\n      var _iteratorNormalCompletion7 = true;\n      var _didIteratorError7 = false;\n      var _iteratorError7 = undefined;\n\n      try {\n        for (var _iterator7 = this.categories[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n          var c = _step7.value;\n\n          cat_array.push(c.value);\n          if (cat_array.indexOf(cat) >= 0 && c.value == cat && c.reqapproval == 1) {\n            this.task.task_approved = 0;\n          } else if (cat_array.indexOf(cat) >= 0 && c.value == cat && c.reqapproval == 0) {\n            this.task.task_approved = 1;\n          } else if (cat_array.indexOf(cat) < 0) {\n            this.task.task_approved = 1;\n          }\n        }\n      } catch (err) {\n        _didIteratorError7 = true;\n        _iteratorError7 = err;\n      } finally {\n        try {\n          if (!_iteratorNormalCompletion7 && _iterator7.return) {\n            _iterator7.return();\n          }\n        } finally {\n          if (_didIteratorError7) {\n            throw _iteratorError7;\n          }\n        }\n      }\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask(type) {\n      var _this17 = this;\n\n      if (this.task.task_description_r) {\n        this.task.task_description = this.task.task_description_r;\n      }\n      if (this.task.task_description_rext) {\n        this.task.task_description = this.task.task_description_rext;\n      }\n      this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\").split(\"\\n\").join(\"\").split(\"\\r\").join(\"\");\n      if (this.task.task_delivery) {\n        this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      }\n      var result = \"\";\n      if (type == 1) {\n        this.task.updaterequest = 1;\n      }\n      this.task.isrequest = \"true\";\n      if (this.task.islocal == true) {\n        this.isLoading = true;\n        this._tasks.putTask(this.task).subscribe(function (res) {\n          _this17.isLoading = false;\n          result = res.data;\n          if (res.data == \"\" || res.data == \"0\") {\n            _this17.toastr.error(res.message, \"Error!\");\n          } else {\n            if (_this17.task.fields && _this17.task.fields.length > 0) {\n              for (var i = 0; i < _this17.task.fields.length; i++) {\n                if (!_this17.task.fields[i].task_id > 0) {\n                  _this17.task.fields[i].task_id = res.data;\n                }\n              }\n              _this17._tasks.putTaskFields(result, _this17.task.fields).subscribe(function (rex) {});\n            }\n            _this17.toastr.success(res.message, \"Task saved successfully\");\n          }\n          _this17.task = { project: {}, attachments: [] };\n          $(\"#mdEditTask\").modal(\"hide\");\n          _this17.reload();\n        });\n      } else {\n        this.dbname = this.task.dbname;\n        this.isLoading = true;\n        this._externalrequest.putTask(this.task).subscribe(function (res) {\n          _this17.isLoading = false;\n          result = res.data;\n          if (res.data == \"\" || res.data == \"0\") {\n            _this17.toastr.error(res.message, \"Error!\");\n          } else {\n            if (_this17.task.fields && _this17.task.fields.length > 0) {\n              for (var i = 0; i < _this17.task.fields.length; i++) {\n                if (!_this17.task.fields[i].task_id > 0) {\n                  _this17.task.fields[i].task_id = res.data;\n                }\n              }\n              _this17._externalrequest.putTaskFields(_this17.task.fields, _this17.dbname).subscribe(function (rex) {});\n            }\n            _this17.toastr.success(res.message, \"Task saved successfully\");\n          }\n          _this17.task = { project: {}, attachments: [] };\n          $(\"#mdEditExtRequest\").modal(\"hide\");\n          $(\"#mdEditRequest\").modal(\"hide\");\n          _this17.reload();\n        });\n      }\n\n      this.mytask = 0;\n    }\n  }, {\n    key: \"reopenTask\",\n    value: function reopenTask(database, idtk) {\n      var _this18 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to Reopen this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this18._externalrequest.reopenTask(idtk, database, 37).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this18.toastr.success(\"Request reopen successfully\");\n                _this18.reload();\n              } else {\n                _this18.toastr.error(\"\");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"getprojects\",\n    value: function getprojects() {\n      var _this19 = this;\n\n      this.myProjects = [];\n      this.selectedprojects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this19.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        _this19.selectedprojects = [0];\n        if (res.data.planning) {\n          var _iteratorNormalCompletion8 = true;\n          var _didIteratorError8 = false;\n          var _iteratorError8 = undefined;\n\n          try {\n            for (var _iterator8 = res.data.planning[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n              var c = _step8.value;\n\n              _this19.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n              _this19.selectedprojects.push(c.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError8 = true;\n            _iteratorError8 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                _iterator8.return();\n              }\n            } finally {\n              if (_didIteratorError8) {\n                throw _iteratorError8;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = res.data.buildup[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var _c = _step9.value;\n\n              _this19.myProjects.push({\n                label: _c.proj_id + \" \" + _c.proj_subject,\n                value: _c.proj_id,\n                idcolor: _c.idcolor\n              });\n              _this19.selectedprojects.push(_c.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion10 = true;\n          var _didIteratorError10 = false;\n          var _iteratorError10 = undefined;\n\n          try {\n            for (var _iterator10 = res.data.implementation[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n              var _c2 = _step10.value;\n\n              _this19.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n              _this19.selectedprojects.push(_c2.proj_id);\n            }\n          } catch (err) {\n            _didIteratorError10 = true;\n            _iteratorError10 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                _iterator10.return();\n              }\n            } finally {\n              if (_didIteratorError10) {\n                throw _iteratorError10;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"noteAdd\",\n    value: function noteAdd(idtask, type) {\n      this.note.task_id = idtask;\n\n      if (this.note.note_text == undefined && this.note_text != null && this.note_text != \"\") {\n        this.note.note_text = this.note_text;\n      }\n      // this._externalrequest.putNote(this.note).subscribe(data => {\n      // });\n      this.getComments(idtask);\n      this.getTimeline(idtask);\n    }\n  }, {\n    key: \"createForm\",\n    value: function createForm(catid) {\n      var _this20 = this;\n\n      this.position = -1;\n      var array_list = [];\n      this.task.fields = [];\n      this._externalrequest.getFieldsCategory(catid, this.dbname).subscribe(function (res) {\n        _this20.task.fields = res.data;\n      });\n    }\n  }, {\n    key: \"fullForm\",\n    value: function fullForm(list_data, list_cate, cate_id, task_id) {\n      this.position = -1;\n      var categoryList = list_cate;\n      var dataList = list_data;\n      var category = cate_id;\n      var passed = true;\n      var list_a = [];\n      this.task.fields = [];\n\n      for (var i = 0; i <= categoryList.length; i++) {\n        if (i < categoryList.length) {\n          if (categoryList[i].value == category) {\n            this.position = i;\n            list_a = categoryList[i];\n            for (var x = 0; x <= list_a.fields.length; x++) {\n              if (x < list_a.fields.length) {\n                var campo = {\n                  form_field: list_a.fields[x].form_field,\n                  form_id: list_a.fields[x].form_id,\n                  cate_id: list_a.fields[x].cate_id,\n                  task_id: this.mytask,\n                  form_data: dataList[x].form_data\n                };\n                this.task.fields.push(campo);\n              }\n            }\n          }\n        }\n      }\n    }\n  }, {\n    key: \"lpad\",\n    value: function lpad(n, width, z) {\n      z = z || \"0\";\n      n = n || \"0\";\n      n = n + \"\";\n      return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      this.typeSelected = state.toString();\n      this.textState = state;\n      this.posState = \"type_name\";\n      this.limitpage = 20;\n      this.currentpage = 1;\n      this.reload();\n    }\n  }, {\n    key: \"setInfoTask\",\n    value: function setInfoTask(info) {\n      this.timeline = info;\n      //this.textInfo = info;\n      //this.posInfo = \"info_text\";\n    }\n  }, {\n    key: \"closeTask\",\n    value: function closeTask(database, idtk) {\n      var _this21 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Close this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this21._externalrequest.setStatusTask(database, idtk, 42).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this21.toastr.success(\"Request closed successfully\");\n                _this21.reload();\n              } else {\n                _this21.toastr.error(data.message);\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"deleteTask\",\n    value: function deleteTask(database, idtk) {\n      var _this22 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Delete this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this22._externalrequest.setStatusTask(database, idtk, 43).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this22.toastr.success(\"Request deleted successfully\");\n                _this22.reload();\n              } else {\n                _this22.toastr.error(\"\");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"rejectTask\",\n    value: function rejectTask() {\n      var _this23 = this;\n\n      this._tasks.rejectTask(this.rjtask.task_id, this.rjtask.retk_description).subscribe(function (data) {\n        if (data.data != \"OK\") {\n          _this23.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this23.toastr.success(data.message, \"Task rejected\");\n        }\n        _this23.reload();\n      });\n    }\n  }, {\n    key: \"showReject\",\n    value: function showReject(dv) {\n      var _this24 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Reject this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (dv) {\n            _this24.rjtask.task_id = dv.task_id;\n            _this24.rjtask.retk_description = \"\";\n            $(\"#mdRj\").modal(\"show\");\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"showImprov\",\n    value: function showImprov(dv) {\n      var _this25 = this;\n\n      this.head = [];\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want move to Improving this Request?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (dv) {\n            _this25.imptask.task_id = dv.task_id;\n            _this25.imptask.imtk_description = \"\";\n            _this25.imptask.database = dv.bd_external;\n            $(\"#mdImp\").modal(\"show\");\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"impTask\",\n    value: function impTask() {\n      var _this26 = this;\n\n      this._externalrequest.impTask(this.imptask.database, this.imptask.task_id, this.imptask.imtk_description).subscribe(function (data) {\n        if (data.data != \"OK\") {\n          _this26.toastr.warning(data.message, \"Warning!\");\n        } else {\n          _this26.toastr.success(data.message, \"Task moved to improving\");\n        }\n        _this26.reload();\n      });\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n      this.reload();\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.reload();\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n    }\n  }, {\n    key: \"clientData\",\n    value: function clientData(client_id, type) {\n      var _this27 = this;\n\n      var x = type.toString();\n      this._user.getDataBase(client_id).subscribe(function (res) {\n        _this27.dbname = res.data.usex_dbname;\n        _this27.task.usex_myid = res.data.usex_myid;\n        _this27.task.dbname = _this27.dbname;\n        _this27._externalrequest.getProducts(_this27.dbname).subscribe(function (data) {\n          _this27.products = [];\n          var _iteratorNormalCompletion11 = true;\n          var _didIteratorError11 = false;\n          var _iteratorError11 = undefined;\n\n          try {\n            for (var _iterator11 = data.data[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n              var c = _step11.value;\n\n              _this27.products.push({ label: c.prod_name, value: c.prod_id });\n              _this27.selectedProduct.push(c.prod_id);\n            }\n          } catch (err) {\n            _didIteratorError11 = true;\n            _iteratorError11 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                _iterator11.return();\n              }\n            } finally {\n              if (_didIteratorError11) {\n                throw _iteratorError11;\n              }\n            }\n          }\n        });\n        _this27._externalrequest.getGroups(_this27.dbname).subscribe(function (data) {\n          _this27.groups = [];\n          var _iteratorNormalCompletion12 = true;\n          var _didIteratorError12 = false;\n          var _iteratorError12 = undefined;\n\n          try {\n            for (var _iterator12 = data.data[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n              var c = _step12.value;\n\n              _this27.groups.push({ label: c.grop_name, value: c.grop_id });\n            }\n          } catch (err) {\n            _didIteratorError12 = true;\n            _iteratorError12 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                _iterator12.return();\n              }\n            } finally {\n              if (_didIteratorError12) {\n                throw _iteratorError12;\n              }\n            }\n          }\n        });\n        _this27.existClient = false;\n      });\n    }\n  }, {\n    key: \"getCategoriesbyProduct\",\n    value: function getCategoriesbyProduct(prodId, item) {\n      var _this28 = this;\n\n      var type = item.toString();\n      this._externalrequest.getActiveCategories(this.dbname, type, prodId).subscribe(function (data) {\n        _this28.categories = [];\n        _this28.categorieslbl = [];\n        _this28.categories = data.data;\n        var _iteratorNormalCompletion13 = true;\n        var _didIteratorError13 = false;\n        var _iteratorError13 = undefined;\n\n        try {\n          for (var _iterator13 = data.data[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {\n            var c = _step13.value;\n\n            _this28.categorieslbl.push({\n              label: c.cate_desc,\n              value: c.cate_id,\n              para_type: c.para_type\n            });\n          }\n        } catch (err) {\n          _didIteratorError13 = true;\n          _iteratorError13 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion13 && _iterator13.return) {\n              _iterator13.return();\n            }\n          } finally {\n            if (_didIteratorError13) {\n              throw _iteratorError13;\n            }\n          }\n        }\n\n        _this28.existProduct = false;\n      });\n    }\n  }, {\n    key: \"doneRequest\",\n    value: function doneRequest() {\n      this.task = { project: {}, attachments: [] };\n      this.task.taskid = 0;\n      this.mylist.fields = [];\n      this.existClient = true;\n    }\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state) {\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.posOrder = \"\";\n      this.reload();\n    }\n  }, {\n    key: \"showCategories\",\n    value: function showCategories(type_cod, title, background, icon) {\n      this.getClientCategories(type_cod, title, background, icon);\n    }\n  }, {\n    key: \"getClientCategories\",\n    value: function getClientCategories(type_cod, title, background, icon) {\n      var _this29 = this;\n\n      this.categorieslblClients = [];\n      this._externalrequest.getCategories(this.textGroup).subscribe(function (res) {\n        _this29.categoriesClients = res.data;\n        var _iteratorNormalCompletion14 = true;\n        var _didIteratorError14 = false;\n        var _iteratorError14 = undefined;\n\n        try {\n          for (var _iterator14 = res.data[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {\n            var c = _step14.value;\n\n            _this29.categorieslblClients.push({\n              label: c.cate_desc + ' - ' + c.prod_name,\n              value: c.cate_id,\n              para_type: c.para_type\n            });\n          }\n        } catch (err) {\n          _didIteratorError14 = true;\n          _iteratorError14 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion14 && _iterator14.return) {\n              _iterator14.return();\n            }\n          } finally {\n            if (_didIteratorError14) {\n              throw _iteratorError14;\n            }\n          }\n        }\n\n        _this29.myfilterfield = { pos: \"para_type\", text: [type_cod], typetittle: title, icon: icon, style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n        $(\"#mdCategory\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"setPageRequest\",\n    value: function setPageRequest(opt) {\n      if (opt == 1) {\n        this.tagMenuRequest = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuRequest = 2;\n      }\n      if (opt == 3) {\n        this.tagMenuRequest = 3;\n      }\n    }\n  }, {\n    key: \"activeTabs\",\n    value: function activeTabs() {\n      this.tagMenuRequest = 2;\n      $('#li_associate_form_request').removeClass('active');\n      $('#li_description_request').addClass('active');\n    }\n  }, {\n    key: \"reloadResults\",\n    value: function reloadResults() {\n      this.currentpage = 1;\n      this.reload();\n    }\n  }, {\n    key: \"exportExcel\",\n    value: function exportExcel() {\n      var _this30 = this;\n\n      this._externalrequest.getExcel(this.filter_excel).subscribe(function (res) {\n        var route = res.data;\n        if (res.message == 'OK') {\n          _this30.toastr.success(\"report generated\");\n          //Usaremos un link para iniciar la descarga \n          var save = document.createElement('a');\n          save.href = route;\n          save.target = '_blank';\n          //Truco: así le damos el nombre al archivo\n          save.download = 'report_external_request';\n          var clicEvent = new MouseEvent('click', {\n            'view': window,\n            'bubbles': true,\n            'cancelable': true\n          });\n          //Simulamos un clic del usuario\n          save.dispatchEvent(clicEvent);\n          //Y liberamos recursos...\n          (window.URL || window.webkitURL).revokeObjectURL(save.href);\n        } else {\n          _this30.toastr.error(\"The document could not be generated\");\n        }\n      });\n    }\n  }]);\n\n  return ExternalRequestsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _primeng.ConfirmationService, _externalrequest.ExternalRequestService, _users.UsersService, _project.ProjectService, _task.TaskService, _product.ProductService, _categories.CategoriesService, _group.GroupService, _type.TypeService, _sprint.SprintService], ExternalRequestsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 431 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, jQuery) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ExternalTaskListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _task = __webpack_require__(19);\n\nvar _users = __webpack_require__(20);\n\nvar _note = __webpack_require__(24);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nvar _externalrequest = __webpack_require__(48);\n\nvar _pipes = __webpack_require__(14);\n\nvar _externaltasklistTemplate = __webpack_require__(877);\n\nvar _externaltasklistTemplate2 = _interopRequireDefault(_externaltasklistTemplate);\n\nvar _task2 = __webpack_require__(52);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ExternalTaskListComponent = exports.ExternalTaskListComponent = (_dec = (0, _core.Component)({\n  selector: \"externaltasks\",\n  template: _externaltasklistTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  providers: [_primeng.ConfirmationService],\n  declarations: [_task2.TaskViewComponent]\n}), _dec(_class = function () {\n  function ExternalTaskListComponent(title, route, sanitizer, toastr, taskService, groupService, userService, productService, ProjectService, noteService, sprintService, externalRequestService, confirmationService) {\n    _classCallCheck(this, ExternalTaskListComponent);\n\n    this._title = title;\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._sprint = sprintService;\n    this._externalrequest = externalRequestService;\n    this.textState = \"\";\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.clientGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.task = { project: {}, attachments: [] };\n    this.seltasks = [];\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.mdT = { project: {}, comments: [] };\n    this.idtk = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.namegroup = \"MY TASKS\";\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.head = [];\n    this.mysprints = [];\n    this.tasks = [];\n    this.userslbl = [];\n    this.products = [];\n    this.states = [];\n    this.myProjects = [];\n    this.tagMenu = 1;\n    this.tagMenuNew = 1;\n    this.stTitle = \"Squadlinx\";\n    this.externaltask = [];\n    this.filter_excel = null;\n    this.filter = false;\n    this.mytask = [];\n    this.mytaskcopy = [];\n    this.users = [];\n    this.usersFilter = [];\n    this.usersFilterCopy = [];\n    this.usersExternal = [];\n    this.usersExternalCopy = [];\n    this.productsFilter = [];\n    this.productsFilterCopy = [];\n    this.projectsFilter = [];\n    this.projectsFilterCopy = [];\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : External Tasks ::.\");\n    this.isLoading = false;\n  }\n\n  _createClass(ExternalTaskListComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      var _this = this;\n\n      this.reload();\n      this._groups.getGroups().subscribe(function (data) {\n        _this.groups = data.data;\n      });\n      this._user.getExternalList().subscribe(function (res) {\n        _this.clients = [];\n        var objClientes = res.data[0];\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.clients.push({ client_name: c.client_name, client_id: c.client_id, usex_dbname: c.usex_dbname });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n\n        _this.clientGroup = objClientes.usex_dbname;\n        _this.getUsersExternal(objClientes.usex_dbname);\n      });\n      this.states = [];\n      this._tasks.getStates().subscribe(function (data) {\n        _this.states = data.data;\n      });\n      this.getProductsList();\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this.projectsFilter = [];\n        _this.projectsFilterCopy = [];\n        _this.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion2 = true;\n          var _didIteratorError2 = false;\n          var _iteratorError2 = undefined;\n\n          try {\n            for (var _iterator2 = res.data.planning[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n              var c = _step2.value;\n\n              _this.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError2 = true;\n            _iteratorError2 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                _iterator2.return();\n              }\n            } finally {\n              if (_didIteratorError2) {\n                throw _iteratorError2;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion3 = true;\n          var _didIteratorError3 = false;\n          var _iteratorError3 = undefined;\n\n          try {\n            for (var _iterator3 = res.data.buildup[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n              var _c = _step3.value;\n\n              _this.myProjects.push({\n                label: _c.proj_id + \" \" + _c.proj_subject,\n                value: _c.proj_id,\n                idcolor: _c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError3 = true;\n            _iteratorError3 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                _iterator3.return();\n              }\n            } finally {\n              if (_didIteratorError3) {\n                throw _iteratorError3;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = res.data.implementation[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var _c2 = _step4.value;\n\n              _this.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        }\n        _this.projectsFilter = _this.myProjects;\n        _this.projectsFilterCopy = _this.myProjects;\n      });\n\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(function (data) {\n        _this.users = data.data;\n        _this.usersFilter = data.data;\n        var _iteratorNormalCompletion5 = true;\n        var _didIteratorError5 = false;\n        var _iteratorError5 = undefined;\n\n        try {\n          for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n            var c = _step5.value;\n\n            _this.userslbl.push({\n              label: c.user_lastname + \", \" + c.user_name,\n              value: c.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError5 = true;\n          _iteratorError5 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion5 && _iterator5.return) {\n              _iterator5.return();\n            }\n          } finally {\n            if (_didIteratorError5) {\n              throw _iteratorError5;\n            }\n          }\n        }\n\n        _this.usersFilterCopy = _this.userslbl;\n      });\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this.mysprints = [];\n        _this.mysprints.push({\n          label: \"Backlog\",\n          value: 0\n        });\n        var _iteratorNormalCompletion6 = true;\n        var _didIteratorError6 = false;\n        var _iteratorError6 = undefined;\n\n        try {\n          for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n            var c = _step6.value;\n\n            _this.mysprints.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError6 = true;\n          _iteratorError6 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n              _iterator6.return();\n            }\n          } finally {\n            if (_didIteratorError6) {\n              throw _iteratorError6;\n            }\n          }\n        }\n      });\n      this.leader = 0;\n      this._user.getMyUserData().subscribe(function (data) {\n        _this.myuser = data.data[0].user_id;\n        _this.leader = data.data[0].head;\n      });\n    }\n  }, {\n    key: \"getProductsList\",\n    value: function getProductsList() {\n      var _this2 = this;\n\n      this._products.getProducts().subscribe(function (data) {\n        _this2.products = [];\n        var _iteratorNormalCompletion7 = true;\n        var _didIteratorError7 = false;\n        var _iteratorError7 = undefined;\n\n        try {\n          for (var _iterator7 = data.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n            var c = _step7.value;\n\n            _this2.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        } catch (err) {\n          _didIteratorError7 = true;\n          _iteratorError7 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion7 && _iterator7.return) {\n              _iterator7.return();\n            }\n          } finally {\n            if (_didIteratorError7) {\n              throw _iteratorError7;\n            }\n          }\n        }\n\n        _this2.productsFilter = _this2.products;\n        _this2.productsFilterCopy = _this2.products;\n      });\n    }\n  }, {\n    key: \"getUsersExternal\",\n    value: function getUsersExternal(bd_name) {\n      var _this3 = this;\n\n      this._user.getUsersExternal(bd_name).subscribe(function (data) {\n        if (data.data) {\n          var _iteratorNormalCompletion8 = true;\n          var _didIteratorError8 = false;\n          var _iteratorError8 = undefined;\n\n          try {\n            for (var _iterator8 = data.data[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n              var c = _step8.value;\n\n              _this3.usersExternal.push({\n                label: c.completename,\n                value: c.user_id\n              });\n            }\n          } catch (err) {\n            _didIteratorError8 = true;\n            _iteratorError8 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                _iterator8.return();\n              }\n            } finally {\n              if (_didIteratorError8) {\n                throw _iteratorError8;\n              }\n            }\n          }\n\n          _this3.usersExternalCopy = _this3.usersExternal;\n        }\n      });\n    }\n  }, {\n    key: \"getmyProjects\",\n    value: function getmyProjects() {\n      var _this4 = this;\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this4.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = res.data.planning[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var c = _step9.value;\n\n              _this4.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion10 = true;\n          var _didIteratorError10 = false;\n          var _iteratorError10 = undefined;\n\n          try {\n            for (var _iterator10 = res.data.buildup[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n              var _c3 = _step10.value;\n\n              _this4.myProjects.push({\n                label: _c3.proj_id + \" \" + _c3.proj_subject,\n                value: _c3.proj_id,\n                idcolor: _c3.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError10 = true;\n            _iteratorError10 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                _iterator10.return();\n              }\n            } finally {\n              if (_didIteratorError10) {\n                throw _iteratorError10;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion11 = true;\n          var _didIteratorError11 = false;\n          var _iteratorError11 = undefined;\n\n          try {\n            for (var _iterator11 = res.data.implementation[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n              var _c4 = _step11.value;\n\n              _this4.myProjects.push({\n                label: _c4.proj_id + \" \" + _c4.proj_subject,\n                value: _c4.proj_id,\n                idcolor: _c4.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError11 = true;\n            _iteratorError11 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                _iterator11.return();\n              }\n            } finally {\n              if (_didIteratorError11) {\n                throw _iteratorError11;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      if (event.keyCode == 13) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.searchTask();\n      }\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n      this.searchTask();\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.searchTask();\n    }\n  }, {\n    key: \"goTo\",\n    value: function goTo(value) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      if (value == 0) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n      } else {\n        this.currentpage = Math.round(this.itemcount / this.limitpage);\n        var mod = this.itemcount % this.limitpage;\n        if (mod > 0 && mod < 5) {\n          this.currentpage += 1;\n        }\n      }\n      this.searchTask();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this5 = this;\n\n      this.isLoading = true;\n      this.tasks = [];\n      if (this.mytask) {\n        var filter = {\n          start: this.currentpage * this.limitpage - this.limitpage,\n          end: this.limitpage,\n          all: this.search.trim(),\n          state: this.textState,\n          client: this.textGroup,\n          clientGroup: this.clientGroup,\n          orderby: this.posOrder,\n          orderdesc: this.orderDesc ? \"desc\" : \"\",\n          assigned: this.mytask.assigned && this.mytask.assigned.length ? this.mytask.assigned : [''],\n          creators: this.mytask.creators && this.mytask.creators.length ? this.mytask.creators : [''],\n          projects: this.mytask.projects && this.mytask.projects.length ? this.mytask.projects : [''],\n          products: this.mytask.products && this.mytask.products.length ? this.mytask.products : [''],\n          desc: this.mytask.description ? this.mytask.description : '',\n          task_ids: this.mytask.task_ids && this.mytask.task_ids.length ? this.mytask.task_ids : [''],\n          date_ini: this.mytask.date_ini ? this.mytask.date_ini : '',\n          date_end: this.mytask.date_end ? this.mytask.date_end : ''\n        };\n      }\n\n      this.filter_excel = filter;\n      this._externalrequest.getTaskList(filter).subscribe(function (res) {\n        _this5.externaltask = res.data;\n        _this5.isLoading = false;\n        if (_this5.externaltask && _this5.externaltask.length) {\n          _this5.tasks = res.data;\n          _this5.itemcount = res.count;\n          _this5.lastpage = _this5.itemcount / _this5.limitpage;\n          if (_this5.lastpage % 1 != 0) {\n            var countpag = 1 + parseInt(_this5.lastpage);\n            _this5.lastpage = countpag;\n          }\n          _this5.pages = [];\n          for (var i = 1; i <= _this5.lastpage; i++) {\n            _this5.pages.push(i);\n          }\n          if (_this5.pages.length == 0) {\n            _this5.pages = [1];\n          }\n        }\n      });\n    }\n  }, {\n    key: \"loadData\",\n    value: function loadData() {\n      var _this6 = this;\n\n      if (this.products.length == 0) {\n        this.products = [];\n        this._products.getProducts().subscribe(function (data) {\n          var _iteratorNormalCompletion12 = true;\n          var _didIteratorError12 = false;\n          var _iteratorError12 = undefined;\n\n          try {\n            for (var _iterator12 = data.data[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n              var c = _step12.value;\n\n              _this6.products.push({ label: c.prod_name, value: c.prod_id });\n            }\n          } catch (err) {\n            _didIteratorError12 = true;\n            _iteratorError12 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                _iterator12.return();\n              }\n            } finally {\n              if (_didIteratorError12) {\n                throw _iteratorError12;\n              }\n            }\n          }\n        });\n      }\n      if (this.userslbl.length == 0) {\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(function (data) {\n          _this6.users = data.data;\n          var _iteratorNormalCompletion13 = true;\n          var _didIteratorError13 = false;\n          var _iteratorError13 = undefined;\n\n          try {\n            for (var _iterator13 = data.data[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) {\n              var c = _step13.value;\n\n              _this6.userslbl.push({\n                label: c.user_lastname + \", \" + c.user_name,\n                value: c.user_id\n              });\n            }\n          } catch (err) {\n            _didIteratorError13 = true;\n            _iteratorError13 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion13 && _iterator13.return) {\n                _iterator13.return();\n              }\n            } finally {\n              if (_didIteratorError13) {\n                throw _iteratorError13;\n              }\n            }\n          }\n        });\n      }\n    }\n  }, {\n    key: \"addComment\",\n    value: function addComment() {\n      var _this7 = this;\n\n      this.notemd.task_id = this.task.task_id;\n      this._notes.putNote(note).subscribe(function (data) {\n        _this7.notemd = { note_text: \"\" };\n      });\n    }\n  }, {\n    key: \"showEditModal\",\n    value: function showEditModal(idtk) {\n      var _this8 = this;\n\n      // this.getmyProjects();\n      this.task = { project: {}, attachments: [] };\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._tasks.getTask(idtk.task_id).subscribe(function (res) {\n        if (res.data.task_description) {\n          res.data.task_description = _this8.escapeHtml(res.data.task_description);\n        }\n        _this8._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n          _this8.task.attachments = res.data;\n          _this8._tasks.getTaskFields(idtk.task_id).subscribe(function (res) {\n            _this8.task.form = res.data;\n          });\n        });\n        _this8.task = res.data;\n        $(\"#mdEditTask\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"reopenTask\",\n    value: function reopenTask(database, idtk) {\n      var _this9 = this;\n\n      this.confirm.confirm({\n        message: \"Do you want to Reopen this Task?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this9._externalrequest.reopenTask(idtk, database, 37).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this9.toastr.success(\"Task reopen successfully\");\n                _this9.reload();\n              } else {\n                _this9.toastr.error(\"\");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"closeTask\",\n    value: function closeTask(database, idtk) {\n      var _this10 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Close this Task?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this10._externalrequest.setStatusTask(database, idtk, 42).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this10.toastr.success(\"Task closed successfully\");\n                _this10.reload();\n              } else {\n                _this10.toastr.error(data.message);\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"deleteTask\",\n    value: function deleteTask(database, idtk) {\n      var _this11 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to Delete this Task?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this11._externalrequest.setStatusTask(database, idtk, 43).subscribe(function (data) {\n              if (data.data == \"OK\") {\n                _this11.toastr.success(\"Task deleted successfully\");\n                _this11.reload();\n              } else {\n                _this11.toastr.error(\"\");\n              }\n            });\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"selectAll\",\n    value: function selectAll() {\n      if (this.seltasks.length > 0) {\n        this.seltasks = [];\n      } else {\n        this.seltasks = [];\n        for (var t in this.tasks) {\n          this.seltasks.push(this.tasks[t].task_id);\n        }\n      }\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      this.textState = state;\n      this.posState = \"para_status\";\n      this.currentpage = 1;\n      this.searchTask();\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state, name) {\n      this.namegroup = name;\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.mytask = {};\n      this.filter = false;\n      this.getProductsByGroup();\n      this.searchTask();\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this12 = this;\n\n      if ((this.task.task_description2 != \"\" || this.task.task_description2 != null) && this.task.task_description == undefined) {\n        this.task.task_description = this.task.task_description2;\n      }\n      this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      this.task.task_delivery = new Date(this.task.task_delivery);\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      this._tasks.putTask(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this12.toastr.warning(data.message, \"Good news!\");\n        } else {\n          _this12.toastr.success(data.message, \"Task saved successfully\");\n        }\n        _this12.reload();\n        _this12.task = { attachments: [] };\n        _this12.task.task_description = \"\";\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this13 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this13.toastr.error(res.message, \"Error!\");\n            } else {\n              _this13.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this13.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n      var pos = this.task.attachments.indexOf(att.name);\n      this.task.attachments.splice(pos, 1);\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(taskid) {\n      var _this14 = this;\n\n      this._tasks.getAttachments(taskid).subscribe(function (res) {\n        _this14.mdT.attachments = res.data;\n        _this14.task.attachments = res.data;\n        for (var i = 0; i < _this14.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this14.mdT.total_attachments = 1;\n          } else {\n            _this14.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this14.task.attachments.length; i++) {\n          if (i == 0) {\n            _this14.task.total_attachments = 1;\n          } else {\n            _this14.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          // text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"validateTask\",\n    value: function validateTask() {\n      return !this.task.task_subject || this.task.task_subject.trim() == \"\" || !this.task.task_description2 || this.task.task_description2.trim() == \"\" || !this.task.prod_id || this.task.prod_id.trim() == \"\" || !this.task.user_asigned || this.task.user_asigned.trim() == \"\" || !this.task.task_delivery || this.task.task_delivery == \"\" || this.task.task_delivery == \"undefined\" || !this.task.task_points || this.task.task_points == \"\" || this.task.task_points == \"undefined\";\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n      if (opt == 3) {\n        this.tagMenu = 3;\n      }\n    }\n  }, {\n    key: \"setPageNewTask\",\n    value: function setPageNewTask(opt) {\n      if (opt == 1) {\n        this.tagMenuNew = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuNew = 2;\n      }\n    }\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"exportExcel\",\n    value: function exportExcel() {\n      var _this15 = this;\n\n      this._externalrequest.getExcelExternalTask(this.filter_excel).subscribe(function (res) {\n        var route = res.data;\n        if (res.message == 'OK') {\n          _this15.toastr.success(\"report generated\");\n          //Usaremos un link para iniciar la descarga \n          var save = document.createElement('a');\n          save.href = route;\n          save.target = '_blank';\n          //Truco: así le damos el nombre al archivo\n          save.download = 'report_external_task';\n          var clicEvent = new MouseEvent('click', {\n            'view': window,\n            'bubbles': true,\n            'cancelable': true\n          });\n          //Simulamos un clic del usuario\n          save.dispatchEvent(clicEvent);\n          //Y liberamos recursos...\n          (window.URL || window.webkitURL).revokeObjectURL(save.href);\n        } else {\n          _this15.toastr.error(\"The document could not be generated\");\n        }\n      });\n    }\n  }, {\n    key: \"showFilter\",\n    value: function showFilter() {\n      this.search = \"\";\n      if (this.externaltask.length) {\n        $(\"#mdSearchExternalTask\").modal(\"show\");\n      }\n      this.getProductsByGroup();\n    }\n  }, {\n    key: \"getProductsByGroup\",\n    value: function getProductsByGroup() {\n      var _this16 = this;\n\n      if (this.textGroup) {\n        this._externalrequest.getProducts(this.textGroup).subscribe(function (data) {\n          _this16.products = [];\n          var _iteratorNormalCompletion14 = true;\n          var _didIteratorError14 = false;\n          var _iteratorError14 = undefined;\n\n          try {\n            for (var _iterator14 = data.data[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) {\n              var c = _step14.value;\n\n              _this16.products.push({ label: c.prod_name, value: c.prod_id });\n            }\n          } catch (err) {\n            _didIteratorError14 = true;\n            _iteratorError14 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion14 && _iterator14.return) {\n                _iterator14.return();\n              }\n            } finally {\n              if (_didIteratorError14) {\n                throw _iteratorError14;\n              }\n            }\n          }\n\n          _this16.productsFilter = _this16.products;\n          _this16.productsFilterCopy = _this16.products;\n        });\n      } else {\n        this.getProductsList();\n      }\n    }\n  }, {\n    key: \"filterMultiple\",\n    value: function filterMultiple(event, num) {\n      switch (num) {\n        case 1:\n          var products = event.query;\n          this.productsFilter = this.filterInfo(products, this.productsFilterCopy);\n          break;\n        case 2:\n          var users = event.query;\n          this.usersFilter = this.filterInfo(users, this.usersFilterCopy);\n          break;\n        case 3:\n          var projects = event.query;\n          this.projectsFilter = this.filterInfo(projects, this.projectsFilterCopy);\n          break;\n        case 4:\n          var usersExternal = event.query;\n          this.usersExternal = this.filterInfo(usersExternal, this.usersExternalCopy);\n          break;\n      }\n    }\n  }, {\n    key: \"filterInfo\",\n    value: function filterInfo(query, countries) {\n      var filtered = [];\n      for (var i = 0; i < countries.length; i++) {\n        var country = countries[i];\n        if (country.label.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n          filtered.push(country);\n        }\n      }\n      return filtered;\n    }\n  }, {\n    key: \"filterTask\",\n    value: function filterTask() {\n      this.filter = true;\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.searchTask();\n    }\n  }, {\n    key: \"searchTask\",\n    value: function searchTask() {\n      this.mytaskcopy = jQuery.extend(true, {}, this.mytask);\n      var copy = [];\n      var copyc = [];\n\n      for (var x in this.mytask.assigned) {\n        copy.push(this.mytask.assigned[x].value);\n      }\n      this.mytask.assigned = copy;\n\n      for (var _x in this.mytask.creators) {\n        copyc.push(this.mytask.creators[_x].value);\n      }\n      this.mytask.creators = copyc;\n      var copyp = [];\n      for (var _x2 in this.mytask.projects) {\n        copyp.push(this.mytask.projects[_x2].value);\n      }\n      this.mytask.projects = copyp;\n      var copypd = [];\n      for (var _x3 in this.mytask.products) {\n        copypd.push(this.mytask.products[_x3].value);\n      }\n      this.mytask.products = copypd;\n\n      this.mytask.date_ini = this.mytask.date_ini ? this.formatDate(this.mytask.date_ini) : \"\";\n      this.mytask.date_end = this.mytask.date_end ? this.formatDate(this.mytask.date_end) : \"\";\n      this.reload();\n      this.mytask = this.mytaskcopy;\n    }\n  }, {\n    key: \"closeFilter\",\n    value: function closeFilter() {\n      this.mytask = [];\n      this.mytaskcopy = [];\n      this.search = \"\";\n      this.filter = false;\n      this.reload();\n    }\n  }, {\n    key: \"formatDate\",\n    value: function formatDate(date) {\n      date = new Date(date);\n      if (date && date !== \"\") {\n        var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n        var monthIndex = date.getMonth() + 1 < 10 ? \"0\" + (date.getMonth() + 1) : date.getMonth() + 1;\n        var year = date.getFullYear();\n        return year + '-' + monthIndex + '-' + day;\n      } else {\n        return '';\n      }\n    }\n  }]);\n\n  return ExternalTaskListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _users.UsersService, _product.ProductService, _project.ProjectService, _note.NoteService, _sprint.SprintService, _externalrequest.ExternalRequestService, _primeng.ConfirmationService], ExternalTaskListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4), __webpack_require__(4)))\n\n/***/ }),\n/* 432 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.LogListComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _task = __webpack_require__(19);\n\nvar _users = __webpack_require__(20);\n\nvar _note = __webpack_require__(24);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nvar _externalrequest = __webpack_require__(48);\n\nvar _log = __webpack_require__(113);\n\nvar _pipes = __webpack_require__(14);\n\nvar _loglistTemplate = __webpack_require__(878);\n\nvar _loglistTemplate2 = _interopRequireDefault(_loglistTemplate);\n\nvar _task2 = __webpack_require__(52);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar LogListComponent = exports.LogListComponent = (_dec = (0, _core.Component)({\n  selector: \"loglist\",\n  template: _loglistTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  providers: [_primeng.ConfirmationService],\n  declarations: [_task2.TaskViewComponent]\n}), _dec(_class = function () {\n  function LogListComponent(title, route, sanitizer, toastr, taskService, groupService, userService, productService, ProjectService, noteService, sprintService, externalRequestService, logService, confirmationService) {\n    _classCallCheck(this, LogListComponent);\n\n    this._title = title;\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._sprint = sprintService;\n    this._externalrequest = externalRequestService;\n    this._logs = logService;\n    this.textState = \"\";\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.task = { project: {}, attachments: [] };\n    this.seltasks = [];\n    // this.task.task_description = \"\";\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.mdT = { project: {}, comments: [] };\n    this.idtk = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.namegroup = \"ALL\";\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.head = [];\n    this.mysprints = [];\n    this.tasks = [];\n    this.logs = [];\n    this.userslbl = [];\n    this.products = [];\n    this.states = [];\n    this.myProjects = [];\n    this.tagMenu = 1;\n    this.tagMenuNew = 1;\n    this.log = [];\n    this.log.modu_label = \"\";\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Tasks ::.\");\n    this.isLoading = false;\n  }\n\n  _createClass(LogListComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      var _this = this;\n\n      // this.reload();\n      this._groups.getGroups().subscribe(function (data) {\n        _this.groups = data.data;\n      });\n      this.states = [];\n      this._tasks.getStates().subscribe(function (data) {\n        _this.states = data.data;\n      });\n      this._products.getProducts().subscribe(function (data) {\n        _this.products = [];\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion2 = true;\n          var _didIteratorError2 = false;\n          var _iteratorError2 = undefined;\n\n          try {\n            for (var _iterator2 = res.data.planning[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n              var c = _step2.value;\n\n              _this.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError2 = true;\n            _iteratorError2 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                _iterator2.return();\n              }\n            } finally {\n              if (_didIteratorError2) {\n                throw _iteratorError2;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion3 = true;\n          var _didIteratorError3 = false;\n          var _iteratorError3 = undefined;\n\n          try {\n            for (var _iterator3 = res.data.buildup[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n              var _c = _step3.value;\n\n              _this.myProjects.push({\n                label: _c.proj_id + \" \" + _c.proj_subject,\n                value: _c.proj_id,\n                idcolor: _c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError3 = true;\n            _iteratorError3 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                _iterator3.return();\n              }\n            } finally {\n              if (_didIteratorError3) {\n                throw _iteratorError3;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = res.data.implementation[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var _c2 = _step4.value;\n\n              _this.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        }\n      });\n\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(function (data) {\n        _this.users = data.data;\n        var _iteratorNormalCompletion5 = true;\n        var _didIteratorError5 = false;\n        var _iteratorError5 = undefined;\n\n        try {\n          for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n            var c = _step5.value;\n\n            _this.userslbl.push({\n              label: c.user_lastname + \", \" + c.user_name,\n              value: c.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError5 = true;\n          _iteratorError5 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion5 && _iterator5.return) {\n              _iterator5.return();\n            }\n          } finally {\n            if (_didIteratorError5) {\n              throw _iteratorError5;\n            }\n          }\n        }\n      });\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this.mysprints = [];\n        _this.mysprints.push({\n          label: \"Backlog\",\n          value: 0\n        });\n        var _iteratorNormalCompletion6 = true;\n        var _didIteratorError6 = false;\n        var _iteratorError6 = undefined;\n\n        try {\n          for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n            var c = _step6.value;\n\n            _this.mysprints.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError6 = true;\n          _iteratorError6 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n              _iterator6.return();\n            }\n          } finally {\n            if (_didIteratorError6) {\n              throw _iteratorError6;\n            }\n          }\n        }\n      });\n      this.leader = 0;\n      this._user.getMyUserData().subscribe(function (data) {\n        _this.myuser = data.data[0].user_id;\n        _this.leader = data.data[0].head;\n      });\n      this._logs.getModules().subscribe(function (res) {\n        if (res.data.length > 0) {\n          _this.log.modu_id = res.data[0].modu_id;\n        }\n        _this.modules = [];\n        var _iteratorNormalCompletion7 = true;\n        var _didIteratorError7 = false;\n        var _iteratorError7 = undefined;\n\n        try {\n          for (var _iterator7 = res.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n            var c = _step7.value;\n\n            _this.modules.push({ label: c.modu_name, value: c.modu_id });\n          }\n        } catch (err) {\n          _didIteratorError7 = true;\n          _iteratorError7 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion7 && _iterator7.return) {\n              _iterator7.return();\n            }\n          } finally {\n            if (_didIteratorError7) {\n              throw _iteratorError7;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getmyProjects\",\n    value: function getmyProjects() {\n      var _this2 = this;\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this2.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion8 = true;\n          var _didIteratorError8 = false;\n          var _iteratorError8 = undefined;\n\n          try {\n            for (var _iterator8 = res.data.planning[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n              var c = _step8.value;\n\n              _this2.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError8 = true;\n            _iteratorError8 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                _iterator8.return();\n              }\n            } finally {\n              if (_didIteratorError8) {\n                throw _iteratorError8;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = res.data.buildup[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var _c3 = _step9.value;\n\n              _this2.myProjects.push({\n                label: _c3.proj_id + \" \" + _c3.proj_subject,\n                value: _c3.proj_id,\n                idcolor: _c3.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion10 = true;\n          var _didIteratorError10 = false;\n          var _iteratorError10 = undefined;\n\n          try {\n            for (var _iterator10 = res.data.implementation[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n              var _c4 = _step10.value;\n\n              _this2.myProjects.push({\n                label: _c4.proj_id + \" \" + _c4.proj_subject,\n                value: _c4.proj_id,\n                idcolor: _c4.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError10 = true;\n            _iteratorError10 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                _iterator10.return();\n              }\n            } finally {\n              if (_didIteratorError10) {\n                throw _iteratorError10;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      if (event.keyCode == 13) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.reload();\n      }\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n      this.reload();\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.reload();\n    }\n  }, {\n    key: \"goTo\",\n    value: function goTo(value) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      if (value == 0) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n      } else {\n        this.currentpage = Math.round(this.itemcount / this.limitpage);\n        var mod = this.itemcount % this.limitpage;\n        if (mod > 0 && mod < 5) {\n          this.currentpage += 1;\n        }\n      }\n      this.reload();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this3 = this;\n\n      this.isLoading = true;\n      var date_init = new Date(this.log.date_init);\n      date_init = this.log.date_init.getFullYear() + \"-\" + (this.log.date_init.getMonth() + 1) + \"-\" + this.log.date_init.getDate();\n      var date_end = new Date(this.log.date_end);\n      date_end = this.log.date_end.getFullYear() + \"-\" + (this.log.date_end.getMonth() + 1) + \"-\" + this.log.date_end.getDate();\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search,\n        date_init: date_init,\n        date_end: date_end,\n        module: this.log.modu_id,\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\"\n      };\n      this._logs.getLogs(filter).subscribe(function (res) {\n        _this3.isLoading = false;\n        _this3.logs = res.data.data;\n        _this3.itemcount = res.data.count;\n        _this3.lastpage = _this3.itemcount / _this3.limitpage;\n        if (_this3.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this3.lastpage);\n          _this3.lastpage = countpag;\n        }\n        _this3.pages = [];\n        for (var i = 1; i <= _this3.lastpage; i++) {\n          _this3.pages.push(i);\n        }\n        if (_this3.pages.length == 0) {\n          _this3.pages = [1];\n        }\n      });\n    }\n  }, {\n    key: \"loadData\",\n    value: function loadData() {\n      var _this4 = this;\n\n      if (this.products.length == 0) {\n        this.products = [];\n        this._products.getProducts().subscribe(function (data) {\n          var _iteratorNormalCompletion11 = true;\n          var _didIteratorError11 = false;\n          var _iteratorError11 = undefined;\n\n          try {\n            for (var _iterator11 = data.data[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n              var c = _step11.value;\n\n              _this4.products.push({ label: c.prod_name, value: c.prod_id });\n            }\n          } catch (err) {\n            _didIteratorError11 = true;\n            _iteratorError11 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                _iterator11.return();\n              }\n            } finally {\n              if (_didIteratorError11) {\n                throw _iteratorError11;\n              }\n            }\n          }\n        });\n      }\n      if (this.userslbl.length == 0) {\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(function (data) {\n          _this4.users = data.data;\n          var _iteratorNormalCompletion12 = true;\n          var _didIteratorError12 = false;\n          var _iteratorError12 = undefined;\n\n          try {\n            for (var _iterator12 = data.data[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n              var c = _step12.value;\n\n              _this4.userslbl.push({\n                label: c.user_lastname + \", \" + c.user_name,\n                value: c.user_id\n              });\n            }\n          } catch (err) {\n            _didIteratorError12 = true;\n            _iteratorError12 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                _iterator12.return();\n              }\n            } finally {\n              if (_didIteratorError12) {\n                throw _iteratorError12;\n              }\n            }\n          }\n        });\n      }\n    }\n  }, {\n    key: \"addComment\",\n    value: function addComment() {\n      var _this5 = this;\n\n      this.notemd.task_id = this.task.task_id;\n      this._notes.putNote(note).subscribe(function (data) {\n        _this5.notemd = { note_text: \"\" };\n      });\n    }\n  }, {\n    key: \"addTask\",\n    value: function addTask() {\n      // this.getmyProjects();\n      this.loadData();\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.task = { project: {}, attachments: [] };\n      $(\"#mdAddTask\").modal(\"show\");\n    }\n  }, {\n    key: \"showEditModal\",\n    value: function showEditModal(idtk) {\n      var _this6 = this;\n\n      // this.getmyProjects();\n      this.task = { project: {}, attachments: [] };\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._tasks.getTask(idtk.task_id).subscribe(function (res) {\n        // if (res.data.task_description) {\n        //     res.data.task_description = this.escapeHtml(res.data.task_description);\n        // }\n        _this6._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n          _this6.task.attachments = res.data;\n          _this6._tasks.getTaskFields(idtk.task_id).subscribe(function (res) {\n            _this6.task.form = res.data;\n          });\n        });\n        _this6.task = res.data;\n        $(\"#mdEditTask\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"openTask\",\n    value: function openTask(idtk) {\n      var _this7 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to open the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this7._tasks.setStatusTask(idtk, 35).subscribe(function (data) {\n              _this7.reload();\n              _this7.toastr.success(\"Task opened successfully\");\n            });\n          } else {\n            if (_this7.seltasks.length > 0) {\n              for (var x in _this7.seltasks) {\n                _this7._tasks.setStatusTask(_this7.seltasks[x], 35).subscribe(function (data) {});\n              }\n              _this7.seltasks = [];\n              _this7.reload();\n              _this7.toastr.success(\"Tasks opened successfully\");\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"closeTask\",\n    value: function closeTask(idtk) {\n      var _this8 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to close the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this8._tasks.setStatusTask(idtk, 42).subscribe(function (data) {\n              _this8.reload();\n              if (data.data == \"OK\") {\n                _this8.toastr.success(\"Task closed successfully\");\n              } else {\n                _this8.toastr.warning(data.message, \"There was an error\");\n              }\n            });\n          } else {\n            if (_this8.seltasks.length > 0) {\n              for (var x in _this8.seltasks) {\n                _this8._tasks.setStatusTask(_this8.seltasks[x], 42).subscribe(function (data) {\n                  if (data.data == \"OK\") {\n                    _this8.toastr.success(\"Tasks closed successfully\");\n                  } else {\n                    _this8.toastr.warning(data.message, \"There was an error\");\n                  }\n                });\n              }\n              _this8.seltasks = [];\n              _this8.reload();\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"deleteTask\",\n    value: function deleteTask(idtk) {\n      var _this9 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to delete the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this9._tasks.setStatusTask(idtk, 43).subscribe(function (data) {\n              _this9.reload();\n              _this9.toastr.success(\"Task deleted successfully\");\n            });\n          } else {\n            if (_this9.seltasks.length > 0) {\n              for (var x in _this9.seltasks) {\n                _this9._tasks.setStatusTask(_this9.seltasks[x], 43).subscribe(function (data) {});\n              }\n              _this9.seltasks = [];\n              _this9.toastr.success(\"Tasks deleted successfully\");\n              _this9.reload();\n            }\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"selectAll\",\n    value: function selectAll() {\n      if (this.seltasks.length > 0) {\n        this.seltasks = [];\n      } else {\n        this.seltasks = [];\n        for (var t in this.tasks) {\n          this.seltasks.push(this.tasks[t].task_id);\n        }\n      }\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      this.textState = state;\n      this.posState = \"para_status\";\n      this.currentpage = 1;\n      this.reload();\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state, name) {\n      this.namegroup = name;\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.reload();\n    }\n  }, {\n    key: \"clearTask\",\n    value: function clearTask() {\n      this.task.task_description = \"\";\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this10 = this;\n\n      if ((this.task.task_description2 != \"\" || this.task.task_description2 != null) && this.task.task_description == undefined) {\n        this.task.task_description = this.task.task_description2;\n      }\n      this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      this.task.task_delivery = new Date(this.task.task_delivery);\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      this._tasks.putTask(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this10.toastr.warning(data.message, \"Good news!\");\n        } else {\n          _this10.toastr.success(data.message, \"Task saved successfully\");\n        }\n        _this10.reload();\n        _this10.task = { attachments: [] };\n        _this10.task.task_description = \"\";\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this11 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this11.toastr.error(res.message, \"Error!\");\n            } else {\n              _this11.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this11.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n      var pos = this.task.attachments.indexOf(att.name);\n      this.task.attachments.splice(pos, 1);\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(taskid) {\n      var _this12 = this;\n\n      this._tasks.getAttachments(taskid).subscribe(function (res) {\n        _this12.mdT.attachments = res.data;\n        _this12.task.attachments = res.data;\n        for (var i = 0; i < _this12.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this12.mdT.total_attachments = 1;\n          } else {\n            _this12.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this12.task.attachments.length; i++) {\n          if (i == 0) {\n            _this12.task.total_attachments = 1;\n          } else {\n            _this12.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"updateSprint\",\n    value: function updateSprint(task) {\n      this.sprintselected = [];\n      if (task.spri_id != null) {\n        this.sprintselected.push(task.spri_id);\n      } else {\n        this.sprintselected.push(\"0\");\n      }\n      this.taskselected = [];\n      this.taskselected.push(task.task_id);\n      $(\"#mdSprints\").modal(\"show\");\n    }\n  }, {\n    key: \"doneMdSprint\",\n    value: function doneMdSprint() {\n      this.taskselected = [];\n      this.sprintselected = [];\n    }\n  }, {\n    key: \"saveChanges\",\n    value: function saveChanges() {\n      var _this13 = this;\n\n      var sprintselected = this.sprintselected[0];\n      var tasks = this.taskselected;\n      this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(function (res) {\n        if (res.data === \"OK\") {\n          _this13.toastr.success(\"updated successfully\");\n        } else {\n          _this13.toastr.warning(\"There was an error\");\n        }\n      });\n      this.reload();\n    }\n  }, {\n    key: \"showSelected\",\n    value: function showSelected(event, idtk) {\n      this.sprintselected = [];\n      this.sprintselected.push(idtk);\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          // text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"validateTask\",\n    value: function validateTask() {\n      return !this.task.task_subject || this.task.task_subject.trim() == \"\" || !this.task.task_description2 || this.task.task_description2.trim() == \"\" || !this.task.prod_id || this.task.prod_id.trim() == \"\" || !this.task.user_asigned || this.task.user_asigned.trim() == \"\" || !this.task.task_delivery || this.task.task_delivery == \"\" || this.task.task_delivery == \"undefined\" || !this.task.task_points || this.task.task_points == \"\" || this.task.task_points == \"undefined\";\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n      if (opt == 3) {\n        this.tagMenu = 3;\n      }\n    }\n  }, {\n    key: \"setPageNewTask\",\n    value: function setPageNewTask(opt) {\n      if (opt == 1) {\n        this.tagMenuNew = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuNew = 2;\n      }\n    }\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"getLogs\",\n    value: function getLogs() {\n      this.reload();\n    }\n  }, {\n    key: \"resetLog\",\n    value: function resetLog() {}\n  }, {\n    key: \"updateData\",\n    value: function updateData(modu_name) {}\n  }, {\n    key: \"validateLog\",\n    value: function validateLog() {\n      return !this.log.modu_id || !this.log.date_init || this.log.date_init == \"\" || this.log.date_init == \"undefined\" || !this.log.date_end || this.log.date_end == \"\" || this.log.date_end == \"undefined\";\n    }\n  }]);\n\n  return LogListComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _users.UsersService, _product.ProductService, _project.ProjectService, _note.NoteService, _sprint.SprintService, _externalrequest.ExternalRequestService, _log.LogService, _primeng.ConfirmationService], LogListComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 433 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.NotificationsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _task = __webpack_require__(19);\n\nvar _users = __webpack_require__(20);\n\nvar _note = __webpack_require__(24);\n\nvar _group = __webpack_require__(11);\n\nvar _sprint = __webpack_require__(26);\n\nvar _externalrequest = __webpack_require__(48);\n\nvar _header = __webpack_require__(32);\n\nvar _log = __webpack_require__(113);\n\nvar _pipes = __webpack_require__(14);\n\nvar _notificationsTemplate = __webpack_require__(879);\n\nvar _notificationsTemplate2 = _interopRequireDefault(_notificationsTemplate);\n\nvar _task2 = __webpack_require__(52);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar NotificationsComponent = exports.NotificationsComponent = (_dec = (0, _core.Component)({\n  selector: \"notifications\",\n  template: _notificationsTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n  providers: [_primeng.ConfirmationService],\n  declarations: [_task2.TaskViewComponent]\n}), _dec(_class = function () {\n  function NotificationsComponent(title, route, sanitizer, toastr, taskService, groupService, userService, productService, ProjectService, noteService, sprintService, externalRequestService, logService, headerService, confirmationService) {\n    _classCallCheck(this, NotificationsComponent);\n\n    this._title = title;\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._sprint = sprintService;\n    this._externalrequest = externalRequestService;\n    this._header = headerService;\n    this._logs = logService;\n    this.textState = \"\";\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.task = { project: {}, attachments: [] };\n    this.seltasks = [];\n    // this.task.task_description = \"\";\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.mdT = { project: {}, comments: [] };\n    this.idtk = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.namegroup = \"ALL\";\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.head = [];\n    this.mysprints = [];\n    this.tasks = [];\n    this.logs = [];\n    this.userslbl = [];\n    this.products = [];\n    this.states = [];\n    this.myProjects = [];\n    this.tagMenu = 1;\n    this.tagMenuNew = 1;\n    this.log = [];\n    this.notif = [];\n    this.notifications = [];\n    this.log.modu_label = \"\";\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Tasks ::.\");\n    this.isLoading = false;\n  }\n\n  _createClass(NotificationsComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"ngAfterViewInit\",\n    value: function ngAfterViewInit() {\n      var _this = this;\n\n      this.reload();\n      this._groups.getGroups().subscribe(function (data) {\n        _this.groups = data.data;\n      });\n      this.states = [];\n      this._tasks.getStates().subscribe(function (data) {\n        _this.states = data.data;\n      });\n      this._products.getProducts().subscribe(function (data) {\n        _this.products = [];\n        var _iteratorNormalCompletion = true;\n        var _didIteratorError = false;\n        var _iteratorError = undefined;\n\n        try {\n          for (var _iterator = data.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n            var c = _step.value;\n\n            _this.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        } catch (err) {\n          _didIteratorError = true;\n          _iteratorError = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion && _iterator.return) {\n              _iterator.return();\n            }\n          } finally {\n            if (_didIteratorError) {\n              throw _iteratorError;\n            }\n          }\n        }\n      });\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion2 = true;\n          var _didIteratorError2 = false;\n          var _iteratorError2 = undefined;\n\n          try {\n            for (var _iterator2 = res.data.planning[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n              var c = _step2.value;\n\n              _this.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError2 = true;\n            _iteratorError2 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                _iterator2.return();\n              }\n            } finally {\n              if (_didIteratorError2) {\n                throw _iteratorError2;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion3 = true;\n          var _didIteratorError3 = false;\n          var _iteratorError3 = undefined;\n\n          try {\n            for (var _iterator3 = res.data.buildup[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {\n              var _c = _step3.value;\n\n              _this.myProjects.push({\n                label: _c.proj_id + \" \" + _c.proj_subject,\n                value: _c.proj_id,\n                idcolor: _c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError3 = true;\n            _iteratorError3 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion3 && _iterator3.return) {\n                _iterator3.return();\n              }\n            } finally {\n              if (_didIteratorError3) {\n                throw _iteratorError3;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion4 = true;\n          var _didIteratorError4 = false;\n          var _iteratorError4 = undefined;\n\n          try {\n            for (var _iterator4 = res.data.implementation[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {\n              var _c2 = _step4.value;\n\n              _this.myProjects.push({\n                label: _c2.proj_id + \" \" + _c2.proj_subject,\n                value: _c2.proj_id,\n                idcolor: _c2.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError4 = true;\n            _iteratorError4 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion4 && _iterator4.return) {\n                _iterator4.return();\n              }\n            } finally {\n              if (_didIteratorError4) {\n                throw _iteratorError4;\n              }\n            }\n          }\n        }\n      });\n\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(function (data) {\n        _this.users = data.data;\n        var _iteratorNormalCompletion5 = true;\n        var _didIteratorError5 = false;\n        var _iteratorError5 = undefined;\n\n        try {\n          for (var _iterator5 = data.data[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {\n            var c = _step5.value;\n\n            _this.userslbl.push({\n              label: c.user_lastname + \", \" + c.user_name,\n              value: c.user_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError5 = true;\n          _iteratorError5 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion5 && _iterator5.return) {\n              _iterator5.return();\n            }\n          } finally {\n            if (_didIteratorError5) {\n              throw _iteratorError5;\n            }\n          }\n        }\n      });\n      this._sprint.getMySpri().subscribe(function (res) {\n        _this.mysprints = [];\n        _this.mysprints.push({\n          label: \"Backlog\",\n          value: 0\n        });\n        var _iteratorNormalCompletion6 = true;\n        var _didIteratorError6 = false;\n        var _iteratorError6 = undefined;\n\n        try {\n          for (var _iterator6 = res.data[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) {\n            var c = _step6.value;\n\n            _this.mysprints.push({\n              label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n              value: c.spri_id\n            });\n          }\n        } catch (err) {\n          _didIteratorError6 = true;\n          _iteratorError6 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion6 && _iterator6.return) {\n              _iterator6.return();\n            }\n          } finally {\n            if (_didIteratorError6) {\n              throw _iteratorError6;\n            }\n          }\n        }\n      });\n      this.leader = 0;\n      this._user.getMyUserData().subscribe(function (data) {\n        _this.myuser = data.data[0].user_id;\n        _this.leader = data.data[0].head;\n      });\n      this._logs.getModules().subscribe(function (res) {\n        if (res.data.length > 0) {\n          _this.log.modu_id = res.data[0].modu_id;\n        }\n        _this.modules = [];\n        var _iteratorNormalCompletion7 = true;\n        var _didIteratorError7 = false;\n        var _iteratorError7 = undefined;\n\n        try {\n          for (var _iterator7 = res.data[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) {\n            var c = _step7.value;\n\n            _this.modules.push({ label: c.modu_name, value: c.modu_id });\n          }\n        } catch (err) {\n          _didIteratorError7 = true;\n          _iteratorError7 = err;\n        } finally {\n          try {\n            if (!_iteratorNormalCompletion7 && _iterator7.return) {\n              _iterator7.return();\n            }\n          } finally {\n            if (_didIteratorError7) {\n              throw _iteratorError7;\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"getmyProjects\",\n    value: function getmyProjects() {\n      var _this2 = this;\n\n      this.myProjects = [];\n      this._projects.getmyProjects().subscribe(function (res) {\n        _this2.myProjects.push({\n          label: \" Untracked\",\n          value: \"0\",\n          idcolor: \"#fff\"\n        });\n        if (res.data.planning) {\n          var _iteratorNormalCompletion8 = true;\n          var _didIteratorError8 = false;\n          var _iteratorError8 = undefined;\n\n          try {\n            for (var _iterator8 = res.data.planning[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) {\n              var c = _step8.value;\n\n              _this2.myProjects.push({\n                label: c.proj_id + \" \" + c.proj_subject,\n                value: c.proj_id,\n                idcolor: c.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError8 = true;\n            _iteratorError8 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion8 && _iterator8.return) {\n                _iterator8.return();\n              }\n            } finally {\n              if (_didIteratorError8) {\n                throw _iteratorError8;\n              }\n            }\n          }\n        }\n        if (res.data.buildup) {\n          var _iteratorNormalCompletion9 = true;\n          var _didIteratorError9 = false;\n          var _iteratorError9 = undefined;\n\n          try {\n            for (var _iterator9 = res.data.buildup[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) {\n              var _c3 = _step9.value;\n\n              _this2.myProjects.push({\n                label: _c3.proj_id + \" \" + _c3.proj_subject,\n                value: _c3.proj_id,\n                idcolor: _c3.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError9 = true;\n            _iteratorError9 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion9 && _iterator9.return) {\n                _iterator9.return();\n              }\n            } finally {\n              if (_didIteratorError9) {\n                throw _iteratorError9;\n              }\n            }\n          }\n        }\n        if (res.data.implementation) {\n          var _iteratorNormalCompletion10 = true;\n          var _didIteratorError10 = false;\n          var _iteratorError10 = undefined;\n\n          try {\n            for (var _iterator10 = res.data.implementation[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) {\n              var _c4 = _step10.value;\n\n              _this2.myProjects.push({\n                label: _c4.proj_id + \" \" + _c4.proj_subject,\n                value: _c4.proj_id,\n                idcolor: _c4.idcolor\n              });\n            }\n          } catch (err) {\n            _didIteratorError10 = true;\n            _iteratorError10 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion10 && _iterator10.return) {\n                _iterator10.return();\n              }\n            } finally {\n              if (_didIteratorError10) {\n                throw _iteratorError10;\n              }\n            }\n          }\n        }\n      });\n    }\n  }, {\n    key: \"changedExtraHandler\",\n    value: function changedExtraHandler(event) {\n      if (event.keyCode == 13) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.reload();\n      }\n    }\n  }, {\n    key: \"search\",\n    value: function search() {\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.reload();\n    }\n  }, {\n    key: \"setOrder\",\n    value: function setOrder(value) {\n      if (this.posOrder === value) {\n        this.orderDesc = !this.orderDesc;\n      }\n      this.posOrder = value;\n      this.reload();\n    }\n  }, {\n    key: \"setCurPage\",\n    value: function setCurPage(value) {\n      var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n      if (cur <= 0) {\n        this.currentpage = 1;\n      } else {\n        if ((cur + 1) * this.limitpage - this.limitpage + 1 <= this.itemcount + this.limitpage) {\n          this.currentpage = cur;\n        }\n      }\n      this.reload();\n    }\n  }, {\n    key: \"goTo\",\n    value: function goTo(value) {\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      if (value == 0) {\n        this.currentpage = 1;\n        this.limitpage = 20;\n      } else {\n        this.currentpage = Math.round(this.itemcount / this.limitpage);\n        var mod = this.itemcount % this.limitpage;\n        if (mod > 0 && mod < 5) {\n          this.currentpage += 1;\n        }\n      }\n      this.reload();\n    }\n  }, {\n    key: \"reload\",\n    value: function reload() {\n      var _this3 = this;\n\n      this.isLoading = true;\n      if (this.notif.date_init && this.notif.date_init != \"\" && this.notif.date_init != \"undefined\" && this.notif.date_end && this.notif.date_end != \"\" && this.notif.date_end != \"undefined\") {\n        var date_init = new Date(this.notif.date_init);\n        date_init = this.notif.date_init.getFullYear() + \"-\" + (this.notif.date_init.getMonth() + 1) + \"-\" + this.notif.date_init.getDate();\n        var date_end = new Date(this.notif.date_end);\n        date_end = this.notif.date_end.getFullYear() + \"-\" + (this.notif.date_end.getMonth() + 1) + \"-\" + this.notif.date_end.getDate();\n        var filter = {\n          start: this.currentpage * this.limitpage - this.limitpage,\n          end: this.limitpage,\n          all: this.search,\n          date_init: date_init,\n          date_end: date_end\n        };\n      } else {\n        var filter = {\n          start: this.currentpage * this.limitpage - this.limitpage,\n          end: this.limitpage,\n          all: this.search,\n          date_init: \"\",\n          date_end: \"\"\n        };\n      }\n      this._header.getListx(filter).subscribe(function (res) {\n        _this3.isLoading = false;\n        _this3.notifications = res.data.data;\n        _this3.itemcount = res.data.count;\n        _this3.lastpage = _this3.itemcount / _this3.limitpage;\n        if (_this3.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(_this3.lastpage);\n          _this3.lastpage = countpag;\n        }\n        _this3.pages = [];\n        for (var i = 1; i <= _this3.lastpage; i++) {\n          _this3.pages.push(i);\n        }\n        if (_this3.pages.length == 0) {\n          _this3.pages = [1];\n        }\n      });\n    }\n  }, {\n    key: \"loadData\",\n    value: function loadData() {\n      var _this4 = this;\n\n      if (this.products.length == 0) {\n        this.products = [];\n        this._products.getProducts().subscribe(function (data) {\n          var _iteratorNormalCompletion11 = true;\n          var _didIteratorError11 = false;\n          var _iteratorError11 = undefined;\n\n          try {\n            for (var _iterator11 = data.data[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) {\n              var c = _step11.value;\n\n              _this4.products.push({ label: c.prod_name, value: c.prod_id });\n            }\n          } catch (err) {\n            _didIteratorError11 = true;\n            _iteratorError11 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion11 && _iterator11.return) {\n                _iterator11.return();\n              }\n            } finally {\n              if (_didIteratorError11) {\n                throw _iteratorError11;\n              }\n            }\n          }\n        });\n      }\n      if (this.userslbl.length == 0) {\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(function (data) {\n          _this4.users = data.data;\n          var _iteratorNormalCompletion12 = true;\n          var _didIteratorError12 = false;\n          var _iteratorError12 = undefined;\n\n          try {\n            for (var _iterator12 = data.data[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {\n              var c = _step12.value;\n\n              _this4.userslbl.push({\n                label: c.user_lastname + \", \" + c.user_name,\n                value: c.user_id\n              });\n            }\n          } catch (err) {\n            _didIteratorError12 = true;\n            _iteratorError12 = err;\n          } finally {\n            try {\n              if (!_iteratorNormalCompletion12 && _iterator12.return) {\n                _iterator12.return();\n              }\n            } finally {\n              if (_didIteratorError12) {\n                throw _iteratorError12;\n              }\n            }\n          }\n        });\n      }\n    }\n  }, {\n    key: \"addComment\",\n    value: function addComment() {\n      var _this5 = this;\n\n      this.notemd.task_id = this.task.task_id;\n      this._notes.putNote(note).subscribe(function (data) {\n        _this5.notemd = { note_text: \"\" };\n      });\n    }\n  }, {\n    key: \"addTask\",\n    value: function addTask() {\n      // this.getmyProjects();\n      this.loadData();\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.task = { project: {}, attachments: [] };\n      $(\"#mdAddTask\").modal(\"show\");\n    }\n  }, {\n    key: \"showEditModal\",\n    value: function showEditModal(idtk) {\n      var _this6 = this;\n\n      // this.getmyProjects();\n      this.task = { project: {}, attachments: [] };\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._tasks.getTask(idtk.task_id).subscribe(function (res) {\n        // if (res.data.task_description) {\n        //     res.data.task_description = this.escapeHtml(res.data.task_description);\n        // }\n        _this6._tasks.getAttachments(idtk.task_id).subscribe(function (res) {\n          _this6.task.attachments = res.data;\n          _this6._tasks.getTaskFields(idtk.task_id).subscribe(function (res) {\n            _this6.task.form = res.data;\n          });\n        });\n        _this6.task = res.data;\n        $(\"#mdEditTask\").modal(\"show\");\n      });\n    }\n  }, {\n    key: \"openTask\",\n    value: function openTask(idtk) {\n      var _this7 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to open the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this7._tasks.setStatusTask(idtk, 35).subscribe(function (data) {\n              _this7.reload();\n              _this7.toastr.success(\"Task opened successfully\");\n            });\n          } else {\n            if (_this7.seltasks.length > 0) {\n              for (var x in _this7.seltasks) {\n                _this7._tasks.setStatusTask(_this7.seltasks[x], 35).subscribe(function (data) {});\n              }\n              _this7.seltasks = [];\n              _this7.reload();\n              _this7.toastr.success(\"Tasks opened successfully\");\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"closeTask\",\n    value: function closeTask(idtk) {\n      var _this8 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to close the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this8._tasks.setStatusTask(idtk, 42).subscribe(function (data) {\n              _this8.reload();\n              if (data.data == \"OK\") {\n                _this8.toastr.success(\"Task closed successfully\");\n              } else {\n                _this8.toastr.warning(data.message, \"There was an error\");\n              }\n            });\n          } else {\n            if (_this8.seltasks.length > 0) {\n              for (var x in _this8.seltasks) {\n                _this8._tasks.setStatusTask(_this8.seltasks[x], 42).subscribe(function (data) {\n                  if (data.data == \"OK\") {\n                    _this8.toastr.success(\"Tasks closed successfully\");\n                  } else {\n                    _this8.toastr.warning(data.message, \"There was an error\");\n                  }\n                });\n              }\n              _this8.seltasks = [];\n              _this8.reload();\n            }\n          }\n        },\n        reject: function reject() {\n          //\n        }\n      });\n    }\n  }, {\n    key: \"deleteTask\",\n    value: function deleteTask(idtk) {\n      var _this9 = this;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        message: \"Do you want to delete the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: function accept() {\n          if (idtk) {\n            _this9._tasks.setStatusTask(idtk, 43).subscribe(function (data) {\n              _this9.reload();\n              _this9.toastr.success(\"Task deleted successfully\");\n            });\n          } else {\n            if (_this9.seltasks.length > 0) {\n              for (var x in _this9.seltasks) {\n                _this9._tasks.setStatusTask(_this9.seltasks[x], 43).subscribe(function (data) {});\n              }\n              _this9.seltasks = [];\n              _this9.toastr.success(\"Tasks deleted successfully\");\n              _this9.reload();\n            }\n          }\n        },\n        reject: function reject() {}\n      });\n    }\n  }, {\n    key: \"selectAll\",\n    value: function selectAll() {\n      if (this.seltasks.length > 0) {\n        this.seltasks = [];\n      } else {\n        this.seltasks = [];\n        for (var t in this.tasks) {\n          this.seltasks.push(this.tasks[t].task_id);\n        }\n      }\n    }\n  }, {\n    key: \"setStateList\",\n    value: function setStateList(state) {\n      this.textState = state;\n      this.posState = \"para_status\";\n      this.currentpage = 1;\n      this.reload();\n    }\n  }, {\n    key: \"setGroupList\",\n    value: function setGroupList(state, name) {\n      this.namegroup = name;\n      this.textGroup = state;\n      this.currentpage = 1;\n      this.reload();\n    }\n  }, {\n    key: \"clearTask\",\n    value: function clearTask() {\n      this.task.task_description = \"\";\n    }\n  }, {\n    key: \"saveTask\",\n    value: function saveTask() {\n      var _this10 = this;\n\n      if ((this.task.task_description2 != \"\" || this.task.task_description2 != null) && this.task.task_description == undefined) {\n        this.task.task_description = this.task.task_description2;\n      }\n      this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n      this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n      this.task.task_delivery = new Date(this.task.task_delivery);\n      this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      this._tasks.putTask(this.task).subscribe(function (data) {\n        if (data.data === \"\" || data.data === \"0\") {\n          _this10.toastr.warning(data.message, \"Good news!\");\n        } else {\n          _this10.toastr.success(data.message, \"Task saved successfully\");\n        }\n        _this10.reload();\n        _this10.task = { attachments: [] };\n        _this10.task.task_description = \"\";\n      });\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.task.attachments.push(files[0]);\n    }\n  }, {\n    key: \"deleteAttachmentTask\",\n    value: function deleteAttachmentTask(task, att) {\n      var _this11 = this;\n\n      for (var i in task.attachments) {\n        if (task.attachments[i] === att) {\n          this._tasks.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id).subscribe(function (res) {\n            if (res.data === \"\" || res.data === \"0\") {\n              _this11.toastr.error(res.message, \"Error!\");\n            } else {\n              _this11.toastr.success(res.message, \"Attachment deleted successfully\");\n              _this11.getAttachments(task.task_id);\n            }\n          });\n          task.attachments.splice(i, 1);\n          break;\n        }\n      }\n    }\n  }, {\n    key: \"deleteAttachment\",\n    value: function deleteAttachment(att) {\n      var pos = this.task.attachments.indexOf(att.name);\n      this.task.attachments.splice(pos, 1);\n    }\n  }, {\n    key: \"getAttachments\",\n    value: function getAttachments(taskid) {\n      var _this12 = this;\n\n      this._tasks.getAttachments(taskid).subscribe(function (res) {\n        _this12.mdT.attachments = res.data;\n        _this12.task.attachments = res.data;\n        for (var i = 0; i < _this12.mdT.attachments.length; i++) {\n          if (i == 0) {\n            _this12.mdT.total_attachments = 1;\n          } else {\n            _this12.mdT.total_attachments++;\n          }\n        }\n        for (var i = 0; i < _this12.task.attachments.length; i++) {\n          if (i == 0) {\n            _this12.task.total_attachments = 1;\n          } else {\n            _this12.task.total_attachments++;\n          }\n        }\n      });\n    }\n  }, {\n    key: \"updateSprint\",\n    value: function updateSprint(task) {\n      this.sprintselected = [];\n      if (task.spri_id != null) {\n        this.sprintselected.push(task.spri_id);\n      } else {\n        this.sprintselected.push(\"0\");\n      }\n      this.taskselected = [];\n      this.taskselected.push(task.task_id);\n      $(\"#mdSprints\").modal(\"show\");\n    }\n  }, {\n    key: \"doneMdSprint\",\n    value: function doneMdSprint() {\n      this.taskselected = [];\n      this.sprintselected = [];\n    }\n  }, {\n    key: \"saveChanges\",\n    value: function saveChanges() {\n      var _this13 = this;\n\n      var sprintselected = this.sprintselected[0];\n      var tasks = this.taskselected;\n      this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(function (res) {\n        if (res.data === \"OK\") {\n          _this13.toastr.success(\"updated successfully\");\n        } else {\n          _this13.toastr.warning(\"There was an error\");\n        }\n      });\n      this.reload();\n    }\n  }, {\n    key: \"showSelected\",\n    value: function showSelected(event, idtk) {\n      this.sprintselected = [];\n      this.sprintselected.push(idtk);\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      if (!text) {\n        text = \"\";\n      }\n      text += \"\";\n      text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n      var temporal = document.createElement(\"div\");\n      temporal.innerHTML = text;\n      var text = temporal.textContent || temporal.innerText || \"\";\n\n      return text;\n    }\n  }, {\n    key: \"sanitizeHtml\",\n    value: function sanitizeHtml(text) {\n      if (text) {\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (!base64test.exec(text)) {\n          // text = this.decode64(text);\n        }\n        text = this._sanitizer.bypassSecurityTrustHtml(text);\n        if (text.changingThisBreaksApplicationSecurity) {\n          text = text.changingThisBreaksApplicationSecurity;\n        }\n        return text;\n      } else {\n        return \"\";\n      }\n    }\n  }, {\n    key: \"validateTask\",\n    value: function validateTask() {\n      return !this.task.task_subject || this.task.task_subject.trim() == \"\" || !this.task.task_description2 || this.task.task_description2.trim() == \"\" || !this.task.prod_id || this.task.prod_id.trim() == \"\" || !this.task.user_asigned || this.task.user_asigned.trim() == \"\" || !this.task.task_delivery || this.task.task_delivery == \"\" || this.task.task_delivery == \"undefined\" || !this.task.task_points || this.task.task_points == \"\" || this.task.task_points == \"undefined\";\n    }\n  }, {\n    key: \"setPage\",\n    value: function setPage(opt) {\n      if (opt == 1) {\n        this.tagMenu = 1;\n      }\n      if (opt == 2) {\n        this.tagMenu = 2;\n      }\n      if (opt == 3) {\n        this.tagMenu = 3;\n      }\n    }\n  }, {\n    key: \"setPageNewTask\",\n    value: function setPageNewTask(opt) {\n      if (opt == 1) {\n        this.tagMenuNew = 1;\n      }\n      if (opt == 2) {\n        this.tagMenuNew = 2;\n      }\n    }\n  }, {\n    key: \"showModaltk\",\n    value: function showModaltk(tkid) {\n      $(\"#myTask\" + tkid).click();\n    }\n  }, {\n    key: \"getNotifications\",\n    value: function getNotifications() {\n      this.reload();\n    }\n  }, {\n    key: \"validateNotificatios\",\n    value: function validateNotificatios() {\n      // return (\n      //   !this.notif.date_init ||\n      //   this.notif.date_init == \"\" ||\n      //   this.notif.date_init == \"undefined\" ||\n      //   !this.notif.date_end ||\n      //   this.notif.date_end == \"\" ||\n      //   this.notif.date_end == \"undefined\"\n      // );\n      return false;\n    }\n  }]);\n\n  return NotificationsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _task.TaskService, _group.GroupService, _users.UsersService, _product.ProductService, _project.ProjectService, _note.NoteService, _sprint.SprintService, _externalrequest.ExternalRequestService, _log.LogService, _header.HeaderService, _primeng.ConfirmationService], NotificationsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 434 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DocumentsComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _cloud = __webpack_require__(114);\n\nvar _pipes = __webpack_require__(14);\n\nvar _documentsTemplate = __webpack_require__(880);\n\nvar _documentsTemplate2 = _interopRequireDefault(_documentsTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DocumentsComponent = exports.DocumentsComponent = (_dec = (0, _core.Component)({\n  selector: \"documents\",\n  template: _documentsTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe],\n  styles: [\".container-photo { position: relative; margin-top: 50px; width: 500px; height: 300px; }, .myimg { position: absolute; height: 120px; width: 120px; left: 0; }, .labelbutton { border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer; position: absolute; width: 500px; left:0; top: 180px; text-align: center; opacity: 0; transition: opacity .35s ease; }\", \".labelbutton a { width: 200px; padding: 12px 48px; text-align: center; color: white; border: solid 2px white; z-index: 1; }, .container-photo:hover .labelbutton { opacity: 1; } \"]\n}), _dec(_class = function () {\n  function DocumentsComponent(route, toastr, cloudService) {\n    _classCallCheck(this, DocumentsComponent);\n\n    this._route = route;\n    this.toastr = toastr;\n    this._cloud = cloudService;\n    this.typedocuments = [];\n    this.listgroups = [];\n    this.id_tipo = 0;\n    this.editdocument = {};\n    this.attachments = [];\n    this.selecteduser = [];\n    this.documents = [];\n    this.isLoading = false;\n    this.recurso = true;\n    this.required = false;\n    this.requiredTitle = false;\n    this.document = {};\n    this.flag = false;\n    this.resourcetype = [{ value: '76', label: 'URL' }, { value: '75', label: 'FILE' }];\n\n    this.documentsType();\n    this.getDocuments(77);\n    this.getGroups();\n  }\n\n  _createClass(DocumentsComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"documentsType\",\n    value: function documentsType() {\n      var _this = this;\n\n      this._cloud.documentsType().subscribe(function (res) {\n        _this.typedocuments = res;\n      });\n    }\n  }, {\n    key: \"getDocuments\",\n    value: function getDocuments(id) {\n      var _this2 = this;\n\n      this.document.value = id;\n      // this.isLoading = true;\n      this._cloud.getDocuments(id).subscribe(function (res) {\n        // this.isLoading = false;\n        _this2.documents = res;\n      });\n    }\n  }, {\n    key: \"getGroups\",\n    value: function getGroups() {\n      var _this3 = this;\n\n      this._cloud.getGroups().subscribe(function (res) {\n        _this3.listgroups = res;\n      });\n    }\n  }, {\n    key: \"addDocument\",\n    value: function addDocument() {\n      this.editdocument.shared = [];\n      this.editdocument.title = \"\";\n      this.editdocument.id_type = '76';\n      this.editdocument.clou_nameUrl = \"\";\n      this.editdocument.clou_nameFile = \"\";\n      this.editdocument.clou_name = '';\n      this.editdocument.id_class = this.document.value;\n\n      $('#mdEditdocument').modal('show');\n    }\n  }, {\n    key: \"editDocument\",\n    value: function editDocument(document) {\n      var _this4 = this;\n\n      this.editdocument = {};\n\n      this._cloud.getDocument(document.id_cloud).subscribe(function (res) {\n        _this4.editdocument = res.data;\n        _this4.editdocument.clou_name = '';\n      });\n      $('#mdEditdocument').modal('show');\n    }\n  }, {\n    key: \"confirmDocument\",\n    value: function confirmDocument(document) {\n      this.deletedocument = document;\n      $('#mdDelete').modal('show');\n    }\n  }, {\n    key: \"deleteDocument\",\n    value: function deleteDocument(document) {\n      var _this5 = this;\n\n      this.id_cloud = document.id_cloud;\n\n      this._cloud.deleteDocument(this.id_cloud, document.user_id).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this5.toastr.success(\"Changes Applied\");\n          _this5.getDocuments(_this5.document.value);\n        } else if (res.data == \"Error\") {\n          _this5.toastr.warning(res.message);\n        } else {\n          _this5.toastr.error(res.message);\n        }\n      });\n    }\n  }, {\n    key: \"saveDocuments\",\n    value: function saveDocuments() {\n      var _this6 = this;\n\n      this.editdocument.title = this.editdocument.title.trim();\n      this.editdocument.clou_nameUrl = this.editdocument.clou_nameUrl.trim();\n      this.editdocument.clou_public = 1;\n      //Validations of mandatory fields in the different scenarios when it is url or a file.\n\n      if (this.editdocument.title.trim() == '') {\n        this.requiredTitle = true;\n      } else {\n        this.requiredTitle = false;\n      }\n      if (this.editdocument.id_type == \"76\" && this.editdocument.clou_nameUrl.trim() != '') {\n        this.required = false;\n      } else if (this.editdocument.id_type == \"76\" && this.editdocument.clou_nameUrl.trim() == \"\") {\n        this.required = true;\n      } else {\n        if (this.editdocument.id_type == \"75\" && this.editdocument.clou_nameFile != '') {\n          this.required = false;\n        } else if (this.editdocument.id_type == \"75\" && this.editdocument.clou_name == '') {\n          this.required = true;\n        } else if (this.editdocument.id_type == \"75\" && this.editdocument.clou_nameUrl != '' && this.editdocument.clou_name == '' && this.editdocument.clou_nameFile == '') {\n          this.required = true;\n        } else {\n          this.required = false;\n        }\n      } // End validations\n\n      if (this.required === false && this.requiredTitle === false) {\n        if (this.editdocument.id_cloud) {\n          this._cloud.editDocument(this.editdocument).subscribe(function (res) {\n            if (res.message == \"OK\") {\n              _this6.toastr.success(\"Changes Applied\");\n              _this6.getDocuments(_this6.editdocument.id_class);\n            } else if (res.data == \"Error\") {\n              _this6.toastr.warning(res.message);\n            } else {\n              _this6.toastr.error(res.message);\n            }\n            $('#mdEditdocument').modal('hide');\n          });\n        } else {\n          this._cloud.insertDocument(this.editdocument).subscribe(function (res) {\n            if (res.message == \"OK\") {\n              _this6.toastr.success(\"Changes Applied\");\n              _this6.getDocuments(_this6.editdocument.id_class);\n            } else {\n              _this6.toastr.warning(res.message);\n            }\n            $('#mdEditdocument').modal('hide');\n          });\n        }\n      }\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.editdocument.clou_name = files[0];\n    }\n  }, {\n    key: \"downloadDocument\",\n    value: function downloadDocument(id) {\n      this._cloud.downloadDocument(id).subscribe(function (res) {\n        var route = res.data;\n        //Usaremos un link para iniciar la descarga \n        var save = document.createElement('a');\n        save.href = route;\n        save.target = '_blank'; //para abrir el elemento en otra pagina y no se ejecute en la misma.//\n        //Truco: así le damos el nombre al archivo\n        save.download = \"document\" || 'archivo.dat';\n        var clicEvent = new MouseEvent('click', {\n          'view': window,\n          'bubbles': true,\n          'cancelable': true\n        });\n        //Simulamos un clic del usuario\n        save.dispatchEvent(clicEvent);\n        //Y liberamos recursos...\n        (window.URL || window.webkitURL).revokeObjectURL(save.href);\n        // window.open(recurso, \"archivo\", \"width=100 vh, height=100 vh\")\n      });\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      return text ? text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\") : \"\";\n    }\n  }]);\n\n  return DocumentsComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.Router, _ngxToastr.ToastrService, _cloud.CloudService], DocumentsComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 435 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.CloudComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _cloud = __webpack_require__(114);\n\nvar _pipes = __webpack_require__(14);\n\nvar _cloudTemplate = __webpack_require__(881);\n\nvar _cloudTemplate2 = _interopRequireDefault(_cloudTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CloudComponent = exports.CloudComponent = (_dec = (0, _core.Component)({\n  selector: \"cloud\",\n  template: _cloudTemplate2.default,\n  pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe],\n  styles: [\".container-photo { position: relative; margin-top: 50px; width: 500px; height: 300px; }, .myimg { position: absolute; height: 120px; width: 120px; left: 0; }, .labelbutton { border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer; position: absolute; width: 500px; left:0; top: 180px; text-align: center; opacity: 0; transition: opacity .35s ease; }\", \".labelbutton a { width: 200px; padding: 12px 48px; text-align: center; color: white; border: solid 2px white; z-index: 1; }, .container-photo:hover .labelbutton { opacity: 1; } \"]\n}), _dec(_class = function () {\n  function CloudComponent(route, toastr, cloudService) {\n    _classCallCheck(this, CloudComponent);\n\n    this._route = route;\n    this.toastr = toastr;\n    this._cloud = cloudService;\n    this.typedocuments = [];\n    this.listusers = [];\n    this.id_tipo = 0;\n    this.editdocument = {};\n    this.attachments = [];\n    this.selecteduser = [];\n    this.documents = [];\n    this.isLoading = false;\n    this.recurso = true;\n    this.required = false;\n    this.requiredTitle = false;\n    this.document = {};\n    this.flag = false;\n    this.resourcetype = [{ value: '76', label: 'URL' }, { value: '75', label: 'FILE' }];\n\n    this.documentsType();\n    this.listCloud(77);\n    this.getUsers();\n  }\n\n  _createClass(CloudComponent, [{\n    key: \"ngOnInit\",\n    value: function ngOnInit() {}\n  }, {\n    key: \"documentsType\",\n    value: function documentsType() {\n      var _this = this;\n\n      this._cloud.documentsType().subscribe(function (res) {\n        _this.typedocuments = res;\n      });\n    }\n  }, {\n    key: \"listCloud\",\n    value: function listCloud(id) {\n      var _this2 = this;\n\n      this.document.value = id;\n      // this.isLoading = true;\n      this._cloud.listCloud(id).subscribe(function (res) {\n        // this.isLoading = false;\n        _this2.documents = res;\n      });\n    }\n  }, {\n    key: \"getUsers\",\n    value: function getUsers() {\n      var _this3 = this;\n\n      this._cloud.getUsers().subscribe(function (res) {\n        _this3.listusers = res;\n      });\n    }\n  }, {\n    key: \"addDocument\",\n    value: function addDocument() {\n      this.editdocument.shared = [];\n      this.editdocument.title = \"\";\n      this.editdocument.id_type = '76';\n      this.editdocument.clou_nameUrl = \"\";\n      this.editdocument.clou_nameFile = \"\";\n      this.editdocument.clou_name = '';\n      this.editdocument.id_class = this.document.value;\n\n      $('#mdEditdocument').modal('show');\n    }\n  }, {\n    key: \"editDocument\",\n    value: function editDocument(document) {\n      var _this4 = this;\n\n      this.editdocument = {};\n\n      this._cloud.getCloud(document.id_cloud).subscribe(function (res) {\n        _this4.editdocument = res;\n        _this4.editdocument.clou_name = '';\n      });\n      $('#mdEditdocument').modal('show');\n    }\n  }, {\n    key: \"confirmDocument\",\n    value: function confirmDocument(document) {\n      this.deletedocument = document;\n      $('#mdDelete').modal('show');\n    }\n  }, {\n    key: \"deleteDocument\",\n    value: function deleteDocument(document) {\n      var _this5 = this;\n\n      this.id_cloud = document.id_cloud;\n\n      this._cloud.deleteDocument(this.id_cloud, document.user_id).subscribe(function (res) {\n        if (res.data == \"OK\") {\n          _this5.toastr.success(\"Changes Applied\");\n          _this5.listCloud(_this5.document.value);\n        } else if (res.data == \"Error\") {\n          _this5.toastr.warning(res.message);\n        } else {\n          _this5.toastr.error(res.message);\n        }\n      });\n    }\n  }, {\n    key: \"saveDocuments\",\n    value: function saveDocuments() {\n      var _this6 = this;\n\n      this.editdocument.title = this.editdocument.title.trim();\n      this.editdocument.clou_nameUrl = this.editdocument.clou_nameUrl.trim();\n      this.editdocument.clou_public = 0;\n      //Validations of mandatory fields in the different scenarios when it is url or a file.\n\n      if (this.editdocument.title.trim() == '') {\n        this.requiredTitle = true;\n      } else {\n        this.requiredTitle = false;\n      }\n      if (this.editdocument.id_type == \"76\" && this.editdocument.clou_nameUrl.trim() != '') {\n        this.required = false;\n      } else if (this.editdocument.id_type == \"76\" && this.editdocument.clou_nameUrl.trim() == \"\") {\n        this.required = true;\n      } else {\n        if (this.editdocument.id_type == \"75\" && this.editdocument.clou_nameFile != '') {\n          this.required = false;\n        } else if (this.editdocument.id_type == \"75\" && this.editdocument.clou_name == '') {\n          this.required = true;\n        } else if (this.editdocument.id_type == \"75\" && this.editdocument.clou_nameUrl != '' && this.editdocument.clou_name == '' && this.editdocument.clou_nameFile == '') {\n          this.required = true;\n        } else {\n          this.required = false;\n        }\n      } // End validations\n\n      if (this.required === false && this.requiredTitle === false) {\n        if (this.editdocument.id_cloud) {\n          this._cloud.editCloud(this.editdocument).subscribe(function (res) {\n            if (res.message == \"OK\") {\n              _this6.toastr.success(\"Changes Applied\");\n              _this6.listCloud(_this6.editdocument.id_class);\n            } else if (res.data == \"Error\") {\n              _this6.toastr.warning(res.message);\n            } else {\n              _this6.toastr.error(res.message);\n            }\n            $('#mdEditdocument').modal('hide');\n          });\n        } else {\n          this._cloud.insertCloud(this.editdocument).subscribe(function (res) {\n            if (res.message == \"OK\") {\n              _this6.toastr.success(\"Changes Applied\");\n              _this6.listCloud(_this6.editdocument.id_class);\n            } else {\n              _this6.toastr.warning(res.message);\n            }\n            $('#mdEditdocument').modal('hide');\n          });\n        }\n      }\n    }\n  }, {\n    key: \"onChange\",\n    value: function onChange(event) {\n      var files = event.srcElement.files;\n      this.editdocument.clou_name = files[0];\n    }\n  }, {\n    key: \"downloadDocument\",\n    value: function downloadDocument(id) {\n      this._cloud.downloadDocument(id).subscribe(function (res) {\n        var route = res.data;\n        //Usaremos un link para iniciar la descarga \n        var save = document.createElement('a');\n        save.href = route;\n        save.target = '_blank'; //para abrir el elemento en otra pagina y no se ejecute en la misma.//\n        //Truco: así le damos el nombre al archivo\n        save.download = \"document\" || 'archivo.dat';\n        var clicEvent = new MouseEvent('click', {\n          'view': window,\n          'bubbles': true,\n          'cancelable': true\n        });\n        //Simulamos un clic del usuario\n        save.dispatchEvent(clicEvent);\n        //Y liberamos recursos...\n        (window.URL || window.webkitURL).revokeObjectURL(save.href);\n        // window.open(recurso, \"archivo\", \"width=100 vh, height=100 vh\")\n      });\n    }\n  }, {\n    key: \"escapeHtml\",\n    value: function escapeHtml(text) {\n      return text ? text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\") : \"\";\n    }\n  }]);\n\n  return CloudComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_router.Router, _ngxToastr.ToastrService, _cloud.CloudService], CloudComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 436 */,\n/* 437 */,\n/* 438 */,\n/* 439 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _core = __webpack_require__(0);\n\nvar _platformBrowserDynamic = __webpack_require__(126);\n\n__webpack_require__(442);\n\nvar _main = __webpack_require__(443);\n\n(0, _core.enableProdMode)();\n(0, _platformBrowserDynamic.platformBrowserDynamic)().bootstrapModule(_main.MainModule);\nif (Notification.permission !== \"granted\") {\n    Notification.requestPermission();\n}\n\n/***/ }),\n/* 440 */,\n/* 441 */,\n/* 442 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nvar crypt = function crypt() {\n\n\tthis.encryp = function (text, pubkey) {\n\t\tif (text != '') {\n\t\t\tvar encrypt = new JSEncrypt();\n\t\t\tencrypt.setPublicKey(pubkey);\n\t\t\tvar encripcion = encrypt.encrypt(text);\n\t\t\treturn encripcion;\n\t\t}\n\t\treturn false;\n\t};\n\tthis.decryp = function (text) {\n\t\tif (text != '') {\n\t\t\tvar decrypt = new JSEncrypt();\n\t\t\tdecrypt.setPrivateKey($(\"#pribkey\").html());\n\t\t\tvar uncrypted = decrypt.decrypt(text);\n\t\t\treturn uncrypted;\n\t\t}\n\t\treturn false;\n\t};\n};\nvar crypt = new crypt();\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 443 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.MainModule = undefined;\n\nvar _dec, _class;\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _forms = __webpack_require__(17);\n\nvar _http = __webpack_require__(90);\n\nvar _router = __webpack_require__(5);\n\nvar _core = __webpack_require__(0);\n\nvar _common = __webpack_require__(3);\n\nvar _animations = __webpack_require__(447);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _angular4DragDrop = __webpack_require__(720);\n\nvar _ng4IntlPhone = __webpack_require__(721);\n\nvar _primeng = __webpack_require__(10);\n\nvar _inputmask = __webpack_require__(791);\n\nvar _dragdrop = __webpack_require__(792);\n\nvar _spinner = __webpack_require__(793);\n\nvar _tooltip = __webpack_require__(794);\n\nvar _chips = __webpack_require__(795);\n\nvar _keyfilter = __webpack_require__(796);\n\nvar _password = __webpack_require__(797);\n\nvar _ng2Dnd = __webpack_require__(243);\n\nvar _ngRecaptcha = __webpack_require__(798);\n\nvar _http2 = __webpack_require__(16);\n\nvar _login = __webpack_require__(43);\n\nvar _header = __webpack_require__(32);\n\nvar _dashboard = __webpack_require__(44);\n\nvar _task = __webpack_require__(19);\n\nvar _note = __webpack_require__(24);\n\nvar _notification = __webpack_require__(246);\n\nvar _daily = __webpack_require__(45);\n\nvar _directory = __webpack_require__(31);\n\nvar _project = __webpack_require__(18);\n\nvar _product = __webpack_require__(22);\n\nvar _type = __webpack_require__(41);\n\nvar _request = __webpack_require__(81);\n\nvar _scheduler = __webpack_require__(82);\n\nvar _group = __webpack_require__(11);\n\nvar _mail = __webpack_require__(36);\n\nvar _roles = __webpack_require__(46);\n\nvar _todolist = __webpack_require__(111);\n\nvar _users = __webpack_require__(20);\n\nvar _events = __webpack_require__(50);\n\nvar _sprint = __webpack_require__(26);\n\nvar _parameter = __webpack_require__(112);\n\nvar _categories = __webpack_require__(47);\n\nvar _constant = __webpack_require__(247);\n\nvar _app = __webpack_require__(248);\n\nvar _whiteboard = __webpack_require__(249);\n\nvar _externalrequest = __webpack_require__(48);\n\nvar _log = __webpack_require__(113);\n\nvar _units = __webpack_require__(51);\n\nvar _cloud = __webpack_require__(114);\n\nvar _components = __webpack_require__(802);\n\nvar _pipes = __webpack_require__(14);\n\nvar _routes = __webpack_require__(882);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction getBaseLocation() {\n  return window.location.pathname.startsWith('/beta') ? '/beta' : '/';\n}\n\nvar MainModule = exports.MainModule = (_dec = (0, _core.NgModule)({\n  bootstrap: [_components.AppComponent],\n  declarations: [_components.AppComponent, _components.LoginComponent, _components.HeaderComponent, _components.DashboardComponent, _components.TaskboardComponent, _components.TaskComponent, _components.TaskListComponent, _components.TaskViewComponent, _components.ProjectListComponent, _components.ProjectViewComponent, _components.ProjectComponent, _components.MailboxComponent, _components.DirectoryComponent, _components.DailyComponent, _components.ContactComponent, _components.SprintsComponent, _components.SprintComponent, _components.SchedulerComponent, _components.SchedulerListComponent, _components.EventsListComponent, _components.EventsComponent, _components.RolesComponent, _components.RolComponent, _components.TodolistComponent, _components.UsersComponent, _components.UsersHistoryComponent, _components.ParameterListComponent, _components.ParametersComponent, _components.CategoriesComponent, _components.UnitsComponent, _components.ApprovalsComponent, _components.ProductComponent, _components.ProductListComponent, _components.TypeListComponent, _components.CodeComponent, _components.WikiComponent, _components.RequestsComponent, _components.NotfoundComponent, _components.NotpermitsComponent, _components.ProjectboardComponent, _components.StaticComponent, _components.BurndownComponent, _components.PasswordRecoveryComponent, _components.UserSettingsComponent, _components.RequestsSettingsComponent, _components.ClientSettingsComponent, _components.DailyBoardComponent, _components.ReportsComponent, _components.GroupListComponent, _components.MySprintComponent, _components.WhiteboardComponent, _components.ExternalRequestsComponent, _components.ExternalTaskListComponent, _components.LogListComponent, _components.NotificationsComponent, _components.DocumentsComponent, _components.CloudComponent, _pipes.TrimPipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.CalculatePipe, _pipes.FilterDataPipe, _pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.OrderPipe, _components.GuideburndownComponent, _components.GuideprojectboardComponent, _components.UserguideloginComponent, _pipes.SafeHtmlPipe],\n  imports: [_platformBrowser.BrowserModule, _ngRecaptcha.RecaptchaModule, _forms.FormsModule, _http.HttpModule,\n  //RouterModule.forRoot(routes, {enableTracing: true}),\n  _router.RouterModule.forRoot(_routes.routes), _common.CommonModule, _animations.BrowserAnimationsModule, _ngxToastr.ToastrModule.forRoot(), _angular4DragDrop.DragDropDirectiveModule, _primeng.CalendarModule, _primeng.DropdownModule, _primeng.CheckboxModule, _primeng.ProgressBarModule, _primeng.ScheduleModule, _primeng.PaginatorModule, _primeng.AutoCompleteModule, _primeng.ConfirmDialogModule, _primeng.RadioButtonModule, _primeng.TreeModule, _primeng.MultiSelectModule, _primeng.EditorModule, _primeng.ChartModule, _primeng.ListboxModule, _primeng.FileUploadModule, _inputmask.InputMaskModule, _ng2Dnd.DndModule.forRoot(), _ng4IntlPhone.InternationalPhoneModule, _password.PasswordModule, _dragdrop.DragDropModule, _spinner.SpinnerModule, _tooltip.TooltipModule, _chips.ChipsModule, _keyfilter.KeyFilterModule],\n  providers: [_http2.HttpService, _login.LoginService, _header.HeaderService, _dashboard.DashboardService, _task.TaskService, _request.RequestService, _note.NoteService, _notification.NotificationService, _daily.DailyService, _directory.DirectoryService, _project.ProjectService, _product.ProductService, _type.TypeService, _scheduler.SchedulerService, _group.GroupService, _mail.MailService, _events.EventsService, _roles.RolesService, _todolist.TodolistService, _users.UsersService, _sprint.SprintService, _primeng.ConfirmationService, _parameter.ParameterService, _categories.CategoriesService, _constant.ConstantService, _app.AppService, _whiteboard.WhiteboardService, _externalrequest.ExternalRequestService, _log.LogService, _units.UnitsService, _cloud.CloudService, { provide: _common.APP_BASE_HREF,\n    useFactory: getBaseLocation }, { provide: 'AUTHOR' }]\n}), _dec(_class = function MainModule() {\n  _classCallCheck(this, MainModule);\n}) || _class);\n\n/***/ }),\n/* 444 */,\n/* 445 */,\n/* 446 */,\n/* 447 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"BrowserAnimationsModule\", function() { return BrowserAnimationsModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"NoopAnimationsModule\", function() { return NoopAnimationsModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵBrowserAnimationBuilder\", function() { return BrowserAnimationBuilder; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵBrowserAnimationFactory\", function() { return BrowserAnimationFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵAnimationRenderer\", function() { return AnimationRenderer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵAnimationRendererFactory\", function() { return AnimationRendererFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵa\", function() { return BaseAnimationRenderer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵf\", function() { return BROWSER_ANIMATIONS_PROVIDERS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵg\", function() { return BROWSER_NOOP_ANIMATIONS_PROVIDERS; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵb\", function() { return InjectableAnimationEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵd\", function() { return instantiateDefaultStyleNormalizer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵe\", function() { return instantiateRendererFactory; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵc\", function() { return instantiateSupportedAnimationDriver; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__ = __webpack_require__(6);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_tslib__ = __webpack_require__(33);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__angular_animations__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__ = __webpack_require__(448);\n/**\n * @license Angular v5.2.11\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n\n\n\n\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar BrowserAnimationBuilder = /** @class */ (function (_super) {\n    Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"b\" /* __extends */])(BrowserAnimationBuilder, _super);\n    function BrowserAnimationBuilder(rootRenderer, doc) {\n        var _this = _super.call(this) || this;\n        _this._nextAnimationId = 0;\n        var /** @type {?} */ typeData = /** @type {?} */ ({\n            id: '0',\n            encapsulation: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewEncapsulation\"].None,\n            styles: [],\n            data: { animation: [] }\n        });\n        _this._renderer = /** @type {?} */ (rootRenderer.createRenderer(doc.body, typeData));\n        return _this;\n    }\n    /**\n     * @param {?} animation\n     * @return {?}\n     */\n    BrowserAnimationBuilder.prototype.build = /**\n     * @param {?} animation\n     * @return {?}\n     */\n    function (animation) {\n        var /** @type {?} */ id = this._nextAnimationId.toString();\n        this._nextAnimationId++;\n        var /** @type {?} */ entry = Array.isArray(animation) ? Object(__WEBPACK_IMPORTED_MODULE_3__angular_animations__[\"sequence\"])(animation) : animation;\n        issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n        return new BrowserAnimationFactory(id, this._renderer);\n    };\n    BrowserAnimationBuilder.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\n    ];\n    /** @nocollapse */\n    BrowserAnimationBuilder.ctorParameters = function () { return [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"RendererFactory2\"], },\n        { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"DOCUMENT\"],] },] },\n    ]; };\n    return BrowserAnimationBuilder;\n}(__WEBPACK_IMPORTED_MODULE_3__angular_animations__[\"AnimationBuilder\"]));\nvar BrowserAnimationFactory = /** @class */ (function (_super) {\n    Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"b\" /* __extends */])(BrowserAnimationFactory, _super);\n    function BrowserAnimationFactory(_id, _renderer) {\n        var _this = _super.call(this) || this;\n        _this._id = _id;\n        _this._renderer = _renderer;\n        return _this;\n    }\n    /**\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    BrowserAnimationFactory.prototype.create = /**\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    function (element, options) {\n        return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n    };\n    return BrowserAnimationFactory;\n}(__WEBPACK_IMPORTED_MODULE_3__angular_animations__[\"AnimationFactory\"]));\nvar RendererAnimationPlayer = /** @class */ (function () {\n    function RendererAnimationPlayer(id, element, options, _renderer) {\n        this.id = id;\n        this.element = element;\n        this._renderer = _renderer;\n        this.parentPlayer = null;\n        this._started = false;\n        this.totalTime = 0;\n        this._command('create', options);\n    }\n    /**\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype._listen = /**\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    function (eventName, callback) {\n        return this._renderer.listen(this.element, \"@@\" + this.id + \":\" + eventName, callback);\n    };\n    /**\n     * @param {?} command\n     * @param {...?} args\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype._command = /**\n     * @param {?} command\n     * @param {...?} args\n     * @return {?}\n     */\n    function (command) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        return issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onDone = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._listen('done', fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onStart = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._listen('start', fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onDestroy = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._listen('destroy', fn); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.init = /**\n     * @return {?}\n     */\n    function () { this._command('init'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.hasStarted = /**\n     * @return {?}\n     */\n    function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.play = /**\n     * @return {?}\n     */\n    function () {\n        this._command('play');\n        this._started = true;\n    };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.pause = /**\n     * @return {?}\n     */\n    function () { this._command('pause'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.restart = /**\n     * @return {?}\n     */\n    function () { this._command('restart'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.finish = /**\n     * @return {?}\n     */\n    function () { this._command('finish'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.destroy = /**\n     * @return {?}\n     */\n    function () { this._command('destroy'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.reset = /**\n     * @return {?}\n     */\n    function () { this._command('reset'); };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.setPosition = /**\n     * @param {?} p\n     * @return {?}\n     */\n    function (p) { this._command('setPosition', p); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.getPosition = /**\n     * @return {?}\n     */\n    function () { return 0; };\n    return RendererAnimationPlayer;\n}());\n/**\n * @param {?} renderer\n * @param {?} element\n * @param {?} id\n * @param {?} command\n * @param {?} args\n * @return {?}\n */\nfunction issueAnimationCommand(renderer, element, id, command, args) {\n    return renderer.setProperty(element, \"@@\" + id + \":\" + command, args);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ANIMATION_PREFIX = '@';\nvar DISABLE_ANIMATIONS_FLAG = '@.disabled';\nvar AnimationRendererFactory = /** @class */ (function () {\n    function AnimationRendererFactory(delegate, engine, _zone) {\n        this.delegate = delegate;\n        this.engine = engine;\n        this._zone = _zone;\n        this._currentId = 0;\n        this._microtaskId = 1;\n        this._animationCallbacksBuffer = [];\n        this._rendererCache = new Map();\n        this._cdRecurDepth = 0;\n        this.promise = Promise.resolve(0);\n        engine.onRemovalComplete = function (element, delegate) {\n            // Note: if an component element has a leave animation, and the component\n            // a host leave animation, the view engine will call `removeChild` for the parent\n            // component renderer as well as for the child component renderer.\n            // Therefore, we need to check if we already removed the element.\n            if (delegate && delegate.parentNode(element)) {\n                delegate.removeChild(element.parentNode, element);\n            }\n        };\n    }\n    /**\n     * @param {?} hostElement\n     * @param {?} type\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.createRenderer = /**\n     * @param {?} hostElement\n     * @param {?} type\n     * @return {?}\n     */\n    function (hostElement, type) {\n        var _this = this;\n        var /** @type {?} */ EMPTY_NAMESPACE_ID = '';\n        // cache the delegates to find out which cached delegate can\n        // be used by which cached renderer\n        var /** @type {?} */ delegate = this.delegate.createRenderer(hostElement, type);\n        if (!hostElement || !type || !type.data || !type.data['animation']) {\n            var /** @type {?} */ renderer = this._rendererCache.get(delegate);\n            if (!renderer) {\n                renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine);\n                // only cache this result when the base renderer is used\n                this._rendererCache.set(delegate, renderer);\n            }\n            return renderer;\n        }\n        var /** @type {?} */ componentId = type.id;\n        var /** @type {?} */ namespaceId = type.id + '-' + this._currentId;\n        this._currentId++;\n        this.engine.register(namespaceId, hostElement);\n        var /** @type {?} */ animationTriggers = /** @type {?} */ (type.data['animation']);\n        animationTriggers.forEach(function (trigger) {\n            return _this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);\n        });\n        return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.begin = /**\n     * @return {?}\n     */\n    function () {\n        this._cdRecurDepth++;\n        if (this.delegate.begin) {\n            this.delegate.begin();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype._scheduleCountTask = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        // always use promise to schedule microtask instead of use Zone\n        this.promise.then(function () { _this._microtaskId++; });\n    };\n    /* @internal */\n    /**\n     * @param {?} count\n     * @param {?} fn\n     * @param {?} data\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.scheduleListenerCallback = /**\n     * @param {?} count\n     * @param {?} fn\n     * @param {?} data\n     * @return {?}\n     */\n    function (count, fn, data) {\n        var _this = this;\n        if (count >= 0 && count < this._microtaskId) {\n            this._zone.run(function () { return fn(data); });\n            return;\n        }\n        if (this._animationCallbacksBuffer.length == 0) {\n            Promise.resolve(null).then(function () {\n                _this._zone.run(function () {\n                    _this._animationCallbacksBuffer.forEach(function (tuple) {\n                        var fn = tuple[0], data = tuple[1];\n                        fn(data);\n                    });\n                    _this._animationCallbacksBuffer = [];\n                });\n            });\n        }\n        this._animationCallbacksBuffer.push([fn, data]);\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.end = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        this._cdRecurDepth--;\n        // this is to prevent animations from running twice when an inner\n        // component does CD when a parent component insted has inserted it\n        if (this._cdRecurDepth == 0) {\n            this._zone.runOutsideAngular(function () {\n                _this._scheduleCountTask();\n                _this.engine.flush(_this._microtaskId);\n            });\n        }\n        if (this.delegate.end) {\n            this.delegate.end();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.whenRenderingDone = /**\n     * @return {?}\n     */\n    function () { return this.engine.whenRenderingDone(); };\n    AnimationRendererFactory.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\n    ];\n    /** @nocollapse */\n    AnimationRendererFactory.ctorParameters = function () { return [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"RendererFactory2\"], },\n        { type: __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"b\" /* ɵAnimationEngine */], },\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgZone\"], },\n    ]; };\n    return AnimationRendererFactory;\n}());\nvar BaseAnimationRenderer = /** @class */ (function () {\n    function BaseAnimationRenderer(namespaceId, delegate, engine) {\n        this.namespaceId = namespaceId;\n        this.delegate = delegate;\n        this.engine = engine;\n        this.destroyNode = this.delegate.destroyNode ? function (n) { return ((delegate.destroyNode))(n); } : null;\n    }\n    Object.defineProperty(BaseAnimationRenderer.prototype, \"data\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this.delegate.data; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.destroy = /**\n     * @return {?}\n     */\n    function () {\n        this.engine.destroy(this.namespaceId, this.delegate);\n        this.delegate.destroy();\n    };\n    /**\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createElement = /**\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    function (name, namespace) {\n        return this.delegate.createElement(name, namespace);\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createComment = /**\n     * @param {?} value\n     * @return {?}\n     */\n    function (value) { return this.delegate.createComment(value); };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createText = /**\n     * @param {?} value\n     * @return {?}\n     */\n    function (value) { return this.delegate.createText(value); };\n    /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.appendChild = /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @return {?}\n     */\n    function (parent, newChild) {\n        this.delegate.appendChild(parent, newChild);\n        this.engine.onInsert(this.namespaceId, newChild, parent, false);\n    };\n    /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @param {?} refChild\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.insertBefore = /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @param {?} refChild\n     * @return {?}\n     */\n    function (parent, newChild, refChild) {\n        this.delegate.insertBefore(parent, newChild, refChild);\n        this.engine.onInsert(this.namespaceId, newChild, parent, true);\n    };\n    /**\n     * @param {?} parent\n     * @param {?} oldChild\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeChild = /**\n     * @param {?} parent\n     * @param {?} oldChild\n     * @return {?}\n     */\n    function (parent, oldChild) {\n        this.engine.onRemove(this.namespaceId, oldChild, this.delegate);\n    };\n    /**\n     * @param {?} selectorOrNode\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.selectRootElement = /**\n     * @param {?} selectorOrNode\n     * @return {?}\n     */\n    function (selectorOrNode) { return this.delegate.selectRootElement(selectorOrNode); };\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.parentNode = /**\n     * @param {?} node\n     * @return {?}\n     */\n    function (node) { return this.delegate.parentNode(node); };\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.nextSibling = /**\n     * @param {?} node\n     * @return {?}\n     */\n    function (node) { return this.delegate.nextSibling(node); };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setAttribute = /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @param {?=} namespace\n     * @return {?}\n     */\n    function (el, name, value, namespace) {\n        this.delegate.setAttribute(el, name, value, namespace);\n    };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeAttribute = /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    function (el, name, namespace) {\n        this.delegate.removeAttribute(el, name, namespace);\n    };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.addClass = /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    function (el, name) { this.delegate.addClass(el, name); };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeClass = /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    function (el, name) { this.delegate.removeClass(el, name); };\n    /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?} value\n     * @param {?=} flags\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setStyle = /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?} value\n     * @param {?=} flags\n     * @return {?}\n     */\n    function (el, style, value, flags) {\n        this.delegate.setStyle(el, style, value, flags);\n    };\n    /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?=} flags\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeStyle = /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?=} flags\n     * @return {?}\n     */\n    function (el, style, flags) {\n        this.delegate.removeStyle(el, style, flags);\n    };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setProperty = /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    function (el, name, value) {\n        if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {\n            this.disableAnimations(el, !!value);\n        }\n        else {\n            this.delegate.setProperty(el, name, value);\n        }\n    };\n    /**\n     * @param {?} node\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setValue = /**\n     * @param {?} node\n     * @param {?} value\n     * @return {?}\n     */\n    function (node, value) { this.delegate.setValue(node, value); };\n    /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.listen = /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    function (target, eventName, callback) {\n        return this.delegate.listen(target, eventName, callback);\n    };\n    /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.disableAnimations = /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    function (element, value) {\n        this.engine.disableAnimations(element, value);\n    };\n    return BaseAnimationRenderer;\n}());\nvar AnimationRenderer = /** @class */ (function (_super) {\n    Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"b\" /* __extends */])(AnimationRenderer, _super);\n    function AnimationRenderer(factory, namespaceId, delegate, engine) {\n        var _this = _super.call(this, namespaceId, delegate, engine) || this;\n        _this.factory = factory;\n        _this.namespaceId = namespaceId;\n        return _this;\n    }\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    AnimationRenderer.prototype.setProperty = /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    function (el, name, value) {\n        if (name.charAt(0) == ANIMATION_PREFIX) {\n            if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {\n                value = value === undefined ? true : !!value;\n                this.disableAnimations(el, /** @type {?} */ (value));\n            }\n            else {\n                this.engine.process(this.namespaceId, el, name.substr(1), value);\n            }\n        }\n        else {\n            this.delegate.setProperty(el, name, value);\n        }\n    };\n    /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    AnimationRenderer.prototype.listen = /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    function (target, eventName, callback) {\n        var _this = this;\n        if (eventName.charAt(0) == ANIMATION_PREFIX) {\n            var /** @type {?} */ element = resolveElementFromTarget(target);\n            var /** @type {?} */ name_1 = eventName.substr(1);\n            var /** @type {?} */ phase = '';\n            // @listener.phase is for trigger animation callbacks\n            // @@listener is for animation builder callbacks\n            if (name_1.charAt(0) != ANIMATION_PREFIX) {\n                _a = parseTriggerCallbackName(name_1), name_1 = _a[0], phase = _a[1];\n            }\n            return this.engine.listen(this.namespaceId, element, name_1, phase, function (event) {\n                var /** @type {?} */ countId = (/** @type {?} */ (event))['_data'] || -1;\n                _this.factory.scheduleListenerCallback(countId, callback, event);\n            });\n        }\n        return this.delegate.listen(target, eventName, callback);\n        var _a;\n    };\n    return AnimationRenderer;\n}(BaseAnimationRenderer));\n/**\n * @param {?} target\n * @return {?}\n */\nfunction resolveElementFromTarget(target) {\n    switch (target) {\n        case 'body':\n            return document.body;\n        case 'document':\n            return document;\n        case 'window':\n            return window;\n        default:\n            return target;\n    }\n}\n/**\n * @param {?} triggerName\n * @return {?}\n */\nfunction parseTriggerCallbackName(triggerName) {\n    var /** @type {?} */ dotIndex = triggerName.indexOf('.');\n    var /** @type {?} */ trigger = triggerName.substring(0, dotIndex);\n    var /** @type {?} */ phase = triggerName.substr(dotIndex + 1);\n    return [trigger, phase];\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar InjectableAnimationEngine = /** @class */ (function (_super) {\n    Object(__WEBPACK_IMPORTED_MODULE_2_tslib__[\"b\" /* __extends */])(InjectableAnimationEngine, _super);\n    function InjectableAnimationEngine(driver, normalizer) {\n        return _super.call(this, driver, normalizer) || this;\n    }\n    InjectableAnimationEngine.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\n    ];\n    /** @nocollapse */\n    InjectableAnimationEngine.ctorParameters = function () { return [\n        { type: __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"a\" /* AnimationDriver */], },\n        { type: __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"c\" /* ɵAnimationStyleNormalizer */], },\n    ]; };\n    return InjectableAnimationEngine;\n}(__WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"b\" /* ɵAnimationEngine */]));\n/**\n * @return {?}\n */\nfunction instantiateSupportedAnimationDriver() {\n    if (Object(__WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"g\" /* ɵsupportsWebAnimations */])()) {\n        return new __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"e\" /* ɵWebAnimationsDriver */]();\n    }\n    return new __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"d\" /* ɵNoopAnimationDriver */]();\n}\n/**\n * @return {?}\n */\nfunction instantiateDefaultStyleNormalizer() {\n    return new __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"f\" /* ɵWebAnimationsStyleNormalizer */]();\n}\n/**\n * @param {?} renderer\n * @param {?} engine\n * @param {?} zone\n * @return {?}\n */\nfunction instantiateRendererFactory(renderer, engine, zone) {\n    return new AnimationRendererFactory(renderer, engine, zone);\n}\nvar SHARED_ANIMATION_PROVIDERS = [\n    { provide: __WEBPACK_IMPORTED_MODULE_3__angular_animations__[\"AnimationBuilder\"], useClass: BrowserAnimationBuilder },\n    { provide: __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"c\" /* ɵAnimationStyleNormalizer */], useFactory: instantiateDefaultStyleNormalizer },\n    { provide: __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"b\" /* ɵAnimationEngine */], useClass: InjectableAnimationEngine }, {\n        provide: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"RendererFactory2\"],\n        useFactory: instantiateRendererFactory,\n        deps: [__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"ɵDomRendererFactory2\"], __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"b\" /* ɵAnimationEngine */], __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgZone\"]]\n    }\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserModule.\n */\nvar BROWSER_ANIMATIONS_PROVIDERS = [\n    { provide: __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"a\" /* AnimationDriver */], useFactory: instantiateSupportedAnimationDriver }\n].concat(SHARED_ANIMATION_PROVIDERS);\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserTestingModule.\n */\nvar BROWSER_NOOP_ANIMATIONS_PROVIDERS = [{ provide: __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"a\" /* AnimationDriver */], useClass: __WEBPACK_IMPORTED_MODULE_4__angular_animations_browser__[\"d\" /* ɵNoopAnimationDriver */] }].concat(SHARED_ANIMATION_PROVIDERS);\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * \\@experimental Animation support is experimental.\n */\nvar BrowserAnimationsModule = /** @class */ (function () {\n    function BrowserAnimationsModule() {\n    }\n    BrowserAnimationsModule.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\n                    exports: [__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"BrowserModule\"]],\n                    providers: BROWSER_ANIMATIONS_PROVIDERS,\n                },] },\n    ];\n    /** @nocollapse */\n    BrowserAnimationsModule.ctorParameters = function () { return []; };\n    return BrowserAnimationsModule;\n}());\n/**\n * \\@experimental Animation support is experimental.\n */\nvar NoopAnimationsModule = /** @class */ (function () {\n    function NoopAnimationsModule() {\n    }\n    NoopAnimationsModule.decorators = [\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\n                    exports: [__WEBPACK_IMPORTED_MODULE_1__angular_platform_browser__[\"BrowserModule\"]],\n                    providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n                },] },\n    ];\n    /** @nocollapse */\n    NoopAnimationsModule.ctorParameters = function () { return []; };\n    return NoopAnimationsModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\n\n//# sourceMappingURL=animations.js.map\n\n\n/***/ }),\n/* 448 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"a\", function() { return AnimationDriver; });\n/* unused harmony export ɵAnimation */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"c\", function() { return AnimationStyleNormalizer; });\n/* unused harmony export ɵNoopAnimationStyleNormalizer */\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"f\", function() { return WebAnimationsStyleNormalizer; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"d\", function() { return NoopAnimationDriver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"b\", function() { return AnimationEngine; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"e\", function() { return WebAnimationsDriver; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"g\", function() { return supportsWebAnimations; });\n/* unused harmony export ɵWebAnimationsPlayer */\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_animations__ = __webpack_require__(28);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tslib__ = __webpack_require__(33);\n/**\n * @license Angular v5.2.11\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\n\n\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @param {?} players\n * @return {?}\n */\nfunction optimizeGroupPlayer(players) {\n    switch (players.length) {\n        case 0:\n            return new __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"NoopAnimationPlayer\"]();\n        case 1:\n            return players[0];\n        default:\n            return new __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"ɵAnimationGroupPlayer\"](players);\n    }\n}\n/**\n * @param {?} driver\n * @param {?} normalizer\n * @param {?} element\n * @param {?} keyframes\n * @param {?=} preStyles\n * @param {?=} postStyles\n * @return {?}\n */\nfunction normalizeKeyframes(driver, normalizer, element, keyframes, preStyles, postStyles) {\n    if (preStyles === void 0) { preStyles = {}; }\n    if (postStyles === void 0) { postStyles = {}; }\n    var /** @type {?} */ errors = [];\n    var /** @type {?} */ normalizedKeyframes = [];\n    var /** @type {?} */ previousOffset = -1;\n    var /** @type {?} */ previousKeyframe = null;\n    keyframes.forEach(function (kf) {\n        var /** @type {?} */ offset = /** @type {?} */ (kf['offset']);\n        var /** @type {?} */ isSameOffset = offset == previousOffset;\n        var /** @type {?} */ normalizedKeyframe = (isSameOffset && previousKeyframe) || {};\n        Object.keys(kf).forEach(function (prop) {\n            var /** @type {?} */ normalizedProp = prop;\n            var /** @type {?} */ normalizedValue = kf[prop];\n            if (prop !== 'offset') {\n                normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n                switch (normalizedValue) {\n                    case __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"ɵPRE_STYLE\"]:\n                        normalizedValue = preStyles[prop];\n                        break;\n                    case __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"]:\n                        normalizedValue = postStyles[prop];\n                        break;\n                    default:\n                        normalizedValue =\n                            normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);\n                        break;\n                }\n            }\n            normalizedKeyframe[normalizedProp] = normalizedValue;\n        });\n        if (!isSameOffset) {\n            normalizedKeyframes.push(normalizedKeyframe);\n        }\n        previousKeyframe = normalizedKeyframe;\n        previousOffset = offset;\n    });\n    if (errors.length) {\n        var /** @type {?} */ LINE_START = '\\n - ';\n        throw new Error(\"Unable to animate due to the following errors:\" + LINE_START + errors.join(LINE_START));\n    }\n    return normalizedKeyframes;\n}\n/**\n * @param {?} player\n * @param {?} eventName\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\nfunction listenOnPlayer(player, eventName, event, callback) {\n    switch (eventName) {\n        case 'start':\n            player.onStart(function () { return callback(event && copyAnimationEvent(event, 'start', player.totalTime)); });\n            break;\n        case 'done':\n            player.onDone(function () { return callback(event && copyAnimationEvent(event, 'done', player.totalTime)); });\n            break;\n        case 'destroy':\n            player.onDestroy(function () { return callback(event && copyAnimationEvent(event, 'destroy', player.totalTime)); });\n            break;\n    }\n}\n/**\n * @param {?} e\n * @param {?=} phaseName\n * @param {?=} totalTime\n * @return {?}\n */\nfunction copyAnimationEvent(e, phaseName, totalTime) {\n    var /** @type {?} */ event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime);\n    var /** @type {?} */ data = (/** @type {?} */ (e))['_data'];\n    if (data != null) {\n        (/** @type {?} */ (event))['_data'] = data;\n    }\n    return event;\n}\n/**\n * @param {?} element\n * @param {?} triggerName\n * @param {?} fromState\n * @param {?} toState\n * @param {?=} phaseName\n * @param {?=} totalTime\n * @return {?}\n */\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName, totalTime) {\n    if (phaseName === void 0) { phaseName = ''; }\n    if (totalTime === void 0) { totalTime = 0; }\n    return { element: element, triggerName: triggerName, fromState: fromState, toState: toState, phaseName: phaseName, totalTime: totalTime };\n}\n/**\n * @param {?} map\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\nfunction getOrSetAsInMap(map, key, defaultValue) {\n    var /** @type {?} */ value;\n    if (map instanceof Map) {\n        value = map.get(key);\n        if (!value) {\n            map.set(key, value = defaultValue);\n        }\n    }\n    else {\n        value = map[key];\n        if (!value) {\n            value = map[key] = defaultValue;\n        }\n    }\n    return value;\n}\n/**\n * @param {?} command\n * @return {?}\n */\nfunction parseTimelineCommand(command) {\n    var /** @type {?} */ separatorPos = command.indexOf(':');\n    var /** @type {?} */ id = command.substring(1, separatorPos);\n    var /** @type {?} */ action = command.substr(separatorPos + 1);\n    return [id, action];\n}\nvar _contains = function (elm1, elm2) { return false; };\nvar _matches = function (element, selector) {\n    return false;\n};\nvar _query = function (element, selector, multi) {\n    return [];\n};\nif (typeof Element != 'undefined') {\n    // this is well supported in all browsers\n    _contains = function (elm1, elm2) { return /** @type {?} */ (elm1.contains(elm2)); };\n    if (Element.prototype.matches) {\n        _matches = function (element, selector) { return element.matches(selector); };\n    }\n    else {\n        var /** @type {?} */ proto = /** @type {?} */ (Element.prototype);\n        var /** @type {?} */ fn_1 = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector ||\n            proto.oMatchesSelector || proto.webkitMatchesSelector;\n        if (fn_1) {\n            _matches = function (element, selector) { return fn_1.apply(element, [selector]); };\n        }\n    }\n    _query = function (element, selector, multi) {\n        var /** @type {?} */ results = [];\n        if (multi) {\n            results.push.apply(results, element.querySelectorAll(selector));\n        }\n        else {\n            var /** @type {?} */ elm = element.querySelector(selector);\n            if (elm) {\n                results.push(elm);\n            }\n        }\n        return results;\n    };\n}\n/**\n * @param {?} prop\n * @return {?}\n */\nfunction containsVendorPrefix(prop) {\n    // Webkit is the only real popular vendor prefix nowadays\n    // cc: http://shouldiprefix.com/\n    return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\nvar _CACHED_BODY = null;\nvar _IS_WEBKIT = false;\n/**\n * @param {?} prop\n * @return {?}\n */\nfunction validateStyleProperty(prop) {\n    if (!_CACHED_BODY) {\n        _CACHED_BODY = getBodyNode() || {};\n        _IS_WEBKIT = /** @type {?} */ ((_CACHED_BODY)).style ? ('WebkitAppearance' in /** @type {?} */ ((_CACHED_BODY)).style) : false;\n    }\n    var /** @type {?} */ result = true;\n    if (/** @type {?} */ ((_CACHED_BODY)).style && !containsVendorPrefix(prop)) {\n        result = prop in /** @type {?} */ ((_CACHED_BODY)).style;\n        if (!result && _IS_WEBKIT) {\n            var /** @type {?} */ camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.substr(1);\n            result = camelProp in /** @type {?} */ ((_CACHED_BODY)).style;\n        }\n    }\n    return result;\n}\n/**\n * @return {?}\n */\nfunction getBodyNode() {\n    if (typeof document != 'undefined') {\n        return document.body;\n    }\n    return null;\n}\nvar matchesElement = _matches;\nvar containsElement = _contains;\nvar invokeQuery = _query;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * \\@experimental\n */\nvar NoopAnimationDriver = /** @class */ (function () {\n    function NoopAnimationDriver() {\n    }\n    /**\n     * @param {?} prop\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.validateStyleProperty = /**\n     * @param {?} prop\n     * @return {?}\n     */\n    function (prop) { return validateStyleProperty(prop); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.matchesElement = /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    function (element, selector) {\n        return matchesElement(element, selector);\n    };\n    /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.containsElement = /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    function (elm1, elm2) { return containsElement(elm1, elm2); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.query = /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    function (element, selector, multi) {\n        return invokeQuery(element, selector, multi);\n    };\n    /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.computeStyle = /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    function (element, prop, defaultValue) {\n        return defaultValue || '';\n    };\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.animate = /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    function (element, keyframes, duration, delay, easing, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        return new __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"NoopAnimationPlayer\"]();\n    };\n    return NoopAnimationDriver;\n}());\n/**\n * \\@experimental\n * @abstract\n */\nvar AnimationDriver = /** @class */ (function () {\n    function AnimationDriver() {\n    }\n    AnimationDriver.NOOP = new NoopAnimationDriver();\n    return AnimationDriver;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ONE_SECOND = 1000;\nvar SUBSTITUTION_EXPR_START = '{{';\nvar SUBSTITUTION_EXPR_END = '}}';\nvar ENTER_CLASSNAME = 'ng-enter';\nvar LEAVE_CLASSNAME = 'ng-leave';\n\n\nvar NG_TRIGGER_CLASSNAME = 'ng-trigger';\nvar NG_TRIGGER_SELECTOR = '.ng-trigger';\nvar NG_ANIMATING_CLASSNAME = 'ng-animating';\nvar NG_ANIMATING_SELECTOR = '.ng-animating';\n/**\n * @param {?} value\n * @return {?}\n */\nfunction resolveTimingValue(value) {\n    if (typeof value == 'number')\n        return value;\n    var /** @type {?} */ matches = (/** @type {?} */ (value)).match(/^(-?[\\.\\d]+)(m?s)/);\n    if (!matches || matches.length < 2)\n        return 0;\n    return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\n/**\n * @param {?} value\n * @param {?} unit\n * @return {?}\n */\nfunction _convertTimeValueToMS(value, unit) {\n    switch (unit) {\n        case 's':\n            return value * ONE_SECOND;\n        default:\n            // ms or something else\n            return value;\n    }\n}\n/**\n * @param {?} timings\n * @param {?} errors\n * @param {?=} allowNegativeValues\n * @return {?}\n */\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n    return timings.hasOwnProperty('duration') ? /** @type {?} */ (timings) :\n        parseTimeExpression(/** @type {?} */ (timings), errors, allowNegativeValues);\n}\n/**\n * @param {?} exp\n * @param {?} errors\n * @param {?=} allowNegativeValues\n * @return {?}\n */\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n    var /** @type {?} */ regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n    var /** @type {?} */ duration;\n    var /** @type {?} */ delay = 0;\n    var /** @type {?} */ easing = '';\n    if (typeof exp === 'string') {\n        var /** @type {?} */ matches = exp.match(regex);\n        if (matches === null) {\n            errors.push(\"The provided timing value \\\"\" + exp + \"\\\" is invalid.\");\n            return { duration: 0, delay: 0, easing: '' };\n        }\n        duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n        var /** @type {?} */ delayMatch = matches[3];\n        if (delayMatch != null) {\n            delay = _convertTimeValueToMS(Math.floor(parseFloat(delayMatch)), matches[4]);\n        }\n        var /** @type {?} */ easingVal = matches[5];\n        if (easingVal) {\n            easing = easingVal;\n        }\n    }\n    else {\n        duration = /** @type {?} */ (exp);\n    }\n    if (!allowNegativeValues) {\n        var /** @type {?} */ containsErrors = false;\n        var /** @type {?} */ startIndex = errors.length;\n        if (duration < 0) {\n            errors.push(\"Duration values below 0 are not allowed for this animation step.\");\n            containsErrors = true;\n        }\n        if (delay < 0) {\n            errors.push(\"Delay values below 0 are not allowed for this animation step.\");\n            containsErrors = true;\n        }\n        if (containsErrors) {\n            errors.splice(startIndex, 0, \"The provided timing value \\\"\" + exp + \"\\\" is invalid.\");\n        }\n    }\n    return { duration: duration, delay: delay, easing: easing };\n}\n/**\n * @param {?} obj\n * @param {?=} destination\n * @return {?}\n */\nfunction copyObj(obj, destination) {\n    if (destination === void 0) { destination = {}; }\n    Object.keys(obj).forEach(function (prop) { destination[prop] = obj[prop]; });\n    return destination;\n}\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction normalizeStyles(styles) {\n    var /** @type {?} */ normalizedStyles = {};\n    if (Array.isArray(styles)) {\n        styles.forEach(function (data) { return copyStyles(data, false, normalizedStyles); });\n    }\n    else {\n        copyStyles(styles, false, normalizedStyles);\n    }\n    return normalizedStyles;\n}\n/**\n * @param {?} styles\n * @param {?} readPrototype\n * @param {?=} destination\n * @return {?}\n */\nfunction copyStyles(styles, readPrototype, destination) {\n    if (destination === void 0) { destination = {}; }\n    if (readPrototype) {\n        // we make use of a for-in loop so that the\n        // prototypically inherited properties are\n        // revealed from the backFill map\n        for (var /** @type {?} */ prop in styles) {\n            destination[prop] = styles[prop];\n        }\n    }\n    else {\n        copyObj(styles, destination);\n    }\n    return destination;\n}\n/**\n * @param {?} element\n * @param {?} styles\n * @return {?}\n */\nfunction setStyles(element, styles) {\n    if (element['style']) {\n        Object.keys(styles).forEach(function (prop) {\n            var /** @type {?} */ camelProp = dashCaseToCamelCase(prop);\n            element.style[camelProp] = styles[prop];\n        });\n    }\n}\n/**\n * @param {?} element\n * @param {?} styles\n * @return {?}\n */\nfunction eraseStyles(element, styles) {\n    if (element['style']) {\n        Object.keys(styles).forEach(function (prop) {\n            var /** @type {?} */ camelProp = dashCaseToCamelCase(prop);\n            element.style[camelProp] = '';\n        });\n    }\n}\n/**\n * @param {?} steps\n * @return {?}\n */\nfunction normalizeAnimationEntry(steps) {\n    if (Array.isArray(steps)) {\n        if (steps.length == 1)\n            return steps[0];\n        return Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"sequence\"])(steps);\n    }\n    return /** @type {?} */ (steps);\n}\n/**\n * @param {?} value\n * @param {?} options\n * @param {?} errors\n * @return {?}\n */\nfunction validateStyleParams(value, options, errors) {\n    var /** @type {?} */ params = options.params || {};\n    var /** @type {?} */ matches = extractStyleParams(value);\n    if (matches.length) {\n        matches.forEach(function (varName) {\n            if (!params.hasOwnProperty(varName)) {\n                errors.push(\"Unable to resolve the local animation param \" + varName + \" in the given list of values\");\n            }\n        });\n    }\n}\nvar PARAM_REGEX = new RegExp(SUBSTITUTION_EXPR_START + \"\\\\s*(.+?)\\\\s*\" + SUBSTITUTION_EXPR_END, 'g');\n/**\n * @param {?} value\n * @return {?}\n */\nfunction extractStyleParams(value) {\n    var /** @type {?} */ params = [];\n    if (typeof value === 'string') {\n        var /** @type {?} */ val = value.toString();\n        var /** @type {?} */ match = void 0;\n        while (match = PARAM_REGEX.exec(val)) {\n            params.push(/** @type {?} */ (match[1]));\n        }\n        PARAM_REGEX.lastIndex = 0;\n    }\n    return params;\n}\n/**\n * @param {?} value\n * @param {?} params\n * @param {?} errors\n * @return {?}\n */\nfunction interpolateParams(value, params, errors) {\n    var /** @type {?} */ original = value.toString();\n    var /** @type {?} */ str = original.replace(PARAM_REGEX, function (_, varName) {\n        var /** @type {?} */ localVal = params[varName];\n        // this means that the value was never overidden by the data passed in by the user\n        if (!params.hasOwnProperty(varName)) {\n            errors.push(\"Please provide a value for the animation param \" + varName);\n            localVal = '';\n        }\n        return localVal.toString();\n    });\n    // we do this to assert that numeric values stay as they are\n    return str == original ? value : str;\n}\n/**\n * @param {?} iterator\n * @return {?}\n */\nfunction iteratorToArray(iterator) {\n    var /** @type {?} */ arr = [];\n    var /** @type {?} */ item = iterator.next();\n    while (!item.done) {\n        arr.push(item.value);\n        item = iterator.next();\n    }\n    return arr;\n}\n/**\n * @param {?} source\n * @param {?} destination\n * @return {?}\n */\n\nvar DASH_CASE_REGEXP = /-+([a-z0-9])/g;\n/**\n * @param {?} input\n * @return {?}\n */\nfunction dashCaseToCamelCase(input) {\n    return input.replace(DASH_CASE_REGEXP, function () {\n        var m = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            m[_i] = arguments[_i];\n        }\n        return m[1].toUpperCase();\n    });\n}\n/**\n * @param {?} duration\n * @param {?} delay\n * @return {?}\n */\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n    return duration === 0 || delay === 0;\n}\n/**\n * @param {?} visitor\n * @param {?} node\n * @param {?} context\n * @return {?}\n */\nfunction visitDslNode(visitor, node, context) {\n    switch (node.type) {\n        case 7 /* Trigger */:\n            return visitor.visitTrigger(node, context);\n        case 0 /* State */:\n            return visitor.visitState(node, context);\n        case 1 /* Transition */:\n            return visitor.visitTransition(node, context);\n        case 2 /* Sequence */:\n            return visitor.visitSequence(node, context);\n        case 3 /* Group */:\n            return visitor.visitGroup(node, context);\n        case 4 /* Animate */:\n            return visitor.visitAnimate(node, context);\n        case 5 /* Keyframes */:\n            return visitor.visitKeyframes(node, context);\n        case 6 /* Style */:\n            return visitor.visitStyle(node, context);\n        case 8 /* Reference */:\n            return visitor.visitReference(node, context);\n        case 9 /* AnimateChild */:\n            return visitor.visitAnimateChild(node, context);\n        case 10 /* AnimateRef */:\n            return visitor.visitAnimateRef(node, context);\n        case 11 /* Query */:\n            return visitor.visitQuery(node, context);\n        case 12 /* Stagger */:\n            return visitor.visitStagger(node, context);\n        default:\n            throw new Error(\"Unable to resolve animation metadata node #\" + node.type);\n    }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ANY_STATE = '*';\n/**\n * @param {?} transitionValue\n * @param {?} errors\n * @return {?}\n */\nfunction parseTransitionExpr(transitionValue, errors) {\n    var /** @type {?} */ expressions = [];\n    if (typeof transitionValue == 'string') {\n        (/** @type {?} */ (transitionValue))\n            .split(/\\s*,\\s*/)\n            .forEach(function (str) { return parseInnerTransitionStr(str, expressions, errors); });\n    }\n    else {\n        expressions.push(/** @type {?} */ (transitionValue));\n    }\n    return expressions;\n}\n/**\n * @param {?} eventStr\n * @param {?} expressions\n * @param {?} errors\n * @return {?}\n */\nfunction parseInnerTransitionStr(eventStr, expressions, errors) {\n    if (eventStr[0] == ':') {\n        var /** @type {?} */ result = parseAnimationAlias(eventStr, errors);\n        if (typeof result == 'function') {\n            expressions.push(result);\n            return;\n        }\n        eventStr = /** @type {?} */ (result);\n    }\n    var /** @type {?} */ match = eventStr.match(/^(\\*|[-\\w]+)\\s*(<?[=-]>)\\s*(\\*|[-\\w]+)$/);\n    if (match == null || match.length < 4) {\n        errors.push(\"The provided transition expression \\\"\" + eventStr + \"\\\" is not supported\");\n        return expressions;\n    }\n    var /** @type {?} */ fromState = match[1];\n    var /** @type {?} */ separator = match[2];\n    var /** @type {?} */ toState = match[3];\n    expressions.push(makeLambdaFromStates(fromState, toState));\n    var /** @type {?} */ isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;\n    if (separator[0] == '<' && !isFullAnyStateExpr) {\n        expressions.push(makeLambdaFromStates(toState, fromState));\n    }\n}\n/**\n * @param {?} alias\n * @param {?} errors\n * @return {?}\n */\nfunction parseAnimationAlias(alias, errors) {\n    switch (alias) {\n        case ':enter':\n            return 'void => *';\n        case ':leave':\n            return '* => void';\n        case ':increment':\n            return function (fromState, toState) { return parseFloat(toState) > parseFloat(fromState); };\n        case ':decrement':\n            return function (fromState, toState) { return parseFloat(toState) < parseFloat(fromState); };\n        default:\n            errors.push(\"The transition alias value \\\"\" + alias + \"\\\" is not supported\");\n            return '* => *';\n    }\n}\n// DO NOT REFACTOR ... keep the follow set instantiations\n// with the values intact (closure compiler for some reason\n// removes follow-up lines that add the values outside of\n// the constructor...\nvar TRUE_BOOLEAN_VALUES = new Set(['true', '1']);\nvar FALSE_BOOLEAN_VALUES = new Set(['false', '0']);\n/**\n * @param {?} lhs\n * @param {?} rhs\n * @return {?}\n */\nfunction makeLambdaFromStates(lhs, rhs) {\n    var /** @type {?} */ LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n    var /** @type {?} */ RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n    return function (fromState, toState) {\n        var /** @type {?} */ lhsMatch = lhs == ANY_STATE || lhs == fromState;\n        var /** @type {?} */ rhsMatch = rhs == ANY_STATE || rhs == toState;\n        if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {\n            lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);\n        }\n        if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {\n            rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);\n        }\n        return lhsMatch && rhsMatch;\n    };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar SELF_TOKEN = ':self';\nvar SELF_TOKEN_REGEX = new RegExp(\"s*\" + SELF_TOKEN + \"s*,?\", 'g');\n/**\n * @param {?} driver\n * @param {?} metadata\n * @param {?} errors\n * @return {?}\n */\nfunction buildAnimationAst(driver, metadata, errors) {\n    return new AnimationAstBuilderVisitor(driver).build(metadata, errors);\n}\nvar ROOT_SELECTOR = '';\nvar AnimationAstBuilderVisitor = /** @class */ (function () {\n    function AnimationAstBuilderVisitor(_driver) {\n        this._driver = _driver;\n    }\n    /**\n     * @param {?} metadata\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.build = /**\n     * @param {?} metadata\n     * @param {?} errors\n     * @return {?}\n     */\n    function (metadata, errors) {\n        var /** @type {?} */ context = new AnimationAstBuilderContext(errors);\n        this._resetContextStyleTimingState(context);\n        return /** @type {?} */ (visitDslNode(this, normalizeAnimationEntry(metadata), context));\n    };\n    /**\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._resetContextStyleTimingState = /**\n     * @param {?} context\n     * @return {?}\n     */\n    function (context) {\n        context.currentQuerySelector = ROOT_SELECTOR;\n        context.collectedStyles = {};\n        context.collectedStyles[ROOT_SELECTOR] = {};\n        context.currentTime = 0;\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitTrigger = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ queryCount = context.queryCount = 0;\n        var /** @type {?} */ depCount = context.depCount = 0;\n        var /** @type {?} */ states = [];\n        var /** @type {?} */ transitions = [];\n        if (metadata.name.charAt(0) == '@') {\n            context.errors.push('animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\\'@foo\\', [...]))');\n        }\n        metadata.definitions.forEach(function (def) {\n            _this._resetContextStyleTimingState(context);\n            if (def.type == 0 /* State */) {\n                var /** @type {?} */ stateDef_1 = /** @type {?} */ (def);\n                var /** @type {?} */ name_1 = stateDef_1.name;\n                name_1.split(/\\s*,\\s*/).forEach(function (n) {\n                    stateDef_1.name = n;\n                    states.push(_this.visitState(stateDef_1, context));\n                });\n                stateDef_1.name = name_1;\n            }\n            else if (def.type == 1 /* Transition */) {\n                var /** @type {?} */ transition = _this.visitTransition(/** @type {?} */ (def), context);\n                queryCount += transition.queryCount;\n                depCount += transition.depCount;\n                transitions.push(transition);\n            }\n            else {\n                context.errors.push('only state() and transition() definitions can sit inside of a trigger()');\n            }\n        });\n        return {\n            type: 7 /* Trigger */,\n            name: metadata.name, states: states, transitions: transitions, queryCount: queryCount, depCount: depCount,\n            options: null\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitState = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ styleAst = this.visitStyle(metadata.styles, context);\n        var /** @type {?} */ astParams = (metadata.options && metadata.options.params) || null;\n        if (styleAst.containsDynamicStyles) {\n            var /** @type {?} */ missingSubs_1 = new Set();\n            var /** @type {?} */ params_1 = astParams || {};\n            styleAst.styles.forEach(function (value) {\n                if (isObject(value)) {\n                    var /** @type {?} */ stylesObj_1 = /** @type {?} */ (value);\n                    Object.keys(stylesObj_1).forEach(function (prop) {\n                        extractStyleParams(stylesObj_1[prop]).forEach(function (sub) {\n                            if (!params_1.hasOwnProperty(sub)) {\n                                missingSubs_1.add(sub);\n                            }\n                        });\n                    });\n                }\n            });\n            if (missingSubs_1.size) {\n                var /** @type {?} */ missingSubsArr = iteratorToArray(missingSubs_1.values());\n                context.errors.push(\"state(\\\"\" + metadata.name + \"\\\", ...) must define default values for all the following style substitutions: \" + missingSubsArr.join(', '));\n            }\n        }\n        return {\n            type: 0 /* State */,\n            name: metadata.name,\n            style: styleAst,\n            options: astParams ? { params: astParams } : null\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitTransition = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        context.queryCount = 0;\n        context.depCount = 0;\n        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n        var /** @type {?} */ matchers = parseTransitionExpr(metadata.expr, context.errors);\n        return {\n            type: 1 /* Transition */,\n            matchers: matchers,\n            animation: animation,\n            queryCount: context.queryCount,\n            depCount: context.depCount,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitSequence = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var _this = this;\n        return {\n            type: 2 /* Sequence */,\n            steps: metadata.steps.map(function (s) { return visitDslNode(_this, s, context); }),\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitGroup = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ currentTime = context.currentTime;\n        var /** @type {?} */ furthestTime = 0;\n        var /** @type {?} */ steps = metadata.steps.map(function (step) {\n            context.currentTime = currentTime;\n            var /** @type {?} */ innerAst = visitDslNode(_this, step, context);\n            furthestTime = Math.max(furthestTime, context.currentTime);\n            return innerAst;\n        });\n        context.currentTime = furthestTime;\n        return {\n            type: 3 /* Group */,\n            steps: steps,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitAnimate = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ timingAst = constructTimingAst(metadata.timings, context.errors);\n        context.currentAnimateTimings = timingAst;\n        var /** @type {?} */ styleAst;\n        var /** @type {?} */ styleMetadata = metadata.styles ? metadata.styles : Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"style\"])({});\n        if (styleMetadata.type == 5 /* Keyframes */) {\n            styleAst = this.visitKeyframes(/** @type {?} */ (styleMetadata), context);\n        }\n        else {\n            var /** @type {?} */ styleMetadata_1 = /** @type {?} */ (metadata.styles);\n            var /** @type {?} */ isEmpty = false;\n            if (!styleMetadata_1) {\n                isEmpty = true;\n                var /** @type {?} */ newStyleData = {};\n                if (timingAst.easing) {\n                    newStyleData['easing'] = timingAst.easing;\n                }\n                styleMetadata_1 = Object(__WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"style\"])(newStyleData);\n            }\n            context.currentTime += timingAst.duration + timingAst.delay;\n            var /** @type {?} */ _styleAst = this.visitStyle(styleMetadata_1, context);\n            _styleAst.isEmptyStep = isEmpty;\n            styleAst = _styleAst;\n        }\n        context.currentAnimateTimings = null;\n        return {\n            type: 4 /* Animate */,\n            timings: timingAst,\n            style: styleAst,\n            options: null\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitStyle = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ ast = this._makeStyleAst(metadata, context);\n        this._validateStyleAst(ast, context);\n        return ast;\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._makeStyleAst = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ styles = [];\n        if (Array.isArray(metadata.styles)) {\n            (/** @type {?} */ (metadata.styles)).forEach(function (styleTuple) {\n                if (typeof styleTuple == 'string') {\n                    if (styleTuple == __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"]) {\n                        styles.push(/** @type {?} */ (styleTuple));\n                    }\n                    else {\n                        context.errors.push(\"The provided style string value \" + styleTuple + \" is not allowed.\");\n                    }\n                }\n                else {\n                    styles.push(/** @type {?} */ (styleTuple));\n                }\n            });\n        }\n        else {\n            styles.push(metadata.styles);\n        }\n        var /** @type {?} */ containsDynamicStyles = false;\n        var /** @type {?} */ collectedEasing = null;\n        styles.forEach(function (styleData) {\n            if (isObject(styleData)) {\n                var /** @type {?} */ styleMap = /** @type {?} */ (styleData);\n                var /** @type {?} */ easing = styleMap['easing'];\n                if (easing) {\n                    collectedEasing = /** @type {?} */ (easing);\n                    delete styleMap['easing'];\n                }\n                if (!containsDynamicStyles) {\n                    for (var /** @type {?} */ prop in styleMap) {\n                        var /** @type {?} */ value = styleMap[prop];\n                        if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {\n                            containsDynamicStyles = true;\n                            break;\n                        }\n                    }\n                }\n            }\n        });\n        return {\n            type: 6 /* Style */,\n            styles: styles,\n            easing: collectedEasing,\n            offset: metadata.offset, containsDynamicStyles: containsDynamicStyles,\n            options: null\n        };\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._validateStyleAst = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ timings = context.currentAnimateTimings;\n        var /** @type {?} */ endTime = context.currentTime;\n        var /** @type {?} */ startTime = context.currentTime;\n        if (timings && startTime > 0) {\n            startTime -= timings.duration + timings.delay;\n        }\n        ast.styles.forEach(function (tuple) {\n            if (typeof tuple == 'string')\n                return;\n            Object.keys(tuple).forEach(function (prop) {\n                if (!_this._driver.validateStyleProperty(prop)) {\n                    context.errors.push(\"The provided animation property \\\"\" + prop + \"\\\" is not a supported CSS property for animations\");\n                    return;\n                }\n                var /** @type {?} */ collectedStyles = context.collectedStyles[/** @type {?} */ ((context.currentQuerySelector))];\n                var /** @type {?} */ collectedEntry = collectedStyles[prop];\n                var /** @type {?} */ updateCollectedStyle = true;\n                if (collectedEntry) {\n                    if (startTime != endTime && startTime >= collectedEntry.startTime &&\n                        endTime <= collectedEntry.endTime) {\n                        context.errors.push(\"The CSS property \\\"\" + prop + \"\\\" that exists between the times of \\\"\" + collectedEntry.startTime + \"ms\\\" and \\\"\" + collectedEntry.endTime + \"ms\\\" is also being animated in a parallel animation between the times of \\\"\" + startTime + \"ms\\\" and \\\"\" + endTime + \"ms\\\"\");\n                        updateCollectedStyle = false;\n                    }\n                    // we always choose the smaller start time value since we\n                    // want to have a record of the entire animation window where\n                    // the style property is being animated in between\n                    startTime = collectedEntry.startTime;\n                }\n                if (updateCollectedStyle) {\n                    collectedStyles[prop] = { startTime: startTime, endTime: endTime };\n                }\n                if (context.options) {\n                    validateStyleParams(tuple[prop], context.options, context.errors);\n                }\n            });\n        });\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitKeyframes = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ ast = { type: 5 /* Keyframes */, styles: [], options: null };\n        if (!context.currentAnimateTimings) {\n            context.errors.push(\"keyframes() must be placed inside of a call to animate()\");\n            return ast;\n        }\n        var /** @type {?} */ MAX_KEYFRAME_OFFSET = 1;\n        var /** @type {?} */ totalKeyframesWithOffsets = 0;\n        var /** @type {?} */ offsets = [];\n        var /** @type {?} */ offsetsOutOfOrder = false;\n        var /** @type {?} */ keyframesOutOfRange = false;\n        var /** @type {?} */ previousOffset = 0;\n        var /** @type {?} */ keyframes = metadata.steps.map(function (styles) {\n            var /** @type {?} */ style$$1 = _this._makeStyleAst(styles, context);\n            var /** @type {?} */ offsetVal = style$$1.offset != null ? style$$1.offset : consumeOffset(style$$1.styles);\n            var /** @type {?} */ offset = 0;\n            if (offsetVal != null) {\n                totalKeyframesWithOffsets++;\n                offset = style$$1.offset = offsetVal;\n            }\n            keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;\n            offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;\n            previousOffset = offset;\n            offsets.push(offset);\n            return style$$1;\n        });\n        if (keyframesOutOfRange) {\n            context.errors.push(\"Please ensure that all keyframe offsets are between 0 and 1\");\n        }\n        if (offsetsOutOfOrder) {\n            context.errors.push(\"Please ensure that all keyframe offsets are in order\");\n        }\n        var /** @type {?} */ length = metadata.steps.length;\n        var /** @type {?} */ generatedOffset = 0;\n        if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {\n            context.errors.push(\"Not all style() steps within the declared keyframes() contain offsets\");\n        }\n        else if (totalKeyframesWithOffsets == 0) {\n            generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);\n        }\n        var /** @type {?} */ limit = length - 1;\n        var /** @type {?} */ currentTime = context.currentTime;\n        var /** @type {?} */ currentAnimateTimings = /** @type {?} */ ((context.currentAnimateTimings));\n        var /** @type {?} */ animateDuration = currentAnimateTimings.duration;\n        keyframes.forEach(function (kf, i) {\n            var /** @type {?} */ offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];\n            var /** @type {?} */ durationUpToThisFrame = offset * animateDuration;\n            context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;\n            currentAnimateTimings.duration = durationUpToThisFrame;\n            _this._validateStyleAst(kf, context);\n            kf.offset = offset;\n            ast.styles.push(kf);\n        });\n        return ast;\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitReference = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        return {\n            type: 8 /* Reference */,\n            animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitAnimateChild = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        context.depCount++;\n        return {\n            type: 9 /* AnimateChild */,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitAnimateRef = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        return {\n            type: 10 /* AnimateRef */,\n            animation: this.visitReference(metadata.animation, context),\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitQuery = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ parentSelector = /** @type {?} */ ((context.currentQuerySelector));\n        var /** @type {?} */ options = /** @type {?} */ ((metadata.options || {}));\n        context.queryCount++;\n        context.currentQuery = metadata;\n        var _a = normalizeSelector(metadata.selector), selector = _a[0], includeSelf = _a[1];\n        context.currentQuerySelector =\n            parentSelector.length ? (parentSelector + ' ' + selector) : selector;\n        getOrSetAsInMap(context.collectedStyles, context.currentQuerySelector, {});\n        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n        context.currentQuery = null;\n        context.currentQuerySelector = parentSelector;\n        return {\n            type: 11 /* Query */,\n            selector: selector,\n            limit: options.limit || 0,\n            optional: !!options.optional, includeSelf: includeSelf, animation: animation,\n            originalSelector: metadata.selector,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitStagger = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        if (!context.currentQuery) {\n            context.errors.push(\"stagger() can only be used inside of query()\");\n        }\n        var /** @type {?} */ timings = metadata.timings === 'full' ?\n            { duration: 0, delay: 0, easing: 'full' } :\n            resolveTiming(metadata.timings, context.errors, true);\n        return {\n            type: 12 /* Stagger */,\n            animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context), timings: timings,\n            options: null\n        };\n    };\n    return AnimationAstBuilderVisitor;\n}());\n/**\n * @param {?} selector\n * @return {?}\n */\nfunction normalizeSelector(selector) {\n    var /** @type {?} */ hasAmpersand = selector.split(/\\s*,\\s*/).find(function (token) { return token == SELF_TOKEN; }) ? true : false;\n    if (hasAmpersand) {\n        selector = selector.replace(SELF_TOKEN_REGEX, '');\n    }\n    // the :enter and :leave selectors are filled in at runtime during timeline building\n    selector = selector.replace(/@\\*/g, NG_TRIGGER_SELECTOR)\n        .replace(/@\\w+/g, function (match) { return NG_TRIGGER_SELECTOR + '-' + match.substr(1); })\n        .replace(/:animating/g, NG_ANIMATING_SELECTOR);\n    return [selector, hasAmpersand];\n}\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction normalizeParams(obj) {\n    return obj ? copyObj(obj) : null;\n}\nvar AnimationAstBuilderContext = /** @class */ (function () {\n    function AnimationAstBuilderContext(errors) {\n        this.errors = errors;\n        this.queryCount = 0;\n        this.depCount = 0;\n        this.currentTransition = null;\n        this.currentQuery = null;\n        this.currentQuerySelector = null;\n        this.currentAnimateTimings = null;\n        this.currentTime = 0;\n        this.collectedStyles = {};\n        this.options = null;\n    }\n    return AnimationAstBuilderContext;\n}());\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction consumeOffset(styles) {\n    if (typeof styles == 'string')\n        return null;\n    var /** @type {?} */ offset = null;\n    if (Array.isArray(styles)) {\n        styles.forEach(function (styleTuple) {\n            if (isObject(styleTuple) && styleTuple.hasOwnProperty('offset')) {\n                var /** @type {?} */ obj = /** @type {?} */ (styleTuple);\n                offset = parseFloat(/** @type {?} */ (obj['offset']));\n                delete obj['offset'];\n            }\n        });\n    }\n    else if (isObject(styles) && styles.hasOwnProperty('offset')) {\n        var /** @type {?} */ obj = /** @type {?} */ (styles);\n        offset = parseFloat(/** @type {?} */ (obj['offset']));\n        delete obj['offset'];\n    }\n    return offset;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isObject(value) {\n    return !Array.isArray(value) && typeof value == 'object';\n}\n/**\n * @param {?} value\n * @param {?} errors\n * @return {?}\n */\nfunction constructTimingAst(value, errors) {\n    var /** @type {?} */ timings = null;\n    if (value.hasOwnProperty('duration')) {\n        timings = /** @type {?} */ (value);\n    }\n    else if (typeof value == 'number') {\n        var /** @type {?} */ duration = resolveTiming(/** @type {?} */ (value), errors).duration;\n        return makeTimingAst(/** @type {?} */ (duration), 0, '');\n    }\n    var /** @type {?} */ strValue = /** @type {?} */ (value);\n    var /** @type {?} */ isDynamic = strValue.split(/\\s+/).some(function (v) { return v.charAt(0) == '{' && v.charAt(1) == '{'; });\n    if (isDynamic) {\n        var /** @type {?} */ ast = /** @type {?} */ (makeTimingAst(0, 0, ''));\n        ast.dynamic = true;\n        ast.strValue = strValue;\n        return /** @type {?} */ (ast);\n    }\n    timings = timings || resolveTiming(strValue, errors);\n    return makeTimingAst(timings.duration, timings.delay, timings.easing);\n}\n/**\n * @param {?} options\n * @return {?}\n */\nfunction normalizeAnimationOptions(options) {\n    if (options) {\n        options = copyObj(options);\n        if (options['params']) {\n            options['params'] = /** @type {?} */ ((normalizeParams(options['params'])));\n        }\n    }\n    else {\n        options = {};\n    }\n    return options;\n}\n/**\n * @param {?} duration\n * @param {?} delay\n * @param {?} easing\n * @return {?}\n */\nfunction makeTimingAst(duration, delay, easing) {\n    return { duration: duration, delay: delay, easing: easing };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @record\n */\n\n/**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} preStyleProps\n * @param {?} postStyleProps\n * @param {?} duration\n * @param {?} delay\n * @param {?=} easing\n * @param {?=} subTimeline\n * @return {?}\n */\nfunction createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing, subTimeline) {\n    if (easing === void 0) { easing = null; }\n    if (subTimeline === void 0) { subTimeline = false; }\n    return {\n        type: 1 /* TimelineAnimation */,\n        element: element,\n        keyframes: keyframes,\n        preStyleProps: preStyleProps,\n        postStyleProps: postStyleProps,\n        duration: duration,\n        delay: delay,\n        totalTime: duration + delay, easing: easing, subTimeline: subTimeline\n    };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ElementInstructionMap = /** @class */ (function () {\n    function ElementInstructionMap() {\n        this._map = new Map();\n    }\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.consume = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var /** @type {?} */ instructions = this._map.get(element);\n        if (instructions) {\n            this._map.delete(element);\n        }\n        else {\n            instructions = [];\n        }\n        return instructions;\n    };\n    /**\n     * @param {?} element\n     * @param {?} instructions\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.append = /**\n     * @param {?} element\n     * @param {?} instructions\n     * @return {?}\n     */\n    function (element, instructions) {\n        var /** @type {?} */ existingInstructions = this._map.get(element);\n        if (!existingInstructions) {\n            this._map.set(element, existingInstructions = []);\n        }\n        existingInstructions.push.apply(existingInstructions, instructions);\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.has = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) { return this._map.has(element); };\n    /**\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.clear = /**\n     * @return {?}\n     */\n    function () { this._map.clear(); };\n    return ElementInstructionMap;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ONE_FRAME_IN_MILLISECONDS = 1;\nvar ENTER_TOKEN = ':enter';\nvar ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\nvar LEAVE_TOKEN = ':leave';\nvar LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\n/**\n * @param {?} driver\n * @param {?} rootElement\n * @param {?} ast\n * @param {?} enterClassName\n * @param {?} leaveClassName\n * @param {?=} startingStyles\n * @param {?=} finalStyles\n * @param {?=} options\n * @param {?=} subInstructions\n * @param {?=} errors\n * @return {?}\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors) {\n    if (startingStyles === void 0) { startingStyles = {}; }\n    if (finalStyles === void 0) { finalStyles = {}; }\n    if (errors === void 0) { errors = []; }\n    return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);\n}\nvar AnimationTimelineBuilderVisitor = /** @class */ (function () {\n    function AnimationTimelineBuilderVisitor() {\n    }\n    /**\n     * @param {?} driver\n     * @param {?} rootElement\n     * @param {?} ast\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @param {?} startingStyles\n     * @param {?} finalStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @param {?=} errors\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.buildKeyframes = /**\n     * @param {?} driver\n     * @param {?} rootElement\n     * @param {?} ast\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @param {?} startingStyles\n     * @param {?} finalStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @param {?=} errors\n     * @return {?}\n     */\n    function (driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors) {\n        if (errors === void 0) { errors = []; }\n        subInstructions = subInstructions || new ElementInstructionMap();\n        var /** @type {?} */ context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);\n        context.options = options;\n        context.currentTimeline.setStyles([startingStyles], null, context.errors, options);\n        visitDslNode(this, ast, context);\n        // this checks to see if an actual animation happened\n        var /** @type {?} */ timelines = context.timelines.filter(function (timeline) { return timeline.containsAnimation(); });\n        if (timelines.length && Object.keys(finalStyles).length) {\n            var /** @type {?} */ tl = timelines[timelines.length - 1];\n            if (!tl.allowOnlyTimelineStyles()) {\n                tl.setStyles([finalStyles], null, context.errors, options);\n            }\n        }\n        return timelines.length ? timelines.map(function (timeline) { return timeline.buildKeyframes(); }) :\n            [createTimelineInstruction(rootElement, [], [], [], 0, 0, '', false)];\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitTrigger = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitState = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitTransition = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitAnimateChild = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ elementInstructions = context.subInstructions.consume(context.element);\n        if (elementInstructions) {\n            var /** @type {?} */ innerContext = context.createSubContext(ast.options);\n            var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n            var /** @type {?} */ endTime = this._visitSubInstructions(elementInstructions, innerContext, /** @type {?} */ (innerContext.options));\n            if (startTime != endTime) {\n                // we do this on the upper context because we created a sub context for\n                // the sub child animations\n                context.transformIntoNewTimeline(endTime);\n            }\n        }\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitAnimateRef = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ innerContext = context.createSubContext(ast.options);\n        innerContext.transformIntoNewTimeline();\n        this.visitReference(ast.animation, innerContext);\n        context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} instructions\n     * @param {?} context\n     * @param {?} options\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype._visitSubInstructions = /**\n     * @param {?} instructions\n     * @param {?} context\n     * @param {?} options\n     * @return {?}\n     */\n    function (instructions, context, options) {\n        var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ furthestTime = startTime;\n        // this is a special-case for when a user wants to skip a sub\n        // animation from being fired entirely.\n        var /** @type {?} */ duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n        var /** @type {?} */ delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n        if (duration !== 0) {\n            instructions.forEach(function (instruction) {\n                var /** @type {?} */ instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);\n                furthestTime =\n                    Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);\n            });\n        }\n        return furthestTime;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitReference = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        context.updateOptions(ast.options, true);\n        visitDslNode(this, ast.animation, context);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitSequence = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ subContextCount = context.subContextCount;\n        var /** @type {?} */ ctx = context;\n        var /** @type {?} */ options = ast.options;\n        if (options && (options.params || options.delay)) {\n            ctx = context.createSubContext(options);\n            ctx.transformIntoNewTimeline();\n            if (options.delay != null) {\n                if (ctx.previousNode.type == 6 /* Style */) {\n                    ctx.currentTimeline.snapshotCurrentStyles();\n                    ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n                }\n                var /** @type {?} */ delay = resolveTimingValue(options.delay);\n                ctx.delayNextStep(delay);\n            }\n        }\n        if (ast.steps.length) {\n            ast.steps.forEach(function (s) { return visitDslNode(_this, s, ctx); });\n            // this is here just incase the inner steps only contain or end with a style() call\n            ctx.currentTimeline.applyStylesToKeyframe();\n            // this means that some animation function within the sequence\n            // ended up creating a sub timeline (which means the current\n            // timeline cannot overlap with the contents of the sequence)\n            if (ctx.subContextCount > subContextCount) {\n                ctx.transformIntoNewTimeline();\n            }\n        }\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitGroup = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ innerTimelines = [];\n        var /** @type {?} */ furthestTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n        ast.steps.forEach(function (s) {\n            var /** @type {?} */ innerContext = context.createSubContext(ast.options);\n            if (delay) {\n                innerContext.delayNextStep(delay);\n            }\n            visitDslNode(_this, s, innerContext);\n            furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);\n            innerTimelines.push(innerContext.currentTimeline);\n        });\n        // this operation is run after the AST loop because otherwise\n        // if the parent timeline's collected styles were updated then\n        // it would pass in invalid data into the new-to-be forked items\n        innerTimelines.forEach(function (timeline) { return context.currentTimeline.mergeTimelineCollectedStyles(timeline); });\n        context.transformIntoNewTimeline(furthestTime);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype._visitTiming = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        if ((/** @type {?} */ (ast)).dynamic) {\n            var /** @type {?} */ strValue = (/** @type {?} */ (ast)).strValue;\n            var /** @type {?} */ timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;\n            return resolveTiming(timingValue, context.errors);\n        }\n        else {\n            return { duration: ast.duration, delay: ast.delay, easing: ast.easing };\n        }\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitAnimate = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n        var /** @type {?} */ timeline = context.currentTimeline;\n        if (timings.delay) {\n            context.incrementTime(timings.delay);\n            timeline.snapshotCurrentStyles();\n        }\n        var /** @type {?} */ style$$1 = ast.style;\n        if (style$$1.type == 5 /* Keyframes */) {\n            this.visitKeyframes(style$$1, context);\n        }\n        else {\n            context.incrementTime(timings.duration);\n            this.visitStyle(/** @type {?} */ (style$$1), context);\n            timeline.applyStylesToKeyframe();\n        }\n        context.currentAnimateTimings = null;\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitStyle = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ timeline = context.currentTimeline;\n        var /** @type {?} */ timings = /** @type {?} */ ((context.currentAnimateTimings));\n        // this is a special case for when a style() call\n        // directly follows  an animate() call (but not inside of an animate() call)\n        if (!timings && timeline.getCurrentStyleProperties().length) {\n            timeline.forwardFrame();\n        }\n        var /** @type {?} */ easing = (timings && timings.easing) || ast.easing;\n        if (ast.isEmptyStep) {\n            timeline.applyEmptyStep(easing);\n        }\n        else {\n            timeline.setStyles(ast.styles, easing, context.errors, context.options);\n        }\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitKeyframes = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ currentAnimateTimings = /** @type {?} */ ((context.currentAnimateTimings));\n        var /** @type {?} */ startTime = (/** @type {?} */ ((context.currentTimeline))).duration;\n        var /** @type {?} */ duration = currentAnimateTimings.duration;\n        var /** @type {?} */ innerContext = context.createSubContext();\n        var /** @type {?} */ innerTimeline = innerContext.currentTimeline;\n        innerTimeline.easing = currentAnimateTimings.easing;\n        ast.styles.forEach(function (step) {\n            var /** @type {?} */ offset = step.offset || 0;\n            innerTimeline.forwardTime(offset * duration);\n            innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);\n            innerTimeline.applyStylesToKeyframe();\n        });\n        // this will ensure that the parent timeline gets all the styles from\n        // the child even if the new timeline below is not used\n        context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);\n        // we do this because the window between this timeline and the sub timeline\n        // should ensure that the styles within are exactly the same as they were before\n        context.transformIntoNewTimeline(startTime + duration);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitQuery = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var _this = this;\n        // in the event that the first step before this is a style step we need\n        // to ensure the styles are applied before the children are animated\n        var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ options = /** @type {?} */ ((ast.options || {}));\n        var /** @type {?} */ delay = options.delay ? resolveTimingValue(options.delay) : 0;\n        if (delay && (context.previousNode.type === 6 /* Style */ ||\n            (startTime == 0 && context.currentTimeline.getCurrentStyleProperties().length))) {\n            context.currentTimeline.snapshotCurrentStyles();\n            context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n        }\n        var /** @type {?} */ furthestTime = startTime;\n        var /** @type {?} */ elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n        context.currentQueryTotal = elms.length;\n        var /** @type {?} */ sameElementTimeline = null;\n        elms.forEach(function (element, i) {\n            context.currentQueryIndex = i;\n            var /** @type {?} */ innerContext = context.createSubContext(ast.options, element);\n            if (delay) {\n                innerContext.delayNextStep(delay);\n            }\n            if (element === context.element) {\n                sameElementTimeline = innerContext.currentTimeline;\n            }\n            visitDslNode(_this, ast.animation, innerContext);\n            // this is here just incase the inner steps only contain or end\n            // with a style() call (which is here to signal that this is a preparatory\n            // call to style an element before it is animated again)\n            innerContext.currentTimeline.applyStylesToKeyframe();\n            var /** @type {?} */ endTime = innerContext.currentTimeline.currentTime;\n            furthestTime = Math.max(furthestTime, endTime);\n        });\n        context.currentQueryIndex = 0;\n        context.currentQueryTotal = 0;\n        context.transformIntoNewTimeline(furthestTime);\n        if (sameElementTimeline) {\n            context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);\n            context.currentTimeline.snapshotCurrentStyles();\n        }\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitStagger = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ parentContext = /** @type {?} */ ((context.parentContext));\n        var /** @type {?} */ tl = context.currentTimeline;\n        var /** @type {?} */ timings = ast.timings;\n        var /** @type {?} */ duration = Math.abs(timings.duration);\n        var /** @type {?} */ maxTime = duration * (context.currentQueryTotal - 1);\n        var /** @type {?} */ delay = duration * context.currentQueryIndex;\n        var /** @type {?} */ staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;\n        switch (staggerTransformer) {\n            case 'reverse':\n                delay = maxTime - delay;\n                break;\n            case 'full':\n                delay = parentContext.currentStaggerTime;\n                break;\n        }\n        var /** @type {?} */ timeline = context.currentTimeline;\n        if (delay) {\n            timeline.delayNextStep(delay);\n        }\n        var /** @type {?} */ startingTime = timeline.currentTime;\n        visitDslNode(this, ast.animation, context);\n        context.previousNode = ast;\n        // time = duration + delay\n        // the reason why this computation is so complex is because\n        // the inner timeline may either have a delay value or a stretched\n        // keyframe depending on if a subtimeline is not used or is used.\n        parentContext.currentStaggerTime =\n            (tl.currentTime - startingTime) + (tl.startTime - parentContext.currentTimeline.startTime);\n    };\n    return AnimationTimelineBuilderVisitor;\n}());\nvar DEFAULT_NOOP_PREVIOUS_NODE = /** @type {?} */ ({});\nvar AnimationTimelineContext = /** @class */ (function () {\n    function AnimationTimelineContext(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {\n        this._driver = _driver;\n        this.element = element;\n        this.subInstructions = subInstructions;\n        this._enterClassName = _enterClassName;\n        this._leaveClassName = _leaveClassName;\n        this.errors = errors;\n        this.timelines = timelines;\n        this.parentContext = null;\n        this.currentAnimateTimings = null;\n        this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n        this.subContextCount = 0;\n        this.options = {};\n        this.currentQueryIndex = 0;\n        this.currentQueryTotal = 0;\n        this.currentStaggerTime = 0;\n        this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);\n        timelines.push(this.currentTimeline);\n    }\n    Object.defineProperty(AnimationTimelineContext.prototype, \"params\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this.options.params; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} options\n     * @param {?=} skipIfExists\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.updateOptions = /**\n     * @param {?} options\n     * @param {?=} skipIfExists\n     * @return {?}\n     */\n    function (options, skipIfExists) {\n        var _this = this;\n        if (!options)\n            return;\n        var /** @type {?} */ newOptions = /** @type {?} */ (options);\n        var /** @type {?} */ optionsToUpdate = this.options;\n        // NOTE: this will get patched up when other animation methods support duration overrides\n        if (newOptions.duration != null) {\n            (/** @type {?} */ (optionsToUpdate)).duration = resolveTimingValue(newOptions.duration);\n        }\n        if (newOptions.delay != null) {\n            optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n        }\n        var /** @type {?} */ newParams = newOptions.params;\n        if (newParams) {\n            var /** @type {?} */ paramsToUpdate_1 = /** @type {?} */ ((optionsToUpdate.params));\n            if (!paramsToUpdate_1) {\n                paramsToUpdate_1 = this.options.params = {};\n            }\n            Object.keys(newParams).forEach(function (name) {\n                if (!skipIfExists || !paramsToUpdate_1.hasOwnProperty(name)) {\n                    paramsToUpdate_1[name] = interpolateParams(newParams[name], paramsToUpdate_1, _this.errors);\n                }\n            });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype._copyOptions = /**\n     * @return {?}\n     */\n    function () {\n        var /** @type {?} */ options = {};\n        if (this.options) {\n            var /** @type {?} */ oldParams_1 = this.options.params;\n            if (oldParams_1) {\n                var /** @type {?} */ params_1 = options['params'] = {};\n                Object.keys(oldParams_1).forEach(function (name) { params_1[name] = oldParams_1[name]; });\n            }\n        }\n        return options;\n    };\n    /**\n     * @param {?=} options\n     * @param {?=} element\n     * @param {?=} newTime\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.createSubContext = /**\n     * @param {?=} options\n     * @param {?=} element\n     * @param {?=} newTime\n     * @return {?}\n     */\n    function (options, element, newTime) {\n        if (options === void 0) { options = null; }\n        var /** @type {?} */ target = element || this.element;\n        var /** @type {?} */ context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));\n        context.previousNode = this.previousNode;\n        context.currentAnimateTimings = this.currentAnimateTimings;\n        context.options = this._copyOptions();\n        context.updateOptions(options);\n        context.currentQueryIndex = this.currentQueryIndex;\n        context.currentQueryTotal = this.currentQueryTotal;\n        context.parentContext = this;\n        this.subContextCount++;\n        return context;\n    };\n    /**\n     * @param {?=} newTime\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.transformIntoNewTimeline = /**\n     * @param {?=} newTime\n     * @return {?}\n     */\n    function (newTime) {\n        this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n        this.currentTimeline = this.currentTimeline.fork(this.element, newTime);\n        this.timelines.push(this.currentTimeline);\n        return this.currentTimeline;\n    };\n    /**\n     * @param {?} instruction\n     * @param {?} duration\n     * @param {?} delay\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.appendInstructionToTimeline = /**\n     * @param {?} instruction\n     * @param {?} duration\n     * @param {?} delay\n     * @return {?}\n     */\n    function (instruction, duration, delay) {\n        var /** @type {?} */ updatedTimings = {\n            duration: duration != null ? duration : instruction.duration,\n            delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n            easing: ''\n        };\n        var /** @type {?} */ builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);\n        this.timelines.push(builder);\n        return updatedTimings;\n    };\n    /**\n     * @param {?} time\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.incrementTime = /**\n     * @param {?} time\n     * @return {?}\n     */\n    function (time) {\n        this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n    };\n    /**\n     * @param {?} delay\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.delayNextStep = /**\n     * @param {?} delay\n     * @return {?}\n     */\n    function (delay) {\n        // negative delays are not yet supported\n        if (delay > 0) {\n            this.currentTimeline.delayNextStep(delay);\n        }\n    };\n    /**\n     * @param {?} selector\n     * @param {?} originalSelector\n     * @param {?} limit\n     * @param {?} includeSelf\n     * @param {?} optional\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.invokeQuery = /**\n     * @param {?} selector\n     * @param {?} originalSelector\n     * @param {?} limit\n     * @param {?} includeSelf\n     * @param {?} optional\n     * @param {?} errors\n     * @return {?}\n     */\n    function (selector, originalSelector, limit, includeSelf, optional, errors) {\n        var /** @type {?} */ results = [];\n        if (includeSelf) {\n            results.push(this.element);\n        }\n        if (selector.length > 0) {\n            // if :self is only used then the selector is empty\n            selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);\n            selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);\n            var /** @type {?} */ multi = limit != 1;\n            var /** @type {?} */ elements = this._driver.query(this.element, selector, multi);\n            if (limit !== 0) {\n                elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) :\n                    elements.slice(0, limit);\n            }\n            results.push.apply(results, elements);\n        }\n        if (!optional && results.length == 0) {\n            errors.push(\"`query(\\\"\" + originalSelector + \"\\\")` returned zero elements. (Use `query(\\\"\" + originalSelector + \"\\\", { optional: true })` if you wish to allow this.)\");\n        }\n        return results;\n    };\n    return AnimationTimelineContext;\n}());\nvar TimelineBuilder = /** @class */ (function () {\n    function TimelineBuilder(_driver, element, startTime, _elementTimelineStylesLookup) {\n        this._driver = _driver;\n        this.element = element;\n        this.startTime = startTime;\n        this._elementTimelineStylesLookup = _elementTimelineStylesLookup;\n        this.duration = 0;\n        this._previousKeyframe = {};\n        this._currentKeyframe = {};\n        this._keyframes = new Map();\n        this._styleSummary = {};\n        this._pendingStyles = {};\n        this._backFill = {};\n        this._currentEmptyStepKeyframe = null;\n        if (!this._elementTimelineStylesLookup) {\n            this._elementTimelineStylesLookup = new Map();\n        }\n        this._localTimelineStyles = Object.create(this._backFill, {});\n        this._globalTimelineStyles = /** @type {?} */ ((this._elementTimelineStylesLookup.get(element)));\n        if (!this._globalTimelineStyles) {\n            this._globalTimelineStyles = this._localTimelineStyles;\n            this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);\n        }\n        this._loadKeyframe();\n    }\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.containsAnimation = /**\n     * @return {?}\n     */\n    function () {\n        switch (this._keyframes.size) {\n            case 0:\n                return false;\n            case 1:\n                return this.getCurrentStyleProperties().length > 0;\n            default:\n                return true;\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.getCurrentStyleProperties = /**\n     * @return {?}\n     */\n    function () { return Object.keys(this._currentKeyframe); };\n    Object.defineProperty(TimelineBuilder.prototype, \"currentTime\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this.startTime + this.duration; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} delay\n     * @return {?}\n     */\n    TimelineBuilder.prototype.delayNextStep = /**\n     * @param {?} delay\n     * @return {?}\n     */\n    function (delay) {\n        // in the event that a style() step is placed right before a stagger()\n        // and that style() step is the very first style() value in the animation\n        // then we need to make a copy of the keyframe [0, copy, 1] so that the delay\n        // properly applies the style() values to work with the stagger...\n        var /** @type {?} */ hasPreStyleStep = this._keyframes.size == 1 && Object.keys(this._pendingStyles).length;\n        if (this.duration || hasPreStyleStep) {\n            this.forwardTime(this.currentTime + delay);\n            if (hasPreStyleStep) {\n                this.snapshotCurrentStyles();\n            }\n        }\n        else {\n            this.startTime += delay;\n        }\n    };\n    /**\n     * @param {?} element\n     * @param {?=} currentTime\n     * @return {?}\n     */\n    TimelineBuilder.prototype.fork = /**\n     * @param {?} element\n     * @param {?=} currentTime\n     * @return {?}\n     */\n    function (element, currentTime) {\n        this.applyStylesToKeyframe();\n        return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype._loadKeyframe = /**\n     * @return {?}\n     */\n    function () {\n        if (this._currentKeyframe) {\n            this._previousKeyframe = this._currentKeyframe;\n        }\n        this._currentKeyframe = /** @type {?} */ ((this._keyframes.get(this.duration)));\n        if (!this._currentKeyframe) {\n            this._currentKeyframe = Object.create(this._backFill, {});\n            this._keyframes.set(this.duration, this._currentKeyframe);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.forwardFrame = /**\n     * @return {?}\n     */\n    function () {\n        this.duration += ONE_FRAME_IN_MILLISECONDS;\n        this._loadKeyframe();\n    };\n    /**\n     * @param {?} time\n     * @return {?}\n     */\n    TimelineBuilder.prototype.forwardTime = /**\n     * @param {?} time\n     * @return {?}\n     */\n    function (time) {\n        this.applyStylesToKeyframe();\n        this.duration = time;\n        this._loadKeyframe();\n    };\n    /**\n     * @param {?} prop\n     * @param {?} value\n     * @return {?}\n     */\n    TimelineBuilder.prototype._updateStyle = /**\n     * @param {?} prop\n     * @param {?} value\n     * @return {?}\n     */\n    function (prop, value) {\n        this._localTimelineStyles[prop] = value;\n        this._globalTimelineStyles[prop] = value;\n        this._styleSummary[prop] = { time: this.currentTime, value: value };\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.allowOnlyTimelineStyles = /**\n     * @return {?}\n     */\n    function () { return this._currentEmptyStepKeyframe !== this._currentKeyframe; };\n    /**\n     * @param {?} easing\n     * @return {?}\n     */\n    TimelineBuilder.prototype.applyEmptyStep = /**\n     * @param {?} easing\n     * @return {?}\n     */\n    function (easing) {\n        var _this = this;\n        if (easing) {\n            this._previousKeyframe['easing'] = easing;\n        }\n        // special case for animate(duration):\n        // all missing styles are filled with a `*` value then\n        // if any destination styles are filled in later on the same\n        // keyframe then they will override the overridden styles\n        // We use `_globalTimelineStyles` here because there may be\n        // styles in previous keyframes that are not present in this timeline\n        Object.keys(this._globalTimelineStyles).forEach(function (prop) {\n            _this._backFill[prop] = _this._globalTimelineStyles[prop] || __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"];\n            _this._currentKeyframe[prop] = __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"];\n        });\n        this._currentEmptyStepKeyframe = this._currentKeyframe;\n    };\n    /**\n     * @param {?} input\n     * @param {?} easing\n     * @param {?} errors\n     * @param {?=} options\n     * @return {?}\n     */\n    TimelineBuilder.prototype.setStyles = /**\n     * @param {?} input\n     * @param {?} easing\n     * @param {?} errors\n     * @param {?=} options\n     * @return {?}\n     */\n    function (input, easing, errors, options) {\n        var _this = this;\n        if (easing) {\n            this._previousKeyframe['easing'] = easing;\n        }\n        var /** @type {?} */ params = (options && options.params) || {};\n        var /** @type {?} */ styles = flattenStyles(input, this._globalTimelineStyles);\n        Object.keys(styles).forEach(function (prop) {\n            var /** @type {?} */ val = interpolateParams(styles[prop], params, errors);\n            _this._pendingStyles[prop] = val;\n            if (!_this._localTimelineStyles.hasOwnProperty(prop)) {\n                _this._backFill[prop] = _this._globalTimelineStyles.hasOwnProperty(prop) ?\n                    _this._globalTimelineStyles[prop] :\n                    __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"];\n            }\n            _this._updateStyle(prop, val);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.applyStylesToKeyframe = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        var /** @type {?} */ styles = this._pendingStyles;\n        var /** @type {?} */ props = Object.keys(styles);\n        if (props.length == 0)\n            return;\n        this._pendingStyles = {};\n        props.forEach(function (prop) {\n            var /** @type {?} */ val = styles[prop];\n            _this._currentKeyframe[prop] = val;\n        });\n        Object.keys(this._localTimelineStyles).forEach(function (prop) {\n            if (!_this._currentKeyframe.hasOwnProperty(prop)) {\n                _this._currentKeyframe[prop] = _this._localTimelineStyles[prop];\n            }\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.snapshotCurrentStyles = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        Object.keys(this._localTimelineStyles).forEach(function (prop) {\n            var /** @type {?} */ val = _this._localTimelineStyles[prop];\n            _this._pendingStyles[prop] = val;\n            _this._updateStyle(prop, val);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.getFinalKeyframe = /**\n     * @return {?}\n     */\n    function () { return this._keyframes.get(this.duration); };\n    Object.defineProperty(TimelineBuilder.prototype, \"properties\", {\n        get: /**\n         * @return {?}\n         */\n        function () {\n            var /** @type {?} */ properties = [];\n            for (var /** @type {?} */ prop in this._currentKeyframe) {\n                properties.push(prop);\n            }\n            return properties;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} timeline\n     * @return {?}\n     */\n    TimelineBuilder.prototype.mergeTimelineCollectedStyles = /**\n     * @param {?} timeline\n     * @return {?}\n     */\n    function (timeline) {\n        var _this = this;\n        Object.keys(timeline._styleSummary).forEach(function (prop) {\n            var /** @type {?} */ details0 = _this._styleSummary[prop];\n            var /** @type {?} */ details1 = timeline._styleSummary[prop];\n            if (!details0 || details1.time > details0.time) {\n                _this._updateStyle(prop, details1.value);\n            }\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.buildKeyframes = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        this.applyStylesToKeyframe();\n        var /** @type {?} */ preStyleProps = new Set();\n        var /** @type {?} */ postStyleProps = new Set();\n        var /** @type {?} */ isEmpty = this._keyframes.size === 1 && this.duration === 0;\n        var /** @type {?} */ finalKeyframes = [];\n        this._keyframes.forEach(function (keyframe, time) {\n            var /** @type {?} */ finalKeyframe = copyStyles(keyframe, true);\n            Object.keys(finalKeyframe).forEach(function (prop) {\n                var /** @type {?} */ value = finalKeyframe[prop];\n                if (value == __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"ɵPRE_STYLE\"]) {\n                    preStyleProps.add(prop);\n                }\n                else if (value == __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"]) {\n                    postStyleProps.add(prop);\n                }\n            });\n            if (!isEmpty) {\n                finalKeyframe['offset'] = time / _this.duration;\n            }\n            finalKeyframes.push(finalKeyframe);\n        });\n        var /** @type {?} */ preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];\n        var /** @type {?} */ postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : [];\n        // special case for a 0-second animation (which is designed just to place styles onscreen)\n        if (isEmpty) {\n            var /** @type {?} */ kf0 = finalKeyframes[0];\n            var /** @type {?} */ kf1 = copyObj(kf0);\n            kf0['offset'] = 0;\n            kf1['offset'] = 1;\n            finalKeyframes = [kf0, kf1];\n        }\n        return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);\n    };\n    return TimelineBuilder;\n}());\nvar SubTimelineBuilder = /** @class */ (function (_super) {\n    Object(__WEBPACK_IMPORTED_MODULE_1_tslib__[\"b\" /* __extends */])(SubTimelineBuilder, _super);\n    function SubTimelineBuilder(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe) {\n        if (_stretchStartingKeyframe === void 0) { _stretchStartingKeyframe = false; }\n        var _this = _super.call(this, driver, element, timings.delay) || this;\n        _this.element = element;\n        _this.keyframes = keyframes;\n        _this.preStyleProps = preStyleProps;\n        _this.postStyleProps = postStyleProps;\n        _this._stretchStartingKeyframe = _stretchStartingKeyframe;\n        _this.timings = { duration: timings.duration, delay: timings.delay, easing: timings.easing };\n        return _this;\n    }\n    /**\n     * @return {?}\n     */\n    SubTimelineBuilder.prototype.containsAnimation = /**\n     * @return {?}\n     */\n    function () { return this.keyframes.length > 1; };\n    /**\n     * @return {?}\n     */\n    SubTimelineBuilder.prototype.buildKeyframes = /**\n     * @return {?}\n     */\n    function () {\n        var /** @type {?} */ keyframes = this.keyframes;\n        var _a = this.timings, delay = _a.delay, duration = _a.duration, easing = _a.easing;\n        if (this._stretchStartingKeyframe && delay) {\n            var /** @type {?} */ newKeyframes = [];\n            var /** @type {?} */ totalTime = duration + delay;\n            var /** @type {?} */ startingGap = delay / totalTime;\n            // the original starting keyframe now starts once the delay is done\n            var /** @type {?} */ newFirstKeyframe = copyStyles(keyframes[0], false);\n            newFirstKeyframe['offset'] = 0;\n            newKeyframes.push(newFirstKeyframe);\n            var /** @type {?} */ oldFirstKeyframe = copyStyles(keyframes[0], false);\n            oldFirstKeyframe['offset'] = roundOffset(startingGap);\n            newKeyframes.push(oldFirstKeyframe);\n            /*\n                    When the keyframe is stretched then it means that the delay before the animation\n                    starts is gone. Instead the first keyframe is placed at the start of the animation\n                    and it is then copied to where it starts when the original delay is over. This basically\n                    means nothing animates during that delay, but the styles are still renderered. For this\n                    to work the original offset values that exist in the original keyframes must be \"warped\"\n                    so that they can take the new keyframe + delay into account.\n            \n                    delay=1000, duration=1000, keyframes = 0 .5 1\n            \n                    turns into\n            \n                    delay=0, duration=2000, keyframes = 0 .33 .66 1\n                   */\n            // offsets between 1 ... n -1 are all warped by the keyframe stretch\n            var /** @type {?} */ limit = keyframes.length - 1;\n            for (var /** @type {?} */ i = 1; i <= limit; i++) {\n                var /** @type {?} */ kf = copyStyles(keyframes[i], false);\n                var /** @type {?} */ oldOffset = /** @type {?} */ (kf['offset']);\n                var /** @type {?} */ timeAtKeyframe = delay + oldOffset * duration;\n                kf['offset'] = roundOffset(timeAtKeyframe / totalTime);\n                newKeyframes.push(kf);\n            }\n            // the new starting keyframe should be added at the start\n            duration = totalTime;\n            delay = 0;\n            easing = '';\n            keyframes = newKeyframes;\n        }\n        return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);\n    };\n    return SubTimelineBuilder;\n}(TimelineBuilder));\n/**\n * @param {?} offset\n * @param {?=} decimalPoints\n * @return {?}\n */\nfunction roundOffset(offset, decimalPoints) {\n    if (decimalPoints === void 0) { decimalPoints = 3; }\n    var /** @type {?} */ mult = Math.pow(10, decimalPoints - 1);\n    return Math.round(offset * mult) / mult;\n}\n/**\n * @param {?} input\n * @param {?} allStyles\n * @return {?}\n */\nfunction flattenStyles(input, allStyles) {\n    var /** @type {?} */ styles = {};\n    var /** @type {?} */ allProperties;\n    input.forEach(function (token) {\n        if (token === '*') {\n            allProperties = allProperties || Object.keys(allStyles);\n            allProperties.forEach(function (prop) { styles[prop] = __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"]; });\n        }\n        else {\n            copyStyles(/** @type {?} */ (token), false, styles);\n        }\n    });\n    return styles;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Animation = /** @class */ (function () {\n    function Animation(_driver, input) {\n        this._driver = _driver;\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = buildAnimationAst(_driver, input, errors);\n        if (errors.length) {\n            var /** @type {?} */ errorMessage = \"animation validation failed:\\n\" + errors.join(\"\\n\");\n            throw new Error(errorMessage);\n        }\n        this._animationAst = ast;\n    }\n    /**\n     * @param {?} element\n     * @param {?} startingStyles\n     * @param {?} destinationStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    Animation.prototype.buildTimelines = /**\n     * @param {?} element\n     * @param {?} startingStyles\n     * @param {?} destinationStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    function (element, startingStyles, destinationStyles, options, subInstructions) {\n        var /** @type {?} */ start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : /** @type {?} */ (startingStyles);\n        var /** @type {?} */ dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : /** @type {?} */ (destinationStyles);\n        var /** @type {?} */ errors = [];\n        subInstructions = subInstructions || new ElementInstructionMap();\n        var /** @type {?} */ result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);\n        if (errors.length) {\n            var /** @type {?} */ errorMessage = \"animation building failed:\\n\" + errors.join(\"\\n\");\n            throw new Error(errorMessage);\n        }\n        return result;\n    };\n    return Animation;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@experimental Animation support is experimental.\n * @abstract\n */\nvar AnimationStyleNormalizer = /** @class */ (function () {\n    function AnimationStyleNormalizer() {\n    }\n    return AnimationStyleNormalizer;\n}());\n/**\n * \\@experimental Animation support is experimental.\n */\nvar NoopAnimationStyleNormalizer = /** @class */ (function () {\n    function NoopAnimationStyleNormalizer() {\n    }\n    /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    NoopAnimationStyleNormalizer.prototype.normalizePropertyName = /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    function (propertyName, errors) { return propertyName; };\n    /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    NoopAnimationStyleNormalizer.prototype.normalizeStyleValue = /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    function (userProvidedProperty, normalizedProperty, value, errors) {\n        return /** @type {?} */ (value);\n    };\n    return NoopAnimationStyleNormalizer;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar WebAnimationsStyleNormalizer = /** @class */ (function (_super) {\n    Object(__WEBPACK_IMPORTED_MODULE_1_tslib__[\"b\" /* __extends */])(WebAnimationsStyleNormalizer, _super);\n    function WebAnimationsStyleNormalizer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    WebAnimationsStyleNormalizer.prototype.normalizePropertyName = /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    function (propertyName, errors) {\n        return dashCaseToCamelCase(propertyName);\n    };\n    /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    WebAnimationsStyleNormalizer.prototype.normalizeStyleValue = /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    function (userProvidedProperty, normalizedProperty, value, errors) {\n        var /** @type {?} */ unit = '';\n        var /** @type {?} */ strVal = value.toString().trim();\n        if (DIMENSIONAL_PROP_MAP[normalizedProperty] && value !== 0 && value !== '0') {\n            if (typeof value === 'number') {\n                unit = 'px';\n            }\n            else {\n                var /** @type {?} */ valAndSuffixMatch = value.match(/^[+-]?[\\d\\.]+([a-z]*)$/);\n                if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {\n                    errors.push(\"Please provide a CSS unit value for \" + userProvidedProperty + \":\" + value);\n                }\n            }\n        }\n        return strVal + unit;\n    };\n    return WebAnimationsStyleNormalizer;\n}(AnimationStyleNormalizer));\nvar DIMENSIONAL_PROP_MAP = makeBooleanMap('width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective'\n    .split(','));\n/**\n * @param {?} keys\n * @return {?}\n */\nfunction makeBooleanMap(keys) {\n    var /** @type {?} */ map = {};\n    keys.forEach(function (key) { return map[key] = true; });\n    return map;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @record\n */\n\n/**\n * @param {?} element\n * @param {?} triggerName\n * @param {?} fromState\n * @param {?} toState\n * @param {?} isRemovalTransition\n * @param {?} fromStyles\n * @param {?} toStyles\n * @param {?} timelines\n * @param {?} queriedElements\n * @param {?} preStyleProps\n * @param {?} postStyleProps\n * @param {?=} errors\n * @return {?}\n */\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, errors) {\n    return {\n        type: 0 /* TransitionAnimation */,\n        element: element,\n        triggerName: triggerName,\n        isRemovalTransition: isRemovalTransition,\n        fromState: fromState,\n        fromStyles: fromStyles,\n        toState: toState,\n        toStyles: toStyles,\n        timelines: timelines,\n        queriedElements: queriedElements,\n        preStyleProps: preStyleProps,\n        postStyleProps: postStyleProps,\n        errors: errors\n    };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar EMPTY_OBJECT = {};\nvar AnimationTransitionFactory = /** @class */ (function () {\n    function AnimationTransitionFactory(_triggerName, ast, _stateStyles) {\n        this._triggerName = _triggerName;\n        this.ast = ast;\n        this._stateStyles = _stateStyles;\n    }\n    /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.match = /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    function (currentState, nextState) {\n        return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState);\n    };\n    /**\n     * @param {?} stateName\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.buildStyles = /**\n     * @param {?} stateName\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    function (stateName, params, errors) {\n        var /** @type {?} */ backupStateStyler = this._stateStyles['*'];\n        var /** @type {?} */ stateStyler = this._stateStyles[stateName];\n        var /** @type {?} */ backupStyles = backupStateStyler ? backupStateStyler.buildStyles(params, errors) : {};\n        return stateStyler ? stateStyler.buildStyles(params, errors) : backupStyles;\n    };\n    /**\n     * @param {?} driver\n     * @param {?} element\n     * @param {?} currentState\n     * @param {?} nextState\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @param {?=} currentOptions\n     * @param {?=} nextOptions\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.build = /**\n     * @param {?} driver\n     * @param {?} element\n     * @param {?} currentState\n     * @param {?} nextState\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @param {?=} currentOptions\n     * @param {?=} nextOptions\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    function (driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions) {\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n        var /** @type {?} */ currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n        var /** @type {?} */ currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n        var /** @type {?} */ nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n        var /** @type {?} */ nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n        var /** @type {?} */ queriedElements = new Set();\n        var /** @type {?} */ preStyleMap = new Map();\n        var /** @type {?} */ postStyleMap = new Map();\n        var /** @type {?} */ isRemoval = nextState === 'void';\n        var /** @type {?} */ animationOptions = { params: Object(__WEBPACK_IMPORTED_MODULE_1_tslib__[\"a\" /* __assign */])({}, transitionAnimationParams, nextAnimationParams) };\n        var /** @type {?} */ timelines = buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n        if (errors.length) {\n            return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, errors);\n        }\n        timelines.forEach(function (tl) {\n            var /** @type {?} */ elm = tl.element;\n            var /** @type {?} */ preProps = getOrSetAsInMap(preStyleMap, elm, {});\n            tl.preStyleProps.forEach(function (prop) { return preProps[prop] = true; });\n            var /** @type {?} */ postProps = getOrSetAsInMap(postStyleMap, elm, {});\n            tl.postStyleProps.forEach(function (prop) { return postProps[prop] = true; });\n            if (elm !== element) {\n                queriedElements.add(elm);\n            }\n        });\n        var /** @type {?} */ queriedElementsList = iteratorToArray(queriedElements.values());\n        return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap);\n    };\n    return AnimationTransitionFactory;\n}());\n/**\n * @param {?} matchFns\n * @param {?} currentState\n * @param {?} nextState\n * @return {?}\n */\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState) {\n    return matchFns.some(function (fn) { return fn(currentState, nextState); });\n}\nvar AnimationStateStyles = /** @class */ (function () {\n    function AnimationStateStyles(styles, defaultParams) {\n        this.styles = styles;\n        this.defaultParams = defaultParams;\n    }\n    /**\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationStateStyles.prototype.buildStyles = /**\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    function (params, errors) {\n        var /** @type {?} */ finalStyles = {};\n        var /** @type {?} */ combinedParams = copyObj(this.defaultParams);\n        Object.keys(params).forEach(function (key) {\n            var /** @type {?} */ value = params[key];\n            if (value != null) {\n                combinedParams[key] = value;\n            }\n        });\n        this.styles.styles.forEach(function (value) {\n            if (typeof value !== 'string') {\n                var /** @type {?} */ styleObj_1 = /** @type {?} */ (value);\n                Object.keys(styleObj_1).forEach(function (prop) {\n                    var /** @type {?} */ val = styleObj_1[prop];\n                    if (val.length > 1) {\n                        val = interpolateParams(val, combinedParams, errors);\n                    }\n                    finalStyles[prop] = val;\n                });\n            }\n        });\n        return finalStyles;\n    };\n    return AnimationStateStyles;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} ast\n * @return {?}\n */\nfunction buildTrigger(name, ast) {\n    return new AnimationTrigger(name, ast);\n}\n/**\n * \\@experimental Animation support is experimental.\n */\nvar AnimationTrigger = /** @class */ (function () {\n    function AnimationTrigger(name, ast) {\n        var _this = this;\n        this.name = name;\n        this.ast = ast;\n        this.transitionFactories = [];\n        this.states = {};\n        ast.states.forEach(function (ast) {\n            var /** @type {?} */ defaultParams = (ast.options && ast.options.params) || {};\n            _this.states[ast.name] = new AnimationStateStyles(ast.style, defaultParams);\n        });\n        balanceProperties(this.states, 'true', '1');\n        balanceProperties(this.states, 'false', '0');\n        ast.transitions.forEach(function (ast) {\n            _this.transitionFactories.push(new AnimationTransitionFactory(name, ast, _this.states));\n        });\n        this.fallbackTransition = createFallbackTransition(name, this.states);\n    }\n    Object.defineProperty(AnimationTrigger.prototype, \"containsQueries\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this.ast.queryCount > 0; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    AnimationTrigger.prototype.matchTransition = /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    function (currentState, nextState) {\n        var /** @type {?} */ entry = this.transitionFactories.find(function (f) { return f.match(currentState, nextState); });\n        return entry || null;\n    };\n    /**\n     * @param {?} currentState\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTrigger.prototype.matchStyles = /**\n     * @param {?} currentState\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    function (currentState, params, errors) {\n        return this.fallbackTransition.buildStyles(currentState, params, errors);\n    };\n    return AnimationTrigger;\n}());\n/**\n * @param {?} triggerName\n * @param {?} states\n * @return {?}\n */\nfunction createFallbackTransition(triggerName, states) {\n    var /** @type {?} */ matchers = [function (fromState, toState) { return true; }];\n    var /** @type {?} */ animation = { type: 2 /* Sequence */, steps: [], options: null };\n    var /** @type {?} */ transition = {\n        type: 1 /* Transition */,\n        animation: animation,\n        matchers: matchers,\n        options: null,\n        queryCount: 0,\n        depCount: 0\n    };\n    return new AnimationTransitionFactory(triggerName, transition, states);\n}\n/**\n * @param {?} obj\n * @param {?} key1\n * @param {?} key2\n * @return {?}\n */\nfunction balanceProperties(obj, key1, key2) {\n    if (obj.hasOwnProperty(key1)) {\n        if (!obj.hasOwnProperty(key2)) {\n            obj[key2] = obj[key1];\n        }\n    }\n    else if (obj.hasOwnProperty(key2)) {\n        obj[key1] = obj[key2];\n    }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nvar TimelineAnimationEngine = /** @class */ (function () {\n    function TimelineAnimationEngine(_driver, _normalizer) {\n        this._driver = _driver;\n        this._normalizer = _normalizer;\n        this._animations = {};\n        this._playersById = {};\n        this.players = [];\n    }\n    /**\n     * @param {?} id\n     * @param {?} metadata\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.register = /**\n     * @param {?} id\n     * @param {?} metadata\n     * @return {?}\n     */\n    function (id, metadata) {\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = buildAnimationAst(this._driver, metadata, errors);\n        if (errors.length) {\n            throw new Error(\"Unable to build the animation due to the following errors: \" + errors.join(\"\\n\"));\n        }\n        else {\n            this._animations[id] = ast;\n        }\n    };\n    /**\n     * @param {?} i\n     * @param {?} preStyles\n     * @param {?=} postStyles\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype._buildPlayer = /**\n     * @param {?} i\n     * @param {?} preStyles\n     * @param {?=} postStyles\n     * @return {?}\n     */\n    function (i, preStyles, postStyles) {\n        var /** @type {?} */ element = i.element;\n        var /** @type {?} */ keyframes = normalizeKeyframes(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);\n        return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, []);\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.create = /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    function (id, element, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = this._animations[id];\n        var /** @type {?} */ instructions;\n        var /** @type {?} */ autoStylesMap = new Map();\n        if (ast) {\n            instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, {}, {}, options, EMPTY_INSTRUCTION_MAP, errors);\n            instructions.forEach(function (inst) {\n                var /** @type {?} */ styles = getOrSetAsInMap(autoStylesMap, inst.element, {});\n                inst.postStyleProps.forEach(function (prop) { return styles[prop] = null; });\n            });\n        }\n        else {\n            errors.push('The requested animation doesn\\'t exist or has already been destroyed');\n            instructions = [];\n        }\n        if (errors.length) {\n            throw new Error(\"Unable to create the animation due to the following errors: \" + errors.join(\"\\n\"));\n        }\n        autoStylesMap.forEach(function (styles, element) {\n            Object.keys(styles).forEach(function (prop) { styles[prop] = _this._driver.computeStyle(element, prop, __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"]); });\n        });\n        var /** @type {?} */ players = instructions.map(function (i) {\n            var /** @type {?} */ styles = autoStylesMap.get(i.element);\n            return _this._buildPlayer(i, {}, styles);\n        });\n        var /** @type {?} */ player = optimizeGroupPlayer(players);\n        this._playersById[id] = player;\n        player.onDestroy(function () { return _this.destroy(id); });\n        this.players.push(player);\n        return player;\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.destroy = /**\n     * @param {?} id\n     * @return {?}\n     */\n    function (id) {\n        var /** @type {?} */ player = this._getPlayer(id);\n        player.destroy();\n        delete this._playersById[id];\n        var /** @type {?} */ index = this.players.indexOf(player);\n        if (index >= 0) {\n            this.players.splice(index, 1);\n        }\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype._getPlayer = /**\n     * @param {?} id\n     * @return {?}\n     */\n    function (id) {\n        var /** @type {?} */ player = this._playersById[id];\n        if (!player) {\n            throw new Error(\"Unable to find the timeline player referenced by \" + id);\n        }\n        return player;\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.listen = /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    function (id, element, eventName, callback) {\n        // triggerName, fromState, toState are all ignored for timeline animations\n        var /** @type {?} */ baseEvent = makeAnimationEvent(element, '', '', '');\n        listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n        return function () { };\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} command\n     * @param {?} args\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.command = /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} command\n     * @param {?} args\n     * @return {?}\n     */\n    function (id, element, command, args) {\n        if (command == 'register') {\n            this.register(id, /** @type {?} */ (args[0]));\n            return;\n        }\n        if (command == 'create') {\n            var /** @type {?} */ options = /** @type {?} */ ((args[0] || {}));\n            this.create(id, element, options);\n            return;\n        }\n        var /** @type {?} */ player = this._getPlayer(id);\n        switch (command) {\n            case 'play':\n                player.play();\n                break;\n            case 'pause':\n                player.pause();\n                break;\n            case 'reset':\n                player.reset();\n                break;\n            case 'restart':\n                player.restart();\n                break;\n            case 'finish':\n                player.finish();\n                break;\n            case 'init':\n                player.init();\n                break;\n            case 'setPosition':\n                player.setPosition(parseFloat(/** @type {?} */ (args[0])));\n                break;\n            case 'destroy':\n                this.destroy(id);\n                break;\n        }\n    };\n    return TimelineAnimationEngine;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar QUEUED_CLASSNAME = 'ng-animate-queued';\nvar QUEUED_SELECTOR = '.ng-animate-queued';\nvar DISABLED_CLASSNAME = 'ng-animate-disabled';\nvar DISABLED_SELECTOR = '.ng-animate-disabled';\nvar STAR_CLASSNAME = 'ng-star-inserted';\nvar STAR_SELECTOR = '.ng-star-inserted';\nvar EMPTY_PLAYER_ARRAY = [];\nvar NULL_REMOVAL_STATE = {\n    namespaceId: '',\n    setForRemoval: null,\n    hasAnimation: false,\n    removedBeforeQueried: false\n};\nvar NULL_REMOVED_QUERIED_STATE = {\n    namespaceId: '',\n    setForRemoval: null,\n    hasAnimation: false,\n    removedBeforeQueried: true\n};\n/**\n * @record\n */\n\nvar REMOVAL_FLAG = '__ng_removed';\n/**\n * @record\n */\n\nvar StateValue = /** @class */ (function () {\n    function StateValue(input, namespaceId) {\n        if (namespaceId === void 0) { namespaceId = ''; }\n        this.namespaceId = namespaceId;\n        var /** @type {?} */ isObj = input && input.hasOwnProperty('value');\n        var /** @type {?} */ value = isObj ? input['value'] : input;\n        this.value = normalizeTriggerValue(value);\n        if (isObj) {\n            var /** @type {?} */ options = copyObj(/** @type {?} */ (input));\n            delete options['value'];\n            this.options = /** @type {?} */ (options);\n        }\n        else {\n            this.options = {};\n        }\n        if (!this.options.params) {\n            this.options.params = {};\n        }\n    }\n    Object.defineProperty(StateValue.prototype, \"params\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return /** @type {?} */ (this.options.params); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} options\n     * @return {?}\n     */\n    StateValue.prototype.absorbOptions = /**\n     * @param {?} options\n     * @return {?}\n     */\n    function (options) {\n        var /** @type {?} */ newParams = options.params;\n        if (newParams) {\n            var /** @type {?} */ oldParams_1 = /** @type {?} */ ((this.options.params));\n            Object.keys(newParams).forEach(function (prop) {\n                if (oldParams_1[prop] == null) {\n                    oldParams_1[prop] = newParams[prop];\n                }\n            });\n        }\n    };\n    return StateValue;\n}());\nvar VOID_VALUE = 'void';\nvar DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nvar DELETED_STATE_VALUE = new StateValue('DELETED');\nvar AnimationTransitionNamespace = /** @class */ (function () {\n    function AnimationTransitionNamespace(id, hostElement, _engine) {\n        this.id = id;\n        this.hostElement = hostElement;\n        this._engine = _engine;\n        this.players = [];\n        this._triggers = {};\n        this._queue = [];\n        this._elementListeners = new Map();\n        this._hostClassName = 'ng-tns-' + id;\n        addClass(hostElement, this._hostClassName);\n    }\n    /**\n     * @param {?} element\n     * @param {?} name\n     * @param {?} phase\n     * @param {?} callback\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.listen = /**\n     * @param {?} element\n     * @param {?} name\n     * @param {?} phase\n     * @param {?} callback\n     * @return {?}\n     */\n    function (element, name, phase, callback) {\n        var _this = this;\n        if (!this._triggers.hasOwnProperty(name)) {\n            throw new Error(\"Unable to listen on the animation trigger event \\\"\" + phase + \"\\\" because the animation trigger \\\"\" + name + \"\\\" doesn't exist!\");\n        }\n        if (phase == null || phase.length == 0) {\n            throw new Error(\"Unable to listen on the animation trigger \\\"\" + name + \"\\\" because the provided event is undefined!\");\n        }\n        if (!isTriggerEventValid(phase)) {\n            throw new Error(\"The provided animation trigger event \\\"\" + phase + \"\\\" for the animation trigger \\\"\" + name + \"\\\" is not supported!\");\n        }\n        var /** @type {?} */ listeners = getOrSetAsInMap(this._elementListeners, element, []);\n        var /** @type {?} */ data = { name: name, phase: phase, callback: callback };\n        listeners.push(data);\n        var /** @type {?} */ triggersWithStates = getOrSetAsInMap(this._engine.statesByElement, element, {});\n        if (!triggersWithStates.hasOwnProperty(name)) {\n            addClass(element, NG_TRIGGER_CLASSNAME);\n            addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);\n            triggersWithStates[name] = DEFAULT_STATE_VALUE;\n        }\n        return function () {\n            // the event listener is removed AFTER the flush has occurred such\n            // that leave animations callbacks can fire (otherwise if the node\n            // is removed in between then the listeners would be deregistered)\n            // the event listener is removed AFTER the flush has occurred such\n            // that leave animations callbacks can fire (otherwise if the node\n            // is removed in between then the listeners would be deregistered)\n            _this._engine.afterFlush(function () {\n                var /** @type {?} */ index = listeners.indexOf(data);\n                if (index >= 0) {\n                    listeners.splice(index, 1);\n                }\n                if (!_this._triggers[name]) {\n                    delete triggersWithStates[name];\n                }\n            });\n        };\n    };\n    /**\n     * @param {?} name\n     * @param {?} ast\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.register = /**\n     * @param {?} name\n     * @param {?} ast\n     * @return {?}\n     */\n    function (name, ast) {\n        if (this._triggers[name]) {\n            // throw\n            return false;\n        }\n        else {\n            this._triggers[name] = ast;\n            return true;\n        }\n    };\n    /**\n     * @param {?} name\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype._getTrigger = /**\n     * @param {?} name\n     * @return {?}\n     */\n    function (name) {\n        var /** @type {?} */ trigger = this._triggers[name];\n        if (!trigger) {\n            throw new Error(\"The provided animation trigger \\\"\" + name + \"\\\" has not been registered!\");\n        }\n        return trigger;\n    };\n    /**\n     * @param {?} element\n     * @param {?} triggerName\n     * @param {?} value\n     * @param {?=} defaultToFallback\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.trigger = /**\n     * @param {?} element\n     * @param {?} triggerName\n     * @param {?} value\n     * @param {?=} defaultToFallback\n     * @return {?}\n     */\n    function (element, triggerName, value, defaultToFallback) {\n        var _this = this;\n        if (defaultToFallback === void 0) { defaultToFallback = true; }\n        var /** @type {?} */ trigger = this._getTrigger(triggerName);\n        var /** @type {?} */ player = new TransitionAnimationPlayer(this.id, triggerName, element);\n        var /** @type {?} */ triggersWithStates = this._engine.statesByElement.get(element);\n        if (!triggersWithStates) {\n            addClass(element, NG_TRIGGER_CLASSNAME);\n            addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);\n            this._engine.statesByElement.set(element, triggersWithStates = {});\n        }\n        var /** @type {?} */ fromState = triggersWithStates[triggerName];\n        var /** @type {?} */ toState = new StateValue(value, this.id);\n        var /** @type {?} */ isObj = value && value.hasOwnProperty('value');\n        if (!isObj && fromState) {\n            toState.absorbOptions(fromState.options);\n        }\n        triggersWithStates[triggerName] = toState;\n        if (!fromState) {\n            fromState = DEFAULT_STATE_VALUE;\n        }\n        else if (fromState === DELETED_STATE_VALUE) {\n            return player;\n        }\n        var /** @type {?} */ isRemoval = toState.value === VOID_VALUE;\n        // normally this isn't reached by here, however, if an object expression\n        // is passed in then it may be a new object each time. Comparing the value\n        // is important since that will stay the same despite there being a new object.\n        // The removal arc here is special cased because the same element is triggered\n        // twice in the event that it contains animations on the outer/inner portions\n        // of the host container\n        if (!isRemoval && fromState.value === toState.value) {\n            // this means that despite the value not changing, some inner params\n            // have changed which means that the animation final styles need to be applied\n            if (!objEquals(fromState.params, toState.params)) {\n                var /** @type {?} */ errors = [];\n                var /** @type {?} */ fromStyles_1 = trigger.matchStyles(fromState.value, fromState.params, errors);\n                var /** @type {?} */ toStyles_1 = trigger.matchStyles(toState.value, toState.params, errors);\n                if (errors.length) {\n                    this._engine.reportError(errors);\n                }\n                else {\n                    this._engine.afterFlush(function () {\n                        eraseStyles(element, fromStyles_1);\n                        setStyles(element, toStyles_1);\n                    });\n                }\n            }\n            return;\n        }\n        var /** @type {?} */ playersOnElement = getOrSetAsInMap(this._engine.playersByElement, element, []);\n        playersOnElement.forEach(function (player) {\n            // only remove the player if it is queued on the EXACT same trigger/namespace\n            // we only also deal with queued players here because if the animation has\n            // started then we want to keep the player alive until the flush happens\n            // (which is where the previousPlayers are passed into the new palyer)\n            if (player.namespaceId == _this.id && player.triggerName == triggerName && player.queued) {\n                player.destroy();\n            }\n        });\n        var /** @type {?} */ transition = trigger.matchTransition(fromState.value, toState.value);\n        var /** @type {?} */ isFallbackTransition = false;\n        if (!transition) {\n            if (!defaultToFallback)\n                return;\n            transition = trigger.fallbackTransition;\n            isFallbackTransition = true;\n        }\n        this._engine.totalQueuedPlayers++;\n        this._queue.push({ element: element, triggerName: triggerName, transition: transition, fromState: fromState, toState: toState, player: player, isFallbackTransition: isFallbackTransition });\n        if (!isFallbackTransition) {\n            addClass(element, QUEUED_CLASSNAME);\n            player.onStart(function () { removeClass(element, QUEUED_CLASSNAME); });\n        }\n        player.onDone(function () {\n            var /** @type {?} */ index = _this.players.indexOf(player);\n            if (index >= 0) {\n                _this.players.splice(index, 1);\n            }\n            var /** @type {?} */ players = _this._engine.playersByElement.get(element);\n            if (players) {\n                var /** @type {?} */ index_1 = players.indexOf(player);\n                if (index_1 >= 0) {\n                    players.splice(index_1, 1);\n                }\n            }\n        });\n        this.players.push(player);\n        playersOnElement.push(player);\n        return player;\n    };\n    /**\n     * @param {?} name\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.deregister = /**\n     * @param {?} name\n     * @return {?}\n     */\n    function (name) {\n        var _this = this;\n        delete this._triggers[name];\n        this._engine.statesByElement.forEach(function (stateMap, element) { delete stateMap[name]; });\n        this._elementListeners.forEach(function (listeners, element) {\n            _this._elementListeners.set(element, listeners.filter(function (entry) { return entry.name != name; }));\n        });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.clearElementCache = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        this._engine.statesByElement.delete(element);\n        this._elementListeners.delete(element);\n        var /** @type {?} */ elementPlayers = this._engine.playersByElement.get(element);\n        if (elementPlayers) {\n            elementPlayers.forEach(function (player) { return player.destroy(); });\n            this._engine.playersByElement.delete(element);\n        }\n    };\n    /**\n     * @param {?} rootElement\n     * @param {?} context\n     * @param {?=} animate\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype._signalRemovalForInnerTriggers = /**\n     * @param {?} rootElement\n     * @param {?} context\n     * @param {?=} animate\n     * @return {?}\n     */\n    function (rootElement, context, animate) {\n        var _this = this;\n        if (animate === void 0) { animate = false; }\n        // emulate a leave animation for all inner nodes within this node.\n        // If there are no animations found for any of the nodes then clear the cache\n        // for the element.\n        this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true).forEach(function (elm) {\n            // this means that an inner remove() operation has already kicked off\n            // the animation on this element...\n            if (elm[REMOVAL_FLAG])\n                return;\n            var /** @type {?} */ namespaces = _this._engine.fetchNamespacesByElement(elm);\n            if (namespaces.size) {\n                namespaces.forEach(function (ns) { return ns.triggerLeaveAnimation(elm, context, false, true); });\n            }\n            else {\n                _this.clearElementCache(elm);\n            }\n        });\n    };\n    /**\n     * @param {?} element\n     * @param {?} context\n     * @param {?=} destroyAfterComplete\n     * @param {?=} defaultToFallback\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.triggerLeaveAnimation = /**\n     * @param {?} element\n     * @param {?} context\n     * @param {?=} destroyAfterComplete\n     * @param {?=} defaultToFallback\n     * @return {?}\n     */\n    function (element, context, destroyAfterComplete, defaultToFallback) {\n        var _this = this;\n        var /** @type {?} */ triggerStates = this._engine.statesByElement.get(element);\n        if (triggerStates) {\n            var /** @type {?} */ players_1 = [];\n            Object.keys(triggerStates).forEach(function (triggerName) {\n                // this check is here in the event that an element is removed\n                // twice (both on the host level and the component level)\n                if (_this._triggers[triggerName]) {\n                    var /** @type {?} */ player = _this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);\n                    if (player) {\n                        players_1.push(player);\n                    }\n                }\n            });\n            if (players_1.length) {\n                this._engine.markElementAsRemoved(this.id, element, true, context);\n                if (destroyAfterComplete) {\n                    optimizeGroupPlayer(players_1).onDone(function () { return _this._engine.processLeaveNode(element); });\n                }\n                return true;\n            }\n        }\n        return false;\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.prepareLeaveAnimationListeners = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var _this = this;\n        var /** @type {?} */ listeners = this._elementListeners.get(element);\n        if (listeners) {\n            var /** @type {?} */ visitedTriggers_1 = new Set();\n            listeners.forEach(function (listener) {\n                var /** @type {?} */ triggerName = listener.name;\n                if (visitedTriggers_1.has(triggerName))\n                    return;\n                visitedTriggers_1.add(triggerName);\n                var /** @type {?} */ trigger = _this._triggers[triggerName];\n                var /** @type {?} */ transition = trigger.fallbackTransition;\n                var /** @type {?} */ elementStates = /** @type {?} */ ((_this._engine.statesByElement.get(element)));\n                var /** @type {?} */ fromState = elementStates[triggerName] || DEFAULT_STATE_VALUE;\n                var /** @type {?} */ toState = new StateValue(VOID_VALUE);\n                var /** @type {?} */ player = new TransitionAnimationPlayer(_this.id, triggerName, element);\n                _this._engine.totalQueuedPlayers++;\n                _this._queue.push({\n                    element: element,\n                    triggerName: triggerName,\n                    transition: transition,\n                    fromState: fromState,\n                    toState: toState,\n                    player: player,\n                    isFallbackTransition: true\n                });\n            });\n        }\n    };\n    /**\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.removeNode = /**\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    function (element, context) {\n        var _this = this;\n        var /** @type {?} */ engine = this._engine;\n        if (element.childElementCount) {\n            this._signalRemovalForInnerTriggers(element, context, true);\n        }\n        // this means that a * => VOID animation was detected and kicked off\n        if (this.triggerLeaveAnimation(element, context, true))\n            return;\n        // find the player that is animating and make sure that the\n        // removal is delayed until that player has completed\n        var /** @type {?} */ containsPotentialParentTransition = false;\n        if (engine.totalAnimations) {\n            var /** @type {?} */ currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];\n            // when this `if statement` does not continue forward it means that\n            // a previous animation query has selected the current element and\n            // is animating it. In this situation want to continue fowards and\n            // allow the element to be queued up for animation later.\n            if (currentPlayers && currentPlayers.length) {\n                containsPotentialParentTransition = true;\n            }\n            else {\n                var /** @type {?} */ parent_1 = element;\n                while (parent_1 = parent_1.parentNode) {\n                    var /** @type {?} */ triggers = engine.statesByElement.get(parent_1);\n                    if (triggers) {\n                        containsPotentialParentTransition = true;\n                        break;\n                    }\n                }\n            }\n        }\n        // at this stage we know that the element will either get removed\n        // during flush or will be picked up by a parent query. Either way\n        // we need to fire the listeners for this element when it DOES get\n        // removed (once the query parent animation is done or after flush)\n        this.prepareLeaveAnimationListeners(element);\n        // whether or not a parent has an animation we need to delay the deferral of the leave\n        // operation until we have more information (which we do after flush() has been called)\n        if (containsPotentialParentTransition) {\n            engine.markElementAsRemoved(this.id, element, false, context);\n        }\n        else {\n            // we do this after the flush has occurred such\n            // that the callbacks can be fired\n            engine.afterFlush(function () { return _this.clearElementCache(element); });\n            engine.destroyInnerAnimations(element);\n            engine._onRemovalComplete(element, context);\n        }\n    };\n    /**\n     * @param {?} element\n     * @param {?} parent\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.insertNode = /**\n     * @param {?} element\n     * @param {?} parent\n     * @return {?}\n     */\n    function (element, parent) { addClass(element, this._hostClassName); };\n    /**\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.drainQueuedTransitions = /**\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    function (microtaskId) {\n        var _this = this;\n        var /** @type {?} */ instructions = [];\n        this._queue.forEach(function (entry) {\n            var /** @type {?} */ player = entry.player;\n            if (player.destroyed)\n                return;\n            var /** @type {?} */ element = entry.element;\n            var /** @type {?} */ listeners = _this._elementListeners.get(element);\n            if (listeners) {\n                listeners.forEach(function (listener) {\n                    if (listener.name == entry.triggerName) {\n                        var /** @type {?} */ baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n                        (/** @type {?} */ (baseEvent))['_data'] = microtaskId;\n                        listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n                    }\n                });\n            }\n            if (player.markedForDestroy) {\n                _this._engine.afterFlush(function () {\n                    // now we can destroy the element properly since the event listeners have\n                    // been bound to the player\n                    player.destroy();\n                });\n            }\n            else {\n                instructions.push(entry);\n            }\n        });\n        this._queue = [];\n        return instructions.sort(function (a, b) {\n            // if depCount == 0 them move to front\n            // otherwise if a contains b then move back\n            var /** @type {?} */ d0 = a.transition.ast.depCount;\n            var /** @type {?} */ d1 = b.transition.ast.depCount;\n            if (d0 == 0 || d1 == 0) {\n                return d0 - d1;\n            }\n            return _this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;\n        });\n    };\n    /**\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.destroy = /**\n     * @param {?} context\n     * @return {?}\n     */\n    function (context) {\n        this.players.forEach(function (p) { return p.destroy(); });\n        this._signalRemovalForInnerTriggers(this.hostElement, context);\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.elementContainsData = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var /** @type {?} */ containsData = false;\n        if (this._elementListeners.has(element))\n            containsData = true;\n        containsData =\n            (this._queue.find(function (entry) { return entry.element === element; }) ? true : false) || containsData;\n        return containsData;\n    };\n    return AnimationTransitionNamespace;\n}());\n/**\n * @record\n */\n\nvar TransitionAnimationEngine = /** @class */ (function () {\n    function TransitionAnimationEngine(driver, _normalizer) {\n        this.driver = driver;\n        this._normalizer = _normalizer;\n        this.players = [];\n        this.newHostElements = new Map();\n        this.playersByElement = new Map();\n        this.playersByQueriedElement = new Map();\n        this.statesByElement = new Map();\n        this.disabledNodes = new Set();\n        this.totalAnimations = 0;\n        this.totalQueuedPlayers = 0;\n        this._namespaceLookup = {};\n        this._namespaceList = [];\n        this._flushFns = [];\n        this._whenQuietFns = [];\n        this.namespacesByHostElement = new Map();\n        this.collectedEnterElements = [];\n        this.collectedLeaveElements = [];\n        this.onRemovalComplete = function (element, context) { };\n    }\n    /** @internal */\n    /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._onRemovalComplete = /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    function (element, context) { this.onRemovalComplete(element, context); };\n    Object.defineProperty(TransitionAnimationEngine.prototype, \"queuedPlayers\", {\n        get: /**\n         * @return {?}\n         */\n        function () {\n            var /** @type {?} */ players = [];\n            this._namespaceList.forEach(function (ns) {\n                ns.players.forEach(function (player) {\n                    if (player.queued) {\n                        players.push(player);\n                    }\n                });\n            });\n            return players;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.createNamespace = /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    function (namespaceId, hostElement) {\n        var /** @type {?} */ ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);\n        if (hostElement.parentNode) {\n            this._balanceNamespaceList(ns, hostElement);\n        }\n        else {\n            // defer this later until flush during when the host element has\n            // been inserted so that we know exactly where to place it in\n            // the namespace list\n            this.newHostElements.set(hostElement, ns);\n            // given that this host element is apart of the animation code, it\n            // may or may not be inserted by a parent node that is an of an\n            // animation renderer type. If this happens then we can still have\n            // access to this item when we query for :enter nodes. If the parent\n            // is a renderer then the set data-structure will normalize the entry\n            this.collectEnterElement(hostElement);\n        }\n        return this._namespaceLookup[namespaceId] = ns;\n    };\n    /**\n     * @param {?} ns\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._balanceNamespaceList = /**\n     * @param {?} ns\n     * @param {?} hostElement\n     * @return {?}\n     */\n    function (ns, hostElement) {\n        var /** @type {?} */ limit = this._namespaceList.length - 1;\n        if (limit >= 0) {\n            var /** @type {?} */ found = false;\n            for (var /** @type {?} */ i = limit; i >= 0; i--) {\n                var /** @type {?} */ nextNamespace = this._namespaceList[i];\n                if (this.driver.containsElement(nextNamespace.hostElement, hostElement)) {\n                    this._namespaceList.splice(i + 1, 0, ns);\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                this._namespaceList.splice(0, 0, ns);\n            }\n        }\n        else {\n            this._namespaceList.push(ns);\n        }\n        this.namespacesByHostElement.set(hostElement, ns);\n        return ns;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.register = /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    function (namespaceId, hostElement) {\n        var /** @type {?} */ ns = this._namespaceLookup[namespaceId];\n        if (!ns) {\n            ns = this.createNamespace(namespaceId, hostElement);\n        }\n        return ns;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} name\n     * @param {?} trigger\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.registerTrigger = /**\n     * @param {?} namespaceId\n     * @param {?} name\n     * @param {?} trigger\n     * @return {?}\n     */\n    function (namespaceId, name, trigger) {\n        var /** @type {?} */ ns = this._namespaceLookup[namespaceId];\n        if (ns && ns.register(name, trigger)) {\n            this.totalAnimations++;\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.destroy = /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    function (namespaceId, context) {\n        var _this = this;\n        if (!namespaceId)\n            return;\n        var /** @type {?} */ ns = this._fetchNamespace(namespaceId);\n        this.afterFlush(function () {\n            _this.namespacesByHostElement.delete(ns.hostElement);\n            delete _this._namespaceLookup[namespaceId];\n            var /** @type {?} */ index = _this._namespaceList.indexOf(ns);\n            if (index >= 0) {\n                _this._namespaceList.splice(index, 1);\n            }\n        });\n        this.afterFlushAnimationsDone(function () { return ns.destroy(context); });\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._fetchNamespace = /**\n     * @param {?} id\n     * @return {?}\n     */\n    function (id) { return this._namespaceLookup[id]; };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.fetchNamespacesByElement = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        // normally there should only be one namespace per element, however\n        // if @triggers are placed on both the component element and then\n        // its host element (within the component code) then there will be\n        // two namespaces returned. We use a set here to simply the dedupe\n        // of namespaces incase there are multiple triggers both the elm and host\n        var /** @type {?} */ namespaces = new Set();\n        var /** @type {?} */ elementStates = this.statesByElement.get(element);\n        if (elementStates) {\n            var /** @type {?} */ keys = Object.keys(elementStates);\n            for (var /** @type {?} */ i = 0; i < keys.length; i++) {\n                var /** @type {?} */ nsId = elementStates[keys[i]].namespaceId;\n                if (nsId) {\n                    var /** @type {?} */ ns = this._fetchNamespace(nsId);\n                    if (ns) {\n                        namespaces.add(ns);\n                    }\n                }\n            }\n        }\n        return namespaces;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.trigger = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    function (namespaceId, element, name, value) {\n        if (isElementNode(element)) {\n            this._fetchNamespace(namespaceId).trigger(element, name, value);\n            return true;\n        }\n        return false;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.insertNode = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    function (namespaceId, element, parent, insertBefore) {\n        if (!isElementNode(element))\n            return;\n        // special case for when an element is removed and reinserted (move operation)\n        // when this occurs we do not want to use the element for deletion later\n        var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n        if (details && details.setForRemoval) {\n            details.setForRemoval = false;\n        }\n        // in the event that the namespaceId is blank then the caller\n        // code does not contain any animation code in it, but it is\n        // just being called so that the node is marked as being inserted\n        if (namespaceId) {\n            var /** @type {?} */ ns = this._fetchNamespace(namespaceId);\n            // This if-statement is a workaround for router issue #21947.\n            // The router sometimes hits a race condition where while a route\n            // is being instantiated a new navigation arrives, triggering leave\n            // animation of DOM that has not been fully initialized, until this\n            // is resolved, we need to handle the scenario when DOM is not in a\n            // consistent state during the animation.\n            if (ns) {\n                ns.insertNode(element, parent);\n            }\n        }\n        // only *directives and host elements are inserted before\n        if (insertBefore) {\n            this.collectEnterElement(element);\n        }\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.collectEnterElement = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) { this.collectedEnterElements.push(element); };\n    /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.markElementAsDisabled = /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    function (element, value) {\n        if (value) {\n            if (!this.disabledNodes.has(element)) {\n                this.disabledNodes.add(element);\n                addClass(element, DISABLED_CLASSNAME);\n            }\n        }\n        else if (this.disabledNodes.has(element)) {\n            this.disabledNodes.delete(element);\n            removeClass(element, DISABLED_CLASSNAME);\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.removeNode = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    function (namespaceId, element, context) {\n        if (!isElementNode(element)) {\n            this._onRemovalComplete(element, context);\n            return;\n        }\n        var /** @type {?} */ ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n        if (ns) {\n            ns.removeNode(element, context);\n        }\n        else {\n            this.markElementAsRemoved(namespaceId, element, false, context);\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?=} hasAnimation\n     * @param {?=} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.markElementAsRemoved = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?=} hasAnimation\n     * @param {?=} context\n     * @return {?}\n     */\n    function (namespaceId, element, hasAnimation, context) {\n        this.collectedLeaveElements.push(element);\n        element[REMOVAL_FLAG] = {\n            namespaceId: namespaceId,\n            setForRemoval: context, hasAnimation: hasAnimation,\n            removedBeforeQueried: false\n        };\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} phase\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.listen = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} phase\n     * @param {?} callback\n     * @return {?}\n     */\n    function (namespaceId, element, name, phase, callback) {\n        if (isElementNode(element)) {\n            return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n        }\n        return function () { };\n    };\n    /**\n     * @param {?} entry\n     * @param {?} subTimelines\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildInstruction = /**\n     * @param {?} entry\n     * @param {?} subTimelines\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @return {?}\n     */\n    function (entry, subTimelines, enterClassName, leaveClassName) {\n        return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines);\n    };\n    /**\n     * @param {?} containerElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.destroyInnerAnimations = /**\n     * @param {?} containerElement\n     * @return {?}\n     */\n    function (containerElement) {\n        var _this = this;\n        var /** @type {?} */ elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n        elements.forEach(function (element) { return _this.destroyActiveAnimationsForElement(element); });\n        if (this.playersByQueriedElement.size == 0)\n            return;\n        elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n        elements.forEach(function (element) { return _this.finishActiveQueriedAnimationOnElement(element); });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.destroyActiveAnimationsForElement = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var /** @type {?} */ players = this.playersByElement.get(element);\n        if (players) {\n            players.forEach(function (player) {\n                // special case for when an element is set for destruction, but hasn't started.\n                // in this situation we want to delay the destruction until the flush occurs\n                // so that any event listeners attached to the player are triggered.\n                if (player.queued) {\n                    player.markedForDestroy = true;\n                }\n                else {\n                    player.destroy();\n                }\n            });\n        }\n        var /** @type {?} */ stateMap = this.statesByElement.get(element);\n        if (stateMap) {\n            Object.keys(stateMap).forEach(function (triggerName) { return stateMap[triggerName] = DELETED_STATE_VALUE; });\n        }\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.finishActiveQueriedAnimationOnElement = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var /** @type {?} */ players = this.playersByQueriedElement.get(element);\n        if (players) {\n            players.forEach(function (player) { return player.finish(); });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.whenRenderingDone = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        return new Promise(function (resolve) {\n            if (_this.players.length) {\n                return optimizeGroupPlayer(_this.players).onDone(function () { return resolve(); });\n            }\n            else {\n                resolve();\n            }\n        });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.processLeaveNode = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var _this = this;\n        var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n        if (details && details.setForRemoval) {\n            // this will prevent it from removing it twice\n            element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;\n            if (details.namespaceId) {\n                this.destroyInnerAnimations(element);\n                var /** @type {?} */ ns = this._fetchNamespace(details.namespaceId);\n                if (ns) {\n                    ns.clearElementCache(element);\n                }\n            }\n            this._onRemovalComplete(element, details.setForRemoval);\n        }\n        if (this.driver.matchesElement(element, DISABLED_SELECTOR)) {\n            this.markElementAsDisabled(element, false);\n        }\n        this.driver.query(element, DISABLED_SELECTOR, true).forEach(function (node) {\n            _this.markElementAsDisabled(element, false);\n        });\n    };\n    /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.flush = /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    function (microtaskId) {\n        var _this = this;\n        if (microtaskId === void 0) { microtaskId = -1; }\n        var /** @type {?} */ players = [];\n        if (this.newHostElements.size) {\n            this.newHostElements.forEach(function (ns, element) { return _this._balanceNamespaceList(ns, element); });\n            this.newHostElements.clear();\n        }\n        if (this.totalAnimations && this.collectedEnterElements.length) {\n            for (var /** @type {?} */ i = 0; i < this.collectedEnterElements.length; i++) {\n                var /** @type {?} */ elm = this.collectedEnterElements[i];\n                addClass(elm, STAR_CLASSNAME);\n            }\n        }\n        if (this._namespaceList.length &&\n            (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n            var /** @type {?} */ cleanupFns = [];\n            try {\n                players = this._flushAnimations(cleanupFns, microtaskId);\n            }\n            finally {\n                for (var /** @type {?} */ i = 0; i < cleanupFns.length; i++) {\n                    cleanupFns[i]();\n                }\n            }\n        }\n        else {\n            for (var /** @type {?} */ i = 0; i < this.collectedLeaveElements.length; i++) {\n                var /** @type {?} */ element = this.collectedLeaveElements[i];\n                this.processLeaveNode(element);\n            }\n        }\n        this.totalQueuedPlayers = 0;\n        this.collectedEnterElements.length = 0;\n        this.collectedLeaveElements.length = 0;\n        this._flushFns.forEach(function (fn) { return fn(); });\n        this._flushFns = [];\n        if (this._whenQuietFns.length) {\n            // we move these over to a variable so that\n            // if any new callbacks are registered in another\n            // flush they do not populate the existing set\n            var /** @type {?} */ quietFns_1 = this._whenQuietFns;\n            this._whenQuietFns = [];\n            if (players.length) {\n                optimizeGroupPlayer(players).onDone(function () { quietFns_1.forEach(function (fn) { return fn(); }); });\n            }\n            else {\n                quietFns_1.forEach(function (fn) { return fn(); });\n            }\n        }\n    };\n    /**\n     * @param {?} errors\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.reportError = /**\n     * @param {?} errors\n     * @return {?}\n     */\n    function (errors) {\n        throw new Error(\"Unable to process animations due to the following failed trigger transitions\\n \" + errors.join('\\n'));\n    };\n    /**\n     * @param {?} cleanupFns\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._flushAnimations = /**\n     * @param {?} cleanupFns\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    function (cleanupFns, microtaskId) {\n        var _this = this;\n        var /** @type {?} */ subTimelines = new ElementInstructionMap();\n        var /** @type {?} */ skippedPlayers = [];\n        var /** @type {?} */ skippedPlayersMap = new Map();\n        var /** @type {?} */ queuedInstructions = [];\n        var /** @type {?} */ queriedElements = new Map();\n        var /** @type {?} */ allPreStyleElements = new Map();\n        var /** @type {?} */ allPostStyleElements = new Map();\n        var /** @type {?} */ disabledElementsSet = new Set();\n        this.disabledNodes.forEach(function (node) {\n            disabledElementsSet.add(node);\n            var /** @type {?} */ nodesThatAreDisabled = _this.driver.query(node, QUEUED_SELECTOR, true);\n            for (var /** @type {?} */ i_1 = 0; i_1 < nodesThatAreDisabled.length; i_1++) {\n                disabledElementsSet.add(nodesThatAreDisabled[i_1]);\n            }\n        });\n        var /** @type {?} */ bodyNode = getBodyNode();\n        var /** @type {?} */ allTriggerElements = Array.from(this.statesByElement.keys());\n        var /** @type {?} */ enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);\n        // this must occur before the instructions are built below such that\n        // the :enter queries match the elements (since the timeline queries\n        // are fired during instruction building).\n        var /** @type {?} */ enterNodeMapIds = new Map();\n        var /** @type {?} */ i = 0;\n        enterNodeMap.forEach(function (nodes, root) {\n            var /** @type {?} */ className = ENTER_CLASSNAME + i++;\n            enterNodeMapIds.set(root, className);\n            nodes.forEach(function (node) { return addClass(node, className); });\n        });\n        var /** @type {?} */ allLeaveNodes = [];\n        var /** @type {?} */ mergedLeaveNodes = new Set();\n        var /** @type {?} */ leaveNodesWithoutAnimations = new Set();\n        for (var /** @type {?} */ i_2 = 0; i_2 < this.collectedLeaveElements.length; i_2++) {\n            var /** @type {?} */ element = this.collectedLeaveElements[i_2];\n            var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n            if (details && details.setForRemoval) {\n                allLeaveNodes.push(element);\n                mergedLeaveNodes.add(element);\n                if (details.hasAnimation) {\n                    this.driver.query(element, STAR_SELECTOR, true).forEach(function (elm) { return mergedLeaveNodes.add(elm); });\n                }\n                else {\n                    leaveNodesWithoutAnimations.add(element);\n                }\n            }\n        }\n        var /** @type {?} */ leaveNodeMapIds = new Map();\n        var /** @type {?} */ leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));\n        leaveNodeMap.forEach(function (nodes, root) {\n            var /** @type {?} */ className = LEAVE_CLASSNAME + i++;\n            leaveNodeMapIds.set(root, className);\n            nodes.forEach(function (node) { return addClass(node, className); });\n        });\n        cleanupFns.push(function () {\n            enterNodeMap.forEach(function (nodes, root) {\n                var /** @type {?} */ className = /** @type {?} */ ((enterNodeMapIds.get(root)));\n                nodes.forEach(function (node) { return removeClass(node, className); });\n            });\n            leaveNodeMap.forEach(function (nodes, root) {\n                var /** @type {?} */ className = /** @type {?} */ ((leaveNodeMapIds.get(root)));\n                nodes.forEach(function (node) { return removeClass(node, className); });\n            });\n            allLeaveNodes.forEach(function (element) { _this.processLeaveNode(element); });\n        });\n        var /** @type {?} */ allPlayers = [];\n        var /** @type {?} */ erroneousTransitions = [];\n        for (var /** @type {?} */ i_3 = this._namespaceList.length - 1; i_3 >= 0; i_3--) {\n            var /** @type {?} */ ns = this._namespaceList[i_3];\n            ns.drainQueuedTransitions(microtaskId).forEach(function (entry) {\n                var /** @type {?} */ player = entry.player;\n                allPlayers.push(player);\n                var /** @type {?} */ element = entry.element;\n                if (!bodyNode || !_this.driver.containsElement(bodyNode, element)) {\n                    player.destroy();\n                    return;\n                }\n                var /** @type {?} */ leaveClassName = /** @type {?} */ ((leaveNodeMapIds.get(element)));\n                var /** @type {?} */ enterClassName = /** @type {?} */ ((enterNodeMapIds.get(element)));\n                var /** @type {?} */ instruction = /** @type {?} */ ((_this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName)));\n                if (instruction.errors && instruction.errors.length) {\n                    erroneousTransitions.push(instruction);\n                    return;\n                }\n                // if a unmatched transition is queued to go then it SHOULD NOT render\n                // an animation and cancel the previously running animations.\n                if (entry.isFallbackTransition) {\n                    player.onStart(function () { return eraseStyles(element, instruction.fromStyles); });\n                    player.onDestroy(function () { return setStyles(element, instruction.toStyles); });\n                    skippedPlayers.push(player);\n                    return;\n                }\n                // this means that if a parent animation uses this animation as a sub trigger\n                // then it will instruct the timeline builder to not add a player delay, but\n                // instead stretch the first keyframe gap up until the animation starts. The\n                // reason this is important is to prevent extra initialization styles from being\n                // required by the user in the animation.\n                instruction.timelines.forEach(function (tl) { return tl.stretchStartingKeyframe = true; });\n                subTimelines.append(element, instruction.timelines);\n                var /** @type {?} */ tuple = { instruction: instruction, player: player, element: element };\n                queuedInstructions.push(tuple);\n                instruction.queriedElements.forEach(function (element) { return getOrSetAsInMap(queriedElements, element, []).push(player); });\n                instruction.preStyleProps.forEach(function (stringMap, element) {\n                    var /** @type {?} */ props = Object.keys(stringMap);\n                    if (props.length) {\n                        var /** @type {?} */ setVal_1 = /** @type {?} */ ((allPreStyleElements.get(element)));\n                        if (!setVal_1) {\n                            allPreStyleElements.set(element, setVal_1 = new Set());\n                        }\n                        props.forEach(function (prop) { return setVal_1.add(prop); });\n                    }\n                });\n                instruction.postStyleProps.forEach(function (stringMap, element) {\n                    var /** @type {?} */ props = Object.keys(stringMap);\n                    var /** @type {?} */ setVal = /** @type {?} */ ((allPostStyleElements.get(element)));\n                    if (!setVal) {\n                        allPostStyleElements.set(element, setVal = new Set());\n                    }\n                    props.forEach(function (prop) { return setVal.add(prop); });\n                });\n            });\n        }\n        if (erroneousTransitions.length) {\n            var /** @type {?} */ errors_1 = [];\n            erroneousTransitions.forEach(function (instruction) {\n                errors_1.push(\"@\" + instruction.triggerName + \" has failed due to:\\n\"); /** @type {?} */\n                ((instruction.errors)).forEach(function (error) { return errors_1.push(\"- \" + error + \"\\n\"); });\n            });\n            allPlayers.forEach(function (player) { return player.destroy(); });\n            this.reportError(errors_1);\n        }\n        var /** @type {?} */ allPreviousPlayersMap = new Map();\n        // this map works to tell which element in the DOM tree is contained by\n        // which animation. Further down below this map will get populated once\n        // the players are built and in doing so it can efficiently figure out\n        // if a sub player is skipped due to a parent player having priority.\n        var /** @type {?} */ animationElementMap = new Map();\n        queuedInstructions.forEach(function (entry) {\n            var /** @type {?} */ element = entry.element;\n            if (subTimelines.has(element)) {\n                animationElementMap.set(element, element);\n                _this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n            }\n        });\n        skippedPlayers.forEach(function (player) {\n            var /** @type {?} */ element = player.element;\n            var /** @type {?} */ previousPlayers = _this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n            previousPlayers.forEach(function (prevPlayer) {\n                getOrSetAsInMap(allPreviousPlayersMap, element, []).push(prevPlayer);\n                prevPlayer.destroy();\n            });\n        });\n        // this is a special case for nodes that will be removed (either by)\n        // having their own leave animations or by being queried in a container\n        // that will be removed once a parent animation is complete. The idea\n        // here is that * styles must be identical to ! styles because of\n        // backwards compatibility (* is also filled in by default in many places).\n        // Otherwise * styles will return an empty value or auto since the element\n        // that is being getComputedStyle'd will not be visible (since * = destination)\n        var /** @type {?} */ replaceNodes = allLeaveNodes.filter(function (node) {\n            return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n        });\n        // POST STAGE: fill the * styles\n        var /** @type {?} */ postStylesMap = new Map();\n        var /** @type {?} */ allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"AUTO_STYLE\"]);\n        allLeaveQueriedNodes.forEach(function (node) {\n            if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n                replaceNodes.push(node);\n            }\n        });\n        // PRE STAGE: fill the ! styles\n        var /** @type {?} */ preStylesMap = new Map();\n        enterNodeMap.forEach(function (nodes, root) {\n            cloakAndComputeStyles(preStylesMap, _this.driver, new Set(nodes), allPreStyleElements, __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"ɵPRE_STYLE\"]);\n        });\n        replaceNodes.forEach(function (node) {\n            var /** @type {?} */ post = postStylesMap.get(node);\n            var /** @type {?} */ pre = preStylesMap.get(node);\n            postStylesMap.set(node, /** @type {?} */ (Object(__WEBPACK_IMPORTED_MODULE_1_tslib__[\"a\" /* __assign */])({}, post, pre)));\n        });\n        var /** @type {?} */ rootPlayers = [];\n        var /** @type {?} */ subPlayers = [];\n        var /** @type {?} */ NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};\n        queuedInstructions.forEach(function (entry) {\n            var element = entry.element, player = entry.player, instruction = entry.instruction;\n            // this means that it was never consumed by a parent animation which\n            // means that it is independent and therefore should be set for animation\n            if (subTimelines.has(element)) {\n                if (disabledElementsSet.has(element)) {\n                    player.onDestroy(function () { return setStyles(element, instruction.toStyles); });\n                    skippedPlayers.push(player);\n                    return;\n                }\n                // this will flow up the DOM and query the map to figure out\n                // if a parent animation has priority over it. In the situation\n                // that a parent is detected then it will cancel the loop. If\n                // nothing is detected, or it takes a few hops to find a parent,\n                // then it will fill in the missing nodes and signal them as having\n                // a detected parent (or a NO_PARENT value via a special constant).\n                var /** @type {?} */ parentWithAnimation_1 = NO_PARENT_ANIMATION_ELEMENT_DETECTED;\n                if (animationElementMap.size > 1) {\n                    var /** @type {?} */ elm = element;\n                    var /** @type {?} */ parentsToAdd = [];\n                    while (elm = elm.parentNode) {\n                        var /** @type {?} */ detectedParent = animationElementMap.get(elm);\n                        if (detectedParent) {\n                            parentWithAnimation_1 = detectedParent;\n                            break;\n                        }\n                        parentsToAdd.push(elm);\n                    }\n                    parentsToAdd.forEach(function (parent) { return animationElementMap.set(parent, parentWithAnimation_1); });\n                }\n                var /** @type {?} */ innerPlayer = _this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n                player.setRealPlayer(innerPlayer);\n                if (parentWithAnimation_1 === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {\n                    rootPlayers.push(player);\n                }\n                else {\n                    var /** @type {?} */ parentPlayers = _this.playersByElement.get(parentWithAnimation_1);\n                    if (parentPlayers && parentPlayers.length) {\n                        player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n                    }\n                    skippedPlayers.push(player);\n                }\n            }\n            else {\n                eraseStyles(element, instruction.fromStyles);\n                player.onDestroy(function () { return setStyles(element, instruction.toStyles); });\n                // there still might be a ancestor player animating this\n                // element therefore we will still add it as a sub player\n                // even if its animation may be disabled\n                subPlayers.push(player);\n                if (disabledElementsSet.has(element)) {\n                    skippedPlayers.push(player);\n                }\n            }\n        });\n        // find all of the sub players' corresponding inner animation player\n        subPlayers.forEach(function (player) {\n            // even if any players are not found for a sub animation then it\n            // will still complete itself after the next tick since it's Noop\n            var /** @type {?} */ playersForElement = skippedPlayersMap.get(player.element);\n            if (playersForElement && playersForElement.length) {\n                var /** @type {?} */ innerPlayer = optimizeGroupPlayer(playersForElement);\n                player.setRealPlayer(innerPlayer);\n            }\n        });\n        // the reason why we don't actually play the animation is\n        // because all that a skipped player is designed to do is to\n        // fire the start/done transition callback events\n        skippedPlayers.forEach(function (player) {\n            if (player.parentPlayer) {\n                player.syncPlayerEvents(player.parentPlayer);\n            }\n            else {\n                player.destroy();\n            }\n        });\n        // run through all of the queued removals and see if they\n        // were picked up by a query. If not then perform the removal\n        // operation right away unless a parent animation is ongoing.\n        for (var /** @type {?} */ i_4 = 0; i_4 < allLeaveNodes.length; i_4++) {\n            var /** @type {?} */ element = allLeaveNodes[i_4];\n            var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n            removeClass(element, LEAVE_CLASSNAME);\n            // this means the element has a removal animation that is being\n            // taken care of and therefore the inner elements will hang around\n            // until that animation is over (or the parent queried animation)\n            if (details && details.hasAnimation)\n                continue;\n            var /** @type {?} */ players = [];\n            // if this element is queried or if it contains queried children\n            // then we want for the element not to be removed from the page\n            // until the queried animations have finished\n            if (queriedElements.size) {\n                var /** @type {?} */ queriedPlayerResults = queriedElements.get(element);\n                if (queriedPlayerResults && queriedPlayerResults.length) {\n                    players.push.apply(players, queriedPlayerResults);\n                }\n                var /** @type {?} */ queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n                for (var /** @type {?} */ j = 0; j < queriedInnerElements.length; j++) {\n                    var /** @type {?} */ queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n                    if (queriedPlayers && queriedPlayers.length) {\n                        players.push.apply(players, queriedPlayers);\n                    }\n                }\n            }\n            var /** @type {?} */ activePlayers = players.filter(function (p) { return !p.destroyed; });\n            if (activePlayers.length) {\n                removeNodesAfterAnimationDone(this, element, activePlayers);\n            }\n            else {\n                this.processLeaveNode(element);\n            }\n        }\n        // this is required so the cleanup method doesn't remove them\n        allLeaveNodes.length = 0;\n        rootPlayers.forEach(function (player) {\n            _this.players.push(player);\n            player.onDone(function () {\n                player.destroy();\n                var /** @type {?} */ index = _this.players.indexOf(player);\n                _this.players.splice(index, 1);\n            });\n            player.play();\n        });\n        return rootPlayers;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.elementContainsData = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @return {?}\n     */\n    function (namespaceId, element) {\n        var /** @type {?} */ containsData = false;\n        var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n        if (details && details.setForRemoval)\n            containsData = true;\n        if (this.playersByElement.has(element))\n            containsData = true;\n        if (this.playersByQueriedElement.has(element))\n            containsData = true;\n        if (this.statesByElement.has(element))\n            containsData = true;\n        return this._fetchNamespace(namespaceId).elementContainsData(element) || containsData;\n    };\n    /**\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.afterFlush = /**\n     * @param {?} callback\n     * @return {?}\n     */\n    function (callback) { this._flushFns.push(callback); };\n    /**\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.afterFlushAnimationsDone = /**\n     * @param {?} callback\n     * @return {?}\n     */\n    function (callback) { this._whenQuietFns.push(callback); };\n    /**\n     * @param {?} element\n     * @param {?} isQueriedElement\n     * @param {?=} namespaceId\n     * @param {?=} triggerName\n     * @param {?=} toStateValue\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._getPreviousPlayers = /**\n     * @param {?} element\n     * @param {?} isQueriedElement\n     * @param {?=} namespaceId\n     * @param {?=} triggerName\n     * @param {?=} toStateValue\n     * @return {?}\n     */\n    function (element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n        var /** @type {?} */ players = [];\n        if (isQueriedElement) {\n            var /** @type {?} */ queriedElementPlayers = this.playersByQueriedElement.get(element);\n            if (queriedElementPlayers) {\n                players = queriedElementPlayers;\n            }\n        }\n        else {\n            var /** @type {?} */ elementPlayers = this.playersByElement.get(element);\n            if (elementPlayers) {\n                var /** @type {?} */ isRemovalAnimation_1 = !toStateValue || toStateValue == VOID_VALUE;\n                elementPlayers.forEach(function (player) {\n                    if (player.queued)\n                        return;\n                    if (!isRemovalAnimation_1 && player.triggerName != triggerName)\n                        return;\n                    players.push(player);\n                });\n            }\n        }\n        if (namespaceId || triggerName) {\n            players = players.filter(function (player) {\n                if (namespaceId && namespaceId != player.namespaceId)\n                    return false;\n                if (triggerName && triggerName != player.triggerName)\n                    return false;\n                return true;\n            });\n        }\n        return players;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._beforeAnimationBuild = /**\n     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @return {?}\n     */\n    function (namespaceId, instruction, allPreviousPlayersMap) {\n        var /** @type {?} */ triggerName = instruction.triggerName;\n        var /** @type {?} */ rootElement = instruction.element;\n        // when a removal animation occurs, ALL previous players are collected\n        // and destroyed (even if they are outside of the current namespace)\n        var /** @type {?} */ targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n        var /** @type {?} */ targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n        var _loop_1 = function (timelineInstruction) {\n            var /** @type {?} */ element = timelineInstruction.element;\n            var /** @type {?} */ isQueriedElement = element !== rootElement;\n            var /** @type {?} */ players = getOrSetAsInMap(allPreviousPlayersMap, element, []);\n            var /** @type {?} */ previousPlayers = this_1._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n            previousPlayers.forEach(function (player) {\n                var /** @type {?} */ realPlayer = /** @type {?} */ (player.getRealPlayer());\n                if (realPlayer.beforeDestroy) {\n                    realPlayer.beforeDestroy();\n                }\n                player.destroy();\n                players.push(player);\n            });\n        };\n        var this_1 = this;\n        for (var _i = 0, _a = instruction.timelines; _i < _a.length; _i++) {\n            var timelineInstruction = _a[_i];\n            _loop_1(timelineInstruction);\n        }\n        // this needs to be done so that the PRE/POST styles can be\n        // computed properly without interfering with the previous animation\n        eraseStyles(rootElement, instruction.fromStyles);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @param {?} skippedPlayersMap\n     * @param {?} preStylesMap\n     * @param {?} postStylesMap\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildAnimation = /**\n     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @param {?} skippedPlayersMap\n     * @param {?} preStylesMap\n     * @param {?} postStylesMap\n     * @return {?}\n     */\n    function (namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n        var _this = this;\n        var /** @type {?} */ triggerName = instruction.triggerName;\n        var /** @type {?} */ rootElement = instruction.element;\n        // we first run this so that the previous animation player\n        // data can be passed into the successive animation players\n        var /** @type {?} */ allQueriedPlayers = [];\n        var /** @type {?} */ allConsumedElements = new Set();\n        var /** @type {?} */ allSubElements = new Set();\n        var /** @type {?} */ allNewPlayers = instruction.timelines.map(function (timelineInstruction) {\n            var /** @type {?} */ element = timelineInstruction.element;\n            allConsumedElements.add(element);\n            // FIXME (matsko): make sure to-be-removed animations are removed properly\n            var /** @type {?} */ details = element[REMOVAL_FLAG];\n            if (details && details.removedBeforeQueried)\n                return new __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"NoopAnimationPlayer\"]();\n            var /** @type {?} */ isQueriedElement = element !== rootElement;\n            var /** @type {?} */ previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY)\n                .map(function (p) { return p.getRealPlayer(); }))\n                .filter(function (p) {\n                // the `element` is not apart of the AnimationPlayer definition, but\n                // Mock/WebAnimations\n                // use the element within their implementation. This will be added in Angular5 to\n                // AnimationPlayer\n                var /** @type {?} */ pp = /** @type {?} */ (p);\n                return pp.element ? pp.element === element : false;\n            });\n            var /** @type {?} */ preStyles = preStylesMap.get(element);\n            var /** @type {?} */ postStyles = postStylesMap.get(element);\n            var /** @type {?} */ keyframes = normalizeKeyframes(_this.driver, _this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);\n            var /** @type {?} */ player = _this._buildPlayer(timelineInstruction, keyframes, previousPlayers);\n            // this means that this particular player belongs to a sub trigger. It is\n            // important that we match this player up with the corresponding (@trigger.listener)\n            if (timelineInstruction.subTimeline && skippedPlayersMap) {\n                allSubElements.add(element);\n            }\n            if (isQueriedElement) {\n                var /** @type {?} */ wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n                wrappedPlayer.setRealPlayer(player);\n                allQueriedPlayers.push(wrappedPlayer);\n            }\n            return player;\n        });\n        allQueriedPlayers.forEach(function (player) {\n            getOrSetAsInMap(_this.playersByQueriedElement, player.element, []).push(player);\n            player.onDone(function () { return deleteOrUnsetInMap(_this.playersByQueriedElement, player.element, player); });\n        });\n        allConsumedElements.forEach(function (element) { return addClass(element, NG_ANIMATING_CLASSNAME); });\n        var /** @type {?} */ player = optimizeGroupPlayer(allNewPlayers);\n        player.onDestroy(function () {\n            allConsumedElements.forEach(function (element) { return removeClass(element, NG_ANIMATING_CLASSNAME); });\n            setStyles(rootElement, instruction.toStyles);\n        });\n        // this basically makes all of the callbacks for sub element animations\n        // be dependent on the upper players for when they finish\n        allSubElements.forEach(function (element) { getOrSetAsInMap(skippedPlayersMap, element, []).push(player); });\n        return player;\n    };\n    /**\n     * @param {?} instruction\n     * @param {?} keyframes\n     * @param {?} previousPlayers\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildPlayer = /**\n     * @param {?} instruction\n     * @param {?} keyframes\n     * @param {?} previousPlayers\n     * @return {?}\n     */\n    function (instruction, keyframes, previousPlayers) {\n        if (keyframes.length > 0) {\n            return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);\n        }\n        // special case for when an empty transition|definition is provided\n        // ... there is no point in rendering an empty animation\n        return new __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"NoopAnimationPlayer\"]();\n    };\n    return TransitionAnimationEngine;\n}());\nvar TransitionAnimationPlayer = /** @class */ (function () {\n    function TransitionAnimationPlayer(namespaceId, triggerName, element) {\n        this.namespaceId = namespaceId;\n        this.triggerName = triggerName;\n        this.element = element;\n        this._player = new __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"NoopAnimationPlayer\"]();\n        this._containsRealPlayer = false;\n        this._queuedCallbacks = {};\n        this.destroyed = false;\n        this.markedForDestroy = false;\n        this.queued = true;\n    }\n    /**\n     * @param {?} player\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.setRealPlayer = /**\n     * @param {?} player\n     * @return {?}\n     */\n    function (player) {\n        var _this = this;\n        if (this._containsRealPlayer)\n            return;\n        this._player = player;\n        Object.keys(this._queuedCallbacks).forEach(function (phase) {\n            _this._queuedCallbacks[phase].forEach(function (callback) { return listenOnPlayer(player, phase, undefined, callback); });\n        });\n        this._queuedCallbacks = {};\n        this._containsRealPlayer = true;\n        (/** @type {?} */ (this)).queued = false;\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.getRealPlayer = /**\n     * @return {?}\n     */\n    function () { return this._player; };\n    /**\n     * @param {?} player\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.syncPlayerEvents = /**\n     * @param {?} player\n     * @return {?}\n     */\n    function (player) {\n        var _this = this;\n        var /** @type {?} */ p = /** @type {?} */ (this._player);\n        if (p.triggerCallback) {\n            player.onStart(function () { return p.triggerCallback('start'); });\n        }\n        player.onDone(function () { return _this.finish(); });\n        player.onDestroy(function () { return _this.destroy(); });\n    };\n    /**\n     * @param {?} name\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype._queueEvent = /**\n     * @param {?} name\n     * @param {?} callback\n     * @return {?}\n     */\n    function (name, callback) {\n        getOrSetAsInMap(this._queuedCallbacks, name, []).push(callback);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.onDone = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) {\n        if (this.queued) {\n            this._queueEvent('done', fn);\n        }\n        this._player.onDone(fn);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.onStart = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) {\n        if (this.queued) {\n            this._queueEvent('start', fn);\n        }\n        this._player.onStart(fn);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.onDestroy = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) {\n        if (this.queued) {\n            this._queueEvent('destroy', fn);\n        }\n        this._player.onDestroy(fn);\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.init = /**\n     * @return {?}\n     */\n    function () { this._player.init(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.hasStarted = /**\n     * @return {?}\n     */\n    function () { return this.queued ? false : this._player.hasStarted(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.play = /**\n     * @return {?}\n     */\n    function () { !this.queued && this._player.play(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.pause = /**\n     * @return {?}\n     */\n    function () { !this.queued && this._player.pause(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.restart = /**\n     * @return {?}\n     */\n    function () { !this.queued && this._player.restart(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.finish = /**\n     * @return {?}\n     */\n    function () { this._player.finish(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.destroy = /**\n     * @return {?}\n     */\n    function () {\n        (/** @type {?} */ (this)).destroyed = true;\n        this._player.destroy();\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.reset = /**\n     * @return {?}\n     */\n    function () { !this.queued && this._player.reset(); };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.setPosition = /**\n     * @param {?} p\n     * @return {?}\n     */\n    function (p) {\n        if (!this.queued) {\n            this._player.setPosition(p);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.getPosition = /**\n     * @return {?}\n     */\n    function () { return this.queued ? 0 : this._player.getPosition(); };\n    Object.defineProperty(TransitionAnimationPlayer.prototype, \"totalTime\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this._player.totalTime; },\n        enumerable: true,\n        configurable: true\n    });\n    /* @internal */\n    /**\n     * @param {?} phaseName\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.triggerCallback = /**\n     * @param {?} phaseName\n     * @return {?}\n     */\n    function (phaseName) {\n        var /** @type {?} */ p = /** @type {?} */ (this._player);\n        if (p.triggerCallback) {\n            p.triggerCallback(phaseName);\n        }\n    };\n    return TransitionAnimationPlayer;\n}());\n/**\n * @param {?} map\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\nfunction deleteOrUnsetInMap(map, key, value) {\n    var /** @type {?} */ currentValues;\n    if (map instanceof Map) {\n        currentValues = map.get(key);\n        if (currentValues) {\n            if (currentValues.length) {\n                var /** @type {?} */ index = currentValues.indexOf(value);\n                currentValues.splice(index, 1);\n            }\n            if (currentValues.length == 0) {\n                map.delete(key);\n            }\n        }\n    }\n    else {\n        currentValues = map[key];\n        if (currentValues) {\n            if (currentValues.length) {\n                var /** @type {?} */ index = currentValues.indexOf(value);\n                currentValues.splice(index, 1);\n            }\n            if (currentValues.length == 0) {\n                delete map[key];\n            }\n        }\n    }\n    return currentValues;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction normalizeTriggerValue(value) {\n    // we use `!= null` here because it's the most simple\n    // way to test against a \"falsy\" value without mixing\n    // in empty strings or a zero value. DO NOT OPTIMIZE.\n    return value != null ? value : null;\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction isElementNode(node) {\n    return node && node['nodeType'] === 1;\n}\n/**\n * @param {?} eventName\n * @return {?}\n */\nfunction isTriggerEventValid(eventName) {\n    return eventName == 'start' || eventName == 'done';\n}\n/**\n * @param {?} element\n * @param {?=} value\n * @return {?}\n */\nfunction cloakElement(element, value) {\n    var /** @type {?} */ oldValue = element.style.display;\n    element.style.display = value != null ? value : 'none';\n    return oldValue;\n}\n/**\n * @param {?} valuesMap\n * @param {?} driver\n * @param {?} elements\n * @param {?} elementPropsMap\n * @param {?} defaultStyle\n * @return {?}\n */\nfunction cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {\n    var /** @type {?} */ cloakVals = [];\n    elements.forEach(function (element) { return cloakVals.push(cloakElement(element)); });\n    var /** @type {?} */ failedElements = [];\n    elementPropsMap.forEach(function (props, element) {\n        var /** @type {?} */ styles = {};\n        props.forEach(function (prop) {\n            var /** @type {?} */ value = styles[prop] = driver.computeStyle(element, prop, defaultStyle);\n            // there is no easy way to detect this because a sub element could be removed\n            // by a parent animation element being detached.\n            if (!value || value.length == 0) {\n                element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;\n                failedElements.push(element);\n            }\n        });\n        valuesMap.set(element, styles);\n    });\n    // we use a index variable here since Set.forEach(a, i) does not return\n    // an index value for the closure (but instead just the value)\n    var /** @type {?} */ i = 0;\n    elements.forEach(function (element) { return cloakElement(element, cloakVals[i++]); });\n    return failedElements;\n}\n/**\n * @param {?} roots\n * @param {?} nodes\n * @return {?}\n */\nfunction buildRootMap(roots, nodes) {\n    var /** @type {?} */ rootMap = new Map();\n    roots.forEach(function (root) { return rootMap.set(root, []); });\n    if (nodes.length == 0)\n        return rootMap;\n    var /** @type {?} */ NULL_NODE = 1;\n    var /** @type {?} */ nodeSet = new Set(nodes);\n    var /** @type {?} */ localRootMap = new Map();\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    function getRoot(node) {\n        if (!node)\n            return NULL_NODE;\n        var /** @type {?} */ root = localRootMap.get(node);\n        if (root)\n            return root;\n        var /** @type {?} */ parent = node.parentNode;\n        if (rootMap.has(parent)) {\n            // ngIf inside @trigger\n            root = parent;\n        }\n        else if (nodeSet.has(parent)) {\n            // ngIf inside ngIf\n            root = NULL_NODE;\n        }\n        else {\n            // recurse upwards\n            root = getRoot(parent);\n        }\n        localRootMap.set(node, root);\n        return root;\n    }\n    nodes.forEach(function (node) {\n        var /** @type {?} */ root = getRoot(node);\n        if (root !== NULL_NODE) {\n            /** @type {?} */ ((rootMap.get(root))).push(node);\n        }\n    });\n    return rootMap;\n}\nvar CLASSES_CACHE_KEY = '$$classes';\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nfunction addClass(element, className) {\n    if (element.classList) {\n        element.classList.add(className);\n    }\n    else {\n        var /** @type {?} */ classes = element[CLASSES_CACHE_KEY];\n        if (!classes) {\n            classes = element[CLASSES_CACHE_KEY] = {};\n        }\n        classes[className] = true;\n    }\n}\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nfunction removeClass(element, className) {\n    if (element.classList) {\n        element.classList.remove(className);\n    }\n    else {\n        var /** @type {?} */ classes = element[CLASSES_CACHE_KEY];\n        if (classes) {\n            delete classes[className];\n        }\n    }\n}\n/**\n * @param {?} engine\n * @param {?} element\n * @param {?} players\n * @return {?}\n */\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n    optimizeGroupPlayer(players).onDone(function () { return engine.processLeaveNode(element); });\n}\n/**\n * @param {?} players\n * @return {?}\n */\nfunction flattenGroupPlayers(players) {\n    var /** @type {?} */ finalPlayers = [];\n    _flattenGroupPlayersRecur(players, finalPlayers);\n    return finalPlayers;\n}\n/**\n * @param {?} players\n * @param {?} finalPlayers\n * @return {?}\n */\nfunction _flattenGroupPlayersRecur(players, finalPlayers) {\n    for (var /** @type {?} */ i = 0; i < players.length; i++) {\n        var /** @type {?} */ player = players[i];\n        if (player instanceof __WEBPACK_IMPORTED_MODULE_0__angular_animations__[\"ɵAnimationGroupPlayer\"]) {\n            _flattenGroupPlayersRecur(player.players, finalPlayers);\n        }\n        else {\n            finalPlayers.push(/** @type {?} */ (player));\n        }\n    }\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction objEquals(a, b) {\n    var /** @type {?} */ k1 = Object.keys(a);\n    var /** @type {?} */ k2 = Object.keys(b);\n    if (k1.length != k2.length)\n        return false;\n    for (var /** @type {?} */ i = 0; i < k1.length; i++) {\n        var /** @type {?} */ prop = k1[i];\n        if (!b.hasOwnProperty(prop) || a[prop] !== b[prop])\n            return false;\n    }\n    return true;\n}\n/**\n * @param {?} element\n * @param {?} allPreStyleElements\n * @param {?} allPostStyleElements\n * @return {?}\n */\nfunction replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {\n    var /** @type {?} */ postEntry = allPostStyleElements.get(element);\n    if (!postEntry)\n        return false;\n    var /** @type {?} */ preEntry = allPreStyleElements.get(element);\n    if (preEntry) {\n        postEntry.forEach(function (data) { return ((preEntry)).add(data); });\n    }\n    else {\n        allPreStyleElements.set(element, postEntry);\n    }\n    allPostStyleElements.delete(element);\n    return true;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar AnimationEngine = /** @class */ (function () {\n    function AnimationEngine(_driver, normalizer) {\n        var _this = this;\n        this._driver = _driver;\n        this._triggerCache = {};\n        this.onRemovalComplete = function (element, context) { };\n        this._transitionEngine = new TransitionAnimationEngine(_driver, normalizer);\n        this._timelineEngine = new TimelineAnimationEngine(_driver, normalizer);\n        this._transitionEngine.onRemovalComplete = function (element, context) {\n            return _this.onRemovalComplete(element, context);\n        };\n    }\n    /**\n     * @param {?} componentId\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @param {?} name\n     * @param {?} metadata\n     * @return {?}\n     */\n    AnimationEngine.prototype.registerTrigger = /**\n     * @param {?} componentId\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @param {?} name\n     * @param {?} metadata\n     * @return {?}\n     */\n    function (componentId, namespaceId, hostElement, name, metadata) {\n        var /** @type {?} */ cacheKey = componentId + '-' + name;\n        var /** @type {?} */ trigger = this._triggerCache[cacheKey];\n        if (!trigger) {\n            var /** @type {?} */ errors = [];\n            var /** @type {?} */ ast = /** @type {?} */ (buildAnimationAst(this._driver, /** @type {?} */ (metadata), errors));\n            if (errors.length) {\n                throw new Error(\"The animation trigger \\\"\" + name + \"\\\" has failed to build due to the following errors:\\n - \" + errors.join(\"\\n - \"));\n            }\n            trigger = buildTrigger(name, ast);\n            this._triggerCache[cacheKey] = trigger;\n        }\n        this._transitionEngine.registerTrigger(namespaceId, name, trigger);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    AnimationEngine.prototype.register = /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    function (namespaceId, hostElement) {\n        this._transitionEngine.register(namespaceId, hostElement);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationEngine.prototype.destroy = /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    function (namespaceId, context) {\n        this._transitionEngine.destroy(namespaceId, context);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    AnimationEngine.prototype.onInsert = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    function (namespaceId, element, parent, insertBefore) {\n        this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationEngine.prototype.onRemove = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    function (namespaceId, element, context) {\n        this._transitionEngine.removeNode(namespaceId, element, context);\n    };\n    /**\n     * @param {?} element\n     * @param {?} disable\n     * @return {?}\n     */\n    AnimationEngine.prototype.disableAnimations = /**\n     * @param {?} element\n     * @param {?} disable\n     * @return {?}\n     */\n    function (element, disable) {\n        this._transitionEngine.markElementAsDisabled(element, disable);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} property\n     * @param {?} value\n     * @return {?}\n     */\n    AnimationEngine.prototype.process = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} property\n     * @param {?} value\n     * @return {?}\n     */\n    function (namespaceId, element, property, value) {\n        if (property.charAt(0) == '@') {\n            var _a = parseTimelineCommand(property), id = _a[0], action = _a[1];\n            var /** @type {?} */ args = /** @type {?} */ (value);\n            this._timelineEngine.command(id, element, action, args);\n        }\n        else {\n            this._transitionEngine.trigger(namespaceId, element, property, value);\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} eventName\n     * @param {?} eventPhase\n     * @param {?} callback\n     * @return {?}\n     */\n    AnimationEngine.prototype.listen = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} eventName\n     * @param {?} eventPhase\n     * @param {?} callback\n     * @return {?}\n     */\n    function (namespaceId, element, eventName, eventPhase, callback) {\n        // @@listen\n        if (eventName.charAt(0) == '@') {\n            var _a = parseTimelineCommand(eventName), id = _a[0], action = _a[1];\n            return this._timelineEngine.listen(id, element, action, callback);\n        }\n        return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);\n    };\n    /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    AnimationEngine.prototype.flush = /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    function (microtaskId) {\n        if (microtaskId === void 0) { microtaskId = -1; }\n        this._transitionEngine.flush(microtaskId);\n    };\n    Object.defineProperty(AnimationEngine.prototype, \"players\", {\n        get: /**\n         * @return {?}\n         */\n        function () {\n            return (/** @type {?} */ (this._transitionEngine.players))\n                .concat(/** @type {?} */ (this._timelineEngine.players));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    AnimationEngine.prototype.whenRenderingDone = /**\n     * @return {?}\n     */\n    function () { return this._transitionEngine.whenRenderingDone(); };\n    return AnimationEngine;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar WebAnimationsPlayer = /** @class */ (function () {\n    function WebAnimationsPlayer(element, keyframes, options, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        var _this = this;\n        this.element = element;\n        this.keyframes = keyframes;\n        this.options = options;\n        this.previousPlayers = previousPlayers;\n        this._onDoneFns = [];\n        this._onStartFns = [];\n        this._onDestroyFns = [];\n        this._initialized = false;\n        this._finished = false;\n        this._started = false;\n        this._destroyed = false;\n        this.time = 0;\n        this.parentPlayer = null;\n        this.previousStyles = {};\n        this.currentSnapshot = {};\n        this._duration = /** @type {?} */ (options['duration']);\n        this._delay = /** @type {?} */ (options['delay']) || 0;\n        this.time = this._duration + this._delay;\n        if (allowPreviousPlayerStylesMerge(this._duration, this._delay)) {\n            previousPlayers.forEach(function (player) {\n                var /** @type {?} */ styles = player.currentSnapshot;\n                Object.keys(styles).forEach(function (prop) { return _this.previousStyles[prop] = styles[prop]; });\n            });\n        }\n    }\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._onFinish = /**\n     * @return {?}\n     */\n    function () {\n        if (!this._finished) {\n            this._finished = true;\n            this._onDoneFns.forEach(function (fn) { return fn(); });\n            this._onDoneFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.init = /**\n     * @return {?}\n     */\n    function () {\n        this._buildPlayer();\n        this._preparePlayerBeforeStart();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._buildPlayer = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        if (this._initialized)\n            return;\n        this._initialized = true;\n        var /** @type {?} */ keyframes = this.keyframes.map(function (styles) { return copyStyles(styles, false); });\n        var /** @type {?} */ previousStyleProps = Object.keys(this.previousStyles);\n        if (previousStyleProps.length && keyframes.length) {\n            var /** @type {?} */ startingKeyframe_1 = keyframes[0];\n            var /** @type {?} */ missingStyleProps_1 = [];\n            previousStyleProps.forEach(function (prop) {\n                if (!startingKeyframe_1.hasOwnProperty(prop)) {\n                    missingStyleProps_1.push(prop);\n                }\n                startingKeyframe_1[prop] = _this.previousStyles[prop];\n            });\n            if (missingStyleProps_1.length) {\n                var /** @type {?} */ self_1 = this;\n                var _loop_1 = function () {\n                    var /** @type {?} */ kf = keyframes[i];\n                    missingStyleProps_1.forEach(function (prop) {\n                        kf[prop] = _computeStyle(self_1.element, prop);\n                    });\n                };\n                // tslint:disable-next-line\n                for (var /** @type {?} */ i = 1; i < keyframes.length; i++) {\n                    _loop_1();\n                }\n            }\n        }\n        (/** @type {?} */ (this)).domPlayer =\n            this._triggerWebAnimation(this.element, keyframes, this.options);\n        this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : {};\n        this.domPlayer.addEventListener('finish', function () { return _this._onFinish(); });\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._preparePlayerBeforeStart = /**\n     * @return {?}\n     */\n    function () {\n        // this is required so that the player doesn't start to animate right away\n        if (this._delay) {\n            this._resetDomPlayerState();\n        }\n        else {\n            this.domPlayer.pause();\n        }\n    };\n    /** @internal */\n    /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} options\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._triggerWebAnimation = /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} options\n     * @return {?}\n     */\n    function (element, keyframes, options) {\n        // jscompiler doesn't seem to know animate is a native property because it's not fully\n        // supported yet across common browsers (we polyfill it for Edge/Safari) [CL #143630929]\n        return /** @type {?} */ (element['animate'](keyframes, options));\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onStart = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._onStartFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onDone = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._onDoneFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onDestroy = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._onDestroyFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.play = /**\n     * @return {?}\n     */\n    function () {\n        this._buildPlayer();\n        if (!this.hasStarted()) {\n            this._onStartFns.forEach(function (fn) { return fn(); });\n            this._onStartFns = [];\n            this._started = true;\n        }\n        this.domPlayer.play();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.pause = /**\n     * @return {?}\n     */\n    function () {\n        this.init();\n        this.domPlayer.pause();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.finish = /**\n     * @return {?}\n     */\n    function () {\n        this.init();\n        this._onFinish();\n        this.domPlayer.finish();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.reset = /**\n     * @return {?}\n     */\n    function () {\n        this._resetDomPlayerState();\n        this._destroyed = false;\n        this._finished = false;\n        this._started = false;\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._resetDomPlayerState = /**\n     * @return {?}\n     */\n    function () {\n        if (this.domPlayer) {\n            this.domPlayer.cancel();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.restart = /**\n     * @return {?}\n     */\n    function () {\n        this.reset();\n        this.play();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.hasStarted = /**\n     * @return {?}\n     */\n    function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.destroy = /**\n     * @return {?}\n     */\n    function () {\n        if (!this._destroyed) {\n            this._destroyed = true;\n            this._resetDomPlayerState();\n            this._onFinish();\n            this._onDestroyFns.forEach(function (fn) { return fn(); });\n            this._onDestroyFns = [];\n        }\n    };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.setPosition = /**\n     * @param {?} p\n     * @return {?}\n     */\n    function (p) { this.domPlayer.currentTime = p * this.time; };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.getPosition = /**\n     * @return {?}\n     */\n    function () { return this.domPlayer.currentTime / this.time; };\n    Object.defineProperty(WebAnimationsPlayer.prototype, \"totalTime\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this._delay + this._duration; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.beforeDestroy = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        var /** @type {?} */ styles = {};\n        if (this.hasStarted()) {\n            Object.keys(this._finalKeyframe).forEach(function (prop) {\n                if (prop != 'offset') {\n                    styles[prop] =\n                        _this._finished ? _this._finalKeyframe[prop] : _computeStyle(_this.element, prop);\n                }\n            });\n        }\n        this.currentSnapshot = styles;\n    };\n    /* @internal */\n    /**\n     * @param {?} phaseName\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.triggerCallback = /**\n     * @param {?} phaseName\n     * @return {?}\n     */\n    function (phaseName) {\n        var /** @type {?} */ methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;\n        methods.forEach(function (fn) { return fn(); });\n        methods.length = 0;\n    };\n    return WebAnimationsPlayer;\n}());\n/**\n * @param {?} element\n * @param {?} prop\n * @return {?}\n */\nfunction _computeStyle(element, prop) {\n    return (/** @type {?} */ (window.getComputedStyle(element)))[prop];\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar WebAnimationsDriver = /** @class */ (function () {\n    function WebAnimationsDriver() {\n    }\n    /**\n     * @param {?} prop\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.validateStyleProperty = /**\n     * @param {?} prop\n     * @return {?}\n     */\n    function (prop) { return validateStyleProperty(prop); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.matchesElement = /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    function (element, selector) {\n        return matchesElement(element, selector);\n    };\n    /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.containsElement = /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    function (elm1, elm2) { return containsElement(elm1, elm2); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.query = /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    function (element, selector, multi) {\n        return invokeQuery(element, selector, multi);\n    };\n    /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.computeStyle = /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    function (element, prop, defaultValue) {\n        return /** @type {?} */ ((/** @type {?} */ (window.getComputedStyle(element)))[prop]);\n    };\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.animate = /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    function (element, keyframes, duration, delay, easing, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        var /** @type {?} */ fill = delay == 0 ? 'both' : 'forwards';\n        var /** @type {?} */ playerOptions = { duration: duration, delay: delay, fill: fill };\n        // we check for this to avoid having a null|undefined value be present\n        // for the easing (which results in an error for certain browsers #9752)\n        if (easing) {\n            playerOptions['easing'] = easing;\n        }\n        var /** @type {?} */ previousWebAnimationPlayers = /** @type {?} */ (previousPlayers.filter(function (player) { return player instanceof WebAnimationsPlayer; }));\n        return new WebAnimationsPlayer(element, keyframes, playerOptions, previousWebAnimationPlayers);\n    };\n    return WebAnimationsDriver;\n}());\n/**\n * @return {?}\n */\nfunction supportsWebAnimations() {\n    return typeof Element !== 'undefined' && typeof (/** @type {?} */ (Element)).prototype['animate'] === 'function';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\n\n//# sourceMappingURL=browser.js.map\n\n\n/***/ }),\n/* 449 */,\n/* 450 */,\n/* 451 */,\n/* 452 */,\n/* 453 */,\n/* 454 */,\n/* 455 */,\n/* 456 */,\n/* 457 */,\n/* 458 */,\n/* 459 */,\n/* 460 */,\n/* 461 */,\n/* 462 */,\n/* 463 */,\n/* 464 */,\n/* 465 */,\n/* 466 */,\n/* 467 */,\n/* 468 */,\n/* 469 */,\n/* 470 */,\n/* 471 */,\n/* 472 */,\n/* 473 */,\n/* 474 */,\n/* 475 */,\n/* 476 */,\n/* 477 */,\n/* 478 */,\n/* 479 */,\n/* 480 */,\n/* 481 */,\n/* 482 */,\n/* 483 */,\n/* 484 */,\n/* 485 */,\n/* 486 */,\n/* 487 */,\n/* 488 */,\n/* 489 */,\n/* 490 */,\n/* 491 */,\n/* 492 */,\n/* 493 */,\n/* 494 */,\n/* 495 */,\n/* 496 */,\n/* 497 */,\n/* 498 */,\n/* 499 */,\n/* 500 */,\n/* 501 */,\n/* 502 */,\n/* 503 */,\n/* 504 */,\n/* 505 */,\n/* 506 */,\n/* 507 */,\n/* 508 */,\n/* 509 */,\n/* 510 */,\n/* 511 */,\n/* 512 */,\n/* 513 */,\n/* 514 */,\n/* 515 */,\n/* 516 */,\n/* 517 */,\n/* 518 */,\n/* 519 */,\n/* 520 */,\n/* 521 */,\n/* 522 */,\n/* 523 */,\n/* 524 */,\n/* 525 */,\n/* 526 */,\n/* 527 */,\n/* 528 */,\n/* 529 */,\n/* 530 */,\n/* 531 */,\n/* 532 */,\n/* 533 */,\n/* 534 */,\n/* 535 */,\n/* 536 */,\n/* 537 */,\n/* 538 */,\n/* 539 */,\n/* 540 */,\n/* 541 */,\n/* 542 */,\n/* 543 */,\n/* 544 */,\n/* 545 */,\n/* 546 */,\n/* 547 */,\n/* 548 */,\n/* 549 */,\n/* 550 */,\n/* 551 */,\n/* 552 */,\n/* 553 */,\n/* 554 */,\n/* 555 */,\n/* 556 */,\n/* 557 */,\n/* 558 */,\n/* 559 */,\n/* 560 */,\n/* 561 */,\n/* 562 */,\n/* 563 */,\n/* 564 */,\n/* 565 */,\n/* 566 */,\n/* 567 */,\n/* 568 */,\n/* 569 */,\n/* 570 */,\n/* 571 */,\n/* 572 */,\n/* 573 */,\n/* 574 */,\n/* 575 */,\n/* 576 */,\n/* 577 */,\n/* 578 */,\n/* 579 */,\n/* 580 */,\n/* 581 */,\n/* 582 */,\n/* 583 */,\n/* 584 */,\n/* 585 */,\n/* 586 */,\n/* 587 */,\n/* 588 */,\n/* 589 */,\n/* 590 */,\n/* 591 */,\n/* 592 */,\n/* 593 */,\n/* 594 */,\n/* 595 */,\n/* 596 */,\n/* 597 */,\n/* 598 */,\n/* 599 */,\n/* 600 */,\n/* 601 */,\n/* 602 */,\n/* 603 */,\n/* 604 */,\n/* 605 */,\n/* 606 */,\n/* 607 */,\n/* 608 */,\n/* 609 */,\n/* 610 */,\n/* 611 */,\n/* 612 */,\n/* 613 */,\n/* 614 */,\n/* 615 */,\n/* 616 */,\n/* 617 */,\n/* 618 */,\n/* 619 */,\n/* 620 */,\n/* 621 */,\n/* 622 */,\n/* 623 */,\n/* 624 */,\n/* 625 */,\n/* 626 */,\n/* 627 */,\n/* 628 */,\n/* 629 */,\n/* 630 */,\n/* 631 */,\n/* 632 */,\n/* 633 */,\n/* 634 */,\n/* 635 */,\n/* 636 */,\n/* 637 */,\n/* 638 */,\n/* 639 */,\n/* 640 */,\n/* 641 */,\n/* 642 */,\n/* 643 */,\n/* 644 */,\n/* 645 */,\n/* 646 */,\n/* 647 */,\n/* 648 */,\n/* 649 */,\n/* 650 */,\n/* 651 */,\n/* 652 */,\n/* 653 */,\n/* 654 */,\n/* 655 */,\n/* 656 */,\n/* 657 */,\n/* 658 */,\n/* 659 */,\n/* 660 */,\n/* 661 */,\n/* 662 */,\n/* 663 */,\n/* 664 */,\n/* 665 */,\n/* 666 */,\n/* 667 */,\n/* 668 */,\n/* 669 */,\n/* 670 */,\n/* 671 */,\n/* 672 */,\n/* 673 */,\n/* 674 */,\n/* 675 */,\n/* 676 */,\n/* 677 */,\n/* 678 */,\n/* 679 */,\n/* 680 */,\n/* 681 */,\n/* 682 */,\n/* 683 */,\n/* 684 */,\n/* 685 */,\n/* 686 */,\n/* 687 */,\n/* 688 */,\n/* 689 */,\n/* 690 */,\n/* 691 */,\n/* 692 */,\n/* 693 */,\n/* 694 */,\n/* 695 */,\n/* 696 */,\n/* 697 */,\n/* 698 */,\n/* 699 */,\n/* 700 */,\n/* 701 */,\n/* 702 */,\n/* 703 */,\n/* 704 */,\n/* 705 */,\n/* 706 */,\n/* 707 */,\n/* 708 */,\n/* 709 */,\n/* 710 */,\n/* 711 */,\n/* 712 */,\n/* 713 */,\n/* 714 */,\n/* 715 */,\n/* 716 */,\n/* 717 */,\n/* 718 */,\n/* 719 */,\n/* 720 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* WEBPACK VAR INJECTION */(function(global) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"DragDropDirectiveModule\", function() { return DragDropDirectiveModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵa\", function() { return DragDirective; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵb\", function() { return DragDropDirectiveService; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ɵc\", function() { return DropDirective; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n\n\nvar __extends = (undefined && undefined.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n/**\n * @license Angular v4.1.3\n * (c) 2010-2017 Google, Inc. https://angular.io/\n * License: MIT\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * This class should not be used directly by an application developer. Instead, use\n * {\\@link Location}.\n *\n * `PlatformLocation` encapsulates all calls to DOM apis, which allows the Router to be platform\n * agnostic.\n * This means that we can have different implementation of `PlatformLocation` for the different\n * platforms that angular supports. For example, `\\@angular/platform-browser` provides an\n * implementation specific to the browser environment, while `\\@angular/platform-webworker` provides\n * one suitable for use with web workers.\n *\n * The `PlatformLocation` class is used directly by all implementations of {\\@link LocationStrategy}\n * when they need to interact with the DOM apis like pushState, popState, etc...\n *\n * {\\@link LocationStrategy} in turn is used by the {\\@link Location} service which is used directly\n * by the {\\@link Router} in order to navigate between routes. Since all interactions between {\\@link\n * Router} /\n * {\\@link Location} / {\\@link LocationStrategy} and DOM apis flow through the `PlatformLocation`\n * class they are all platform independent.\n *\n * \\@stable\n * @abstract\n */\nvar PlatformLocation = (function () {\n    function PlatformLocation() {\n    }\n    /**\n     * @abstract\n     * @return {?}\n     */\n    PlatformLocation.prototype.getBaseHrefFromDOM = function () { };\n    /**\n     * @abstract\n     * @param {?} fn\n     * @return {?}\n     */\n    PlatformLocation.prototype.onPopState = function (fn) { };\n    /**\n     * @abstract\n     * @param {?} fn\n     * @return {?}\n     */\n    PlatformLocation.prototype.onHashChange = function (fn) { };\n    /**\n     * @abstract\n     * @return {?}\n     */\n    PlatformLocation.prototype.pathname = function () { };\n    /**\n     * @abstract\n     * @return {?}\n     */\n    PlatformLocation.prototype.search = function () { };\n    /**\n     * @abstract\n     * @return {?}\n     */\n    PlatformLocation.prototype.hash = function () { };\n    /**\n     * @abstract\n     * @param {?} state\n     * @param {?} title\n     * @param {?} url\n     * @return {?}\n     */\n    PlatformLocation.prototype.replaceState = function (state, title, url) { };\n    /**\n     * @abstract\n     * @param {?} state\n     * @param {?} title\n     * @param {?} url\n     * @return {?}\n     */\n    PlatformLocation.prototype.pushState = function (state, title, url) { };\n    /**\n     * @abstract\n     * @return {?}\n     */\n    PlatformLocation.prototype.forward = function () { };\n    /**\n     * @abstract\n     * @return {?}\n     */\n    PlatformLocation.prototype.back = function () { };\n    return PlatformLocation;\n}());\n/**\n * \\@whatItDoes indicates when a location is initialized\n * \\@experimental\n */\nvar LOCATION_INITIALIZED = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"InjectionToken\"]('Location Initialized');\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * `LocationStrategy` is responsible for representing and reading route state\n * from the browser's URL. Angular provides two strategies:\n * {\\@link HashLocationStrategy} and {\\@link PathLocationStrategy}.\n *\n * This is used under the hood of the {\\@link Location} service.\n *\n * Applications should use the {\\@link Router} or {\\@link Location} services to\n * interact with application route state.\n *\n * For instance, {\\@link HashLocationStrategy} produces URLs like\n * `http://example.com#/foo`, and {\\@link PathLocationStrategy} produces\n * `http://example.com/foo` as an equivalent URL.\n *\n * See these two classes for more.\n *\n * \\@stable\n * @abstract\n */\nvar LocationStrategy = (function () {\n    function LocationStrategy() {\n    }\n    /**\n     * @abstract\n     * @param {?=} includeHash\n     * @return {?}\n     */\n    LocationStrategy.prototype.path = function (includeHash) { };\n    /**\n     * @abstract\n     * @param {?} internal\n     * @return {?}\n     */\n    LocationStrategy.prototype.prepareExternalUrl = function (internal) { };\n    /**\n     * @abstract\n     * @param {?} state\n     * @param {?} title\n     * @param {?} url\n     * @param {?} queryParams\n     * @return {?}\n     */\n    LocationStrategy.prototype.pushState = function (state, title, url, queryParams) { };\n    /**\n     * @abstract\n     * @param {?} state\n     * @param {?} title\n     * @param {?} url\n     * @param {?} queryParams\n     * @return {?}\n     */\n    LocationStrategy.prototype.replaceState = function (state, title, url, queryParams) { };\n    /**\n     * @abstract\n     * @return {?}\n     */\n    LocationStrategy.prototype.forward = function () { };\n    /**\n     * @abstract\n     * @return {?}\n     */\n    LocationStrategy.prototype.back = function () { };\n    /**\n     * @abstract\n     * @param {?} fn\n     * @return {?}\n     */\n    LocationStrategy.prototype.onPopState = function (fn) { };\n    /**\n     * @abstract\n     * @return {?}\n     */\n    LocationStrategy.prototype.getBaseHref = function () { };\n    return LocationStrategy;\n}());\n/**\n * The `APP_BASE_HREF` token represents the base href to be used with the\n * {\\@link PathLocationStrategy}.\n *\n * If you're using {\\@link PathLocationStrategy}, you must provide a provider to a string\n * representing the URL prefix that should be preserved when generating and recognizing\n * URLs.\n *\n * ### Example\n *\n * ```typescript\n * import {Component, NgModule} from '\\@angular/core';\n * import {APP_BASE_HREF} from '\\@angular/common';\n *\n * \\@NgModule({\n *   providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]\n * })\n * class AppModule {}\n * ```\n *\n * \\@stable\n */\nvar APP_BASE_HREF = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"InjectionToken\"]('appBaseHref');\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@whatItDoes `Location` is a service that applications can use to interact with a browser's URL.\n * \\@description\n * Depending on which {\\@link LocationStrategy} is used, `Location` will either persist\n * to the URL's path or the URL's hash segment.\n *\n * Note: it's better to use {\\@link Router#navigate} service to trigger route changes. Use\n * `Location` only if you need to interact with or create normalized URLs outside of\n * routing.\n *\n * `Location` is responsible for normalizing the URL against the application's base href.\n * A normalized URL is absolute from the URL host, includes the application's base href, and has no\n * trailing slash:\n * - `/my/app/user/123` is normalized\n * - `my/app/user/123` **is not** normalized\n * - `/my/app/user/123/` **is not** normalized\n *\n * ### Example\n * {\\@example common/location/ts/path_location_component.ts region='LocationComponent'}\n * \\@stable\n */\nvar Location = (function () {\n    /**\n     * @param {?} platformStrategy\n     */\n    function Location(platformStrategy) {\n        var _this = this;\n        /**\n         * \\@internal\n         */\n        this._subject = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this._platformStrategy = platformStrategy;\n        var browserBaseHref = this._platformStrategy.getBaseHref();\n        this._baseHref = Location.stripTrailingSlash(_stripIndexHtml(browserBaseHref));\n        this._platformStrategy.onPopState(function (ev) {\n            _this._subject.emit({\n                'url': _this.path(true),\n                'pop': true,\n                'type': ev.type,\n            });\n        });\n    }\n    /**\n     * @param {?=} includeHash\n     * @return {?}\n     */\n    Location.prototype.path = function (includeHash) {\n        if (includeHash === void 0) { includeHash = false; }\n        return this.normalize(this._platformStrategy.path(includeHash));\n    };\n    /**\n     * Normalizes the given path and compares to the current normalized path.\n     * @param {?} path\n     * @param {?=} query\n     * @return {?}\n     */\n    Location.prototype.isCurrentPathEqualTo = function (path, query) {\n        if (query === void 0) { query = ''; }\n        return this.path() == this.normalize(path + Location.normalizeQueryParams(query));\n    };\n    /**\n     * Given a string representing a URL, returns the normalized URL path without leading or\n     * trailing slashes.\n     * @param {?} url\n     * @return {?}\n     */\n    Location.prototype.normalize = function (url) {\n        return Location.stripTrailingSlash(_stripBaseHref(this._baseHref, _stripIndexHtml(url)));\n    };\n    /**\n     * Given a string representing a URL, returns the platform-specific external URL path.\n     * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one\n     * before normalizing. This method will also add a hash if `HashLocationStrategy` is\n     * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.\n     * @param {?} url\n     * @return {?}\n     */\n    Location.prototype.prepareExternalUrl = function (url) {\n        if (url && url[0] !== '/') {\n            url = '/' + url;\n        }\n        return this._platformStrategy.prepareExternalUrl(url);\n    };\n    /**\n     * Changes the browsers URL to the normalized version of the given URL, and pushes a\n     * new item onto the platform's history.\n     * @param {?} path\n     * @param {?=} query\n     * @return {?}\n     */\n    Location.prototype.go = function (path, query) {\n        if (query === void 0) { query = ''; }\n        this._platformStrategy.pushState(null, '', path, query);\n    };\n    /**\n     * Changes the browsers URL to the normalized version of the given URL, and replaces\n     * the top item on the platform's history stack.\n     * @param {?} path\n     * @param {?=} query\n     * @return {?}\n     */\n    Location.prototype.replaceState = function (path, query) {\n        if (query === void 0) { query = ''; }\n        this._platformStrategy.replaceState(null, '', path, query);\n    };\n    /**\n     * Navigates forward in the platform's history.\n     * @return {?}\n     */\n    Location.prototype.forward = function () { this._platformStrategy.forward(); };\n    /**\n     * Navigates back in the platform's history.\n     * @return {?}\n     */\n    Location.prototype.back = function () { this._platformStrategy.back(); };\n    /**\n     * Subscribe to the platform's `popState` events.\n     * @param {?} onNext\n     * @param {?=} onThrow\n     * @param {?=} onReturn\n     * @return {?}\n     */\n    Location.prototype.subscribe = function (onNext, onThrow, onReturn) {\n        return this._subject.subscribe({ next: onNext, error: onThrow, complete: onReturn });\n    };\n    /**\n     * Given a string of url parameters, prepend with '?' if needed, otherwise return parameters as\n     * is.\n     * @param {?} params\n     * @return {?}\n     */\n    Location.normalizeQueryParams = function (params) {\n        return params && params[0] !== '?' ? '?' + params : params;\n    };\n    /**\n     * Given 2 parts of a url, join them with a slash if needed.\n     * @param {?} start\n     * @param {?} end\n     * @return {?}\n     */\n    Location.joinWithSlash = function (start, end) {\n        if (start.length == 0) {\n            return end;\n        }\n        if (end.length == 0) {\n            return start;\n        }\n        var /** @type {?} */ slashes = 0;\n        if (start.endsWith('/')) {\n            slashes++;\n        }\n        if (end.startsWith('/')) {\n            slashes++;\n        }\n        if (slashes == 2) {\n            return start + end.substring(1);\n        }\n        if (slashes == 1) {\n            return start + end;\n        }\n        return start + '/' + end;\n    };\n    /**\n     * If url has a trailing slash, remove it, otherwise return url as is.\n     * @param {?} url\n     * @return {?}\n     */\n    Location.stripTrailingSlash = function (url) { return url.replace(/\\/$/, ''); };\n    return Location;\n}());\nLocation.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nLocation.ctorParameters = function () { return [\n    { type: LocationStrategy, },\n]; };\n/**\n * @param {?} baseHref\n * @param {?} url\n * @return {?}\n */\nfunction _stripBaseHref(baseHref, url) {\n    return baseHref && url.startsWith(baseHref) ? url.substring(baseHref.length) : url;\n}\n/**\n * @param {?} url\n * @return {?}\n */\nfunction _stripIndexHtml(url) {\n    return url.replace(/\\/index.html$/, '');\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@whatItDoes Use URL hash for storing application location data.\n * \\@description\n * `HashLocationStrategy` is a {\\@link LocationStrategy} used to configure the\n * {\\@link Location} service to represent its state in the\n * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)\n * of the browser's URL.\n *\n * For instance, if you call `location.go('/foo')`, the browser's URL will become\n * `example.com#/foo`.\n *\n * ### Example\n *\n * {\\@example common/location/ts/hash_location_component.ts region='LocationComponent'}\n *\n * \\@stable\n */\nvar HashLocationStrategy = (function (_super) {\n    __extends(HashLocationStrategy, _super);\n    /**\n     * @param {?} _platformLocation\n     * @param {?=} _baseHref\n     */\n    function HashLocationStrategy(_platformLocation, _baseHref) {\n        var _this = _super.call(this) || this;\n        _this._platformLocation = _platformLocation;\n        _this._baseHref = '';\n        if (_baseHref != null) {\n            _this._baseHref = _baseHref;\n        }\n        return _this;\n    }\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    HashLocationStrategy.prototype.onPopState = function (fn) {\n        this._platformLocation.onPopState(fn);\n        this._platformLocation.onHashChange(fn);\n    };\n    /**\n     * @return {?}\n     */\n    HashLocationStrategy.prototype.getBaseHref = function () { return this._baseHref; };\n    /**\n     * @param {?=} includeHash\n     * @return {?}\n     */\n    HashLocationStrategy.prototype.path = function (includeHash) {\n        if (includeHash === void 0) { includeHash = false; }\n        // the hash value is always prefixed with a `#`\n        // and if it is empty then it will stay empty\n        var /** @type {?} */ path = this._platformLocation.hash;\n        if (path == null)\n            path = '#';\n        return path.length > 0 ? path.substring(1) : path;\n    };\n    /**\n     * @param {?} internal\n     * @return {?}\n     */\n    HashLocationStrategy.prototype.prepareExternalUrl = function (internal) {\n        var /** @type {?} */ url = Location.joinWithSlash(this._baseHref, internal);\n        return url.length > 0 ? ('#' + url) : url;\n    };\n    /**\n     * @param {?} state\n     * @param {?} title\n     * @param {?} path\n     * @param {?} queryParams\n     * @return {?}\n     */\n    HashLocationStrategy.prototype.pushState = function (state, title, path, queryParams) {\n        var /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));\n        if (url.length == 0) {\n            url = this._platformLocation.pathname;\n        }\n        this._platformLocation.pushState(state, title, url);\n    };\n    /**\n     * @param {?} state\n     * @param {?} title\n     * @param {?} path\n     * @param {?} queryParams\n     * @return {?}\n     */\n    HashLocationStrategy.prototype.replaceState = function (state, title, path, queryParams) {\n        var /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));\n        if (url.length == 0) {\n            url = this._platformLocation.pathname;\n        }\n        this._platformLocation.replaceState(state, title, url);\n    };\n    /**\n     * @return {?}\n     */\n    HashLocationStrategy.prototype.forward = function () { this._platformLocation.forward(); };\n    /**\n     * @return {?}\n     */\n    HashLocationStrategy.prototype.back = function () { this._platformLocation.back(); };\n    return HashLocationStrategy;\n}(LocationStrategy));\nHashLocationStrategy.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nHashLocationStrategy.ctorParameters = function () { return [\n    { type: PlatformLocation, },\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [APP_BASE_HREF,] },] },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@whatItDoes Use URL for storing application location data.\n * \\@description\n * `PathLocationStrategy` is a {\\@link LocationStrategy} used to configure the\n * {\\@link Location} service to represent its state in the\n * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the\n * browser's URL.\n *\n * If you're using `PathLocationStrategy`, you must provide a {\\@link APP_BASE_HREF}\n * or add a base element to the document. This URL prefix that will be preserved\n * when generating and recognizing URLs.\n *\n * For instance, if you provide an `APP_BASE_HREF` of `'/my/app'` and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n *\n * Similarly, if you add `<base href='/my/app'/>` to the document and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n *\n * ### Example\n *\n * {\\@example common/location/ts/path_location_component.ts region='LocationComponent'}\n *\n * \\@stable\n */\nvar PathLocationStrategy = (function (_super) {\n    __extends(PathLocationStrategy, _super);\n    /**\n     * @param {?} _platformLocation\n     * @param {?=} href\n     */\n    function PathLocationStrategy(_platformLocation, href) {\n        var _this = _super.call(this) || this;\n        _this._platformLocation = _platformLocation;\n        if (href == null) {\n            href = _this._platformLocation.getBaseHrefFromDOM();\n        }\n        if (href == null) {\n            throw new Error(\"No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.\");\n        }\n        _this._baseHref = href;\n        return _this;\n    }\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    PathLocationStrategy.prototype.onPopState = function (fn) {\n        this._platformLocation.onPopState(fn);\n        this._platformLocation.onHashChange(fn);\n    };\n    /**\n     * @return {?}\n     */\n    PathLocationStrategy.prototype.getBaseHref = function () { return this._baseHref; };\n    /**\n     * @param {?} internal\n     * @return {?}\n     */\n    PathLocationStrategy.prototype.prepareExternalUrl = function (internal) {\n        return Location.joinWithSlash(this._baseHref, internal);\n    };\n    /**\n     * @param {?=} includeHash\n     * @return {?}\n     */\n    PathLocationStrategy.prototype.path = function (includeHash) {\n        if (includeHash === void 0) { includeHash = false; }\n        var /** @type {?} */ pathname = this._platformLocation.pathname +\n            Location.normalizeQueryParams(this._platformLocation.search);\n        var /** @type {?} */ hash = this._platformLocation.hash;\n        return hash && includeHash ? \"\" + pathname + hash : pathname;\n    };\n    /**\n     * @param {?} state\n     * @param {?} title\n     * @param {?} url\n     * @param {?} queryParams\n     * @return {?}\n     */\n    PathLocationStrategy.prototype.pushState = function (state, title, url, queryParams) {\n        var /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));\n        this._platformLocation.pushState(state, title, externalUrl);\n    };\n    /**\n     * @param {?} state\n     * @param {?} title\n     * @param {?} url\n     * @param {?} queryParams\n     * @return {?}\n     */\n    PathLocationStrategy.prototype.replaceState = function (state, title, url, queryParams) {\n        var /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));\n        this._platformLocation.replaceState(state, title, externalUrl);\n    };\n    /**\n     * @return {?}\n     */\n    PathLocationStrategy.prototype.forward = function () { this._platformLocation.forward(); };\n    /**\n     * @return {?}\n     */\n    PathLocationStrategy.prototype.back = function () { this._platformLocation.back(); };\n    return PathLocationStrategy;\n}(LocationStrategy));\nPathLocationStrategy.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nPathLocationStrategy.ctorParameters = function () { return [\n    { type: PlatformLocation, },\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Optional\"] }, { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [APP_BASE_HREF,] },] },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@experimental\n * @abstract\n */\nvar NgLocalization = (function () {\n    function NgLocalization() {\n    }\n    /**\n     * @abstract\n     * @param {?} value\n     * @return {?}\n     */\n    NgLocalization.prototype.getPluralCategory = function (value) { };\n    return NgLocalization;\n}());\n/**\n * Returns the plural category for a given value.\n * - \"=value\" when the case exists,\n * - the plural category otherwise\n *\n * \\@internal\n * @param {?} value\n * @param {?} cases\n * @param {?} ngLocalization\n * @return {?}\n */\nfunction getPluralCategory(value, cases, ngLocalization) {\n    var /** @type {?} */ key = \"=\" + value;\n    if (cases.indexOf(key) > -1) {\n        return key;\n    }\n    key = ngLocalization.getPluralCategory(value);\n    if (cases.indexOf(key) > -1) {\n        return key;\n    }\n    if (cases.indexOf('other') > -1) {\n        return 'other';\n    }\n    throw new Error(\"No plural message found for value \\\"\" + value + \"\\\"\");\n}\n/**\n * Returns the plural case based on the locale\n *\n * \\@experimental\n */\nvar NgLocaleLocalization = (function (_super) {\n    __extends(NgLocaleLocalization, _super);\n    /**\n     * @param {?} locale\n     */\n    function NgLocaleLocalization(locale) {\n        var _this = _super.call(this) || this;\n        _this.locale = locale;\n        return _this;\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    NgLocaleLocalization.prototype.getPluralCategory = function (value) {\n        var /** @type {?} */ plural = getPluralCase(this.locale, value);\n        switch (plural) {\n            case Plural.Zero:\n                return 'zero';\n            case Plural.One:\n                return 'one';\n            case Plural.Two:\n                return 'two';\n            case Plural.Few:\n                return 'few';\n            case Plural.Many:\n                return 'many';\n            default:\n                return 'other';\n        }\n    };\n    return NgLocaleLocalization;\n}(NgLocalization));\nNgLocaleLocalization.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nNgLocaleLocalization.ctorParameters = function () { return [\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\nvar Plural = {};\nPlural.Zero = 0;\nPlural.One = 1;\nPlural.Two = 2;\nPlural.Few = 3;\nPlural.Many = 4;\nPlural.Other = 5;\nPlural[Plural.Zero] = \"Zero\";\nPlural[Plural.One] = \"One\";\nPlural[Plural.Two] = \"Two\";\nPlural[Plural.Few] = \"Few\";\nPlural[Plural.Many] = \"Many\";\nPlural[Plural.Other] = \"Other\";\n/**\n * Returns the plural case based on the locale\n *\n * \\@experimental\n * @param {?} locale\n * @param {?} nLike\n * @return {?}\n */\nfunction getPluralCase(locale, nLike) {\n    // TODO(vicb): lazy compute\n    if (typeof nLike === 'string') {\n        nLike = parseInt(/** @type {?} */ (nLike), 10);\n    }\n    var /** @type {?} */ n = (nLike);\n    var /** @type {?} */ nDecimal = n.toString().replace(/^[^.]*\\.?/, '');\n    var /** @type {?} */ i = Math.floor(Math.abs(n));\n    var /** @type {?} */ v = nDecimal.length;\n    var /** @type {?} */ f = parseInt(nDecimal, 10);\n    var /** @type {?} */ t = parseInt(n.toString().replace(/^[^.]*\\.?|0+$/g, ''), 10) || 0;\n    var /** @type {?} */ lang = locale.split('-')[0].toLowerCase();\n    switch (lang) {\n        case 'af':\n        case 'asa':\n        case 'az':\n        case 'bem':\n        case 'bez':\n        case 'bg':\n        case 'brx':\n        case 'ce':\n        case 'cgg':\n        case 'chr':\n        case 'ckb':\n        case 'ee':\n        case 'el':\n        case 'eo':\n        case 'es':\n        case 'eu':\n        case 'fo':\n        case 'fur':\n        case 'gsw':\n        case 'ha':\n        case 'haw':\n        case 'hu':\n        case 'jgo':\n        case 'jmc':\n        case 'ka':\n        case 'kk':\n        case 'kkj':\n        case 'kl':\n        case 'ks':\n        case 'ksb':\n        case 'ky':\n        case 'lb':\n        case 'lg':\n        case 'mas':\n        case 'mgo':\n        case 'ml':\n        case 'mn':\n        case 'nb':\n        case 'nd':\n        case 'ne':\n        case 'nn':\n        case 'nnh':\n        case 'nyn':\n        case 'om':\n        case 'or':\n        case 'os':\n        case 'ps':\n        case 'rm':\n        case 'rof':\n        case 'rwk':\n        case 'saq':\n        case 'seh':\n        case 'sn':\n        case 'so':\n        case 'sq':\n        case 'ta':\n        case 'te':\n        case 'teo':\n        case 'tk':\n        case 'tr':\n        case 'ug':\n        case 'uz':\n        case 'vo':\n        case 'vun':\n        case 'wae':\n        case 'xog':\n            if (n === 1)\n                return Plural.One;\n            return Plural.Other;\n        case 'agq':\n        case 'bas':\n        case 'cu':\n        case 'dav':\n        case 'dje':\n        case 'dua':\n        case 'dyo':\n        case 'ebu':\n        case 'ewo':\n        case 'guz':\n        case 'kam':\n        case 'khq':\n        case 'ki':\n        case 'kln':\n        case 'kok':\n        case 'ksf':\n        case 'lrc':\n        case 'lu':\n        case 'luo':\n        case 'luy':\n        case 'mer':\n        case 'mfe':\n        case 'mgh':\n        case 'mua':\n        case 'mzn':\n        case 'nmg':\n        case 'nus':\n        case 'qu':\n        case 'rn':\n        case 'rw':\n        case 'sbp':\n        case 'twq':\n        case 'vai':\n        case 'yav':\n        case 'yue':\n        case 'zgh':\n        case 'ak':\n        case 'ln':\n        case 'mg':\n        case 'pa':\n        case 'ti':\n            if (n === Math.floor(n) && n >= 0 && n <= 1)\n                return Plural.One;\n            return Plural.Other;\n        case 'am':\n        case 'as':\n        case 'bn':\n        case 'fa':\n        case 'gu':\n        case 'hi':\n        case 'kn':\n        case 'mr':\n        case 'zu':\n            if (i === 0 || n === 1)\n                return Plural.One;\n            return Plural.Other;\n        case 'ar':\n            if (n === 0)\n                return Plural.Zero;\n            if (n === 1)\n                return Plural.One;\n            if (n === 2)\n                return Plural.Two;\n            if (n % 100 === Math.floor(n % 100) && n % 100 >= 3 && n % 100 <= 10)\n                return Plural.Few;\n            if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 99)\n                return Plural.Many;\n            return Plural.Other;\n        case 'ast':\n        case 'ca':\n        case 'de':\n        case 'en':\n        case 'et':\n        case 'fi':\n        case 'fy':\n        case 'gl':\n        case 'it':\n        case 'nl':\n        case 'sv':\n        case 'sw':\n        case 'ur':\n        case 'yi':\n            if (i === 1 && v === 0)\n                return Plural.One;\n            return Plural.Other;\n        case 'be':\n            if (n % 10 === 1 && !(n % 100 === 11))\n                return Plural.One;\n            if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 4 &&\n                !(n % 100 >= 12 && n % 100 <= 14))\n                return Plural.Few;\n            if (n % 10 === 0 || n % 10 === Math.floor(n % 10) && n % 10 >= 5 && n % 10 <= 9 ||\n                n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 14)\n                return Plural.Many;\n            return Plural.Other;\n        case 'br':\n            if (n % 10 === 1 && !(n % 100 === 11 || n % 100 === 71 || n % 100 === 91))\n                return Plural.One;\n            if (n % 10 === 2 && !(n % 100 === 12 || n % 100 === 72 || n % 100 === 92))\n                return Plural.Two;\n            if (n % 10 === Math.floor(n % 10) && (n % 10 >= 3 && n % 10 <= 4 || n % 10 === 9) &&\n                !(n % 100 >= 10 && n % 100 <= 19 || n % 100 >= 70 && n % 100 <= 79 ||\n                    n % 100 >= 90 && n % 100 <= 99))\n                return Plural.Few;\n            if (!(n === 0) && n % 1e6 === 0)\n                return Plural.Many;\n            return Plural.Other;\n        case 'bs':\n        case 'hr':\n        case 'sr':\n            if (v === 0 && i % 10 === 1 && !(i % 100 === 11) || f % 10 === 1 && !(f % 100 === 11))\n                return Plural.One;\n            if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n                !(i % 100 >= 12 && i % 100 <= 14) ||\n                f % 10 === Math.floor(f % 10) && f % 10 >= 2 && f % 10 <= 4 &&\n                    !(f % 100 >= 12 && f % 100 <= 14))\n                return Plural.Few;\n            return Plural.Other;\n        case 'cs':\n        case 'sk':\n            if (i === 1 && v === 0)\n                return Plural.One;\n            if (i === Math.floor(i) && i >= 2 && i <= 4 && v === 0)\n                return Plural.Few;\n            if (!(v === 0))\n                return Plural.Many;\n            return Plural.Other;\n        case 'cy':\n            if (n === 0)\n                return Plural.Zero;\n            if (n === 1)\n                return Plural.One;\n            if (n === 2)\n                return Plural.Two;\n            if (n === 3)\n                return Plural.Few;\n            if (n === 6)\n                return Plural.Many;\n            return Plural.Other;\n        case 'da':\n            if (n === 1 || !(t === 0) && (i === 0 || i === 1))\n                return Plural.One;\n            return Plural.Other;\n        case 'dsb':\n        case 'hsb':\n            if (v === 0 && i % 100 === 1 || f % 100 === 1)\n                return Plural.One;\n            if (v === 0 && i % 100 === 2 || f % 100 === 2)\n                return Plural.Two;\n            if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 ||\n                f % 100 === Math.floor(f % 100) && f % 100 >= 3 && f % 100 <= 4)\n                return Plural.Few;\n            return Plural.Other;\n        case 'ff':\n        case 'fr':\n        case 'hy':\n        case 'kab':\n            if (i === 0 || i === 1)\n                return Plural.One;\n            return Plural.Other;\n        case 'fil':\n            if (v === 0 && (i === 1 || i === 2 || i === 3) ||\n                v === 0 && !(i % 10 === 4 || i % 10 === 6 || i % 10 === 9) ||\n                !(v === 0) && !(f % 10 === 4 || f % 10 === 6 || f % 10 === 9))\n                return Plural.One;\n            return Plural.Other;\n        case 'ga':\n            if (n === 1)\n                return Plural.One;\n            if (n === 2)\n                return Plural.Two;\n            if (n === Math.floor(n) && n >= 3 && n <= 6)\n                return Plural.Few;\n            if (n === Math.floor(n) && n >= 7 && n <= 10)\n                return Plural.Many;\n            return Plural.Other;\n        case 'gd':\n            if (n === 1 || n === 11)\n                return Plural.One;\n            if (n === 2 || n === 12)\n                return Plural.Two;\n            if (n === Math.floor(n) && (n >= 3 && n <= 10 || n >= 13 && n <= 19))\n                return Plural.Few;\n            return Plural.Other;\n        case 'gv':\n            if (v === 0 && i % 10 === 1)\n                return Plural.One;\n            if (v === 0 && i % 10 === 2)\n                return Plural.Two;\n            if (v === 0 &&\n                (i % 100 === 0 || i % 100 === 20 || i % 100 === 40 || i % 100 === 60 || i % 100 === 80))\n                return Plural.Few;\n            if (!(v === 0))\n                return Plural.Many;\n            return Plural.Other;\n        case 'he':\n            if (i === 1 && v === 0)\n                return Plural.One;\n            if (i === 2 && v === 0)\n                return Plural.Two;\n            if (v === 0 && !(n >= 0 && n <= 10) && n % 10 === 0)\n                return Plural.Many;\n            return Plural.Other;\n        case 'is':\n            if (t === 0 && i % 10 === 1 && !(i % 100 === 11) || !(t === 0))\n                return Plural.One;\n            return Plural.Other;\n        case 'ksh':\n            if (n === 0)\n                return Plural.Zero;\n            if (n === 1)\n                return Plural.One;\n            return Plural.Other;\n        case 'kw':\n        case 'naq':\n        case 'se':\n        case 'smn':\n            if (n === 1)\n                return Plural.One;\n            if (n === 2)\n                return Plural.Two;\n            return Plural.Other;\n        case 'lag':\n            if (n === 0)\n                return Plural.Zero;\n            if ((i === 0 || i === 1) && !(n === 0))\n                return Plural.One;\n            return Plural.Other;\n        case 'lt':\n            if (n % 10 === 1 && !(n % 100 >= 11 && n % 100 <= 19))\n                return Plural.One;\n            if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 9 &&\n                !(n % 100 >= 11 && n % 100 <= 19))\n                return Plural.Few;\n            if (!(f === 0))\n                return Plural.Many;\n            return Plural.Other;\n        case 'lv':\n        case 'prg':\n            if (n % 10 === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19 ||\n                v === 2 && f % 100 === Math.floor(f % 100) && f % 100 >= 11 && f % 100 <= 19)\n                return Plural.Zero;\n            if (n % 10 === 1 && !(n % 100 === 11) || v === 2 && f % 10 === 1 && !(f % 100 === 11) ||\n                !(v === 2) && f % 10 === 1)\n                return Plural.One;\n            return Plural.Other;\n        case 'mk':\n            if (v === 0 && i % 10 === 1 || f % 10 === 1)\n                return Plural.One;\n            return Plural.Other;\n        case 'mt':\n            if (n === 1)\n                return Plural.One;\n            if (n === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 2 && n % 100 <= 10)\n                return Plural.Few;\n            if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19)\n                return Plural.Many;\n            return Plural.Other;\n        case 'pl':\n            if (i === 1 && v === 0)\n                return Plural.One;\n            if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n                !(i % 100 >= 12 && i % 100 <= 14))\n                return Plural.Few;\n            if (v === 0 && !(i === 1) && i % 10 === Math.floor(i % 10) && i % 10 >= 0 && i % 10 <= 1 ||\n                v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||\n                v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 12 && i % 100 <= 14)\n                return Plural.Many;\n            return Plural.Other;\n        case 'pt':\n            if (n === Math.floor(n) && n >= 0 && n <= 2 && !(n === 2))\n                return Plural.One;\n            return Plural.Other;\n        case 'ro':\n            if (i === 1 && v === 0)\n                return Plural.One;\n            if (!(v === 0) || n === 0 ||\n                !(n === 1) && n % 100 === Math.floor(n % 100) && n % 100 >= 1 && n % 100 <= 19)\n                return Plural.Few;\n            return Plural.Other;\n        case 'ru':\n        case 'uk':\n            if (v === 0 && i % 10 === 1 && !(i % 100 === 11))\n                return Plural.One;\n            if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n                !(i % 100 >= 12 && i % 100 <= 14))\n                return Plural.Few;\n            if (v === 0 && i % 10 === 0 ||\n                v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||\n                v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 11 && i % 100 <= 14)\n                return Plural.Many;\n            return Plural.Other;\n        case 'shi':\n            if (i === 0 || n === 1)\n                return Plural.One;\n            if (n === Math.floor(n) && n >= 2 && n <= 10)\n                return Plural.Few;\n            return Plural.Other;\n        case 'si':\n            if (n === 0 || n === 1 || i === 0 && f === 1)\n                return Plural.One;\n            return Plural.Other;\n        case 'sl':\n            if (v === 0 && i % 100 === 1)\n                return Plural.One;\n            if (v === 0 && i % 100 === 2)\n                return Plural.Two;\n            if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 || !(v === 0))\n                return Plural.Few;\n            return Plural.Other;\n        case 'tzm':\n            if (n === Math.floor(n) && n >= 0 && n <= 1 || n === Math.floor(n) && n >= 11 && n <= 99)\n                return Plural.One;\n            return Plural.Other;\n        default:\n            return Plural.Other;\n    }\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds and removes CSS classes on an HTML element.\n *\n * \\@howToUse\n * ```\n *     <some-element [ngClass]=\"'first second'\">...</some-element>\n *\n *     <some-element [ngClass]=\"['first', 'second']\">...</some-element>\n *\n *     <some-element [ngClass]=\"{'first': true, 'second': true, 'third': false}\">...</some-element>\n *\n *     <some-element [ngClass]=\"stringExp|arrayExp|objExp\">...</some-element>\n *\n *     <some-element [ngClass]=\"{'class1 class2 class3' : true}\">...</some-element>\n * ```\n *\n * \\@description\n *\n * The CSS classes are updated as follows, depending on the type of the expression evaluation:\n * - `string` - the CSS classes listed in the string (space delimited) are added,\n * - `Array` - the CSS classes declared as Array elements are added,\n * - `Object` - keys are CSS classes that get added when the expression given in the value\n *              evaluates to a truthy value, otherwise they are removed.\n *\n * \\@stable\n */\nvar NgClass = (function () {\n    /**\n     * @param {?} _iterableDiffers\n     * @param {?} _keyValueDiffers\n     * @param {?} _ngEl\n     * @param {?} _renderer\n     */\n    function NgClass(_iterableDiffers, _keyValueDiffers, _ngEl, _renderer) {\n        this._iterableDiffers = _iterableDiffers;\n        this._keyValueDiffers = _keyValueDiffers;\n        this._ngEl = _ngEl;\n        this._renderer = _renderer;\n        this._initialClasses = [];\n    }\n    Object.defineProperty(NgClass.prototype, \"klass\", {\n        /**\n         * @param {?} v\n         * @return {?}\n         */\n        set: function (v) {\n            this._applyInitialClasses(true);\n            this._initialClasses = typeof v === 'string' ? v.split(/\\s+/) : [];\n            this._applyInitialClasses(false);\n            this._applyClasses(this._rawClass, false);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgClass.prototype, \"ngClass\", {\n        /**\n         * @param {?} v\n         * @return {?}\n         */\n        set: function (v) {\n            this._cleanupClasses(this._rawClass);\n            this._iterableDiffer = null;\n            this._keyValueDiffer = null;\n            this._rawClass = typeof v === 'string' ? v.split(/\\s+/) : v;\n            if (this._rawClass) {\n                if (Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ɵisListLikeIterable\"])(this._rawClass)) {\n                    this._iterableDiffer = this._iterableDiffers.find(this._rawClass).create();\n                }\n                else {\n                    this._keyValueDiffer = this._keyValueDiffers.find(this._rawClass).create();\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    NgClass.prototype.ngDoCheck = function () {\n        if (this._iterableDiffer) {\n            var /** @type {?} */ iterableChanges = this._iterableDiffer.diff(/** @type {?} */ (this._rawClass));\n            if (iterableChanges) {\n                this._applyIterableChanges(iterableChanges);\n            }\n        }\n        else if (this._keyValueDiffer) {\n            var /** @type {?} */ keyValueChanges = this._keyValueDiffer.diff(/** @type {?} */ (this._rawClass));\n            if (keyValueChanges) {\n                this._applyKeyValueChanges(keyValueChanges);\n            }\n        }\n    };\n    /**\n     * @param {?} rawClassVal\n     * @return {?}\n     */\n    NgClass.prototype._cleanupClasses = function (rawClassVal) {\n        this._applyClasses(rawClassVal, true);\n        this._applyInitialClasses(false);\n    };\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgClass.prototype._applyKeyValueChanges = function (changes) {\n        var _this = this;\n        changes.forEachAddedItem(function (record) { return _this._toggleClass(record.key, record.currentValue); });\n        changes.forEachChangedItem(function (record) { return _this._toggleClass(record.key, record.currentValue); });\n        changes.forEachRemovedItem(function (record) {\n            if (record.previousValue) {\n                _this._toggleClass(record.key, false);\n            }\n        });\n    };\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgClass.prototype._applyIterableChanges = function (changes) {\n        var _this = this;\n        changes.forEachAddedItem(function (record) {\n            if (typeof record.item === 'string') {\n                _this._toggleClass(record.item, true);\n            }\n            else {\n                throw new Error(\"NgClass can only toggle CSS classes expressed as strings, got \" + Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ɵstringify\"])(record.item));\n            }\n        });\n        changes.forEachRemovedItem(function (record) { return _this._toggleClass(record.item, false); });\n    };\n    /**\n     * @param {?} isCleanup\n     * @return {?}\n     */\n    NgClass.prototype._applyInitialClasses = function (isCleanup) {\n        var _this = this;\n        this._initialClasses.forEach(function (klass) { return _this._toggleClass(klass, !isCleanup); });\n    };\n    /**\n     * @param {?} rawClassVal\n     * @param {?} isCleanup\n     * @return {?}\n     */\n    NgClass.prototype._applyClasses = function (rawClassVal, isCleanup) {\n        var _this = this;\n        if (rawClassVal) {\n            if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {\n                ((rawClassVal)).forEach(function (klass) { return _this._toggleClass(klass, !isCleanup); });\n            }\n            else {\n                Object.keys(rawClassVal).forEach(function (klass) {\n                    if (rawClassVal[klass] != null)\n                        _this._toggleClass(klass, !isCleanup);\n                });\n            }\n        }\n    };\n    /**\n     * @param {?} klass\n     * @param {?} enabled\n     * @return {?}\n     */\n    NgClass.prototype._toggleClass = function (klass, enabled) {\n        var _this = this;\n        klass = klass.trim();\n        if (klass) {\n            klass.split(/\\s+/g).forEach(function (klass) { _this._renderer.setElementClass(_this._ngEl.nativeElement, klass, !!enabled); });\n        }\n    };\n    return NgClass;\n}());\nNgClass.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngClass]' },] },\n];\n/**\n * @nocollapse\n */\nNgClass.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"IterableDiffers\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"KeyValueDiffers\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer\"], },\n]; };\nNgClass.propDecorators = {\n    'klass': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"], args: ['class',] },],\n    'ngClass': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Instantiates a single {\\@link Component} type and inserts its Host View into current View.\n * `NgComponentOutlet` provides a declarative approach for dynamic component creation.\n *\n * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and\n * any existing component will get destroyed.\n *\n * ### Fine tune control\n *\n * You can control the component creation process by using the following optional attributes:\n *\n * * `ngComponentOutletInjector`: Optional custom {\\@link Injector} that will be used as parent for\n * the Component. Defaults to the injector of the current view container.\n *\n * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content\n * section of the component, if exists.\n *\n * * `ngComponentOutletNgModuleFactory`: Optional module factory to allow dynamically loading other\n * module, then load a component from that module.\n *\n * ### Syntax\n *\n * Simple\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression\"></ng-container>\n * ```\n *\n * Customized injector/content\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   injector: injectorExpression;\n *                                   content: contentNodesExpression;\">\n * </ng-container>\n * ```\n *\n * Customized ngModuleFactory\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   ngModuleFactory: moduleFactory;\">\n * </ng-container>\n * ```\n * ## Example\n *\n * {\\@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'}\n *\n * A more complete example with additional options:\n *\n * {\\@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'}\n * A more complete example with ngModuleFactory:\n *\n * {\\@example common/ngComponentOutlet/ts/module.ts region='NgModuleFactoryExample'}\n *\n * \\@experimental\n */\nvar NgComponentOutlet = (function () {\n    /**\n     * @param {?} _viewContainerRef\n     */\n    function NgComponentOutlet(_viewContainerRef) {\n        this._viewContainerRef = _viewContainerRef;\n        this._componentRef = null;\n        this._moduleRef = null;\n    }\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgComponentOutlet.prototype.ngOnChanges = function (changes) {\n        this._viewContainerRef.clear();\n        this._componentRef = null;\n        if (this.ngComponentOutlet) {\n            var /** @type {?} */ elInjector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;\n            if (changes['ngComponentOutletNgModuleFactory']) {\n                if (this._moduleRef)\n                    this._moduleRef.destroy();\n                if (this.ngComponentOutletNgModuleFactory) {\n                    var /** @type {?} */ parentModule = elInjector.get(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModuleRef\"]);\n                    this._moduleRef = this.ngComponentOutletNgModuleFactory.create(parentModule.injector);\n                }\n                else {\n                    this._moduleRef = null;\n                }\n            }\n            var /** @type {?} */ componentFactoryResolver = this._moduleRef ? this._moduleRef.componentFactoryResolver :\n                elInjector.get(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ComponentFactoryResolver\"]);\n            var /** @type {?} */ componentFactory = componentFactoryResolver.resolveComponentFactory(this.ngComponentOutlet);\n            this._componentRef = this._viewContainerRef.createComponent(componentFactory, this._viewContainerRef.length, elInjector, this.ngComponentOutletContent);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    NgComponentOutlet.prototype.ngOnDestroy = function () {\n        if (this._moduleRef)\n            this._moduleRef.destroy();\n    };\n    return NgComponentOutlet;\n}());\nNgComponentOutlet.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngComponentOutlet]' },] },\n];\n/**\n * @nocollapse\n */\nNgComponentOutlet.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"], },\n]; };\nNgComponentOutlet.propDecorators = {\n    'ngComponentOutlet': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngComponentOutletInjector': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngComponentOutletContent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngComponentOutletNgModuleFactory': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@stable\n */\nvar NgForOfContext = (function () {\n    /**\n     * @param {?} $implicit\n     * @param {?} ngForOf\n     * @param {?} index\n     * @param {?} count\n     */\n    function NgForOfContext($implicit, ngForOf, index, count) {\n        this.$implicit = $implicit;\n        this.ngForOf = ngForOf;\n        this.index = index;\n        this.count = count;\n    }\n    Object.defineProperty(NgForOfContext.prototype, \"first\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.index === 0; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForOfContext.prototype, \"last\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.index === this.count - 1; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForOfContext.prototype, \"even\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this.index % 2 === 0; },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForOfContext.prototype, \"odd\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return !this.even; },\n        enumerable: true,\n        configurable: true\n    });\n    return NgForOfContext;\n}());\n/**\n * The `NgForOf` directive instantiates a template once per item from an iterable. The context\n * for each instantiated template inherits from the outer context with the given loop variable\n * set to the current item from the iterable.\n *\n * ### Local Variables\n *\n * `NgForOf` provides several exported values that can be aliased to local variables:\n *\n * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`).\n * - `ngForOf: NgIterable<T>`: The value of the iterable expression. Useful when the expression is\n * more complex then a property access, for example when using the async pipe (`userStreams |\n * async`).\n * - `index: number`: The index of the current item in the iterable.\n * - `first: boolean`: True when the item is the first item in the iterable.\n * - `last: boolean`: True when the item is the last item in the iterable.\n * - `even: boolean`: True when the item has an even index in the iterable.\n * - `odd: boolean`: True when the item has an odd index in the iterable.\n *\n * ```\n * <li *ngFor=\"let user of userObservable | async as users; index as i; first as isFirst\">\n *    {{i}}/{{users.length}}. {{user}} <span *ngIf=\"isFirst\">default</span>\n * </li>\n * ```\n *\n * ### Change Propagation\n *\n * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM:\n *\n * * When an item is added, a new instance of the template is added to the DOM.\n * * When an item is removed, its template instance is removed from the DOM.\n * * When items are reordered, their respective templates are reordered in the DOM.\n * * Otherwise, the DOM element for that item will remain the same.\n *\n * Angular uses object identity to track insertions and deletions within the iterator and reproduce\n * those changes in the DOM. This has important implications for animations and any stateful\n * controls (such as `<input>` elements which accept user input) that are present. Inserted rows can\n * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state\n * such as user input.\n *\n * It is possible for the identities of elements in the iterator to change while the data does not.\n * This can happen, for example, if the iterator produced from an RPC to the server, and that\n * RPC is re-run. Even if the data hasn't changed, the second response will produce objects with\n * different identities, and Angular will tear down the entire DOM and rebuild it (as if all old\n * elements were deleted and all new elements inserted). This is an expensive operation and should\n * be avoided if possible.\n *\n * To customize the default tracking algorithm, `NgForOf` supports `trackBy` option.\n * `trackBy` takes a function which has two arguments: `index` and `item`.\n * If `trackBy` is given, Angular tracks changes by the return value of the function.\n *\n * ### Syntax\n *\n * - `<li *ngFor=\"let item of items; index as i; trackBy: trackByFn\">...</li>`\n * - `<li template=\"ngFor let item of items; index as i; trackBy: trackByFn\">...</li>`\n *\n * With `<ng-template>` element:\n *\n * ```\n * <ng-template ngFor let-item [ngForOf]=\"items\" let-i=\"index\" [ngForTrackBy]=\"trackByFn\">\n *   <li>...</li>\n * </ng-template>\n * ```\n *\n * ### Example\n *\n * See a [live demo](http://plnkr.co/edit/KVuXxDp0qinGDyo307QW?p=preview) for a more detailed\n * example.\n *\n * \\@stable\n */\nvar NgForOf = (function () {\n    /**\n     * @param {?} _viewContainer\n     * @param {?} _template\n     * @param {?} _differs\n     */\n    function NgForOf(_viewContainer, _template, _differs) {\n        this._viewContainer = _viewContainer;\n        this._template = _template;\n        this._differs = _differs;\n        this._differ = null;\n    }\n    Object.defineProperty(NgForOf.prototype, \"ngForTrackBy\", {\n        /**\n         * @return {?}\n         */\n        get: function () { return this._trackByFn; },\n        /**\n         * @param {?} fn\n         * @return {?}\n         */\n        set: function (fn) {\n            if (Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"isDevMode\"])() && fn != null && typeof fn !== 'function') {\n                // TODO(vicb): use a log service once there is a public one available\n                if ((console) && (console.warn)) {\n                    console.warn(\"trackBy must be a function, but received \" + JSON.stringify(fn) + \". \" +\n                        \"See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.\");\n                }\n            }\n            this._trackByFn = fn;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgForOf.prototype, \"ngForTemplate\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            // TODO(TS2.1): make TemplateRef<Partial<NgForRowOf<T>>> once we move to TS v2.1\n            // The current type is too restrictive; a template that just uses index, for example,\n            // should be acceptable.\n            if (value) {\n                this._template = value;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgForOf.prototype.ngOnChanges = function (changes) {\n        if ('ngForOf' in changes) {\n            // React on ngForOf changes only once all inputs have been initialized\n            var /** @type {?} */ value = changes['ngForOf'].currentValue;\n            if (!this._differ && value) {\n                try {\n                    this._differ = this._differs.find(value).create(this.ngForTrackBy);\n                }\n                catch (e) {\n                    throw new Error(\"Cannot find a differ supporting object '\" + value + \"' of type '\" + getTypeNameForDebugging(value) + \"'. NgFor only supports binding to Iterables such as Arrays.\");\n                }\n            }\n        }\n    };\n    /**\n     * @return {?}\n     */\n    NgForOf.prototype.ngDoCheck = function () {\n        if (this._differ) {\n            var /** @type {?} */ changes = this._differ.diff(this.ngForOf);\n            if (changes)\n                this._applyChanges(changes);\n        }\n    };\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgForOf.prototype._applyChanges = function (changes) {\n        var _this = this;\n        var /** @type {?} */ insertTuples = [];\n        changes.forEachOperation(function (item, adjustedPreviousIndex, currentIndex) {\n            if (item.previousIndex == null) {\n                var /** @type {?} */ view = _this._viewContainer.createEmbeddedView(_this._template, new NgForOfContext(/** @type {?} */ ((null)), _this.ngForOf, -1, -1), currentIndex);\n                var /** @type {?} */ tuple = new RecordViewTuple(item, view);\n                insertTuples.push(tuple);\n            }\n            else if (currentIndex == null) {\n                _this._viewContainer.remove(adjustedPreviousIndex);\n            }\n            else {\n                var /** @type {?} */ view = ((_this._viewContainer.get(adjustedPreviousIndex)));\n                _this._viewContainer.move(view, currentIndex);\n                var /** @type {?} */ tuple = new RecordViewTuple(item, /** @type {?} */ (view));\n                insertTuples.push(tuple);\n            }\n        });\n        for (var /** @type {?} */ i = 0; i < insertTuples.length; i++) {\n            this._perViewChange(insertTuples[i].view, insertTuples[i].record);\n        }\n        for (var /** @type {?} */ i = 0, /** @type {?} */ ilen = this._viewContainer.length; i < ilen; i++) {\n            var /** @type {?} */ viewRef = (this._viewContainer.get(i));\n            viewRef.context.index = i;\n            viewRef.context.count = ilen;\n        }\n        changes.forEachIdentityChange(function (record) {\n            var /** @type {?} */ viewRef = (_this._viewContainer.get(record.currentIndex));\n            viewRef.context.$implicit = record.item;\n        });\n    };\n    /**\n     * @param {?} view\n     * @param {?} record\n     * @return {?}\n     */\n    NgForOf.prototype._perViewChange = function (view, record) {\n        view.context.$implicit = record.item;\n    };\n    return NgForOf;\n}());\nNgForOf.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngFor][ngForOf]' },] },\n];\n/**\n * @nocollapse\n */\nNgForOf.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"TemplateRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"IterableDiffers\"], },\n]; };\nNgForOf.propDecorators = {\n    'ngForOf': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngForTrackBy': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngForTemplate': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\nvar RecordViewTuple = (function () {\n    /**\n     * @param {?} record\n     * @param {?} view\n     */\n    function RecordViewTuple(record, view) {\n        this.record = record;\n        this.view = view;\n    }\n    return RecordViewTuple;\n}());\n/**\n * @param {?} type\n * @return {?}\n */\nfunction getTypeNameForDebugging(type) {\n    return type['name'] || typeof type;\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Conditionally includes a template based on the value of an `expression`.\n *\n * `ngIf` evaluates the `expression` and then renders the `then` or `else` template in its place\n * when expression is truthy or falsy respectively. Typically the:\n *  - `then` template is the inline template of `ngIf` unless bound to a different value.\n *  - `else` template is blank unless it is bound.\n *\n * ## Most common usage\n *\n * The most common usage of the `ngIf` directive is to conditionally show the inline template as\n * seen in this example:\n * {\\@example common/ngIf/ts/module.ts region='NgIfSimple'}\n *\n * ## Showing an alternative template using `else`\n *\n * If it is necessary to display a template when the `expression` is falsy use the `else` template\n * binding as shown. Note that the `else` binding points to a `<ng-template>` labeled `#elseBlock`.\n * The template can be defined anywhere in the component view but is typically placed right after\n * `ngIf` for readability.\n *\n * {\\@example common/ngIf/ts/module.ts region='NgIfElse'}\n *\n * ## Using non-inlined `then` template\n *\n * Usually the `then` template is the inlined template of the `ngIf`, but it can be changed using\n * a binding (just like `else`). Because `then` and `else` are bindings, the template references can\n * change at runtime as shown in this example.\n *\n * {\\@example common/ngIf/ts/module.ts region='NgIfThenElse'}\n *\n * ## Storing conditional result in a variable\n *\n * A common pattern is that we need to show a set of properties from the same object. If the\n * object is undefined, then we have to use the safe-traversal-operator `?.` to guard against\n * dereferencing a `null` value. This is especially the case when waiting on async data such as\n * when using the `async` pipe as shown in folowing example:\n *\n * ```\n * Hello {{ (userStream|async)?.last }}, {{ (userStream|async)?.first }}!\n * ```\n *\n * There are several inefficiencies in the above example:\n *  - We create multiple subscriptions on `userStream`. One for each `async` pipe, or two in the\n *    example above.\n *  - We cannot display an alternative screen while waiting for the data to arrive asynchronously.\n *  - We have to use the safe-traversal-operator `?.` to access properties, which is cumbersome.\n *  - We have to place the `async` pipe in parenthesis.\n *\n * A better way to do this is to use `ngIf` and store the result of the condition in a local\n * variable as shown in the the example below:\n *\n * {\\@example common/ngIf/ts/module.ts region='NgIfAs'}\n *\n * Notice that:\n *  - We use only one `async` pipe and hence only one subscription gets created.\n *  - `ngIf` stores the result of the `userStream|async` in the local variable `user`.\n *  - The local `user` can then be bound repeatedly in a more efficient way.\n *  - No need to use the safe-traversal-operator `?.` to access properties as `ngIf` will only\n *    display the data if `userStream` returns a value.\n *  - We can display an alternative template while waiting for the data.\n *\n * ### Syntax\n *\n * Simple form:\n * - `<div *ngIf=\"condition\">...</div>`\n * - `<div template=\"ngIf condition\">...</div>`\n * - `<ng-template [ngIf]=\"condition\"><div>...</div></ng-template>`\n *\n * Form with an else block:\n * ```\n * <div *ngIf=\"condition; else elseBlock\">...</div>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n *\n * Form with a `then` and `else` block:\n * ```\n * <div *ngIf=\"condition; then thenBlock else elseBlock\"></div>\n * <ng-template #thenBlock>...</ng-template>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n *\n * Form with storing the value locally:\n * ```\n * <div *ngIf=\"condition as value; else elseBlock\">{{value}}</div>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n *\n * \\@stable\n */\nvar NgIf = (function () {\n    /**\n     * @param {?} _viewContainer\n     * @param {?} templateRef\n     */\n    function NgIf(_viewContainer, templateRef) {\n        this._viewContainer = _viewContainer;\n        this._context = new NgIfContext();\n        this._thenTemplateRef = null;\n        this._elseTemplateRef = null;\n        this._thenViewRef = null;\n        this._elseViewRef = null;\n        this._thenTemplateRef = templateRef;\n    }\n    Object.defineProperty(NgIf.prototype, \"ngIf\", {\n        /**\n         * @param {?} condition\n         * @return {?}\n         */\n        set: function (condition) {\n            this._context.$implicit = this._context.ngIf = condition;\n            this._updateView();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgIf.prototype, \"ngIfThen\", {\n        /**\n         * @param {?} templateRef\n         * @return {?}\n         */\n        set: function (templateRef) {\n            this._thenTemplateRef = templateRef;\n            this._thenViewRef = null; // clear previous view if any.\n            this._updateView();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(NgIf.prototype, \"ngIfElse\", {\n        /**\n         * @param {?} templateRef\n         * @return {?}\n         */\n        set: function (templateRef) {\n            this._elseTemplateRef = templateRef;\n            this._elseViewRef = null; // clear previous view if any.\n            this._updateView();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    NgIf.prototype._updateView = function () {\n        if (this._context.$implicit) {\n            if (!this._thenViewRef) {\n                this._viewContainer.clear();\n                this._elseViewRef = null;\n                if (this._thenTemplateRef) {\n                    this._thenViewRef =\n                        this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n                }\n            }\n        }\n        else {\n            if (!this._elseViewRef) {\n                this._viewContainer.clear();\n                this._thenViewRef = null;\n                if (this._elseTemplateRef) {\n                    this._elseViewRef =\n                        this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n                }\n            }\n        }\n    };\n    return NgIf;\n}());\nNgIf.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngIf]' },] },\n];\n/**\n * @nocollapse\n */\nNgIf.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"TemplateRef\"], },\n]; };\nNgIf.propDecorators = {\n    'ngIf': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngIfThen': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngIfElse': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\n/**\n * \\@stable\n */\nvar NgIfContext = (function () {\n    function NgIfContext() {\n        this.$implicit = null;\n        this.ngIf = null;\n    }\n    return NgIfContext;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar SwitchView = (function () {\n    /**\n     * @param {?} _viewContainerRef\n     * @param {?} _templateRef\n     */\n    function SwitchView(_viewContainerRef, _templateRef) {\n        this._viewContainerRef = _viewContainerRef;\n        this._templateRef = _templateRef;\n        this._created = false;\n    }\n    /**\n     * @return {?}\n     */\n    SwitchView.prototype.create = function () {\n        this._created = true;\n        this._viewContainerRef.createEmbeddedView(this._templateRef);\n    };\n    /**\n     * @return {?}\n     */\n    SwitchView.prototype.destroy = function () {\n        this._created = false;\n        this._viewContainerRef.clear();\n    };\n    /**\n     * @param {?} created\n     * @return {?}\n     */\n    SwitchView.prototype.enforceState = function (created) {\n        if (created && !this._created) {\n            this.create();\n        }\n        else if (!created && this._created) {\n            this.destroy();\n        }\n    };\n    return SwitchView;\n}());\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds / removes DOM sub-trees when the nest match expressions matches the switch\n *             expression.\n *\n * \\@howToUse\n * ```\n *     <container-element [ngSwitch]=\"switch_expression\">\n *       <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *       <some-element *ngSwitchCase=\"match_expression_2\">...</some-element>\n *       <some-other-element *ngSwitchCase=\"match_expression_3\">...</some-other-element>\n *       <ng-container *ngSwitchCase=\"match_expression_3\">\n *         <!-- use a ng-container to group multiple root nodes -->\n *         <inner-element></inner-element>\n *         <inner-other-element></inner-other-element>\n *       </ng-container>\n *       <some-element *ngSwitchDefault>...</some-element>\n *     </container-element>\n * ```\n * \\@description\n *\n * `NgSwitch` stamps out nested views when their match expression value matches the value of the\n * switch expression.\n *\n * In other words:\n * - you define a container element (where you place the directive with a switch expression on the\n * `[ngSwitch]=\"...\"` attribute)\n * - you define inner views inside the `NgSwitch` and place a `*ngSwitchCase` attribute on the view\n * root elements.\n *\n * Elements within `NgSwitch` but outside of a `NgSwitchCase` or `NgSwitchDefault` directives will\n * be preserved at the location.\n *\n * The `ngSwitchCase` directive informs the parent `NgSwitch` of which view to display when the\n * expression is evaluated.\n * When no matching expression is found on a `ngSwitchCase` view, the `ngSwitchDefault` view is\n * stamped out.\n *\n * \\@stable\n */\nvar NgSwitch = (function () {\n    function NgSwitch() {\n        this._defaultUsed = false;\n        this._caseCount = 0;\n        this._lastCaseCheckIndex = 0;\n        this._lastCasesMatched = false;\n    }\n    Object.defineProperty(NgSwitch.prototype, \"ngSwitch\", {\n        /**\n         * @param {?} newValue\n         * @return {?}\n         */\n        set: function (newValue) {\n            this._ngSwitch = newValue;\n            if (this._caseCount === 0) {\n                this._updateDefaultCases(true);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * \\@internal\n     * @return {?}\n     */\n    NgSwitch.prototype._addCase = function () { return this._caseCount++; };\n    /**\n     * \\@internal\n     * @param {?} view\n     * @return {?}\n     */\n    NgSwitch.prototype._addDefault = function (view) {\n        if (!this._defaultViews) {\n            this._defaultViews = [];\n        }\n        this._defaultViews.push(view);\n    };\n    /**\n     * \\@internal\n     * @param {?} value\n     * @return {?}\n     */\n    NgSwitch.prototype._matchCase = function (value) {\n        var /** @type {?} */ matched = value == this._ngSwitch;\n        this._lastCasesMatched = this._lastCasesMatched || matched;\n        this._lastCaseCheckIndex++;\n        if (this._lastCaseCheckIndex === this._caseCount) {\n            this._updateDefaultCases(!this._lastCasesMatched);\n            this._lastCaseCheckIndex = 0;\n            this._lastCasesMatched = false;\n        }\n        return matched;\n    };\n    /**\n     * @param {?} useDefault\n     * @return {?}\n     */\n    NgSwitch.prototype._updateDefaultCases = function (useDefault) {\n        if (this._defaultViews && useDefault !== this._defaultUsed) {\n            this._defaultUsed = useDefault;\n            for (var /** @type {?} */ i = 0; i < this._defaultViews.length; i++) {\n                var /** @type {?} */ defaultView = this._defaultViews[i];\n                defaultView.enforceState(useDefault);\n            }\n        }\n    };\n    return NgSwitch;\n}());\nNgSwitch.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngSwitch]' },] },\n];\n/**\n * @nocollapse\n */\nNgSwitch.ctorParameters = function () { return []; };\nNgSwitch.propDecorators = {\n    'ngSwitch': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Creates a view that will be added/removed from the parent {\\@link NgSwitch} when the\n *             given expression evaluate to respectively the same/different value as the switch\n *             expression.\n *\n * \\@howToUse\n * ```\n * <container-element [ngSwitch]=\"switch_expression\">\n *   <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n * </container-element>\n * ```\n * \\@description\n *\n * Insert the sub-tree when the expression evaluates to the same value as the enclosing switch\n * expression.\n *\n * If multiple match expressions match the switch expression value, all of them are displayed.\n *\n * See {\\@link NgSwitch} for more details and example.\n *\n * \\@stable\n */\nvar NgSwitchCase = (function () {\n    /**\n     * @param {?} viewContainer\n     * @param {?} templateRef\n     * @param {?} ngSwitch\n     */\n    function NgSwitchCase(viewContainer, templateRef, ngSwitch) {\n        this.ngSwitch = ngSwitch;\n        ngSwitch._addCase();\n        this._view = new SwitchView(viewContainer, templateRef);\n    }\n    /**\n     * @return {?}\n     */\n    NgSwitchCase.prototype.ngDoCheck = function () { this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase)); };\n    return NgSwitchCase;\n}());\nNgSwitchCase.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngSwitchCase]' },] },\n];\n/**\n * @nocollapse\n */\nNgSwitchCase.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"TemplateRef\"], },\n    { type: NgSwitch, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Host\"] },] },\n]; };\nNgSwitchCase.propDecorators = {\n    'ngSwitchCase': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Creates a view that is added to the parent {\\@link NgSwitch} when no case expressions\n * match the\n *             switch expression.\n *\n * \\@howToUse\n * ```\n * <container-element [ngSwitch]=\"switch_expression\">\n *   <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *   <some-other-element *ngSwitchDefault>...</some-other-element>\n * </container-element>\n * ```\n *\n * \\@description\n *\n * Insert the sub-tree when no case expressions evaluate to the same value as the enclosing switch\n * expression.\n *\n * See {\\@link NgSwitch} for more details and example.\n *\n * \\@stable\n */\nvar NgSwitchDefault = (function () {\n    /**\n     * @param {?} viewContainer\n     * @param {?} templateRef\n     * @param {?} ngSwitch\n     */\n    function NgSwitchDefault(viewContainer, templateRef, ngSwitch) {\n        ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n    }\n    return NgSwitchDefault;\n}());\nNgSwitchDefault.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngSwitchDefault]' },] },\n];\n/**\n * @nocollapse\n */\nNgSwitchDefault.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"TemplateRef\"], },\n    { type: NgSwitch, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Host\"] },] },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.\n *\n * \\@howToUse\n * ```\n * <some-element [ngPlural]=\"value\">\n *   <ng-template ngPluralCase=\"=0\">there is nothing</ng-template>\n *   <ng-template ngPluralCase=\"=1\">there is one</ng-template>\n *   <ng-template ngPluralCase=\"few\">there are a few</ng-template>\n * </some-element>\n * ```\n *\n * \\@description\n *\n * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees\n * that match the switch expression's pluralization category.\n *\n * To use this directive you must provide a container element that sets the `[ngPlural]` attribute\n * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their\n * expression:\n * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value\n *   matches the switch expression exactly,\n * - otherwise, the view will be treated as a \"category match\", and will only display if exact\n *   value matches aren't found and the value maps to its category for the defined locale.\n *\n * See http://cldr.unicode.org/index/cldr-spec/plural-rules\n *\n * \\@experimental\n */\nvar NgPlural = (function () {\n    /**\n     * @param {?} _localization\n     */\n    function NgPlural(_localization) {\n        this._localization = _localization;\n        this._caseViews = {};\n    }\n    Object.defineProperty(NgPlural.prototype, \"ngPlural\", {\n        /**\n         * @param {?} value\n         * @return {?}\n         */\n        set: function (value) {\n            this._switchValue = value;\n            this._updateView();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} value\n     * @param {?} switchView\n     * @return {?}\n     */\n    NgPlural.prototype.addCase = function (value, switchView) { this._caseViews[value] = switchView; };\n    /**\n     * @return {?}\n     */\n    NgPlural.prototype._updateView = function () {\n        this._clearViews();\n        var /** @type {?} */ cases = Object.keys(this._caseViews);\n        var /** @type {?} */ key = getPluralCategory(this._switchValue, cases, this._localization);\n        this._activateView(this._caseViews[key]);\n    };\n    /**\n     * @return {?}\n     */\n    NgPlural.prototype._clearViews = function () {\n        if (this._activeView)\n            this._activeView.destroy();\n    };\n    /**\n     * @param {?} view\n     * @return {?}\n     */\n    NgPlural.prototype._activateView = function (view) {\n        if (view) {\n            this._activeView = view;\n            this._activeView.create();\n        }\n    };\n    return NgPlural;\n}());\nNgPlural.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngPlural]' },] },\n];\n/**\n * @nocollapse\n */\nNgPlural.ctorParameters = function () { return [\n    { type: NgLocalization, },\n]; };\nNgPlural.propDecorators = {\n    'ngPlural': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Creates a view that will be added/removed from the parent {\\@link NgPlural} when the\n *             given expression matches the plural expression according to CLDR rules.\n *\n * \\@howToUse\n * ```\n * <some-element [ngPlural]=\"value\">\n *   <ng-template ngPluralCase=\"=0\">...</ng-template>\n *   <ng-template ngPluralCase=\"other\">...</ng-template>\n * </some-element>\n * ```\n *\n * See {\\@link NgPlural} for more details and example.\n *\n * \\@experimental\n */\nvar NgPluralCase = (function () {\n    /**\n     * @param {?} value\n     * @param {?} template\n     * @param {?} viewContainer\n     * @param {?} ngPlural\n     */\n    function NgPluralCase(value, template, viewContainer, ngPlural) {\n        this.value = value;\n        var isANumber = !isNaN(Number(value));\n        ngPlural.addCase(isANumber ? \"=\" + value : value, new SwitchView(viewContainer, template));\n    }\n    return NgPluralCase;\n}());\nNgPluralCase.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngPluralCase]' },] },\n];\n/**\n * @nocollapse\n */\nNgPluralCase.ctorParameters = function () { return [\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Attribute\"], args: ['ngPluralCase',] },] },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"TemplateRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"], },\n    { type: NgPlural, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Host\"] },] },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Update an HTML element styles.\n *\n * \\@howToUse\n * ```\n * <some-element [ngStyle]=\"{'font-style': styleExp}\">...</some-element>\n *\n * <some-element [ngStyle]=\"{'max-width.px': widthExp}\">...</some-element>\n *\n * <some-element [ngStyle]=\"objExp\">...</some-element>\n * ```\n *\n * \\@description\n *\n * The styles are updated according to the value of the expression evaluation:\n * - keys are style names with an optional `.<unit>` suffix (ie 'top.px', 'font-style.em'),\n * - values are the values assigned to those properties (expressed in the given unit).\n *\n * \\@stable\n */\nvar NgStyle = (function () {\n    /**\n     * @param {?} _differs\n     * @param {?} _ngEl\n     * @param {?} _renderer\n     */\n    function NgStyle(_differs, _ngEl, _renderer) {\n        this._differs = _differs;\n        this._ngEl = _ngEl;\n        this._renderer = _renderer;\n    }\n    Object.defineProperty(NgStyle.prototype, \"ngStyle\", {\n        /**\n         * @param {?} v\n         * @return {?}\n         */\n        set: function (v) {\n            this._ngStyle = v;\n            if (!this._differ && v) {\n                this._differ = this._differs.find(v).create();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    NgStyle.prototype.ngDoCheck = function () {\n        if (this._differ) {\n            var /** @type {?} */ changes = this._differ.diff(this._ngStyle);\n            if (changes) {\n                this._applyChanges(changes);\n            }\n        }\n    };\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgStyle.prototype._applyChanges = function (changes) {\n        var _this = this;\n        changes.forEachRemovedItem(function (record) { return _this._setStyle(record.key, null); });\n        changes.forEachAddedItem(function (record) { return _this._setStyle(record.key, record.currentValue); });\n        changes.forEachChangedItem(function (record) { return _this._setStyle(record.key, record.currentValue); });\n    };\n    /**\n     * @param {?} nameAndUnit\n     * @param {?} value\n     * @return {?}\n     */\n    NgStyle.prototype._setStyle = function (nameAndUnit, value) {\n        var _a = nameAndUnit.split('.'), name = _a[0], unit = _a[1];\n        value = value != null && unit ? \"\" + value + unit : value;\n        this._renderer.setElementStyle(this._ngEl.nativeElement, name, /** @type {?} */ (value));\n    };\n    return NgStyle;\n}());\nNgStyle.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngStyle]' },] },\n];\n/**\n * @nocollapse\n */\nNgStyle.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"KeyValueDiffers\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Renderer\"], },\n]; };\nNgStyle.propDecorators = {\n    'ngStyle': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n *\n * \\@whatItDoes Inserts an embedded view from a prepared `TemplateRef`\n *\n * \\@howToUse\n * ```\n * <ng-container *ngTemplateOutlet=\"templateRefExp; context: contextExp\"></ng-container>\n * ```\n *\n * \\@description\n *\n * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.\n * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding\n * by the local template `let` declarations.\n *\n * Note: using the key `$implicit` in the context object will set it's value as default.\n *\n * ## Example\n *\n * {\\@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}\n *\n * \\@experimental\n */\nvar NgTemplateOutlet = (function () {\n    /**\n     * @param {?} _viewContainerRef\n     */\n    function NgTemplateOutlet(_viewContainerRef) {\n        this._viewContainerRef = _viewContainerRef;\n    }\n    Object.defineProperty(NgTemplateOutlet.prototype, \"ngOutletContext\", {\n        /**\n         * @deprecated v4.0.0 - Renamed to ngTemplateOutletContext.\n         * @param {?} context\n         * @return {?}\n         */\n        set: function (context) { this.ngTemplateOutletContext = context; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} changes\n     * @return {?}\n     */\n    NgTemplateOutlet.prototype.ngOnChanges = function (changes) {\n        if (this._viewRef) {\n            this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef));\n        }\n        if (this.ngTemplateOutlet) {\n            this._viewRef = this._viewContainerRef.createEmbeddedView(this.ngTemplateOutlet, this.ngTemplateOutletContext);\n        }\n    };\n    return NgTemplateOutlet;\n}());\nNgTemplateOutlet.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{ selector: '[ngTemplateOutlet]' },] },\n];\n/**\n * @nocollapse\n */\nNgTemplateOutlet.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ViewContainerRef\"], },\n]; };\nNgTemplateOutlet.propDecorators = {\n    'ngTemplateOutletContext': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngTemplateOutlet': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n    'ngOutletContext': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\n};\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * A collection of Angular directives that are likely to be used in each and every Angular\n * application.\n */\nvar COMMON_DIRECTIVES = [\n    NgClass,\n    NgComponentOutlet,\n    NgForOf,\n    NgIf,\n    NgTemplateOutlet,\n    NgStyle,\n    NgSwitch,\n    NgSwitchCase,\n    NgSwitchDefault,\n    NgPlural,\n    NgPluralCase,\n];\n/**\n * A collection of deprecated directives that are no longer part of the core module.\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @param {?} type\n * @param {?} value\n * @return {?}\n */\nfunction invalidPipeArgumentError(type, value) {\n    return Error(\"InvalidPipeArgument: '\" + value + \"' for pipe '\" + Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ɵstringify\"])(type) + \"'\");\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ObservableStrategy = (function () {\n    function ObservableStrategy() {\n    }\n    /**\n     * @param {?} async\n     * @param {?} updateLatestValue\n     * @return {?}\n     */\n    ObservableStrategy.prototype.createSubscription = function (async, updateLatestValue) {\n        return async.subscribe({ next: updateLatestValue, error: function (e) { throw e; } });\n    };\n    /**\n     * @param {?} subscription\n     * @return {?}\n     */\n    ObservableStrategy.prototype.dispose = function (subscription) { subscription.unsubscribe(); };\n    /**\n     * @param {?} subscription\n     * @return {?}\n     */\n    ObservableStrategy.prototype.onDestroy = function (subscription) { subscription.unsubscribe(); };\n    return ObservableStrategy;\n}());\nvar PromiseStrategy = (function () {\n    function PromiseStrategy() {\n    }\n    /**\n     * @param {?} async\n     * @param {?} updateLatestValue\n     * @return {?}\n     */\n    PromiseStrategy.prototype.createSubscription = function (async, updateLatestValue) {\n        return async.then(updateLatestValue, function (e) { throw e; });\n    };\n    /**\n     * @param {?} subscription\n     * @return {?}\n     */\n    PromiseStrategy.prototype.dispose = function (subscription) { };\n    /**\n     * @param {?} subscription\n     * @return {?}\n     */\n    PromiseStrategy.prototype.onDestroy = function (subscription) { };\n    return PromiseStrategy;\n}());\nvar _promiseStrategy = new PromiseStrategy();\nvar _observableStrategy = new ObservableStrategy();\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Unwraps a value from an asynchronous primitive.\n * \\@howToUse `observable_or_promise_expression | async`\n * \\@description\n * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has\n * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for\n * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid\n * potential memory leaks.\n *\n *\n * ## Examples\n *\n * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the\n * promise.\n *\n * {\\@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}\n *\n * It's also possible to use `async` with Observables. The example below binds the `time` Observable\n * to the view. The Observable continuously updates the view with the current time.\n *\n * {\\@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}\n *\n * \\@stable\n */\nvar AsyncPipe = (function () {\n    /**\n     * @param {?} _ref\n     */\n    function AsyncPipe(_ref) {\n        this._ref = _ref;\n        this._latestValue = null;\n        this._latestReturnedValue = null;\n        this._subscription = null;\n        this._obj = null;\n        this._strategy = ((null));\n    }\n    /**\n     * @return {?}\n     */\n    AsyncPipe.prototype.ngOnDestroy = function () {\n        if (this._subscription) {\n            this._dispose();\n        }\n    };\n    /**\n     * @param {?} obj\n     * @return {?}\n     */\n    AsyncPipe.prototype.transform = function (obj) {\n        if (!this._obj) {\n            if (obj) {\n                this._subscribe(obj);\n            }\n            this._latestReturnedValue = this._latestValue;\n            return this._latestValue;\n        }\n        if (obj !== this._obj) {\n            this._dispose();\n            return this.transform(/** @type {?} */ (obj));\n        }\n        if (this._latestValue === this._latestReturnedValue) {\n            return this._latestReturnedValue;\n        }\n        this._latestReturnedValue = this._latestValue;\n        return __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"WrappedValue\"].wrap(this._latestValue);\n    };\n    /**\n     * @param {?} obj\n     * @return {?}\n     */\n    AsyncPipe.prototype._subscribe = function (obj) {\n        var _this = this;\n        this._obj = obj;\n        this._strategy = this._selectStrategy(obj);\n        this._subscription = this._strategy.createSubscription(obj, function (value) { return _this._updateLatestValue(obj, value); });\n    };\n    /**\n     * @param {?} obj\n     * @return {?}\n     */\n    AsyncPipe.prototype._selectStrategy = function (obj) {\n        if (Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ɵisPromise\"])(obj)) {\n            return _promiseStrategy;\n        }\n        if (Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ɵisObservable\"])(obj)) {\n            return _observableStrategy;\n        }\n        throw invalidPipeArgumentError(AsyncPipe, obj);\n    };\n    /**\n     * @return {?}\n     */\n    AsyncPipe.prototype._dispose = function () {\n        this._strategy.dispose(/** @type {?} */ ((this._subscription)));\n        this._latestValue = null;\n        this._latestReturnedValue = null;\n        this._subscription = null;\n        this._obj = null;\n    };\n    /**\n     * @param {?} async\n     * @param {?} value\n     * @return {?}\n     */\n    AsyncPipe.prototype._updateLatestValue = function (async, value) {\n        if (async === this._obj) {\n            this._latestValue = value;\n            this._ref.markForCheck();\n        }\n    };\n    return AsyncPipe;\n}());\nAsyncPipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'async', pure: false },] },\n];\n/**\n * @nocollapse\n */\nAsyncPipe.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ChangeDetectorRef\"], },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * Transforms text to lowercase.\n *\n * {\\@example  common/pipes/ts/lowerupper_pipe.ts region='LowerUpperPipe' }\n *\n * \\@stable\n */\nvar LowerCasePipe = (function () {\n    function LowerCasePipe() {\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    LowerCasePipe.prototype.transform = function (value) {\n        if (!value)\n            return value;\n        if (typeof value !== 'string') {\n            throw invalidPipeArgumentError(LowerCasePipe, value);\n        }\n        return value.toLowerCase();\n    };\n    return LowerCasePipe;\n}());\nLowerCasePipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'lowercase' },] },\n];\n/**\n * @nocollapse\n */\nLowerCasePipe.ctorParameters = function () { return []; };\n/**\n * Helper method to transform a single word to titlecase.\n *\n * \\@stable\n * @param {?} word\n * @return {?}\n */\nfunction titleCaseWord(word) {\n    if (!word)\n        return word;\n    return word[0].toUpperCase() + word.substr(1).toLowerCase();\n}\n/**\n * Transforms text to titlecase.\n *\n * \\@stable\n */\nvar TitleCasePipe = (function () {\n    function TitleCasePipe() {\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    TitleCasePipe.prototype.transform = function (value) {\n        if (!value)\n            return value;\n        if (typeof value !== 'string') {\n            throw invalidPipeArgumentError(TitleCasePipe, value);\n        }\n        return value.split(/\\b/g).map(function (word) { return titleCaseWord(word); }).join('');\n    };\n    return TitleCasePipe;\n}());\nTitleCasePipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'titlecase' },] },\n];\n/**\n * @nocollapse\n */\nTitleCasePipe.ctorParameters = function () { return []; };\n/**\n * Transforms text to uppercase.\n *\n * \\@stable\n */\nvar UpperCasePipe = (function () {\n    function UpperCasePipe() {\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    UpperCasePipe.prototype.transform = function (value) {\n        if (!value)\n            return value;\n        if (typeof value !== 'string') {\n            throw invalidPipeArgumentError(UpperCasePipe, value);\n        }\n        return value.toUpperCase();\n    };\n    return UpperCasePipe;\n}());\nUpperCasePipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'uppercase' },] },\n];\n/**\n * @nocollapse\n */\nUpperCasePipe.ctorParameters = function () { return []; };\nvar NumberFormatStyle = {};\nNumberFormatStyle.Decimal = 0;\nNumberFormatStyle.Percent = 1;\nNumberFormatStyle.Currency = 2;\nNumberFormatStyle[NumberFormatStyle.Decimal] = \"Decimal\";\nNumberFormatStyle[NumberFormatStyle.Percent] = \"Percent\";\nNumberFormatStyle[NumberFormatStyle.Currency] = \"Currency\";\nvar NumberFormatter = (function () {\n    function NumberFormatter() {\n    }\n    /**\n     * @param {?} num\n     * @param {?} locale\n     * @param {?} style\n     * @param {?=} __3\n     * @return {?}\n     */\n    NumberFormatter.format = function (num, locale, style, _a) {\n        var _b = _a === void 0 ? {} : _a, minimumIntegerDigits = _b.minimumIntegerDigits, minimumFractionDigits = _b.minimumFractionDigits, maximumFractionDigits = _b.maximumFractionDigits, currency = _b.currency, _c = _b.currencyAsSymbol, currencyAsSymbol = _c === void 0 ? false : _c;\n        var /** @type {?} */ options = {\n            minimumIntegerDigits: minimumIntegerDigits,\n            minimumFractionDigits: minimumFractionDigits,\n            maximumFractionDigits: maximumFractionDigits,\n            style: NumberFormatStyle[style].toLowerCase()\n        };\n        if (style == NumberFormatStyle.Currency) {\n            options.currency = typeof currency == 'string' ? currency : undefined;\n            options.currencyDisplay = currencyAsSymbol ? 'symbol' : 'code';\n        }\n        return new Intl.NumberFormat(locale, options).format(num);\n    };\n    return NumberFormatter;\n}());\nvar DATE_FORMATS_SPLIT = /((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/;\nvar PATTERN_ALIASES = {\n    // Keys are quoted so they do not get renamed during closure compilation.\n    'yMMMdjms': datePartGetterFactory(combine([\n        digitCondition('year', 1),\n        nameCondition('month', 3),\n        digitCondition('day', 1),\n        digitCondition('hour', 1),\n        digitCondition('minute', 1),\n        digitCondition('second', 1),\n    ])),\n    'yMdjm': datePartGetterFactory(combine([\n        digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1),\n        digitCondition('hour', 1), digitCondition('minute', 1)\n    ])),\n    'yMMMMEEEEd': datePartGetterFactory(combine([\n        digitCondition('year', 1), nameCondition('month', 4), nameCondition('weekday', 4),\n        digitCondition('day', 1)\n    ])),\n    'yMMMMd': datePartGetterFactory(combine([digitCondition('year', 1), nameCondition('month', 4), digitCondition('day', 1)])),\n    'yMMMd': datePartGetterFactory(combine([digitCondition('year', 1), nameCondition('month', 3), digitCondition('day', 1)])),\n    'yMd': datePartGetterFactory(combine([digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1)])),\n    'jms': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('second', 1), digitCondition('minute', 1)])),\n    'jm': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('minute', 1)]))\n};\nvar DATE_FORMATS = {\n    // Keys are quoted so they do not get renamed.\n    'yyyy': datePartGetterFactory(digitCondition('year', 4)),\n    'yy': datePartGetterFactory(digitCondition('year', 2)),\n    'y': datePartGetterFactory(digitCondition('year', 1)),\n    'MMMM': datePartGetterFactory(nameCondition('month', 4)),\n    'MMM': datePartGetterFactory(nameCondition('month', 3)),\n    'MM': datePartGetterFactory(digitCondition('month', 2)),\n    'M': datePartGetterFactory(digitCondition('month', 1)),\n    'LLLL': datePartGetterFactory(nameCondition('month', 4)),\n    'L': datePartGetterFactory(nameCondition('month', 1)),\n    'dd': datePartGetterFactory(digitCondition('day', 2)),\n    'd': datePartGetterFactory(digitCondition('day', 1)),\n    'HH': digitModifier(hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), false)))),\n    'H': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), false))),\n    'hh': digitModifier(hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), true)))),\n    'h': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),\n    'jj': datePartGetterFactory(digitCondition('hour', 2)),\n    'j': datePartGetterFactory(digitCondition('hour', 1)),\n    'mm': digitModifier(datePartGetterFactory(digitCondition('minute', 2))),\n    'm': datePartGetterFactory(digitCondition('minute', 1)),\n    'ss': digitModifier(datePartGetterFactory(digitCondition('second', 2))),\n    's': datePartGetterFactory(digitCondition('second', 1)),\n    // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n    // we can be just safely rely on using `sss` since we currently don't support single or two digit\n    // fractions\n    'sss': datePartGetterFactory(digitCondition('second', 3)),\n    'EEEE': datePartGetterFactory(nameCondition('weekday', 4)),\n    'EEE': datePartGetterFactory(nameCondition('weekday', 3)),\n    'EE': datePartGetterFactory(nameCondition('weekday', 2)),\n    'E': datePartGetterFactory(nameCondition('weekday', 1)),\n    'a': hourClockExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),\n    'Z': timeZoneGetter('short'),\n    'z': timeZoneGetter('long'),\n    'ww': datePartGetterFactory({}),\n    // first Thursday of the year. not support ?\n    'w': datePartGetterFactory({}),\n    // of the year not support ?\n    'G': datePartGetterFactory(nameCondition('era', 1)),\n    'GG': datePartGetterFactory(nameCondition('era', 2)),\n    'GGG': datePartGetterFactory(nameCondition('era', 3)),\n    'GGGG': datePartGetterFactory(nameCondition('era', 4))\n};\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction digitModifier(inner) {\n    return function (date, locale) {\n        var /** @type {?} */ result = inner(date, locale);\n        return result.length == 1 ? '0' + result : result;\n    };\n}\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction hourClockExtractor(inner) {\n    return function (date, locale) { return inner(date, locale).split(' ')[1]; };\n}\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction hourExtractor(inner) {\n    return function (date, locale) { return inner(date, locale).split(' ')[0]; };\n}\n/**\n * @param {?} date\n * @param {?} locale\n * @param {?} options\n * @return {?}\n */\nfunction intlDateFormat(date, locale, options) {\n    return new Intl.DateTimeFormat(locale, options).format(date).replace(/[\\u200e\\u200f]/g, '');\n}\n/**\n * @param {?} timezone\n * @return {?}\n */\nfunction timeZoneGetter(timezone) {\n    // To workaround `Intl` API restriction for single timezone let format with 24 hours\n    var /** @type {?} */ options = { hour: '2-digit', hour12: false, timeZoneName: timezone };\n    return function (date, locale) {\n        var /** @type {?} */ result = intlDateFormat(date, locale, options);\n        // Then extract first 3 letters that related to hours\n        return result ? result.substring(3) : '';\n    };\n}\n/**\n * @param {?} options\n * @param {?} value\n * @return {?}\n */\nfunction hour12Modify(options, value) {\n    options.hour12 = value;\n    return options;\n}\n/**\n * @param {?} prop\n * @param {?} len\n * @return {?}\n */\nfunction digitCondition(prop, len) {\n    var /** @type {?} */ result = {};\n    result[prop] = len === 2 ? '2-digit' : 'numeric';\n    return result;\n}\n/**\n * @param {?} prop\n * @param {?} len\n * @return {?}\n */\nfunction nameCondition(prop, len) {\n    var /** @type {?} */ result = {};\n    if (len < 4) {\n        result[prop] = len > 1 ? 'short' : 'narrow';\n    }\n    else {\n        result[prop] = 'long';\n    }\n    return result;\n}\n/**\n * @param {?} options\n * @return {?}\n */\nfunction combine(options) {\n    return ((Object)).assign.apply(((Object)), [{}].concat(options));\n}\n/**\n * @param {?} ret\n * @return {?}\n */\nfunction datePartGetterFactory(ret) {\n    return function (date, locale) { return intlDateFormat(date, locale, ret); };\n}\nvar DATE_FORMATTER_CACHE = new Map();\n/**\n * @param {?} format\n * @param {?} date\n * @param {?} locale\n * @return {?}\n */\nfunction dateFormatter(format, date, locale) {\n    var /** @type {?} */ fn = PATTERN_ALIASES[format];\n    if (fn)\n        return fn(date, locale);\n    var /** @type {?} */ cacheKey = format;\n    var /** @type {?} */ parts = DATE_FORMATTER_CACHE.get(cacheKey);\n    if (!parts) {\n        parts = [];\n        var /** @type {?} */ match = void 0;\n        DATE_FORMATS_SPLIT.exec(format);\n        var /** @type {?} */ _format = format;\n        while (_format) {\n            match = DATE_FORMATS_SPLIT.exec(_format);\n            if (match) {\n                parts = parts.concat(match.slice(1));\n                _format = ((parts.pop()));\n            }\n            else {\n                parts.push(_format);\n                _format = null;\n            }\n        }\n        DATE_FORMATTER_CACHE.set(cacheKey, parts);\n    }\n    return parts.reduce(function (text, part) {\n        var /** @type {?} */ fn = DATE_FORMATS[part];\n        return text + (fn ? fn(date, locale) : partToTime(part));\n    }, '');\n}\n/**\n * @param {?} part\n * @return {?}\n */\nfunction partToTime(part) {\n    return part === '\\'\\'' ? '\\'' : part.replace(/(^'|'$)/g, '').replace(/''/g, '\\'');\n}\nvar DateFormatter = (function () {\n    function DateFormatter() {\n    }\n    /**\n     * @param {?} date\n     * @param {?} locale\n     * @param {?} pattern\n     * @return {?}\n     */\n    DateFormatter.format = function (date, locale, pattern) {\n        return dateFormatter(pattern, date, locale);\n    };\n    return DateFormatter;\n}());\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\n/**\n * @param {?} pipe\n * @param {?} locale\n * @param {?} value\n * @param {?} style\n * @param {?=} digits\n * @param {?=} currency\n * @param {?=} currencyAsSymbol\n * @return {?}\n */\nfunction formatNumber(pipe, locale, value, style, digits, currency, currencyAsSymbol) {\n    if (currency === void 0) { currency = null; }\n    if (currencyAsSymbol === void 0) { currencyAsSymbol = false; }\n    if (value == null)\n        return null;\n    // Convert strings to numbers\n    value = typeof value === 'string' && isNumeric(value) ? +value : value;\n    if (typeof value !== 'number') {\n        throw invalidPipeArgumentError(pipe, value);\n    }\n    var /** @type {?} */ minInt = undefined;\n    var /** @type {?} */ minFraction = undefined;\n    var /** @type {?} */ maxFraction = undefined;\n    if (style !== NumberFormatStyle.Currency) {\n        // rely on Intl default for currency\n        minInt = 1;\n        minFraction = 0;\n        maxFraction = 3;\n    }\n    if (digits) {\n        var /** @type {?} */ parts = digits.match(_NUMBER_FORMAT_REGEXP);\n        if (parts === null) {\n            throw new Error(digits + \" is not a valid digit info for number pipes\");\n        }\n        if (parts[1] != null) {\n            minInt = parseIntAutoRadix(parts[1]);\n        }\n        if (parts[3] != null) {\n            minFraction = parseIntAutoRadix(parts[3]);\n        }\n        if (parts[5] != null) {\n            maxFraction = parseIntAutoRadix(parts[5]);\n        }\n    }\n    return NumberFormatter.format(/** @type {?} */ (value), locale, style, {\n        minimumIntegerDigits: minInt,\n        minimumFractionDigits: minFraction,\n        maximumFractionDigits: maxFraction,\n        currency: currency,\n        currencyAsSymbol: currencyAsSymbol,\n    });\n}\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number according to locale rules.\n * \\@howToUse `number_expression | number[:digitInfo]`\n *\n * Formats a number as text. Group sizing and separator and other locale-specific\n * configurations are based on the active locale.\n *\n * where `expression` is a number:\n *  - `digitInfo` is a `string` which has a following format: <br>\n *     <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>\n *   - `minIntegerDigits` is the minimum number of integer digits to use. Defaults to `1`.\n *   - `minFractionDigits` is the minimum number of digits after fraction. Defaults to `0`.\n *   - `maxFractionDigits` is the maximum number of digits after fraction. Defaults to `3`.\n *\n * For more information on the acceptable range for each of these numbers and other\n * details see your native internationalization library.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See {\\@linkDocs guide/browser-support} for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/number_pipe.ts region='NumberPipe'}\n *\n * \\@stable\n */\nvar DecimalPipe = (function () {\n    /**\n     * @param {?} _locale\n     */\n    function DecimalPipe(_locale) {\n        this._locale = _locale;\n    }\n    /**\n     * @param {?} value\n     * @param {?=} digits\n     * @return {?}\n     */\n    DecimalPipe.prototype.transform = function (value, digits) {\n        return formatNumber(DecimalPipe, this._locale, value, NumberFormatStyle.Decimal, digits);\n    };\n    return DecimalPipe;\n}());\nDecimalPipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'number' },] },\n];\n/**\n * @nocollapse\n */\nDecimalPipe.ctorParameters = function () { return [\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as a percentage according to locale rules.\n * \\@howToUse `number_expression | percent[:digitInfo]`\n *\n * \\@description\n *\n * Formats a number as percentage.\n *\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See {\\@linkDocs guide/browser-support} for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/number_pipe.ts region='PercentPipe'}\n *\n * \\@stable\n */\nvar PercentPipe = (function () {\n    /**\n     * @param {?} _locale\n     */\n    function PercentPipe(_locale) {\n        this._locale = _locale;\n    }\n    /**\n     * @param {?} value\n     * @param {?=} digits\n     * @return {?}\n     */\n    PercentPipe.prototype.transform = function (value, digits) {\n        return formatNumber(PercentPipe, this._locale, value, NumberFormatStyle.Percent, digits);\n    };\n    return PercentPipe;\n}());\nPercentPipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'percent' },] },\n];\n/**\n * @nocollapse\n */\nPercentPipe.ctorParameters = function () { return [\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as currency using locale rules.\n * \\@howToUse `number_expression | currency[:currencyCode[:symbolDisplay[:digitInfo]]]`\n * \\@description\n *\n * Use `currency` to format a number as currency.\n *\n * - `currencyCode` is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such\n *    as `USD` for the US dollar and `EUR` for the euro.\n * - `symbolDisplay` is a boolean indicating whether to use the currency symbol or code.\n *   - `true`: use symbol (e.g. `$`).\n *   - `false`(default): use code (e.g. `USD`).\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n *\n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See {\\@linkDocs guide/browser-support} for details.\n *\n * ### Example\n *\n * {\\@example common/pipes/ts/number_pipe.ts region='CurrencyPipe'}\n *\n * \\@stable\n */\nvar CurrencyPipe = (function () {\n    /**\n     * @param {?} _locale\n     */\n    function CurrencyPipe(_locale) {\n        this._locale = _locale;\n    }\n    /**\n     * @param {?} value\n     * @param {?=} currencyCode\n     * @param {?=} symbolDisplay\n     * @param {?=} digits\n     * @return {?}\n     */\n    CurrencyPipe.prototype.transform = function (value, currencyCode, symbolDisplay, digits) {\n        if (currencyCode === void 0) { currencyCode = 'USD'; }\n        if (symbolDisplay === void 0) { symbolDisplay = false; }\n        return formatNumber(CurrencyPipe, this._locale, value, NumberFormatStyle.Currency, digits, currencyCode, symbolDisplay);\n    };\n    return CurrencyPipe;\n}());\nCurrencyPipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'currency' },] },\n];\n/**\n * @nocollapse\n */\nCurrencyPipe.ctorParameters = function () { return [\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\n/**\n * @param {?} text\n * @return {?}\n */\nfunction parseIntAutoRadix(text) {\n    var /** @type {?} */ result = parseInt(text);\n    if (isNaN(result)) {\n        throw new Error('Invalid integer literal when parsing ' + text);\n    }\n    return result;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isNumeric(value) {\n    return !isNaN(value - parseFloat(value));\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ISO8601_DATE_REGEX = /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a date according to locale rules.\n * \\@howToUse `date_expression | date[:format]`\n * \\@description\n *\n * Where:\n * - `expression` is a date object or a number (milliseconds since UTC epoch) or an ISO string\n * (https://www.w3.org/TR/NOTE-datetime).\n * - `format` indicates which date/time components to include. The format can be predefined as\n *   shown below or custom as shown in the table.\n *   - `'medium'`: equivalent to `'yMMMdjms'` (e.g. `Sep 3, 2010, 12:05:08 PM` for `en-US`)\n *   - `'short'`: equivalent to `'yMdjm'` (e.g. `9/3/2010, 12:05 PM` for `en-US`)\n *   - `'fullDate'`: equivalent to `'yMMMMEEEEd'` (e.g. `Friday, September 3, 2010` for `en-US`)\n *   - `'longDate'`: equivalent to `'yMMMMd'` (e.g. `September 3, 2010` for `en-US`)\n *   - `'mediumDate'`: equivalent to `'yMMMd'` (e.g. `Sep 3, 2010` for `en-US`)\n *   - `'shortDate'`: equivalent to `'yMd'` (e.g. `9/3/2010` for `en-US`)\n *   - `'mediumTime'`: equivalent to `'jms'` (e.g. `12:05:08 PM` for `en-US`)\n *   - `'shortTime'`: equivalent to `'jm'` (e.g. `12:05 PM` for `en-US`)\n *\n *\n *  | Component | Symbol | Narrow | Short Form   | Long Form         | Numeric   | 2-digit   |\n *  |-----------|:------:|--------|--------------|-------------------|-----------|-----------|\n *  | era       |   G    | G (A)  | GGG (AD)     | GGGG (Anno Domini)| -         | -         |\n *  | year      |   y    | -      | -            | -                 | y (2015)  | yy (15)   |\n *  | month     |   M    | L (S)  | MMM (Sep)    | MMMM (September)  | M (9)     | MM (09)   |\n *  | day       |   d    | -      | -            | -                 | d (3)     | dd (03)   |\n *  | weekday   |   E    | E (S)  | EEE (Sun)    | EEEE (Sunday)     | -         | -         |\n *  | hour      |   j    | -      | -            | -                 | j (13)    | jj (13)   |\n *  | hour12    |   h    | -      | -            | -                 | h (1 PM)  | hh (01 PM)|\n *  | hour24    |   H    | -      | -            | -                 | H (13)    | HH (13)   |\n *  | minute    |   m    | -      | -            | -                 | m (5)     | mm (05)   |\n *  | second    |   s    | -      | -            | -                 | s (9)     | ss (09)   |\n *  | timezone  |   z    | -      | -            | z (Pacific Standard Time)| -  | -         |\n *  | timezone  |   Z    | -      | Z (GMT-8:00) | -                 | -         | -         |\n *  | timezone  |   a    | -      | a (PM)       | -                 | -         | -         |\n *\n * In javascript, only the components specified will be respected (not the ordering,\n * punctuations, ...) and details of the formatting will be dependent on the locale.\n *\n * Timezone of the formatted text will be the local system timezone of the end-user's machine.\n *\n * When the expression is a ISO string without time (e.g. 2016-09-19) the time zone offset is not\n * applied and the formatted text will have the same day, month and year of the expression.\n *\n * WARNINGS:\n * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.\n *   Instead users should treat the date as an immutable object and change the reference when the\n *   pipe needs to re-run (this is to avoid reformatting the date on every change detection run\n *   which would be an expensive operation).\n * - this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera\n *   browsers.\n *\n * ### Examples\n *\n * Assuming `dateObj` is (year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11)\n * in the _local_ time and locale is 'en-US':\n *\n * ```\n *     {{ dateObj | date }}               // output is 'Jun 15, 2015'\n *     {{ dateObj | date:'medium' }}      // output is 'Jun 15, 2015, 9:43:11 PM'\n *     {{ dateObj | date:'shortTime' }}   // output is '9:43 PM'\n *     {{ dateObj | date:'mmss' }}        // output is '43:11'\n * ```\n *\n * {\\@example common/pipes/ts/date_pipe.ts region='DatePipe'}\n *\n * \\@stable\n */\nvar DatePipe = (function () {\n    /**\n     * @param {?} _locale\n     */\n    function DatePipe(_locale) {\n        this._locale = _locale;\n    }\n    /**\n     * @param {?} value\n     * @param {?=} pattern\n     * @return {?}\n     */\n    DatePipe.prototype.transform = function (value, pattern) {\n        if (pattern === void 0) { pattern = 'mediumDate'; }\n        var /** @type {?} */ date;\n        if (isBlank(value) || value !== value)\n            return null;\n        if (typeof value === 'string') {\n            value = value.trim();\n        }\n        if (isDate(value)) {\n            date = value;\n        }\n        else if (isNumeric(value)) {\n            date = new Date(parseFloat(value));\n        }\n        else if (typeof value === 'string' && /^(\\d{4}-\\d{1,2}-\\d{1,2})$/.test(value)) {\n            /**\n            * For ISO Strings without time the day, month and year must be extracted from the ISO String\n            * before Date creation to avoid time offset and errors in the new Date.\n            * If we only replace '-' with ',' in the ISO String (\"2015,01,01\"), and try to create a new\n            * date, some browsers (e.g. IE 9) will throw an invalid Date error\n            * If we leave the '-' (\"2015-01-01\") and try to create a new Date(\"2015-01-01\") the timeoffset\n            * is applied\n            * Note: ISO months are 0 for January, 1 for February, ...\n            */\n            var _a = value.split('-').map(function (val) { return parseInt(val, 10); }), y = _a[0], m = _a[1], d = _a[2];\n            date = new Date(y, m - 1, d);\n        }\n        else {\n            date = new Date(value);\n        }\n        if (!isDate(date)) {\n            var /** @type {?} */ match = void 0;\n            if ((typeof value === 'string') && (match = value.match(ISO8601_DATE_REGEX))) {\n                date = isoStringToDate(match);\n            }\n            else {\n                throw invalidPipeArgumentError(DatePipe, value);\n            }\n        }\n        return DateFormatter.format(date, this._locale, DatePipe._ALIASES[pattern] || pattern);\n    };\n    return DatePipe;\n}());\n/**\n * \\@internal\n */\nDatePipe._ALIASES = {\n    'medium': 'yMMMdjms',\n    'short': 'yMdjm',\n    'fullDate': 'yMMMMEEEEd',\n    'longDate': 'yMMMMd',\n    'mediumDate': 'yMMMd',\n    'shortDate': 'yMd',\n    'mediumTime': 'jms',\n    'shortTime': 'jm'\n};\nDatePipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'date', pure: true },] },\n];\n/**\n * @nocollapse\n */\nDatePipe.ctorParameters = function () { return [\n    { type: undefined, decorators: [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Inject\"], args: [__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"LOCALE_ID\"],] },] },\n]; };\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction isBlank(obj) {\n    return obj == null || obj === '';\n}\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction isDate(obj) {\n    return obj instanceof Date && !isNaN(obj.valueOf());\n}\n/**\n * @param {?} match\n * @return {?}\n */\nfunction isoStringToDate(match) {\n    var /** @type {?} */ date = new Date(0);\n    var /** @type {?} */ tzHour = 0;\n    var /** @type {?} */ tzMin = 0;\n    var /** @type {?} */ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n    var /** @type {?} */ timeSetter = match[8] ? date.setUTCHours : date.setHours;\n    if (match[9]) {\n        tzHour = toInt(match[9] + match[10]);\n        tzMin = toInt(match[9] + match[11]);\n    }\n    dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));\n    var /** @type {?} */ h = toInt(match[4] || '0') - tzHour;\n    var /** @type {?} */ m = toInt(match[5] || '0') - tzMin;\n    var /** @type {?} */ s = toInt(match[6] || '0');\n    var /** @type {?} */ ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);\n    timeSetter.call(date, h, m, s, ms);\n    return date;\n}\n/**\n * @param {?} str\n * @return {?}\n */\nfunction toInt(str) {\n    return parseInt(str, 10);\n}\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar _INTERPOLATION_REGEXP = /#/g;\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Maps a value to a string that pluralizes the value according to locale rules.\n * \\@howToUse `expression | i18nPlural:mapping`\n * \\@description\n *\n *  Where:\n *  - `expression` is a number.\n *  - `mapping` is an object that mimics the ICU format, see\n *    http://userguide.icu-project.org/formatparse/messages\n *\n *  ## Example\n *\n * {\\@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}\n *\n * \\@experimental\n */\nvar I18nPluralPipe = (function () {\n    /**\n     * @param {?} _localization\n     */\n    function I18nPluralPipe(_localization) {\n        this._localization = _localization;\n    }\n    /**\n     * @param {?} value\n     * @param {?} pluralMap\n     * @return {?}\n     */\n    I18nPluralPipe.prototype.transform = function (value, pluralMap) {\n        if (value == null)\n            return '';\n        if (typeof pluralMap !== 'object' || pluralMap === null) {\n            throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n        }\n        var /** @type {?} */ key = getPluralCategory(value, Object.keys(pluralMap), this._localization);\n        return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n    };\n    return I18nPluralPipe;\n}());\nI18nPluralPipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'i18nPlural', pure: true },] },\n];\n/**\n * @nocollapse\n */\nI18nPluralPipe.ctorParameters = function () { return [\n    { type: NgLocalization, },\n]; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Generic selector that displays the string that matches the current value.\n * \\@howToUse `expression | i18nSelect:mapping`\n * \\@description\n *\n *  Where `mapping` is an object that indicates the text that should be displayed\n *  for different values of the provided `expression`.\n *  If none of the keys of the mapping match the value of the `expression`, then the content\n *  of the `other` key is returned when present, otherwise an empty string is returned.\n *\n *  ## Example\n *\n * {\\@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}\n *\n *  \\@experimental\n */\nvar I18nSelectPipe = (function () {\n    function I18nSelectPipe() {\n    }\n    /**\n     * @param {?} value\n     * @param {?} mapping\n     * @return {?}\n     */\n    I18nSelectPipe.prototype.transform = function (value, mapping) {\n        if (value == null)\n            return '';\n        if (typeof mapping !== 'object' || typeof value !== 'string') {\n            throw invalidPipeArgumentError(I18nSelectPipe, mapping);\n        }\n        if (mapping.hasOwnProperty(value)) {\n            return mapping[value];\n        }\n        if (mapping.hasOwnProperty('other')) {\n            return mapping['other'];\n        }\n        return '';\n    };\n    return I18nSelectPipe;\n}());\nI18nSelectPipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'i18nSelect', pure: true },] },\n];\n/**\n * @nocollapse\n */\nI18nSelectPipe.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Converts value into JSON string.\n * \\@howToUse `expression | json`\n * \\@description\n *\n * Converts value into string using `JSON.stringify`. Useful for debugging.\n *\n * ### Example\n * {\\@example common/pipes/ts/json_pipe.ts region='JsonPipe'}\n *\n * \\@stable\n */\nvar JsonPipe = (function () {\n    function JsonPipe() {\n    }\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    JsonPipe.prototype.transform = function (value) { return JSON.stringify(value, null, 2); };\n    return JsonPipe;\n}());\nJsonPipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'json', pure: false },] },\n];\n/**\n * @nocollapse\n */\nJsonPipe.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Creates a new List or String containing a subset (slice) of the elements.\n * \\@howToUse `array_or_string_expression | slice:start[:end]`\n * \\@description\n *\n * Where the input expression is a `List` or `String`, and:\n * - `start`: The starting index of the subset to return.\n *   - **a positive integer**: return the item at `start` index and all items after\n *     in the list or string expression.\n *   - **a negative integer**: return the item at `start` index from the end and all items after\n *     in the list or string expression.\n *   - **if positive and greater than the size of the expression**: return an empty list or string.\n *   - **if negative and greater than the size of the expression**: return entire list or string.\n * - `end`: The ending index of the subset to return.\n *   - **omitted**: return all items until the end.\n *   - **if positive**: return all items before `end` index of the list or string.\n *   - **if negative**: return all items before `end` index from the end of the list or string.\n *\n * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`\n * and `String.prototype.slice()`.\n *\n * When operating on a [List], the returned list is always a copy even when all\n * the elements are being returned.\n *\n * When operating on a blank value, the pipe returns the blank value.\n *\n * ## List Example\n *\n * This `ngFor` example:\n *\n * {\\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}\n *\n * produces the following:\n *\n *     <li>b</li>\n *     <li>c</li>\n *\n * ## String Examples\n *\n * {\\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}\n *\n * \\@stable\n */\nvar SlicePipe = (function () {\n    function SlicePipe() {\n    }\n    /**\n     * @param {?} value\n     * @param {?} start\n     * @param {?=} end\n     * @return {?}\n     */\n    SlicePipe.prototype.transform = function (value, start, end) {\n        if (value == null)\n            return value;\n        if (!this.supports(value)) {\n            throw invalidPipeArgumentError(SlicePipe, value);\n        }\n        return value.slice(start, end);\n    };\n    /**\n     * @param {?} obj\n     * @return {?}\n     */\n    SlicePipe.prototype.supports = function (obj) { return typeof obj === 'string' || Array.isArray(obj); };\n    return SlicePipe;\n}());\nSlicePipe.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{ name: 'slice', pure: false },] },\n];\n/**\n * @nocollapse\n */\nSlicePipe.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * This module provides a set of common Pipes.\n */\n/**\n * A collection of Angular pipes that are likely to be used in each and every application.\n */\nvar COMMON_PIPES = [\n    AsyncPipe,\n    UpperCasePipe,\n    LowerCasePipe,\n    JsonPipe,\n    SlicePipe,\n    DecimalPipe,\n    PercentPipe,\n    TitleCasePipe,\n    CurrencyPipe,\n    DatePipe,\n    I18nPluralPipe,\n    I18nSelectPipe,\n];\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * The module that includes all the basic Angular directives like {\\@link NgIf}, {\\@link NgForOf}, ...\n *\n * \\@stable\n */\nvar CommonModule = (function () {\n    function CommonModule() {\n    }\n    return CommonModule;\n}());\nCommonModule.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\n                declarations: [COMMON_DIRECTIVES, COMMON_PIPES],\n                exports: [COMMON_DIRECTIVES, COMMON_PIPES],\n                providers: [\n                    { provide: NgLocalization, useClass: NgLocaleLocalization },\n                ],\n            },] },\n];\n/**\n * @nocollapse\n */\nCommonModule.ctorParameters = function () { return []; };\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of the common package.\n */\n/**\n * \\@stable\n */\nvar VERSION = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Version\"]('4.1.3');\n\nvar commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n\n\n\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\n// CommonJS / Node have global context exposed as \"global\" variable.\n// We don't want to include the whole node.d.ts this this compilation unit so we'll just fake\n// the global \"global\" var for now.\nvar __window = typeof window !== 'undefined' && window;\nvar __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n    self instanceof WorkerGlobalScope && self;\nvar __global = typeof commonjsGlobal !== 'undefined' && commonjsGlobal;\nvar _root = __window || __global || __self;\nvar root_1 = _root;\n// Workaround Closure Compiler restriction: The body of a goog.module cannot use throw.\n// This is needed when used with angular/tsickle which inserts a goog.module statement.\n// Wrap in IIFE\n(function () {\n    if (!_root) {\n        throw new Error('RxJS could not find any global context (window, self, global)');\n    }\n})();\n\n\nvar root = {\n\troot: root_1\n};\n\nfunction isFunction(x) {\n    return typeof x === 'function';\n}\nvar isFunction_2 = isFunction;\n\n\nvar isFunction_1 = {\n\tisFunction: isFunction_2\n};\n\nvar isArray_1 = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });\n\n\nvar isArray = {\n\tisArray: isArray_1\n};\n\nfunction isObject(x) {\n    return x != null && typeof x === 'object';\n}\nvar isObject_2 = isObject;\n\n\nvar isObject_1 = {\n\tisObject: isObject_2\n};\n\n// typeof any so that it we don't have to cast when comparing a result to the error object\nvar errorObject_1 = { e: {} };\n\n\nvar errorObject = {\n\terrorObject: errorObject_1\n};\n\nvar tryCatchTarget;\nfunction tryCatcher() {\n    try {\n        return tryCatchTarget.apply(this, arguments);\n    }\n    catch (e) {\n        errorObject.errorObject.e = e;\n        return errorObject.errorObject;\n    }\n}\nfunction tryCatch(fn) {\n    tryCatchTarget = fn;\n    return tryCatcher;\n}\nvar tryCatch_2 = tryCatch;\n\n\n\nvar tryCatch_1 = {\n\ttryCatch: tryCatch_2\n};\n\nvar __extends$3 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nvar UnsubscriptionError = (function (_super) {\n    __extends$3(UnsubscriptionError, _super);\n    function UnsubscriptionError(errors) {\n        _super.call(this);\n        this.errors = errors;\n        var err = Error.call(this, errors ?\n            errors.length + \" errors occurred during unsubscription:\\n  \" + errors.map(function (err, i) { return ((i + 1) + \") \" + err.toString()); }).join('\\n  ') : '');\n        this.name = err.name = 'UnsubscriptionError';\n        this.stack = err.stack;\n        this.message = err.message;\n    }\n    return UnsubscriptionError;\n}(Error));\nvar UnsubscriptionError_2 = UnsubscriptionError;\n\n\nvar UnsubscriptionError_1 = {\n\tUnsubscriptionError: UnsubscriptionError_2\n};\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nvar Subscription = (function () {\n    /**\n     * @param {function(): void} [unsubscribe] A function describing how to\n     * perform the disposal of resources when the `unsubscribe` method is called.\n     */\n    function Subscription(unsubscribe) {\n        /**\n         * A flag to indicate whether this Subscription has already been unsubscribed.\n         * @type {boolean}\n         */\n        this.closed = false;\n        this._parent = null;\n        this._parents = null;\n        this._subscriptions = null;\n        if (unsubscribe) {\n            this._unsubscribe = unsubscribe;\n        }\n    }\n    /**\n     * Disposes the resources held by the subscription. May, for instance, cancel\n     * an ongoing Observable execution or cancel any other type of work that\n     * started when the Subscription was created.\n     * @return {void}\n     */\n    Subscription.prototype.unsubscribe = function () {\n        var hasErrors = false;\n        var errors;\n        if (this.closed) {\n            return;\n        }\n        var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;\n        this.closed = true;\n        this._parent = null;\n        this._parents = null;\n        // null out _subscriptions first so any child subscriptions that attempt\n        // to remove themselves from this subscription will noop\n        this._subscriptions = null;\n        var index = -1;\n        var len = _parents ? _parents.length : 0;\n        // if this._parent is null, then so is this._parents, and we\n        // don't have to remove ourselves from any parent subscriptions.\n        while (_parent) {\n            _parent.remove(this);\n            // if this._parents is null or index >= len,\n            // then _parent is set to null, and the loop exits\n            _parent = ++index < len && _parents[index] || null;\n        }\n        if (isFunction_1.isFunction(_unsubscribe)) {\n            var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);\n            if (trial === errorObject.errorObject) {\n                hasErrors = true;\n                errors = errors || (errorObject.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ?\n                    flattenUnsubscriptionErrors(errorObject.errorObject.e.errors) : [errorObject.errorObject.e]);\n            }\n        }\n        if (isArray.isArray(_subscriptions)) {\n            index = -1;\n            len = _subscriptions.length;\n            while (++index < len) {\n                var sub = _subscriptions[index];\n                if (isObject_1.isObject(sub)) {\n                    var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);\n                    if (trial === errorObject.errorObject) {\n                        hasErrors = true;\n                        errors = errors || [];\n                        var err = errorObject.errorObject.e;\n                        if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {\n                            errors = errors.concat(flattenUnsubscriptionErrors(err.errors));\n                        }\n                        else {\n                            errors.push(err);\n                        }\n                    }\n                }\n            }\n        }\n        if (hasErrors) {\n            throw new UnsubscriptionError_1.UnsubscriptionError(errors);\n        }\n    };\n    /**\n     * Adds a tear down to be called during the unsubscribe() of this\n     * Subscription.\n     *\n     * If the tear down being added is a subscription that is already\n     * unsubscribed, is the same reference `add` is being called on, or is\n     * `Subscription.EMPTY`, it will not be added.\n     *\n     * If this subscription is already in an `closed` state, the passed\n     * tear down logic will be executed immediately.\n     *\n     * @param {TeardownLogic} teardown The additional logic to execute on\n     * teardown.\n     * @return {Subscription} Returns the Subscription used or created to be\n     * added to the inner subscriptions list. This Subscription can be used with\n     * `remove()` to remove the passed teardown logic from the inner subscriptions\n     * list.\n     */\n    Subscription.prototype.add = function (teardown) {\n        if (!teardown || (teardown === Subscription.EMPTY)) {\n            return Subscription.EMPTY;\n        }\n        if (teardown === this) {\n            return this;\n        }\n        var subscription = teardown;\n        switch (typeof teardown) {\n            case 'function':\n                subscription = new Subscription(teardown);\n            case 'object':\n                if (subscription.closed || typeof subscription.unsubscribe !== 'function') {\n                    return subscription;\n                }\n                else if (this.closed) {\n                    subscription.unsubscribe();\n                    return subscription;\n                }\n                else if (typeof subscription._addParent !== 'function' /* quack quack */) {\n                    var tmp = subscription;\n                    subscription = new Subscription();\n                    subscription._subscriptions = [tmp];\n                }\n                break;\n            default:\n                throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n        }\n        var subscriptions = this._subscriptions || (this._subscriptions = []);\n        subscriptions.push(subscription);\n        subscription._addParent(this);\n        return subscription;\n    };\n    /**\n     * Removes a Subscription from the internal list of subscriptions that will\n     * unsubscribe during the unsubscribe process of this Subscription.\n     * @param {Subscription} subscription The subscription to remove.\n     * @return {void}\n     */\n    Subscription.prototype.remove = function (subscription) {\n        var subscriptions = this._subscriptions;\n        if (subscriptions) {\n            var subscriptionIndex = subscriptions.indexOf(subscription);\n            if (subscriptionIndex !== -1) {\n                subscriptions.splice(subscriptionIndex, 1);\n            }\n        }\n    };\n    Subscription.prototype._addParent = function (parent) {\n        var _a = this, _parent = _a._parent, _parents = _a._parents;\n        if (!_parent || _parent === parent) {\n            // If we don't have a parent, or the new parent is the same as the\n            // current parent, then set this._parent to the new parent.\n            this._parent = parent;\n        }\n        else if (!_parents) {\n            // If there's already one parent, but not multiple, allocate an Array to\n            // store the rest of the parent Subscriptions.\n            this._parents = [parent];\n        }\n        else if (_parents.indexOf(parent) === -1) {\n            // Only add the new parent to the _parents list if it's not already there.\n            _parents.push(parent);\n        }\n    };\n    Subscription.EMPTY = (function (empty) {\n        empty.closed = true;\n        return empty;\n    }(new Subscription()));\n    return Subscription;\n}());\nvar Subscription_2 = Subscription;\nfunction flattenUnsubscriptionErrors(errors) {\n    return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);\n}\n\n\nvar Subscription_1 = {\n\tSubscription: Subscription_2\n};\n\nvar empty = {\n    closed: true,\n    next: function (value) { },\n    error: function (err) { throw err; },\n    complete: function () { }\n};\n\n\nvar Observer = {\n\tempty: empty\n};\n\nvar rxSubscriber = createCommonjsModule(function (module, exports) {\n\"use strict\";\n\nvar Symbol = root.root.Symbol;\nexports.rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?\n    Symbol.for('rxSubscriber') : '@@rxSubscriber';\n/**\n * @deprecated use rxSubscriber instead\n */\nexports.$$rxSubscriber = exports.rxSubscriber;\n\n});\n\nvar __extends$2 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n\n\n\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber<T>\n */\nvar Subscriber = (function (_super) {\n    __extends$2(Subscriber, _super);\n    /**\n     * @param {Observer|function(value: T): void} [destinationOrNext] A partially\n     * defined Observer or a `next` callback function.\n     * @param {function(e: ?any): void} [error] The `error` callback of an\n     * Observer.\n     * @param {function(): void} [complete] The `complete` callback of an\n     * Observer.\n     */\n    function Subscriber(destinationOrNext, error, complete) {\n        _super.call(this);\n        this.syncErrorValue = null;\n        this.syncErrorThrown = false;\n        this.syncErrorThrowable = false;\n        this.isStopped = false;\n        switch (arguments.length) {\n            case 0:\n                this.destination = Observer.empty;\n                break;\n            case 1:\n                if (!destinationOrNext) {\n                    this.destination = Observer.empty;\n                    break;\n                }\n                if (typeof destinationOrNext === 'object') {\n                    if (destinationOrNext instanceof Subscriber) {\n                        this.destination = destinationOrNext;\n                        this.destination.add(this);\n                    }\n                    else {\n                        this.syncErrorThrowable = true;\n                        this.destination = new SafeSubscriber(this, destinationOrNext);\n                    }\n                    break;\n                }\n            default:\n                this.syncErrorThrowable = true;\n                this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);\n                break;\n        }\n    }\n    Subscriber.prototype[rxSubscriber.rxSubscriber] = function () { return this; };\n    /**\n     * A static factory for a Subscriber, given a (potentially partial) definition\n     * of an Observer.\n     * @param {function(x: ?T): void} [next] The `next` callback of an Observer.\n     * @param {function(e: ?any): void} [error] The `error` callback of an\n     * Observer.\n     * @param {function(): void} [complete] The `complete` callback of an\n     * Observer.\n     * @return {Subscriber<T>} A Subscriber wrapping the (partially defined)\n     * Observer represented by the given arguments.\n     */\n    Subscriber.create = function (next, error, complete) {\n        var subscriber = new Subscriber(next, error, complete);\n        subscriber.syncErrorThrowable = false;\n        return subscriber;\n    };\n    /**\n     * The {@link Observer} callback to receive notifications of type `next` from\n     * the Observable, with a value. The Observable may call this method 0 or more\n     * times.\n     * @param {T} [value] The `next` value.\n     * @return {void}\n     */\n    Subscriber.prototype.next = function (value) {\n        if (!this.isStopped) {\n            this._next(value);\n        }\n    };\n    /**\n     * The {@link Observer} callback to receive notifications of type `error` from\n     * the Observable, with an attached {@link Error}. Notifies the Observer that\n     * the Observable has experienced an error condition.\n     * @param {any} [err] The `error` exception.\n     * @return {void}\n     */\n    Subscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            this.isStopped = true;\n            this._error(err);\n        }\n    };\n    /**\n     * The {@link Observer} callback to receive a valueless notification of type\n     * `complete` from the Observable. Notifies the Observer that the Observable\n     * has finished sending push-based notifications.\n     * @return {void}\n     */\n    Subscriber.prototype.complete = function () {\n        if (!this.isStopped) {\n            this.isStopped = true;\n            this._complete();\n        }\n    };\n    Subscriber.prototype.unsubscribe = function () {\n        if (this.closed) {\n            return;\n        }\n        this.isStopped = true;\n        _super.prototype.unsubscribe.call(this);\n    };\n    Subscriber.prototype._next = function (value) {\n        this.destination.next(value);\n    };\n    Subscriber.prototype._error = function (err) {\n        this.destination.error(err);\n        this.unsubscribe();\n    };\n    Subscriber.prototype._complete = function () {\n        this.destination.complete();\n        this.unsubscribe();\n    };\n    Subscriber.prototype._unsubscribeAndRecycle = function () {\n        var _a = this, _parent = _a._parent, _parents = _a._parents;\n        this._parent = null;\n        this._parents = null;\n        this.unsubscribe();\n        this.closed = false;\n        this.isStopped = false;\n        this._parent = _parent;\n        this._parents = _parents;\n        return this;\n    };\n    return Subscriber;\n}(Subscription_1.Subscription));\nvar Subscriber_2 = Subscriber;\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar SafeSubscriber = (function (_super) {\n    __extends$2(SafeSubscriber, _super);\n    function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {\n        _super.call(this);\n        this._parentSubscriber = _parentSubscriber;\n        var next;\n        var context = this;\n        if (isFunction_1.isFunction(observerOrNext)) {\n            next = observerOrNext;\n        }\n        else if (observerOrNext) {\n            next = observerOrNext.next;\n            error = observerOrNext.error;\n            complete = observerOrNext.complete;\n            if (observerOrNext !== Observer.empty) {\n                context = Object.create(observerOrNext);\n                if (isFunction_1.isFunction(context.unsubscribe)) {\n                    this.add(context.unsubscribe.bind(context));\n                }\n                context.unsubscribe = this.unsubscribe.bind(this);\n            }\n        }\n        this._context = context;\n        this._next = next;\n        this._error = error;\n        this._complete = complete;\n    }\n    SafeSubscriber.prototype.next = function (value) {\n        if (!this.isStopped && this._next) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (!_parentSubscriber.syncErrorThrowable) {\n                this.__tryOrUnsub(this._next, value);\n            }\n            else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.error = function (err) {\n        if (!this.isStopped) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (this._error) {\n                if (!_parentSubscriber.syncErrorThrowable) {\n                    this.__tryOrUnsub(this._error, err);\n                    this.unsubscribe();\n                }\n                else {\n                    this.__tryOrSetError(_parentSubscriber, this._error, err);\n                    this.unsubscribe();\n                }\n            }\n            else if (!_parentSubscriber.syncErrorThrowable) {\n                this.unsubscribe();\n                throw err;\n            }\n            else {\n                _parentSubscriber.syncErrorValue = err;\n                _parentSubscriber.syncErrorThrown = true;\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.complete = function () {\n        var _this = this;\n        if (!this.isStopped) {\n            var _parentSubscriber = this._parentSubscriber;\n            if (this._complete) {\n                var wrappedComplete = function () { return _this._complete.call(_this._context); };\n                if (!_parentSubscriber.syncErrorThrowable) {\n                    this.__tryOrUnsub(wrappedComplete);\n                    this.unsubscribe();\n                }\n                else {\n                    this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n                    this.unsubscribe();\n                }\n            }\n            else {\n                this.unsubscribe();\n            }\n        }\n    };\n    SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {\n        try {\n            fn.call(this._context, value);\n        }\n        catch (err) {\n            this.unsubscribe();\n            throw err;\n        }\n    };\n    SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {\n        try {\n            fn.call(this._context, value);\n        }\n        catch (err) {\n            parent.syncErrorValue = err;\n            parent.syncErrorThrown = true;\n            return true;\n        }\n        return false;\n    };\n    SafeSubscriber.prototype._unsubscribe = function () {\n        var _parentSubscriber = this._parentSubscriber;\n        this._context = null;\n        this._parentSubscriber = null;\n        _parentSubscriber.unsubscribe();\n    };\n    return SafeSubscriber;\n}(Subscriber));\n\n\nvar Subscriber_1 = {\n\tSubscriber: Subscriber_2\n};\n\nfunction toSubscriber(nextOrObserver, error, complete) {\n    if (nextOrObserver) {\n        if (nextOrObserver instanceof Subscriber_1.Subscriber) {\n            return nextOrObserver;\n        }\n        if (nextOrObserver[rxSubscriber.rxSubscriber]) {\n            return nextOrObserver[rxSubscriber.rxSubscriber]();\n        }\n    }\n    if (!nextOrObserver && !error && !complete) {\n        return new Subscriber_1.Subscriber(Observer.empty);\n    }\n    return new Subscriber_1.Subscriber(nextOrObserver, error, complete);\n}\nvar toSubscriber_2 = toSubscriber;\n\n\nvar toSubscriber_1 = {\n\ttoSubscriber: toSubscriber_2\n};\n\nvar observable = createCommonjsModule(function (module, exports) {\n\"use strict\";\n\nfunction getSymbolObservable(context) {\n    var $$observable;\n    var Symbol = context.Symbol;\n    if (typeof Symbol === 'function') {\n        if (Symbol.observable) {\n            $$observable = Symbol.observable;\n        }\n        else {\n            $$observable = Symbol('observable');\n            Symbol.observable = $$observable;\n        }\n    }\n    else {\n        $$observable = '@@observable';\n    }\n    return $$observable;\n}\nexports.getSymbolObservable = getSymbolObservable;\nexports.observable = getSymbolObservable(root.root);\n/**\n * @deprecated use observable instead\n */\nexports.$$observable = exports.observable;\n\n});\n\n/**\n * A representation of any set of values over any amount of time. This the most basic building block\n * of RxJS.\n *\n * @class Observable<T>\n */\nvar Observable = (function () {\n    /**\n     * @constructor\n     * @param {Function} subscribe the function that is  called when the Observable is\n     * initially subscribed to. This function is given a Subscriber, to which new values\n     * can be `next`ed, or an `error` method can be called to raise an error, or\n     * `complete` can be called to notify of a successful completion.\n     */\n    function Observable(subscribe) {\n        this._isScalar = false;\n        if (subscribe) {\n            this._subscribe = subscribe;\n        }\n    }\n    /**\n     * Creates a new Observable, with this Observable as the source, and the passed\n     * operator defined as the new observable's operator.\n     * @method lift\n     * @param {Operator} operator the operator defining the operation to take on the observable\n     * @return {Observable} a new observable with the Operator applied\n     */\n    Observable.prototype.lift = function (operator) {\n        var observable$$1 = new Observable();\n        observable$$1.source = this;\n        observable$$1.operator = operator;\n        return observable$$1;\n    };\n    /**\n     * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n     *\n     * <span class=\"informal\">Use it when you have all these Observables, but still nothing is happening.</span>\n     *\n     * `subscribe` is not a regular operator, but a method that calls Observables internal `subscribe` function. It\n     * might be for example a function that you passed to a {@link create} static factory, but most of the time it is\n     * a library implementation, which defines what and when will be emitted by an Observable. This means that calling\n     * `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n     * thought.\n     *\n     * Apart from starting the execution of an Observable, this method allows you to listen for values\n     * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n     * following ways.\n     *\n     * The first way is creating an object that implements {@link Observer} interface. It should have methods\n     * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n     * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular do\n     * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n     * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n     * do anything, you can simply omit it. Note however, that if `error` method is not provided, all errors will\n     * be left uncaught.\n     *\n     * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n     * This means you can provide three functions as arguments to `subscribe`, where first function is equivalent\n     * of a `next` method, second of an `error` method and third of a `complete` method. Just as in case of Observer,\n     * if you do not need to listen for something, you can omit a function, preferably by passing `undefined` or `null`,\n     * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n     * to `error` function, just as before, if not provided, errors emitted by an Observable will be thrown.\n     *\n     * Whatever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n     * This object allows you to call `unsubscribe` on it, which in turn will stop work that an Observable does and will clean\n     * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n     * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n     *\n     * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n     * It is an Observable itself that decides when these functions will be called. For example {@link of}\n     * by default emits all its values synchronously. Always check documentation for how given Observable\n     * will behave when subscribed and if its default behavior can be modified with a {@link Scheduler}.\n     *\n     * @example <caption>Subscribe with an Observer</caption>\n     * const sumObserver = {\n     *   sum: 0,\n     *   next(value) {\n     *     console.log('Adding: ' + value);\n     *     this.sum = this.sum + value;\n     *   },\n     *   error() { // We actually could just remote this method,\n     *   },        // since we do not really care about errors right now.\n     *   complete() {\n     *     console.log('Sum equals: ' + this.sum);\n     *   }\n     * };\n     *\n     * Rx.Observable.of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n     * .subscribe(sumObserver);\n     *\n     * // Logs:\n     * // \"Adding: 1\"\n     * // \"Adding: 2\"\n     * // \"Adding: 3\"\n     * // \"Sum equals: 6\"\n     *\n     *\n     * @example <caption>Subscribe with functions</caption>\n     * let sum = 0;\n     *\n     * Rx.Observable.of(1, 2, 3)\n     * .subscribe(\n     *   function(value) {\n     *     console.log('Adding: ' + value);\n     *     sum = sum + value;\n     *   },\n     *   undefined,\n     *   function() {\n     *     console.log('Sum equals: ' + sum);\n     *   }\n     * );\n     *\n     * // Logs:\n     * // \"Adding: 1\"\n     * // \"Adding: 2\"\n     * // \"Adding: 3\"\n     * // \"Sum equals: 6\"\n     *\n     *\n     * @example <caption>Cancel a subscription</caption>\n     * const subscription = Rx.Observable.interval(1000).subscribe(\n     *   num => console.log(num),\n     *   undefined,\n     *   () => console.log('completed!') // Will not be called, even\n     * );                                // when cancelling subscription\n     *\n     *\n     * setTimeout(() => {\n     *   subscription.unsubscribe();\n     *   console.log('unsubscribed!');\n     * }, 2500);\n     *\n     * // Logs:\n     * // 0 after 1s\n     * // 1 after 2s\n     * // \"unsubscribed!\" after 2,5s\n     *\n     *\n     * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n     *  or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n     *  Observable.\n     * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n     *  the error will be thrown as unhandled.\n     * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n     * @return {ISubscription} a subscription reference to the registered handlers\n     * @method subscribe\n     */\n    Observable.prototype.subscribe = function (observerOrNext, error, complete) {\n        var operator = this.operator;\n        var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);\n        if (operator) {\n            operator.call(sink, this.source);\n        }\n        else {\n            sink.add(this.source ? this._subscribe(sink) : this._trySubscribe(sink));\n        }\n        if (sink.syncErrorThrowable) {\n            sink.syncErrorThrowable = false;\n            if (sink.syncErrorThrown) {\n                throw sink.syncErrorValue;\n            }\n        }\n        return sink;\n    };\n    Observable.prototype._trySubscribe = function (sink) {\n        try {\n            return this._subscribe(sink);\n        }\n        catch (err) {\n            sink.syncErrorThrown = true;\n            sink.syncErrorValue = err;\n            sink.error(err);\n        }\n    };\n    /**\n     * @method forEach\n     * @param {Function} next a handler for each value emitted by the observable\n     * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise\n     * @return {Promise} a promise that either resolves on observable completion or\n     *  rejects with the handled error\n     */\n    Observable.prototype.forEach = function (next, PromiseCtor) {\n        var _this = this;\n        if (!PromiseCtor) {\n            if (root.root.Rx && root.root.Rx.config && root.root.Rx.config.Promise) {\n                PromiseCtor = root.root.Rx.config.Promise;\n            }\n            else if (root.root.Promise) {\n                PromiseCtor = root.root.Promise;\n            }\n        }\n        if (!PromiseCtor) {\n            throw new Error('no Promise impl found');\n        }\n        return new PromiseCtor(function (resolve, reject) {\n            // Must be declared in a separate statement to avoid a RefernceError when\n            // accessing subscription below in the closure due to Temporal Dead Zone.\n            var subscription;\n            subscription = _this.subscribe(function (value) {\n                if (subscription) {\n                    // if there is a subscription, then we can surmise\n                    // the next handling is asynchronous. Any errors thrown\n                    // need to be rejected explicitly and unsubscribe must be\n                    // called manually\n                    try {\n                        next(value);\n                    }\n                    catch (err) {\n                        reject(err);\n                        subscription.unsubscribe();\n                    }\n                }\n                else {\n                    // if there is NO subscription, then we're getting a nexted\n                    // value synchronously during subscription. We can just call it.\n                    // If it errors, Observable's `subscribe` will ensure the\n                    // unsubscription logic is called, then synchronously rethrow the error.\n                    // After that, Promise will trap the error and send it\n                    // down the rejection path.\n                    next(value);\n                }\n            }, reject, resolve);\n        });\n    };\n    Observable.prototype._subscribe = function (subscriber) {\n        return this.source.subscribe(subscriber);\n    };\n    /**\n     * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n     * @method Symbol.observable\n     * @return {Observable} this instance of the observable\n     */\n    Observable.prototype[observable.observable] = function () {\n        return this;\n    };\n    // HACK: Since TypeScript inherits static properties too, we have to\n    // fight against TypeScript here so Subject can have a different static create signature\n    /**\n     * Creates a new cold Observable by calling the Observable constructor\n     * @static true\n     * @owner Observable\n     * @method create\n     * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n     * @return {Observable} a new cold observable\n     */\n    Observable.create = function (subscribe) {\n        return new Observable(subscribe);\n    };\n    return Observable;\n}());\nvar Observable_2 = Observable;\n\n\nvar Observable_1 = {\n\tObservable: Observable_2\n};\n\nvar __extends$4 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nvar ObjectUnsubscribedError = (function (_super) {\n    __extends$4(ObjectUnsubscribedError, _super);\n    function ObjectUnsubscribedError() {\n        var err = _super.call(this, 'object unsubscribed');\n        this.name = err.name = 'ObjectUnsubscribedError';\n        this.stack = err.stack;\n        this.message = err.message;\n    }\n    return ObjectUnsubscribedError;\n}(Error));\nvar ObjectUnsubscribedError_2 = ObjectUnsubscribedError;\n\n\nvar ObjectUnsubscribedError_1 = {\n\tObjectUnsubscribedError: ObjectUnsubscribedError_2\n};\n\nvar __extends$5 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nvar SubjectSubscription = (function (_super) {\n    __extends$5(SubjectSubscription, _super);\n    function SubjectSubscription(subject, subscriber) {\n        _super.call(this);\n        this.subject = subject;\n        this.subscriber = subscriber;\n        this.closed = false;\n    }\n    SubjectSubscription.prototype.unsubscribe = function () {\n        if (this.closed) {\n            return;\n        }\n        this.closed = true;\n        var subject = this.subject;\n        var observers = subject.observers;\n        this.subject = null;\n        if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n            return;\n        }\n        var subscriberIndex = observers.indexOf(this.subscriber);\n        if (subscriberIndex !== -1) {\n            observers.splice(subscriberIndex, 1);\n        }\n    };\n    return SubjectSubscription;\n}(Subscription_1.Subscription));\nvar SubjectSubscription_2 = SubjectSubscription;\n\n\nvar SubjectSubscription_1 = {\n\tSubjectSubscription: SubjectSubscription_2\n};\n\nvar __extends$1 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {\n    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];\n    function __() { this.constructor = d; }\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n};\n\n\n\n\n\n\n/**\n * @class SubjectSubscriber<T>\n */\nvar SubjectSubscriber = (function (_super) {\n    __extends$1(SubjectSubscriber, _super);\n    function SubjectSubscriber(destination) {\n        _super.call(this, destination);\n        this.destination = destination;\n    }\n    return SubjectSubscriber;\n}(Subscriber_1.Subscriber));\n/**\n * @class Subject<T>\n */\nvar Subject = (function (_super) {\n    __extends$1(Subject, _super);\n    function Subject() {\n        _super.call(this);\n        this.observers = [];\n        this.closed = false;\n        this.isStopped = false;\n        this.hasError = false;\n        this.thrownError = null;\n    }\n    Subject.prototype[rxSubscriber.rxSubscriber] = function () {\n        return new SubjectSubscriber(this);\n    };\n    Subject.prototype.lift = function (operator) {\n        var subject = new AnonymousSubject(this, this);\n        subject.operator = operator;\n        return subject;\n    };\n    Subject.prototype.next = function (value) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        if (!this.isStopped) {\n            var observers = this.observers;\n            var len = observers.length;\n            var copy = observers.slice();\n            for (var i = 0; i < len; i++) {\n                copy[i].next(value);\n            }\n        }\n    };\n    Subject.prototype.error = function (err) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        this.hasError = true;\n        this.thrownError = err;\n        this.isStopped = true;\n        var observers = this.observers;\n        var len = observers.length;\n        var copy = observers.slice();\n        for (var i = 0; i < len; i++) {\n            copy[i].error(err);\n        }\n        this.observers.length = 0;\n    };\n    Subject.prototype.complete = function () {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        this.isStopped = true;\n        var observers = this.observers;\n        var len = observers.length;\n        var copy = observers.slice();\n        for (var i = 0; i < len; i++) {\n            copy[i].complete();\n        }\n        this.observers.length = 0;\n    };\n    Subject.prototype.unsubscribe = function () {\n        this.isStopped = true;\n        this.closed = true;\n        this.observers = null;\n    };\n    Subject.prototype._trySubscribe = function (subscriber) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else {\n            return _super.prototype._trySubscribe.call(this, subscriber);\n        }\n    };\n    Subject.prototype._subscribe = function (subscriber) {\n        if (this.closed) {\n            throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();\n        }\n        else if (this.hasError) {\n            subscriber.error(this.thrownError);\n            return Subscription_1.Subscription.EMPTY;\n        }\n        else if (this.isStopped) {\n            subscriber.complete();\n            return Subscription_1.Subscription.EMPTY;\n        }\n        else {\n            this.observers.push(subscriber);\n            return new SubjectSubscription_1.SubjectSubscription(this, subscriber);\n        }\n    };\n    Subject.prototype.asObservable = function () {\n        var observable = new Observable_1.Observable();\n        observable.source = this;\n        return observable;\n    };\n    Subject.create = function (destination, source) {\n        return new AnonymousSubject(destination, source);\n    };\n    return Subject;\n}(Observable_1.Observable));\nvar Subject_2 = Subject;\n/**\n * @class AnonymousSubject<T>\n */\nvar AnonymousSubject = (function (_super) {\n    __extends$1(AnonymousSubject, _super);\n    function AnonymousSubject(destination, source) {\n        _super.call(this);\n        this.destination = destination;\n        this.source = source;\n    }\n    AnonymousSubject.prototype.next = function (value) {\n        var destination = this.destination;\n        if (destination && destination.next) {\n            destination.next(value);\n        }\n    };\n    AnonymousSubject.prototype.error = function (err) {\n        var destination = this.destination;\n        if (destination && destination.error) {\n            this.destination.error(err);\n        }\n    };\n    AnonymousSubject.prototype.complete = function () {\n        var destination = this.destination;\n        if (destination && destination.complete) {\n            this.destination.complete();\n        }\n    };\n    AnonymousSubject.prototype._subscribe = function (subscriber) {\n        var source = this.source;\n        if (source) {\n            return this.source.subscribe(subscriber);\n        }\n        else {\n            return Subscription_1.Subscription.EMPTY;\n        }\n    };\n    return AnonymousSubject;\n}(Subject));\n\nvar DragDropDirectiveService = (function () {\n    function DragDropDirectiveService() {\n        this.dropItem = new Subject_2();\n    }\n    /**\n     * @param {?} item\n     * @return {?}\n     */\n    DragDropDirectiveService.prototype.setDropItem = function (item) {\n        this.dropItem.next(item);\n    };\n    /**\n     * @return {?}\n     */\n    DragDropDirectiveService.prototype.getDropItem = function () {\n        return this.dropItem.asObservable();\n    };\n    /**\n     * @param {?} item\n     * @return {?}\n     */\n    DragDropDirectiveService.prototype.setDragItem = function (item) {\n        this.draggedItem = item;\n    };\n    /**\n     * @return {?}\n     */\n    DragDropDirectiveService.prototype.getDragItem = function () {\n        return this.draggedItem;\n    };\n    return DragDropDirectiveService;\n}());\nDragDropDirectiveService.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\n];\n/**\n * @nocollapse\n */\nDragDropDirectiveService.ctorParameters = function () { return []; };\n\nvar DragDirective = (function () {\n    /**\n     * @param {?} el\n     * @param {?} dragDropDirectiveService\n     */\n    function DragDirective(el, dragDropDirectiveService) {\n        this.el = el;\n        this.dragDropDirectiveService = dragDropDirectiveService;\n        this.releaseDrop = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this.startDrag = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this.highlighted = false;\n        this.el.nativeElement.draggable = 'true';\n    }\n    /**\n     * @return {?}\n     */\n    DragDirective.prototype.onMouseEnter = function () {\n        this.highlight();\n    };\n    /**\n     * @return {?}\n     */\n    DragDirective.prototype.onMouseOut = function () {\n        this.highlight();\n    };\n    /**\n     * @param {?} event\n     * @return {?}\n     */\n    DragDirective.prototype.onDragStart = function (event) {\n        var _this = this;\n        // html draggable will not transfer an object, so we stringify it\n        var /** @type {?} */ transferObject = { object: this.draggedItem, id: 'draggedItemID-' + new Date().getTime() };\n        var /** @type {?} */ transferObjectString = JSON.stringify(transferObject);\n        event.dataTransfer.setData(\"text\", transferObjectString);\n        this.dragDropDirectiveService.setDragItem(this.draggedItem);\n        this.dropSubscription = this.dragDropDirectiveService.getDropItem().subscribe(function (item) {\n            _this.emitDraggedItem(_this.draggedItem);\n        });\n        this.startDrag.emit(this.draggedItem);\n    };\n    /**\n     * @return {?}\n     */\n    DragDirective.prototype.onDragEnd = function () {\n        if (typeof this.dropSubscription !== 'undefined') {\n            this.dropSubscription.unsubscribe();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    DragDirective.prototype.ngOnDestroy = function () {\n        if (typeof this.dropSubscription !== 'undefined') {\n            this.dropSubscription.unsubscribe();\n        }\n    };\n    /**\n     * @param {?} item\n     * @return {?}\n     */\n    DragDirective.prototype.emitDraggedItem = function (item) {\n        this.releaseDrop.emit(item);\n        this.dropSubscription.unsubscribe();\n    };\n    /**\n     * @return {?}\n     */\n    DragDirective.prototype.highlight = function () {\n        if (this.cssHighlight) {\n            if (!this.highlighted) {\n                this.el.nativeElement.classList.add(this.cssHighlight);\n            }\n            else {\n                this.el.nativeElement.classList.remove(this.cssHighlight);\n            }\n        }\n        this.highlighted = !this.highlighted;\n    };\n    return DragDirective;\n}());\nDragDirective.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\n                selector: '[dragDirective]'\n            },] },\n];\n/**\n * @nocollapse\n */\nDragDirective.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\n    { type: DragDropDirectiveService, },\n]; };\nDragDirective.propDecorators = {\n    'draggedItem': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"], args: ['dragDirective',] },],\n    'cssHighlight': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"], args: ['dragHightlight',] },],\n    'releaseDrop': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\n    'startDrag': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\n    'onMouseEnter': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['mouseenter',] },],\n    'onMouseOut': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['mouseleave',] },],\n    'onDragStart': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['dragstart', ['$event'],] },],\n    'onDragEnd': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['dragend',] },],\n};\n\nvar DropDirective = (function () {\n    /**\n     * @param {?} el\n     * @param {?} dragDropDirectiveService\n     */\n    function DropDirective(el, dragDropDirectiveService) {\n        this.el = el;\n        this.dragDropDirectiveService = dragDropDirectiveService;\n        this.dropEvent = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this.dragenterEvent = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this.dragleaveEvent = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this.dropEventMouse = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this.dragoverMouseEvent = new __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"EventEmitter\"]();\n        this.highlighted = false;\n    }\n    /**\n     * @return {?}\n     */\n    DropDirective.prototype.onDragEnter = function () {\n        this.dragItem = this.dragDropDirectiveService.getDragItem();\n        this.dragenterEvent.emit(this.dragItem);\n        //this.highlighted = true;\n        this.highlight();\n    };\n    /**\n     * @return {?}\n     */\n    DropDirective.prototype.onDragLeave = function () {\n        this.dragItem = this.dragDropDirectiveService.getDragItem();\n        this.dragleaveEvent.emit(this.dragItem);\n        //this.highlighted = false;\n        this.highlight();\n    };\n    /**\n     * @param {?} event\n     * @return {?}\n     */\n    DropDirective.prototype.onDragOver = function (event) {\n        event.preventDefault();\n        this.dragoverMouseEvent.emit(event);\n    };\n    /**\n     * @param {?} event\n     * @return {?}\n     */\n    DropDirective.prototype.onDrop = function (event) {\n        // check to see if we are getting what was sent. text/plain\n        var /** @type {?} */ eventData = event.dataTransfer.getData('text');\n        if (eventData && event.dataTransfer.files.length == 0) {\n            event.preventDefault();\n            // since html draggable will not transer an object, we need to parse are string\n            var /** @type {?} */ transferredObjectString = JSON.parse(eventData);\n            var /** @type {?} */ transferredObjectID = transferredObjectString.id;\n            var /** @type {?} */ transferredObject = transferredObjectString.object;\n            this.dropEvent.emit(transferredObject);\n            this.dragDropDirectiveService.setDropItem(transferredObjectID);\n        }\n        this.dropEventMouse.emit(event);\n        this.highlight();\n    };\n    /**\n     * @return {?}\n     */\n    DropDirective.prototype.highlight = function () {\n        if (this.cssHighlight) {\n            if (!this.highlighted) {\n                this.el.nativeElement.classList.add(this.cssHighlight);\n            }\n            else {\n                this.el.nativeElement.classList.remove(this.cssHighlight);\n            }\n        }\n        this.highlighted = !this.highlighted;\n    };\n    return DropDirective;\n}());\nDropDirective.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\n                selector: '[dropDirective]'\n            },] },\n];\n/**\n * @nocollapse\n */\nDropDirective.ctorParameters = function () { return [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\n    { type: DragDropDirectiveService, },\n]; };\nDropDirective.propDecorators = {\n    'cssHighlight': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"], args: ['dropHighlight',] },],\n    'dropEvent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\n    'dragenterEvent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\n    'dragleaveEvent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\n    'dropEventMouse': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\n    'dragoverMouseEvent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Output\"] },],\n    'onDragEnter': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['dragenter',] },],\n    'onDragLeave': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['dragleave',] },],\n    'onDragOver': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['dragover', ['$event'],] },],\n    'onDrop': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['drop', ['$event'],] },],\n};\n\nvar DragDropDirectiveModule = (function () {\n    function DragDropDirectiveModule() {\n    }\n    return DragDropDirectiveModule;\n}());\nDragDropDirectiveModule.decorators = [\n    { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\n                imports: [\n                    CommonModule\n                ],\n                declarations: [\n                    DragDirective,\n                    DropDirective\n                ],\n                providers: [\n                    DragDropDirectiveService\n                ],\n                exports: [\n                    DragDirective,\n                    DropDirective\n                ]\n            },] },\n];\n/**\n * @nocollapse\n */\nDragDropDirectiveModule.ctorParameters = function () { return []; };\n\n/**\n * Generated bundle index. Do not edit.\n */\n\n\n\n/* WEBPACK VAR INJECTION */}.call(__webpack_exports__, __webpack_require__(49)))\n\n/***/ }),\n/* 721 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\nObject.defineProperty(__webpack_exports__, \"__esModule\", { value: true });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"InternationalPhoneModule\", function() { return InternationalPhoneModule; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CountryLocale\", function() { return CountryLocale; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CountryPipe\", function() { return CountryPipe; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"OnlyNumberDirective\", function() { return OnlyNumberDirective; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"CountryService\", function() { return CountryService; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"LocaleService\", function() { return LocaleService; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"IntPhonePrefixComponent\", function() { return IntPhonePrefixComponent; });\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_common__ = __webpack_require__(3);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__angular_forms__ = __webpack_require__(17);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash__ = __webpack_require__(229);\n/* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_lodash___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_lodash__);\n\n\n\n\n\n\nvar CountryService = /** @class */ (function () {\r\n    function CountryService() {\r\n        this.countries = [\r\n            {\r\n                name: '',\r\n                dialCode: '994',\r\n                countryCode: 'az'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1242',\r\n                countryCode: 'bs'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '973',\r\n                countryCode: 'bh'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '880',\r\n                countryCode: 'bd'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1246',\r\n                countryCode: 'bb'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '375',\r\n                countryCode: 'by'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '32',\r\n                countryCode: 'be'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '501',\r\n                countryCode: 'bz'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '229',\r\n                countryCode: 'bj'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1441',\r\n                countryCode: 'bm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '975',\r\n                countryCode: 'bt'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '591',\r\n                countryCode: 'bo'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '387',\r\n                countryCode: 'ba'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '267',\r\n                countryCode: 'bw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '55',\r\n                countryCode: 'br'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '246',\r\n                countryCode: 'io'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1284',\r\n                countryCode: 'vg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '673',\r\n                countryCode: 'bn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '359',\r\n                countryCode: 'bg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '226',\r\n                countryCode: 'bf'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '257',\r\n                countryCode: 'bi'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '855',\r\n                countryCode: 'kh'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '237',\r\n                countryCode: 'cm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1',\r\n                countryCode: 'ca'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '238',\r\n                countryCode: 'cv'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '599',\r\n                countryCode: 'bq'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1345',\r\n                countryCode: 'ky'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '236',\r\n                countryCode: 'cf'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '235',\r\n                countryCode: 'td'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '56',\r\n                countryCode: 'cl'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '86',\r\n                countryCode: 'cn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '61',\r\n                countryCode: 'cx'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '57',\r\n                countryCode: 'co'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '269',\r\n                countryCode: 'km'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '243',\r\n                countryCode: 'cd'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '242',\r\n                countryCode: 'cg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '682',\r\n                countryCode: 'ck'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '506',\r\n                countryCode: 'cr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '225',\r\n                countryCode: 'ci'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '385',\r\n                countryCode: 'hr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '53',\r\n                countryCode: 'cu'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '599',\r\n                countryCode: 'cw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '357',\r\n                countryCode: 'cy'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '420',\r\n                countryCode: 'cz'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '45',\r\n                countryCode: 'dk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '253',\r\n                countryCode: 'dj'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1767',\r\n                countryCode: 'dm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1',\r\n                countryCode: 'do'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '593',\r\n                countryCode: 'ec'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '20',\r\n                countryCode: 'eg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '503',\r\n                countryCode: 'sv'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '240',\r\n                countryCode: 'gq'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '291',\r\n                countryCode: 'er'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '372',\r\n                countryCode: 'ee'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '251',\r\n                countryCode: 'et'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '500',\r\n                countryCode: 'fk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '298',\r\n                countryCode: 'fo'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '679',\r\n                countryCode: 'fj'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '358',\r\n                countryCode: 'fi'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '33',\r\n                countryCode: 'fr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '594',\r\n                countryCode: 'gf'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '689',\r\n                countryCode: 'pf'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '241',\r\n                countryCode: 'ga'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '220',\r\n                countryCode: 'gm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '995',\r\n                countryCode: 'ge'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '49',\r\n                countryCode: 'de'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '233',\r\n                countryCode: 'gh'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '350',\r\n                countryCode: 'gi'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '30',\r\n                countryCode: 'gr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '299',\r\n                countryCode: 'gl'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1473',\r\n                countryCode: 'gd'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '590',\r\n                countryCode: 'gp'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1671',\r\n                countryCode: 'gu'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '502',\r\n                countryCode: 'gt'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '44',\r\n                countryCode: 'gg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '224',\r\n                countryCode: 'gn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '245',\r\n                countryCode: 'gw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '592',\r\n                countryCode: 'gy'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '509',\r\n                countryCode: 'ht'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '504',\r\n                countryCode: 'hn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '852',\r\n                countryCode: 'hk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '36',\r\n                countryCode: 'hu'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '354',\r\n                countryCode: 'is'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '91',\r\n                countryCode: 'in'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '62',\r\n                countryCode: 'id'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '98',\r\n                countryCode: 'ir'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '964',\r\n                countryCode: 'iq'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '353',\r\n                countryCode: 'ie'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '44',\r\n                countryCode: 'im'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '972',\r\n                countryCode: 'il'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '39',\r\n                countryCode: 'it'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1876',\r\n                countryCode: 'jm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '81',\r\n                countryCode: 'jp'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '44',\r\n                countryCode: 'je'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '962',\r\n                countryCode: 'jo'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '7',\r\n                countryCode: 'kz'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '254',\r\n                countryCode: 'ke'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '686',\r\n                countryCode: 'ki'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '383',\r\n                countryCode: 'xk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '965',\r\n                countryCode: 'kw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '996',\r\n                countryCode: 'kg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '856',\r\n                countryCode: 'la'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '371',\r\n                countryCode: 'lv'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '961',\r\n                countryCode: 'lb'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '266',\r\n                countryCode: 'ls'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '231',\r\n                countryCode: 'lr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '218',\r\n                countryCode: 'ly'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '423',\r\n                countryCode: 'li'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '370',\r\n                countryCode: 'lt'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '352',\r\n                countryCode: 'lu'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '853',\r\n                countryCode: 'mo'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '389',\r\n                countryCode: 'mk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '261',\r\n                countryCode: 'mg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '265',\r\n                countryCode: 'mw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '60',\r\n                countryCode: 'my'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '960',\r\n                countryCode: 'mv'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '223',\r\n                countryCode: 'ml'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '356',\r\n                countryCode: 'mt'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '692',\r\n                countryCode: 'mh'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '596',\r\n                countryCode: 'mq'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '222',\r\n                countryCode: 'mr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '230',\r\n                countryCode: 'mu'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '262',\r\n                countryCode: 'yt'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '52',\r\n                countryCode: 'mx'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '691',\r\n                countryCode: 'fm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '373',\r\n                countryCode: 'md'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '377',\r\n                countryCode: 'mc'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '976',\r\n                countryCode: 'mn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '382',\r\n                countryCode: 'me'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1664',\r\n                countryCode: 'ms'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '212',\r\n                countryCode: 'ma'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '258',\r\n                countryCode: 'mz'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '95',\r\n                countryCode: 'mm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '264',\r\n                countryCode: 'na'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '674',\r\n                countryCode: 'nr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '977',\r\n                countryCode: 'np'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '31',\r\n                countryCode: 'nl'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '687',\r\n                countryCode: 'nc'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '64',\r\n                countryCode: 'nz'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '505',\r\n                countryCode: 'ni'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '227',\r\n                countryCode: 'ne'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '234',\r\n                countryCode: 'ng'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '683',\r\n                countryCode: 'nu'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '672',\r\n                countryCode: 'nf'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '850',\r\n                countryCode: 'kp'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1670',\r\n                countryCode: 'mp'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '47',\r\n                countryCode: 'no'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '968',\r\n                countryCode: 'om'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '92',\r\n                countryCode: 'pk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '680',\r\n                countryCode: 'pw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '970',\r\n                countryCode: 'ps'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '507',\r\n                countryCode: 'pa'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '675',\r\n                countryCode: 'pg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '595',\r\n                countryCode: 'py'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '51',\r\n                countryCode: 'pe'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '63',\r\n                countryCode: 'ph'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '48',\r\n                countryCode: 'pl'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '351',\r\n                countryCode: 'pt'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1',\r\n                countryCode: 'pr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '974',\r\n                countryCode: 'qa'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '262',\r\n                countryCode: 're'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '40',\r\n                countryCode: 'ro'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '7',\r\n                countryCode: 'ru'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '250',\r\n                countryCode: 'rw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '590',\r\n                countryCode: 'bl'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '290',\r\n                countryCode: 'sh'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1869',\r\n                countryCode: 'kn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1758',\r\n                countryCode: 'lc'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '508',\r\n                countryCode: 'pm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1784',\r\n                countryCode: 'vc'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '685',\r\n                countryCode: 'ws'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '378',\r\n                countryCode: 'sm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '239',\r\n                countryCode: 'st'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '966',\r\n                countryCode: 'sa'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '221',\r\n                countryCode: 'sn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '381',\r\n                countryCode: 'rs'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '248',\r\n                countryCode: 'sc'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '232',\r\n                countryCode: 'sl'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '65',\r\n                countryCode: 'sg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1721',\r\n                countryCode: 'sx'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '421',\r\n                countryCode: 'sk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '386',\r\n                countryCode: 'si'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '677',\r\n                countryCode: 'sb'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '252',\r\n                countryCode: 'so'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '27',\r\n                countryCode: 'za'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '82',\r\n                countryCode: 'kr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '211',\r\n                countryCode: 'ss'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '34',\r\n                countryCode: 'es'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '94',\r\n                countryCode: 'lk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '249',\r\n                countryCode: 'sd'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '597',\r\n                countryCode: 'sr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '47',\r\n                countryCode: 'sj'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '268',\r\n                countryCode: 'sz'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '46',\r\n                countryCode: 'se'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '41',\r\n                countryCode: 'ch'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '963',\r\n                countryCode: 'sy'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '886',\r\n                countryCode: 'tw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '992',\r\n                countryCode: 'tj'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '255',\r\n                countryCode: 'tz'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '66',\r\n                countryCode: 'th'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '670',\r\n                countryCode: 'tl'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '228',\r\n                countryCode: 'tg'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '690',\r\n                countryCode: 'tk'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '676',\r\n                countryCode: 'to'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1868',\r\n                countryCode: 'tt'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '216',\r\n                countryCode: 'tn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '90',\r\n                countryCode: 'tr'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '993',\r\n                countryCode: 'tm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1649',\r\n                countryCode: 'tc'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '688',\r\n                countryCode: 'tv'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1340',\r\n                countryCode: 'vi'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '256',\r\n                countryCode: 'ug'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '380',\r\n                countryCode: 'ua'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '971',\r\n                countryCode: 'ae'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '44',\r\n                countryCode: 'gb'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '1',\r\n                countryCode: 'us'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '598',\r\n                countryCode: 'uy'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '998',\r\n                countryCode: 'uz'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '678',\r\n                countryCode: 'vu'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '39',\r\n                countryCode: 'va'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '58',\r\n                countryCode: 've'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '84',\r\n                countryCode: 'vn'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '681',\r\n                countryCode: 'wf'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '212',\r\n                countryCode: 'eh'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '967',\r\n                countryCode: 'ye'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '260',\r\n                countryCode: 'zm'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '263',\r\n                countryCode: 'zw'\r\n            },\r\n            {\r\n                name: '',\r\n                dialCode: '358',\r\n                countryCode: 'ax'\r\n            }\r\n        ];\r\n    }\r\n    /**\r\n     * @return {?}\r\n     */\r\n    CountryService.prototype.getCountries = function () {\r\n        return this.countries;\r\n    };\r\n    CountryService.decorators = [\r\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n    ];\r\n    /**\r\n     * @nocollapse\r\n     */\r\n    CountryService.ctorParameters = function () { return []; };\r\n    return CountryService;\r\n}());\n\nvar LocaleService = /** @class */ (function () {\r\n    function LocaleService() {\r\n        this.locales = {\r\n            'en': {\r\n                'ax': 'AALAND ISLANDS',\r\n                'af': 'AFGHANISTAN',\r\n                'al': 'ALBANIA',\r\n                'dz': 'ALGERIA',\r\n                'as': 'AMERICAN SAMOA',\r\n                'ad': 'ANDORRA',\r\n                'ao': 'ANGOLA',\r\n                'ai': 'ANGUILLA',\r\n                'aq': 'ANTARCTICA',\r\n                'ag': 'ANTIGUA AND BARBUDA',\r\n                'ar': 'ARGENTINA',\r\n                'am': 'ARMENIA',\r\n                'aw': 'ARUBA',\r\n                'au': 'AUSTRALIA',\r\n                'at': 'AUSTRIA',\r\n                'az': 'AZERBAIJAN',\r\n                'bs': 'BAHAMAS',\r\n                'bh': 'BAHRAIN',\r\n                'bd': 'BANGLADESH',\r\n                'bb': 'BARBADOS',\r\n                'by': 'BELARUS',\r\n                'be': 'BELGIUM',\r\n                'bz': 'BELIZE',\r\n                'bj': 'BENIN',\r\n                'bm': 'BERMUDA',\r\n                'bt': 'BHUTAN',\r\n                'bo': 'BOLIVIA',\r\n                'ba': 'BOSNIA AND HERZEGOWINA',\r\n                'bw': 'BOTSWANA',\r\n                'bv': 'BOUVET ISLAND',\r\n                'br': 'BRAZIL',\r\n                'io': 'BRITISH INDIAN OCEAN TERRITORY',\r\n                'bn': 'BRUNEI DARUSSALAM',\r\n                'bg': 'BULGARIA',\r\n                'bf': 'BURKINA FASO',\r\n                'bi': 'BURUNDI',\r\n                'bq': 'CARIBBEAN NETHERLANDS',\r\n                'kh': 'CAMBODIA',\r\n                'cm': 'CAMEROON',\r\n                'ca': 'CANADA',\r\n                'cv': 'CAPE VERDE',\r\n                'ky': 'CAYMAN ISLANDS',\r\n                'cf': 'CENTRAL AFRICAN REPUBLIC',\r\n                'td': 'CHAD',\r\n                'cl': 'CHILE',\r\n                'cn': 'CHINA',\r\n                'cx': 'CHRISTMAS ISLAND',\r\n                'cc': 'COCOS ISLANDS',\r\n                'co': 'COLOMBIA',\r\n                'km': 'COMOROS',\r\n                'cd': 'CONGO',\r\n                'cg': 'CONGO REPUBLIC',\r\n                'ck': 'COOK ISLANDS',\r\n                'cr': 'COSTA RICA',\r\n                'ci': 'COTE DIVOIRE',\r\n                'hr': 'CROATIA ',\r\n                'cu': 'CUBA',\r\n                'cw': 'CURACAO',\r\n                'cy': 'CYPRUS',\r\n                'cz': 'CZECH REPUBLIC',\r\n                'dk': 'DENMARK',\r\n                'dj': 'DJIBOUTI',\r\n                'dm': 'DOMINICA',\r\n                'do': 'DOMINICAN REPUBLIC',\r\n                'ec': 'ECUADOR',\r\n                'eg': 'EGYPT',\r\n                'sv': 'EL SALVADOR',\r\n                'gq': 'EQUATORIAL GUINEA',\r\n                'er': 'ERITREA',\r\n                'ee': 'ESTONIA',\r\n                'et': 'ETHIOPIA',\r\n                'fk': 'FALKLAND ISLANDS (MALVINAS)',\r\n                'fo': 'FAROE ISLANDS',\r\n                'fj': 'FIJI',\r\n                'fi': 'FINLAND',\r\n                'fr': 'FRANCE',\r\n                'gf': 'FRENCH GUIANA',\r\n                'pf': 'FRENCH POLYNESIA',\r\n                'tf': 'FRENCH SOUTHERN TERRITORIES',\r\n                'ga': 'GABON',\r\n                'gm': 'GAMBIA',\r\n                'ge': 'GEORGIA',\r\n                'de': 'GERMANY',\r\n                'gh': 'GHANA',\r\n                'gi': 'GIBRALTAR',\r\n                'gr': 'GREECE',\r\n                'gl': 'GREENLAND',\r\n                'gd': 'GRENADA',\r\n                'gp': 'GUADELOUPE',\r\n                'gu': 'GUAM',\r\n                'gt': 'GUATEMALA',\r\n                'gg': 'GUERNSEY',\r\n                'gn': 'GUINEA',\r\n                'gw': 'GUINEA-BISSAU',\r\n                'gy': 'GUYANA',\r\n                'ht': 'HAITI',\r\n                'hm': 'HEARD AND MC DONALD ISLANDS',\r\n                'hn': 'HONDURAS',\r\n                'hk': 'HONG KONG',\r\n                'hu': 'HUNGARY',\r\n                'is': 'ICELAND',\r\n                'in': 'INDIA',\r\n                'id': 'INDONESIA',\r\n                'ir': 'IRAN ',\r\n                'iq': 'IRAQ',\r\n                'ie': 'IRELAND',\r\n                'im': 'ISLA DE MAN',\r\n                'il': 'ISRAEL',\r\n                'it': 'ITALY',\r\n                'jm': 'JAMAICA',\r\n                'jp': 'JAPAN',\r\n                'je': 'JERSEY',\r\n                'jo': 'JORDAN',\r\n                'kz': 'KAZAKHSTAN',\r\n                'ke': 'KENYA',\r\n                'ki': 'KIRIBATI',\r\n                'kp': 'KOREA NORTH ',\r\n                'kr': 'KOREA SOUTH',\r\n                'xk': 'KOSOVO',\r\n                'kw': 'KUWAIT',\r\n                'kg': 'KYRGYZSTAN',\r\n                'la': 'LAO',\r\n                'lv': 'LATVIA',\r\n                'lb': 'LEBANON',\r\n                'ls': 'LESOTHO',\r\n                'lr': 'LIBERIA',\r\n                'ly': 'LIBYAN ARAB JAMAHIRIYA',\r\n                'li': 'LIECHTENSTEIN',\r\n                'lt': 'LITHUANIA',\r\n                'lu': 'LUXEMBOURG',\r\n                'mo': 'MACAU',\r\n                'mk': 'MACEDONIA',\r\n                'mg': 'MADAGASCAR',\r\n                'mw': 'MALAWI',\r\n                'my': 'MALAYSIA',\r\n                'mv': 'MALDIVES',\r\n                'ml': 'MALI',\r\n                'mt': 'MALTA',\r\n                'mh': 'MARSHALL ISLANDS',\r\n                'mq': 'MARTINIQUE',\r\n                'mr': 'MAURITANIA',\r\n                'mu': 'MAURITIUS',\r\n                'yt': 'MAYOTTE',\r\n                'mx': 'MEXICO',\r\n                'fm': 'MICRONESIA',\r\n                'md': 'MOLDOVA',\r\n                'mc': 'MONACO',\r\n                'mn': 'MONGOLIA',\r\n                'me': 'MONTENEGRO',\r\n                'ms': 'MONTSERRAT',\r\n                'ma': 'MOROCCO',\r\n                'mz': 'MOZAMBIQUE',\r\n                'mm': 'MYANMAR',\r\n                'na': 'NAMIBIA',\r\n                'nr': 'NAURU',\r\n                'np': 'NEPAL',\r\n                'nl': 'NETHERLANDS',\r\n                'an': 'NETHERLANDS ANTILLES',\r\n                'nc': 'NEW CALEDONIA',\r\n                'nz': 'NEW ZEALAND',\r\n                'ni': 'NICARAGUA',\r\n                'ne': 'NIGER',\r\n                'ng': 'NIGERIA',\r\n                'nu': 'NIUE',\r\n                'nf': 'NORFOLK ISLAND',\r\n                'mp': 'NORTHERN MARIANA ISLANDS',\r\n                'no': 'NORWAY',\r\n                'om': 'OMAN',\r\n                'pk': 'PAKISTAN',\r\n                'pw': 'PALAU',\r\n                'ps': 'PALESTINA',\r\n                'pa': 'PANAMA',\r\n                'pg': 'PAPUA NEW GUINEA',\r\n                'py': 'PARAGUAY',\r\n                'pe': 'PERU',\r\n                'ph': 'PHILIPPINES',\r\n                'pn': 'PITCAIRN',\r\n                'pl': 'POLAND',\r\n                'pt': 'PORTUGAL',\r\n                'pr': 'PUERTO RICO',\r\n                'qa': 'QATAR',\r\n                're': 'REUNION',\r\n                'ro': 'ROMANIA',\r\n                'ru': 'RUSSIAN FEDERATION',\r\n                'rw': 'RWANDA',\r\n                'sh': 'SAINT HELENA',\r\n                'kn': 'SAINT KITTS AND NEVIS',\r\n                'lc': 'SAINT LUCIA',\r\n                'pm': 'SAINT PIERRE AND MIQUELON',\r\n                'vc': 'SAINT VINCENT AND THE GRENADINES',\r\n                'ws': 'SAMOA',\r\n                'bl': 'SAN BARTOLOMÉ',\r\n                'sm': 'SAN MARINO',\r\n                'st': 'SAO TOME AND PRINCIPE',\r\n                'sa': 'SAUDI ARABIA',\r\n                'sn': 'SENEGAL',\r\n                'cs': 'SERBIA AND MONTENEGRO',\r\n                'rs': 'SERBIA',\r\n                'sc': 'SEYCHELLES',\r\n                'sl': 'SIERRA LEONE',\r\n                'sg': 'SINGAPORE',\r\n                'sx': 'SINT MAARTEN',\r\n                'sk': 'SLOVAKIA',\r\n                'si': 'SLOVENIA',\r\n                'sb': 'SOLOMON ISLANDS',\r\n                'so': 'SOMALIA',\r\n                'za': 'SOUTH AFRICA',\r\n                'gs': 'SOUTH GEORGIA ISLANDS',\r\n                'es': 'SPAIN',\r\n                'lk': 'SRI LANKA',\r\n                'sd': 'SUDAN',\r\n                'ss': 'SOUTH SUDAN',\r\n                'sr': 'SURINAME',\r\n                'sj': 'SVALBARD AND JAN MAYEN ISLANDS',\r\n                'sz': 'SWAZILAND',\r\n                'se': 'SWEDEN',\r\n                'ch': 'SWITZERLAND',\r\n                'sy': 'SYRIAN ARAB REPUBLIC',\r\n                'tw': 'TAIWAN',\r\n                'tj': 'TAJIKISTAN',\r\n                'tz': 'TANZANIA',\r\n                'th': 'THAILAND',\r\n                'tl': 'TIMOR-LESTE',\r\n                'tg': 'TOGO',\r\n                'tk': 'TOKELAU',\r\n                'to': 'TONGA',\r\n                'tt': 'TRINIDAD AND TOBAGO',\r\n                'tn': 'TUNISIA',\r\n                'tr': 'TURKEY',\r\n                'tm': 'TURKMENISTAN',\r\n                'tc': 'TURKS AND CAICOS ISLANDS',\r\n                'tv': 'TUVALU',\r\n                'ug': 'UGANDA',\r\n                'ua': 'UKRAINE',\r\n                'ae': 'UNITED ARAB EMIRATES',\r\n                'gb': 'UNITED KINGDOM',\r\n                'us': 'UNITED STATES',\r\n                'um': 'UNITED STATES MINOR OUTLYING ISLANDS',\r\n                'uy': 'URUGUAY',\r\n                'uz': 'UZBEKISTAN',\r\n                'vu': 'VANUATU',\r\n                'va': 'VATICAN CITY STATE',\r\n                've': 'VENEZUELA',\r\n                'vn': 'VIET NAM',\r\n                'vg': 'VIRGIN ISLANDS (BRITISH)',\r\n                'vi': 'VIRGIN ISLANDS (U.S.)',\r\n                'wf': 'WALLIS AND FUTUNA ISLANDS',\r\n                'eh': 'WESTERN SAHARA',\r\n                'ye': 'YEMEN',\r\n                'zm': 'ZAMBIA',\r\n                'zw': 'ZIMBABWE '\r\n            },\r\n            'es': {\r\n                'ax': 'ISLAS ÁLAND',\r\n                'af': 'AFGHANISTÁN',\r\n                'al': 'ALBANIA',\r\n                'dz': 'ARGEL',\r\n                'as': 'SAMOA AMERICANA',\r\n                'ad': 'ANDORRA',\r\n                'ao': 'ANGOLA',\r\n                'ai': 'ANGUILA',\r\n                'aq': 'ANTÁRTIDA',\r\n                'ag': 'ANTIGUA Y BARBUDA',\r\n                'ar': 'ARGENTINA',\r\n                'am': 'ARMENIA',\r\n                'aw': 'ARUBA',\r\n                'au': 'AUSTRALIA',\r\n                'at': 'AUSTRIA',\r\n                'az': 'AZERBAIYÁN',\r\n                'bs': 'BAHAMAS',\r\n                'bh': 'BAHRÉIN',\r\n                'bd': 'BANGLADESH',\r\n                'bb': 'BARBADOS',\r\n                'by': 'BELARÚS',\r\n                'be': 'BÉLGICA',\r\n                'bz': 'BELICE',\r\n                'bj': 'BENIN',\r\n                'bm': 'BERMUDAAS',\r\n                'bt': 'BHUTÁN',\r\n                'bo': 'BOLIVIA',\r\n                'ba': 'BOSNIA Y HERZEGOVINA',\r\n                'bw': 'BOTSUANA',\r\n                'bv': 'ISLA BOUVET',\r\n                'br': 'BRASIL',\r\n                'io': 'TERRITORIO BRITÁNICO DEL OCÉANO ÍNDICO',\r\n                'bn': 'BRUNÉI',\r\n                'bg': 'BULGARIA',\r\n                'bf': 'BURKINA FASO',\r\n                'bi': 'BURUNDI',\r\n                'bq': 'CARIBE PAÍSES BAJOS',\r\n                'kh': 'CAMBOYA',\r\n                'cm': 'CAMERÚN',\r\n                'ca': 'CANADÁ',\r\n                'cv': 'CABO VERDE',\r\n                'ky': 'ISLAS CAIMÁN',\r\n                'cf': 'REPÚBLICA CENTRO-AFRICANA',\r\n                'td': 'CHAD',\r\n                'cl': 'CHILE',\r\n                'cn': 'CHINA',\r\n                'cx': 'ISLAS CHRISTMAS',\r\n                'cc': 'ISLAS COCOS',\r\n                'co': 'COLOMBIA',\r\n                'km': 'COMOROS',\r\n                'cd': 'CONGO (ZAIRE)',\r\n                'cg': 'CONGO',\r\n                'ck': 'ISLAS COOK',\r\n                'cr': 'COSTA RICA',\r\n                'ci': 'COSTA DE MARFIL',\r\n                'hr': 'CROACIA ',\r\n                'cu': 'CUBA',\r\n                'cw': 'CURAÇAO',\r\n                'cy': 'CHIPRE',\r\n                'cz': 'REPÚBLICA CHECA',\r\n                'dk': 'DINAMARCA',\r\n                'dj': 'YIBUTI',\r\n                'dm': 'DOMÍNICA',\r\n                'do': 'REPÚBLICA DOMINICANA',\r\n                'ec': 'ECUADOR',\r\n                'eg': 'EGIPTO',\r\n                'sv': 'EL SALVADOR',\r\n                'gq': 'GUINEA ECUATORIAL',\r\n                'er': 'ERITREA',\r\n                'ee': 'ESTONIA',\r\n                'et': 'ETIOPÍA',\r\n                'fk': 'ISLAS MALVINAS',\r\n                'fo': 'ISLAS FAROE',\r\n                'fj': 'FIJI',\r\n                'fi': 'FINLANDIA',\r\n                'fr': 'FRANCIA',\r\n                'gf': 'GUIANA FRANCESA',\r\n                'pf': 'POLYNESIA FRANCESA',\r\n                'tf': 'TERRITORIOS AUSTRALES FRANCESES',\r\n                'ga': 'GABÓN',\r\n                'gm': 'GAMBIA',\r\n                'ge': 'GEORGIA',\r\n                'de': 'ALEMANIA',\r\n                'gh': 'GHANA',\r\n                'gi': 'GIBRALTAR',\r\n                'gr': 'GREECE',\r\n                'gl': 'GROENLANDIA',\r\n                'gd': 'GRANADA',\r\n                'gp': 'GUADALUPE',\r\n                'gu': 'GUAM',\r\n                'gt': 'GUATEMALA',\r\n                'gg': 'GUERNSEY',\r\n                'gn': 'GUINEA',\r\n                'gw': 'GUINEA-BISSAU',\r\n                'gy': 'GUYANA',\r\n                'ht': 'HAITI',\r\n                'hm': 'ISLAS HEARD Y MC DONALD',\r\n                'hn': 'HONDURAS',\r\n                'hk': 'HONG KONG',\r\n                'hu': 'HUNGRÍA',\r\n                'is': 'ISLANDIA',\r\n                'in': 'INDIA',\r\n                'id': 'INDONESIA',\r\n                'ir': 'IRÁN',\r\n                'iq': 'IRAK',\r\n                'ie': 'IRLANDA',\r\n                'im': 'ISLA DE MAN',\r\n                'il': 'ISRAEL',\r\n                'it': 'ITALIA',\r\n                'jm': 'JAMAICA',\r\n                'jp': 'JAPÓN',\r\n                'je': 'JERSEY',\r\n                'jo': 'JORDANIA',\r\n                'kz': 'KAZAJSTÁN',\r\n                'ke': 'KENIA',\r\n                'ki': 'KIRIBATI',\r\n                'kp': 'KOREA DEL NORTE',\r\n                'kr': 'KOREA DEL SUR',\r\n                'xk': 'KOSOVO',\r\n                'kw': 'KUWAIT',\r\n                'kg': 'KIRGUISTÁN',\r\n                'la': 'LAOS',\r\n                'lv': 'LETONIA',\r\n                'lb': 'LÍBANO',\r\n                'ls': 'LESOTHO',\r\n                'lr': 'LIBERIA',\r\n                'ly': 'LIBIA',\r\n                'li': 'LIECHTENSTEIN',\r\n                'lt': 'LITUANIA',\r\n                'lu': 'LUXEMBURGO',\r\n                'mo': 'MACAO',\r\n                'mk': 'MACEDONIA',\r\n                'mg': 'MADAGASCAR',\r\n                'mw': 'MALAWI',\r\n                'my': 'MALASIA',\r\n                'mv': 'MALDIVAS',\r\n                'ml': 'MALI',\r\n                'mt': 'MALTA',\r\n                'mh': 'ISLAS MARSHALL',\r\n                'mq': 'MATINICA',\r\n                'mr': 'MAURITANIA',\r\n                'mu': 'MAURICIO',\r\n                'yt': 'MAYOTTE',\r\n                'mx': 'MÉXICO',\r\n                'fm': 'MICRONESIA',\r\n                'md': 'MOLDOVA',\r\n                'mc': 'MÓNACO',\r\n                'mn': 'MONGOLIA',\r\n                'me': 'MONTENEGRO',\r\n                'ms': 'MONTSERRAT',\r\n                'ma': 'MARRUECOS',\r\n                'mz': 'MOZAMBIQUE',\r\n                'mm': 'MYANMAR',\r\n                'na': 'NAMIBIA',\r\n                'nr': 'NAURU',\r\n                'np': 'NEPAL',\r\n                'nl': 'PAÍSES BAJOS',\r\n                'an': 'ANTILLAS NEERLANDESAS',\r\n                'nc': 'NUEVA CALEDONIA',\r\n                'nz': 'NUEVA ZELANDA',\r\n                'ni': 'NICARAGUA',\r\n                'ne': 'NÍGER',\r\n                'ng': 'NIGERIA',\r\n                'nu': 'NIUE',\r\n                'nf': 'ISLAS NORKFOLK',\r\n                'mp': 'ISLAS MARIANAS DEL NORTE',\r\n                'no': 'NORUEGA',\r\n                'om': 'OMÁN',\r\n                'pk': 'PAKISTÁN',\r\n                'pw': 'ISLAS PALAOS',\r\n                'ps': 'PALESTINA',\r\n                'pa': 'PANAMÁ',\r\n                'pg': 'PAPÚA NUEVA GUINEA',\r\n                'py': 'PARAGUAY',\r\n                'pe': 'PERÚ',\r\n                'ph': 'FILIPINAS',\r\n                'pn': 'ISLAS PITCAIRN',\r\n                'pl': 'POLONIA',\r\n                'pt': 'PORTUGAL',\r\n                'pr': 'PUERTO RICO',\r\n                'qa': 'QATAR',\r\n                're': 'REUNIÓN',\r\n                'ro': 'RUMANÍA',\r\n                'ru': 'RUSIA',\r\n                'rw': 'RUANDA',\r\n                'sh': 'SANTA ELENA',\r\n                'kn': 'SAN CRISTÓBAL Y NIEVES',\r\n                'lc': 'SANTA LUCÍA',\r\n                'pm': 'SAN PEDRO Y MIQUELÓN',\r\n                'vc': 'SAN VICENTE Y LAS GRANADINAS',\r\n                'ws': 'SAMOA',\r\n                'bl': 'SAN BARTOLOMÉ',\r\n                'sm': 'SAN MARINO',\r\n                'st': 'SANTO TOMÉ Y PRÍNCIPE',\r\n                'sa': 'ARABIA SAUDITA',\r\n                'sn': 'SENEGAL',\r\n                'cs': 'SERBIA Y MONTENEGRO',\r\n                'rs': 'SERBIA',\r\n                'sc': 'SEYCHELLES',\r\n                'sl': 'SIERRA LEONA',\r\n                'sg': 'SINGAPUR',\r\n                'sx': 'SINT MAARTEN',\r\n                'sk': 'ESLOVAQUIA',\r\n                'si': 'ESLOVENIA',\r\n                'sb': 'ISLAS SOLOMÓN',\r\n                'so': 'SOMALIA',\r\n                'za': 'SUDÁFRICA',\r\n                'gs': 'GEORGIA DEL SUR E ISLAS SANDWICH DEL SUR',\r\n                'es': 'ESPAÑA',\r\n                'lk': 'SRI LANKA',\r\n                'sd': 'SUDÁN',\r\n                'ss': 'SUDÁN DEL SUR',\r\n                'sr': 'SURINAM',\r\n                'sj': 'ISLAS SVALBARD Y JAN MAYEN',\r\n                'sz': 'SUAZILANDIA',\r\n                'se': 'SUECIA',\r\n                'ch': 'SUIZA',\r\n                'sy': 'SIRIA',\r\n                'tw': 'TAIWÁN',\r\n                'tj': 'TAYIKISTÁN',\r\n                'tz': 'TANZANIA',\r\n                'th': 'TAILANDIA',\r\n                'tl': 'TIMOR-LESTE',\r\n                'tg': 'TOGO',\r\n                'tk': 'TOKELAU',\r\n                'to': 'TONGA',\r\n                'tt': 'TRINIDAD Y TOBAGO',\r\n                'tn': 'TÚNEZ',\r\n                'tr': 'TURQUÍA',\r\n                'tm': 'TURKMENISTÁN',\r\n                'tc': 'ISLAS TURCAS Y CAICOS',\r\n                'tv': 'TUVALU',\r\n                'ug': 'UGANDA',\r\n                'ua': 'UCRANIA',\r\n                'ae': 'EMIRATOS ÁRABES UNIDOS',\r\n                'gb': 'REINO UNIDO',\r\n                'us': 'ESTADOS UNIDOS DE AMÉRICA',\r\n                'um': 'ESTADOS UNIDOS ISLAS MINOR OUTLYING',\r\n                'uy': 'URUGUAY',\r\n                'uz': 'UZBEKISTÁN',\r\n                'vu': 'VANUATU',\r\n                'va': 'CIUDAD DEL VATICANO',\r\n                've': 'VENEZUELA',\r\n                'vn': 'VIETNAM',\r\n                'vg': 'ISLAS VÍRGENES (INGLESAS)',\r\n                'vi': 'ISLAS VÍRGENES (U.S.)',\r\n                'wf': 'WALLIS Y FUTUNA',\r\n                'eh': 'SAHARA OCCIDENTAL',\r\n                'ye': 'YEMEN',\r\n                'zm': 'ZAMBIA',\r\n                'zw': 'ZIMBABUE '\r\n            }\r\n        };\r\n    }\r\n    /**\r\n     * @param {?} locale\r\n     * @return {?}\r\n     */\r\n    LocaleService.prototype.getLocales = function (locale) {\r\n        if (locale && this.locales.hasOwnProperty(locale)) {\r\n            // User given locale\r\n            return this.locales[locale];\r\n        }\r\n        // Default: en\r\n        return this.locales['en'];\r\n    };\r\n    LocaleService.decorators = [\r\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Injectable\"] },\r\n    ];\r\n    /**\r\n     * @nocollapse\r\n     */\r\n    LocaleService.ctorParameters = function () { return []; };\r\n    return LocaleService;\r\n}());\n\nvar COUNTER_CONTROL_ACCESSOR = {\r\n    provide: __WEBPACK_IMPORTED_MODULE_2__angular_forms__[\"NG_VALUE_ACCESSOR\"],\r\n    useExisting: Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__[\"forwardRef\"])(function () { return IntPhonePrefixComponent; }),\r\n    multi: true\r\n};\r\nvar PLUS = '+';\r\nvar IntPhonePrefixComponent = /** @class */ (function () {\r\n    /**\r\n     * @param {?} service\r\n     * @param {?} localeService\r\n     * @param {?} phoneComponent\r\n     */\r\n    function IntPhonePrefixComponent(service, localeService, phoneComponent) {\r\n        this.service = service;\r\n        this.localeService = localeService;\r\n        this.maxLength = 15;\r\n        this.onlyNumbers = true;\r\n        this.showDropdown = false;\r\n        this.phoneInput = '';\r\n        this.disabled = false;\r\n        this.value = '';\r\n        this.phoneComponent = phoneComponent;\r\n    }\r\n    /**\r\n     * @param {?} event\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.handleKeyboardEvent = function (event) {\r\n        if (this.showDropdown) {\r\n            this.countryFilter = \"\" + this.countryFilter + event.key;\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.ngOnInit = function () {\r\n        this.countries = this.service.getCountries();\r\n        this.locales = this.localeService.getLocales(this.locale);\r\n        this.translateCountryNames();\r\n    };\r\n    /**\r\n     * @param {?} isDisabled\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.setDisabledState = function (isDisabled) {\r\n        this.disabled = isDisabled;\r\n    };\r\n    /**\r\n     * @param {?} fn\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.registerOnTouched = function (fn) {\r\n        this.onTouch = fn;\r\n    };\r\n    /**\r\n     * @param {?} fn\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.registerOnChange = function (fn) {\r\n        this.onModelChange = fn;\r\n    };\r\n    /**\r\n     * @param {?} value\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.writeValue = function (value) {\r\n        this.value = value || '';\r\n        this.phoneInput = this.value;\r\n        if (IntPhonePrefixComponent.startsWithPlus(this.value)) {\r\n            this.findPrefix(this.value.split(PLUS)[1]);\r\n            if (this.selectedCountry) {\r\n                this.updatePhoneInput(this.selectedCountry.countryCode);\r\n            }\r\n        }\r\n        if (this.defaultCountry) {\r\n            this.updatePhoneInput(this.defaultCountry);\r\n        }\r\n    };\r\n    /**\r\n     * @param {?} event\r\n     * @param {?} countryCode\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.updateSelectedCountry = function (event, countryCode) {\r\n        event.preventDefault();\r\n        this.updatePhoneInput(countryCode);\r\n        this.updateValue();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.showDropDown = function () {\r\n        this.showDropdown = !this.showDropdown;\r\n        this.countryFilter = '';\r\n    };\r\n    /**\r\n     * @param {?} event\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.hideDropdown = function (event) {\r\n        if (!this.phoneComponent.nativeElement.contains(event.target)) {\r\n            this.showDropdown = false;\r\n        }\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.updatePhone = function () {\r\n        if (IntPhonePrefixComponent.startsWithPlus(this.phoneInput)) {\r\n            this.findPrefix(this.phoneInput.split(PLUS)[1]);\r\n        }\r\n        else {\r\n            this.selectedCountry = null;\r\n        }\r\n        this.updateValue();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.translateCountryNames = function () {\r\n        var _this = this;\r\n        this.countries.forEach(function (country) {\r\n            country.name = _this.locales[country.countryCode];\r\n        });\r\n        this.orderCountriesByName();\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.orderCountriesByName = function () {\r\n        this.countries = Object(__WEBPACK_IMPORTED_MODULE_3_lodash__[\"sortBy\"])(this.countries, 'name');\r\n    };\r\n    /**\r\n     * @param {?} countryCode\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.updatePhoneInput = function (countryCode) {\r\n        this.showDropdown = false;\r\n        var /** @type {?} */ newInputValue = IntPhonePrefixComponent.startsWithPlus(this.phoneInput)\r\n            ? \"\" + this.phoneInput.split(PLUS)[1].substr(this.selectedCountry.dialCode.length, this.phoneInput.length)\r\n            : this.phoneInput;\r\n        this.selectedCountry = this.countries.find(function (country) { return country.countryCode === countryCode; });\r\n        this.phoneInput = \"\" + PLUS + this.selectedCountry.dialCode + \" \" + newInputValue.replace(/ /g, '');\r\n    };\r\n    /**\r\n     * @param {?} prefix\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.findPrefix = function (prefix) {\r\n        var /** @type {?} */ foundPrefixes = this.countries.filter(function (country) { return prefix.startsWith(country.dialCode); });\r\n        this.selectedCountry = !Object(__WEBPACK_IMPORTED_MODULE_3_lodash__[\"isEmpty\"])(foundPrefixes)\r\n            ? IntPhonePrefixComponent.reducePrefixes(foundPrefixes)\r\n            : null;\r\n    };\r\n    /**\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.prototype.updateValue = function () {\r\n        this.value = this.phoneInput.replace(/ /g, '');\r\n        this.onModelChange(this.value);\r\n        this.onTouch();\r\n    };\r\n    /**\r\n     * @param {?} text\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.startsWithPlus = function (text) {\r\n        return text.startsWith(PLUS);\r\n    };\r\n    /**\r\n     * @param {?} foundPrefixes\r\n     * @return {?}\r\n     */\r\n    IntPhonePrefixComponent.reducePrefixes = function (foundPrefixes) {\r\n        return foundPrefixes.reduce(function (first, second) {\r\n            return first.dialCode.length > second.dialCode.length\r\n                ? first\r\n                : second;\r\n        });\r\n    };\r\n    IntPhonePrefixComponent.decorators = [\r\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Component\"], args: [{ selector: 'int-phone-prefix',\r\n                    template: \"<div class=\\\"input-group\\\"> <span class=\\\"input-group-addon flagInput\\\"> <div class=\\\"dropdown\\\"> <button type=\\\"button\\\" class=\\\"dropbtn btn\\\" (click)=\\\"showDropDown()\\\" [disabled]=\\\"disabled\\\"> <span [class]=\\\"'flag flag-' + selectedCountry.countryCode\\\" *ngIf=\\\"selectedCountry\\\"></span> <span class=\\\"defaultCountry\\\" *ngIf=\\\"!selectedCountry\\\"></span> </button> <div class=\\\"dropdown-content\\\" *ngIf=\\\"showDropdown\\\" clickOutside> <div class=\\\"list-group scrollable-menu\\\"> <a href=\\\"#\\\" class=\\\"list-group-item\\\" *ngFor=\\\"let country of countries | country: countryFilter\\\" (click)=\\\"updateSelectedCountry($event, country.countryCode)\\\"> <span [class]=\\\"'flag flag-' + country.countryCode\\\"></span> <span class=\\\"country-name\\\">{{ country.name }}  <span class=\\\"dial-code\\\">+ {{ country.dialCode}}</span></span> </a> </div> </div> </div> </span> <input [onlyNumber]=\\\"onlyNumbers\\\" class=\\\"form-control\\\" [maxlength]=\\\"maxLength\\\" [disabled]=\\\"disabled\\\" [(ngModel)]=\\\"phoneInput\\\" (ngModelChange)=\\\"updatePhone()\\\"> </div> \",\r\n                    styles: [\".country-name { margin-left: 6px; } .dial-code { color: #999; } .scrollable-menu { height: auto; max-height: 200px; width: 350px; overflow-x: hidden; } .flagInput { padding: 0 !important; } .input-group-addon { text-align: left; } .btn-flag { border-color: white; } .btn:hover, .btn:focus{ background-color: white; } .defaultCountry { background:url('http://res.cloudinary.com/dvbuhh0bl/image/upload/c_scale,h_15,w_15/v1495279723/default_tmey2r.png') no-repeat; display:inline-block; width:15px; height:15px; } .list-group { margin-bottom: 0; } /* Dropdown Button */ .dropbtn { background-color: white; color: white; border: none; cursor: pointer; } .dropdown { position: relative; display: inline-block; } .dropdown-content { position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1000; } .dropdown-content a { color: black; padding: 12px 16px; text-decoration: none; display: block; } \",\r\n                        \"/*! * Generated with CSS Flag Sprite generator (https://www.flag-sprites.com/) */.flag{display:inline-block;width:16px;height:11px;background:url('http://res.cloudinary.com/dvbuhh0bl/image/upload/v1495279723/flags_boi3c5.png') no-repeat}.flag.flag-af{background-position:-32px 0}.flag.flag-ky{background-position:-128px -77px}.flag.flag-in{background-position:-64px -66px}.flag.flag-mm{background-position:-192px -88px}.flag.flag-td{background-position:-240px -132px}.flag.flag-dm{background-position:-80px -33px}.flag.flag-se{background-position:-208px -121px}.flag.flag-pr{background-position:-224px -110px}.flag.flag-bj{background-position:-112px -11px}.flag.flag-gr{background-position:-48px -55px}.flag.flag-um{background-position:-256px -143px}.flag.flag-ps{background-position:-240px -110px}.flag.flag-fi{background-position:0 -44px}.flag.flag-kr{background-position:-80px -77px}.flag.flag-nl{background-position:-240px -99px}.flag.flag-bo{background-position:-160px -11px}.flag.flag-bf{background-position:-48px -11px}.flag.flag-ba{background-position:-256px 0}.flag.flag-ax{background-position:-224px 0}.flag.flag-pf{background-position:-112px -110px}.flag.flag-eg{background-position:-160px -33px}.flag.flag-sb{background-position:-144px -121px}.flag.flag-dk{background-position:-64px -33px}.flag.flag-ci{background-position:-112px -22px}.flag.flag-ic{background-position:-240px -55px}.flag.flag-cl{background-position:-144px -22px}.flag.flag-zw{background-position:-32px -165px}.flag.flag-my{background-position:-112px -99px}.flag.flag-li{background-position:-208px -77px}.flag.flag-mc{background-position:-80px -88px}.flag.flag-fo{background-position:-64px -44px}.flag.flag-vu{background-position:-144px -154px}.flag.flag-al{background-position:-80px 0}.flag.flag-ge{background-position:-144px -44px}.flag.flag-somaliland{background-position:-96px -132px}.flag.flag-am{background-position:-96px 0}.flag.flag-tf{background-position:-256px -132px}.flag.flag-ni{background-position:-224px -99px}.flag.flag-tn{background-position:-112px -143px}.flag.flag-lv{background-position:-32px -88px}.flag.flag-vi{background-position:-112px -154px}.flag.flag-ve{background-position:-80px -154px}.flag.flag-gm{background-position:-256px -44px}.flag.flag-fm{background-position:-48px -44px}.flag.flag-mg{background-position:-128px -88px}.flag.flag-mh{background-position:-144px -88px}.flag.flag-tc{background-position:-224px -132px}.flag.flag-id{background-position:-256px -55px}.flag.flag-tw{background-position:-192px -143px}.flag.flag-so{background-position:-80px -132px}.flag.flag-pg{background-position:-128px -110px}.flag.flag-hk{background-position:-144px -55px}.flag.flag-mt{background-position:-32px -99px}.flag.flag-do{background-position:-96px -33px}.flag.flag-gg{background-position:-192px -44px}.flag.flag-nr{background-position:-16px -110px}.flag.flag-mp{background-position:-240px -88px}.flag.flag-mw{background-position:-80px -99px}.flag.flag-bb{background-position:0 -11px}.flag.flag-hu{background-position:-224px -55px}.flag.flag-xk{background-position:-208px -154px}.flag.flag-za{background-position:-256px -154px}.flag.flag-zanzibar{background-position:0 -165px}.flag.flag-sy{background-position:-192px -132px}.flag.flag-bi{background-position:-96px -11px}.flag.flag-qa{background-position:-32px -121px}.flag.flag-kurdistan{background-position:-96px -77px}.flag.flag-scotland{background-position:-176px -121px}.flag.flag-gf{background-position:-160px -44px}.flag.flag-tk{background-position:-64px -143px}.flag.flag-me{background-position:-112px -88px}.flag.flag-om{background-position:-64px -110px}.flag.flag-tv{background-position:-176px -143px}.flag.flag-at{background-position:-176px 0}.flag.flag-by{background-position:-256px -11px}.flag.flag-wf{background-position:-176px -154px}.flag.flag-ph{background-position:-144px -110px}.flag.flag-ke{background-position:-240px -66px}.flag.flag-ng{background-position:-208px -99px}.flag.flag-eh{background-position:-176px -33px}.flag.flag-yt{background-position:-240px -154px}.flag.flag-cg{background-position:-80px -22px}.flag.flag-br{background-position:-176px -11px}.flag.flag-ma{background-position:-64px -88px}.flag.flag-bm{background-position:-128px -11px}.flag.flag-gi{background-position:-224px -44px}.flag.flag-mn{background-position:-208px -88px}.flag.flag-eu{background-position:-256px -33px}.flag.flag-us{background-position:0 -154px}.flag.flag-uy{background-position:-16px -154px}.flag.flag-hn{background-position:-176px -55px}.flag.flag-gp{background-position:-16px -55px}.flag.flag-km{background-position:-32px -77px}.flag.flag-au{background-position:-192px 0}.flag.flag-tz{background-position:-208px -143px}.flag.flag-pt{background-position:-256px -110px}.flag.flag-je{background-position:-176px -66px}.flag.flag-md{background-position:-96px -88px}.flag.flag-pl{background-position:-176px -110px}.flag.flag-cr{background-position:-208px -22px}.flag.flag-sk{background-position:-16px -132px}.flag.flag-kg{background-position:-256px -66px}.flag.flag-nu{background-position:-32px -110px}.flag.flag-lr{background-position:-240px -77px}.flag.flag-ht{background-position:-208px -55px}.flag.flag-rw{background-position:-112px -121px}.flag.flag-sg{background-position:-224px -121px}.flag.flag-ag{background-position:-48px 0}.flag.flag-mx{background-position:-96px -99px}.flag.flag-ch{background-position:-96px -22px}.flag.flag-sz{background-position:-208px -132px}.flag.flag-dj{background-position:-48px -33px}.flag.flag-kn{background-position:-48px -77px}.flag.flag-england{background-position:-192px -33px}.flag.flag-ro{background-position:-64px -121px}.flag.flag-ca{background-position:-16px -22px}.flag.flag-tr{background-position:-144px -143px}.flag.flag-pa{background-position:-80px -110px}.flag.flag-ye{background-position:-224px -154px}.flag.flag-si{background-position:-256px -121px}.flag.flag-tt{background-position:-160px -143px}.flag.flag-ml{background-position:-176px -88px}.flag.flag-sl{background-position:-32px -132px}.flag.flag-sa{background-position:-128px -121px}.flag.flag-py{background-position:-16px -121px}.flag.flag-ad{background-position:0 0}.flag.flag-gy{background-position:-128px -55px}.flag.flag-ls{background-position:-256px -77px}.flag.flag-sj{background-position:0 -132px}.flag.flag-fk{background-position:-32px -44px}.flag.flag-kw{background-position:-112px -77px}.flag.flag-sm{background-position:-48px -132px}.flag.flag-vn{background-position:-128px -154px}.flag.flag-iq{background-position:-96px -66px}.flag.flag-ie{background-position:0 -66px}.flag.flag-mz{background-position:-128px -99px}.flag.flag-vg{background-position:-96px -154px}.flag.flag-ms{background-position:-16px -99px}.flag.flag-cw{background-position:-256px -22px}.flag.flag-bt{background-position:-208px -11px}.flag.flag-gn{background-position:0 -55px}.flag.flag-uz{background-position:-32px -154px}.flag.flag-cv{background-position:-240px -22px}.flag.flag-pw{background-position:0 -121px}.flag.flag-bv{background-position:-224px -11px}.flag.flag-lb{background-position:-176px -77px}.flag.flag-sn{background-position:-64px -132px}.flag.flag-la{background-position:-160px -77px}.flag.flag-pe{background-position:-96px -110px}.flag.flag-sx{background-position:-176px -132px}.flag.flag-fr{background-position:-80px -44px}.flag.flag-catalonia{background-position:-32px -22px}.flag.flag-kh{background-position:0 -77px}.flag.flag-jp{background-position:-224px -66px}.flag.flag-vc{background-position:-64px -154px}.flag.flag-hm{background-position:-160px -55px}.flag.flag-tl{background-position:-80px -143px}.flag.flag-no{background-position:-256px -99px}.flag.flag-ee{background-position:-144px -33px}.flag.flag-cz{background-position:-16px -33px}.flag.flag-gw{background-position:-112px -55px}.flag.flag-ai{background-position:-64px 0}.flag.flag-ar{background-position:-144px 0}.flag.flag-co{background-position:-192px -22px}.flag.flag-na{background-position:-144px -99px}.flag.flag-er{background-position:-208px -33px}.flag.flag-pm{background-position:-192px -110px}.flag.flag-bg{background-position:-64px -11px}.flag.flag-sr{background-position:-112px -132px}.flag.flag-cm{background-position:-160px -22px}.flag.flag-il{background-position:-16px -66px}.flag.flag-tibet{background-position:-32px -143px}.flag.flag-lk{background-position:-224px -77px}.flag.flag-et{background-position:-240px -33px}.flag.flag-rs{background-position:-80px -121px}.flag.flag-th{background-position:-16px -143px}.flag.flag-tm{background-position:-96px -143px}.flag.flag-fj{background-position:-16px -44px}.flag.flag-ki{background-position:-16px -77px}.flag.flag-re{background-position:-48px -121px}.flag.flag-nf{background-position:-192px -99px}.flag.flag-kz{background-position:-144px -77px}.flag.flag-nc{background-position:-160px -99px}.flag.flag-bn{background-position:-144px -11px}.flag.flag-gb{background-position:-112px -44px}.flag.flag-mq{background-position:-256px -88px}.flag.flag-sc{background-position:-160px -121px}.flag.flag-gu{background-position:-96px -55px}.flag.flag-io{background-position:-80px -66px}.flag.flag-cd{background-position:-48px -22px}.flag.flag-tg{background-position:0 -143px}.flag.flag-sv{background-position:-160px -132px}.flag.flag-jo{background-position:-208px -66px}.flag.flag-ua{background-position:-224px -143px}.flag.flag-ga{background-position:-96px -44px}.flag.flag-cu{background-position:-224px -22px}.flag.flag-va{background-position:-48px -154px}.flag.flag-mu{background-position:-48px -99px}.flag.flag-hr{background-position:-192px -55px}.flag.flag-to{background-position:-128px -143px}.flag.flag-bh{background-position:-80px -11px}.flag.flag-ec{background-position:-128px -33px}.flag.flag-ug{background-position:-240px -143px}.flag.flag-de{background-position:-32px -33px}.flag.flag-gq{background-position:-32px -55px}.flag.flag-bd{background-position:-16px -11px}.flag.flag-bs{background-position:-192px -11px}.flag.flag-ck{background-position:-128px -22px}.flag.flag-gd{background-position:-128px -44px}.flag.flag-sh{background-position:-240px -121px}.flag.flag-be{background-position:-32px -11px}.flag.flag-mr{background-position:0 -99px}.flag.flag-tj{background-position:-48px -143px}.flag.flag-gl{background-position:-240px -44px}.flag.flag-as{background-position:-160px 0}.flag.flag-es{background-position:-224px -33px}.flag.flag-zm{background-position:-16px -165px}.flag.flag-wales{background-position:-160px -154px}.flag.flag-np{background-position:0 -110px}.flag.flag-lu{background-position:-16px -88px}.flag.flag-st{background-position:-144px -132px}.flag.flag-ao{background-position:-128px 0}.flag.flag-cf{background-position:-64px -22px}.flag.flag-az{background-position:-240px 0}.flag.flag-bw{background-position:-240px -11px}.flag.flag-nz{background-position:-48px -110px}.flag.flag-cy{background-position:0 -33px}.flag.flag-ne{background-position:-176px -99px}.flag.flag-kp{background-position:-64px -77px}.flag.flag-gs{background-position:-64px -55px}.flag.flag-mk{background-position:-160px -88px}.flag.flag-mo{background-position:-224px -88px}.flag.flag-jm{background-position:-192px -66px}.flag.flag-ws{background-position:-192px -154px}.flag.flag-lc{background-position:-192px -77px}.flag.flag-an{background-position:-112px 0}.flag.flag-gh{background-position:-208px -44px}.flag.flag-im{background-position:-48px -66px}.flag.flag-is{background-position:-128px -66px}.flag.flag-ae{background-position:-16px 0}.flag.flag-it{background-position:-144px -66px}.flag.flag-ss{background-position:-128px -132px}.flag.flag-ly{background-position:-48px -88px}.flag.flag-mv{background-position:-64px -99px}.flag.flag-ir{background-position:-112px -66px}.flag.flag-gt{background-position:-80px -55px}.flag.flag-bz{background-position:0 -22px}.flag.flag-dz{background-position:-112px -33px}.flag.flag-lt{background-position:0 -88px}.flag.flag-sd{background-position:-192px -121px}.flag.flag-pk{background-position:-160px -110px}.flag.flag-ru{background-position:-96px -121px}.flag.flag-pn{background-position:-208px -110px}.flag.flag-cn{background-position:-176px -22px}.flag.flag-aw{background-position:-208px 0} \"],\r\n                    host: {\r\n                        '(document:click)': 'hideDropdown($event)',\r\n                    },\r\n                    providers: [COUNTER_CONTROL_ACCESSOR, CountryService, LocaleService]\r\n                },] },\r\n    ];\r\n    /**\r\n     * @nocollapse\r\n     */\r\n    IntPhonePrefixComponent.ctorParameters = function () { return [\r\n        { type: CountryService, },\r\n        { type: LocaleService, },\r\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\r\n    ]; };\r\n    IntPhonePrefixComponent.propDecorators = {\r\n        'locale': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n        'defaultCountry': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n        'maxLength': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n        'onlyNumbers': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n        'handleKeyboardEvent': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['document:keypress', ['$event'],] },],\r\n    };\r\n    return IntPhonePrefixComponent;\r\n}());\n\nvar OnlyNumberDirective = /** @class */ (function () {\r\n    /**\r\n     * @param {?} el\r\n     */\r\n    function OnlyNumberDirective(el) {\r\n        this.el = el;\r\n        this.regexStr = '^[0-9]*$';\r\n    }\r\n    /**\r\n     * @param {?} event\r\n     * @return {?}\r\n     */\r\n    OnlyNumberDirective.prototype.onKeyDown = function (event) {\r\n        var /** @type {?} */ e = (event);\r\n        if (this.onlyNumber) {\r\n            if ([46, 8, 9, 27, 13, 110, 190, 171].indexOf(e.keyCode) !== -1 ||\r\n                // Allow: Ctrl+A\r\n                (e.keyCode === 65 && e.ctrlKey === true) ||\r\n                // Allow: Ctrl+C\r\n                (e.keyCode === 67 && e.ctrlKey === true) ||\r\n                // Allow: Ctrl+V\r\n                (e.keyCode === 86 && e.ctrlKey === true) ||\r\n                // Allow: Ctrl+X\r\n                (e.keyCode === 88 && e.ctrlKey === true) ||\r\n                // Allow: home, end, left, right\r\n                (e.keyCode >= 35 && e.keyCode <= 39) ||\r\n                // Allow plus button\r\n                (e.keyCode === 107) || (e.keyCode === 187)) {\r\n                // let it happen, don't do anything\r\n                return;\r\n            }\r\n            var /** @type {?} */ ch = String.fromCharCode(e.keyCode);\r\n            var /** @type {?} */ regEx = new RegExp(this.regexStr);\r\n            if (regEx.test(ch)) {\r\n                return;\r\n            }\r\n            else if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {\r\n                e.preventDefault();\r\n            }\r\n        }\r\n        else {\r\n            return;\r\n        }\r\n    };\r\n    OnlyNumberDirective.decorators = [\r\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Directive\"], args: [{\r\n                    selector: '[onlyNumber]'\r\n                },] },\r\n    ];\r\n    /**\r\n     * @nocollapse\r\n     */\r\n    OnlyNumberDirective.ctorParameters = function () { return [\r\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"ElementRef\"], },\r\n    ]; };\r\n    OnlyNumberDirective.propDecorators = {\r\n        'onlyNumber': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Input\"] },],\r\n        'onKeyDown': [{ type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"HostListener\"], args: ['keydown', ['$event'],] },],\r\n    };\r\n    return OnlyNumberDirective;\r\n}());\n\nvar CountryPipe = /** @class */ (function () {\r\n    function CountryPipe() {\r\n    }\r\n    /**\r\n     * @param {?} value\r\n     * @param {?=} args\r\n     * @return {?}\r\n     */\r\n    CountryPipe.prototype.transform = function (value, args) {\r\n        var /** @type {?} */ searchText = new RegExp(args, 'ig');\r\n        if (value) {\r\n            return value.filter(function (country) { return country.name.search(searchText) !== -1; });\r\n        }\r\n    };\r\n    CountryPipe.decorators = [\r\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"Pipe\"], args: [{\r\n                    name: 'country'\r\n                },] },\r\n    ];\r\n    /**\r\n     * @nocollapse\r\n     */\r\n    CountryPipe.ctorParameters = function () { return []; };\r\n    return CountryPipe;\r\n}());\n\nvar InternationalPhoneModule = /** @class */ (function () {\r\n    function InternationalPhoneModule() {\r\n    }\r\n    InternationalPhoneModule.decorators = [\r\n        { type: __WEBPACK_IMPORTED_MODULE_0__angular_core__[\"NgModule\"], args: [{\r\n                    imports: [\r\n                        __WEBPACK_IMPORTED_MODULE_1__angular_common__[\"CommonModule\"],\r\n                        __WEBPACK_IMPORTED_MODULE_2__angular_forms__[\"FormsModule\"],\r\n                        __WEBPACK_IMPORTED_MODULE_2__angular_forms__[\"ReactiveFormsModule\"]\r\n                    ],\r\n                    declarations: [\r\n                        IntPhonePrefixComponent,\r\n                        OnlyNumberDirective,\r\n                        CountryPipe\r\n                    ],\r\n                    exports: [\r\n                        IntPhonePrefixComponent\r\n                    ],\r\n                    providers: [CountryService, LocaleService]\r\n                },] },\r\n    ];\r\n    /**\r\n     * @nocollapse\r\n     */\r\n    InternationalPhoneModule.ctorParameters = function () { return []; };\r\n    return InternationalPhoneModule;\r\n}());\n\nvar CountryLocale = /** @class */ (function () {\r\n    function CountryLocale() {\r\n    }\r\n    return CountryLocale;\r\n}());\n\n// MODULE\n\n/**\r\n * Generated bundle index. Do not edit.\r\n */\n\n\n\n\n/***/ }),\n/* 722 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar domhandler_1 = __webpack_require__(9);\nexports.DomHandler = domhandler_1.DomHandler;\nvar treedragdropservice_1 = __webpack_require__(230);\nexports.TreeDragDropService = treedragdropservice_1.TreeDragDropService;\nvar confirmationservice_1 = __webpack_require__(231);\nexports.ConfirmationService = confirmationservice_1.ConfirmationService;\n//# sourceMappingURL=api.js.map\n\n/***/ }),\n/* 723 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar idx = 0;\nvar AccordionTab = /** @class */ (function () {\n    function AccordionTab(accordion) {\n        this.accordion = accordion;\n        this.selectedChange = new core_1.EventEmitter();\n        this.id = \"ui-accordiontab-\" + idx++;\n    }\n    AccordionTab.prototype.toggle = function (event) {\n        if (this.disabled || this.animating) {\n            return false;\n        }\n        this.animating = true;\n        var index = this.findTabIndex();\n        if (this.selected) {\n            this.selected = false;\n            this.accordion.onClose.emit({ originalEvent: event, index: index });\n        }\n        else {\n            if (!this.accordion.multiple) {\n                for (var i = 0; i < this.accordion.tabs.length; i++) {\n                    this.accordion.tabs[i].selected = false;\n                    this.accordion.tabs[i].selectedChange.emit(false);\n                }\n            }\n            this.selected = true;\n            this.accordion.onOpen.emit({ originalEvent: event, index: index });\n        }\n        this.selectedChange.emit(this.selected);\n        event.preventDefault();\n    };\n    AccordionTab.prototype.findTabIndex = function () {\n        var index = -1;\n        for (var i = 0; i < this.accordion.tabs.length; i++) {\n            if (this.accordion.tabs[i] == this) {\n                index = i;\n                break;\n            }\n        }\n        return index;\n    };\n    Object.defineProperty(AccordionTab.prototype, \"lazy\", {\n        get: function () {\n            return this.accordion.lazy;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AccordionTab.prototype, \"hasHeaderFacet\", {\n        get: function () {\n            return this.headerFacet && this.headerFacet.length > 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    AccordionTab.prototype.onToggleDone = function (event) {\n        this.animating = false;\n    };\n    AccordionTab.prototype.ngOnDestroy = function () {\n        this.accordion.tabs.splice(this.findTabIndex(), 1);\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AccordionTab.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AccordionTab.prototype, \"selected\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AccordionTab.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AccordionTab.prototype, \"selectedChange\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.Header),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], AccordionTab.prototype, \"headerFacet\", void 0);\n    AccordionTab = __decorate([\n        core_1.Component({\n            selector: 'p-accordionTab',\n            template: \"\\n        <div class=\\\"ui-accordion-header ui-state-default ui-corner-all\\\" [ngClass]=\\\"{'ui-state-active': selected,'ui-state-disabled':disabled}\\\">\\n            <a href=\\\"#\\\" [attr.id]=\\\"id\\\" [attr.aria-controls]=\\\"id + '-content'\\\" role=\\\"tab\\\" [attr.aria-expanded]=\\\"selected\\\" (click)=\\\"toggle($event)\\\" (keydown.space)=\\\"toggle($event)\\\">\\n                <span class=\\\"ui-accordion-toggle-icon\\\" [ngClass]=\\\"selected ? accordion.collapseIcon : accordion.expandIcon\\\"></span>\\n                <span class=\\\"ui-accordion-header-text\\\" *ngIf=\\\"!hasHeaderFacet\\\">\\n                    {{header}}\\n                </span>\\n                <ng-content select=\\\"p-header\\\" *ngIf=\\\"hasHeaderFacet\\\"></ng-content>\\n            </a>\\n        </div>\\n        <div [attr.id]=\\\"id + '-content'\\\" class=\\\"ui-accordion-content-wrapper\\\" [@tabContent]=\\\"selected ? 'visible' : 'hidden'\\\" (@tabContent.done)=\\\"onToggleDone($event)\\\"\\n            [ngClass]=\\\"{'ui-accordion-content-wrapper-overflown': !selected||animating}\\\" \\n            role=\\\"region\\\" [attr.aria-hidden]=\\\"!selected\\\" [attr.aria-labelledby]=\\\"id\\\">\\n            <div class=\\\"ui-accordion-content ui-widget-content\\\" *ngIf=\\\"lazy ? selected : true\\\">\\n                <ng-content></ng-content>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('tabContent', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0'\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*'\n                    })),\n                    animations_1.transition('visible <=> hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return Accordion; }))),\n        __metadata(\"design:paramtypes\", [Accordion])\n    ], AccordionTab);\n    return AccordionTab;\n}());\nexports.AccordionTab = AccordionTab;\nvar Accordion = /** @class */ (function () {\n    function Accordion(el, changeDetector) {\n        this.el = el;\n        this.changeDetector = changeDetector;\n        this.onClose = new core_1.EventEmitter();\n        this.onOpen = new core_1.EventEmitter();\n        this.expandIcon = 'fa fa-fw fa-caret-right';\n        this.collapseIcon = 'fa fa-fw fa-caret-down';\n        this.tabs = [];\n    }\n    Accordion.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.initTabs();\n        this.tabListSubscription = this.tabList.changes.subscribe(function (_) {\n            _this.initTabs();\n            _this.changeDetector.markForCheck();\n        });\n    };\n    Accordion.prototype.initTabs = function () {\n        this.tabs = this.tabList.toArray();\n        this.updateSelectionState();\n    };\n    Accordion.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Object.defineProperty(Accordion.prototype, \"activeIndex\", {\n        get: function () {\n            return this._activeIndex;\n        },\n        set: function (val) {\n            this._activeIndex = val;\n            this.updateSelectionState();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Accordion.prototype.updateSelectionState = function () {\n        if (this.tabs && this.tabs.length && this._activeIndex != null) {\n            for (var i = 0; i < this.tabs.length; i++) {\n                var selected = this.multiple ? this._activeIndex.includes(i) : (i === this._activeIndex);\n                var changed = selected !== this.tabs[i].selected;\n                if (changed) {\n                    this.tabs[i].animating = true;\n                }\n                this.tabs[i].selected = selected;\n                this.tabs[i].selectedChange.emit(selected);\n            }\n        }\n    };\n    Accordion.prototype.ngOnDestroy = function () {\n        if (this.tabListSubscription) {\n            this.tabListSubscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Accordion.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Accordion.prototype, \"onClose\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Accordion.prototype, \"onOpen\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Accordion.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Accordion.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Accordion.prototype, \"expandIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Accordion.prototype, \"collapseIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Accordion.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.ContentChildren(AccordionTab),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Accordion.prototype, \"tabList\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], Accordion.prototype, \"activeIndex\", null);\n    Accordion = __decorate([\n        core_1.Component({\n            selector: 'p-accordion',\n            template: \"\\n        <div [ngClass]=\\\"'ui-accordion ui-widget ui-helper-reset'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" role=\\\"presentation\\\">\\n            <ng-content></ng-content>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.ChangeDetectorRef])\n    ], Accordion);\n    return Accordion;\n}());\nexports.Accordion = Accordion;\nvar AccordionModule = /** @class */ (function () {\n    function AccordionModule() {\n    }\n    AccordionModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Accordion, AccordionTab, shared_1.SharedModule],\n            declarations: [Accordion, AccordionTab]\n        })\n    ], AccordionModule);\n    return AccordionModule;\n}());\nexports.AccordionModule = AccordionModule;\n//# sourceMappingURL=accordion.js.map\n\n/***/ }),\n/* 724 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar inputtext_1 = __webpack_require__(65);\nvar button_1 = __webpack_require__(37);\nvar shared_1 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar objectutils_1 = __webpack_require__(40);\nvar forms_1 = __webpack_require__(17);\nexports.AUTOCOMPLETE_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return AutoComplete; }),\n    multi: true\n};\nvar AutoComplete = /** @class */ (function () {\n    function AutoComplete(el, domHandler, renderer, objectUtils, cd, differs) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.objectUtils = objectUtils;\n        this.cd = cd;\n        this.differs = differs;\n        this.minLength = 1;\n        this.delay = 300;\n        this.type = 'text';\n        this.completeMethod = new core_1.EventEmitter();\n        this.onSelect = new core_1.EventEmitter();\n        this.onUnselect = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onDropdownClick = new core_1.EventEmitter();\n        this.onClear = new core_1.EventEmitter();\n        this.onKeyUp = new core_1.EventEmitter();\n        this.scrollHeight = '200px';\n        this.dropdownMode = 'blank';\n        this.immutable = true;\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.panelVisible = false;\n        this.focus = false;\n        this.inputFieldValue = null;\n        this.differ = differs.find([]).create(null);\n    }\n    Object.defineProperty(AutoComplete.prototype, \"suggestions\", {\n        get: function () {\n            return this._suggestions;\n        },\n        set: function (val) {\n            this._suggestions = val;\n            if (this.immutable) {\n                this.handleSuggestionsChange();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    AutoComplete.prototype.ngDoCheck = function () {\n        if (!this.immutable) {\n            var changes = this.differ.diff(this.suggestions);\n            if (changes) {\n                this.handleSuggestionsChange();\n            }\n        }\n    };\n    AutoComplete.prototype.handleSuggestionsChange = function () {\n        if (this._suggestions != null) {\n            if (this.panelEL && this.panelEL.nativeElement && this.loading) {\n                this.highlightOption = null;\n                if (this._suggestions && this._suggestions.length) {\n                    this.noResults = false;\n                    this.show();\n                    this.suggestionsUpdated = true;\n                    if (this.autoHighlight) {\n                        this.highlightOption = this._suggestions[0];\n                    }\n                }\n                else {\n                    this.noResults = true;\n                    if (this.emptyMessage) {\n                        this.show();\n                        this.suggestionsUpdated = true;\n                    }\n                    else {\n                        this.hide();\n                    }\n                }\n            }\n            this.loading = false;\n        }\n    };\n    AutoComplete.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                case 'selectedItem':\n                    _this.selectedItemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    AutoComplete.prototype.ngAfterViewInit = function () {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panelEL.nativeElement);\n            else\n                this.domHandler.appendChild(this.panelEL.nativeElement, this.appendTo);\n        }\n    };\n    AutoComplete.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        //Use timeouts as since Angular 4.2, AfterViewChecked is broken and not called after panel is updated\n        if (this.suggestionsUpdated && this.panelEL.nativeElement && this.panelEL.nativeElement.offsetParent) {\n            setTimeout(function () { return _this.align(); }, 1);\n            this.suggestionsUpdated = false;\n        }\n        if (this.highlightOptionChanged) {\n            setTimeout(function () {\n                var listItem = _this.domHandler.findSingle(_this.panelEL.nativeElement, 'li.ui-state-highlight');\n                if (listItem) {\n                    _this.domHandler.scrollInView(_this.panelEL.nativeElement, listItem);\n                }\n            }, 1);\n            this.highlightOptionChanged = false;\n        }\n    };\n    AutoComplete.prototype.writeValue = function (value) {\n        this.value = value;\n        this.filled = this.value && this.value != '';\n        this.updateInputField();\n    };\n    AutoComplete.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    AutoComplete.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    AutoComplete.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    AutoComplete.prototype.onInput = function (event) {\n        var _this = this;\n        if (!this.inputKeyDown) {\n            return;\n        }\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n        }\n        var value = event.target.value;\n        if (!this.multiple && !this.forceSelection) {\n            this.onModelChange(value);\n        }\n        if (value.length === 0) {\n            this.hide();\n            this.onClear.emit(event);\n        }\n        if (value.length >= this.minLength) {\n            this.timeout = setTimeout(function () {\n                _this.search(event, value);\n            }, this.delay);\n        }\n        else {\n            this.suggestions = null;\n            this.hide();\n        }\n        this.updateFilledState();\n        this.inputKeyDown = false;\n    };\n    AutoComplete.prototype.onInputClick = function (event) {\n        if (this.documentClickListener) {\n            this.inputClick = true;\n        }\n    };\n    AutoComplete.prototype.search = function (event, query) {\n        //allow empty string but not undefined or null\n        if (query === undefined || query === null) {\n            return;\n        }\n        this.loading = true;\n        this.completeMethod.emit({\n            originalEvent: event,\n            query: query\n        });\n    };\n    AutoComplete.prototype.selectItem = function (option, focus) {\n        if (focus === void 0) { focus = true; }\n        if (this.multiple) {\n            this.multiInputEL.nativeElement.value = '';\n            this.value = this.value || [];\n            if (!this.isSelected(option)) {\n                this.value = this.value.concat([option]);\n                this.onModelChange(this.value);\n            }\n        }\n        else {\n            this.inputEL.nativeElement.value = this.field ? this.objectUtils.resolveFieldData(option, this.field) || '' : option;\n            this.value = option;\n            this.onModelChange(this.value);\n        }\n        this.onSelect.emit(option);\n        this.updateFilledState();\n        this._suggestions = null;\n        if (focus) {\n            this.focusInput();\n        }\n    };\n    AutoComplete.prototype.show = function () {\n        if (this.multiInputEL || this.inputEL) {\n            var hasFocus = this.multiple ? document.activeElement == this.multiInputEL.nativeElement : document.activeElement == this.inputEL.nativeElement;\n            if (!this.panelVisible && hasFocus) {\n                this.panelVisible = true;\n                if (this.appendTo) {\n                    this.panelEL.nativeElement.style.minWidth = this.domHandler.getWidth(this.el.nativeElement.children[0]) + 'px';\n                }\n                this.panelEL.nativeElement.style.zIndex = ++domhandler_1.DomHandler.zindex;\n                this.domHandler.fadeIn(this.panelEL.nativeElement, 200);\n                this.bindDocumentClickListener();\n            }\n        }\n    };\n    AutoComplete.prototype.align = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.panelEL.nativeElement, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));\n        else\n            this.domHandler.relativePosition(this.panelEL.nativeElement, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));\n    };\n    AutoComplete.prototype.hide = function () {\n        this.panelVisible = false;\n        this.unbindDocumentClickListener();\n    };\n    AutoComplete.prototype.handleDropdownClick = function (event) {\n        this.focusInput();\n        var queryValue = this.multiple ? this.multiInputEL.nativeElement.value : this.inputEL.nativeElement.value;\n        if (this.dropdownMode === 'blank')\n            this.search(event, '');\n        else if (this.dropdownMode === 'current')\n            this.search(event, queryValue);\n        this.onDropdownClick.emit({\n            originalEvent: event,\n            query: queryValue\n        });\n    };\n    AutoComplete.prototype.focusInput = function () {\n        if (this.multiple)\n            this.multiInputEL.nativeElement.focus();\n        else\n            this.inputEL.nativeElement.focus();\n    };\n    AutoComplete.prototype.removeItem = function (item) {\n        var itemIndex = this.domHandler.index(item);\n        var removedValue = this.value[itemIndex];\n        this.value = this.value.filter(function (val, i) { return i != itemIndex; });\n        this.onModelChange(this.value);\n        this.updateFilledState();\n        this.onUnselect.emit(removedValue);\n    };\n    AutoComplete.prototype.onKeydown = function (event) {\n        if (this.panelVisible) {\n            var highlightItemIndex = this.findOptionIndex(this.highlightOption);\n            switch (event.which) {\n                //down\n                case 40:\n                    if (highlightItemIndex != -1) {\n                        var nextItemIndex = highlightItemIndex + 1;\n                        if (nextItemIndex != (this.suggestions.length)) {\n                            this.highlightOption = this.suggestions[nextItemIndex];\n                            this.highlightOptionChanged = true;\n                        }\n                    }\n                    else {\n                        this.highlightOption = this.suggestions[0];\n                    }\n                    event.preventDefault();\n                    break;\n                //up\n                case 38:\n                    if (highlightItemIndex > 0) {\n                        var prevItemIndex = highlightItemIndex - 1;\n                        this.highlightOption = this.suggestions[prevItemIndex];\n                        this.highlightOptionChanged = true;\n                    }\n                    event.preventDefault();\n                    break;\n                //enter\n                case 13:\n                    if (this.highlightOption) {\n                        this.selectItem(this.highlightOption);\n                        this.hide();\n                    }\n                    event.preventDefault();\n                    break;\n                //escape\n                case 27:\n                    this.hide();\n                    event.preventDefault();\n                    break;\n                //tab\n                case 9:\n                    if (this.highlightOption) {\n                        this.selectItem(this.highlightOption);\n                    }\n                    this.hide();\n                    break;\n            }\n        }\n        else {\n            if (event.which === 40 && this.suggestions) {\n                this.search(event, event.target.value);\n            }\n        }\n        if (this.multiple) {\n            switch (event.which) {\n                //backspace\n                case 8:\n                    if (this.value && this.value.length && !this.multiInputEL.nativeElement.value) {\n                        this.value = this.value.slice();\n                        var removedValue = this.value.pop();\n                        this.onModelChange(this.value);\n                        this.updateFilledState();\n                        this.onUnselect.emit(removedValue);\n                    }\n                    break;\n            }\n        }\n        this.inputKeyDown = true;\n    };\n    AutoComplete.prototype.onKeyup = function (event) {\n        this.onKeyUp.emit(event);\n    };\n    AutoComplete.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        this.onFocus.emit(event);\n    };\n    AutoComplete.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    };\n    AutoComplete.prototype.onInputChange = function (event) {\n        if (this.forceSelection && this.suggestions) {\n            var valid = false;\n            var inputValue = event.target.value.trim();\n            if (this.suggestions) {\n                for (var _i = 0, _a = this.suggestions; _i < _a.length; _i++) {\n                    var suggestion = _a[_i];\n                    var itemValue = this.field ? this.objectUtils.resolveFieldData(suggestion, this.field) : suggestion;\n                    if (itemValue && inputValue === itemValue.trim()) {\n                        valid = true;\n                        this.selectItem(suggestion, false);\n                        break;\n                    }\n                }\n            }\n            if (!valid) {\n                if (this.multiple) {\n                    this.multiInputEL.nativeElement.value = '';\n                }\n                else {\n                    this.value = null;\n                    this.inputEL.nativeElement.value = '';\n                }\n                this.onClear.emit(event);\n                this.onModelChange(this.value);\n            }\n        }\n    };\n    AutoComplete.prototype.isSelected = function (val) {\n        var selected = false;\n        if (this.value && this.value.length) {\n            for (var i = 0; i < this.value.length; i++) {\n                if (this.objectUtils.equals(this.value[i], val, this.dataKey)) {\n                    selected = true;\n                    break;\n                }\n            }\n        }\n        return selected;\n    };\n    AutoComplete.prototype.findOptionIndex = function (option) {\n        var index = -1;\n        if (this.suggestions) {\n            for (var i = 0; i < this.suggestions.length; i++) {\n                if (this.objectUtils.equals(option, this.suggestions[i])) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    AutoComplete.prototype.updateFilledState = function () {\n        if (this.multiple)\n            this.filled = (this.value && this.value.length) || (this.multiInputEL && this.multiInputEL.nativeElement && this.multiInputEL.nativeElement.value != '');\n        else\n            this.filled = (this.inputFieldValue && this.inputFieldValue != '') || (this.inputEL && this.inputEL.nativeElement && this.inputEL.nativeElement.value != '');\n        ;\n    };\n    AutoComplete.prototype.updateInputField = function () {\n        var formattedValue = this.value ? (this.field ? this.objectUtils.resolveFieldData(this.value, this.field) || '' : this.value) : '';\n        this.inputFieldValue = formattedValue;\n        if (this.inputEL && this.inputEL.nativeElement) {\n            this.inputEL.nativeElement.value = formattedValue;\n        }\n        this.updateFilledState();\n    };\n    AutoComplete.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n                if (event.which === 3) {\n                    return;\n                }\n                if (!_this.inputClick && !_this.isDropdownClick(event)) {\n                    _this.hide();\n                }\n                _this.inputClick = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    AutoComplete.prototype.isDropdownClick = function (event) {\n        if (this.dropdown) {\n            var target = event.target;\n            return (target === this.dropdownButton.nativeElement || target.parentNode === this.dropdownButton.nativeElement);\n        }\n        else {\n            return false;\n        }\n    };\n    AutoComplete.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    AutoComplete.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panelEL.nativeElement);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"minLength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"delay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], AutoComplete.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], AutoComplete.prototype, \"inputStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"inputStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"maxlength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"size\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], AutoComplete.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"autoHighlight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"forceSelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"completeMethod\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onUnselect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onDropdownClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onClear\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onKeyUp\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"field\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"dropdown\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"dropdownMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.ViewChild('in'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"inputEL\", void 0);\n    __decorate([\n        core_1.ViewChild('multiIn'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"multiInputEL\", void 0);\n    __decorate([\n        core_1.ViewChild('panel'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"panelEL\", void 0);\n    __decorate([\n        core_1.ViewChild('multiContainer'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"multiContainerEL\", void 0);\n    __decorate([\n        core_1.ViewChild('ddBtn'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"dropdownButton\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], AutoComplete.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], AutoComplete.prototype, \"suggestions\", null);\n    AutoComplete = __decorate([\n        core_1.Component({\n            selector: 'p-autoComplete',\n            template: \"\\n        <span [ngClass]=\\\"{'ui-autocomplete ui-widget':true,'ui-autocomplete-dd':dropdown,'ui-autocomplete-multiple':multiple}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <input *ngIf=\\\"!multiple\\\" #in [attr.type]=\\\"type\\\" [attr.id]=\\\"inputId\\\" [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\" autocomplete=\\\"off\\\" [attr.required]=\\\"required\\\"\\n            [ngClass]=\\\"'ui-inputtext ui-widget ui-state-default ui-corner-all ui-autocomplete-input'\\\" [value]=\\\"inputFieldValue\\\"\\n            (click)=\\\"onInputClick($event)\\\" (input)=\\\"onInput($event)\\\" (keydown)=\\\"onKeydown($event)\\\" (keyup)=\\\"onKeyup($event)\\\" (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" (change)=\\\"onInputChange($event)\\\"\\n            [attr.placeholder]=\\\"placeholder\\\" [attr.size]=\\\"size\\\" [attr.maxlength]=\\\"maxlength\\\" [attr.tabindex]=\\\"tabindex\\\" [readonly]=\\\"readonly\\\" [disabled]=\\\"disabled\\\"\\n            ><ul *ngIf=\\\"multiple\\\" #multiContainer class=\\\"ui-autocomplete-multiple-container ui-widget ui-inputtext ui-state-default ui-corner-all\\\" [ngClass]=\\\"{'ui-state-disabled':disabled,'ui-state-focus':focus}\\\" (click)=\\\"multiIn.focus()\\\">\\n                <li #token *ngFor=\\\"let val of value\\\" class=\\\"ui-autocomplete-token ui-state-highlight ui-corner-all\\\">\\n                    <span class=\\\"ui-autocomplete-token-icon fa fa-fw fa-close\\\" (click)=\\\"removeItem(token)\\\" *ngIf=\\\"!disabled\\\"></span>\\n                    <span *ngIf=\\\"!selectedItemTemplate\\\" class=\\\"ui-autocomplete-token-label\\\">{{field ? objectUtils.resolveFieldData(val, field): val}}</span>\\n                    <ng-container *ngTemplateOutlet=\\\"selectedItemTemplate; context: {$implicit: val}\\\"></ng-container>\\n                </li>\\n                <li class=\\\"ui-autocomplete-input-token\\\">\\n                    <input #multiIn [attr.type]=\\\"type\\\" [attr.id]=\\\"inputId\\\" [disabled]=\\\"disabled\\\" [attr.placeholder]=\\\"(value&&value.length ? null : placeholder)\\\" [attr.tabindex]=\\\"tabindex\\\" (input)=\\\"onInput($event)\\\"  (click)=\\\"onInputClick($event)\\\"\\n                            (keydown)=\\\"onKeydown($event)\\\" [readonly]=\\\"readonly\\\" (keyup)=\\\"onKeyup($event)\\\" (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" (change)=\\\"onInputChange($event)\\\" autocomplete=\\\"off\\\" [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\">\\n                </li>\\n            </ul\\n            ><i *ngIf=\\\"loading\\\" class=\\\"ui-autocomplete-loader fa fa-circle-o-notch fa-spin fa-fw\\\"></i><button #ddBtn type=\\\"button\\\" pButton icon=\\\"fa-fw fa-caret-down\\\" class=\\\"ui-autocomplete-dropdown\\\" [disabled]=\\\"disabled\\\"\\n                (click)=\\\"handleDropdownClick($event)\\\" *ngIf=\\\"dropdown\\\"></button>\\n            <div #panel class=\\\"ui-autocomplete-panel ui-widget-content ui-corner-all ui-shadow\\\" [style.display]=\\\"panelVisible ? 'block' : 'none'\\\" [style.width]=\\\"appendTo ? 'auto' : '100%'\\\" [style.max-height]=\\\"scrollHeight\\\">\\n                <ul class=\\\"ui-autocomplete-items ui-autocomplete-list ui-widget-content ui-widget ui-corner-all ui-helper-reset\\\" *ngIf=\\\"panelVisible\\\">\\n                    <li *ngFor=\\\"let option of suggestions; let idx = index\\\" [ngClass]=\\\"{'ui-autocomplete-list-item ui-corner-all':true,'ui-state-highlight':(highlightOption==option)}\\\"\\n                        (mouseenter)=\\\"highlightOption=option\\\" (mouseleave)=\\\"highlightOption=null\\\" (click)=\\\"selectItem(option)\\\">\\n                        <span *ngIf=\\\"!itemTemplate\\\">{{field ? objectUtils.resolveFieldData(option, field) : option}}</span>\\n                        <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option, index: idx}\\\"></ng-container>\\n                    </li>\\n                    <li *ngIf=\\\"noResults && emptyMessage\\\" class=\\\"ui-autocomplete-list-item ui-corner-all\\\">{{emptyMessage}}</li>\\n                </ul>\\n            </div>\\n        </span>\\n    \",\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils, exports.AUTOCOMPLETE_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, objectutils_1.ObjectUtils, core_1.ChangeDetectorRef, core_1.IterableDiffers])\n    ], AutoComplete);\n    return AutoComplete;\n}());\nexports.AutoComplete = AutoComplete;\nvar AutoCompleteModule = /** @class */ (function () {\n    function AutoCompleteModule() {\n    }\n    AutoCompleteModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, inputtext_1.InputTextModule, button_1.ButtonModule, shared_1.SharedModule],\n            exports: [AutoComplete, shared_1.SharedModule],\n            declarations: [AutoComplete]\n        })\n    ], AutoCompleteModule);\n    return AutoCompleteModule;\n}());\nexports.AutoCompleteModule = AutoCompleteModule;\n//# sourceMappingURL=autocomplete.js.map\n\n/***/ }),\n/* 725 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar BlockUI = /** @class */ (function () {\n    function BlockUI(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    Object.defineProperty(BlockUI.prototype, \"blocked\", {\n        get: function () {\n            return this._blocked;\n        },\n        set: function (val) {\n            this._blocked = val;\n            if (this.mask.nativeElement) {\n                if (this._blocked)\n                    this.block();\n                else\n                    this.unblock();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    BlockUI.prototype.ngAfterViewInit = function () {\n        if (this.target && !this.target.getBlockableElement) {\n            throw 'Target of BlockUI must implement BlockableUI interface';\n        }\n    };\n    BlockUI.prototype.block = function () {\n        if (this.target) {\n            this.target.getBlockableElement().appendChild(this.mask.nativeElement);\n            var style = this.target.style || {};\n            style.position = 'relative';\n            this.target.style = style;\n        }\n        else {\n            document.body.appendChild(this.mask.nativeElement);\n        }\n        if (this.autoZIndex) {\n            this.mask.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    BlockUI.prototype.unblock = function () {\n        this.el.nativeElement.appendChild(this.mask.nativeElement);\n    };\n    BlockUI.prototype.ngOnDestroy = function () {\n        this.unblock();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], BlockUI.prototype, \"target\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], BlockUI.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], BlockUI.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.ViewChild('mask'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], BlockUI.prototype, \"mask\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], BlockUI.prototype, \"blocked\", null);\n    BlockUI = __decorate([\n        core_1.Component({\n            selector: 'p-blockUI',\n            template: \"\\n        <div #mask class=\\\"ui-blockui ui-widget-overlay\\\" [ngClass]=\\\"{'ui-blockui-document':!target}\\\" [ngStyle]=\\\"{display: blocked ? 'block' : 'none'}\\\">\\n            <ng-content></ng-content>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], BlockUI);\n    return BlockUI;\n}());\nexports.BlockUI = BlockUI;\nvar BlockUIModule = /** @class */ (function () {\n    function BlockUIModule() {\n    }\n    BlockUIModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [BlockUI],\n            declarations: [BlockUI]\n        })\n    ], BlockUIModule);\n    return BlockUIModule;\n}());\nexports.BlockUIModule = BlockUIModule;\n//# sourceMappingURL=blockui.js.map\n\n/***/ }),\n/* 726 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar router_1 = __webpack_require__(5);\nvar Breadcrumb = /** @class */ (function () {\n    function Breadcrumb() {\n    }\n    Breadcrumb.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    };\n    Breadcrumb.prototype.onHomeClick = function (event) {\n        if (this.home) {\n            this.itemClick(event, this.home);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Breadcrumb.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Breadcrumb.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Breadcrumb.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Breadcrumb.prototype, \"home\", void 0);\n    Breadcrumb = __decorate([\n        core_1.Component({\n            selector: 'p-breadcrumb',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-breadcrumb ui-widget ui-widget-header ui-helper-clearfix ui-corner-all'\\\">\\n            <ul>\\n                <li class=\\\"ui-breadcrumb-home\\\" *ngIf=\\\"home\\\">\\n                    <a *ngIf=\\\"!home.routerLink\\\" [href]=\\\"home.url||'#'\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, home)\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':home.disabled}\\\" [attr.target]=\\\"home.target\\\" [attr.title]=\\\"home.title\\\" [attr.id]=\\\"home.id\\\">\\n                        <span [ngClass]=\\\"home.icon||'fa fa-home'\\\"></span>\\n                    </a>\\n                    <a *ngIf=\\\"home.routerLink\\\" [routerLink]=\\\"home.routerLink\\\" [queryParams]=\\\"home.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"home.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, home)\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':home.disabled}\\\" [attr.target]=\\\"home.target\\\" [attr.title]=\\\"home.title\\\" [attr.id]=\\\"home.id\\\">\\n                        <span class=\\\"fa fa-home\\\"></span>\\n                    </a>\\n                </li>\\n                <li class=\\\"ui-breadcrumb-chevron fa fa-chevron-right\\\" *ngIf=\\\"model&&home\\\"></li>\\n                <ng-template ngFor let-item let-end=\\\"last\\\" [ngForOf]=\\\"model\\\">\\n                    <li role=\\\"menuitem\\\">\\n                        <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, item)\\\" \\n                            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\">\\n                            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                        </a>\\n                        <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, item)\\\" \\n                            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\">\\n                            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                        </a>\\n                    </li>\\n                    <li class=\\\"ui-breadcrumb-chevron fa fa-chevron-right\\\" *ngIf=\\\"!end\\\"></li>\\n                </ng-template>\\n            </ul>\\n        </div>\\n    \"\n        })\n    ], Breadcrumb);\n    return Breadcrumb;\n}());\nexports.Breadcrumb = Breadcrumb;\nvar BreadcrumbModule = /** @class */ (function () {\n    function BreadcrumbModule() {\n    }\n    BreadcrumbModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [Breadcrumb, router_1.RouterModule],\n            declarations: [Breadcrumb]\n        })\n    ], BreadcrumbModule);\n    return BreadcrumbModule;\n}());\nexports.BreadcrumbModule = BreadcrumbModule;\n//# sourceMappingURL=breadcrumb.js.map\n\n/***/ }),\n/* 727 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar Captcha = /** @class */ (function () {\n    function Captcha(el, _zone) {\n        this.el = el;\n        this._zone = _zone;\n        this.siteKey = null;\n        this.theme = 'light';\n        this.type = 'image';\n        this.size = 'normal';\n        this.tabindex = 0;\n        this.language = null;\n        this.initCallback = \"initRecaptcha\";\n        this.onResponse = new core_1.EventEmitter();\n        this.onExpire = new core_1.EventEmitter();\n        this._instance = null;\n    }\n    Captcha.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (window.grecaptcha) {\n            this.init();\n        }\n        else {\n            window[this.initCallback] = function () {\n                _this.init();\n            };\n        }\n    };\n    Captcha.prototype.init = function () {\n        var _this = this;\n        this._instance = window.grecaptcha.render(this.el.nativeElement.children[0], {\n            'sitekey': this.siteKey,\n            'theme': this.theme,\n            'type': this.type,\n            'size': this.size,\n            'tabindex': this.tabindex,\n            'hl': this.language,\n            'callback': function (response) { _this._zone.run(function () { return _this.recaptchaCallback(response); }); },\n            'expired-callback': function () { _this._zone.run(function () { return _this.recaptchaExpiredCallback(); }); }\n        });\n    };\n    Captcha.prototype.reset = function () {\n        if (this._instance === null)\n            return;\n        window.grecaptcha.reset(this._instance);\n    };\n    Captcha.prototype.getResponse = function () {\n        if (this._instance === null)\n            return null;\n        return window.grecaptcha.getResponse(this._instance);\n    };\n    Captcha.prototype.recaptchaCallback = function (response) {\n        this.onResponse.emit({\n            response: response\n        });\n    };\n    Captcha.prototype.recaptchaExpiredCallback = function () {\n        this.onExpire.emit();\n    };\n    Captcha.prototype.ngOnDestroy = function () {\n        if (this._instance != null) {\n            window.grecaptcha.reset(this._instance);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Captcha.prototype, \"siteKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"theme\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"size\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Captcha.prototype, \"language\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"initCallback\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Captcha.prototype, \"onResponse\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Captcha.prototype, \"onExpire\", void 0);\n    Captcha = __decorate([\n        core_1.Component({\n            selector: 'p-captcha',\n            template: \"<div></div>\"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.NgZone])\n    ], Captcha);\n    return Captcha;\n}());\nexports.Captcha = Captcha;\nvar CaptchaModule = /** @class */ (function () {\n    function CaptchaModule() {\n    }\n    CaptchaModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Captcha],\n            declarations: [Captcha]\n        })\n    ], CaptchaModule);\n    return CaptchaModule;\n}());\nexports.CaptchaModule = CaptchaModule;\n//# sourceMappingURL=captcha.js.map\n\n/***/ }),\n/* 728 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar button_1 = __webpack_require__(37);\nvar domhandler_1 = __webpack_require__(9);\nvar shared_1 = __webpack_require__(15);\nvar forms_1 = __webpack_require__(17);\nexports.CALENDAR_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Calendar; }),\n    multi: true\n};\nvar Calendar = /** @class */ (function () {\n    function Calendar(el, domHandler, renderer, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.dateFormat = 'mm/dd/yy';\n        this.inline = false;\n        this.showOtherMonths = true;\n        this.icon = 'fa-calendar';\n        this.shortYearCutoff = '+10';\n        this.hourFormat = '24';\n        this.stepHour = 1;\n        this.stepMinute = 1;\n        this.stepSecond = 1;\n        this.showSeconds = false;\n        this.showOnFocus = true;\n        this.dataType = 'date';\n        this.selectionMode = 'single';\n        this.todayButtonStyleClass = 'ui-button-secondary';\n        this.clearButtonStyleClass = 'ui-button-secondary';\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.keepInvalid = false;\n        this.hideOnDateTimeSelect = false;\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onClose = new core_1.EventEmitter();\n        this.onSelect = new core_1.EventEmitter();\n        this.onInput = new core_1.EventEmitter();\n        this.onTodayClick = new core_1.EventEmitter();\n        this.onClearClick = new core_1.EventEmitter();\n        this.onMonthChange = new core_1.EventEmitter();\n        this.onYearChange = new core_1.EventEmitter();\n        this._locale = {\n            firstDayOfWeek: 0,\n            dayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n            dayNamesShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n            dayNamesMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n            monthNames: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n            monthNamesShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n            today: 'Today',\n            clear: 'Clear'\n        };\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.inputFieldValue = null;\n    }\n    Object.defineProperty(Calendar.prototype, \"minDate\", {\n        get: function () {\n            return this._minDate;\n        },\n        set: function (date) {\n            this._minDate = date;\n            if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n                this.createMonth(this.currentMonth, this.currentYear);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"maxDate\", {\n        get: function () {\n            return this._maxDate;\n        },\n        set: function (date) {\n            this._maxDate = date;\n            if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n                this.createMonth(this.currentMonth, this.currentYear);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"disabledDates\", {\n        get: function () {\n            return this._disabledDates;\n        },\n        set: function (disabledDates) {\n            this._disabledDates = disabledDates;\n            if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n                this.createMonth(this.currentMonth, this.currentYear);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"disabledDays\", {\n        get: function () {\n            return this._disabledDays;\n        },\n        set: function (disabledDays) {\n            this._disabledDays = disabledDays;\n            if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n                this.createMonth(this.currentMonth, this.currentYear);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"showTime\", {\n        get: function () {\n            return this._showTime;\n        },\n        set: function (showTime) {\n            this._showTime = showTime;\n            if (this.currentHour === undefined) {\n                this.initTime(this.value || new Date());\n            }\n            this.updateInputfield();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"locale\", {\n        get: function () {\n            return this._locale;\n        },\n        set: function (newLocale) {\n            this._locale = newLocale;\n            this.createWeekDays();\n            this.createMonth(this.currentMonth, this.currentYear);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Calendar.prototype.ngOnInit = function () {\n        var date = this.defaultDate || new Date();\n        this.createWeekDays();\n        this.currentMonth = date.getMonth();\n        this.currentYear = date.getFullYear();\n        this.initTime(date);\n        this.createMonth(this.currentMonth, this.currentYear);\n        this.ticksTo1970 = (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +\n            Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000);\n        if (this.yearNavigator && this.yearRange) {\n            this.yearOptions = [];\n            var years = this.yearRange.split(':'), yearStart = parseInt(years[0]), yearEnd = parseInt(years[1]);\n            for (var i = yearStart; i <= yearEnd; i++) {\n                this.yearOptions.push(i);\n            }\n        }\n    };\n    Calendar.prototype.ngAfterViewInit = function () {\n        if (!this.inline && this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlayViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.overlayViewChild.nativeElement, this.appendTo);\n        }\n    };\n    Calendar.prototype.ngAfterViewChecked = function () {\n        if (this.overlayShown) {\n            this.alignOverlay();\n            this.overlayShown = false;\n        }\n    };\n    Calendar.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'date':\n                    _this.dateTemplate = item.template;\n                    break;\n                default:\n                    _this.dateTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Calendar.prototype.createWeekDays = function () {\n        this.weekDays = [];\n        var dayIndex = this.locale.firstDayOfWeek;\n        for (var i = 0; i < 7; i++) {\n            this.weekDays.push(this.locale.dayNamesMin[dayIndex]);\n            dayIndex = (dayIndex == 6) ? 0 : ++dayIndex;\n        }\n    };\n    Calendar.prototype.createMonth = function (month, year) {\n        this.dates = [];\n        this.currentMonth = month;\n        this.currentYear = year;\n        this.currentMonthText = this.locale.monthNames[month];\n        var firstDay = this.getFirstDayOfMonthIndex(month, year);\n        var daysLength = this.getDaysCountInMonth(month, year);\n        var prevMonthDaysLength = this.getDaysCountInPrevMonth(month, year);\n        var sundayIndex = this.getSundayIndex();\n        var dayNo = 1;\n        var today = new Date();\n        for (var i = 0; i < 6; i++) {\n            var week = [];\n            if (i == 0) {\n                for (var j = (prevMonthDaysLength - firstDay + 1); j <= prevMonthDaysLength; j++) {\n                    var prev = this.getPreviousMonthAndYear(month, year);\n                    week.push({ day: j, month: prev.month, year: prev.year, otherMonth: true,\n                        today: this.isToday(today, j, prev.month, prev.year), selectable: this.isSelectable(j, prev.month, prev.year) });\n                }\n                var remainingDaysLength = 7 - week.length;\n                for (var j = 0; j < remainingDaysLength; j++) {\n                    week.push({ day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                        selectable: this.isSelectable(dayNo, month, year) });\n                    dayNo++;\n                }\n            }\n            else {\n                for (var j = 0; j < 7; j++) {\n                    if (dayNo > daysLength) {\n                        var next = this.getNextMonthAndYear(month, year);\n                        week.push({ day: dayNo - daysLength, month: next.month, year: next.year, otherMonth: true,\n                            today: this.isToday(today, dayNo - daysLength, next.month, next.year),\n                            selectable: this.isSelectable((dayNo - daysLength), next.month, next.year) });\n                    }\n                    else {\n                        week.push({ day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                            selectable: this.isSelectable(dayNo, month, year) });\n                    }\n                    dayNo++;\n                }\n            }\n            this.dates.push(week);\n        }\n    };\n    Calendar.prototype.initTime = function (date) {\n        this.pm = (!this.utc) ? (date.getHours() > 11) : (date.getUTCHours() > 11);\n        if (this.showTime) {\n            if (this.utc) {\n                this.currentMinute = date.getUTCMinutes();\n                this.currentSecond = date.getUTCSeconds();\n                if (this.hourFormat == '12')\n                    this.currentHour = date.getUTCHours() == 0 ? 12 : date.getUTCHours() % 12;\n                else\n                    this.currentHour = date.getUTCHours();\n            }\n            else {\n                this.currentMinute = date.getMinutes();\n                this.currentSecond = date.getSeconds();\n                if (this.hourFormat == '12')\n                    this.currentHour = date.getHours() == 0 ? 12 : date.getHours() % 12;\n                else\n                    this.currentHour = date.getHours();\n            }\n        }\n        else if (this.timeOnly) {\n            this.currentMinute = 0;\n            this.currentHour = 0;\n            this.currentSecond = 0;\n        }\n    };\n    Calendar.prototype.prevMonth = function (event) {\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (this.currentMonth === 0) {\n            this.currentMonth = 11;\n            this.currentYear--;\n            if (this.yearNavigator && this.currentYear < this.yearOptions[0]) {\n                this.currentYear = this.yearOptions[this.yearOptions.length - 1];\n            }\n        }\n        else {\n            this.currentMonth--;\n        }\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonth(this.currentMonth, this.currentYear);\n        event.preventDefault();\n    };\n    Calendar.prototype.nextMonth = function (event) {\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (this.currentMonth === 11) {\n            this.currentMonth = 0;\n            this.currentYear++;\n            if (this.yearNavigator && this.currentYear > this.yearOptions[this.yearOptions.length - 1]) {\n                this.currentYear = this.yearOptions[0];\n            }\n        }\n        else {\n            this.currentMonth++;\n        }\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonth(this.currentMonth, this.currentYear);\n        event.preventDefault();\n    };\n    Calendar.prototype.onDateSelect = function (event, dateMeta) {\n        var _this = this;\n        if (this.disabled || !dateMeta.selectable) {\n            event.preventDefault();\n            return;\n        }\n        if (this.isMultipleSelection() && this.isSelected(dateMeta)) {\n            this.value = this.value.filter(function (date, i) {\n                return !_this.isDateEquals(date, dateMeta);\n            });\n            this.updateModel(this.value);\n        }\n        else {\n            if (this.shouldSelectDate(dateMeta)) {\n                if (dateMeta.otherMonth) {\n                    if (this.selectOtherMonths) {\n                        this.currentMonth = dateMeta.month;\n                        this.currentYear = dateMeta.year;\n                        this.createMonth(this.currentMonth, this.currentYear);\n                        this.selectDate(dateMeta);\n                    }\n                }\n                else {\n                    this.selectDate(dateMeta);\n                }\n            }\n        }\n        if (this.isSingleSelection() && (!this.showTime || this.hideOnDateTimeSelect)) {\n            this.overlayVisible = false;\n        }\n        this.updateInputfield();\n        event.preventDefault();\n    };\n    Calendar.prototype.shouldSelectDate = function (dateMeta) {\n        if (this.isMultipleSelection())\n            return !this.maxDateCount || !this.value || this.maxDateCount > this.value.length;\n        else\n            return true;\n    };\n    Calendar.prototype.updateInputfield = function () {\n        var formattedValue = '';\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                formattedValue = this.formatDateTime(this.value);\n            }\n            else if (this.isMultipleSelection()) {\n                for (var i = 0; i < this.value.length; i++) {\n                    var dateAsString = this.formatDateTime(this.value[i]);\n                    formattedValue += dateAsString;\n                    if (i !== (this.value.length - 1)) {\n                        formattedValue += ', ';\n                    }\n                }\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value && this.value.length) {\n                    var startDate = this.value[0];\n                    var endDate = this.value[1];\n                    formattedValue = this.formatDateTime(startDate);\n                    if (endDate) {\n                        formattedValue += ' - ' + this.formatDateTime(endDate);\n                    }\n                }\n            }\n        }\n        this.inputFieldValue = formattedValue;\n        this.updateFilledState();\n        if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {\n            this.inputfieldViewChild.nativeElement.value = this.inputFieldValue;\n        }\n    };\n    Calendar.prototype.formatDateTime = function (date) {\n        var formattedValue = null;\n        if (date) {\n            if (this.timeOnly) {\n                formattedValue = this.formatTime(date);\n            }\n            else {\n                formattedValue = this.formatDate(date, this.dateFormat);\n                if (this.showTime) {\n                    formattedValue += ' ' + this.formatTime(date);\n                }\n            }\n        }\n        return formattedValue;\n    };\n    Calendar.prototype.selectDate = function (dateMeta) {\n        var date;\n        if (this.utc)\n            date = new Date(Date.UTC(dateMeta.year, dateMeta.month, dateMeta.day));\n        else\n            date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n        if (this.showTime) {\n            if (this.utc) {\n                if (this.hourFormat === '12' && this.pm && this.currentHour != 12)\n                    date.setUTCHours(this.currentHour + 12);\n                else\n                    date.setUTCHours(this.currentHour);\n                date.setUTCMinutes(this.currentMinute);\n                date.setUTCSeconds(this.currentSecond);\n            }\n            else {\n                if (this.hourFormat === '12' && this.pm && this.currentHour != 12)\n                    date.setHours(this.currentHour + 12);\n                else\n                    date.setHours(this.currentHour);\n                date.setMinutes(this.currentMinute);\n                date.setSeconds(this.currentSecond);\n            }\n        }\n        if (this.minDate && this.minDate > date) {\n            date = this.minDate;\n            this.currentHour = date.getHours();\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n        if (this.maxDate && this.maxDate < date) {\n            date = this.maxDate;\n            this.currentHour = date.getHours();\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n        if (this.isSingleSelection()) {\n            this.updateModel(date);\n        }\n        else if (this.isMultipleSelection()) {\n            this.updateModel(this.value ? this.value.concat([date]) : [date]);\n        }\n        else if (this.isRangeSelection()) {\n            if (this.value && this.value.length) {\n                var startDate = this.value[0];\n                var endDate = this.value[1];\n                if (!endDate && date.getTime() >= startDate.getTime()) {\n                    endDate = date;\n                }\n                else {\n                    startDate = date;\n                    endDate = null;\n                }\n                this.updateModel([startDate, endDate]);\n            }\n            else {\n                this.updateModel([date, null]);\n            }\n        }\n        this.onSelect.emit(date);\n    };\n    Calendar.prototype.updateModel = function (value) {\n        var _this = this;\n        this.value = value;\n        if (this.dataType == 'date') {\n            this.onModelChange(this.value);\n        }\n        else if (this.dataType == 'string') {\n            if (this.isSingleSelection()) {\n                this.onModelChange(this.formatDateTime(this.value));\n            }\n            else {\n                var stringArrValue = null;\n                if (this.value) {\n                    stringArrValue = this.value.map(function (date) { return _this.formatDateTime(date); });\n                }\n                this.onModelChange(stringArrValue);\n            }\n        }\n    };\n    Calendar.prototype.getFirstDayOfMonthIndex = function (month, year) {\n        var day = new Date();\n        day.setDate(1);\n        day.setMonth(month);\n        day.setFullYear(year);\n        var dayIndex = day.getDay() + this.getSundayIndex();\n        return dayIndex >= 7 ? dayIndex - 7 : dayIndex;\n    };\n    Calendar.prototype.getDaysCountInMonth = function (month, year) {\n        return 32 - this.daylightSavingAdjust(new Date(year, month, 32)).getDate();\n    };\n    Calendar.prototype.getDaysCountInPrevMonth = function (month, year) {\n        var prev = this.getPreviousMonthAndYear(month, year);\n        return this.getDaysCountInMonth(prev.month, prev.year);\n    };\n    Calendar.prototype.getPreviousMonthAndYear = function (month, year) {\n        var m, y;\n        if (month === 0) {\n            m = 11;\n            y = year - 1;\n        }\n        else {\n            m = month - 1;\n            y = year;\n        }\n        return { 'month': m, 'year': y };\n    };\n    Calendar.prototype.getNextMonthAndYear = function (month, year) {\n        var m, y;\n        if (month === 11) {\n            m = 0;\n            y = year + 1;\n        }\n        else {\n            m = month + 1;\n            y = year;\n        }\n        return { 'month': m, 'year': y };\n    };\n    Calendar.prototype.getSundayIndex = function () {\n        return this.locale.firstDayOfWeek > 0 ? 7 - this.locale.firstDayOfWeek : 0;\n    };\n    Calendar.prototype.isSelected = function (dateMeta) {\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                return this.isDateEquals(this.value, dateMeta);\n            }\n            else if (this.isMultipleSelection()) {\n                var selected = false;\n                for (var _i = 0, _a = this.value; _i < _a.length; _i++) {\n                    var date = _a[_i];\n                    selected = this.isDateEquals(date, dateMeta);\n                    if (selected) {\n                        break;\n                    }\n                }\n                return selected;\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value[1])\n                    return this.isDateEquals(this.value[0], dateMeta) || this.isDateEquals(this.value[1], dateMeta) || this.isDateBetween(this.value[0], this.value[1], dateMeta);\n                else\n                    return this.isDateEquals(this.value[0], dateMeta);\n            }\n        }\n        else\n            return false;\n    };\n    Calendar.prototype.isDateEquals = function (value, dateMeta) {\n        if (value)\n            return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year;\n        else\n            return false;\n    };\n    Calendar.prototype.isDateBetween = function (start, end, dateMeta) {\n        var between = false;\n        if (start && end) {\n            var date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n            return start.getTime() <= date.getTime() && end.getTime() >= date.getTime();\n        }\n        return between;\n    };\n    Calendar.prototype.isSingleSelection = function () {\n        return this.selectionMode === 'single';\n    };\n    Calendar.prototype.isRangeSelection = function () {\n        return this.selectionMode === 'range';\n    };\n    Calendar.prototype.isMultipleSelection = function () {\n        return this.selectionMode === 'multiple';\n    };\n    Calendar.prototype.isToday = function (today, day, month, year) {\n        return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;\n    };\n    Calendar.prototype.isSelectable = function (day, month, year) {\n        var validMin = true;\n        var validMax = true;\n        var validDate = true;\n        var validDay = true;\n        if (this.minDate) {\n            if (this.minDate.getFullYear() > year) {\n                validMin = false;\n            }\n            else if (this.minDate.getFullYear() === year) {\n                if (this.minDate.getMonth() > month) {\n                    validMin = false;\n                }\n                else if (this.minDate.getMonth() === month) {\n                    if (this.minDate.getDate() > day) {\n                        validMin = false;\n                    }\n                }\n            }\n        }\n        if (this.maxDate) {\n            if (this.maxDate.getFullYear() < year) {\n                validMax = false;\n            }\n            else if (this.maxDate.getFullYear() === year) {\n                if (this.maxDate.getMonth() < month) {\n                    validMax = false;\n                }\n                else if (this.maxDate.getMonth() === month) {\n                    if (this.maxDate.getDate() < day) {\n                        validMax = false;\n                    }\n                }\n            }\n        }\n        if (this.disabledDates) {\n            validDate = !this.isDateDisabled(day, month, year);\n        }\n        if (this.disabledDays) {\n            validDay = !this.isDayDisabled(day, month, year);\n        }\n        return validMin && validMax && validDate && validDay;\n    };\n    Calendar.prototype.isDateDisabled = function (day, month, year) {\n        if (this.disabledDates) {\n            for (var _i = 0, _a = this.disabledDates; _i < _a.length; _i++) {\n                var disabledDate = _a[_i];\n                if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    Calendar.prototype.isDayDisabled = function (day, month, year) {\n        if (this.disabledDays) {\n            var weekday = new Date(year, month, day);\n            var weekdayNumber = weekday.getDay();\n            return this.disabledDays.indexOf(weekdayNumber) !== -1;\n        }\n        return false;\n    };\n    Calendar.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        if (this.showOnFocus) {\n            this.showOverlay();\n        }\n        this.onFocus.emit(event);\n    };\n    Calendar.prototype.onInputClick = function (event) {\n        this.datepickerClick = true;\n        if (this.autoZIndex) {\n            this.overlayViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    Calendar.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        this.onBlur.emit(event);\n        if (!this.keepInvalid) {\n            this.updateInputfield();\n        }\n        this.onModelTouched();\n    };\n    Calendar.prototype.onButtonClick = function (event, inputfield) {\n        if (!this.overlayViewChild.nativeElement.offsetParent || this.overlayViewChild.nativeElement.style.display === 'none') {\n            inputfield.focus();\n            this.showOverlay();\n        }\n        else\n            this.overlayVisible = false;\n        this.datepickerClick = true;\n    };\n    Calendar.prototype.onInputKeydown = function (event) {\n        this.isKeydown = true;\n        if (event.keyCode === 9) {\n            this.overlayVisible = false;\n        }\n    };\n    Calendar.prototype.onMonthDropdownChange = function (m) {\n        this.currentMonth = parseInt(m);\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonth(this.currentMonth, this.currentYear);\n    };\n    Calendar.prototype.onYearDropdownChange = function (y) {\n        this.currentYear = parseInt(y);\n        this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonth(this.currentMonth, this.currentYear);\n    };\n    Calendar.prototype.incrementHour = function (event) {\n        var prevHour = this.currentHour;\n        var newHour = this.currentHour + this.stepHour;\n        if (this.validateHour(newHour)) {\n            if (this.hourFormat == '24')\n                this.currentHour = (newHour >= 24) ? (newHour - 24) : newHour;\n            else if (this.hourFormat == '12') {\n                // Before the AM/PM break, now after\n                if (prevHour < 12 && newHour > 11) {\n                    this.pm = !this.pm;\n                }\n                this.currentHour = (newHour >= 13) ? (newHour - 12) : newHour;\n            }\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.decrementHour = function (event) {\n        var newHour = this.currentHour - this.stepHour;\n        if (this.validateHour(newHour)) {\n            if (this.hourFormat == '24')\n                this.currentHour = (newHour < 0) ? (24 + newHour) : newHour;\n            else if (this.hourFormat == '12') {\n                // If we were at noon/midnight, then switch\n                if (this.currentHour === 12) {\n                    this.pm = !this.pm;\n                }\n                this.currentHour = (newHour <= 0) ? (12 + newHour) : newHour;\n            }\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.validateHour = function (hour) {\n        var valid = true;\n        var value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        var valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getHours() > hour) {\n                valid = false;\n            }\n        }\n        if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getHours() < hour) {\n                valid = false;\n            }\n        }\n        return valid;\n    };\n    Calendar.prototype.incrementMinute = function (event) {\n        var newMinute = this.currentMinute + this.stepMinute;\n        if (this.validateMinute(newMinute)) {\n            this.currentMinute = (newMinute > 59) ? newMinute - 60 : newMinute;\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.decrementMinute = function (event) {\n        var newMinute = this.currentMinute - this.stepMinute;\n        if (this.validateMinute(newMinute)) {\n            this.currentMinute = (newMinute < 0) ? 60 + newMinute : newMinute;\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.validateMinute = function (minute) {\n        var valid = true;\n        var value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        var valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getMinutes() > minute) {\n                valid = false;\n            }\n        }\n        if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getMinutes() < minute) {\n                valid = false;\n            }\n        }\n        return valid;\n    };\n    Calendar.prototype.incrementSecond = function (event) {\n        var newSecond = this.currentSecond + this.stepSecond;\n        if (this.validateSecond(newSecond)) {\n            this.currentSecond = (newSecond > 59) ? newSecond - 60 : newSecond;\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.decrementSecond = function (event) {\n        var newSecond = this.currentSecond - this.stepSecond;\n        if (this.validateSecond(newSecond)) {\n            this.currentSecond = (newSecond < 0) ? 60 + newSecond : newSecond;\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.validateSecond = function (second) {\n        var valid = true;\n        var value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        var valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getSeconds() > second) {\n                valid = false;\n            }\n        }\n        if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getSeconds() < second) {\n                valid = false;\n            }\n        }\n        return valid;\n    };\n    Calendar.prototype.updateTime = function () {\n        var value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        value = value ? new Date(value.getTime()) : new Date();\n        if (this.utc) {\n            if (this.hourFormat == '12') {\n                if (this.currentHour === 12)\n                    value.setUTCHours(this.pm ? 12 : 0);\n                else\n                    value.setUTCHours(this.pm ? this.currentHour + 12 : this.currentHour);\n            }\n            else {\n                value.setUTCHours(this.currentHour);\n            }\n        }\n        else {\n            if (this.hourFormat == '12') {\n                if (this.currentHour === 12)\n                    value.setHours(this.pm ? 12 : 0);\n                else\n                    value.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n            }\n            else {\n                value.setHours(this.currentHour);\n            }\n        }\n        value.setMinutes(this.currentMinute);\n        value.setSeconds(this.currentSecond);\n        if (this.isRangeSelection()) {\n            if (this.value[1]) {\n                value = [this.value[0], value];\n            }\n            else {\n                value = [value, null];\n            }\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value.slice(0, -1).concat([value]);\n        }\n        this.updateModel(value);\n        this.onSelect.emit(value);\n        this.updateInputfield();\n    };\n    Calendar.prototype.toggleAMPM = function (event) {\n        this.pm = !this.pm;\n        this.updateTime();\n        event.preventDefault();\n    };\n    Calendar.prototype.onUserInput = function (event) {\n        // IE 11 Workaround for input placeholder : https://github.com/primefaces/primeng/issues/2026\n        if (!this.isKeydown) {\n            return;\n        }\n        this.isKeydown = false;\n        var val = event.target.value;\n        try {\n            var value = this.parseValueFromString(val);\n            this.updateModel(value);\n            this.updateUI();\n        }\n        catch (err) {\n            //invalid date\n            this.updateModel(null);\n        }\n        this.filled = val != null && val.length;\n        this.onInput.emit(event);\n    };\n    Calendar.prototype.parseValueFromString = function (text) {\n        if (!text || text.trim().length === 0) {\n            return null;\n        }\n        var value;\n        if (this.isSingleSelection()) {\n            value = this.parseDateTime(text);\n        }\n        else if (this.isMultipleSelection()) {\n            var tokens = text.split(',');\n            value = [];\n            for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n                var token = tokens_1[_i];\n                value.push(this.parseDateTime(token.trim()));\n            }\n        }\n        else if (this.isRangeSelection()) {\n            var tokens = text.split(' - ');\n            value = [];\n            for (var i = 0; i < tokens.length; i++) {\n                value[i] = this.parseDateTime(tokens[i].trim());\n            }\n        }\n        return value;\n    };\n    Calendar.prototype.parseDateTime = function (text) {\n        var date;\n        var parts = text.split(' ');\n        if (this.timeOnly) {\n            date = new Date();\n            this.populateTime(date, parts[0], parts[1]);\n        }\n        else {\n            if (this.showTime) {\n                date = this.parseDate(parts[0], this.dateFormat);\n                this.populateTime(date, parts[1], parts[2]);\n            }\n            else {\n                date = this.parseDate(text, this.dateFormat);\n            }\n        }\n        return date;\n    };\n    Calendar.prototype.populateTime = function (value, timeString, ampm) {\n        if (this.hourFormat == '12' && !ampm) {\n            throw 'Invalid Time';\n        }\n        this.pm = (ampm === 'PM' || ampm === 'pm');\n        var time = this.parseTime(timeString);\n        if (!this.utc)\n            value.setHours(time.hour);\n        else\n            value.setUTCHours(time.hour);\n        value.setMinutes(time.minute);\n        value.setSeconds(time.second);\n    };\n    Calendar.prototype.updateUI = function () {\n        var val = this.value || this.defaultDate || new Date();\n        if (Array.isArray(val)) {\n            val = val[0];\n        }\n        this.createMonth(val.getMonth(), val.getFullYear());\n        if (this.showTime || this.timeOnly) {\n            var hours = (this.utc) ? val.getUTCHours() : val.getHours();\n            if (this.hourFormat == '12') {\n                this.pm = hours > 11;\n                if (hours >= 12) {\n                    this.currentHour = (hours == 12) ? 12 : hours - 12;\n                }\n                else {\n                    this.currentHour = (hours == 0) ? 12 : hours;\n                }\n            }\n            else {\n                this.currentHour = (this.utc) ? val.getUTCHours() : val.getHours();\n            }\n            this.currentMinute = val.getMinutes();\n            this.currentSecond = val.getSeconds();\n        }\n    };\n    Calendar.prototype.onDatePickerClick = function (event) {\n        this.datepickerClick = true;\n    };\n    Calendar.prototype.showOverlay = function () {\n        this.overlayVisible = true;\n        this.overlayShown = true;\n        if (this.autoZIndex) {\n            this.overlayViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n        this.bindDocumentClickListener();\n    };\n    Calendar.prototype.alignOverlay = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.overlayViewChild.nativeElement, this.inputfieldViewChild.nativeElement);\n        else\n            this.domHandler.relativePosition(this.overlayViewChild.nativeElement, this.inputfieldViewChild.nativeElement);\n    };\n    Calendar.prototype.writeValue = function (value) {\n        this.value = value;\n        if (this.value && typeof this.value === 'string') {\n            this.value = this.parseValueFromString(this.value);\n        }\n        this.updateInputfield();\n        this.updateUI();\n    };\n    Calendar.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Calendar.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Calendar.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    // Ported from jquery-ui datepicker formatDate\n    Calendar.prototype.formatDate = function (date, format) {\n        if (!date) {\n            return '';\n        }\n        var iFormat;\n        var lookAhead = function (match) {\n            var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        }, formatNumber = function (match, value, len) {\n            var num = '' + value;\n            if (lookAhead(match)) {\n                while (num.length < len) {\n                    num = '0' + num;\n                }\n            }\n            return num;\n        }, formatName = function (match, value, shortNames, longNames) {\n            return (lookAhead(match) ? longNames[value] : shortNames[value]);\n        };\n        var output = '';\n        var literal = false;\n        if (date) {\n            for (iFormat = 0; iFormat < format.length; iFormat++) {\n                if (literal) {\n                    if (format.charAt(iFormat) === '\\'' && !lookAhead('\\'')) {\n                        literal = false;\n                    }\n                    else {\n                        output += format.charAt(iFormat);\n                    }\n                }\n                else {\n                    switch (format.charAt(iFormat)) {\n                        case 'd':\n                            output += formatNumber('d', this.utc ? date.getUTCDate() : date.getDate(), 2);\n                            break;\n                        case 'D':\n                            output += formatName('D', this.utc ? date.getUTCDay() : date.getDay(), this.locale.dayNamesShort, this.locale.dayNames);\n                            break;\n                        case 'o':\n                            if (this.utc) {\n                                output += formatNumber('o', Math.round((new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()).getTime() -\n                                    new Date(date.getUTCFullYear(), 0, 0).getTime()) / 86400000), 3);\n                            }\n                            else {\n                                output += formatNumber('o', Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() -\n                                    new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n                            }\n                            break;\n                        case 'm':\n                            output += formatNumber('m', (this.utc ? date.getUTCMonth() : date.getMonth()) + 1, 2);\n                            break;\n                        case 'M':\n                            output += formatName('M', this.utc ? date.getUTCMonth() : date.getMonth(), this.locale.monthNamesShort, this.locale.monthNames);\n                            break;\n                        case 'y':\n                            output += (lookAhead('y') ? (this.utc ? date.getUTCFullYear() : date.getFullYear()) :\n                                ((this.utc ? date.getUTCFullYear() : date.getFullYear()) % 100 < 10 ? '0' : '') +\n                                    (this.utc ? date.getUTCFullYear() : date.getFullYear()) % 100);\n                            break;\n                        case '@':\n                            output += date.getTime();\n                            break;\n                        case '!':\n                            output += date.getTime() * 10000 + this.ticksTo1970;\n                            break;\n                        case '\\'':\n                            if (lookAhead('\\'')) {\n                                output += '\\'';\n                            }\n                            else {\n                                literal = true;\n                            }\n                            break;\n                        default:\n                            output += format.charAt(iFormat);\n                    }\n                }\n            }\n        }\n        return output;\n    };\n    Calendar.prototype.formatTime = function (date) {\n        if (!date) {\n            return '';\n        }\n        var output = '';\n        var hours = (this.utc) ? date.getUTCHours() : date.getHours();\n        var minutes = date.getMinutes();\n        var seconds = date.getSeconds();\n        if (this.hourFormat == '12' && hours > 11 && hours != 12) {\n            hours -= 12;\n        }\n        if (this.hourFormat == '12') {\n            output += hours === 0 ? 12 : (hours < 10) ? '0' + hours : hours;\n        }\n        else {\n            output += (hours < 10) ? '0' + hours : hours;\n        }\n        output += ':';\n        output += (minutes < 10) ? '0' + minutes : minutes;\n        if (this.showSeconds) {\n            output += ':';\n            output += (seconds < 10) ? '0' + seconds : seconds;\n        }\n        if (this.hourFormat == '12') {\n            output += date.getHours() > 11 ? ' PM' : ' AM';\n        }\n        return output;\n    };\n    Calendar.prototype.parseTime = function (value) {\n        var tokens = value.split(':');\n        var validTokenLength = this.showSeconds ? 3 : 2;\n        if (tokens.length !== validTokenLength) {\n            throw \"Invalid time\";\n        }\n        var h = parseInt(tokens[0]);\n        var m = parseInt(tokens[1]);\n        var s = this.showSeconds ? parseInt(tokens[2]) : null;\n        if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (this.hourFormat == '12' && h > 12) || (this.showSeconds && (isNaN(s) || s > 59))) {\n            throw \"Invalid time\";\n        }\n        else {\n            if (this.hourFormat == '12' && h !== 12 && this.pm) {\n                h += 12;\n            }\n            return { hour: h, minute: m, second: s };\n        }\n    };\n    // Ported from jquery-ui datepicker parseDate\n    Calendar.prototype.parseDate = function (value, format) {\n        if (format == null || value == null) {\n            throw \"Invalid arguments\";\n        }\n        value = (typeof value === \"object\" ? value.toString() : value + \"\");\n        if (value === \"\") {\n            return null;\n        }\n        var iFormat, dim, extra, iValue = 0, shortYearCutoff = (typeof this.shortYearCutoff !== \"string\" ? this.shortYearCutoff : new Date().getFullYear() % 100 + parseInt(this.shortYearCutoff, 10)), year = -1, month = -1, day = -1, doy = -1, literal = false, date, lookAhead = function (match) {\n            var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        }, getNumber = function (match) {\n            var isDoubled = lookAhead(match), size = (match === \"@\" ? 14 : (match === \"!\" ? 20 :\n                (match === \"y\" && isDoubled ? 4 : (match === \"o\" ? 3 : 2)))), minSize = (match === \"y\" ? size : 1), digits = new RegExp(\"^\\\\d{\" + minSize + \",\" + size + \"}\"), num = value.substring(iValue).match(digits);\n            if (!num) {\n                throw \"Missing number at position \" + iValue;\n            }\n            iValue += num[0].length;\n            return parseInt(num[0], 10);\n        }, getName = function (match, shortNames, longNames) {\n            var index = -1;\n            var arr = lookAhead(match) ? longNames : shortNames;\n            var names = [];\n            for (var i = 0; i < arr.length; i++) {\n                names.push([i, arr[i]]);\n            }\n            names.sort(function (a, b) {\n                return -(a[1].length - b[1].length);\n            });\n            for (var i = 0; i < names.length; i++) {\n                var name_1 = names[i][1];\n                if (value.substr(iValue, name_1.length).toLowerCase() === name_1.toLowerCase()) {\n                    index = names[i][0];\n                    iValue += name_1.length;\n                    break;\n                }\n            }\n            if (index !== -1) {\n                return index + 1;\n            }\n            else {\n                throw \"Unknown name at position \" + iValue;\n            }\n        }, checkLiteral = function () {\n            if (value.charAt(iValue) !== format.charAt(iFormat)) {\n                throw \"Unexpected literal at position \" + iValue;\n            }\n            iValue++;\n        };\n        for (iFormat = 0; iFormat < format.length; iFormat++) {\n            if (literal) {\n                if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n                    literal = false;\n                }\n                else {\n                    checkLiteral();\n                }\n            }\n            else {\n                switch (format.charAt(iFormat)) {\n                    case \"d\":\n                        day = getNumber(\"d\");\n                        break;\n                    case \"D\":\n                        getName(\"D\", this.locale.dayNamesShort, this.locale.dayNames);\n                        break;\n                    case \"o\":\n                        doy = getNumber(\"o\");\n                        break;\n                    case \"m\":\n                        month = getNumber(\"m\");\n                        break;\n                    case \"M\":\n                        month = getName(\"M\", this.locale.monthNamesShort, this.locale.monthNames);\n                        break;\n                    case \"y\":\n                        year = getNumber(\"y\");\n                        break;\n                    case \"@\":\n                        date = new Date(getNumber(\"@\"));\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"!\":\n                        date = new Date((getNumber(\"!\") - this.ticksTo1970) / 10000);\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"'\":\n                        if (lookAhead(\"'\")) {\n                            checkLiteral();\n                        }\n                        else {\n                            literal = true;\n                        }\n                        break;\n                    default:\n                        checkLiteral();\n                }\n            }\n        }\n        if (iValue < value.length) {\n            extra = value.substr(iValue);\n            if (!/^\\s+/.test(extra)) {\n                throw \"Extra/unparsed characters found in date: \" + extra;\n            }\n        }\n        if (year === -1) {\n            year = new Date().getFullYear();\n        }\n        else if (year < 100) {\n            year += new Date().getFullYear() - new Date().getFullYear() % 100 +\n                (year <= shortYearCutoff ? 0 : -100);\n        }\n        if (doy > -1) {\n            month = 1;\n            day = doy;\n            do {\n                dim = this.getDaysCountInMonth(year, month - 1);\n                if (day <= dim) {\n                    break;\n                }\n                month++;\n                day -= dim;\n            } while (true);\n        }\n        if (this.utc) {\n            date = new Date(Date.UTC(year, month - 1, day));\n            if (date.getUTCFullYear() !== year || date.getUTCMonth() + 1 !== month || date.getUTCDate() !== day) {\n                throw \"Invalid date\"; // E.g. 31/02/00\n            }\n        }\n        else {\n            date = this.daylightSavingAdjust(new Date(year, month - 1, day));\n            if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n                throw \"Invalid date\"; // E.g. 31/02/00\n            }\n        }\n        return date;\n    };\n    Calendar.prototype.daylightSavingAdjust = function (date) {\n        if (!date) {\n            return null;\n        }\n        if (!this.utc) {\n            date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n        }\n        return date;\n    };\n    Calendar.prototype.updateFilledState = function () {\n        this.filled = this.inputFieldValue && this.inputFieldValue != '';\n    };\n    Calendar.prototype.onTodayButtonClick = function (event) {\n        var date = new Date();\n        var dateMeta = { day: date.getDate(), month: date.getMonth(), year: date.getFullYear(), today: true, selectable: true };\n        this.createMonth(dateMeta.month, dateMeta.year);\n        this.onDateSelect(event, dateMeta);\n        this.onTodayClick.emit(event);\n    };\n    Calendar.prototype.onClearButtonClick = function (event) {\n        this.updateModel(null);\n        this.updateInputfield();\n        this.overlayVisible = false;\n        this.onClearClick.emit(event);\n    };\n    Calendar.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n                if (!_this.datepickerClick && _this.overlayVisible) {\n                    _this.overlayVisible = false;\n                    _this.onClose.emit(event);\n                }\n                _this.datepickerClick = false;\n                _this.cd.detectChanges();\n            });\n        }\n    };\n    Calendar.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    Calendar.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (!this.inline && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlayViewChild.nativeElement);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Date)\n    ], Calendar.prototype, \"defaultDate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"inputStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"inputStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Calendar.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"dateFormat\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"inline\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showOtherMonths\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"selectOtherMonths\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"icon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Calendar.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"readonlyInput\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Calendar.prototype, \"shortYearCutoff\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"monthNavigator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"yearNavigator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"yearRange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"hourFormat\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"timeOnly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"stepHour\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"stepMinute\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"stepSecond\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showSeconds\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showOnFocus\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"dataType\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"utc\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"maxDateCount\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showButtonBar\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"todayButtonStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"clearButtonStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"panelStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"keepInvalid\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"hideOnDateTimeSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onClose\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onInput\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onTodayClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onClearClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onMonthChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onYearChange\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Calendar.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.ViewChild('datepicker'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Calendar.prototype, \"overlayViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('inputfield'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Calendar.prototype, \"inputfieldViewChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Date),\n        __metadata(\"design:paramtypes\", [Date])\n    ], Calendar.prototype, \"minDate\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Date),\n        __metadata(\"design:paramtypes\", [Date])\n    ], Calendar.prototype, \"maxDate\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Calendar.prototype, \"disabledDates\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Calendar.prototype, \"disabledDays\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Calendar.prototype, \"showTime\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], Calendar.prototype, \"locale\", null);\n    Calendar = __decorate([\n        core_1.Component({\n            selector: 'p-calendar',\n            template: \"\\n        <span [ngClass]=\\\"{'ui-calendar':true,'ui-calendar-w-btn':showIcon}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ng-template [ngIf]=\\\"!inline\\\">\\n                <input #inputfield type=\\\"text\\\" [attr.id]=\\\"inputId\\\" [attr.name]=\\\"name\\\" [attr.required]=\\\"required\\\" [value]=\\\"inputFieldValue\\\" (focus)=\\\"onInputFocus($event)\\\" (keydown)=\\\"onInputKeydown($event)\\\" (click)=\\\"onInputClick($event)\\\" (blur)=\\\"onInputBlur($event)\\\"\\n                    [readonly]=\\\"readonlyInput\\\" (input)=\\\"onUserInput($event)\\\" [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\" [placeholder]=\\\"placeholder||''\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\"\\n                    [ngClass]=\\\"'ui-inputtext ui-widget ui-state-default ui-corner-all'\\\" autocomplete=\\\"off\\\"\\n                    ><button type=\\\"button\\\" [icon]=\\\"icon\\\" pButton *ngIf=\\\"showIcon\\\" (click)=\\\"onButtonClick($event,inputfield)\\\" class=\\\"ui-datepicker-trigger ui-calendar-button\\\"\\n                    [ngClass]=\\\"{'ui-state-disabled':disabled}\\\" [disabled]=\\\"disabled\\\" tabindex=\\\"-1\\\"></button>\\n            </ng-template>\\n            <div #datepicker [class]=\\\"panelStyleClass\\\" [ngClass]=\\\"{'ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all': true, 'ui-datepicker-inline':inline,'ui-shadow':!inline,'ui-state-disabled':disabled,'ui-datepicker-timeonly':timeOnly}\\\"\\n                [ngStyle]=\\\"{'display': inline ? 'inline-block' : (overlayVisible ? 'block' : 'none')}\\\" (click)=\\\"onDatePickerClick($event)\\\" [@overlayState]=\\\"inline ? 'visible' : (overlayVisible ? 'visible' : 'hidden')\\\">\\n\\n                <div class=\\\"ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all\\\" *ngIf=\\\"!timeOnly && (overlayVisible || inline)\\\">\\n                    <ng-content select=\\\"p-header\\\"></ng-content>\\n                    <a class=\\\"ui-datepicker-prev ui-corner-all\\\" href=\\\"#\\\" (click)=\\\"prevMonth($event)\\\">\\n                        <span class=\\\"fa fa-angle-left\\\"></span>\\n                    </a>\\n                    <a class=\\\"ui-datepicker-next ui-corner-all\\\" href=\\\"#\\\" (click)=\\\"nextMonth($event)\\\">\\n                        <span class=\\\"fa fa-angle-right\\\"></span>\\n                    </a>\\n                    <div class=\\\"ui-datepicker-title\\\">\\n                        <span class=\\\"ui-datepicker-month\\\" *ngIf=\\\"!monthNavigator\\\">{{locale.monthNames[currentMonth]}}</span>\\n                        <select class=\\\"ui-datepicker-month\\\" *ngIf=\\\"monthNavigator\\\" (change)=\\\"onMonthDropdownChange($event.target.value)\\\">\\n                            <option [value]=\\\"i\\\" *ngFor=\\\"let month of locale.monthNames;let i = index\\\" [selected]=\\\"i == currentMonth\\\">{{month}}</option>\\n                        </select>\\n                        <select class=\\\"ui-datepicker-year\\\" *ngIf=\\\"yearNavigator\\\" (change)=\\\"onYearDropdownChange($event.target.value)\\\">\\n                            <option [value]=\\\"year\\\" *ngFor=\\\"let year of yearOptions\\\" [selected]=\\\"year == currentYear\\\">{{year}}</option>\\n                        </select>\\n                        <span class=\\\"ui-datepicker-year\\\" *ngIf=\\\"!yearNavigator\\\">{{currentYear}}</span>\\n                    </div>\\n                </div>\\n                <table class=\\\"ui-datepicker-calendar\\\" *ngIf=\\\"!timeOnly && (overlayVisible || inline)\\\">\\n                    <thead>\\n                        <tr>\\n                            <th scope=\\\"col\\\" *ngFor=\\\"let weekDay of weekDays;let begin = first; let end = last\\\">\\n                                <span>{{weekDay}}</span>\\n                            </th>\\n                        </tr>\\n                    </thead>\\n                    <tbody>\\n                        <tr *ngFor=\\\"let week of dates\\\">\\n                            <td *ngFor=\\\"let date of week\\\" [ngClass]=\\\"{'ui-datepicker-other-month ui-state-disabled':date.otherMonth,\\n                                'ui-datepicker-current-day':isSelected(date),'ui-datepicker-today':date.today}\\\">\\n                                <a class=\\\"ui-state-default\\\" href=\\\"#\\\" *ngIf=\\\"date.otherMonth ? showOtherMonths : true\\\"\\n                                    [ngClass]=\\\"{'ui-state-active':isSelected(date), 'ui-state-highlight':date.today, 'ui-state-disabled':!date.selectable}\\\"\\n                                    (click)=\\\"onDateSelect($event,date)\\\" draggable=\\\"false\\\">\\n                                    <ng-container *ngIf=\\\"!dateTemplate\\\">{{date.day}}</ng-container>\\n                                    <ng-container *ngTemplateOutlet=\\\"dateTemplate; context: {$implicit: date}\\\"></ng-container>\\n                                </a>\\n                            </td>\\n                        </tr>\\n                    </tbody>\\n                </table>\\n                <div class=\\\"ui-timepicker ui-widget-header ui-corner-all\\\" *ngIf=\\\"showTime||timeOnly\\\">\\n                    <div class=\\\"ui-hour-picker\\\">\\n                        <a href=\\\"#\\\" (click)=\\\"incrementHour($event)\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span [ngStyle]=\\\"{'display': currentHour < 10 ? 'inline': 'none'}\\\">0</span><span>{{currentHour}}</span>\\n                        <a href=\\\"#\\\" (click)=\\\"decrementHour($event)\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-separator\\\">\\n                        <a href=\\\"#\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span>:</span>\\n                        <a href=\\\"#\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-minute-picker\\\">\\n                        <a href=\\\"#\\\" (click)=\\\"incrementMinute($event)\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span [ngStyle]=\\\"{'display': currentMinute < 10 ? 'inline': 'none'}\\\">0</span><span>{{currentMinute}}</span>\\n                        <a href=\\\"#\\\" (click)=\\\"decrementMinute($event)\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-separator\\\" *ngIf=\\\"showSeconds\\\">\\n                        <a href=\\\"#\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span>:</span>\\n                        <a href=\\\"#\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-second-picker\\\" *ngIf=\\\"showSeconds\\\">\\n                        <a href=\\\"#\\\" (click)=\\\"incrementSecond($event)\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span [ngStyle]=\\\"{'display': currentSecond < 10 ? 'inline': 'none'}\\\">0</span><span>{{currentSecond}}</span>\\n                        <a href=\\\"#\\\" (click)=\\\"decrementSecond($event)\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-ampm-picker\\\" *ngIf=\\\"hourFormat=='12'\\\">\\n                        <a href=\\\"#\\\" (click)=\\\"toggleAMPM($event)\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span>{{pm ? 'PM' : 'AM'}}</span>\\n                        <a href=\\\"#\\\" (click)=\\\"toggleAMPM($event)\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                </div>\\n                <div class=\\\"ui-datepicker-buttonbar ui-widget-header\\\" *ngIf=\\\"showButtonBar\\\">\\n                    <div class=\\\"ui-g\\\">\\n                        <div class=\\\"ui-g-6\\\">\\n                            <button type=\\\"button\\\" [label]=\\\"_locale.today\\\" (click)=\\\"onTodayButtonClick($event)\\\" pButton [ngClass]=\\\"[todayButtonStyleClass]\\\"></button>\\n                        </div>\\n                        <div class=\\\"ui-g-6\\\">\\n                            <button type=\\\"button\\\" [label]=\\\"_locale.clear\\\" (click)=\\\"onClearButtonClick($event)\\\" pButton [ngClass]=\\\"[clearButtonStyleClass]\\\"></button>\\n                        </div>\\n                    </div>\\n                </div>\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n        </span>\\n    \",\n            animations: [\n                animations_1.trigger('overlayState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [domhandler_1.DomHandler, exports.CALENDAR_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], Calendar);\n    return Calendar;\n}());\nexports.Calendar = Calendar;\nvar CalendarModule = /** @class */ (function () {\n    function CalendarModule() {\n    }\n    CalendarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule, shared_1.SharedModule],\n            exports: [Calendar, button_1.ButtonModule, shared_1.SharedModule],\n            declarations: [Calendar]\n        })\n    ], CalendarModule);\n    return CalendarModule;\n}());\nexports.CalendarModule = CalendarModule;\n//# sourceMappingURL=calendar.js.map\n\n/***/ }),\n/* 729 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar Card = /** @class */ (function () {\n    function Card(el) {\n        this.el = el;\n    }\n    Card.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Card.prototype, \"title\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Card.prototype, \"subtitle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Card.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Card.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], Card.prototype, \"headerFacet\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], Card.prototype, \"footerFacet\", void 0);\n    Card = __decorate([\n        core_1.Component({\n            selector: 'p-card',\n            template: \"\\n        <div [ngClass]=\\\"'ui-card ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-card-header\\\" *ngIf=\\\"headerFacet\\\">\\n               <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-card-body\\\">\\n                <div class=\\\"ui-card-title\\\" *ngIf=\\\"title\\\">{{title}}</div>\\n                <div class=\\\"ui-card-subtitle\\\" *ngIf=\\\"subtitle\\\">{{subtitle}}</div>\\n                <div class=\\\"ui-card-content\\\">\\n                    <ng-content></ng-content>\\n                </div>\\n                <div class=\\\"ui-card-footer\\\" *ngIf=\\\"footerFacet\\\">\\n                    <ng-content select=\\\"p-footer\\\"></ng-content>\\n                </div>\\n            </div>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], Card);\n    return Card;\n}());\nexports.Card = Card;\nvar CardModule = /** @class */ (function () {\n    function CardModule() {\n    }\n    CardModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Card, shared_1.SharedModule],\n            declarations: [Card]\n        })\n    ], CardModule);\n    return CardModule;\n}());\nexports.CardModule = CardModule;\n//# sourceMappingURL=card.js.map\n\n/***/ }),\n/* 730 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar domhandler_1 = __webpack_require__(9);\nvar shared_1 = __webpack_require__(15);\nvar common_1 = __webpack_require__(3);\nvar Carousel = /** @class */ (function () {\n    function Carousel(el, domHandler, renderer, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.numVisible = 3;\n        this.firstVisible = 0;\n        this.circular = false;\n        this.breakpoint = 560;\n        this.responsive = true;\n        this.autoplayInterval = 0;\n        this.effectDuration = '1s';\n        this.easing = 'ease-out';\n        this.pageLinks = 3;\n        this.onPage = new core_1.EventEmitter();\n        this.left = 0;\n    }\n    Carousel.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Object.defineProperty(Carousel.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            this.handleDataChange();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Carousel.prototype.handleDataChange = function () {\n        if (this.value && this.value.length) {\n            if (this.value.length && this.firstVisible >= this.value.length) {\n                this.setPage(this.totalPages - 1);\n            }\n        }\n        else {\n            this.setPage(0);\n        }\n        this.valuesChanged = true;\n    };\n    Carousel.prototype.ngAfterViewChecked = function () {\n        if (this.valuesChanged && this.containerViewChild.nativeElement.offsetParent) {\n            this.render();\n            this.valuesChanged = false;\n        }\n    };\n    Carousel.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.responsive) {\n            this.documentResponsiveListener = this.renderer.listen('window', 'resize', function (event) {\n                _this.updateState();\n            });\n        }\n    };\n    Carousel.prototype.updateLinks = function () {\n        this.anchorPageLinks = [];\n        for (var i = 0; i < this.totalPages; i++) {\n            this.anchorPageLinks.push(i);\n        }\n    };\n    Carousel.prototype.updateDropdown = function () {\n        this.selectDropdownOptions = [];\n        for (var i = 0; i < this.totalPages; i++) {\n            this.selectDropdownOptions.push(i);\n        }\n    };\n    Carousel.prototype.updateMobileDropdown = function () {\n        this.mobileDropdownOptions = [];\n        if (this.value && this.value.length) {\n            for (var i = 0; i < this.value.length; i++) {\n                this.mobileDropdownOptions.push(i);\n            }\n        }\n    };\n    Carousel.prototype.render = function () {\n        if (this.autoplayInterval) {\n            this.stopAutoplay();\n        }\n        this.items = this.domHandler.find(this.itemsViewChild.nativeElement, 'li');\n        this.calculateColumns();\n        this.calculateItemWidths();\n        if (!this.responsive) {\n            this.containerViewChild.nativeElement.style.width = (this.domHandler.width(this.containerViewChild.nativeElement)) + 'px';\n        }\n        if (this.autoplayInterval) {\n            this.circular = true;\n            this.startAutoplay();\n        }\n        this.updateMobileDropdown();\n        this.updateLinks();\n        this.updateDropdown();\n        this.cd.detectChanges();\n    };\n    Carousel.prototype.calculateItemWidths = function () {\n        var firstItem = (this.items && this.items.length) ? this.items[0] : null;\n        if (firstItem) {\n            for (var i = 0; i < this.items.length; i++) {\n                this.items[i].style.width = ((this.domHandler.innerWidth(this.viewportViewChild.nativeElement) - (this.domHandler.getHorizontalMargin(firstItem) * this.columns)) / this.columns) + 'px';\n            }\n        }\n    };\n    Carousel.prototype.calculateColumns = function () {\n        if (window.innerWidth <= this.breakpoint) {\n            this.shrinked = true;\n            this.columns = 1;\n        }\n        else {\n            this.shrinked = false;\n            this.columns = this.numVisible;\n        }\n        this.page = Math.floor(this.firstVisible / this.columns);\n    };\n    Carousel.prototype.onNextNav = function () {\n        var lastPage = (this.page === (this.totalPages - 1));\n        if (!lastPage)\n            this.setPage(this.page + 1);\n        else if (this.circular)\n            this.setPage(0);\n    };\n    Carousel.prototype.onPrevNav = function () {\n        if (this.page !== 0)\n            this.setPage(this.page - 1);\n        else if (this.circular)\n            this.setPage(this.totalPages - 1);\n    };\n    Carousel.prototype.setPageWithLink = function (event, p) {\n        this.setPage(p);\n        event.preventDefault();\n    };\n    Carousel.prototype.setPage = function (p, enforce) {\n        if (p !== this.page || enforce) {\n            this.page = p;\n            this.left = (-1 * (this.domHandler.innerWidth(this.viewportViewChild.nativeElement) * this.page));\n            this.firstVisible = this.page * this.columns;\n            this.onPage.emit({\n                page: this.page\n            });\n        }\n    };\n    Carousel.prototype.onDropdownChange = function (val) {\n        this.setPage(parseInt(val));\n    };\n    Object.defineProperty(Carousel.prototype, \"displayPageLinks\", {\n        get: function () {\n            return (this.totalPages <= this.pageLinks && !this.shrinked);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Carousel.prototype, \"displayPageDropdown\", {\n        get: function () {\n            return (this.totalPages > this.pageLinks && !this.shrinked);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Carousel.prototype, \"totalPages\", {\n        get: function () {\n            return (this.value && this.value.length) ? Math.ceil(this.value.length / this.columns) : 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Carousel.prototype.routerDisplay = function () {\n        var win = window;\n        if (win.innerWidth <= this.breakpoint)\n            return true;\n        else\n            return false;\n    };\n    Carousel.prototype.updateState = function () {\n        var win = window;\n        if (win.innerWidth <= this.breakpoint) {\n            this.shrinked = true;\n            this.columns = 1;\n        }\n        else if (this.shrinked) {\n            this.shrinked = false;\n            this.columns = this.numVisible;\n            this.updateLinks();\n            this.updateDropdown();\n        }\n        this.calculateItemWidths();\n        this.setPage(Math.floor(this.firstVisible / this.columns), true);\n    };\n    Carousel.prototype.startAutoplay = function () {\n        var _this = this;\n        this.interval = setInterval(function () {\n            if (_this.page === (_this.totalPages - 1))\n                _this.setPage(0);\n            else\n                _this.setPage(_this.page + 1);\n        }, this.autoplayInterval);\n    };\n    Carousel.prototype.stopAutoplay = function () {\n        clearInterval(this.interval);\n    };\n    Carousel.prototype.ngOnDestroy = function () {\n        if (this.documentResponsiveListener) {\n            this.documentResponsiveListener();\n        }\n        if (this.autoplayInterval) {\n            this.stopAutoplay();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"numVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"firstVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Carousel.prototype, \"headerText\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Carousel.prototype, \"circular\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"breakpoint\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Carousel.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"autoplayInterval\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Carousel.prototype, \"effectDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Carousel.prototype, \"easing\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"pageLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Carousel.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Carousel.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Carousel.prototype, \"onPage\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Carousel.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Carousel.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('viewport'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Carousel.prototype, \"viewportViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('items'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Carousel.prototype, \"itemsViewChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Carousel.prototype, \"value\", null);\n    Carousel = __decorate([\n        core_1.Component({\n            selector: 'p-carousel',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-carousel ui-widget ui-widget-content ui-corner-all':true}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-carousel-header ui-widget-header ui-corner-all\\\">\\n                <span class=\\\"ui-carousel-header-title\\\">{{headerText}}</span>\\n                <span class=\\\"ui-carousel-button ui-carousel-next-button fa fa-arrow-circle-right\\\" (click)=\\\"onNextNav()\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':(page === (totalPages-1)) && !circular}\\\" *ngIf=\\\"value&&value.length\\\"></span>\\n                <span class=\\\"ui-carousel-button ui-carousel-prev-button fa fa-arrow-circle-left\\\" (click)=\\\"onPrevNav()\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':(page === 0 && !circular)}\\\" *ngIf=\\\"value&&value.length\\\"></span>\\n                <div *ngIf=\\\"displayPageLinks\\\" class=\\\"ui-carousel-page-links\\\">\\n                    <a href=\\\"#\\\" (click)=\\\"setPageWithLink($event,i)\\\" class=\\\"ui-carousel-page-link fa fa-circle-o\\\" *ngFor=\\\"let links of anchorPageLinks;let i=index\\\" [ngClass]=\\\"{'fa-dot-circle-o':page===i}\\\"></a>\\n                </div>\\n                <select *ngIf=\\\"displayPageDropdown\\\" class=\\\"ui-carousel-dropdown ui-widget ui-state-default ui-corner-left\\\" [value]=\\\"page\\\" (change)=\\\"onDropdownChange($event.target.value)\\\">\\n                    <option *ngFor=\\\"let option of selectDropdownOptions\\\" [value]=\\\"option\\\" [selected]=\\\"value == option\\\">{{option+1}}</option>\\n                </select>\\n                <select *ngIf=\\\"responsive&&value&&value.length\\\" class=\\\"ui-carousel-mobiledropdown ui-widget ui-state-default ui-corner-left\\\" [value]=\\\"page\\\" (change)=\\\"onDropdownChange($event.target.value)\\\"\\n                    [style.display]=\\\"shrinked ? 'block' : 'none'\\\">\\n                    <option *ngFor=\\\"let option of mobileDropdownOptions\\\" [value]=\\\"option\\\" [selected]=\\\"value == option\\\">{{option+1}}</option>\\n                </select>\\n            </div>\\n            <div #viewport class=\\\"ui-carousel-viewport\\\">\\n                <ul #items class=\\\"ui-carousel-items\\\" [style.left.px]=\\\"left\\\" [style.transitionProperty]=\\\"'left'\\\" \\n                            [style.transitionDuration]=\\\"effectDuration\\\" [style.transitionTimingFunction]=\\\"easing\\\">\\n                    <li *ngFor=\\\"let item of value\\\" class=\\\"ui-carousel-item ui-widget-content ui-corner-all\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item}\\\"></ng-container>\\n                    </li>\\n                </ul>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], Carousel);\n    return Carousel;\n}());\nexports.Carousel = Carousel;\nvar CarouselModule = /** @class */ (function () {\n    function CarouselModule() {\n    }\n    CarouselModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [Carousel, shared_1.SharedModule],\n            declarations: [Carousel]\n        })\n    ], CarouselModule);\n    return CarouselModule;\n}());\nexports.CarouselModule = CarouselModule;\n//# sourceMappingURL=carousel.js.map\n\n/***/ }),\n/* 731 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar UIChart = /** @class */ (function () {\n    function UIChart(el) {\n        this.el = el;\n        this.options = {};\n        this.responsive = true;\n        this.onDataSelect = new core_1.EventEmitter();\n    }\n    Object.defineProperty(UIChart.prototype, \"data\", {\n        get: function () {\n            return this._data;\n        },\n        set: function (val) {\n            this._data = val;\n            this.reinit();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    UIChart.prototype.ngAfterViewInit = function () {\n        this.initChart();\n        this.initialized = true;\n    };\n    UIChart.prototype.onCanvasClick = function (event) {\n        if (this.chart) {\n            var element = this.chart.getElementAtEvent(event);\n            var dataset = this.chart.getDatasetAtEvent(event);\n            if (element && element[0] && dataset) {\n                this.onDataSelect.emit({ originalEvent: event, element: element[0], dataset: dataset });\n            }\n        }\n    };\n    UIChart.prototype.initChart = function () {\n        var opts = this.options || {};\n        opts.responsive = this.responsive;\n        this.chart = new Chart(this.el.nativeElement.children[0].children[0], {\n            type: this.type,\n            data: this.data,\n            options: this.options\n        });\n    };\n    UIChart.prototype.getCanvas = function () {\n        return this.el.nativeElement.children[0].children[0];\n    };\n    UIChart.prototype.getBase64Image = function () {\n        return this.chart.toBase64Image();\n    };\n    UIChart.prototype.generateLegend = function () {\n        if (this.chart) {\n            this.chart.generateLegend();\n        }\n    };\n    UIChart.prototype.refresh = function () {\n        if (this.chart) {\n            this.chart.update();\n        }\n    };\n    UIChart.prototype.reinit = function () {\n        if (this.chart) {\n            this.chart.destroy();\n            this.initChart();\n        }\n    };\n    UIChart.prototype.ngOnDestroy = function () {\n        if (this.chart) {\n            this.chart.destroy();\n            this.initialized = false;\n            this.chart = null;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIChart.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UIChart.prototype, \"options\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIChart.prototype, \"width\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIChart.prototype, \"height\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], UIChart.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], UIChart.prototype, \"onDataSelect\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], UIChart.prototype, \"data\", null);\n    UIChart = __decorate([\n        core_1.Component({\n            selector: 'p-chart',\n            template: \"\\n        <div style=\\\"position:relative\\\" [style.width]=\\\"responsive ? null : width\\\" [style.height]=\\\"responsive ? null : height\\\">\\n            <canvas [attr.width]=\\\"responsive ? null : width\\\" [attr.height]=\\\"responsive ? null : height\\\" (click)=\\\"onCanvasClick($event)\\\"></canvas>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], UIChart);\n    return UIChart;\n}());\nexports.UIChart = UIChart;\nvar ChartModule = /** @class */ (function () {\n    function ChartModule() {\n    }\n    ChartModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [UIChart],\n            declarations: [UIChart]\n        })\n    ], ChartModule);\n    return ChartModule;\n}());\nexports.ChartModule = ChartModule;\n//# sourceMappingURL=chart.js.map\n\n/***/ }),\n/* 732 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar forms_1 = __webpack_require__(17);\nexports.CHECKBOX_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Checkbox; }),\n    multi: true\n};\nvar Checkbox = /** @class */ (function () {\n    function Checkbox(cd) {\n        this.cd = cd;\n        this.onChange = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.focused = false;\n        this.checked = false;\n    }\n    Checkbox.prototype.onClick = function (event, checkbox, focus) {\n        event.preventDefault();\n        if (this.disabled) {\n            return;\n        }\n        this.checked = !this.checked;\n        this.updateModel();\n        if (focus) {\n            checkbox.focus();\n        }\n    };\n    Checkbox.prototype.updateModel = function () {\n        if (!this.binary) {\n            if (this.checked)\n                this.addValue();\n            else\n                this.removeValue();\n            this.onModelChange(this.model);\n            if (this.formControl) {\n                this.formControl.setValue(this.model);\n            }\n        }\n        else {\n            this.onModelChange(this.checked);\n        }\n        this.onChange.emit(this.checked);\n    };\n    Checkbox.prototype.handleChange = function (event) {\n        this.checked = event.target.checked;\n        this.updateModel();\n    };\n    Checkbox.prototype.isChecked = function () {\n        if (this.binary)\n            return this.model;\n        else\n            return this.model && this.model.indexOf(this.value) > -1;\n    };\n    Checkbox.prototype.removeValue = function () {\n        var _this = this;\n        this.model = this.model.filter(function (val) { return val !== _this.value; });\n    };\n    Checkbox.prototype.addValue = function () {\n        if (this.model)\n            this.model = this.model.concat([this.value]);\n        else\n            this.model = [this.value];\n    };\n    Checkbox.prototype.onFocus = function (event) {\n        this.focused = true;\n    };\n    Checkbox.prototype.onBlur = function (event) {\n        this.focused = false;\n        this.onModelTouched();\n    };\n    Checkbox.prototype.writeValue = function (model) {\n        this.model = model;\n        this.checked = this.isChecked();\n        this.cd.markForCheck();\n    };\n    Checkbox.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Checkbox.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Checkbox.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Checkbox.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Checkbox.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"binary\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Checkbox.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Checkbox.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"labelStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", forms_1.FormControl)\n    ], Checkbox.prototype, \"formControl\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Checkbox.prototype, \"onChange\", void 0);\n    Checkbox = __decorate([\n        core_1.Component({\n            selector: 'p-checkbox',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-chkbox ui-widget'\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #cb type=\\\"checkbox\\\" [attr.id]=\\\"inputId\\\" [name]=\\\"name\\\" [value]=\\\"value\\\" [checked]=\\\"checked\\\" (focus)=\\\"onFocus($event)\\\" (blur)=\\\"onBlur($event)\\\"\\n                [ngClass]=\\\"{'ui-state-focus':focused}\\\" (change)=\\\"handleChange($event)\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\">\\n            </div>\\n            <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" (click)=\\\"onClick($event,cb,true)\\\"\\n                        [ngClass]=\\\"{'ui-state-active':checked,'ui-state-disabled':disabled,'ui-state-focus':focused}\\\">\\n                <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':checked}\\\"></span>\\n            </div>\\n        </div>\\n        <label (click)=\\\"onClick($event,cb,true)\\\" [class]=\\\"labelStyleClass\\\"\\n                [ngClass]=\\\"{'ui-chkbox-label': true, 'ui-label-active':checked, 'ui-label-disabled':disabled, 'ui-label-focus':focused}\\\"\\n                *ngIf=\\\"label\\\" [attr.for]=\\\"inputId\\\">{{label}}</label>\\n    \",\n            providers: [exports.CHECKBOX_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ChangeDetectorRef])\n    ], Checkbox);\n    return Checkbox;\n}());\nexports.Checkbox = Checkbox;\nvar CheckboxModule = /** @class */ (function () {\n    function CheckboxModule() {\n    }\n    CheckboxModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Checkbox],\n            declarations: [Checkbox]\n        })\n    ], CheckboxModule);\n    return CheckboxModule;\n}());\nexports.CheckboxModule = CheckboxModule;\n//# sourceMappingURL=checkbox.js.map\n\n/***/ }),\n/* 733 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar CodeHighlighter = /** @class */ (function () {\n    function CodeHighlighter(el) {\n        this.el = el;\n    }\n    CodeHighlighter.prototype.ngAfterViewInit = function () {\n        if (window['Prism']) {\n            window['Prism'].highlightElement(this.el.nativeElement);\n        }\n    };\n    CodeHighlighter = __decorate([\n        core_1.Directive({\n            selector: '[pCode]'\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], CodeHighlighter);\n    return CodeHighlighter;\n}());\nexports.CodeHighlighter = CodeHighlighter;\nvar CodeHighlighterModule = /** @class */ (function () {\n    function CodeHighlighterModule() {\n    }\n    CodeHighlighterModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [CodeHighlighter],\n            declarations: [CodeHighlighter]\n        })\n    ], CodeHighlighterModule);\n    return CodeHighlighterModule;\n}());\nexports.CodeHighlighterModule = CodeHighlighterModule;\n//# sourceMappingURL=codehighlighter.js.map\n\n/***/ }),\n/* 734 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar forms_1 = __webpack_require__(17);\nexports.COLORPICKER_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return ColorPicker; }),\n    multi: true\n};\nvar ColorPicker = /** @class */ (function () {\n    function ColorPicker(el, domHandler, renderer, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.format = 'hex';\n        this.onChange = new core_1.EventEmitter();\n        this.defaultColor = 'ff0000';\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    ColorPicker.prototype.ngAfterViewInit = function () {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panelViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.panelViewChild.nativeElement, this.appendTo);\n        }\n    };\n    ColorPicker.prototype.ngAfterViewChecked = function () {\n        if (this.shown) {\n            this.onShow();\n            this.shown = false;\n        }\n    };\n    ColorPicker.prototype.onHueMousedown = function (event) {\n        if (this.disabled) {\n            return;\n        }\n        this.bindDocumentMousemoveListener();\n        this.bindDocumentMouseupListener();\n        this.hueDragging = true;\n        this.pickHue(event);\n    };\n    ColorPicker.prototype.pickHue = function (event) {\n        var top = this.hueViewChild.nativeElement.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);\n        this.value = this.validateHSB({\n            h: Math.floor(360 * (150 - Math.max(0, Math.min(150, (event.pageY - top)))) / 150),\n            s: this.value.s,\n            b: this.value.b\n        });\n        this.updateColorSelector();\n        this.updateUI();\n        this.updateModel();\n        this.onChange.emit({ originalEvent: event, value: this.getValueToUpdate() });\n    };\n    ColorPicker.prototype.onColorMousedown = function (event) {\n        if (this.disabled) {\n            return;\n        }\n        this.bindDocumentMousemoveListener();\n        this.bindDocumentMouseupListener();\n        this.colorDragging = true;\n        this.pickColor(event);\n    };\n    ColorPicker.prototype.pickColor = function (event) {\n        var rect = this.colorSelectorViewChild.nativeElement.getBoundingClientRect();\n        var top = rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);\n        var left = rect.left + document.body.scrollLeft;\n        var saturation = Math.floor(100 * (Math.max(0, Math.min(150, (event.pageX - left)))) / 150);\n        var brightness = Math.floor(100 * (150 - Math.max(0, Math.min(150, (event.pageY - top)))) / 150);\n        this.value = this.validateHSB({\n            h: this.value.h,\n            s: saturation,\n            b: brightness\n        });\n        this.updateUI();\n        this.updateModel();\n        this.onChange.emit({ originalEvent: event, value: this.getValueToUpdate() });\n    };\n    ColorPicker.prototype.getValueToUpdate = function () {\n        var val;\n        switch (this.format) {\n            case 'hex':\n                val = '#' + this.HSBtoHEX(this.value);\n                break;\n            case 'rgb':\n                val = this.HSBtoRGB(this.value);\n                break;\n            case 'hsb':\n                val = this.value;\n                break;\n        }\n        return val;\n    };\n    ColorPicker.prototype.updateModel = function () {\n        this.onModelChange(this.getValueToUpdate());\n    };\n    ColorPicker.prototype.writeValue = function (value) {\n        if (value) {\n            switch (this.format) {\n                case 'hex':\n                    this.value = this.HEXtoHSB(value);\n                    break;\n                case 'rgb':\n                    this.value = this.RGBtoHSB(value);\n                    break;\n                case 'hsb':\n                    this.value = value;\n                    break;\n            }\n        }\n        else {\n            this.value = this.HEXtoHSB(this.defaultColor);\n        }\n        this.updateColorSelector();\n        this.updateUI();\n    };\n    ColorPicker.prototype.updateColorSelector = function () {\n        this.colorSelectorViewChild.nativeElement.style.backgroundColor = '#' + this.HSBtoHEX(this.value);\n    };\n    ColorPicker.prototype.updateUI = function () {\n        this.colorHandleViewChild.nativeElement.style.left = Math.floor(150 * this.value.s / 100) + 'px';\n        this.colorHandleViewChild.nativeElement.style.top = Math.floor(150 * (100 - this.value.b) / 100) + 'px';\n        this.hueHandleViewChild.nativeElement.style.top = Math.floor(150 - (150 * this.value.h / 360)) + 'px';\n        this.inputBgColor = '#' + this.HSBtoHEX(this.value);\n    };\n    ColorPicker.prototype.onInputFocus = function () {\n        this.onModelTouched();\n    };\n    ColorPicker.prototype.show = function () {\n        this.panelViewChild.nativeElement.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n        this.panelVisible = true;\n        this.shown = true;\n    };\n    ColorPicker.prototype.hide = function () {\n        this.panelVisible = false;\n        this.unbindDocumentClickListener();\n    };\n    ColorPicker.prototype.onShow = function () {\n        this.alignPanel();\n        this.bindDocumentClickListener();\n    };\n    ColorPicker.prototype.alignPanel = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.panelViewChild.nativeElement, this.inputViewChild.nativeElement);\n        else\n            this.domHandler.relativePosition(this.panelViewChild.nativeElement, this.inputViewChild.nativeElement);\n    };\n    ColorPicker.prototype.onInputClick = function () {\n        this.selfClick = true;\n        this.togglePanel();\n    };\n    ColorPicker.prototype.togglePanel = function () {\n        if (!this.panelVisible)\n            this.show();\n        else\n            this.hide();\n    };\n    ColorPicker.prototype.onInputKeydown = function (event) {\n        switch (event.which) {\n            //space\n            case 32:\n                this.togglePanel();\n                event.preventDefault();\n                break;\n            //escape and tab\n            case 27:\n            case 9:\n                this.hide();\n                break;\n        }\n    };\n    ColorPicker.prototype.onPanelClick = function () {\n        this.selfClick = true;\n    };\n    ColorPicker.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    ColorPicker.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    ColorPicker.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    ColorPicker.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.selfClick) {\n                    _this.panelVisible = false;\n                    _this.unbindDocumentClickListener();\n                }\n                _this.selfClick = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    ColorPicker.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    ColorPicker.prototype.bindDocumentMousemoveListener = function () {\n        var _this = this;\n        if (!this.documentMousemoveListener) {\n            this.documentMousemoveListener = this.renderer.listen('document', 'mousemove', function (event) {\n                if (_this.colorDragging) {\n                    _this.pickColor(event);\n                }\n                if (_this.hueDragging) {\n                    _this.pickHue(event);\n                }\n            });\n        }\n    };\n    ColorPicker.prototype.unbindDocumentMousemoveListener = function () {\n        if (this.documentMousemoveListener) {\n            this.documentMousemoveListener();\n            this.documentMousemoveListener = null;\n        }\n    };\n    ColorPicker.prototype.bindDocumentMouseupListener = function () {\n        var _this = this;\n        if (!this.documentMouseupListener) {\n            this.documentMouseupListener = this.renderer.listen('document', 'mouseup', function () {\n                _this.colorDragging = false;\n                _this.hueDragging = false;\n                _this.unbindDocumentMousemoveListener();\n                _this.unbindDocumentMouseupListener();\n            });\n        }\n    };\n    ColorPicker.prototype.unbindDocumentMouseupListener = function () {\n        if (this.documentMouseupListener) {\n            this.documentMouseupListener();\n            this.documentMouseupListener = null;\n        }\n    };\n    ColorPicker.prototype.validateHSB = function (hsb) {\n        return {\n            h: Math.min(360, Math.max(0, hsb.h)),\n            s: Math.min(100, Math.max(0, hsb.s)),\n            b: Math.min(100, Math.max(0, hsb.b))\n        };\n    };\n    ColorPicker.prototype.validateRGB = function (rgb) {\n        return {\n            r: Math.min(255, Math.max(0, rgb.r)),\n            g: Math.min(255, Math.max(0, rgb.g)),\n            b: Math.min(255, Math.max(0, rgb.b))\n        };\n    };\n    ColorPicker.prototype.validateHEX = function (hex) {\n        var len = 6 - hex.length;\n        if (len > 0) {\n            var o = [];\n            for (var i = 0; i < len; i++) {\n                o.push('0');\n            }\n            o.push(hex);\n            hex = o.join('');\n        }\n        return hex;\n    };\n    ColorPicker.prototype.HEXtoRGB = function (hex) {\n        var hexValue = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);\n        return { r: hexValue >> 16, g: (hexValue & 0x00FF00) >> 8, b: (hexValue & 0x0000FF) };\n    };\n    ColorPicker.prototype.HEXtoHSB = function (hex) {\n        return this.RGBtoHSB(this.HEXtoRGB(hex));\n    };\n    ColorPicker.prototype.RGBtoHSB = function (rgb) {\n        var hsb = {\n            h: 0,\n            s: 0,\n            b: 0\n        };\n        var min = Math.min(rgb.r, rgb.g, rgb.b);\n        var max = Math.max(rgb.r, rgb.g, rgb.b);\n        var delta = max - min;\n        hsb.b = max;\n        if (max != 0) {\n        }\n        hsb.s = max != 0 ? 255 * delta / max : 0;\n        if (hsb.s != 0) {\n            if (rgb.r == max) {\n                hsb.h = (rgb.g - rgb.b) / delta;\n            }\n            else if (rgb.g == max) {\n                hsb.h = 2 + (rgb.b - rgb.r) / delta;\n            }\n            else {\n                hsb.h = 4 + (rgb.r - rgb.g) / delta;\n            }\n        }\n        else {\n            hsb.h = -1;\n        }\n        hsb.h *= 60;\n        if (hsb.h < 0) {\n            hsb.h += 360;\n        }\n        hsb.s *= 100 / 255;\n        hsb.b *= 100 / 255;\n        return hsb;\n    };\n    ColorPicker.prototype.HSBtoRGB = function (hsb) {\n        var rgb = {\n            r: null, g: null, b: null\n        };\n        var h = Math.round(hsb.h);\n        var s = Math.round(hsb.s * 255 / 100);\n        var v = Math.round(hsb.b * 255 / 100);\n        if (s == 0) {\n            rgb = {\n                r: v,\n                g: v,\n                b: v\n            };\n        }\n        else {\n            var t1 = v;\n            var t2 = (255 - s) * v / 255;\n            var t3 = (t1 - t2) * (h % 60) / 60;\n            if (h == 360)\n                h = 0;\n            if (h < 60) {\n                rgb.r = t1;\n                rgb.b = t2;\n                rgb.g = t2 + t3;\n            }\n            else if (h < 120) {\n                rgb.g = t1;\n                rgb.b = t2;\n                rgb.r = t1 - t3;\n            }\n            else if (h < 180) {\n                rgb.g = t1;\n                rgb.r = t2;\n                rgb.b = t2 + t3;\n            }\n            else if (h < 240) {\n                rgb.b = t1;\n                rgb.r = t2;\n                rgb.g = t1 - t3;\n            }\n            else if (h < 300) {\n                rgb.b = t1;\n                rgb.g = t2;\n                rgb.r = t2 + t3;\n            }\n            else if (h < 360) {\n                rgb.r = t1;\n                rgb.g = t2;\n                rgb.b = t1 - t3;\n            }\n            else {\n                rgb.r = 0;\n                rgb.g = 0;\n                rgb.b = 0;\n            }\n        }\n        return { r: Math.round(rgb.r), g: Math.round(rgb.g), b: Math.round(rgb.b) };\n    };\n    ColorPicker.prototype.RGBtoHEX = function (rgb) {\n        var hex = [\n            rgb.r.toString(16),\n            rgb.g.toString(16),\n            rgb.b.toString(16)\n        ];\n        for (var key in hex) {\n            if (hex[key].length == 1) {\n                hex[key] = '0' + hex[key];\n            }\n        }\n        return hex.join('');\n    };\n    ColorPicker.prototype.HSBtoHEX = function (hsb) {\n        return this.RGBtoHEX(this.HSBtoRGB(hsb));\n    };\n    ColorPicker.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panelViewChild.nativeElement);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ColorPicker.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ColorPicker.prototype, \"inline\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"format\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ColorPicker.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], ColorPicker.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.ViewChild('panel'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"panelViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('colorSelector'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"colorSelectorViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('colorHandle'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"colorHandleViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('hue'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"hueViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('hueHandle'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"hueHandleViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('input'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"inputViewChild\", void 0);\n    ColorPicker = __decorate([\n        core_1.Component({\n            selector: 'p-colorPicker',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [ngClass]=\\\"{'ui-colorpicker ui-widget':true,'ui-colorpicker-overlay':!inline,'ui-colorpicker-dragging':colorDragging||hueDragging}\\\">\\n            <input #input type=\\\"text\\\" *ngIf=\\\"!inline\\\" class=\\\"ui-colorpicker-preview ui-inputtext ui-state-default ui-corner-all\\\" readonly=\\\"readonly\\\" [ngClass]=\\\"{'ui-state-disabled': disabled}\\\"\\n                (focus)=\\\"onInputFocus()\\\" (click)=\\\"onInputClick()\\\" (keydown)=\\\"onInputKeydown($event)\\\" [attr.id]=\\\"inputId\\\" [attr.tabindex]=\\\"tabindex\\\" [disabled]=\\\"disabled\\\"\\n                [style.backgroundColor]=\\\"inputBgColor\\\">\\n            <div #panel [ngClass]=\\\"{'ui-colorpicker-panel ui-corner-all': true, 'ui-colorpicker-overlay-panel ui-shadow':!inline, 'ui-state-disabled': disabled}\\\" (click)=\\\"onPanelClick()\\\"\\n                [@panelState]=\\\"inline ? 'visible' : (panelVisible ? 'visible' : 'hidden')\\\" [style.display]=\\\"inline ? 'block' : (panelVisible ? 'block' : 'none')\\\">\\n                <div class=\\\"ui-colorpicker-content\\\">\\n                    <div #colorSelector class=\\\"ui-colorpicker-color-selector\\\" (mousedown)=\\\"onColorMousedown($event)\\\">\\n                        <div class=\\\"ui-colorpicker-color\\\">\\n                            <div #colorHandle class=\\\"ui-colorpicker-color-handle\\\"></div>\\n                        </div>\\n                    </div>\\n                    <div #hue class=\\\"ui-colorpicker-hue\\\" (mousedown)=\\\"onHueMousedown($event)\\\">\\n                        <div #hueHandle class=\\\"ui-colorpicker-hue-handle\\\"></div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler, exports.COLORPICKER_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], ColorPicker);\n    return ColorPicker;\n}());\nexports.ColorPicker = ColorPicker;\nvar ColorPickerModule = /** @class */ (function () {\n    function ColorPickerModule() {\n    }\n    ColorPickerModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ColorPicker],\n            declarations: [ColorPicker]\n        })\n    ], ColorPickerModule);\n    return ColorPickerModule;\n}());\nexports.ColorPickerModule = ColorPickerModule;\n//# sourceMappingURL=colorpicker.js.map\n\n/***/ }),\n/* 735 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar shared_1 = __webpack_require__(15);\nvar button_1 = __webpack_require__(37);\nvar confirmationservice_1 = __webpack_require__(231);\nvar ConfirmDialog = /** @class */ (function () {\n    function ConfirmDialog(el, domHandler, renderer, confirmationService, zone) {\n        var _this = this;\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.confirmationService = confirmationService;\n        this.zone = zone;\n        this.acceptIcon = 'fa-check';\n        this.acceptLabel = 'Yes';\n        this.acceptVisible = true;\n        this.rejectIcon = 'fa-close';\n        this.rejectLabel = 'No';\n        this.rejectVisible = true;\n        this.closeOnEscape = true;\n        this.closable = true;\n        this.responsive = true;\n        this.subscription = confirmationService.requireConfirmation$.subscribe(function (confirmation) {\n            if (confirmation.key === _this.key) {\n                _this.confirmation = confirmation;\n                _this.message = _this.confirmation.message || _this.message;\n                _this.icon = _this.confirmation.icon || _this.icon;\n                _this.header = _this.confirmation.header || _this.header;\n                _this.rejectVisible = _this.confirmation.rejectVisible == null ? _this.rejectVisible : _this.confirmation.rejectVisible;\n                _this.acceptVisible = _this.confirmation.acceptVisible == null ? _this.acceptVisible : _this.confirmation.acceptVisible;\n                _this.acceptLabel = _this.confirmation.acceptLabel || _this.acceptLabel;\n                _this.rejectLabel = _this.confirmation.rejectLabel || _this.rejectLabel;\n                if (_this.confirmation.accept) {\n                    _this.confirmation.acceptEvent = new core_1.EventEmitter();\n                    _this.confirmation.acceptEvent.subscribe(_this.confirmation.accept);\n                }\n                if (_this.confirmation.reject) {\n                    _this.confirmation.rejectEvent = new core_1.EventEmitter();\n                    _this.confirmation.rejectEvent.subscribe(_this.confirmation.reject);\n                }\n                _this.visible = true;\n            }\n        });\n    }\n    Object.defineProperty(ConfirmDialog.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (val) {\n            this._visible = val;\n            if (this._visible) {\n                if (!this.positionInitialized) {\n                    this.center();\n                    this.positionInitialized = true;\n                }\n                this.el.nativeElement.children[0].style.zIndex = ++domhandler_1.DomHandler.zindex;\n                this.bindGlobalListeners();\n                this.executePostShowActions = true;\n            }\n            if (this._visible)\n                this.enableModality();\n            else\n                this.disableModality();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ConfirmDialog.prototype.ngAfterViewInit = function () {\n        this.contentContainer = this.domHandler.findSingle(this.el.nativeElement, '.ui-dialog-content');\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.el.nativeElement);\n            else\n                this.domHandler.appendChild(this.el.nativeElement, this.appendTo);\n        }\n    };\n    ConfirmDialog.prototype.ngAfterViewChecked = function () {\n        if (this.executePostShowActions) {\n            this.domHandler.findSingle(this.el.nativeElement.children[0], 'button').focus();\n            this.executePostShowActions = false;\n        }\n    };\n    ConfirmDialog.prototype.center = function () {\n        var container = this.el.nativeElement.children[0];\n        var elementWidth = this.domHandler.getOuterWidth(container);\n        var elementHeight = this.domHandler.getOuterHeight(container);\n        if (elementWidth == 0 && elementHeight == 0) {\n            container.style.visibility = 'hidden';\n            container.style.display = 'block';\n            elementWidth = this.domHandler.getOuterWidth(container);\n            elementHeight = this.domHandler.getOuterHeight(container);\n            container.style.display = 'none';\n            container.style.visibility = 'visible';\n        }\n        var viewport = this.domHandler.getViewport();\n        var x = (viewport.width - elementWidth) / 2;\n        var y = (viewport.height - elementHeight) / 2;\n        container.style.left = x + 'px';\n        container.style.top = y + 'px';\n    };\n    ConfirmDialog.prototype.enableModality = function () {\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = this.el.nativeElement.children[0].style.zIndex - 1;\n            this.domHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-dialog-mask');\n            document.body.appendChild(this.mask);\n            this.domHandler.addClass(document.body, 'ui-overflow-hidden');\n        }\n    };\n    ConfirmDialog.prototype.disableModality = function () {\n        if (this.mask) {\n            document.body.removeChild(this.mask);\n            this.domHandler.removeClass(document.body, 'ui-overflow-hidden');\n            this.mask = null;\n        }\n    };\n    ConfirmDialog.prototype.close = function (event) {\n        if (this.confirmation.rejectEvent) {\n            this.confirmation.rejectEvent.emit();\n        }\n        this.hide();\n        event.preventDefault();\n    };\n    ConfirmDialog.prototype.hide = function () {\n        this.visible = false;\n        this.unbindGlobalListeners();\n    };\n    ConfirmDialog.prototype.moveOnTop = function () {\n        this.el.nativeElement.children[0].style.zIndex = ++domhandler_1.DomHandler.zindex;\n    };\n    ConfirmDialog.prototype.bindGlobalListeners = function () {\n        var _this = this;\n        if (this.closeOnEscape && this.closable && !this.documentEscapeListener) {\n            this.documentEscapeListener = this.renderer.listen('document', 'keydown', function (event) {\n                if (event.which == 27) {\n                    if (_this.el.nativeElement.children[0].style.zIndex == domhandler_1.DomHandler.zindex && _this.visible) {\n                        _this.close(event);\n                    }\n                }\n            });\n        }\n        if (this.responsive) {\n            this.zone.runOutsideAngular(function () {\n                _this.documentResponsiveListener = _this.center.bind(_this);\n                window.addEventListener('resize', _this.documentResponsiveListener);\n            });\n        }\n    };\n    ConfirmDialog.prototype.unbindGlobalListeners = function () {\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n        if (this.documentResponsiveListener) {\n            window.removeEventListener('resize', this.documentResponsiveListener);\n            this.documentResponsiveListener = null;\n        }\n    };\n    ConfirmDialog.prototype.ngOnDestroy = function () {\n        this.disableModality();\n        if (this.documentResponsiveListener) {\n            this.documentResponsiveListener();\n        }\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n        }\n        if (this.appendTo && this.appendTo === 'body') {\n            document.body.removeChild(this.el.nativeElement);\n        }\n        this.subscription.unsubscribe();\n    };\n    ConfirmDialog.prototype.accept = function () {\n        if (this.confirmation.acceptEvent) {\n            this.confirmation.acceptEvent.emit();\n        }\n        this.hide();\n        this.confirmation = null;\n    };\n    ConfirmDialog.prototype.reject = function () {\n        if (this.confirmation.rejectEvent) {\n            this.confirmation.rejectEvent.emit();\n        }\n        this.hide();\n        this.confirmation = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"icon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"message\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"acceptIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"acceptLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"acceptVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"rejectIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"rejectLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"rejectVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"acceptButtonStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"rejectButtonStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ConfirmDialog.prototype, \"width\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ConfirmDialog.prototype, \"height\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"closeOnEscape\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"rtl\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ConfirmDialog.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"key\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], ConfirmDialog.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], ConfirmDialog.prototype, \"visible\", null);\n    ConfirmDialog = __decorate([\n        core_1.Component({\n            selector: 'p-confirmDialog',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-dialog ui-confirmdialog ui-widget ui-widget-content ui-corner-all ui-shadow':true,'ui-dialog-rtl':rtl}\\\" \\n            [style.display]=\\\"visible ? 'block' : 'none'\\\" [style.width.px]=\\\"width\\\" [style.height.px]=\\\"height\\\" (mousedown)=\\\"moveOnTop()\\\" [@dialogState]=\\\"visible ? 'visible' : 'hidden'\\\">\\n            <div class=\\\"ui-dialog-titlebar ui-widget-header ui-helper-clearfix ui-corner-top\\\">\\n                <span class=\\\"ui-dialog-title\\\" *ngIf=\\\"header\\\">{{header}}</span>\\n                <a *ngIf=\\\"closable\\\" [ngClass]=\\\"{'ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all':true}\\\" href=\\\"#\\\" role=\\\"button\\\" (click)=\\\"close($event)\\\">\\n                    <span class=\\\"fa fa-fw fa-close\\\"></span>\\n                </a>\\n            </div>\\n            <div class=\\\"ui-dialog-content ui-widget-content\\\">\\n                <i [ngClass]=\\\"'fa'\\\" [class]=\\\"icon\\\" *ngIf=\\\"icon\\\"></i>\\n                <span class=\\\"ui-confirmdialog-message\\\" [innerHTML]=\\\"message\\\"></span>\\n            </div>\\n            <div class=\\\"ui-dialog-footer ui-widget-content\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-dialog-footer ui-widget-content\\\" *ngIf=\\\"!footer\\\">\\n                <button type=\\\"button\\\" pButton [icon]=\\\"acceptIcon\\\" [label]=\\\"acceptLabel\\\" (click)=\\\"accept()\\\" [class]=\\\"acceptButtonStyleClass\\\" *ngIf=\\\"acceptVisible\\\"></button>\\n                <button type=\\\"button\\\" pButton [icon]=\\\"rejectIcon\\\" [label]=\\\"rejectLabel\\\" (click)=\\\"reject()\\\" [class]=\\\"rejectButtonStyleClass\\\" *ngIf=\\\"rejectVisible\\\"></button>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('dialogState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler,\n            core_1.Renderer2, confirmationservice_1.ConfirmationService, core_1.NgZone])\n    ], ConfirmDialog);\n    return ConfirmDialog;\n}());\nexports.ConfirmDialog = ConfirmDialog;\nvar ConfirmDialogModule = /** @class */ (function () {\n    function ConfirmDialogModule() {\n    }\n    ConfirmDialogModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule],\n            exports: [ConfirmDialog, button_1.ButtonModule, shared_1.SharedModule],\n            declarations: [ConfirmDialog]\n        })\n    ], ConfirmDialogModule);\n    return ConfirmDialogModule;\n}());\nexports.ConfirmDialogModule = ConfirmDialogModule;\n//# sourceMappingURL=confirmdialog.js.map\n\n/***/ }),\n/* 736 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar router_1 = __webpack_require__(5);\nvar ContextMenuSub = /** @class */ (function () {\n    function ContextMenuSub(domHandler, contextMenu) {\n        this.domHandler = domHandler;\n        this.contextMenu = contextMenu;\n    }\n    ContextMenuSub.prototype.onItemMouseEnter = function (event, item, menuitem) {\n        if (menuitem.disabled) {\n            return;\n        }\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n        this.activeItem = item;\n        var nextElement = item.children[0].nextElementSibling;\n        if (nextElement) {\n            var sublist = nextElement.children[0];\n            sublist.style.zIndex = ++domhandler_1.DomHandler.zindex;\n            this.position(sublist, item);\n        }\n    };\n    ContextMenuSub.prototype.onItemMouseLeave = function (event, link) {\n        var _this = this;\n        this.hideTimeout = setTimeout(function () {\n            _this.activeItem = null;\n        }, 1000);\n    };\n    ContextMenuSub.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    };\n    ContextMenuSub.prototype.listClick = function (event) {\n        this.activeItem = null;\n    };\n    ContextMenuSub.prototype.position = function (sublist, item) {\n        this.containerLeft = this.domHandler.getOffset(item.parentElement);\n        var viewport = this.domHandler.getViewport();\n        var sublistWidth = sublist.offsetParent ? sublist.offsetWidth : this.domHandler.getHiddenElementOuterWidth(sublist);\n        var itemOuterWidth = this.domHandler.getOuterWidth(item.children[0]);\n        sublist.style.top = '0px';\n        if ((parseInt(this.containerLeft.left) + itemOuterWidth + sublistWidth) > (viewport.width - this.calculateScrollbarWidth())) {\n            sublist.style.left = -sublistWidth + 'px';\n        }\n        else {\n            sublist.style.left = itemOuterWidth + 'px';\n        }\n    };\n    ContextMenuSub.prototype.calculateScrollbarWidth = function () {\n        var scrollDiv = document.createElement(\"div\");\n        scrollDiv.className = \"ui-scrollbar-measure\";\n        document.body.appendChild(scrollDiv);\n        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n        document.body.removeChild(scrollDiv);\n        return scrollbarWidth;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ContextMenuSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ContextMenuSub.prototype, \"root\", void 0);\n    ContextMenuSub = __decorate([\n        core_1.Component({\n            selector: 'p-contextMenuSub',\n            template: \"\\n        <ul [ngClass]=\\\"{'ui-widget-content ui-corner-all ui-submenu-list ui-shadow':!root}\\\" class=\\\"ui-menu-list\\\" (click)=\\\"listClick($event)\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"(root ? item : item.items)\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': child.visible === false}\\\">\\n                <li *ngIf=\\\"!child.separator\\\" #item [ngClass]=\\\"{'ui-menuitem ui-corner-all':true,'ui-menuitem-active':item==activeItem,'ui-helper-hidden': child.visible === false}\\\"\\n                    (mouseenter)=\\\"onItemMouseEnter($event,item,child)\\\" (mouseleave)=\\\"onItemMouseLeave($event,item)\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\" (click)=\\\"itemClick($event, child)\\\"\\n                        [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':child.disabled}\\\" [ngStyle]=\\\"child.style\\\" [class]=\\\"child.styleClass\\\">\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" \\n                        [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        (click)=\\\"itemClick($event, child)\\\" [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':child.disabled}\\\" \\n                        [ngStyle]=\\\"child.style\\\" [class]=\\\"child.styleClass\\\">\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                    </a>\\n                    <p-contextMenuSub class=\\\"ui-submenu\\\" [item]=\\\"child\\\" *ngIf=\\\"child.items\\\"></p-contextMenuSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __param(1, core_1.Inject(core_1.forwardRef(function () { return ContextMenu; }))),\n        __metadata(\"design:paramtypes\", [domhandler_1.DomHandler, ContextMenu])\n    ], ContextMenuSub);\n    return ContextMenuSub;\n}());\nexports.ContextMenuSub = ContextMenuSub;\nvar ContextMenu = /** @class */ (function () {\n    function ContextMenu(el, domHandler, renderer, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.zone = zone;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    ContextMenu.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.global) {\n            this.rightClickListener = this.renderer.listen('document', 'contextmenu', function (event) {\n                _this.show(event);\n                event.preventDefault();\n            });\n        }\n        else if (this.target) {\n            this.rightClickListener = this.renderer.listen(this.target, 'contextmenu', function (event) {\n                _this.show(event);\n                event.preventDefault();\n                event.stopPropagation();\n            });\n        }\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.containerViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);\n        }\n    };\n    ContextMenu.prototype.show = function (event) {\n        this.position(event);\n        this.moveOnTop();\n        this.containerViewChild.nativeElement.style.display = 'block';\n        this.domHandler.fadeIn(this.containerViewChild.nativeElement, 250);\n        this.bindGlobalListeners();\n        if (event) {\n            event.preventDefault();\n        }\n    };\n    ContextMenu.prototype.hide = function () {\n        this.containerViewChild.nativeElement.style.display = 'none';\n        this.unbindGlobalListeners();\n    };\n    ContextMenu.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    ContextMenu.prototype.toggle = function (event) {\n        if (this.containerViewChild.nativeElement.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n    };\n    ContextMenu.prototype.position = function (event) {\n        if (event) {\n            var left = event.pageX + 1;\n            var top_1 = event.pageY + 1;\n            var width = this.containerViewChild.nativeElement.offsetParent ? this.containerViewChild.nativeElement.offsetWidth : this.domHandler.getHiddenElementOuterWidth(this.containerViewChild.nativeElement);\n            var height = this.containerViewChild.nativeElement.offsetParent ? this.containerViewChild.nativeElement.offsetHeight : this.domHandler.getHiddenElementOuterHeight(this.containerViewChild.nativeElement);\n            var viewport = this.domHandler.getViewport();\n            //flip\n            if (left + width - document.body.scrollLeft > viewport.width) {\n                left -= width;\n            }\n            //flip\n            if (top_1 + height - document.body.scrollTop > viewport.height) {\n                top_1 -= height;\n            }\n            //fit\n            if (left < document.body.scrollLeft) {\n                left = document.body.scrollLeft;\n            }\n            //fit\n            if (top_1 < document.body.scrollTop) {\n                top_1 = document.body.scrollTop;\n            }\n            this.containerViewChild.nativeElement.style.left = left + 'px';\n            this.containerViewChild.nativeElement.style.top = top_1 + 'px';\n        }\n    };\n    ContextMenu.prototype.bindGlobalListeners = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n                if (_this.containerViewChild.nativeElement.offsetParent && event.button !== 2) {\n                    _this.hide();\n                }\n            });\n        }\n        this.zone.runOutsideAngular(function () {\n            if (!_this.windowResizeListener) {\n                _this.windowResizeListener = _this.onWindowResize.bind(_this);\n                window.addEventListener('resize', _this.windowResizeListener);\n            }\n        });\n    };\n    ContextMenu.prototype.unbindGlobalListeners = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n        if (this.windowResizeListener) {\n            window.removeEventListener('resize', this.windowResizeListener);\n            this.windowResizeListener = null;\n        }\n    };\n    ContextMenu.prototype.onWindowResize = function (event) {\n        if (this.containerViewChild.nativeElement.offsetParent) {\n            this.hide();\n        }\n    };\n    ContextMenu.prototype.ngOnDestroy = function () {\n        this.unbindGlobalListeners();\n        if (this.rightClickListener) {\n            this.rightClickListener();\n        }\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], ContextMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ContextMenu.prototype, \"global\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ContextMenu.prototype, \"target\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ContextMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ContextMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ContextMenu.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ContextMenu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], ContextMenu.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ContextMenu.prototype, \"containerViewChild\", void 0);\n    ContextMenu = __decorate([\n        core_1.Component({\n            selector: 'p-contextMenu',\n            template: \"\\n        <div #container [ngClass]=\\\"'ui-contextmenu ui-widget ui-widget-content ui-corner-all ui-shadow'\\\" \\n            [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\">\\n            <p-contextMenuSub [item]=\\\"model\\\" root=\\\"root\\\"></p-contextMenuSub>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.NgZone])\n    ], ContextMenu);\n    return ContextMenu;\n}());\nexports.ContextMenu = ContextMenu;\nvar ContextMenuModule = /** @class */ (function () {\n    function ContextMenuModule() {\n    }\n    ContextMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [ContextMenu, router_1.RouterModule],\n            declarations: [ContextMenu, ContextMenuSub]\n        })\n    ], ContextMenuModule);\n    return ContextMenuModule;\n}());\nexports.ContextMenuModule = ContextMenuModule;\n//# sourceMappingURL=contextmenu.js.map\n\n/***/ }),\n/* 737 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar paginator_1 = __webpack_require__(79);\nvar DataGrid = /** @class */ (function () {\n    function DataGrid(el, differs) {\n        this.el = el;\n        this.differs = differs;\n        this.pageLinks = 5;\n        this.emptyMessage = 'No records found';\n        this.onLazyLoad = new core_1.EventEmitter();\n        this.paginatorPosition = 'bottom';\n        this.alwaysShowPaginator = true;\n        this.trackBy = function (index, item) { return item; };\n        this.immutable = true;\n        this.onPage = new core_1.EventEmitter();\n        this.first = 0;\n        this.page = 0;\n        this.differ = differs.find([]).create(null);\n    }\n    DataGrid.prototype.ngAfterViewInit = function () {\n        if (this.lazy) {\n            this.onLazyLoad.emit({\n                first: this.first,\n                rows: this.rows\n            });\n        }\n    };\n    DataGrid.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Object.defineProperty(DataGrid.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            if (this.immutable) {\n                this.handleDataChange();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataGrid.prototype.handleDataChange = function () {\n        if (this.paginator) {\n            this.updatePaginator();\n        }\n        this.updateDataToRender(this.value);\n    };\n    DataGrid.prototype.ngDoCheck = function () {\n        if (!this.immutable) {\n            var changes = this.differ.diff(this.value);\n            if (changes) {\n                this.handleDataChange();\n            }\n        }\n    };\n    DataGrid.prototype.updatePaginator = function () {\n        //total records\n        this.totalRecords = this.lazy ? this.totalRecords : (this.value ? this.value.length : 0);\n        //first\n        if (this.totalRecords && this.first >= this.totalRecords) {\n            var numberOfPages = Math.ceil(this.totalRecords / this.rows);\n            this.first = Math.max((numberOfPages - 1) * this.rows, 0);\n        }\n    };\n    DataGrid.prototype.paginate = function (event) {\n        this.first = event.first;\n        this.rows = event.rows;\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            this.updateDataToRender(this.value);\n        }\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n    };\n    DataGrid.prototype.updateDataToRender = function (datasource) {\n        if (this.paginator && datasource) {\n            this.dataToRender = [];\n            var startIndex = this.lazy ? 0 : this.first;\n            for (var i = startIndex; i < (startIndex + this.rows); i++) {\n                if (i >= datasource.length) {\n                    break;\n                }\n                this.dataToRender.push(datasource[i]);\n            }\n        }\n        else {\n            this.dataToRender = datasource;\n        }\n    };\n    DataGrid.prototype.isEmpty = function () {\n        return !this.dataToRender || (this.dataToRender.length == 0);\n    };\n    DataGrid.prototype.createLazyLoadMetadata = function () {\n        return {\n            first: this.first,\n            rows: this.rows\n        };\n    };\n    DataGrid.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataGrid.prototype, \"paginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataGrid.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataGrid.prototype, \"totalRecords\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataGrid.prototype, \"pageLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataGrid.prototype, \"rowsPerPageOptions\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataGrid.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataGrid.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataGrid.prototype, \"onLazyLoad\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataGrid.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataGrid.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataGrid.prototype, \"paginatorPosition\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataGrid.prototype, \"alwaysShowPaginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataGrid.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataGrid.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataGrid.prototype, \"paginatorDropdownAppendTo\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataGrid.prototype, \"onPage\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], DataGrid.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], DataGrid.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataGrid.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], DataGrid.prototype, \"value\", null);\n    DataGrid = __decorate([\n        core_1.Component({\n            selector: 'p-dataGrid',\n            template: \"\\n        <div [ngClass]=\\\"'ui-datagrid ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-datagrid-header ui-widget-header ui-corner-top\\\" *ngIf=\\\"header\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n                (onPageChange)=\\\"paginate($event)\\\" styleClass=\\\"ui-paginator-top\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\\\"\\n                [dropdownAppendTo]=\\\"paginatorDropdownAppendTo\\\"></p-paginator>\\n            <div class=\\\"ui-datagrid-content ui-widget-content\\\">\\n                <div class=\\\"ui-g\\\">\\n                    <ng-template ngFor [ngForOf]=\\\"dataToRender\\\" [ngForTemplate]=\\\"itemTemplate\\\" [ngForTrackBy]=\\\"trackBy\\\"></ng-template>\\n                    <div *ngIf=\\\"isEmpty()\\\" class=\\\"ui-widget-content ui-g-12\\\">{{emptyMessage}}</div>\\n                </div>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n                (onPageChange)=\\\"paginate($event)\\\" styleClass=\\\"ui-paginator-bottom\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\\\"\\n                [dropdownAppendTo]=\\\"paginatorDropdownAppendTo\\\"></p-paginator>\\n            <div class=\\\"ui-datagrid-footer ui-widget-footer ui-corner-bottom\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.IterableDiffers])\n    ], DataGrid);\n    return DataGrid;\n}());\nexports.DataGrid = DataGrid;\nvar DataGridModule = /** @class */ (function () {\n    function DataGridModule() {\n    }\n    DataGridModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule, paginator_1.PaginatorModule],\n            exports: [DataGrid, shared_1.SharedModule],\n            declarations: [DataGrid]\n        })\n    ], DataGridModule);\n    return DataGridModule;\n}());\nexports.DataGridModule = DataGridModule;\n//# sourceMappingURL=datagrid.js.map\n\n/***/ }),\n/* 738 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar paginator_1 = __webpack_require__(79);\nvar DataList = /** @class */ (function () {\n    function DataList(el, differs) {\n        this.el = el;\n        this.differs = differs;\n        this.pageLinks = 5;\n        this.onLazyLoad = new core_1.EventEmitter();\n        this.paginatorPosition = 'bottom';\n        this.emptyMessage = 'No records found';\n        this.alwaysShowPaginator = true;\n        this.trackBy = function (index, item) { return item; };\n        this.immutable = true;\n        this.onPage = new core_1.EventEmitter();\n        this.first = 0;\n        this.page = 0;\n        this.differ = differs.find([]).create(null);\n    }\n    DataList.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    DataList.prototype.ngAfterViewInit = function () {\n        if (this.lazy) {\n            this.onLazyLoad.emit({\n                first: this.first,\n                rows: this.rows\n            });\n        }\n    };\n    Object.defineProperty(DataList.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            if (this.immutable) {\n                this.handleDataChange();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataList.prototype.handleDataChange = function () {\n        if (this.paginator) {\n            this.updatePaginator();\n        }\n        this.updateDataToRender(this.value);\n    };\n    DataList.prototype.ngDoCheck = function () {\n        if (!this.immutable) {\n            var changes = this.differ.diff(this.value);\n            if (changes) {\n                this.handleDataChange();\n            }\n        }\n    };\n    DataList.prototype.updatePaginator = function () {\n        //total records\n        this.totalRecords = this.lazy ? this.totalRecords : (this.value ? this.value.length : 0);\n        //first\n        if (this.totalRecords && this.first >= this.totalRecords) {\n            var numberOfPages = Math.ceil(this.totalRecords / this.rows);\n            this.first = Math.max((numberOfPages - 1) * this.rows, 0);\n        }\n    };\n    DataList.prototype.paginate = function (event) {\n        this.first = event.first;\n        this.rows = event.rows;\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            this.updateDataToRender(this.value);\n        }\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n    };\n    DataList.prototype.updateDataToRender = function (datasource) {\n        if (this.paginator && datasource) {\n            this.dataToRender = [];\n            var startIndex = this.lazy ? 0 : this.first;\n            for (var i = startIndex; i < (startIndex + this.rows); i++) {\n                if (i >= datasource.length) {\n                    break;\n                }\n                this.dataToRender.push(datasource[i]);\n            }\n        }\n        else {\n            this.dataToRender = datasource;\n        }\n    };\n    DataList.prototype.isEmpty = function () {\n        return !this.dataToRender || (this.dataToRender.length == 0);\n    };\n    DataList.prototype.createLazyLoadMetadata = function () {\n        return {\n            first: this.first,\n            rows: this.rows\n        };\n    };\n    DataList.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"paginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataList.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataList.prototype, \"totalRecords\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataList.prototype, \"pageLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataList.prototype, \"rowsPerPageOptions\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataList.prototype, \"onLazyLoad\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataList.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataList.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataList.prototype, \"paginatorPosition\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataList.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"alwaysShowPaginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataList.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"scrollable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataList.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataList.prototype, \"paginatorDropdownAppendTo\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataList.prototype, \"onPage\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], DataList.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], DataList.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataList.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], DataList.prototype, \"value\", null);\n    DataList = __decorate([\n        core_1.Component({\n            selector: 'p-dataList',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-datalist ui-widget': true, 'ui-datalist-scrollable': scrollable}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-datalist-header ui-widget-header ui-corner-top\\\" *ngIf=\\\"header\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n            (onPageChange)=\\\"paginate($event)\\\" styleClass=\\\"ui-paginator-top\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\\\"\\n            [dropdownAppendTo]=\\\"paginatorDropdownAppendTo\\\"></p-paginator>\\n            <div class=\\\"ui-datalist-content ui-widget-content\\\" [ngStyle]=\\\"{'max-height': scrollHeight}\\\">\\n                <div *ngIf=\\\"isEmpty()\\\" class=\\\"ui-datalist-emptymessage\\\">{{emptyMessage}}</div>\\n                <ul class=\\\"ui-datalist-data\\\">\\n                    <li *ngFor=\\\"let item of dataToRender;let i = index;trackBy: trackBy\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: (i + first)}\\\"></ng-container>\\n                    </li>\\n                </ul>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n            (onPageChange)=\\\"paginate($event)\\\" styleClass=\\\"ui-paginator-bottom\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\\\"\\n            [dropdownAppendTo]=\\\"paginatorDropdownAppendTo\\\"></p-paginator>\\n            <div class=\\\"ui-datalist-footer ui-widget-header ui-corner-bottom\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.IterableDiffers])\n    ], DataList);\n    return DataList;\n}());\nexports.DataList = DataList;\nvar DataListModule = /** @class */ (function () {\n    function DataListModule() {\n    }\n    DataListModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, paginator_1.PaginatorModule],\n            exports: [DataList, shared_1.SharedModule],\n            declarations: [DataList]\n        })\n    ], DataListModule);\n    return DataListModule;\n}());\nexports.DataListModule = DataListModule;\n//# sourceMappingURL=datalist.js.map\n\n/***/ }),\n/* 739 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar DataScroller = /** @class */ (function () {\n    function DataScroller(el, renderer, domHandler, zone) {\n        this.el = el;\n        this.renderer = renderer;\n        this.domHandler = domHandler;\n        this.zone = zone;\n        this.buffer = 0.9;\n        this.trackBy = function (index, item) { return item; };\n        this.onLazyLoad = new core_1.EventEmitter();\n        this.dataToRender = [];\n        this.first = 0;\n        this.page = 0;\n    }\n    DataScroller.prototype.ngOnInit = function () {\n        this.load();\n    };\n    DataScroller.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.loader) {\n            this.loaderClickListener = this.renderer.listen(this.loader, 'click', function () {\n                _this.load();\n            });\n        }\n        else {\n            this.bindScrollListener();\n        }\n    };\n    DataScroller.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    DataScroller.prototype.load = function () {\n        if (this.lazy) {\n            this.onLazyLoad.emit({\n                first: this.page * this.rows,\n                rows: this.rows\n            });\n        }\n        this.page = this.page + 1;\n    };\n    DataScroller.prototype.shouldLoad = function () {\n        if (this.lazy)\n            return (this.rows * this.page < this.totalRecords);\n        else\n            return this.value && this.value.length && (this.rows * this.page < this.value.length);\n    };\n    DataScroller.prototype.reset = function () {\n        this.page = 0;\n    };\n    DataScroller.prototype.isEmpty = function () {\n        return !this.value || (this.value.length == 0);\n    };\n    DataScroller.prototype.bindScrollListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            if (_this.inline) {\n                _this.inlineScrollListener = _this.onInlineScroll.bind(_this);\n                _this.contentViewChild.nativeElement.addEventListener('scroll', _this.inlineScrollListener);\n            }\n            else {\n                _this.windowScrollListener = _this.onWindowScroll.bind(_this);\n                window.addEventListener('scroll', _this.windowScrollListener);\n            }\n        });\n    };\n    DataScroller.prototype.unbindScrollListener = function () {\n        if (this.inlineScrollListener) {\n            this.contentViewChild.nativeElement.removeEventListener('scroll', this.inlineScrollListener);\n        }\n        if (this.windowScrollListener) {\n            window.removeEventListener('scroll', this.windowScrollListener);\n        }\n        if (this.loaderClickListener) {\n            this.loaderClickListener();\n            this.loaderClickListener = null;\n        }\n    };\n    DataScroller.prototype.onInlineScroll = function () {\n        var _this = this;\n        var scrollTop = this.contentViewChild.nativeElement.scrollTop;\n        var scrollHeight = this.contentViewChild.nativeElement.scrollHeight;\n        var viewportHeight = this.contentViewChild.nativeElement.clientHeight;\n        if ((scrollTop >= ((scrollHeight * this.buffer) - (viewportHeight)))) {\n            if (this.shouldLoad()) {\n                this.zone.run(function () {\n                    _this.load();\n                });\n            }\n        }\n    };\n    DataScroller.prototype.onWindowScroll = function () {\n        var _this = this;\n        var docBody = document.body;\n        var docElement = document.documentElement;\n        var scrollTop = (window.pageYOffset || document.documentElement.scrollTop);\n        var winHeight = docElement.clientHeight;\n        var docHeight = Math.max(docBody.scrollHeight, docBody.offsetHeight, winHeight, docElement.scrollHeight, docElement.offsetHeight);\n        if (scrollTop >= ((docHeight * this.buffer) - winHeight)) {\n            if (this.shouldLoad()) {\n                this.zone.run(function () {\n                    _this.load();\n                });\n            }\n        }\n    };\n    DataScroller.prototype.ngOnDestroy = function () {\n        this.unbindScrollListener();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataScroller.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataScroller.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataScroller.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataScroller.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataScroller.prototype, \"buffer\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataScroller.prototype, \"inline\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"loader\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataScroller.prototype, \"totalRecords\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataScroller.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataScroller.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ViewChild('content'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], DataScroller.prototype, \"contentViewChild\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataScroller.prototype, \"onLazyLoad\", void 0);\n    DataScroller = __decorate([\n        core_1.Component({\n            selector: 'p-dataScroller',\n            template: \"\\n    <div [ngClass]=\\\"{'ui-datascroller ui-widget': true, 'ui-datascroller-inline': inline}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n        <div class=\\\"ui-datascroller-header ui-widget-header ui-corner-top\\\" *ngIf=\\\"header\\\">\\n            <ng-content select=\\\"p-header\\\"></ng-content>\\n        </div>\\n        <div #content class=\\\"ui-datascroller-content ui-widget-content\\\" [ngStyle]=\\\"{'max-height': scrollHeight}\\\">\\n            <ul class=\\\"ui-datascroller-list\\\">\\n                <li *ngFor=\\\"let item of value | slice:first:(first + (page * rows)); trackBy: trackBy; let i = index\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: i}\\\"></ng-container>\\n                </li>\\n            </ul>\\n        </div>\\n        <div class=\\\"ui-datascroller-footer ui-widget-header ui-corner-bottom\\\" *ngIf=\\\"footer\\\">\\n            <ng-content select=\\\"p-footer\\\"></ng-content>\\n        </div>\\n    </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.Renderer2, domhandler_1.DomHandler, core_1.NgZone])\n    ], DataScroller);\n    return DataScroller;\n}());\nexports.DataScroller = DataScroller;\nvar DataScrollerModule = /** @class */ (function () {\n    function DataScrollerModule() {\n    }\n    DataScrollerModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [DataScroller, shared_1.SharedModule],\n            declarations: [DataScroller]\n        })\n    ], DataScrollerModule);\n    return DataScrollerModule;\n}());\nexports.DataScrollerModule = DataScrollerModule;\n//# sourceMappingURL=datascroller.js.map\n\n/***/ }),\n/* 740 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar forms_1 = __webpack_require__(17);\nvar shared_1 = __webpack_require__(15);\nvar paginator_1 = __webpack_require__(79);\nvar shared_2 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar objectutils_1 = __webpack_require__(40);\nvar DTRadioButton = /** @class */ (function () {\n    function DTRadioButton() {\n        this.onClick = new core_1.EventEmitter();\n    }\n    DTRadioButton.prototype.handleClick = function (event) {\n        this.onClick.emit(event);\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DTRadioButton.prototype, \"checked\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DTRadioButton.prototype, \"onClick\", void 0);\n    DTRadioButton = __decorate([\n        core_1.Component({\n            selector: 'p-dtRadioButton',\n            template: \"\\n        <div class=\\\"ui-radiobutton ui-widget\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input type=\\\"radio\\\" [checked]=\\\"checked\\\">\\n            </div>\\n            <div class=\\\"ui-radiobutton-box ui-widget ui-radiobutton-relative ui-state-default\\\" (click)=\\\"handleClick($event)\\\"\\n                        [ngClass]=\\\"{'ui-state-active':checked}\\\">\\n                <span class=\\\"ui-radiobutton-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-circle':checked}\\\"></span>\\n            </div>\\n        </div>\\n    \"\n        })\n    ], DTRadioButton);\n    return DTRadioButton;\n}());\nexports.DTRadioButton = DTRadioButton;\nvar DTCheckbox = /** @class */ (function () {\n    function DTCheckbox() {\n        this.onChange = new core_1.EventEmitter();\n    }\n    DTCheckbox.prototype.handleClick = function (event) {\n        if (!this.disabled) {\n            this.onChange.emit({ originalEvent: event, checked: !this.checked });\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DTCheckbox.prototype, \"checked\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DTCheckbox.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DTCheckbox.prototype, \"onChange\", void 0);\n    DTCheckbox = __decorate([\n        core_1.Component({\n            selector: 'p-dtCheckbox',\n            template: \"\\n        <div class=\\\"ui-chkbox ui-widget\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input type=\\\"checkbox\\\" [checked]=\\\"checked\\\">\\n            </div>\\n            <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" (click)=\\\"handleClick($event)\\\"\\n                        [ngClass]=\\\"{'ui-state-active':checked&&!disabled,'ui-state-disabled':disabled}\\\">\\n                <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':checked}\\\"></span>\\n            </div>\\n        </div>\\n    \"\n        })\n    ], DTCheckbox);\n    return DTCheckbox;\n}());\nexports.DTCheckbox = DTCheckbox;\nvar ColumnHeaders = /** @class */ (function () {\n    function ColumnHeaders(dt) {\n        this.dt = dt;\n    }\n    __decorate([\n        core_1.Input(\"pColumnHeaders\"),\n        __metadata(\"design:type\", Array)\n    ], ColumnHeaders.prototype, \"columns\", void 0);\n    ColumnHeaders = __decorate([\n        core_1.Component({\n            selector: '[pColumnHeaders]',\n            template: \"\\n        <ng-template ngFor let-col [ngForOf]=\\\"columns\\\" let-lastCol=\\\"last\\\">\\n            <th #headerCell [attr.id]=\\\"col.colId\\\" [ngStyle]=\\\"col.headerStyle||col.style\\\" [class]=\\\"col.headerStyleClass||col.styleClass\\\" (click)=\\\"dt.sort($event,col)\\\" [attr.colspan]=\\\"col.colspan\\\" [attr.rowspan]=\\\"col.rowspan\\\"\\n                [ngClass]=\\\"{'ui-state-default ui-unselectable-text':true, 'ui-sortable-column': col.sortable, 'ui-state-active': dt.isSorted(col), 'ui-resizable-column': dt.resizableColumns, 'ui-selection-column':col.selectionMode,\\n                            'ui-helper-hidden': col.hidden}\\\"\\n                (dragstart)=\\\"dt.onColumnDragStart($event)\\\" (dragleave)=\\\"dt.onColumnDragleave($event)\\\" (drop)=\\\"dt.onColumnDrop($event)\\\" (mousedown)=\\\"dt.onHeaderMousedown($event,headerCell)\\\"\\n                [attr.tabindex]=\\\"col.sortable ? dt.tabindex : null\\\" (keydown)=\\\"dt.onHeaderKeydown($event,col)\\\"\\n                [attr.scope]=\\\"col.scope||(col.colspan ? 'colgroup' : 'col')\\\">\\n                <span class=\\\"ui-column-resizer ui-clickable\\\" *ngIf=\\\"dt.resizableColumns && col.resizable && ((dt.columnResizeMode == 'fit' && !lastCol) || dt.columnResizeMode == 'expand')\\\" (mousedown)=\\\"dt.initColumnResize($event)\\\"></span>\\n                <span class=\\\"ui-column-title\\\" *ngIf=\\\"!col.selectionMode&&!col.headerTemplate\\\">{{col.header}}</span>\\n                <span class=\\\"ui-column-title\\\" *ngIf=\\\"col.headerTemplate\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"col.headerTemplate; context: {$implicit: col}\\\"></ng-container>\\n                </span>\\n                <span class=\\\"ui-sortable-column-icon fa fa-fw fa-sort\\\" *ngIf=\\\"col.sortable\\\"\\n                     [ngClass]=\\\"{'fa-sort-desc': (dt.getSortOrder(col) == -1),'fa-sort-asc': (dt.getSortOrder(col) == 1)}\\\"></span>\\n                <input [attr.type]=\\\"col.filterType\\\" class=\\\"ui-column-filter ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [attr.maxlength]=\\\"col.filterMaxlength\\\" [attr.placeholder]=\\\"col.filterPlaceholder\\\" *ngIf=\\\"col.filter&&!col.filterTemplate\\\" [value]=\\\"dt.filters[col.filterField||col.field] ? dt.filters[col.filterField||col.field].value : ''\\\"\\n                    (click)=\\\"dt.onFilterInputClick($event)\\\" (input)=\\\"dt.onFilterKeyup($event.target.value, col.filterField||col.field, col.filterMatchMode)\\\"/>\\n                <ng-container *ngIf=\\\"col.filter && col.filterTemplate\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"col.filterTemplate; context: {$implicit: col}\\\"></ng-container>\\n                </ng-container>\\n                <p-dtCheckbox *ngIf=\\\"col.selectionMode=='multiple' && dt.showHeaderCheckbox === true\\\" (onChange)=\\\"dt.toggleRowsWithCheckbox($event)\\\" [checked]=\\\"dt.allSelected\\\" [disabled]=\\\"dt.isEmpty()\\\"></p-dtCheckbox>\\n            </th>\\n        </ng-template>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),\n        __metadata(\"design:paramtypes\", [DataTable])\n    ], ColumnHeaders);\n    return ColumnHeaders;\n}());\nexports.ColumnHeaders = ColumnHeaders;\nvar ColumnFooters = /** @class */ (function () {\n    function ColumnFooters(dt) {\n        this.dt = dt;\n    }\n    __decorate([\n        core_1.Input(\"pColumnFooters\"),\n        __metadata(\"design:type\", Array)\n    ], ColumnFooters.prototype, \"columns\", void 0);\n    ColumnFooters = __decorate([\n        core_1.Component({\n            selector: '[pColumnFooters]',\n            template: \"\\n        <td *ngFor=\\\"let col of columns\\\" [ngStyle]=\\\"col.footerStyle||col.style\\\" [class]=\\\"col.footerStyleClass||col.styleClass\\\"\\n            [attr.colspan]=\\\"col.colspan\\\" [attr.rowspan]=\\\"col.rowspan\\\"\\n            [ngClass]=\\\"{'ui-state-default':true, 'ui-helper-hidden': col.hidden}\\\">\\n            <span class=\\\"ui-column-footer\\\" *ngIf=\\\"!col.footerTemplate\\\">{{col.footer}}</span>\\n            <span class=\\\"ui-column-footer\\\" *ngIf=\\\"col.footerTemplate\\\">\\n                <ng-container *ngTemplateOutlet=\\\"col.footerTemplate; context: {$implicit: col}\\\"></ng-container>\\n            </span>\\n        </td>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),\n        __metadata(\"design:paramtypes\", [DataTable])\n    ], ColumnFooters);\n    return ColumnFooters;\n}());\nexports.ColumnFooters = ColumnFooters;\nvar TableBody = /** @class */ (function () {\n    function TableBody(dt) {\n        this.dt = dt;\n    }\n    TableBody.prototype.visibleColumns = function () {\n        return this.columns ? this.columns.filter(function (c) { return !c.hidden; }) : [];\n    };\n    __decorate([\n        core_1.Input(\"pTableBody\"),\n        __metadata(\"design:type\", Array)\n    ], TableBody.prototype, \"columns\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TableBody.prototype, \"data\", void 0);\n    TableBody = __decorate([\n        core_1.Component({\n            selector: '[pTableBody]',\n            template: \"\\n        <ng-template ngFor let-rowData [ngForOf]=\\\"data\\\" let-even=\\\"even\\\" let-odd=\\\"odd\\\" let-rowIndex=\\\"index\\\" [ngForTrackBy]=\\\"dt.rowTrackBy\\\">\\n            <tr #rowGroupElement class=\\\"ui-widget-header ui-rowgroup-header\\\"\\n                *ngIf=\\\"dt.rowGroupMode=='subheader' && (rowIndex === 0||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex - 1], dt.groupField)))\\\"\\n                (click)=\\\"dt.onRowGroupClick($event)\\\" [ngStyle]=\\\"{'cursor': dt.sortableRowGroup ? 'pointer' : 'auto'}\\\">\\n                <td [attr.colspan]=\\\"dt.visibleColumns().length\\\">\\n                    <a href=\\\"#\\\" *ngIf=\\\"dt.expandableRowGroups\\\" (click)=\\\"dt.toggleRowGroup($event,rowData)\\\">\\n                        <span class=\\\"fa fa-fw\\\" [ngClass]=\\\"dt.isRowGroupExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon\\\"></span>\\n                    </a>\\n                    <span class=\\\"ui-rowgroup-header-name\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"dt.rowGroupHeaderTemplate; context: {$implicit: rowData}\\\"></ng-container>\\n                    </span>\\n                </td>\\n            </tr>\\n            <tr #rowElement *ngIf=\\\"!dt.expandableRowGroups||dt.isRowGroupExpanded(rowData)\\\"\\n                    (click)=\\\"dt.handleRowClick($event, rowData, rowIndex)\\\" (dblclick)=\\\"dt.rowDblclick($event,rowData)\\\" (contextmenu)=\\\"dt.onRowRightClick($event,rowData)\\\" (touchend)=\\\"dt.handleRowTouchEnd($event)\\\"\\n                    [ngClass]=\\\"[even&&dt.rowGroupMode!='rowspan'? 'ui-datatable-even':'',\\n                                odd&&dt.rowGroupMode!='rowspan'?'ui-datatable-odd':'',\\n                                dt.isSelected(rowData)? 'ui-state-highlight': '',\\n                                dt.isRowExpanded(rowData) ? 'ui-expanded-row': '',\\n                                dt.getRowStyleClass(rowData,rowIndex)]\\\">\\n                <ng-template ngFor let-col [ngForOf]=\\\"columns\\\" let-colIndex=\\\"index\\\">\\n                    <td #cell *ngIf=\\\"!dt.rowGroupMode || (dt.rowGroupMode == 'subheader') ||\\n                        (dt.rowGroupMode=='rowspan' && ((dt.sortField==col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) || (dt.sortField!=col.field)))\\\"\\n                        [ngStyle]=\\\"col.bodyStyle||col.style\\\" [class]=\\\"col.bodyStyleClass||col.styleClass\\\" (click)=\\\"dt.switchCellToEditMode(cell,col,rowData)\\\"\\n                        [ngClass]=\\\"{'ui-editable-column':col.editable,'ui-selection-column':col.selectionMode, 'ui-helper-hidden': col.hidden}\\\"\\n                        [attr.rowspan]=\\\"(dt.rowGroupMode=='rowspan' && dt.sortField == col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) ? dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].size : null\\\">\\n                        <span class=\\\"ui-column-title\\\" *ngIf=\\\"dt.responsive\\\">{{col.header}}</span>\\n                        <span class=\\\"ui-cell-data\\\" *ngIf=\\\"!col.bodyTemplate && !col.expander && !col.selectionMode\\\">{{dt.resolveFieldData(rowData,col.field)}}</span>\\n                        <span class=\\\"ui-cell-data\\\" *ngIf=\\\"col.bodyTemplate\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"col.bodyTemplate; context: {$implicit: col, rowData: rowData, rowIndex: (rowIndex + dt.first)}\\\"></ng-container>\\n                        </span>\\n                        <div class=\\\"ui-cell-editor\\\" *ngIf=\\\"col.editable\\\">\\n                            <input *ngIf=\\\"!col.editorTemplate\\\" type=\\\"text\\\" [(ngModel)]=\\\"rowData[col.field]\\\"\\n                                (keydown)=\\\"dt.onCellEditorKeydown($event, col, rowData, rowIndex)\\\" (blur)=\\\"dt.onCellEditorBlur($event, col, rowData, rowIndex)\\\"\\n                                (input)=\\\"dt.onCellEditorInput($event, col, rowData, rowIndex)\\\" (change)=\\\"dt.onCellEditorChange($event, col, rowData, rowIndex)\\\"\\n                                class=\\\"ui-inputtext ui-widget ui-state-default ui-corner-all\\\"/>\\n                            <a *ngIf=\\\"col.editorTemplate\\\" class=\\\"ui-cell-editor-proxy-focus\\\" href=\\\"#\\\" (focus)=\\\"dt.onCustomEditorFocusPrev($event)\\\"></a>\\n                            <ng-container *ngTemplateOutlet=\\\"col.editorTemplate; context: {$implicit: col, rowData: rowData, rowIndex: rowIndex}\\\"></ng-container>\\n                            <a *ngIf=\\\"col.editorTemplate\\\" class=\\\"ui-cell-editor-proxy-focus\\\" href=\\\"#\\\" (focus)=\\\"dt.onCustomEditorFocusNext($event)\\\"></a>\\n                        </div>\\n                        <a href=\\\"#\\\" *ngIf=\\\"col.expander\\\" (click)=\\\"dt.toggleRow(rowData,$event)\\\">\\n                            <span class=\\\"ui-row-toggler fa fa-fw ui-clickable\\\" [ngClass]=\\\"dt.isRowExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon\\\"></span>\\n                        </a>\\n                        <p-dtRadioButton *ngIf=\\\"col.selectionMode=='single'\\\" (onClick)=\\\"dt.selectRowWithRadio($event, rowData)\\\" [checked]=\\\"dt.isSelected(rowData)\\\"></p-dtRadioButton>\\n                        <p-dtCheckbox *ngIf=\\\"col.selectionMode=='multiple'\\\" (onChange)=\\\"dt.toggleRowWithCheckbox($event,rowData)\\\" [checked]=\\\"dt.isSelected(rowData)\\\"></p-dtCheckbox>\\n                    </td>\\n                </ng-template>\\n            </tr>\\n            <tr *ngIf=\\\"dt.expandableRows && dt.isRowExpanded(rowData)\\\" class=\\\"ui-expanded-row-content\\\">\\n                <td [attr.colspan]=\\\"dt.visibleColumns().length\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"dt.rowExpansionTemplate; context: {$implicit: rowData, rowIndex: rowIndex}\\\"></ng-container>\\n                </td>\\n            </tr>\\n            <tr class=\\\"ui-widget-header ui-rowgroup-footer\\\" *ngIf=\\\"dt.rowGroupFooterTemplate && dt.rowGroupMode=='subheader' && ((rowIndex === dt.dataToRender.length - 1)||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex + 1],dt.groupField))) && (!dt.expandableRowGroups || dt.isRowGroupExpanded(rowData))\\\">\\n                <ng-container *ngTemplateOutlet=\\\"dt.rowGroupFooterTemplate; context: {$implicit: rowData}\\\"></ng-container>\\n            </tr>\\n        </ng-template>\\n\\n        <tr *ngIf=\\\"dt.isEmpty()\\\" class=\\\"ui-widget-content ui-datatable-emptymessage-row\\\" [style.visibility]=\\\"dt.loading ? 'hidden' : 'visible'\\\">\\n            <td [attr.colspan]=\\\"dt.visibleColumns().length\\\" class=\\\"ui-datatable-emptymessage\\\">\\n                <span *ngIf=\\\"!dt.emptyMessageTemplate\\\">{{dt.emptyMessage}}</span>\\n                <ng-template *ngIf=\\\"dt.emptyMessageTemplate\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"dt.emptyMessageTemplate\\\"></ng-container>\\n                </ng-template>\\n            </td>\\n        </tr>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),\n        __metadata(\"design:paramtypes\", [DataTable])\n    ], TableBody);\n    return TableBody;\n}());\nexports.TableBody = TableBody;\nvar ScrollableView = /** @class */ (function () {\n    function ScrollableView(dt, domHandler, el, renderer, zone) {\n        this.dt = dt;\n        this.domHandler = domHandler;\n        this.el = el;\n        this.renderer = renderer;\n        this.zone = zone;\n        this.onVirtualScroll = new core_1.EventEmitter();\n    }\n    ScrollableView.prototype.ngAfterViewInit = function () {\n        this.initScrolling();\n    };\n    ScrollableView.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        if (this.virtualScroll && !this.rowHeight) {\n            var row = this.domHandler.findSingle(this.scrollTable, 'tr.ui-widget-content:not(.ui-datatable-emptymessage-row)');\n            if (row) {\n                this.rowHeight = this.domHandler.getOuterHeight(row);\n            }\n        }\n        if (!this.frozen) {\n            this.zone.runOutsideAngular(function () {\n                setTimeout(function () {\n                    _this.alignScrollBar();\n                }, 1);\n            });\n        }\n    };\n    ScrollableView.prototype.initScrolling = function () {\n        var _this = this;\n        this.scrollHeader = this.scrollHeaderViewChild.nativeElement;\n        this.scrollHeaderBox = this.scrollHeaderBoxViewChild.nativeElement;\n        this.scrollBody = this.scrollBodyViewChild.nativeElement;\n        this.scrollTable = this.scrollTableViewChild.nativeElement;\n        this.scrollTableWrapper = this.scrollTableWrapperViewChild.nativeElement;\n        this.scrollFooter = this.scrollFooterViewChild ? this.scrollFooterViewChild.nativeElement : null;\n        this.scrollFooterBox = this.scrollFooterBoxViewChild ? this.scrollFooterBoxViewChild.nativeElement : null;\n        this.setScrollHeight();\n        if (!this.frozen) {\n            this.zone.runOutsideAngular(function () {\n                _this.scrollHeader.addEventListener('scroll', _this.onHeaderScroll.bind(_this));\n                _this.scrollBody.addEventListener('scroll', _this.onBodyScroll.bind(_this));\n            });\n        }\n        if (!this.frozen) {\n            this.alignScrollBar();\n        }\n        else {\n            this.scrollBody.style.paddingBottom = this.domHandler.calculateScrollbarWidth() + 'px';\n        }\n    };\n    ScrollableView.prototype.onBodyScroll = function (event) {\n        var _this = this;\n        var frozenView = this.el.nativeElement.previousElementSibling;\n        if (frozenView) {\n            var frozenScrollBody = this.domHandler.findSingle(frozenView, '.ui-datatable-scrollable-body');\n        }\n        this.scrollHeaderBox.style.marginLeft = -1 * this.scrollBody.scrollLeft + 'px';\n        if (this.scrollFooterBox) {\n            this.scrollFooterBox.style.marginLeft = -1 * this.scrollBody.scrollLeft + 'px';\n        }\n        if (frozenScrollBody) {\n            frozenScrollBody.scrollTop = this.scrollBody.scrollTop;\n        }\n        if (this.virtualScroll) {\n            var viewport = this.domHandler.getOuterHeight(this.scrollBody);\n            var tableHeight = this.domHandler.getOuterHeight(this.scrollTable);\n            var pageHeight_1 = this.rowHeight * this.dt.rows;\n            var virtualTableHeight = this.domHandler.getOuterHeight(this.scrollTableWrapper);\n            var pageCount = (virtualTableHeight / pageHeight_1) || 1;\n            if (this.scrollBody.scrollTop + viewport > parseFloat(this.scrollTable.style.top) + tableHeight || this.scrollBody.scrollTop < parseFloat(this.scrollTable.style.top)) {\n                var page_1 = Math.floor((this.scrollBody.scrollTop * pageCount) / (this.scrollBody.scrollHeight)) + 1;\n                this.onVirtualScroll.emit({\n                    page: page_1,\n                    callback: function () {\n                        _this.scrollTable.style.top = ((page_1 - 1) * pageHeight_1) + 'px';\n                    }\n                });\n            }\n        }\n    };\n    ScrollableView.prototype.setScrollHeight = function () {\n        if (this.dt.scrollHeight) {\n            if (this.dt.scrollHeight.indexOf('%') !== -1) {\n                this.scrollBody.style.visibility = 'hidden';\n                this.scrollBody.style.height = '100px'; //temporary height to calculate static height\n                var containerHeight = this.domHandler.getOuterHeight(this.dt.el.nativeElement.children[0]);\n                var relativeHeight = this.domHandler.getOuterHeight(this.dt.el.nativeElement.parentElement) * parseInt(this.dt.scrollHeight) / 100;\n                var staticHeight = containerHeight - 100; //total height of headers, footers, paginators\n                var scrollBodyHeight = (relativeHeight - staticHeight);\n                this.scrollBody.style.height = 'auto';\n                this.scrollBody.style.maxHeight = scrollBodyHeight + 'px';\n                this.scrollBody.style.visibility = 'visible';\n            }\n            else {\n                this.scrollBody.style.maxHeight = this.dt.scrollHeight;\n            }\n        }\n    };\n    ScrollableView.prototype.onHeaderScroll = function (event) {\n        this.scrollHeader.scrollLeft = 0;\n    };\n    ScrollableView.prototype.hasVerticalOverflow = function () {\n        return this.domHandler.getOuterHeight(this.scrollTable) > this.domHandler.getOuterHeight(this.scrollBody);\n    };\n    ScrollableView.prototype.alignScrollBar = function () {\n        var scrollBarWidth = this.hasVerticalOverflow() ? this.domHandler.calculateScrollbarWidth() : 0;\n        this.scrollHeaderBox.style.marginRight = scrollBarWidth + 'px';\n        if (this.scrollFooterBox) {\n            this.scrollFooterBox.style.marginRight = scrollBarWidth + 'px';\n        }\n    };\n    ScrollableView.prototype.ngOnDestroy = function () {\n        this.scrollHeader.removeEventListener('scroll', this.onHeaderScroll);\n        this.scrollBody.removeEventListener('scroll', this.onBodyScroll);\n    };\n    __decorate([\n        core_1.Input(\"pScrollableView\"),\n        __metadata(\"design:type\", Array)\n    ], ScrollableView.prototype, \"columns\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", shared_2.HeaderColumnGroup)\n    ], ScrollableView.prototype, \"headerColumnGroup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", shared_2.HeaderColumnGroup)\n    ], ScrollableView.prototype, \"footerColumnGroup\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollHeader'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollHeaderViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollHeaderBox'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollHeaderBoxViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollBody'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollBodyViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollTable'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollTableViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollTableWrapper'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollTableWrapperViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollFooter'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollFooterViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollFooterBox'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollFooterBoxViewChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ScrollableView.prototype, \"frozen\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ScrollableView.prototype, \"width\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ScrollableView.prototype, \"virtualScroll\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], ScrollableView.prototype, \"onVirtualScroll\", void 0);\n    ScrollableView = __decorate([\n        core_1.Component({\n            selector: '[pScrollableView]',\n            template: \"\\n        <div #scrollHeader class=\\\"ui-widget-header ui-datatable-scrollable-header\\\" [ngStyle]=\\\"{'width': width}\\\">\\n            <div #scrollHeaderBox  class=\\\"ui-datatable-scrollable-header-box\\\">\\n                <table [ngClass]=\\\"dt.tableStyleClass\\\" [ngStyle]=\\\"dt.tableStyle\\\">\\n                    <thead class=\\\"ui-datatable-thead\\\">\\n                        <tr *ngIf=\\\"!headerColumnGroup\\\" class=\\\"ui-state-default\\\" [pColumnHeaders]=\\\"columns\\\"></tr>\\n                        <ng-template [ngIf]=\\\"headerColumnGroup\\\">\\n                            <tr *ngFor=\\\"let headerRow of headerColumnGroup.rows\\\" class=\\\"ui-state-default\\\" [pColumnHeaders]=\\\"headerRow.columns\\\"></tr>\\n                        </ng-template>\\n                    </thead>\\n                    <tbody *ngIf=\\\"dt.frozenValue\\\" [ngClass]=\\\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (dt.rowHover||dt.selectionMode)}\\\" [pTableBody]=\\\"columns\\\" [data]=\\\"dt.frozenValue\\\"></tbody>\\n                </table>\\n            </div>\\n        </div>\\n        <div #scrollBody class=\\\"ui-datatable-scrollable-body\\\" [ngStyle]=\\\"{'width': width}\\\">\\n            <div #scrollTableWrapper class=\\\"ui-datatable-scrollable-table-wrapper\\\" style=\\\"position:relative\\\">\\n                <table #scrollTable [class]=\\\"dt.tableStyleClass\\\" [ngStyle]=\\\"dt.tableStyle\\\" [ngClass]=\\\"{'ui-datatable-virtual-table':virtualScroll}\\\" style=\\\"top:0px\\\">\\n                    <colgroup class=\\\"ui-datatable-scrollable-colgroup\\\">\\n                        <col *ngFor=\\\"let col of columns\\\" [ngStyle]=\\\"col.headerStyle||col.style\\\" [ngClass]=\\\"{'ui-helper-hidden': col.hidden}\\\"/>\\n                    </colgroup>\\n                    <tbody [ngClass]=\\\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (dt.rowHover||dt.selectionMode)}\\\" [pTableBody]=\\\"columns\\\" [data]=\\\"dt.dataToRender\\\"></tbody>\\n                </table>\\n            </div>\\n        </div>\\n        <div #scrollFooter class=\\\"ui-widget-header ui-datatable-scrollable-footer\\\" [ngStyle]=\\\"{'width': width}\\\" *ngIf=\\\"dt.hasFooter()\\\">\\n            <div #scrollFooterBox  class=\\\"ui-datatable-scrollable-footer-box\\\">\\n                <table [ngClass]=\\\"dt.tableStyleClass\\\" [ngStyle]=\\\"dt.tableStyle\\\">\\n                    <tfoot class=\\\"ui-datatable-tfoot\\\">\\n                        <tr *ngIf=\\\"!footerColumnGroup\\\" [pColumnFooters]=\\\"columns\\\" class=\\\"ui-state-default\\\"></tr>\\n                        <ng-template [ngIf]=\\\"footerColumnGroup\\\">\\n                            <tr *ngFor=\\\"let footerRow of footerColumnGroup.rows\\\" class=\\\"ui-state-default\\\" [pColumnFooters]=\\\"footerRow.columns\\\"></tr>\\n                        </ng-template>\\n                    </tfoot>\\n                </table>\\n            </div>\\n        </div>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),\n        __metadata(\"design:paramtypes\", [DataTable, domhandler_1.DomHandler, core_1.ElementRef, core_1.Renderer2, core_1.NgZone])\n    ], ScrollableView);\n    return ScrollableView;\n}());\nexports.ScrollableView = ScrollableView;\nvar DataTable = /** @class */ (function () {\n    function DataTable(el, domHandler, differs, renderer, changeDetector, objectUtils, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.differs = differs;\n        this.renderer = renderer;\n        this.changeDetector = changeDetector;\n        this.objectUtils = objectUtils;\n        this.zone = zone;\n        this.pageLinks = 5;\n        this.selectionChange = new core_1.EventEmitter();\n        this.showHeaderCheckbox = true;\n        this.onRowClick = new core_1.EventEmitter();\n        this.onRowSelect = new core_1.EventEmitter();\n        this.onRowUnselect = new core_1.EventEmitter();\n        this.onRowDblclick = new core_1.EventEmitter();\n        this.onHeaderCheckboxToggle = new core_1.EventEmitter();\n        this.onContextMenuSelect = new core_1.EventEmitter();\n        this.filterDelay = 300;\n        this.onLazyLoad = new core_1.EventEmitter();\n        this.columnResizeMode = 'fit';\n        this.onColResize = new core_1.EventEmitter();\n        this.onColReorder = new core_1.EventEmitter();\n        this.sortMode = 'single';\n        this.defaultSortOrder = 1;\n        this.csvSeparator = ',';\n        this.exportFilename = 'download';\n        this.emptyMessage = 'No records found';\n        this.paginatorPosition = 'bottom';\n        this.alwaysShowPaginator = true;\n        this.metaKeySelection = true;\n        this.rowTrackBy = function (index, item) { return item; };\n        this.immutable = true;\n        this.compareSelectionBy = 'deepEquals';\n        this.onEditInit = new core_1.EventEmitter();\n        this.onEditComplete = new core_1.EventEmitter();\n        this.onEdit = new core_1.EventEmitter();\n        this.onEditCancel = new core_1.EventEmitter();\n        this.onPage = new core_1.EventEmitter();\n        this.onSort = new core_1.EventEmitter();\n        this.onFilter = new core_1.EventEmitter();\n        this.rowExpandMode = 'multiple';\n        this.expandedIcon = 'fa-chevron-circle-down';\n        this.collapsedIcon = 'fa-chevron-circle-right';\n        this.tabindex = 1;\n        this.sortableRowGroup = true;\n        this.filters = {};\n        this.loadingIcon = 'fa-circle-o-notch';\n        this.virtualScrollDelay = 500;\n        this.rowGroupExpandMode = 'multiple';\n        this.valueChange = new core_1.EventEmitter();\n        this.firstChange = new core_1.EventEmitter();\n        this.onRowExpand = new core_1.EventEmitter();\n        this.onRowCollapse = new core_1.EventEmitter();\n        this.onRowGroupExpand = new core_1.EventEmitter();\n        this.onRowGroupCollapse = new core_1.EventEmitter();\n        this.page = 0;\n        this.columnsChanged = false;\n        this._first = 0;\n        this._sortOrder = 1;\n        this.filterConstraints = {\n            startsWith: function (value, filter) {\n                if (filter === undefined || filter === null || filter.trim() === '') {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                var filterValue = filter.toLowerCase();\n                return value.toString().toLowerCase().slice(0, filterValue.length) === filterValue;\n            },\n            contains: function (value, filter) {\n                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                return value.toString().toLowerCase().indexOf(filter.toLowerCase()) !== -1;\n            },\n            endsWith: function (value, filter) {\n                if (filter === undefined || filter === null || filter.trim() === '') {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                var filterValue = filter.toString().toLowerCase();\n                return value.toString().toLowerCase().indexOf(filterValue, value.toString().length - filterValue.length) !== -1;\n            },\n            equals: function (value, filter) {\n                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                return value.toString().toLowerCase() == filter.toString().toLowerCase();\n            },\n            notEquals: function (value, filter) {\n                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                    return false;\n                }\n                if (value === undefined || value === null) {\n                    return true;\n                }\n                return value.toString().toLowerCase() != filter.toString().toLowerCase();\n            },\n            in: function (value, filter) {\n                if (filter === undefined || filter === null || filter.length === 0) {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                for (var i = 0; i < filter.length; i++) {\n                    if (filter[i] === value)\n                        return true;\n                }\n                return false;\n            }\n        };\n        this.differ = differs.find([]).create(null);\n    }\n    DataTable.prototype.ngOnInit = function () {\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n    };\n    DataTable.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.initColumns();\n        this.initColumnGroups();\n        this.columnsSubscription = this.cols.changes.subscribe(function (_) {\n            _this.initColumns();\n            _this.changeDetector.markForCheck();\n        });\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'rowexpansion':\n                    _this.rowExpansionTemplate = item.template;\n                    break;\n                case 'rowgroupheader':\n                    _this.rowGroupHeaderTemplate = item.template;\n                    break;\n                case 'rowgroupfooter':\n                    _this.rowGroupFooterTemplate = item.template;\n                    break;\n                case 'emptymessage':\n                    _this.emptyMessageTemplate = item.template;\n                    break;\n                case 'paginatorLeft':\n                    _this.paginatorLeftTemplate = item.template;\n                    break;\n                case 'paginatorRight':\n                    _this.paginatorRightTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    DataTable.prototype.ngAfterViewChecked = function () {\n        if (this.columnsChanged && this.el.nativeElement.offsetParent) {\n            if (this.resizableColumns) {\n                this.initResizableColumns();\n            }\n            if (this.reorderableColumns) {\n                this.initColumnReordering();\n            }\n            this.columnsChanged = false;\n        }\n        if (this.totalRecordsChanged && this.virtualScroll && this.virtualScrollableTableWrapper && this.virtualScrollableTableWrapper.offsetParent) {\n            var row = this.domHandler.findSingle(this.virtualScrollableTableWrapper, 'tr.ui-widget-content');\n            var rowHeight = this.domHandler.getOuterHeight(row);\n            this.virtualTableHeight = this._totalRecords * rowHeight;\n            this.virtualScrollableTableWrapper.style.height = this.virtualTableHeight + 'px';\n            this.totalRecordsChanged = false;\n        }\n    };\n    DataTable.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.globalFilter) {\n            this.globalFilterFunction = this.renderer.listen(this.globalFilter, 'keyup', function () {\n                if (_this.filterTimeout) {\n                    clearTimeout(_this.filterTimeout);\n                }\n                _this.filterTimeout = setTimeout(function () {\n                    _this._filter();\n                    _this.filterTimeout = null;\n                }, _this.filterDelay);\n            });\n        }\n        this.virtualScrollableTableWrapper = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-datatable-scrollable-table-wrapper');\n        this.initialized = true;\n    };\n    Object.defineProperty(DataTable.prototype, \"multiSortMeta\", {\n        get: function () {\n            return this._multiSortMeta;\n        },\n        set: function (val) {\n            this._multiSortMeta = val;\n            if (this.sortMode === 'multiple') {\n                this.sortMultiple();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"sortField\", {\n        get: function () {\n            return this._sortField;\n        },\n        set: function (val) {\n            this._sortField = val;\n            if (this.sortMode === 'single') {\n                this.sortSingle();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"sortOrder\", {\n        get: function () {\n            return this._sortOrder;\n        },\n        set: function (val) {\n            this._sortOrder = val;\n            if (this.sortMode === 'single') {\n                this.sortSingle();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            if (this.immutable) {\n                this._value = val ? val.slice() : null;\n                this.handleDataChange();\n            }\n            else {\n                this._value = val;\n            }\n            this.valueChange.emit(this.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"first\", {\n        get: function () {\n            return this._first;\n        },\n        set: function (val) {\n            var shouldPaginate = this.initialized && this._first !== val;\n            this._first = val;\n            if (shouldPaginate) {\n                this.paginate();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"totalRecords\", {\n        get: function () {\n            return this._totalRecords;\n        },\n        set: function (val) {\n            this._totalRecords = val;\n            this.totalRecordsChanged = true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"selection\", {\n        get: function () {\n            return this._selection;\n        },\n        set: function (val) {\n            this._selection = val;\n            if (this.dataKey && !this.preventSelectionKeysPropagation) {\n                this.selectionKeys = {};\n                if (this._selection) {\n                    if (Array.isArray(this._selection)) {\n                        for (var _i = 0, _a = this._selection; _i < _a.length; _i++) {\n                            var data = _a[_i];\n                            this.selectionKeys[String(this.objectUtils.resolveFieldData(data, this.dataKey))] = 1;\n                        }\n                    }\n                    else {\n                        this.selectionKeys[String(this.objectUtils.resolveFieldData(this._selection, this.dataKey))] = 1;\n                    }\n                }\n            }\n            this.preventSelectionKeysPropagation = false;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataTable.prototype.ngDoCheck = function () {\n        if (!this.immutable) {\n            var changes = this.differ.diff(this.value);\n            if (changes) {\n                this.handleDataChange();\n            }\n        }\n    };\n    DataTable.prototype.handleDataChange = function () {\n        var _this = this;\n        if (this.paginator) {\n            this.updatePaginator();\n        }\n        if (this.virtualScroll && this.virtualScrollCallback) {\n            this.virtualScrollCallback();\n        }\n        if (!this.lazy) {\n            if (this.hasFilter()) {\n                this._filter();\n            }\n            if (this.preventSortPropagation) {\n                this.preventSortPropagation = false;\n            }\n            else if (this.sortField || this.multiSortMeta) {\n                if (!this.sortColumn && this.columns) {\n                    this.sortColumn = this.columns.find(function (col) { return col.field === _this.sortField && col.sortable === 'custom'; });\n                }\n                if (this.sortMode == 'single')\n                    this.sortSingle();\n                else if (this.sortMode == 'multiple')\n                    this.sortMultiple();\n            }\n        }\n        this.updateDataToRender(this.filteredValue || this.value);\n    };\n    DataTable.prototype.initColumns = function () {\n        this.columns = this.cols.toArray();\n        this.initScrollableColumns();\n        this.columnsChanged = true;\n    };\n    DataTable.prototype.initScrollableColumns = function () {\n        this.scrollableColumns = [];\n        this.frozenColumns = [];\n        for (var _i = 0, _a = this.columns; _i < _a.length; _i++) {\n            var col = _a[_i];\n            if (col.frozen)\n                this.frozenColumns.push(col);\n            else\n                this.scrollableColumns.push(col);\n        }\n    };\n    DataTable.prototype.initColumnGroups = function () {\n        var headerColumnsGroups = this.headerColumnGroups.toArray();\n        var footerColumnsGroups = this.footerColumnGroups.toArray();\n        for (var _i = 0, headerColumnsGroups_1 = headerColumnsGroups; _i < headerColumnsGroups_1.length; _i++) {\n            var columnGroup = headerColumnsGroups_1[_i];\n            if (columnGroup.frozen)\n                this.frozenHeaderColumnGroup = columnGroup;\n            else\n                this.scrollableHeaderColumnGroup = columnGroup;\n        }\n        for (var _a = 0, footerColumnsGroups_1 = footerColumnsGroups; _a < footerColumnsGroups_1.length; _a++) {\n            var columnGroup = footerColumnsGroups_1[_a];\n            if (columnGroup.frozen)\n                this.frozenFooterColumnGroup = columnGroup;\n            else\n                this.scrollableFooterColumnGroup = columnGroup;\n        }\n    };\n    DataTable.prototype.resolveFieldData = function (data, field) {\n        return this.objectUtils.resolveFieldData(data, field);\n    };\n    DataTable.prototype.updateRowGroupMetadata = function () {\n        this.rowGroupMetadata = {};\n        if (this.dataToRender) {\n            for (var i = 0; i < this.dataToRender.length; i++) {\n                var rowData = this.dataToRender[i];\n                var group = this.resolveFieldData(rowData, this.sortField);\n                if (i == 0) {\n                    this.rowGroupMetadata[group] = { index: 0, size: 1 };\n                }\n                else {\n                    var previousRowData = this.dataToRender[i - 1];\n                    var previousRowGroup = this.resolveFieldData(previousRowData, this.sortField);\n                    if (group === previousRowGroup) {\n                        this.rowGroupMetadata[group].size++;\n                    }\n                    else {\n                        this.rowGroupMetadata[group] = { index: i, size: 1 };\n                    }\n                }\n            }\n        }\n    };\n    DataTable.prototype.updatePaginator = function () {\n        //total records\n        this.updateTotalRecords();\n        //first\n        if (this.totalRecords && this.first >= this.totalRecords) {\n            var numberOfPages = Math.ceil(this.totalRecords / this.rows);\n            this._first = Math.max((numberOfPages - 1) * this.rows, 0);\n        }\n    };\n    DataTable.prototype.updateTotalRecords = function () {\n        this.totalRecords = this.lazy ? this.totalRecords : (this.value ? this.value.length : 0);\n    };\n    DataTable.prototype.onPageChange = function (event) {\n        this._first = event.first;\n        this.firstChange.emit(this.first);\n        this.rows = event.rows;\n        this.paginate();\n    };\n    DataTable.prototype.paginate = function () {\n        if (this.lazy)\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        else\n            this.updateDataToRender(this.filteredValue || this.value);\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n    };\n    DataTable.prototype.updateDataToRender = function (datasource) {\n        if ((this.paginator || this.virtualScroll) && datasource) {\n            this.dataToRender = [];\n            var startIndex = this.lazy ? 0 : this.first;\n            var endIndex = this.virtualScroll ? this.first + this.rows * 2 : startIndex + this.rows;\n            for (var i = startIndex; i < endIndex; i++) {\n                if (i >= datasource.length) {\n                    break;\n                }\n                this.dataToRender.push(datasource[i]);\n            }\n        }\n        else {\n            this.dataToRender = datasource;\n        }\n        if (this.rowGroupMode) {\n            this.updateRowGroupMetadata();\n        }\n        this.changeDetector.markForCheck();\n    };\n    DataTable.prototype.onVirtualScroll = function (event) {\n        var _this = this;\n        this._first = (event.page - 1) * this.rows;\n        this.virtualScrollCallback = event.callback;\n        this.zone.run(function () {\n            if (_this.virtualScrollTimer) {\n                clearTimeout(_this.virtualScrollTimer);\n            }\n            _this.virtualScrollTimer = setTimeout(function () {\n                if (_this.lazy)\n                    _this.onLazyLoad.emit(_this.createLazyLoadMetadata());\n                else\n                    _this.updateDataToRender(_this.filteredValue || _this.value);\n            }, _this.virtualScrollDelay);\n        });\n    };\n    DataTable.prototype.onHeaderKeydown = function (event, column) {\n        if (event.keyCode == 13) {\n            this.sort(event, column);\n            event.preventDefault();\n        }\n    };\n    DataTable.prototype.onHeaderMousedown = function (event, header) {\n        if (this.reorderableColumns) {\n            if (event.target.nodeName !== 'INPUT') {\n                header.draggable = true;\n            }\n            else if (event.target.nodeName === 'INPUT') {\n                header.draggable = false;\n            }\n        }\n    };\n    DataTable.prototype.sort = function (event, column) {\n        if (!column.sortable) {\n            return;\n        }\n        var targetNode = event.target;\n        if (this.domHandler.hasClass(targetNode, 'ui-sortable-column') || this.domHandler.hasClass(targetNode, 'ui-column-title') || this.domHandler.hasClass(targetNode, 'ui-sortable-column-icon')) {\n            if (!this.immutable) {\n                this.preventSortPropagation = true;\n            }\n            var columnSortField = column.sortField || column.field;\n            this._sortOrder = (this.sortField === columnSortField) ? this.sortOrder * -1 : this.defaultSortOrder;\n            this._sortField = columnSortField;\n            this.sortColumn = column;\n            var metaKey = event.metaKey || event.ctrlKey;\n            if (this.sortMode == 'multiple') {\n                if (!this.multiSortMeta || !metaKey) {\n                    this._multiSortMeta = [];\n                }\n                this.addSortMeta({ field: this.sortField, order: this.sortOrder });\n            }\n            if (this.lazy) {\n                this._first = 0;\n                this.onLazyLoad.emit(this.createLazyLoadMetadata());\n            }\n            else {\n                if (this.sortMode == 'multiple')\n                    this.sortMultiple();\n                else\n                    this.sortSingle();\n            }\n            this.onSort.emit({\n                field: this.sortField,\n                order: this.sortOrder,\n                multisortmeta: this.multiSortMeta\n            });\n        }\n        this.updateDataToRender(this.filteredValue || this.value);\n    };\n    DataTable.prototype.sortSingle = function () {\n        var _this = this;\n        if (this.value) {\n            if (this.sortColumn && this.sortColumn.sortable === 'custom') {\n                this.preventSortPropagation = true;\n                this.sortColumn.sortFunction.emit({\n                    field: this.sortField,\n                    order: this.sortOrder\n                });\n            }\n            else {\n                this.value.sort(function (data1, data2) {\n                    var value1 = _this.resolveFieldData(data1, _this.sortField);\n                    var value2 = _this.resolveFieldData(data2, _this.sortField);\n                    var result = null;\n                    if (value1 == null && value2 != null)\n                        result = -1;\n                    else if (value1 != null && value2 == null)\n                        result = 1;\n                    else if (value1 == null && value2 == null)\n                        result = 0;\n                    else if (typeof value1 === 'string' && typeof value2 === 'string')\n                        result = value1.localeCompare(value2);\n                    else\n                        result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n                    return (_this.sortOrder * result);\n                });\n            }\n            this._first = 0;\n            if (this.hasFilter()) {\n                this._filter();\n            }\n        }\n    };\n    DataTable.prototype.sortMultiple = function () {\n        var _this = this;\n        if (this.value) {\n            this.value.sort(function (data1, data2) {\n                return _this.multisortField(data1, data2, _this.multiSortMeta, 0);\n            });\n            if (this.hasFilter()) {\n                this._filter();\n            }\n        }\n    };\n    DataTable.prototype.multisortField = function (data1, data2, multiSortMeta, index) {\n        var value1 = this.resolveFieldData(data1, multiSortMeta[index].field);\n        var value2 = this.resolveFieldData(data2, multiSortMeta[index].field);\n        var result = null;\n        if (typeof value1 == 'string' || value1 instanceof String) {\n            if (value1.localeCompare && (value1 != value2)) {\n                return (multiSortMeta[index].order * value1.localeCompare(value2));\n            }\n        }\n        else {\n            result = (value1 < value2) ? -1 : 1;\n        }\n        if (value1 == value2) {\n            return (multiSortMeta.length - 1) > (index) ? (this.multisortField(data1, data2, multiSortMeta, index + 1)) : 0;\n        }\n        return (multiSortMeta[index].order * result);\n    };\n    DataTable.prototype.addSortMeta = function (meta) {\n        var index = -1;\n        for (var i = 0; i < this.multiSortMeta.length; i++) {\n            if (this.multiSortMeta[i].field === meta.field) {\n                index = i;\n                break;\n            }\n        }\n        if (index >= 0)\n            this.multiSortMeta[index] = meta;\n        else\n            this.multiSortMeta.push(meta);\n    };\n    DataTable.prototype.isSorted = function (column) {\n        if (!column.sortable) {\n            return false;\n        }\n        var columnSortField = column.sortField || column.field;\n        if (this.sortMode === 'single') {\n            return (this.sortField && columnSortField === this.sortField);\n        }\n        else if (this.sortMode === 'multiple') {\n            var sorted = false;\n            if (this.multiSortMeta) {\n                for (var i = 0; i < this.multiSortMeta.length; i++) {\n                    if (this.multiSortMeta[i].field == columnSortField) {\n                        sorted = true;\n                        break;\n                    }\n                }\n            }\n            return sorted;\n        }\n    };\n    DataTable.prototype.getSortOrder = function (column) {\n        var order = 0;\n        var columnSortField = column.sortField || column.field;\n        if (this.sortMode === 'single') {\n            if (this.sortField && columnSortField === this.sortField) {\n                order = this.sortOrder;\n            }\n        }\n        else if (this.sortMode === 'multiple') {\n            if (this.multiSortMeta) {\n                for (var i = 0; i < this.multiSortMeta.length; i++) {\n                    if (this.multiSortMeta[i].field == columnSortField) {\n                        order = this.multiSortMeta[i].order;\n                        break;\n                    }\n                }\n            }\n        }\n        return order;\n    };\n    DataTable.prototype.onRowGroupClick = function (event) {\n        if (this.rowGroupToggleClick) {\n            this.rowGroupToggleClick = false;\n            return;\n        }\n        if (this.sortableRowGroup) {\n            var targetNode = event.target.nodeName;\n            if ((targetNode == 'TD' || (targetNode == 'SPAN' && !this.domHandler.hasClass(event.target, 'ui-clickable')))) {\n                if (this.sortField != this.groupField) {\n                    this._sortField = this.groupField;\n                    this.sortSingle();\n                }\n                else {\n                    this._sortOrder = -1 * this.sortOrder;\n                    this.sortSingle();\n                }\n            }\n        }\n    };\n    DataTable.prototype.clearSelectionRange = function (event) {\n        var rangeStart, rangeEnd;\n        if (this.rangeRowIndex > this.anchorRowIndex) {\n            rangeStart = this.anchorRowIndex;\n            rangeEnd = this.rangeRowIndex;\n        }\n        else if (this.rangeRowIndex < this.anchorRowIndex) {\n            rangeStart = this.rangeRowIndex;\n            rangeEnd = this.anchorRowIndex;\n        }\n        else {\n            rangeStart = this.rangeRowIndex;\n            rangeEnd = this.rangeRowIndex;\n        }\n        var _loop_1 = function (i) {\n            var rangeRowData = this_1.dataToRender[i];\n            var selectionIndex = this_1.findIndexInSelection(rangeRowData);\n            this_1._selection = this_1.selection.filter(function (val, i) { return i != selectionIndex; });\n            var dataKeyValue = this_1.dataKey ? String(this_1.resolveFieldData(rangeRowData, this_1.dataKey)) : null;\n            if (dataKeyValue) {\n                delete this_1.selectionKeys[dataKeyValue];\n            }\n            this_1.onRowUnselect.emit({ originalEvent: event, data: rangeRowData, type: 'row' });\n        };\n        var this_1 = this;\n        for (var i = rangeStart; i <= rangeEnd; i++) {\n            _loop_1(i);\n        }\n    };\n    DataTable.prototype.selectRange = function (event, rowIndex) {\n        var rangeStart, rangeEnd;\n        if (this.anchorRowIndex > rowIndex) {\n            rangeStart = rowIndex;\n            rangeEnd = this.anchorRowIndex;\n        }\n        else if (this.anchorRowIndex < rowIndex) {\n            rangeStart = this.anchorRowIndex;\n            rangeEnd = rowIndex;\n        }\n        else {\n            rangeStart = rowIndex;\n            rangeEnd = rowIndex;\n        }\n        for (var i = rangeStart; i <= rangeEnd; i++) {\n            var rangeRowData = this.dataToRender[i];\n            this._selection = this.selection.concat([rangeRowData]);\n            this.selectionChange.emit(this.selection);\n            var dataKeyValue = this.dataKey ? String(this.resolveFieldData(rangeRowData, this.dataKey)) : null;\n            if (dataKeyValue) {\n                this.selectionKeys[dataKeyValue] = 1;\n            }\n            this.onRowSelect.emit({ originalEvent: event, data: rangeRowData, type: 'row' });\n        }\n    };\n    DataTable.prototype.handleRowClick = function (event, rowData, index) {\n        if (this.preventRowClickPropagation) {\n            this.preventRowClickPropagation = false;\n            return;\n        }\n        var targetNode = event.target.nodeName;\n        if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || (this.domHandler.hasClass(event.target, 'ui-clickable'))) {\n            return;\n        }\n        this.onRowClick.next({ originalEvent: event, data: rowData });\n        if (this.selectionMode) {\n            if (this.isMultipleSelectionMode() && event.shiftKey && this.anchorRowIndex != null) {\n                this.domHandler.clearSelection();\n                if (this.rangeRowIndex != null) {\n                    this.clearSelectionRange(event);\n                }\n                this.rangeRowIndex = index;\n                this.selectRange(event, index);\n            }\n            else {\n                var selected = this.isSelected(rowData);\n                var metaSelection = this.rowTouched ? false : this.metaKeySelection;\n                var dataKeyValue = this.dataKey ? String(this.resolveFieldData(rowData, this.dataKey)) : null;\n                this.anchorRowIndex = index;\n                this.rangeRowIndex = index;\n                if (metaSelection) {\n                    var metaKey = event.metaKey || event.ctrlKey;\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this._selection = null;\n                            this.selectionKeys = {};\n                            this.selectionChange.emit(null);\n                        }\n                        else {\n                            var selectionIndex_1 = this.findIndexInSelection(rowData);\n                            this._selection = this.selection.filter(function (val, i) { return i != selectionIndex_1; });\n                            this.selectionChange.emit(this.selection);\n                            if (dataKeyValue) {\n                                delete this.selectionKeys[dataKeyValue];\n                            }\n                        }\n                        this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                    }\n                    else {\n                        if (this.isSingleSelectionMode()) {\n                            this._selection = rowData;\n                            this.selectionChange.emit(rowData);\n                            if (dataKeyValue) {\n                                this.selectionKeys = {};\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                        else if (this.isMultipleSelectionMode()) {\n                            if (metaKey) {\n                                this._selection = this.selection || [];\n                            }\n                            else {\n                                this._selection = [];\n                                this.selectionKeys = {};\n                            }\n                            this._selection = this.selection.concat([rowData]);\n                            this.selectionChange.emit(this.selection);\n                            if (dataKeyValue) {\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                        this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                    }\n                }\n                else {\n                    if (this.isSingleSelectionMode()) {\n                        if (selected) {\n                            this._selection = null;\n                            this.selectionKeys = {};\n                            this.selectionChange.emit(this.selection);\n                            this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                        }\n                        else {\n                            this._selection = rowData;\n                            this.selectionChange.emit(this.selection);\n                            this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                            if (dataKeyValue) {\n                                this.selectionKeys = {};\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                    }\n                    else {\n                        if (selected) {\n                            var selectionIndex_2 = this.findIndexInSelection(rowData);\n                            this._selection = this.selection.filter(function (val, i) { return i != selectionIndex_2; });\n                            this.selectionChange.emit(this.selection);\n                            this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                            if (dataKeyValue) {\n                                delete this.selectionKeys[dataKeyValue];\n                            }\n                        }\n                        else {\n                            this._selection = (this.selection || []).concat([rowData]);\n                            this.selectionChange.emit(this.selection);\n                            this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                            if (dataKeyValue) {\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                    }\n                }\n            }\n            this.preventSelectionKeysPropagation = true;\n        }\n        this.rowTouched = false;\n    };\n    DataTable.prototype.handleRowTouchEnd = function (event) {\n        this.rowTouched = true;\n    };\n    DataTable.prototype.selectRowWithRadio = function (event, rowData) {\n        if (this.selection != rowData) {\n            this._selection = rowData;\n            this.selectionChange.emit(this.selection);\n            this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'radiobutton' });\n            if (this.dataKey) {\n                this.selectionKeys = {};\n                this.selectionKeys[String(this.resolveFieldData(rowData, this.dataKey))] = 1;\n            }\n        }\n        else {\n            this._selection = null;\n            this.selectionChange.emit(this.selection);\n            this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'radiobutton' });\n        }\n        this.preventSelectionKeysPropagation = true;\n        this.preventRowClickPropagation = true;\n    };\n    DataTable.prototype.toggleRowWithCheckbox = function (event, rowData) {\n        var selectionIndex = this.findIndexInSelection(rowData);\n        this.selection = this.selection || [];\n        var dataKeyValue = this.dataKey ? String(this.resolveFieldData(rowData, this.dataKey)) : null;\n        if (selectionIndex != -1) {\n            this._selection = this.selection.filter(function (val, i) { return i != selectionIndex; });\n            this.selectionChange.emit(this.selection);\n            this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'checkbox' });\n            if (dataKeyValue) {\n                delete this.selectionKeys[dataKeyValue];\n            }\n        }\n        else {\n            this._selection = this.selection.concat([rowData]);\n            this.selectionChange.emit(this.selection);\n            this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'checkbox' });\n            if (dataKeyValue) {\n                this.selectionKeys[dataKeyValue] = 1;\n            }\n        }\n        this.preventSelectionKeysPropagation = true;\n        this.preventRowClickPropagation = true;\n    };\n    DataTable.prototype.toggleRowsWithCheckbox = function (event) {\n        if (event.checked)\n            this.selection = this.headerCheckboxToggleAllPages ? this.value.slice() : this.dataToRender.slice();\n        else\n            this.selection = [];\n        this.selectionChange.emit(this.selection);\n        this.onHeaderCheckboxToggle.emit({ originalEvent: event, checked: event.checked });\n    };\n    DataTable.prototype.onRowRightClick = function (event, rowData) {\n        if (this.contextMenu) {\n            var selectionIndex = this.findIndexInSelection(rowData);\n            var selected = selectionIndex != -1;\n            var dataKeyValue = this.dataKey ? String(this.resolveFieldData(rowData, this.dataKey)) : null;\n            if (!selected) {\n                if (this.isSingleSelectionMode()) {\n                    this.selection = rowData;\n                    this.selectionChange.emit(rowData);\n                }\n                else if (this.isMultipleSelectionMode()) {\n                    this.selection = [rowData];\n                    this.selectionChange.emit(this.selection);\n                }\n                if (this.dataKey) {\n                    this.selectionKeys[String(this.resolveFieldData(rowData, this.dataKey))] = 1;\n                    this.preventSelectionKeysPropagation = true;\n                }\n            }\n            this.contextMenu.show(event);\n            this.onContextMenuSelect.emit({ originalEvent: event, data: rowData });\n        }\n    };\n    DataTable.prototype.rowDblclick = function (event, rowData) {\n        this.onRowDblclick.emit({ originalEvent: event, data: rowData });\n    };\n    DataTable.prototype.isSingleSelectionMode = function () {\n        return this.selectionMode === 'single';\n    };\n    DataTable.prototype.isMultipleSelectionMode = function () {\n        return this.selectionMode === 'multiple';\n    };\n    DataTable.prototype.findIndexInSelection = function (rowData) {\n        var index = -1;\n        if (this.selection) {\n            for (var i = 0; i < this.selection.length; i++) {\n                if (this.equals(rowData, this.selection[i])) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    DataTable.prototype.isSelected = function (rowData) {\n        if (rowData && this.selection) {\n            if (this.dataKey) {\n                return this.selectionKeys[this.objectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;\n            }\n            else {\n                if (this.selection instanceof Array)\n                    return this.findIndexInSelection(rowData) > -1;\n                else\n                    return this.equals(rowData, this.selection);\n            }\n        }\n        return false;\n    };\n    DataTable.prototype.equals = function (data1, data2) {\n        return this.compareSelectionBy === 'equals' ? (data1 === data2) : this.objectUtils.equals(data1, data2, this.dataKey);\n    };\n    Object.defineProperty(DataTable.prototype, \"allSelected\", {\n        get: function () {\n            if (this.headerCheckboxToggleAllPages) {\n                return this.selection && this.value && this.selection.length === this.value.length;\n            }\n            else {\n                var val = true;\n                if (this.dataToRender && this.selection && (this.dataToRender.length <= this.selection.length)) {\n                    for (var _i = 0, _a = this.dataToRender; _i < _a.length; _i++) {\n                        var data = _a[_i];\n                        if (!this.isSelected(data)) {\n                            val = false;\n                            break;\n                        }\n                    }\n                }\n                else {\n                    val = false;\n                }\n                return val;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataTable.prototype.onFilterKeyup = function (value, field, matchMode) {\n        var _this = this;\n        if (this.filterTimeout) {\n            clearTimeout(this.filterTimeout);\n        }\n        this.filterTimeout = setTimeout(function () {\n            _this.filter(value, field, matchMode);\n            _this.filterTimeout = null;\n        }, this.filterDelay);\n    };\n    DataTable.prototype.filter = function (value, field, matchMode) {\n        if (!this.isFilterBlank(value))\n            this.filters[field] = { value: value, matchMode: matchMode };\n        else if (this.filters[field])\n            delete this.filters[field];\n        this._filter();\n    };\n    DataTable.prototype.isFilterBlank = function (filter) {\n        if (filter !== null && filter !== undefined) {\n            if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))\n                return true;\n            else\n                return false;\n        }\n        return true;\n    };\n    DataTable.prototype._filter = function () {\n        this._first = 0;\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            if (!this.value || !this.columns) {\n                return;\n            }\n            this.filteredValue = [];\n            for (var i = 0; i < this.value.length; i++) {\n                var localMatch = true;\n                var globalMatch = false;\n                for (var j = 0; j < this.columns.length; j++) {\n                    var col = this.columns[j], filterMeta = this.filters[col.filterField || col.field];\n                    //local\n                    if (filterMeta) {\n                        var filterValue = filterMeta.value, filterField = col.filterField || col.field, filterMatchMode = filterMeta.matchMode || 'startsWith', dataFieldValue = this.resolveFieldData(this.value[i], filterField);\n                        var filterConstraint = this.filterConstraints[filterMatchMode];\n                        if (!filterConstraint(dataFieldValue, filterValue)) {\n                            localMatch = false;\n                        }\n                        if (!localMatch) {\n                            break;\n                        }\n                    }\n                    //global\n                    if (!col.excludeGlobalFilter && this.globalFilter && !globalMatch) {\n                        globalMatch = this.filterConstraints['contains'](this.resolveFieldData(this.value[i], col.filterField || col.field), this.globalFilter.value);\n                    }\n                }\n                var matches = localMatch;\n                if (this.globalFilter) {\n                    matches = localMatch && globalMatch;\n                }\n                if (matches) {\n                    this.filteredValue.push(this.value[i]);\n                }\n            }\n            if (this.filteredValue.length === this.value.length) {\n                this.filteredValue = null;\n            }\n            if (this.paginator) {\n                this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;\n            }\n            this.updateDataToRender(this.filteredValue || this.value);\n        }\n        this.onFilter.emit({\n            filters: this.filters,\n            filteredValue: this.filteredValue || this.value\n        });\n    };\n    DataTable.prototype.hasFilter = function () {\n        var empty = true;\n        for (var prop in this.filters) {\n            if (this.filters.hasOwnProperty(prop)) {\n                empty = false;\n                break;\n            }\n        }\n        return !empty || (this.globalFilter && this.globalFilter.value && this.globalFilter.value.trim().length);\n    };\n    DataTable.prototype.onFilterInputClick = function (event) {\n        event.stopPropagation();\n    };\n    DataTable.prototype.switchCellToEditMode = function (cell, column, rowData) {\n        var _this = this;\n        if (!this.selectionMode && this.editable && column.editable) {\n            this.editorClick = true;\n            this.bindDocumentEditListener();\n            if (cell != this.editingCell) {\n                if (this.editingCell && this.domHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length == 0) {\n                    this.domHandler.removeClass(this.editingCell, 'ui-cell-editing');\n                }\n                this.editingCell = cell;\n                this.onEditInit.emit({ column: column, data: rowData });\n                this.domHandler.addClass(cell, 'ui-cell-editing');\n                var focusable_1 = this.domHandler.findSingle(cell, '.ui-cell-editor input, .ui-cell-editor textarea');\n                if (focusable_1) {\n                    setTimeout(function () { return _this.domHandler.invokeElementMethod(focusable_1, 'focus'); }, 50);\n                }\n            }\n        }\n    };\n    DataTable.prototype.switchCellToViewMode = function (element) {\n        this.editingCell = null;\n        var cell = this.findCell(element);\n        this.domHandler.removeClass(cell, 'ui-cell-editing');\n        this.unbindDocumentEditListener();\n    };\n    DataTable.prototype.closeCell = function () {\n        if (this.editingCell) {\n            this.domHandler.removeClass(this.editingCell, 'ui-cell-editing');\n            this.editingCell = null;\n            this.unbindDocumentEditListener();\n        }\n    };\n    DataTable.prototype.bindDocumentEditListener = function () {\n        var _this = this;\n        if (!this.documentEditListener) {\n            this.documentEditListener = this.renderer.listen('document', 'click', function (event) {\n                if (!_this.editorClick && event.button !== 2) {\n                    _this.closeCell();\n                }\n                _this.editorClick = false;\n            });\n        }\n    };\n    DataTable.prototype.unbindDocumentEditListener = function () {\n        if (this.documentEditListener) {\n            this.documentEditListener();\n            this.documentEditListener = null;\n        }\n    };\n    DataTable.prototype.onCellEditorKeydown = function (event, column, rowData, rowIndex) {\n        if (this.editable) {\n            //enter\n            if (event.keyCode == 13) {\n                if (this.domHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length == 0) {\n                    this.switchCellToViewMode(event.target);\n                    event.preventDefault();\n                }\n            }\n            else if (event.keyCode == 27) {\n                this.switchCellToViewMode(event.target);\n                event.preventDefault();\n            }\n            else if (event.keyCode == 9) {\n                if (event.shiftKey)\n                    this.moveToPreviousCell(event);\n                else\n                    this.moveToNextCell(event);\n            }\n        }\n    };\n    DataTable.prototype.onCellEditorInput = function (event, column, rowData, rowIndex) {\n        if (this.editable) {\n            this.onEdit.emit({ originalEvent: event, column: column, data: rowData, index: rowIndex });\n        }\n    };\n    DataTable.prototype.onCellEditorChange = function (event, column, rowData, rowIndex) {\n        if (this.editable) {\n            this.editChanged = true;\n            this.onEditComplete.emit({ column: column, data: rowData, index: rowIndex });\n        }\n    };\n    DataTable.prototype.onCellEditorBlur = function (event, column, rowData, rowIndex) {\n        if (this.editable) {\n            if (this.editChanged)\n                this.editChanged = false;\n            else\n                this.onEditCancel.emit({ column: column, data: rowData, index: rowIndex });\n        }\n    };\n    DataTable.prototype.moveToPreviousCell = function (event) {\n        var currentCell = this.findCell(event.target);\n        var row = currentCell.parentElement;\n        var targetCell = this.findPreviousEditableColumn(currentCell);\n        if (targetCell) {\n            this.domHandler.invokeElementMethod(targetCell, 'click');\n            event.preventDefault();\n        }\n    };\n    DataTable.prototype.moveToNextCell = function (event) {\n        var currentCell = this.findCell(event.target);\n        var row = currentCell.parentElement;\n        var targetCell = this.findNextEditableColumn(currentCell);\n        if (targetCell) {\n            this.domHandler.invokeElementMethod(targetCell, 'click');\n            event.preventDefault();\n        }\n    };\n    DataTable.prototype.findPreviousEditableColumn = function (cell) {\n        var prevCell = cell.previousElementSibling;\n        if (!prevCell) {\n            var previousRow = cell.parentElement.previousElementSibling;\n            if (previousRow) {\n                prevCell = previousRow.lastElementChild;\n            }\n        }\n        if (prevCell) {\n            if (this.domHandler.hasClass(prevCell, 'ui-editable-column'))\n                return prevCell;\n            else\n                return this.findPreviousEditableColumn(prevCell);\n        }\n        else {\n            return null;\n        }\n    };\n    DataTable.prototype.findNextEditableColumn = function (cell) {\n        var nextCell = cell.nextElementSibling;\n        if (!nextCell) {\n            var nextRow = cell.parentElement.nextElementSibling;\n            if (nextRow) {\n                nextCell = nextRow.firstElementChild;\n            }\n        }\n        if (nextCell) {\n            if (this.domHandler.hasClass(nextCell, 'ui-editable-column'))\n                return nextCell;\n            else\n                return this.findNextEditableColumn(nextCell);\n        }\n        else {\n            return null;\n        }\n    };\n    DataTable.prototype.onCustomEditorFocusPrev = function (event) {\n        this.moveToPreviousCell(event);\n    };\n    DataTable.prototype.onCustomEditorFocusNext = function (event) {\n        this.moveToNextCell(event);\n    };\n    DataTable.prototype.findCell = function (element) {\n        if (element) {\n            var cell = element;\n            while (cell && cell.tagName != 'TD') {\n                cell = cell.parentElement;\n            }\n            return cell;\n        }\n        else {\n            return null;\n        }\n    };\n    DataTable.prototype.initResizableColumns = function () {\n        this.tbody = this.domHandler.findSingle(this.el.nativeElement, 'tbody.ui-datatable-data');\n        this.resizerHelper = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-column-resizer-helper');\n        this.fixColumnWidths();\n    };\n    DataTable.prototype.onDocumentMouseMove = function (event) {\n        if (this.columnResizing) {\n            this.onColumnResize(event);\n        }\n    };\n    DataTable.prototype.onDocumentMouseUp = function (event) {\n        if (this.columnResizing) {\n            this.columnResizing = false;\n            this.onColumnResizeEnd(event);\n        }\n    };\n    DataTable.prototype.bindColumnResizeEvents = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            window.document.addEventListener('mousemove', _this.onDocumentMouseMove.bind(_this));\n        });\n        this.documentColumnResizeEndListener = this.renderer.listen('document', 'mouseup', function (event) {\n            if (_this.columnResizing) {\n                _this.columnResizing = false;\n                _this.onColumnResizeEnd(event);\n            }\n        });\n    };\n    DataTable.prototype.unbindColumnResizeEvents = function () {\n        window.document.removeEventListener('mousemove', this.onDocumentMouseMove);\n        if (this.documentColumnResizeEndListener) {\n            this.documentColumnResizeEndListener();\n            this.documentColumnResizeEndListener = null;\n        }\n    };\n    DataTable.prototype.initColumnResize = function (event) {\n        this.bindColumnResizeEvents();\n        var container = this.el.nativeElement.children[0];\n        var containerLeft = this.domHandler.getOffset(container).left;\n        this.resizeColumn = event.target.parentElement;\n        this.columnResizing = true;\n        this.lastResizerHelperX = (event.pageX - containerLeft + container.scrollLeft);\n    };\n    DataTable.prototype.onColumnResize = function (event) {\n        var container = this.el.nativeElement.children[0];\n        var containerLeft = this.domHandler.getOffset(container).left;\n        this.domHandler.addClass(container, 'ui-unselectable-text');\n        this.resizerHelper.style.height = container.offsetHeight + 'px';\n        this.resizerHelper.style.top = 0 + 'px';\n        this.resizerHelper.style.left = (event.pageX - containerLeft + container.scrollLeft) + 'px';\n        this.resizerHelper.style.display = 'block';\n    };\n    DataTable.prototype.onColumnResizeEnd = function (event) {\n        var delta = this.resizerHelper.offsetLeft - this.lastResizerHelperX;\n        var columnWidth = this.resizeColumn.offsetWidth;\n        var newColumnWidth = columnWidth + delta;\n        var minWidth = this.resizeColumn.style.minWidth || 15;\n        if (columnWidth + delta > parseInt(minWidth)) {\n            if (this.columnResizeMode === 'fit') {\n                var nextColumn = this.resizeColumn.nextElementSibling;\n                while (this.domHandler.hasClass(nextColumn, 'ui-helper-hidden')) {\n                    nextColumn = nextColumn.nextElementSibling;\n                }\n                if (nextColumn) {\n                    var nextColumnWidth = nextColumn.offsetWidth - delta;\n                    var nextColumnMinWidth = nextColumn.style.minWidth || 15;\n                    if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {\n                        this.resizeColumn.style.width = newColumnWidth + 'px';\n                        if (nextColumn) {\n                            nextColumn.style.width = nextColumnWidth + 'px';\n                        }\n                        if (this.scrollable) {\n                            var colGroup = this.domHandler.findSingle(this.el.nativeElement, 'colgroup.ui-datatable-scrollable-colgroup');\n                            var resizeColumnIndex = this.domHandler.index(this.resizeColumn);\n                            colGroup.children[resizeColumnIndex].style.width = newColumnWidth + 'px';\n                            if (nextColumn) {\n                                colGroup.children[resizeColumnIndex + 1].style.width = nextColumnWidth + 'px';\n                            }\n                        }\n                    }\n                }\n            }\n            else if (this.columnResizeMode === 'expand') {\n                this.tbody.parentElement.style.width = this.tbody.parentElement.offsetWidth + delta + 'px';\n                this.resizeColumn.style.width = newColumnWidth + 'px';\n                var containerWidth = this.tbody.parentElement.style.width;\n                if (this.scrollable) {\n                    this.domHandler.findSingle(this.el.nativeElement, '.ui-datatable-scrollable-header-box').children[0].style.width = containerWidth;\n                    var colGroup = this.domHandler.findSingle(this.el.nativeElement, 'colgroup.ui-datatable-scrollable-colgroup');\n                    var resizeColumnIndex = this.domHandler.index(this.resizeColumn);\n                    colGroup.children[resizeColumnIndex].style.width = newColumnWidth + 'px';\n                }\n                else {\n                    this.el.nativeElement.children[0].style.width = containerWidth;\n                }\n            }\n            this.onColResize.emit({\n                element: this.resizeColumn,\n                delta: delta\n            });\n        }\n        this.resizerHelper.style.display = 'none';\n        this.resizeColumn = null;\n        this.domHandler.removeClass(this.el.nativeElement.children[0], 'ui-unselectable-text');\n        this.unbindColumnResizeEvents();\n    };\n    DataTable.prototype.fixColumnWidths = function () {\n        var columns = this.domHandler.find(this.el.nativeElement, 'th.ui-resizable-column');\n        var bodyCols;\n        for (var i = 0; i < columns.length; i++) {\n            columns[i].style.width = columns[i].offsetWidth + 'px';\n        }\n        if (this.scrollable) {\n            var colGroup = this.domHandler.findSingle(this.el.nativeElement, 'colgroup.ui-datatable-scrollable-colgroup');\n            bodyCols = colGroup.children;\n            if (bodyCols) {\n                for (var i = 0; i < bodyCols.length; i++) {\n                    bodyCols[i].style.width = columns[i].offsetWidth + 'px';\n                }\n            }\n        }\n    };\n    DataTable.prototype.onColumnDragStart = function (event) {\n        var _this = this;\n        if (this.columnResizing) {\n            event.preventDefault();\n            return;\n        }\n        this.draggedColumn = this.findParentHeader(event.target);\n        event.dataTransfer.setData('text', 'b'); // Firefox requires this to make dragging possible\n        this.zone.runOutsideAngular(function () {\n            window.document.addEventListener('dragover', _this.onColumnDragover.bind(_this));\n        });\n    };\n    DataTable.prototype.onColumnDragover = function (event) {\n        var dropHeader = this.findParentHeader(event.target);\n        if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n            event.preventDefault();\n            var container = this.el.nativeElement.children[0];\n            var containerOffset = this.domHandler.getOffset(container);\n            var dropHeaderOffset = this.domHandler.getOffset(dropHeader);\n            if (this.draggedColumn != dropHeader) {\n                var targetLeft = dropHeaderOffset.left - containerOffset.left;\n                var targetTop = containerOffset.top - dropHeaderOffset.top;\n                var columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n                this.reorderIndicatorUp.style.top = dropHeaderOffset.top - containerOffset.top - (this.iconHeight - 1) + 'px';\n                this.reorderIndicatorDown.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n                if (event.pageX > columnCenter) {\n                    this.reorderIndicatorUp.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.iconWidth / 2)) + 'px';\n                    this.reorderIndicatorDown.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.iconWidth / 2)) + 'px';\n                    this.dropPosition = 1;\n                }\n                else {\n                    this.reorderIndicatorUp.style.left = (targetLeft - Math.ceil(this.iconWidth / 2)) + 'px';\n                    this.reorderIndicatorDown.style.left = (targetLeft - Math.ceil(this.iconWidth / 2)) + 'px';\n                    this.dropPosition = -1;\n                }\n                this.reorderIndicatorUp.style.display = 'block';\n                this.reorderIndicatorDown.style.display = 'block';\n            }\n            else {\n                event.dataTransfer.dropEffect = 'none';\n            }\n        }\n    };\n    DataTable.prototype.onColumnDragleave = function (event) {\n        if (this.reorderableColumns && this.draggedColumn) {\n            event.preventDefault();\n            this.reorderIndicatorUp.style.display = 'none';\n            this.reorderIndicatorDown.style.display = 'none';\n            window.document.removeEventListener('dragover', this.onColumnDragover);\n        }\n    };\n    DataTable.prototype.onColumnDrop = function (event) {\n        event.preventDefault();\n        if (this.draggedColumn) {\n            var dragIndex = this.domHandler.index(this.draggedColumn);\n            var dropIndex = this.domHandler.index(this.findParentHeader(event.target));\n            var allowDrop = (dragIndex != dropIndex);\n            if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {\n                allowDrop = false;\n            }\n            if (allowDrop) {\n                this.objectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n                if (this.scrollable) {\n                    this.initScrollableColumns();\n                }\n                this.onColReorder.emit({\n                    dragIndex: dragIndex,\n                    dropIndex: dropIndex,\n                    columns: this.columns\n                });\n            }\n            this.reorderIndicatorUp.style.display = 'none';\n            this.reorderIndicatorDown.style.display = 'none';\n            this.draggedColumn.draggable = false;\n            this.draggedColumn = null;\n            this.dropPosition = null;\n        }\n    };\n    DataTable.prototype.initColumnReordering = function () {\n        this.reorderIndicatorUp = this.domHandler.findSingle(this.el.nativeElement.children[0], 'span.ui-datatable-reorder-indicator-up');\n        this.reorderIndicatorDown = this.domHandler.findSingle(this.el.nativeElement.children[0], 'span.ui-datatable-reorder-indicator-down');\n        this.iconWidth = this.domHandler.getHiddenElementOuterWidth(this.reorderIndicatorUp);\n        this.iconHeight = this.domHandler.getHiddenElementOuterHeight(this.reorderIndicatorUp);\n    };\n    DataTable.prototype.findParentHeader = function (element) {\n        if (element.nodeName == 'TH') {\n            return element;\n        }\n        else {\n            var parent_1 = element.parentElement;\n            while (parent_1.nodeName != 'TH') {\n                parent_1 = parent_1.parentElement;\n                if (!parent_1)\n                    break;\n            }\n            return parent_1;\n        }\n    };\n    DataTable.prototype.hasFooter = function () {\n        if (this.footerColumnGroups && this.footerColumnGroups.first) {\n            return true;\n        }\n        else {\n            if (this.columns) {\n                for (var i = 0; i < this.columns.length; i++) {\n                    if (this.columns[i].footer || this.columns[i].footerTemplate) {\n                        return true;\n                    }\n                }\n            }\n        }\n        return false;\n    };\n    DataTable.prototype.isEmpty = function () {\n        return !this.dataToRender || (this.dataToRender.length == 0);\n    };\n    DataTable.prototype.createLazyLoadMetadata = function () {\n        return {\n            first: this.first,\n            rows: this.virtualScroll ? this.rows * 2 : this.rows,\n            sortField: this.sortField,\n            sortOrder: this.sortOrder,\n            filters: this.filters,\n            globalFilter: this.globalFilter ? this.globalFilter.value : null,\n            multiSortMeta: this.multiSortMeta\n        };\n    };\n    DataTable.prototype.toggleRow = function (row, event) {\n        if (!this.expandedRows) {\n            this.expandedRows = [];\n        }\n        var expandedRowIndex = this.findExpandedRowIndex(row);\n        if (expandedRowIndex != -1) {\n            this.expandedRows.splice(expandedRowIndex, 1);\n            this.onRowCollapse.emit({\n                originalEvent: event,\n                data: row\n            });\n        }\n        else {\n            if (this.rowExpandMode === 'single') {\n                this.expandedRows = [];\n            }\n            this.expandedRows.push(row);\n            this.onRowExpand.emit({\n                originalEvent: event,\n                data: row\n            });\n        }\n        if (event) {\n            event.preventDefault();\n        }\n    };\n    DataTable.prototype.findExpandedRowIndex = function (row) {\n        var index = -1;\n        if (this.expandedRows) {\n            for (var i = 0; i < this.expandedRows.length; i++) {\n                if (this.expandedRows[i] == row) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    DataTable.prototype.isRowExpanded = function (row) {\n        return this.findExpandedRowIndex(row) != -1;\n    };\n    DataTable.prototype.findExpandedRowGroupIndex = function (row) {\n        var index = -1;\n        if (this.expandedRowsGroups && this.expandedRowsGroups.length) {\n            for (var i = 0; i < this.expandedRowsGroups.length; i++) {\n                var group = this.expandedRowsGroups[i];\n                var rowGroupField = this.resolveFieldData(row, this.groupField);\n                if (rowGroupField === group) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    DataTable.prototype.isRowGroupExpanded = function (row) {\n        return this.findExpandedRowGroupIndex(row) != -1;\n    };\n    DataTable.prototype.toggleRowGroup = function (event, row) {\n        if (!this.expandedRowsGroups) {\n            this.expandedRowsGroups = [];\n        }\n        this.rowGroupToggleClick = true;\n        var index = this.findExpandedRowGroupIndex(row);\n        var rowGroupField = this.resolveFieldData(row, this.groupField);\n        if (index >= 0) {\n            this.expandedRowsGroups.splice(index, 1);\n            this.onRowGroupCollapse.emit({\n                originalEvent: event,\n                group: rowGroupField\n            });\n        }\n        else {\n            if (this.rowGroupExpandMode === 'single') {\n                this.expandedRowsGroups = [];\n            }\n            this.expandedRowsGroups.push(rowGroupField);\n            this.onRowGroupExpand.emit({\n                originalEvent: event,\n                group: rowGroupField\n            });\n        }\n        event.preventDefault();\n    };\n    DataTable.prototype.reset = function () {\n        this._sortField = null;\n        this._sortOrder = 1;\n        this.filteredValue = null;\n        this.filters = {};\n        this._first = 0;\n        this.firstChange.emit(this._first);\n        this.updateTotalRecords();\n        if (this.lazy)\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        else\n            this.updateDataToRender(this.value);\n    };\n    DataTable.prototype.exportCSV = function (options) {\n        var _this = this;\n        var data = this.filteredValue || this.value;\n        var csv = '\\ufeff';\n        if (options && options.selectionOnly) {\n            data = this.selection || [];\n        }\n        //headers\n        for (var i = 0; i < this.columns.length; i++) {\n            var column = this.columns[i];\n            if (column.exportable && column.field) {\n                csv += '\"' + (column.header || column.field) + '\"';\n                if (i < (this.columns.length - 1)) {\n                    csv += this.csvSeparator;\n                }\n            }\n        }\n        //body\n        data.forEach(function (record, i) {\n            csv += '\\n';\n            for (var i_1 = 0; i_1 < _this.columns.length; i_1++) {\n                var column = _this.columns[i_1];\n                if (column.exportable && column.field) {\n                    var cellData = _this.resolveFieldData(record, column.field);\n                    if (cellData != null)\n                        cellData = String(cellData).replace(/\"/g, '\"\"');\n                    else\n                        cellData = '';\n                    csv += '\"' + cellData + '\"';\n                    if (i_1 < (_this.columns.length - 1)) {\n                        csv += _this.csvSeparator;\n                    }\n                }\n            }\n        });\n        var blob = new Blob([csv], {\n            type: 'text/csv;charset=utf-8;'\n        });\n        if (window.navigator.msSaveOrOpenBlob) {\n            navigator.msSaveOrOpenBlob(blob, this.exportFilename + '.csv');\n        }\n        else {\n            var link = document.createElement(\"a\");\n            link.style.display = 'none';\n            document.body.appendChild(link);\n            if (link.download !== undefined) {\n                link.setAttribute('href', URL.createObjectURL(blob));\n                link.setAttribute('download', this.exportFilename + '.csv');\n                link.click();\n            }\n            else {\n                csv = 'data:text/csv;charset=utf-8,' + csv;\n                window.open(encodeURI(csv));\n            }\n            document.body.removeChild(link);\n        }\n    };\n    DataTable.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    DataTable.prototype.getRowStyleClass = function (rowData, rowIndex) {\n        var styleClass = 'ui-widget-content';\n        if (this.rowStyleClass) {\n            var rowClass = this.rowStyleClass.call(this, rowData, rowIndex);\n            if (rowClass) {\n                styleClass += ' ' + rowClass;\n            }\n        }\n        else if (this.rowStyleMap && this.dataKey) {\n            var rowClass = this.rowStyleMap[rowData[this.dataKey]];\n            if (rowClass) {\n                styleClass += ' ' + rowClass;\n            }\n        }\n        return styleClass;\n    };\n    DataTable.prototype.visibleColumns = function () {\n        return this.columns ? this.columns.filter(function (c) { return !c.hidden; }) : [];\n    };\n    Object.defineProperty(DataTable.prototype, \"containerWidth\", {\n        get: function () {\n            if (this.scrollable) {\n                if (this.scrollWidth) {\n                    return this.scrollWidth;\n                }\n                else if (this.frozenWidth && this.unfrozenWidth) {\n                    return parseFloat(this.frozenWidth) + parseFloat(this.unfrozenWidth) + 'px';\n                }\n            }\n            else {\n                return this.style ? this.style.width : null;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataTable.prototype.hasFrozenColumns = function () {\n        return this.frozenColumns && this.frozenColumns.length > 0;\n    };\n    DataTable.prototype.ngOnDestroy = function () {\n        //remove event listener\n        if (this.globalFilterFunction) {\n            this.globalFilterFunction();\n        }\n        if (this.resizableColumns) {\n            this.unbindColumnResizeEvents();\n        }\n        this.unbindDocumentEditListener();\n        if (this.columnsSubscription) {\n            this.columnsSubscription.unsubscribe();\n        }\n        if (this.virtualScrollCallback) {\n            this.virtualScrollCallback = null;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"paginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"pageLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataTable.prototype, \"rowsPerPageOptions\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"stacked\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"selectionChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"editable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"showHeaderCheckbox\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowUnselect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowDblclick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onHeaderCheckboxToggle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"headerCheckboxToggleAllPages\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onContextMenuSelect\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"filterDelay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onLazyLoad\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"resizableColumns\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"columnResizeMode\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onColResize\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"reorderableColumns\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onColReorder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"scrollable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"virtualScroll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"scrollWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"frozenWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"unfrozenWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"tableStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"tableStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"globalFilter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"sortMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"defaultSortOrder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"groupField\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"contextMenu\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"csvSeparator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"exportFilename\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"paginatorPosition\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"alwaysShowPaginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataTable.prototype, \"rowTrackBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataTable.prototype, \"frozenValue\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"compareSelectionBy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onEditInit\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onEditComplete\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onEdit\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onEditCancel\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onPage\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onSort\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onFilter\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_2.Header),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_2.Footer),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"expandableRows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataTable.prototype, \"expandedRows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"expandableRowGroups\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"rowExpandMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataTable.prototype, \"expandedRowsGroups\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"expandedIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"collapsedIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataTable.prototype, \"rowStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"rowStyleMap\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"rowGroupMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"sortableRowGroup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"sortFile\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"rowHover\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"filters\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"loading\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"loadingIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"virtualScrollDelay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"rowGroupExpandMode\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"valueChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"firstChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowExpand\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowCollapse\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowGroupExpand\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowGroupCollapse\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataTable.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.Column),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataTable.prototype, \"cols\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.HeaderColumnGroup),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataTable.prototype, \"headerColumnGroups\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.FooterColumnGroup),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataTable.prototype, \"footerColumnGroups\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], DataTable.prototype, \"multiSortMeta\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], DataTable.prototype, \"sortField\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], DataTable.prototype, \"sortOrder\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], DataTable.prototype, \"value\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], DataTable.prototype, \"first\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], DataTable.prototype, \"totalRecords\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], DataTable.prototype, \"selection\", null);\n    DataTable = __decorate([\n        core_1.Component({\n            selector: 'p-dataTable',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [style.width]=\\\"containerWidth\\\"\\n            [ngClass]=\\\"{'ui-datatable ui-widget':true,'ui-datatable-reflow':responsive,'ui-datatable-stacked':stacked,'ui-datatable-resizable':resizableColumns,'ui-datatable-scrollable':scrollable}\\\">\\n            <div class=\\\"ui-datatable-loading ui-widget-overlay\\\" *ngIf=\\\"loading\\\"></div>\\n            <div class=\\\"ui-datatable-loading-content\\\" *ngIf=\\\"loading\\\">\\n                <i [class]=\\\"'fa fa-spin fa-2x ' + loadingIcon\\\"></i>\\n            </div>\\n            <div class=\\\"ui-datatable-header ui-widget-header\\\" *ngIf=\\\"header\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" styleClass=\\\"ui-paginator-top\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n                (onPageChange)=\\\"onPageChange($event)\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\\\"\\n                [templateLeft]=\\\"paginatorLeftTemplate\\\" [templateRight]=\\\"paginatorRightTemplate\\\"></p-paginator>\\n            <div class=\\\"ui-datatable-tablewrapper\\\" *ngIf=\\\"!scrollable\\\">\\n                <table [ngClass]=\\\"tableStyleClass\\\" [ngStyle]=\\\"tableStyle\\\">\\n                    <thead class=\\\"ui-datatable-thead\\\">\\n                        <tr *ngIf=\\\"!headerColumnGroups || !headerColumnGroups.first\\\" class=\\\"ui-state-default\\\" [pColumnHeaders]=\\\"columns\\\"></tr>\\n                        <ng-template [ngIf]=\\\"headerColumnGroups && headerColumnGroups.first\\\">\\n                            <tr *ngFor=\\\"let headerRow of headerColumnGroups.first.rows\\\" class=\\\"ui-state-default\\\" [pColumnHeaders]=\\\"headerRow.columns\\\"></tr>\\n                        </ng-template>\\n                    </thead>\\n                    <tfoot *ngIf=\\\"hasFooter()\\\" class=\\\"ui-datatable-tfoot\\\">\\n                        <tr *ngIf=\\\"!footerColumnGroups.first\\\" class=\\\"ui-state-default\\\" [pColumnFooters]=\\\"columns\\\"></tr>\\n                        <ng-template [ngIf]=\\\"footerColumnGroups.first\\\">\\n                            <tr *ngFor=\\\"let footerRow of footerColumnGroups.first.rows\\\" class=\\\"ui-state-default\\\" [pColumnFooters]=\\\"footerRow.columns\\\"></tr>\\n                        </ng-template>\\n                    </tfoot>\\n                    <tbody [ngClass]=\\\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (rowHover||selectionMode)}\\\" [pTableBody]=\\\"columns\\\" [data]=\\\"dataToRender\\\"></tbody>\\n                </table>\\n            </div>\\n            \\n            <ng-template [ngIf]=\\\"scrollable\\\">\\n                <div class=\\\"ui-datatable-scrollable-wrapper ui-helper-clearfix\\\">\\n                    <div *ngIf=\\\"hasFrozenColumns()\\\" [pScrollableView]=\\\"frozenColumns\\\" frozen=\\\"true\\\"\\n                        [headerColumnGroup]=\\\"frozenHeaderColumnGroup\\\" [footerColumnGroup]=\\\"frozenFooterColumnGroup\\\"\\n                        [ngStyle]=\\\"{'width':this.frozenWidth}\\\" class=\\\"ui-datatable-scrollable-view ui-datatable-frozen-view\\\"></div>\\n                    <div [pScrollableView]=\\\"scrollableColumns\\\" [ngStyle]=\\\"{'width':this.unfrozenWidth, 'left': this.frozenWidth}\\\"\\n                        [headerColumnGroup]=\\\"scrollableHeaderColumnGroup\\\" [footerColumnGroup]=\\\"scrollableFooterColumnGroup\\\"\\n                        class=\\\"ui-datatable-scrollable-view\\\" [virtualScroll]=\\\"virtualScroll\\\" (onVirtualScroll)=\\\"onVirtualScroll($event)\\\"\\n                        [ngClass]=\\\"{'ui-datatable-unfrozen-view': hasFrozenColumns()}\\\"></div>\\n                </div>\\n            </ng-template>\\n            \\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" styleClass=\\\"ui-paginator-bottom\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n                (onPageChange)=\\\"onPageChange($event)\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\\\"\\n                [templateLeft]=\\\"paginatorLeftTemplate\\\" [templateRight]=\\\"paginatorRightTemplate\\\"></p-paginator>\\n            <div class=\\\"ui-datatable-footer ui-widget-header\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n            \\n            <div class=\\\"ui-column-resizer-helper ui-state-highlight\\\" style=\\\"display:none\\\"></div>\\n            <span class=\\\"fa fa-arrow-down ui-datatable-reorder-indicator-up\\\" style=\\\"position: absolute; display: none;\\\"></span>\\n            <span class=\\\"fa fa-arrow-up ui-datatable-reorder-indicator-down\\\" style=\\\"position: absolute; display: none;\\\"></span>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.IterableDiffers,\n            core_1.Renderer2, core_1.ChangeDetectorRef, objectutils_1.ObjectUtils,\n            core_1.NgZone])\n    ], DataTable);\n    return DataTable;\n}());\nexports.DataTable = DataTable;\nvar DataTableModule = /** @class */ (function () {\n    function DataTableModule() {\n    }\n    DataTableModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule, paginator_1.PaginatorModule, forms_1.FormsModule],\n            exports: [DataTable, shared_1.SharedModule],\n            declarations: [DataTable, DTRadioButton, DTCheckbox, ColumnHeaders, ColumnFooters, TableBody, ScrollableView]\n        })\n    ], DataTableModule);\n    return DataTableModule;\n}());\nexports.DataTableModule = DataTableModule;\n//# sourceMappingURL=datatable.js.map\n\n/***/ }),\n/* 741 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar DeferredLoader = /** @class */ (function () {\n    function DeferredLoader(el, domHandler, renderer, viewContainer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.viewContainer = viewContainer;\n        this.onLoad = new core_1.EventEmitter();\n    }\n    DeferredLoader.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.shouldLoad()) {\n            this.load();\n        }\n        this.documentScrollListener = this.renderer.listen('window', 'scroll', function () {\n            if (_this.shouldLoad()) {\n                _this.load();\n                _this.documentScrollListener();\n                _this.documentScrollListener = null;\n            }\n        });\n    };\n    DeferredLoader.prototype.shouldLoad = function () {\n        var rect = this.el.nativeElement.getBoundingClientRect();\n        var docElement = document.documentElement;\n        var scrollTop = (window.pageYOffset || document.documentElement.scrollTop);\n        var winHeight = docElement.clientHeight;\n        return (winHeight >= rect.top);\n    };\n    DeferredLoader.prototype.load = function () {\n        this.view = this.viewContainer.createEmbeddedView(this.template);\n        this.onLoad.emit();\n    };\n    DeferredLoader.prototype.ngOnDestroy = function () {\n        this.view = null;\n        if (this.documentScrollListener) {\n            this.documentScrollListener();\n        }\n    };\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DeferredLoader.prototype, \"onLoad\", void 0);\n    __decorate([\n        core_1.ContentChild(core_1.TemplateRef),\n        __metadata(\"design:type\", core_1.TemplateRef)\n    ], DeferredLoader.prototype, \"template\", void 0);\n    DeferredLoader = __decorate([\n        core_1.Directive({\n            selector: '[pDefer]',\n            host: {},\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ViewContainerRef])\n    ], DeferredLoader);\n    return DeferredLoader;\n}());\nexports.DeferredLoader = DeferredLoader;\nvar DeferModule = /** @class */ (function () {\n    function DeferModule() {\n    }\n    DeferModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [DeferredLoader],\n            declarations: [DeferredLoader]\n        })\n    ], DeferModule);\n    return DeferModule;\n}());\nexports.DeferModule = DeferModule;\n//# sourceMappingURL=defer.js.map\n\n/***/ }),\n/* 742 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar shared_1 = __webpack_require__(15);\nvar idx = 0;\nvar Dialog = /** @class */ (function () {\n    function Dialog(el, domHandler, renderer, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.zone = zone;\n        this.draggable = true;\n        this.resizable = true;\n        this.minWidth = 150;\n        this.minHeight = 150;\n        this.closeOnEscape = true;\n        this.closable = true;\n        this.responsive = true;\n        this.showHeader = true;\n        this.breakpoint = 640;\n        this.blockScroll = false;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.minX = 0;\n        this.minY = 0;\n        this.autoAlign = true;\n        this.focusOnShow = true;\n        this.onShow = new core_1.EventEmitter();\n        this.onHide = new core_1.EventEmitter();\n        this.visibleChange = new core_1.EventEmitter();\n        this.id = \"ui-dialog-\" + idx++;\n    }\n    Object.defineProperty(Dialog.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (val) {\n            this._visible = val;\n            if (this.initialized && this.containerViewChild && this.containerViewChild.nativeElement) {\n                if (this._visible)\n                    this.show();\n                else {\n                    if (this.preventVisibleChangePropagation)\n                        this.preventVisibleChangePropagation = false;\n                    else\n                        this.hide();\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Dialog.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        if (this.executePostDisplayActions) {\n            this.onShow.emit({});\n            this.positionOverlay();\n            if (this.focusOnShow) {\n                this.focus();\n            }\n            this.currentHeight = this.domHandler.getOuterHeight(this.containerViewChild.nativeElement);\n            this.executePostDisplayActions = false;\n        }\n        else if (this.autoAlign && this.visible) {\n            this.zone.runOutsideAngular(function () {\n                setTimeout(function () {\n                    var height = _this.domHandler.getOuterHeight(_this.containerViewChild.nativeElement);\n                    if (height !== _this.currentHeight) {\n                        _this.currentHeight = height;\n                        _this.positionOverlay();\n                    }\n                }, 50);\n            });\n        }\n    };\n    Dialog.prototype.focus = function () {\n        var focusable = this.domHandler.findSingle(this.containerViewChild.nativeElement, 'button');\n        if (focusable) {\n            focusable.focus();\n        }\n    };\n    Dialog.prototype.show = function () {\n        this.executePostDisplayActions = true;\n        this.moveOnTop();\n        this.bindGlobalListeners();\n        if (this.modal) {\n            this.enableModality();\n        }\n    };\n    Dialog.prototype.positionOverlay = function () {\n        var viewport = this.domHandler.getViewport();\n        if (this.domHandler.getOuterHeight(this.containerViewChild.nativeElement) > viewport.height) {\n            this.contentViewChild.nativeElement.style.height = (viewport.height * .75) + 'px';\n        }\n        if (this.positionLeft >= 0 && this.positionTop >= 0) {\n            this.containerViewChild.nativeElement.style.left = this.positionLeft + 'px';\n            this.containerViewChild.nativeElement.style.top = this.positionTop + 'px';\n        }\n        else if (this.positionTop >= 0) {\n            this.center();\n            this.containerViewChild.nativeElement.style.top = this.positionTop + 'px';\n        }\n        else {\n            this.center();\n        }\n    };\n    Dialog.prototype.hide = function () {\n        this.onHide.emit({});\n        this.unbindMaskClickListener();\n        this.unbindGlobalListeners();\n        this.dragging = false;\n        if (this.modal) {\n            this.disableModality();\n        }\n    };\n    Dialog.prototype.close = function (event) {\n        this.preventVisibleChangePropagation = true;\n        this.hide();\n        this.visibleChange.emit(false);\n        event.preventDefault();\n    };\n    Dialog.prototype.ngAfterViewInit = function () {\n        this.initialized = true;\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.containerViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);\n        }\n        if (this.visible) {\n            this.show();\n        }\n    };\n    Dialog.prototype.center = function () {\n        var elementWidth = this.domHandler.getOuterWidth(this.containerViewChild.nativeElement);\n        var elementHeight = this.domHandler.getOuterHeight(this.containerViewChild.nativeElement);\n        if (elementWidth == 0 && elementHeight == 0) {\n            this.containerViewChild.nativeElement.style.visibility = 'hidden';\n            this.containerViewChild.nativeElement.style.display = 'block';\n            elementWidth = this.domHandler.getOuterWidth(this.containerViewChild.nativeElement);\n            elementHeight = this.domHandler.getOuterHeight(this.containerViewChild.nativeElement);\n            this.containerViewChild.nativeElement.style.display = 'none';\n            this.containerViewChild.nativeElement.style.visibility = 'visible';\n        }\n        var viewport = this.domHandler.getViewport();\n        var x = Math.max((viewport.width - elementWidth) / 2, 0);\n        var y = Math.max((viewport.height - elementHeight) / 2, 0);\n        this.containerViewChild.nativeElement.style.left = x + 'px';\n        this.containerViewChild.nativeElement.style.top = y + 'px';\n    };\n    Dialog.prototype.enableModality = function () {\n        var _this = this;\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = String(parseInt(this.containerViewChild.nativeElement.style.zIndex) - 1);\n            var maskStyleClass = 'ui-widget-overlay ui-dialog-mask';\n            if (this.blockScroll) {\n                maskStyleClass += ' ui-dialog-mask-scrollblocker';\n            }\n            this.domHandler.addMultipleClasses(this.mask, maskStyleClass);\n            if (this.closable && this.dismissableMask) {\n                this.maskClickListener = this.renderer.listen(this.mask, 'click', function (event) {\n                    _this.close(event);\n                });\n            }\n            document.body.appendChild(this.mask);\n            if (this.blockScroll) {\n                this.domHandler.addClass(document.body, 'ui-overflow-hidden');\n            }\n        }\n    };\n    Dialog.prototype.disableModality = function () {\n        if (this.mask) {\n            document.body.removeChild(this.mask);\n            if (this.blockScroll) {\n                var bodyChildren = document.body.children;\n                var hasBlockerMasks = void 0;\n                for (var i = 0; i < bodyChildren.length; i++) {\n                    var bodyChild = bodyChildren[i];\n                    if (this.domHandler.hasClass(bodyChild, 'ui-dialog-mask-scrollblocker')) {\n                        hasBlockerMasks = true;\n                        break;\n                    }\n                }\n                if (!hasBlockerMasks) {\n                    this.domHandler.removeClass(document.body, 'ui-overflow-hidden');\n                }\n            }\n            this.mask = null;\n        }\n    };\n    Dialog.prototype.unbindMaskClickListener = function () {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n        }\n    };\n    Dialog.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    Dialog.prototype.onCloseMouseDown = function (event) {\n        this.closeIconMouseDown = true;\n    };\n    Dialog.prototype.initDrag = function (event) {\n        if (this.closeIconMouseDown) {\n            this.closeIconMouseDown = false;\n            return;\n        }\n        if (this.draggable) {\n            this.dragging = true;\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n            this.domHandler.addClass(document.body, 'ui-unselectable-text');\n        }\n    };\n    Dialog.prototype.onDrag = function (event) {\n        if (this.dragging) {\n            var deltaX = event.pageX - this.lastPageX;\n            var deltaY = event.pageY - this.lastPageY;\n            var leftPos = parseInt(this.containerViewChild.nativeElement.style.left) + deltaX;\n            var topPos = parseInt(this.containerViewChild.nativeElement.style.top) + deltaY;\n            if (leftPos >= this.minX) {\n                this.containerViewChild.nativeElement.style.left = leftPos + 'px';\n            }\n            if (topPos >= this.minY) {\n                this.containerViewChild.nativeElement.style.top = topPos + 'px';\n            }\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n        }\n    };\n    Dialog.prototype.endDrag = function (event) {\n        if (this.draggable) {\n            this.dragging = false;\n            this.domHandler.removeClass(document.body, 'ui-unselectable-text');\n        }\n    };\n    Dialog.prototype.initResize = function (event) {\n        if (this.resizable) {\n            this.preWidth = null;\n            this.resizing = true;\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n            this.domHandler.addClass(document.body, 'ui-unselectable-text');\n        }\n    };\n    Dialog.prototype.onResize = function (event) {\n        if (this.resizing) {\n            var deltaX = event.pageX - this.lastPageX;\n            var deltaY = event.pageY - this.lastPageY;\n            var containerWidth = this.domHandler.getOuterWidth(this.containerViewChild.nativeElement);\n            var containerHeight = this.domHandler.getOuterHeight(this.containerViewChild.nativeElement);\n            var contentHeight = this.domHandler.getOuterHeight(this.contentViewChild.nativeElement);\n            var newWidth = containerWidth + deltaX;\n            var newHeight = containerHeight + deltaY;\n            if (newWidth > this.minWidth) {\n                this.containerViewChild.nativeElement.style.width = newWidth + 'px';\n            }\n            if (newHeight > this.minHeight) {\n                this.containerViewChild.nativeElement.style.height = newHeight + 'px';\n                this.contentViewChild.nativeElement.style.height = contentHeight + deltaY + 'px';\n            }\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n        }\n    };\n    Dialog.prototype.onResizeEnd = function (event) {\n        if (this.resizing) {\n            this.resizing = false;\n            this.domHandler.removeClass(document.body, 'ui-unselectable-text');\n        }\n    };\n    Dialog.prototype.bindGlobalListeners = function () {\n        if (this.draggable) {\n            this.bindDocumentDragListener();\n            this.bindDocumentDragEndListener();\n        }\n        if (this.resizable) {\n            this.bindDocumentResizeListeners();\n        }\n        if (this.responsive) {\n            this.bindDocumentResponsiveListener();\n        }\n        if (this.closeOnEscape && this.closable) {\n            this.bindDocumentEscapeListener();\n        }\n    };\n    Dialog.prototype.unbindGlobalListeners = function () {\n        this.unbindDocumentDragListener();\n        this.unbindDocumentDragEndListener();\n        this.unbindDocumentResizeListeners();\n        this.unbindDocumentResponsiveListener();\n        this.unbindDocumentEscapeListener();\n    };\n    Dialog.prototype.bindDocumentDragListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.documentDragListener = _this.onDrag.bind(_this);\n            window.document.addEventListener('mousemove', _this.documentDragListener);\n        });\n    };\n    Dialog.prototype.unbindDocumentDragListener = function () {\n        if (this.documentDragListener) {\n            window.document.removeEventListener('mousemove', this.documentDragListener);\n            this.documentDragListener = null;\n        }\n    };\n    Dialog.prototype.bindDocumentDragEndListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.documentDragEndListener = _this.endDrag.bind(_this);\n            window.document.addEventListener('mouseup', _this.documentDragEndListener);\n        });\n    };\n    Dialog.prototype.unbindDocumentDragEndListener = function () {\n        if (this.documentDragEndListener) {\n            window.document.removeEventListener('mouseup', this.documentDragEndListener);\n            this.documentDragEndListener = null;\n        }\n    };\n    Dialog.prototype.bindDocumentResizeListeners = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.documentResizeListener = _this.onResize.bind(_this);\n            _this.documentResizeEndListener = _this.onResizeEnd.bind(_this);\n            window.document.addEventListener('mousemove', _this.documentResizeListener);\n            window.document.addEventListener('mouseup', _this.documentResizeEndListener);\n        });\n    };\n    Dialog.prototype.unbindDocumentResizeListeners = function () {\n        if (this.documentResizeListener && this.documentResizeEndListener) {\n            window.document.removeEventListener('mouseup', this.documentResizeListener);\n            window.document.removeEventListener('mouseup', this.documentResizeEndListener);\n            this.documentResizeListener = null;\n            this.documentResizeEndListener = null;\n        }\n    };\n    Dialog.prototype.bindDocumentResponsiveListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.documentResponsiveListener = _this.onWindowResize.bind(_this);\n            window.addEventListener('resize', _this.documentResponsiveListener);\n        });\n    };\n    Dialog.prototype.unbindDocumentResponsiveListener = function () {\n        if (this.documentResponsiveListener) {\n            window.removeEventListener('resize', this.documentResponsiveListener);\n            this.documentResponsiveListener = null;\n        }\n    };\n    Dialog.prototype.onWindowResize = function (event) {\n        var viewport = this.domHandler.getViewport();\n        var width = this.domHandler.getOuterWidth(this.containerViewChild.nativeElement);\n        if (viewport.width <= this.breakpoint) {\n            if (!this.preWidth) {\n                this.preWidth = width;\n            }\n            this.containerViewChild.nativeElement.style.left = '0px';\n            this.containerViewChild.nativeElement.style.width = '100%';\n        }\n        else {\n            this.containerViewChild.nativeElement.style.width = this.preWidth + 'px';\n            this.positionOverlay();\n        }\n    };\n    Dialog.prototype.bindDocumentEscapeListener = function () {\n        var _this = this;\n        this.documentEscapeListener = this.renderer.listen('document', 'keydown', function (event) {\n            if (event.which == 27) {\n                if (parseInt(_this.containerViewChild.nativeElement.style.zIndex) == domhandler_1.DomHandler.zindex) {\n                    _this.close(event);\n                }\n            }\n        });\n    };\n    Dialog.prototype.unbindDocumentEscapeListener = function () {\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n    };\n    Dialog.prototype.ngOnDestroy = function () {\n        this.initialized = false;\n        this.disableModality();\n        this.unbindGlobalListeners();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);\n        }\n        this.unbindMaskClickListener();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dialog.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"draggable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"resizable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"minWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"minHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"width\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"height\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"positionLeft\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"positionTop\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"contentStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"modal\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"closeOnEscape\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"dismissableMask\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"rtl\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dialog.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"showHeader\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"breakpoint\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"blockScroll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"minX\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"minY\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"autoAlign\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"focusOnShow\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.Header, { descendants: false }),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Dialog.prototype, \"headerFacet\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.Footer, { descendants: false }),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Dialog.prototype, \"footerFacet\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dialog.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('titlebar'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dialog.prototype, \"headerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('content'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dialog.prototype, \"contentViewChild\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dialog.prototype, \"onShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dialog.prototype, \"onHide\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dialog.prototype, \"visibleChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Dialog.prototype, \"visible\", null);\n    Dialog = __decorate([\n        core_1.Component({\n            selector: 'p-dialog',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow':true, 'ui-dialog-rtl':rtl,'ui-dialog-draggable':draggable}\\\" [style.display]=\\\"visible ? 'block' : 'none'\\\"\\n            [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [style.width.px]=\\\"width\\\" [style.height.px]=\\\"height\\\" [style.minWidth.px]=\\\"minWidth\\\" [style.minHeight.px]=\\\"minHeight\\\" (mousedown)=\\\"moveOnTop()\\\" [@dialogState]=\\\"visible ? 'visible' : 'hidden'\\\"\\n            role=\\\"dialog\\\" [attr.aria-labelledby]=\\\"id + '-label'\\\">\\n            <div #titlebar class=\\\"ui-dialog-titlebar ui-widget-header ui-helper-clearfix ui-corner-top\\\"\\n                (mousedown)=\\\"initDrag($event)\\\" *ngIf=\\\"showHeader\\\">\\n                <span [attr.id]=\\\"id + '-label'\\\" class=\\\"ui-dialog-title\\\" *ngIf=\\\"header\\\">{{header}}</span>\\n                <span [attr.id]=\\\"id + '-label'\\\" class=\\\"ui-dialog-title\\\" *ngIf=\\\"headerFacet && headerFacet.first\\\">\\n                    <ng-content select=\\\"p-header\\\"></ng-content>\\n                </span>\\n                <a *ngIf=\\\"closable\\\" [ngClass]=\\\"{'ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all':true}\\\" href=\\\"#\\\" role=\\\"button\\\" (click)=\\\"close($event)\\\" (mousedown)=\\\"onCloseMouseDown($event)\\\">\\n                    <span class=\\\"fa fa-fw fa-close\\\"></span>\\n                </a>\\n            </div>\\n            <div #content class=\\\"ui-dialog-content ui-widget-content\\\" [ngStyle]=\\\"contentStyle\\\">\\n                <ng-content></ng-content>\\n            </div>\\n            <div class=\\\"ui-dialog-footer ui-widget-content\\\" *ngIf=\\\"footerFacet && footerFacet.first\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n            <div *ngIf=\\\"resizable\\\" class=\\\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\\\" style=\\\"z-index: 90;\\\"\\n                (mousedown)=\\\"initResize($event)\\\"></div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('dialogState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.NgZone])\n    ], Dialog);\n    return Dialog;\n}());\nexports.Dialog = Dialog;\nvar DialogModule = /** @class */ (function () {\n    function DialogModule() {\n    }\n    DialogModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Dialog, shared_1.SharedModule],\n            declarations: [Dialog]\n        })\n    ], DialogModule);\n    return DialogModule;\n}());\nexports.DialogModule = DialogModule;\n//# sourceMappingURL=dialog.js.map\n\n/***/ }),\n/* 743 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(Quill) {\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar forms_1 = __webpack_require__(17);\nexports.EDITOR_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Editor; }),\n    multi: true\n};\nvar Editor = /** @class */ (function () {\n    function Editor(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.onTextChange = new core_1.EventEmitter();\n        this.onSelectionChange = new core_1.EventEmitter();\n        this.onInit = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Editor.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        var editorElement = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-editor-content');\n        var toolbarElement = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-editor-toolbar');\n        this.quill = new Quill(editorElement, {\n            modules: {\n                toolbar: toolbarElement\n            },\n            placeholder: this.placeholder,\n            readOnly: this.readonly,\n            theme: 'snow',\n            formats: this.formats\n        });\n        if (this.value) {\n            this.quill.pasteHTML(this.value);\n        }\n        this.quill.on('text-change', function (delta, oldContents, source) {\n            if (source === 'user') {\n                var html = editorElement.children[0].innerHTML;\n                var text = _this.quill.getText().trim();\n                if (text.length === 0) {\n                    html = null;\n                }\n                _this.onTextChange.emit({\n                    htmlValue: html,\n                    textValue: text,\n                    delta: delta,\n                    source: source\n                });\n                _this.onModelChange(html);\n                _this.onModelTouched();\n            }\n        });\n        this.quill.on('selection-change', function (range, oldRange, source) {\n            _this.onSelectionChange.emit({\n                range: range,\n                oldRange: oldRange,\n                source: source\n            });\n        });\n        this.onInit.emit({\n            editor: this.quill\n        });\n    };\n    Editor.prototype.writeValue = function (value) {\n        this.value = value;\n        if (this.quill) {\n            if (value)\n                this.quill.pasteHTML(value);\n            else\n                this.quill.setText('');\n        }\n    };\n    Editor.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Editor.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Editor.prototype.getQuill = function () {\n        return this.quill;\n    };\n    Object.defineProperty(Editor.prototype, \"readonly\", {\n        get: function () {\n            return this._readonly;\n        },\n        set: function (val) {\n            this._readonly = val;\n            if (this.quill) {\n                if (this._readonly)\n                    this.quill.disable();\n                else\n                    this.quill.enable();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Editor.prototype, \"onTextChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Editor.prototype, \"onSelectionChange\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], Editor.prototype, \"toolbar\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Editor.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Editor.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Editor.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Editor.prototype, \"formats\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Editor.prototype, \"onInit\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Editor.prototype, \"readonly\", null);\n    Editor = __decorate([\n        core_1.Component({\n            selector: 'p-editor',\n            template: \"\\n        <div [ngClass]=\\\"'ui-widget ui-editor-container ui-corner-all'\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-editor-toolbar ui-widget-header ui-corner-top\\\" *ngIf=\\\"toolbar\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-editor-toolbar ui-widget-header ui-corner-top\\\" *ngIf=\\\"!toolbar\\\">\\n                <span class=\\\"ql-formats\\\">\\n                    <select class=\\\"ql-header\\\">\\n                      <option value=\\\"1\\\">Heading</option>\\n                      <option value=\\\"2\\\">Subheading</option>\\n                      <option selected>Normal</option>\\n                    </select>\\n                    <select class=\\\"ql-font\\\">\\n                      <option selected>Sans Serif</option>\\n                      <option value=\\\"serif\\\">Serif</option>\\n                      <option value=\\\"monospace\\\">Monospace</option>\\n                    </select>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                    <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                    <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <select class=\\\"ql-color\\\"></select>\\n                    <select class=\\\"ql-background\\\"></select>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <button class=\\\"ql-list\\\" value=\\\"ordered\\\" aria-label=\\\"Ordered List\\\"></button>\\n                    <button class=\\\"ql-list\\\" value=\\\"bullet\\\" aria-label=\\\"Unordered List\\\"></button>\\n                    <select class=\\\"ql-align\\\">\\n                        <option selected></option>\\n                        <option value=\\\"center\\\"></option>\\n                        <option value=\\\"right\\\"></option>\\n                        <option value=\\\"justify\\\"></option>\\n                    </select>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <button class=\\\"ql-link\\\" aria-label=\\\"Insert Link\\\"></button>\\n                    <button class=\\\"ql-image\\\" aria-label=\\\"Insert Image\\\"></button>\\n                    <button class=\\\"ql-code-block\\\" aria-label=\\\"Insert Code Block\\\"></button>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <button class=\\\"ql-clean\\\" aria-label=\\\"Remove Styles\\\"></button>\\n                </span>\\n            </div>\\n            <div class=\\\"ui-editor-content\\\" [ngStyle]=\\\"style\\\"></div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, exports.EDITOR_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Editor);\n    return Editor;\n}());\nexports.Editor = Editor;\nvar EditorModule = /** @class */ (function () {\n    function EditorModule() {\n    }\n    EditorModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Editor, shared_1.SharedModule],\n            declarations: [Editor]\n        })\n    ], EditorModule);\n    return EditorModule;\n}());\nexports.EditorModule = EditorModule;\n//# sourceMappingURL=editor.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(744)))\n\n/***/ }),\n/* 744 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(Buffer) {/*!\n * Quill Editor v1.3.7\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Quill\"] = factory();\n\telse\n\t\troot[\"Quill\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 109);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar format_1 = __webpack_require__(18);\nvar leaf_1 = __webpack_require__(19);\nvar scroll_1 = __webpack_require__(45);\nvar inline_1 = __webpack_require__(46);\nvar block_1 = __webpack_require__(47);\nvar embed_1 = __webpack_require__(48);\nvar text_1 = __webpack_require__(49);\nvar attributor_1 = __webpack_require__(12);\nvar class_1 = __webpack_require__(32);\nvar style_1 = __webpack_require__(33);\nvar store_1 = __webpack_require__(31);\nvar Registry = __webpack_require__(1);\nvar Parchment = {\n    Scope: Registry.Scope,\n    create: Registry.create,\n    find: Registry.find,\n    query: Registry.query,\n    register: Registry.register,\n    Container: container_1.default,\n    Format: format_1.default,\n    Leaf: leaf_1.default,\n    Embed: embed_1.default,\n    Scroll: scroll_1.default,\n    Block: block_1.default,\n    Inline: inline_1.default,\n    Text: text_1.default,\n    Attributor: {\n        Attribute: attributor_1.default,\n        Class: class_1.default,\n        Style: style_1.default,\n        Store: store_1.default,\n    },\n};\nexports.default = Parchment;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ParchmentError = /** @class */ (function (_super) {\n    __extends(ParchmentError, _super);\n    function ParchmentError(message) {\n        var _this = this;\n        message = '[Parchment] ' + message;\n        _this = _super.call(this, message) || this;\n        _this.message = message;\n        _this.name = _this.constructor.name;\n        return _this;\n    }\n    return ParchmentError;\n}(Error));\nexports.ParchmentError = ParchmentError;\nvar attributes = {};\nvar classes = {};\nvar tags = {};\nvar types = {};\nexports.DATA_KEY = '__blot';\nvar Scope;\n(function (Scope) {\n    Scope[Scope[\"TYPE\"] = 3] = \"TYPE\";\n    Scope[Scope[\"LEVEL\"] = 12] = \"LEVEL\";\n    Scope[Scope[\"ATTRIBUTE\"] = 13] = \"ATTRIBUTE\";\n    Scope[Scope[\"BLOT\"] = 14] = \"BLOT\";\n    Scope[Scope[\"INLINE\"] = 7] = \"INLINE\";\n    Scope[Scope[\"BLOCK\"] = 11] = \"BLOCK\";\n    Scope[Scope[\"BLOCK_BLOT\"] = 10] = \"BLOCK_BLOT\";\n    Scope[Scope[\"INLINE_BLOT\"] = 6] = \"INLINE_BLOT\";\n    Scope[Scope[\"BLOCK_ATTRIBUTE\"] = 9] = \"BLOCK_ATTRIBUTE\";\n    Scope[Scope[\"INLINE_ATTRIBUTE\"] = 5] = \"INLINE_ATTRIBUTE\";\n    Scope[Scope[\"ANY\"] = 15] = \"ANY\";\n})(Scope = exports.Scope || (exports.Scope = {}));\nfunction create(input, value) {\n    var match = query(input);\n    if (match == null) {\n        throw new ParchmentError(\"Unable to create \" + input + \" blot\");\n    }\n    var BlotClass = match;\n    var node = \n    // @ts-ignore\n    input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);\n    return new BlotClass(node, value);\n}\nexports.create = create;\nfunction find(node, bubble) {\n    if (bubble === void 0) { bubble = false; }\n    if (node == null)\n        return null;\n    // @ts-ignore\n    if (node[exports.DATA_KEY] != null)\n        return node[exports.DATA_KEY].blot;\n    if (bubble)\n        return find(node.parentNode, bubble);\n    return null;\n}\nexports.find = find;\nfunction query(query, scope) {\n    if (scope === void 0) { scope = Scope.ANY; }\n    var match;\n    if (typeof query === 'string') {\n        match = types[query] || attributes[query];\n        // @ts-ignore\n    }\n    else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {\n        match = types['text'];\n    }\n    else if (typeof query === 'number') {\n        if (query & Scope.LEVEL & Scope.BLOCK) {\n            match = types['block'];\n        }\n        else if (query & Scope.LEVEL & Scope.INLINE) {\n            match = types['inline'];\n        }\n    }\n    else if (query instanceof HTMLElement) {\n        var names = (query.getAttribute('class') || '').split(/\\s+/);\n        for (var i in names) {\n            match = classes[names[i]];\n            if (match)\n                break;\n        }\n        match = match || tags[query.tagName];\n    }\n    if (match == null)\n        return null;\n    // @ts-ignore\n    if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)\n        return match;\n    return null;\n}\nexports.query = query;\nfunction register() {\n    var Definitions = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        Definitions[_i] = arguments[_i];\n    }\n    if (Definitions.length > 1) {\n        return Definitions.map(function (d) {\n            return register(d);\n        });\n    }\n    var Definition = Definitions[0];\n    if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {\n        throw new ParchmentError('Invalid definition');\n    }\n    else if (Definition.blotName === 'abstract') {\n        throw new ParchmentError('Cannot register abstract class');\n    }\n    types[Definition.blotName || Definition.attrName] = Definition;\n    if (typeof Definition.keyName === 'string') {\n        attributes[Definition.keyName] = Definition;\n    }\n    else {\n        if (Definition.className != null) {\n            classes[Definition.className] = Definition;\n        }\n        if (Definition.tagName != null) {\n            if (Array.isArray(Definition.tagName)) {\n                Definition.tagName = Definition.tagName.map(function (tagName) {\n                    return tagName.toUpperCase();\n                });\n            }\n            else {\n                Definition.tagName = Definition.tagName.toUpperCase();\n            }\n            var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];\n            tagNames.forEach(function (tag) {\n                if (tags[tag] == null || Definition.className == null) {\n                    tags[tag] = Definition;\n                }\n            });\n        }\n    }\n    return Definition;\n}\nexports.register = register;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar diff = __webpack_require__(51);\nvar equal = __webpack_require__(11);\nvar extend = __webpack_require__(3);\nvar op = __webpack_require__(20);\n\n\nvar NULL_CHARACTER = String.fromCharCode(0);  // Placeholder char for embed in diff()\n\n\nvar Delta = function (ops) {\n  // Assume we are given a well formed ops\n  if (Array.isArray(ops)) {\n    this.ops = ops;\n  } else if (ops != null && Array.isArray(ops.ops)) {\n    this.ops = ops.ops;\n  } else {\n    this.ops = [];\n  }\n};\n\n\nDelta.prototype.insert = function (text, attributes) {\n  var newOp = {};\n  if (text.length === 0) return this;\n  newOp.insert = text;\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype['delete'] = function (length) {\n  if (length <= 0) return this;\n  return this.push({ 'delete': length });\n};\n\nDelta.prototype.retain = function (length, attributes) {\n  if (length <= 0) return this;\n  var newOp = { retain: length };\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype.push = function (newOp) {\n  var index = this.ops.length;\n  var lastOp = this.ops[index - 1];\n  newOp = extend(true, {}, newOp);\n  if (typeof lastOp === 'object') {\n    if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {\n      this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };\n      return this;\n    }\n    // Since it does not matter if we insert before or after deleting at the same index,\n    // always prefer to insert first\n    if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {\n      index -= 1;\n      lastOp = this.ops[index - 1];\n      if (typeof lastOp !== 'object') {\n        this.ops.unshift(newOp);\n        return this;\n      }\n    }\n    if (equal(newOp.attributes, lastOp.attributes)) {\n      if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {\n        this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {\n        this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      }\n    }\n  }\n  if (index === this.ops.length) {\n    this.ops.push(newOp);\n  } else {\n    this.ops.splice(index, 0, newOp);\n  }\n  return this;\n};\n\nDelta.prototype.chop = function () {\n  var lastOp = this.ops[this.ops.length - 1];\n  if (lastOp && lastOp.retain && !lastOp.attributes) {\n    this.ops.pop();\n  }\n  return this;\n};\n\nDelta.prototype.filter = function (predicate) {\n  return this.ops.filter(predicate);\n};\n\nDelta.prototype.forEach = function (predicate) {\n  this.ops.forEach(predicate);\n};\n\nDelta.prototype.map = function (predicate) {\n  return this.ops.map(predicate);\n};\n\nDelta.prototype.partition = function (predicate) {\n  var passed = [], failed = [];\n  this.forEach(function(op) {\n    var target = predicate(op) ? passed : failed;\n    target.push(op);\n  });\n  return [passed, failed];\n};\n\nDelta.prototype.reduce = function (predicate, initial) {\n  return this.ops.reduce(predicate, initial);\n};\n\nDelta.prototype.changeLength = function () {\n  return this.reduce(function (length, elem) {\n    if (elem.insert) {\n      return length + op.length(elem);\n    } else if (elem.delete) {\n      return length - elem.delete;\n    }\n    return length;\n  }, 0);\n};\n\nDelta.prototype.length = function () {\n  return this.reduce(function (length, elem) {\n    return length + op.length(elem);\n  }, 0);\n};\n\nDelta.prototype.slice = function (start, end) {\n  start = start || 0;\n  if (typeof end !== 'number') end = Infinity;\n  var ops = [];\n  var iter = op.iterator(this.ops);\n  var index = 0;\n  while (index < end && iter.hasNext()) {\n    var nextOp;\n    if (index < start) {\n      nextOp = iter.next(start - index);\n    } else {\n      nextOp = iter.next(end - index);\n      ops.push(nextOp);\n    }\n    index += op.length(nextOp);\n  }\n  return new Delta(ops);\n};\n\n\nDelta.prototype.compose = function (other) {\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var ops = [];\n  var firstOther = otherIter.peek();\n  if (firstOther != null && typeof firstOther.retain === 'number' && firstOther.attributes == null) {\n    var firstLeft = firstOther.retain;\n    while (thisIter.peekType() === 'insert' && thisIter.peekLength() <= firstLeft) {\n      firstLeft -= thisIter.peekLength();\n      ops.push(thisIter.next());\n    }\n    if (firstOther.retain - firstLeft > 0) {\n      otherIter.next(firstOther.retain - firstLeft);\n    }\n  }\n  var delta = new Delta(ops);\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else if (thisIter.peekType() === 'delete') {\n      delta.push(thisIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (typeof otherOp.retain === 'number') {\n        var newOp = {};\n        if (typeof thisOp.retain === 'number') {\n          newOp.retain = length;\n        } else {\n          newOp.insert = thisOp.insert;\n        }\n        // Preserve null when composing with a retain, otherwise remove it for inserts\n        var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n        if (attributes) newOp.attributes = attributes;\n        delta.push(newOp);\n\n        // Optimization if rest of other is just retain\n        if (!otherIter.hasNext() && equal(delta.ops[delta.ops.length - 1], newOp)) {\n          var rest = new Delta(thisIter.rest());\n          return delta.concat(rest).chop();\n        }\n\n      // Other op should be delete, we could be an insert or retain\n      // Insert + delete cancels out\n      } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {\n        delta.push(otherOp);\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.concat = function (other) {\n  var delta = new Delta(this.ops.slice());\n  if (other.ops.length > 0) {\n    delta.push(other.ops[0]);\n    delta.ops = delta.ops.concat(other.ops.slice(1));\n  }\n  return delta;\n};\n\nDelta.prototype.diff = function (other, index) {\n  if (this.ops === other.ops) {\n    return new Delta();\n  }\n  var strings = [this, other].map(function (delta) {\n    return delta.map(function (op) {\n      if (op.insert != null) {\n        return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n      }\n      var prep = (delta === other) ? 'on' : 'with';\n      throw new Error('diff() called ' + prep + ' non-document');\n    }).join('');\n  });\n  var delta = new Delta();\n  var diffResult = diff(strings[0], strings[1], index);\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  diffResult.forEach(function (component) {\n    var length = component[1].length;\n    while (length > 0) {\n      var opLength = 0;\n      switch (component[0]) {\n        case diff.INSERT:\n          opLength = Math.min(otherIter.peekLength(), length);\n          delta.push(otherIter.next(opLength));\n          break;\n        case diff.DELETE:\n          opLength = Math.min(length, thisIter.peekLength());\n          thisIter.next(opLength);\n          delta['delete'](opLength);\n          break;\n        case diff.EQUAL:\n          opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n          var thisOp = thisIter.next(opLength);\n          var otherOp = otherIter.next(opLength);\n          if (equal(thisOp.insert, otherOp.insert)) {\n            delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));\n          } else {\n            delta.push(otherOp)['delete'](opLength);\n          }\n          break;\n      }\n      length -= opLength;\n    }\n  });\n  return delta.chop();\n};\n\nDelta.prototype.eachLine = function (predicate, newline) {\n  newline = newline || '\\n';\n  var iter = op.iterator(this.ops);\n  var line = new Delta();\n  var i = 0;\n  while (iter.hasNext()) {\n    if (iter.peekType() !== 'insert') return;\n    var thisOp = iter.peek();\n    var start = op.length(thisOp) - iter.peekLength();\n    var index = typeof thisOp.insert === 'string' ?\n      thisOp.insert.indexOf(newline, start) - start : -1;\n    if (index < 0) {\n      line.push(iter.next());\n    } else if (index > 0) {\n      line.push(iter.next(index));\n    } else {\n      if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n        return;\n      }\n      i += 1;\n      line = new Delta();\n    }\n  }\n  if (line.length() > 0) {\n    predicate(line, {}, i);\n  }\n};\n\nDelta.prototype.transform = function (other, priority) {\n  priority = !!priority;\n  if (typeof other === 'number') {\n    return this.transformPosition(other, priority);\n  }\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var delta = new Delta();\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {\n      delta.retain(op.length(thisIter.next()));\n    } else if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (thisOp['delete']) {\n        // Our delete either makes their delete redundant or removes their retain\n        continue;\n      } else if (otherOp['delete']) {\n        delta.push(otherOp);\n      } else {\n        // We retain either their retain or insert\n        delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.transformPosition = function (index, priority) {\n  priority = !!priority;\n  var thisIter = op.iterator(this.ops);\n  var offset = 0;\n  while (thisIter.hasNext() && offset <= index) {\n    var length = thisIter.peekLength();\n    var nextType = thisIter.peekType();\n    thisIter.next();\n    if (nextType === 'delete') {\n      index -= Math.min(length, index - offset);\n      continue;\n    } else if (nextType === 'insert' && (offset < index || !priority)) {\n      index += length;\n    }\n    offset += length;\n  }\n  return index;\n};\n\n\nmodule.exports = Delta;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BlockEmbed = exports.bubbleFormats = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NEWLINE_LENGTH = 1;\n\nvar BlockEmbed = function (_Parchment$Embed) {\n  _inherits(BlockEmbed, _Parchment$Embed);\n\n  function BlockEmbed() {\n    _classCallCheck(this, BlockEmbed);\n\n    return _possibleConstructorReturn(this, (BlockEmbed.__proto__ || Object.getPrototypeOf(BlockEmbed)).apply(this, arguments));\n  }\n\n  _createClass(BlockEmbed, [{\n    key: 'attach',\n    value: function attach() {\n      _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'attach', this).call(this);\n      this.attributes = new _parchment2.default.Attributor.Store(this.domNode);\n    }\n  }, {\n    key: 'delta',\n    value: function delta() {\n      return new _quillDelta2.default().insert(this.value(), (0, _extend2.default)(this.formats(), this.attributes.values()));\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      var attribute = _parchment2.default.query(name, _parchment2.default.Scope.BLOCK_ATTRIBUTE);\n      if (attribute != null) {\n        this.attributes.attribute(attribute, value);\n      }\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      this.format(name, value);\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (typeof value === 'string' && value.endsWith('\\n')) {\n        var block = _parchment2.default.create(Block.blotName);\n        this.parent.insertBefore(block, index === 0 ? this : this.next);\n        block.insertAt(0, value.slice(0, -1));\n      } else {\n        _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'insertAt', this).call(this, index, value, def);\n      }\n    }\n  }]);\n\n  return BlockEmbed;\n}(_parchment2.default.Embed);\n\nBlockEmbed.scope = _parchment2.default.Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\n\nvar Block = function (_Parchment$Block) {\n  _inherits(Block, _Parchment$Block);\n\n  function Block(domNode) {\n    _classCallCheck(this, Block);\n\n    var _this2 = _possibleConstructorReturn(this, (Block.__proto__ || Object.getPrototypeOf(Block)).call(this, domNode));\n\n    _this2.cache = {};\n    return _this2;\n  }\n\n  _createClass(Block, [{\n    key: 'delta',\n    value: function delta() {\n      if (this.cache.delta == null) {\n        this.cache.delta = this.descendants(_parchment2.default.Leaf).reduce(function (delta, leaf) {\n          if (leaf.length() === 0) {\n            return delta;\n          } else {\n            return delta.insert(leaf.value(), bubbleFormats(leaf));\n          }\n        }, new _quillDelta2.default()).insert('\\n', bubbleFormats(this));\n      }\n      return this.cache.delta;\n    }\n  }, {\n    key: 'deleteAt',\n    value: function deleteAt(index, length) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'deleteAt', this).call(this, index, length);\n      this.cache = {};\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (length <= 0) return;\n      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n        if (index + length === this.length()) {\n          this.format(name, value);\n        }\n      } else {\n        _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'formatAt', this).call(this, index, Math.min(length, this.length() - index - 1), name, value);\n      }\n      this.cache = {};\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null) return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, index, value, def);\n      if (value.length === 0) return;\n      var lines = value.split('\\n');\n      var text = lines.shift();\n      if (text.length > 0) {\n        if (index < this.length() - 1 || this.children.tail == null) {\n          _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, Math.min(index, this.length() - 1), text);\n        } else {\n          this.children.tail.insertAt(this.children.tail.length(), text);\n        }\n        this.cache = {};\n      }\n      var block = this;\n      lines.reduce(function (index, line) {\n        block = block.split(index, true);\n        block.insertAt(0, line);\n        return line.length;\n      }, index + text.length);\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      var head = this.children.head;\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertBefore', this).call(this, blot, ref);\n      if (head instanceof _break2.default) {\n        head.remove();\n      }\n      this.cache = {};\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      if (this.cache.length == null) {\n        this.cache.length = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'length', this).call(this) + NEWLINE_LENGTH;\n      }\n      return this.cache.length;\n    }\n  }, {\n    key: 'moveChildren',\n    value: function moveChildren(target, ref) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'moveChildren', this).call(this, target, ref);\n      this.cache = {};\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'optimize', this).call(this, context);\n      this.cache = {};\n    }\n  }, {\n    key: 'path',\n    value: function path(index) {\n      return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'path', this).call(this, index, true);\n    }\n  }, {\n    key: 'removeChild',\n    value: function removeChild(child) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'removeChild', this).call(this, child);\n      this.cache = {};\n    }\n  }, {\n    key: 'split',\n    value: function split(index) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n        var clone = this.clone();\n        if (index === 0) {\n          this.parent.insertBefore(clone, this);\n          return this;\n        } else {\n          this.parent.insertBefore(clone, this.next);\n          return clone;\n        }\n      } else {\n        var next = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'split', this).call(this, index, force);\n        this.cache = {};\n        return next;\n      }\n    }\n  }]);\n\n  return Block;\n}(_parchment2.default.Block);\n\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = 'break';\nBlock.allowedChildren = [_inline2.default, _parchment2.default.Embed, _text2.default];\n\nfunction bubbleFormats(blot) {\n  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (blot == null) return formats;\n  if (typeof blot.formats === 'function') {\n    formats = (0, _extend2.default)(formats, blot.formats());\n  }\n  if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n    return formats;\n  }\n  return bubbleFormats(blot.parent, formats);\n}\n\nexports.bubbleFormats = bubbleFormats;\nexports.BlockEmbed = BlockEmbed;\nexports.default = Block;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.overload = exports.expandConfig = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n__webpack_require__(50);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _editor = __webpack_require__(14);\n\nvar _editor2 = _interopRequireDefault(_editor);\n\nvar _emitter3 = __webpack_require__(8);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _selection = __webpack_require__(15);\n\nvar _selection2 = _interopRequireDefault(_selection);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _theme = __webpack_require__(34);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill');\n\nvar Quill = function () {\n  _createClass(Quill, null, [{\n    key: 'debug',\n    value: function debug(limit) {\n      if (limit === true) {\n        limit = 'log';\n      }\n      _logger2.default.level(limit);\n    }\n  }, {\n    key: 'find',\n    value: function find(node) {\n      return node.__quill || _parchment2.default.find(node);\n    }\n  }, {\n    key: 'import',\n    value: function _import(name) {\n      if (this.imports[name] == null) {\n        debug.error('Cannot import ' + name + '. Are you sure it was registered?');\n      }\n      return this.imports[name];\n    }\n  }, {\n    key: 'register',\n    value: function register(path, target) {\n      var _this = this;\n\n      var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      if (typeof path !== 'string') {\n        var name = path.attrName || path.blotName;\n        if (typeof name === 'string') {\n          // register(Blot | Attributor, overwrite)\n          this.register('formats/' + name, path, target);\n        } else {\n          Object.keys(path).forEach(function (key) {\n            _this.register(key, path[key], target);\n          });\n        }\n      } else {\n        if (this.imports[path] != null && !overwrite) {\n          debug.warn('Overwriting ' + path + ' with', target);\n        }\n        this.imports[path] = target;\n        if ((path.startsWith('blots/') || path.startsWith('formats/')) && target.blotName !== 'abstract') {\n          _parchment2.default.register(target);\n        } else if (path.startsWith('modules') && typeof target.register === 'function') {\n          target.register();\n        }\n      }\n    }\n  }]);\n\n  function Quill(container) {\n    var _this2 = this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Quill);\n\n    this.options = expandConfig(container, options);\n    this.container = this.options.container;\n    if (this.container == null) {\n      return debug.error('Invalid Quill container', container);\n    }\n    if (this.options.debug) {\n      Quill.debug(this.options.debug);\n    }\n    var html = this.container.innerHTML.trim();\n    this.container.classList.add('ql-container');\n    this.container.innerHTML = '';\n    this.container.__quill = this;\n    this.root = this.addContainer('ql-editor');\n    this.root.classList.add('ql-blank');\n    this.root.setAttribute('data-gramm', false);\n    this.scrollingContainer = this.options.scrollingContainer || this.root;\n    this.emitter = new _emitter4.default();\n    this.scroll = _parchment2.default.create(this.root, {\n      emitter: this.emitter,\n      whitelist: this.options.formats\n    });\n    this.editor = new _editor2.default(this.scroll);\n    this.selection = new _selection2.default(this.scroll, this.emitter);\n    this.theme = new this.options.theme(this, this.options);\n    this.keyboard = this.theme.addModule('keyboard');\n    this.clipboard = this.theme.addModule('clipboard');\n    this.history = this.theme.addModule('history');\n    this.theme.init();\n    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type) {\n      if (type === _emitter4.default.events.TEXT_CHANGE) {\n        _this2.root.classList.toggle('ql-blank', _this2.editor.isBlank());\n      }\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_UPDATE, function (source, mutations) {\n      var range = _this2.selection.lastRange;\n      var index = range && range.length === 0 ? range.index : undefined;\n      modify.call(_this2, function () {\n        return _this2.editor.update(null, mutations, index);\n      }, source);\n    });\n    var contents = this.clipboard.convert('<div class=\\'ql-editor\\' style=\"white-space: normal;\">' + html + '<p><br></p></div>');\n    this.setContents(contents);\n    this.history.clear();\n    if (this.options.placeholder) {\n      this.root.setAttribute('data-placeholder', this.options.placeholder);\n    }\n    if (this.options.readOnly) {\n      this.disable();\n    }\n  }\n\n  _createClass(Quill, [{\n    key: 'addContainer',\n    value: function addContainer(container) {\n      var refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      if (typeof container === 'string') {\n        var className = container;\n        container = document.createElement('div');\n        container.classList.add(className);\n      }\n      this.container.insertBefore(container, refNode);\n      return container;\n    }\n  }, {\n    key: 'blur',\n    value: function blur() {\n      this.selection.setRange(null);\n    }\n  }, {\n    key: 'deleteText',\n    value: function deleteText(index, length, source) {\n      var _this3 = this;\n\n      var _overload = overload(index, length, source);\n\n      var _overload2 = _slicedToArray(_overload, 4);\n\n      index = _overload2[0];\n      length = _overload2[1];\n      source = _overload2[3];\n\n      return modify.call(this, function () {\n        return _this3.editor.deleteText(index, length);\n      }, source, index, -1 * length);\n    }\n  }, {\n    key: 'disable',\n    value: function disable() {\n      this.enable(false);\n    }\n  }, {\n    key: 'enable',\n    value: function enable() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.scroll.enable(enabled);\n      this.container.classList.toggle('ql-disabled', !enabled);\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      var scrollTop = this.scrollingContainer.scrollTop;\n      this.selection.focus();\n      this.scrollingContainer.scrollTop = scrollTop;\n      this.scrollIntoView();\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      var _this4 = this;\n\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        var range = _this4.getSelection(true);\n        var change = new _quillDelta2.default();\n        if (range == null) {\n          return change;\n        } else if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n          change = _this4.editor.formatLine(range.index, range.length, _defineProperty({}, name, value));\n        } else if (range.length === 0) {\n          _this4.selection.format(name, value);\n          return change;\n        } else {\n          change = _this4.editor.formatText(range.index, range.length, _defineProperty({}, name, value));\n        }\n        _this4.setSelection(range, _emitter4.default.sources.SILENT);\n        return change;\n      }, source);\n    }\n  }, {\n    key: 'formatLine',\n    value: function formatLine(index, length, name, value, source) {\n      var _this5 = this;\n\n      var formats = void 0;\n\n      var _overload3 = overload(index, length, name, value, source);\n\n      var _overload4 = _slicedToArray(_overload3, 4);\n\n      index = _overload4[0];\n      length = _overload4[1];\n      formats = _overload4[2];\n      source = _overload4[3];\n\n      return modify.call(this, function () {\n        return _this5.editor.formatLine(index, length, formats);\n      }, source, index, 0);\n    }\n  }, {\n    key: 'formatText',\n    value: function formatText(index, length, name, value, source) {\n      var _this6 = this;\n\n      var formats = void 0;\n\n      var _overload5 = overload(index, length, name, value, source);\n\n      var _overload6 = _slicedToArray(_overload5, 4);\n\n      index = _overload6[0];\n      length = _overload6[1];\n      formats = _overload6[2];\n      source = _overload6[3];\n\n      return modify.call(this, function () {\n        return _this6.editor.formatText(index, length, formats);\n      }, source, index, 0);\n    }\n  }, {\n    key: 'getBounds',\n    value: function getBounds(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var bounds = void 0;\n      if (typeof index === 'number') {\n        bounds = this.selection.getBounds(index, length);\n      } else {\n        bounds = this.selection.getBounds(index.index, index.length);\n      }\n      var containerBounds = this.container.getBoundingClientRect();\n      return {\n        bottom: bounds.bottom - containerBounds.top,\n        height: bounds.height,\n        left: bounds.left - containerBounds.left,\n        right: bounds.right - containerBounds.left,\n        top: bounds.top - containerBounds.top,\n        width: bounds.width\n      };\n    }\n  }, {\n    key: 'getContents',\n    value: function getContents() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n      var _overload7 = overload(index, length);\n\n      var _overload8 = _slicedToArray(_overload7, 2);\n\n      index = _overload8[0];\n      length = _overload8[1];\n\n      return this.editor.getContents(index, length);\n    }\n  }, {\n    key: 'getFormat',\n    value: function getFormat() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (typeof index === 'number') {\n        return this.editor.getFormat(index, length);\n      } else {\n        return this.editor.getFormat(index.index, index.length);\n      }\n    }\n  }, {\n    key: 'getIndex',\n    value: function getIndex(blot) {\n      return blot.offset(this.scroll);\n    }\n  }, {\n    key: 'getLength',\n    value: function getLength() {\n      return this.scroll.length();\n    }\n  }, {\n    key: 'getLeaf',\n    value: function getLeaf(index) {\n      return this.scroll.leaf(index);\n    }\n  }, {\n    key: 'getLine',\n    value: function getLine(index) {\n      return this.scroll.line(index);\n    }\n  }, {\n    key: 'getLines',\n    value: function getLines() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n      if (typeof index !== 'number') {\n        return this.scroll.lines(index.index, index.length);\n      } else {\n        return this.scroll.lines(index, length);\n      }\n    }\n  }, {\n    key: 'getModule',\n    value: function getModule(name) {\n      return this.theme.modules[name];\n    }\n  }, {\n    key: 'getSelection',\n    value: function getSelection() {\n      var focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (focus) this.focus();\n      this.update(); // Make sure we access getRange with editor in consistent state\n      return this.selection.getRange()[0];\n    }\n  }, {\n    key: 'getText',\n    value: function getText() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n      var _overload9 = overload(index, length);\n\n      var _overload10 = _slicedToArray(_overload9, 2);\n\n      index = _overload10[0];\n      length = _overload10[1];\n\n      return this.editor.getText(index, length);\n    }\n  }, {\n    key: 'hasFocus',\n    value: function hasFocus() {\n      return this.selection.hasFocus();\n    }\n  }, {\n    key: 'insertEmbed',\n    value: function insertEmbed(index, embed, value) {\n      var _this7 = this;\n\n      var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;\n\n      return modify.call(this, function () {\n        return _this7.editor.insertEmbed(index, embed, value);\n      }, source, index);\n    }\n  }, {\n    key: 'insertText',\n    value: function insertText(index, text, name, value, source) {\n      var _this8 = this;\n\n      var formats = void 0;\n\n      var _overload11 = overload(index, 0, name, value, source);\n\n      var _overload12 = _slicedToArray(_overload11, 4);\n\n      index = _overload12[0];\n      formats = _overload12[2];\n      source = _overload12[3];\n\n      return modify.call(this, function () {\n        return _this8.editor.insertText(index, text, formats);\n      }, source, index, text.length);\n    }\n  }, {\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !this.container.classList.contains('ql-disabled');\n    }\n  }, {\n    key: 'off',\n    value: function off() {\n      return this.emitter.off.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'on',\n    value: function on() {\n      return this.emitter.on.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'once',\n    value: function once() {\n      return this.emitter.once.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'pasteHTML',\n    value: function pasteHTML(index, html, source) {\n      this.clipboard.dangerouslyPasteHTML(index, html, source);\n    }\n  }, {\n    key: 'removeFormat',\n    value: function removeFormat(index, length, source) {\n      var _this9 = this;\n\n      var _overload13 = overload(index, length, source);\n\n      var _overload14 = _slicedToArray(_overload13, 4);\n\n      index = _overload14[0];\n      length = _overload14[1];\n      source = _overload14[3];\n\n      return modify.call(this, function () {\n        return _this9.editor.removeFormat(index, length);\n      }, source, index);\n    }\n  }, {\n    key: 'scrollIntoView',\n    value: function scrollIntoView() {\n      this.selection.scrollIntoView(this.scrollingContainer);\n    }\n  }, {\n    key: 'setContents',\n    value: function setContents(delta) {\n      var _this10 = this;\n\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        delta = new _quillDelta2.default(delta);\n        var length = _this10.getLength();\n        var deleted = _this10.editor.deleteText(0, length);\n        var applied = _this10.editor.applyDelta(delta);\n        var lastOp = applied.ops[applied.ops.length - 1];\n        if (lastOp != null && typeof lastOp.insert === 'string' && lastOp.insert[lastOp.insert.length - 1] === '\\n') {\n          _this10.editor.deleteText(_this10.getLength() - 1, 1);\n          applied.delete(1);\n        }\n        var ret = deleted.compose(applied);\n        return ret;\n      }, source);\n    }\n  }, {\n    key: 'setSelection',\n    value: function setSelection(index, length, source) {\n      if (index == null) {\n        this.selection.setRange(null, length || Quill.sources.API);\n      } else {\n        var _overload15 = overload(index, length, source);\n\n        var _overload16 = _slicedToArray(_overload15, 4);\n\n        index = _overload16[0];\n        length = _overload16[1];\n        source = _overload16[3];\n\n        this.selection.setRange(new _selection.Range(index, length), source);\n        if (source !== _emitter4.default.sources.SILENT) {\n          this.selection.scrollIntoView(this.scrollingContainer);\n        }\n      }\n    }\n  }, {\n    key: 'setText',\n    value: function setText(text) {\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      var delta = new _quillDelta2.default().insert(text);\n      return this.setContents(delta, source);\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n      var change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n      this.selection.update(source);\n      return change;\n    }\n  }, {\n    key: 'updateContents',\n    value: function updateContents(delta) {\n      var _this11 = this;\n\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        delta = new _quillDelta2.default(delta);\n        return _this11.editor.applyDelta(delta, source);\n      }, source, true);\n    }\n  }]);\n\n  return Quill;\n}();\n\nQuill.DEFAULTS = {\n  bounds: null,\n  formats: null,\n  modules: {},\n  placeholder: '',\n  readOnly: false,\n  scrollingContainer: null,\n  strict: true,\n  theme: 'default'\n};\nQuill.events = _emitter4.default.events;\nQuill.sources = _emitter4.default.sources;\n// eslint-disable-next-line no-undef\nQuill.version =  false ? 'dev' : \"1.3.7\";\n\nQuill.imports = {\n  'delta': _quillDelta2.default,\n  'parchment': _parchment2.default,\n  'core/module': _module2.default,\n  'core/theme': _theme2.default\n};\n\nfunction expandConfig(container, userConfig) {\n  userConfig = (0, _extend2.default)(true, {\n    container: container,\n    modules: {\n      clipboard: true,\n      keyboard: true,\n      history: true\n    }\n  }, userConfig);\n  if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {\n    userConfig.theme = _theme2.default;\n  } else {\n    userConfig.theme = Quill.import('themes/' + userConfig.theme);\n    if (userConfig.theme == null) {\n      throw new Error('Invalid theme ' + userConfig.theme + '. Did you register it?');\n    }\n  }\n  var themeConfig = (0, _extend2.default)(true, {}, userConfig.theme.DEFAULTS);\n  [themeConfig, userConfig].forEach(function (config) {\n    config.modules = config.modules || {};\n    Object.keys(config.modules).forEach(function (module) {\n      if (config.modules[module] === true) {\n        config.modules[module] = {};\n      }\n    });\n  });\n  var moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));\n  var moduleConfig = moduleNames.reduce(function (config, name) {\n    var moduleClass = Quill.import('modules/' + name);\n    if (moduleClass == null) {\n      debug.error('Cannot load ' + name + ' module. Are you sure you registered it?');\n    } else {\n      config[name] = moduleClass.DEFAULTS || {};\n    }\n    return config;\n  }, {});\n  // Special case toolbar shorthand\n  if (userConfig.modules != null && userConfig.modules.toolbar && userConfig.modules.toolbar.constructor !== Object) {\n    userConfig.modules.toolbar = {\n      container: userConfig.modules.toolbar\n    };\n  }\n  userConfig = (0, _extend2.default)(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);\n  ['bounds', 'container', 'scrollingContainer'].forEach(function (key) {\n    if (typeof userConfig[key] === 'string') {\n      userConfig[key] = document.querySelector(userConfig[key]);\n    }\n  });\n  userConfig.modules = Object.keys(userConfig.modules).reduce(function (config, name) {\n    if (userConfig.modules[name]) {\n      config[name] = userConfig.modules[name];\n    }\n    return config;\n  }, {});\n  return userConfig;\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n  if (this.options.strict && !this.isEnabled() && source === _emitter4.default.sources.USER) {\n    return new _quillDelta2.default();\n  }\n  var range = index == null ? null : this.getSelection();\n  var oldDelta = this.editor.delta;\n  var change = modifier();\n  if (range != null) {\n    if (index === true) index = range.index;\n    if (shift == null) {\n      range = shiftRange(range, change, source);\n    } else if (shift !== 0) {\n      range = shiftRange(range, index, shift, source);\n    }\n    this.setSelection(range, _emitter4.default.sources.SILENT);\n  }\n  if (change.length() > 0) {\n    var _emitter;\n\n    var args = [_emitter4.default.events.TEXT_CHANGE, change, oldDelta, source];\n    (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n    if (source !== _emitter4.default.sources.SILENT) {\n      var _emitter2;\n\n      (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n    }\n  }\n  return change;\n}\n\nfunction overload(index, length, name, value, source) {\n  var formats = {};\n  if (typeof index.index === 'number' && typeof index.length === 'number') {\n    // Allow for throwaway end (used by insertText/insertEmbed)\n    if (typeof length !== 'number') {\n      source = value, value = name, name = length, length = index.length, index = index.index;\n    } else {\n      length = index.length, index = index.index;\n    }\n  } else if (typeof length !== 'number') {\n    source = value, value = name, name = length, length = 0;\n  }\n  // Handle format being object, two format name/value strings or excluded\n  if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n    formats = name;\n    source = value;\n  } else if (typeof name === 'string') {\n    if (value != null) {\n      formats[name] = value;\n    } else {\n      source = name;\n    }\n  }\n  // Handle optional source\n  source = source || _emitter4.default.sources.API;\n  return [index, length, formats, source];\n}\n\nfunction shiftRange(range, index, length, source) {\n  if (range == null) return null;\n  var start = void 0,\n      end = void 0;\n  if (index instanceof _quillDelta2.default) {\n    var _map = [range.index, range.index + range.length].map(function (pos) {\n      return index.transformPosition(pos, source !== _emitter4.default.sources.USER);\n    });\n\n    var _map2 = _slicedToArray(_map, 2);\n\n    start = _map2[0];\n    end = _map2[1];\n  } else {\n    var _map3 = [range.index, range.index + range.length].map(function (pos) {\n      if (pos < index || pos === index && source === _emitter4.default.sources.USER) return pos;\n      if (length >= 0) {\n        return pos + length;\n      } else {\n        return Math.max(index, pos + length);\n      }\n    });\n\n    var _map4 = _slicedToArray(_map3, 2);\n\n    start = _map4[0];\n    end = _map4[1];\n  }\n  return new _selection.Range(start, end - start);\n}\n\nexports.expandConfig = expandConfig;\nexports.overload = overload;\nexports.default = Quill;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Inline = function (_Parchment$Inline) {\n  _inherits(Inline, _Parchment$Inline);\n\n  function Inline() {\n    _classCallCheck(this, Inline);\n\n    return _possibleConstructorReturn(this, (Inline.__proto__ || Object.getPrototypeOf(Inline)).apply(this, arguments));\n  }\n\n  _createClass(Inline, [{\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (Inline.compare(this.statics.blotName, name) < 0 && _parchment2.default.query(name, _parchment2.default.Scope.BLOT)) {\n        var blot = this.isolate(index, length);\n        if (value) {\n          blot.wrap(name, value);\n        }\n      } else {\n        _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'formatAt', this).call(this, index, length, name, value);\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'optimize', this).call(this, context);\n      if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n        var parent = this.parent.isolate(this.offset(), this.length());\n        this.moveChildren(parent);\n        parent.wrap(this);\n      }\n    }\n  }], [{\n    key: 'compare',\n    value: function compare(self, other) {\n      var selfIndex = Inline.order.indexOf(self);\n      var otherIndex = Inline.order.indexOf(other);\n      if (selfIndex >= 0 || otherIndex >= 0) {\n        return selfIndex - otherIndex;\n      } else if (self === other) {\n        return 0;\n      } else if (self < other) {\n        return -1;\n      } else {\n        return 1;\n      }\n    }\n  }]);\n\n  return Inline;\n}(_parchment2.default.Inline);\n\nInline.allowedChildren = [Inline, _parchment2.default.Embed, _text2.default];\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\nInline.order = ['cursor', 'inline', // Must be lower\n'underline', 'strike', 'italic', 'bold', 'script', 'link', 'code' // Must be higher\n];\n\nexports.default = Inline;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TextBlot = function (_Parchment$Text) {\n  _inherits(TextBlot, _Parchment$Text);\n\n  function TextBlot() {\n    _classCallCheck(this, TextBlot);\n\n    return _possibleConstructorReturn(this, (TextBlot.__proto__ || Object.getPrototypeOf(TextBlot)).apply(this, arguments));\n  }\n\n  return TextBlot;\n}(_parchment2.default.Text);\n\nexports.default = TextBlot;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _eventemitter = __webpack_require__(54);\n\nvar _eventemitter2 = _interopRequireDefault(_eventemitter);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:events');\n\nvar EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach(function (eventName) {\n  document.addEventListener(eventName, function () {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    [].slice.call(document.querySelectorAll('.ql-container')).forEach(function (node) {\n      // TODO use WeakMap\n      if (node.__quill && node.__quill.emitter) {\n        var _node$__quill$emitter;\n\n        (_node$__quill$emitter = node.__quill.emitter).handleDOM.apply(_node$__quill$emitter, args);\n      }\n    });\n  });\n});\n\nvar Emitter = function (_EventEmitter) {\n  _inherits(Emitter, _EventEmitter);\n\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n\n    var _this = _possibleConstructorReturn(this, (Emitter.__proto__ || Object.getPrototypeOf(Emitter)).call(this));\n\n    _this.listeners = {};\n    _this.on('error', debug.error);\n    return _this;\n  }\n\n  _createClass(Emitter, [{\n    key: 'emit',\n    value: function emit() {\n      debug.log.apply(debug, arguments);\n      _get(Emitter.prototype.__proto__ || Object.getPrototypeOf(Emitter.prototype), 'emit', this).apply(this, arguments);\n    }\n  }, {\n    key: 'handleDOM',\n    value: function handleDOM(event) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      (this.listeners[event.type] || []).forEach(function (_ref) {\n        var node = _ref.node,\n            handler = _ref.handler;\n\n        if (event.target === node || node.contains(event.target)) {\n          handler.apply(undefined, [event].concat(args));\n        }\n      });\n    }\n  }, {\n    key: 'listenDOM',\n    value: function listenDOM(eventName, node, handler) {\n      if (!this.listeners[eventName]) {\n        this.listeners[eventName] = [];\n      }\n      this.listeners[eventName].push({ node: node, handler: handler });\n    }\n  }]);\n\n  return Emitter;\n}(_eventemitter2.default);\n\nEmitter.events = {\n  EDITOR_CHANGE: 'editor-change',\n  SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n  SCROLL_OPTIMIZE: 'scroll-optimize',\n  SCROLL_UPDATE: 'scroll-update',\n  SELECTION_CHANGE: 'selection-change',\n  TEXT_CHANGE: 'text-change'\n};\nEmitter.sources = {\n  API: 'api',\n  SILENT: 'silent',\n  USER: 'user'\n};\n\nexports.default = Emitter;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Module = function Module(quill) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  _classCallCheck(this, Module);\n\n  this.quill = quill;\n  this.options = options;\n};\n\nModule.DEFAULTS = {};\n\nexports.default = Module;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar levels = ['error', 'warn', 'log', 'info'];\nvar level = 'warn';\n\nfunction debug(method) {\n  if (levels.indexOf(method) <= levels.indexOf(level)) {\n    var _console;\n\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    (_console = console)[method].apply(_console, args); // eslint-disable-line no-console\n  }\n}\n\nfunction namespace(ns) {\n  return levels.reduce(function (logger, method) {\n    logger[method] = debug.bind(console, method, ns);\n    return logger;\n  }, {});\n}\n\ndebug.level = namespace.level = function (newLevel) {\n  level = newLevel;\n};\n\nexports.default = namespace;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pSlice = Array.prototype.slice;\nvar objectKeys = __webpack_require__(52);\nvar isArguments = __webpack_require__(53);\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar Attributor = /** @class */ (function () {\n    function Attributor(attrName, keyName, options) {\n        if (options === void 0) { options = {}; }\n        this.attrName = attrName;\n        this.keyName = keyName;\n        var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;\n        if (options.scope != null) {\n            // Ignore type bits, force attribute bit\n            this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;\n        }\n        else {\n            this.scope = Registry.Scope.ATTRIBUTE;\n        }\n        if (options.whitelist != null)\n            this.whitelist = options.whitelist;\n    }\n    Attributor.keys = function (node) {\n        return [].map.call(node.attributes, function (item) {\n            return item.name;\n        });\n    };\n    Attributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        node.setAttribute(this.keyName, value);\n        return true;\n    };\n    Attributor.prototype.canAdd = function (node, value) {\n        var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));\n        if (match == null)\n            return false;\n        if (this.whitelist == null)\n            return true;\n        if (typeof value === 'string') {\n            return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n        }\n        else {\n            return this.whitelist.indexOf(value) > -1;\n        }\n    };\n    Attributor.prototype.remove = function (node) {\n        node.removeAttribute(this.keyName);\n    };\n    Attributor.prototype.value = function (node) {\n        var value = node.getAttribute(this.keyName);\n        if (this.canAdd(node, value) && value) {\n            return value;\n        }\n        return '';\n    };\n    return Attributor;\n}());\nexports.default = Attributor;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.Code = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Code = function (_Inline) {\n  _inherits(Code, _Inline);\n\n  function Code() {\n    _classCallCheck(this, Code);\n\n    return _possibleConstructorReturn(this, (Code.__proto__ || Object.getPrototypeOf(Code)).apply(this, arguments));\n  }\n\n  return Code;\n}(_inline2.default);\n\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\nvar CodeBlock = function (_Block) {\n  _inherits(CodeBlock, _Block);\n\n  function CodeBlock() {\n    _classCallCheck(this, CodeBlock);\n\n    return _possibleConstructorReturn(this, (CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock)).apply(this, arguments));\n  }\n\n  _createClass(CodeBlock, [{\n    key: 'delta',\n    value: function delta() {\n      var _this3 = this;\n\n      var text = this.domNode.textContent;\n      if (text.endsWith('\\n')) {\n        // Should always be true\n        text = text.slice(0, -1);\n      }\n      return text.split('\\n').reduce(function (delta, frag) {\n        return delta.insert(frag).insert('\\n', _this3.formats());\n      }, new _quillDelta2.default());\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      if (name === this.statics.blotName && value) return;\n\n      var _descendant = this.descendant(_text2.default, this.length() - 1),\n          _descendant2 = _slicedToArray(_descendant, 1),\n          text = _descendant2[0];\n\n      if (text != null) {\n        text.deleteAt(text.length() - 1, 1);\n      }\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'format', this).call(this, name, value);\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (length === 0) return;\n      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK) == null || name === this.statics.blotName && value === this.statics.formats(this.domNode)) {\n        return;\n      }\n      var nextNewline = this.newlineIndex(index);\n      if (nextNewline < 0 || nextNewline >= index + length) return;\n      var prevNewline = this.newlineIndex(index, true) + 1;\n      var isolateLength = nextNewline - prevNewline + 1;\n      var blot = this.isolate(prevNewline, isolateLength);\n      var next = blot.next;\n      blot.format(name, value);\n      if (next instanceof CodeBlock) {\n        next.formatAt(0, index - prevNewline + length - isolateLength, name, value);\n      }\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null) return;\n\n      var _descendant3 = this.descendant(_text2.default, index),\n          _descendant4 = _slicedToArray(_descendant3, 2),\n          text = _descendant4[0],\n          offset = _descendant4[1];\n\n      text.insertAt(offset, value);\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      var length = this.domNode.textContent.length;\n      if (!this.domNode.textContent.endsWith('\\n')) {\n        return length + 1;\n      }\n      return length;\n    }\n  }, {\n    key: 'newlineIndex',\n    value: function newlineIndex(searchIndex) {\n      var reverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (!reverse) {\n        var offset = this.domNode.textContent.slice(searchIndex).indexOf('\\n');\n        return offset > -1 ? searchIndex + offset : -1;\n      } else {\n        return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\\n');\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      if (!this.domNode.textContent.endsWith('\\n')) {\n        this.appendChild(_parchment2.default.create('text', '\\n'));\n      }\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'optimize', this).call(this, context);\n      var next = this.next;\n      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {\n        next.optimize(context);\n        next.moveChildren(this);\n        next.remove();\n      }\n    }\n  }, {\n    key: 'replace',\n    value: function replace(target) {\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'replace', this).call(this, target);\n      [].slice.call(this.domNode.querySelectorAll('*')).forEach(function (node) {\n        var blot = _parchment2.default.find(node);\n        if (blot == null) {\n          node.parentNode.removeChild(node);\n        } else if (blot instanceof _parchment2.default.Embed) {\n          blot.remove();\n        } else {\n          blot.unwrap();\n        }\n      });\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var domNode = _get(CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock), 'create', this).call(this, value);\n      domNode.setAttribute('spellcheck', false);\n      return domNode;\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      return true;\n    }\n  }]);\n\n  return CodeBlock;\n}(_block2.default);\n\nCodeBlock.blotName = 'code-block';\nCodeBlock.tagName = 'PRE';\nCodeBlock.TAB = '  ';\n\nexports.Code = Code;\nexports.default = CodeBlock;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _cursor = __webpack_require__(24);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ASCII = /^[ -~]*$/;\n\nvar Editor = function () {\n  function Editor(scroll) {\n    _classCallCheck(this, Editor);\n\n    this.scroll = scroll;\n    this.delta = this.getDelta();\n  }\n\n  _createClass(Editor, [{\n    key: 'applyDelta',\n    value: function applyDelta(delta) {\n      var _this = this;\n\n      var consumeNextNewline = false;\n      this.scroll.update();\n      var scrollLength = this.scroll.length();\n      this.scroll.batchStart();\n      delta = normalizeDelta(delta);\n      delta.reduce(function (index, op) {\n        var length = op.retain || op.delete || op.insert.length || 1;\n        var attributes = op.attributes || {};\n        if (op.insert != null) {\n          if (typeof op.insert === 'string') {\n            var text = op.insert;\n            if (text.endsWith('\\n') && consumeNextNewline) {\n              consumeNextNewline = false;\n              text = text.slice(0, -1);\n            }\n            if (index >= scrollLength && !text.endsWith('\\n')) {\n              consumeNextNewline = true;\n            }\n            _this.scroll.insertAt(index, text);\n\n            var _scroll$line = _this.scroll.line(index),\n                _scroll$line2 = _slicedToArray(_scroll$line, 2),\n                line = _scroll$line2[0],\n                offset = _scroll$line2[1];\n\n            var formats = (0, _extend2.default)({}, (0, _block.bubbleFormats)(line));\n            if (line instanceof _block2.default) {\n              var _line$descendant = line.descendant(_parchment2.default.Leaf, offset),\n                  _line$descendant2 = _slicedToArray(_line$descendant, 1),\n                  leaf = _line$descendant2[0];\n\n              formats = (0, _extend2.default)(formats, (0, _block.bubbleFormats)(leaf));\n            }\n            attributes = _op2.default.attributes.diff(formats, attributes) || {};\n          } else if (_typeof(op.insert) === 'object') {\n            var key = Object.keys(op.insert)[0]; // There should only be one key\n            if (key == null) return index;\n            _this.scroll.insertAt(index, key, op.insert[key]);\n          }\n          scrollLength += length;\n        }\n        Object.keys(attributes).forEach(function (name) {\n          _this.scroll.formatAt(index, length, name, attributes[name]);\n        });\n        return index + length;\n      }, 0);\n      delta.reduce(function (index, op) {\n        if (typeof op.delete === 'number') {\n          _this.scroll.deleteAt(index, op.delete);\n          return index;\n        }\n        return index + (op.retain || op.insert.length || 1);\n      }, 0);\n      this.scroll.batchEnd();\n      return this.update(delta);\n    }\n  }, {\n    key: 'deleteText',\n    value: function deleteText(index, length) {\n      this.scroll.deleteAt(index, length);\n      return this.update(new _quillDelta2.default().retain(index).delete(length));\n    }\n  }, {\n    key: 'formatLine',\n    value: function formatLine(index, length) {\n      var _this2 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      this.scroll.update();\n      Object.keys(formats).forEach(function (format) {\n        if (_this2.scroll.whitelist != null && !_this2.scroll.whitelist[format]) return;\n        var lines = _this2.scroll.lines(index, Math.max(length, 1));\n        var lengthRemaining = length;\n        lines.forEach(function (line) {\n          var lineLength = line.length();\n          if (!(line instanceof _code2.default)) {\n            line.format(format, formats[format]);\n          } else {\n            var codeIndex = index - line.offset(_this2.scroll);\n            var codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;\n            line.formatAt(codeIndex, codeLength, format, formats[format]);\n          }\n          lengthRemaining -= lineLength;\n        });\n      });\n      this.scroll.optimize();\n      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'formatText',\n    value: function formatText(index, length) {\n      var _this3 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      Object.keys(formats).forEach(function (format) {\n        _this3.scroll.formatAt(index, length, format, formats[format]);\n      });\n      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'getContents',\n    value: function getContents(index, length) {\n      return this.delta.slice(index, index + length);\n    }\n  }, {\n    key: 'getDelta',\n    value: function getDelta() {\n      return this.scroll.lines().reduce(function (delta, line) {\n        return delta.concat(line.delta());\n      }, new _quillDelta2.default());\n    }\n  }, {\n    key: 'getFormat',\n    value: function getFormat(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var lines = [],\n          leaves = [];\n      if (length === 0) {\n        this.scroll.path(index).forEach(function (path) {\n          var _path = _slicedToArray(path, 1),\n              blot = _path[0];\n\n          if (blot instanceof _block2.default) {\n            lines.push(blot);\n          } else if (blot instanceof _parchment2.default.Leaf) {\n            leaves.push(blot);\n          }\n        });\n      } else {\n        lines = this.scroll.lines(index, length);\n        leaves = this.scroll.descendants(_parchment2.default.Leaf, index, length);\n      }\n      var formatsArr = [lines, leaves].map(function (blots) {\n        if (blots.length === 0) return {};\n        var formats = (0, _block.bubbleFormats)(blots.shift());\n        while (Object.keys(formats).length > 0) {\n          var blot = blots.shift();\n          if (blot == null) return formats;\n          formats = combineFormats((0, _block.bubbleFormats)(blot), formats);\n        }\n        return formats;\n      });\n      return _extend2.default.apply(_extend2.default, formatsArr);\n    }\n  }, {\n    key: 'getText',\n    value: function getText(index, length) {\n      return this.getContents(index, length).filter(function (op) {\n        return typeof op.insert === 'string';\n      }).map(function (op) {\n        return op.insert;\n      }).join('');\n    }\n  }, {\n    key: 'insertEmbed',\n    value: function insertEmbed(index, embed, value) {\n      this.scroll.insertAt(index, embed, value);\n      return this.update(new _quillDelta2.default().retain(index).insert(_defineProperty({}, embed, value)));\n    }\n  }, {\n    key: 'insertText',\n    value: function insertText(index, text) {\n      var _this4 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      this.scroll.insertAt(index, text);\n      Object.keys(formats).forEach(function (format) {\n        _this4.scroll.formatAt(index, text.length, format, formats[format]);\n      });\n      return this.update(new _quillDelta2.default().retain(index).insert(text, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'isBlank',\n    value: function isBlank() {\n      if (this.scroll.children.length == 0) return true;\n      if (this.scroll.children.length > 1) return false;\n      var block = this.scroll.children.head;\n      if (block.statics.blotName !== _block2.default.blotName) return false;\n      if (block.children.length > 1) return false;\n      return block.children.head instanceof _break2.default;\n    }\n  }, {\n    key: 'removeFormat',\n    value: function removeFormat(index, length) {\n      var text = this.getText(index, length);\n\n      var _scroll$line3 = this.scroll.line(index + length),\n          _scroll$line4 = _slicedToArray(_scroll$line3, 2),\n          line = _scroll$line4[0],\n          offset = _scroll$line4[1];\n\n      var suffixLength = 0,\n          suffix = new _quillDelta2.default();\n      if (line != null) {\n        if (!(line instanceof _code2.default)) {\n          suffixLength = line.length() - offset;\n        } else {\n          suffixLength = line.newlineIndex(offset) - offset + 1;\n        }\n        suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n      }\n      var contents = this.getContents(index, length + suffixLength);\n      var diff = contents.diff(new _quillDelta2.default().insert(text).concat(suffix));\n      var delta = new _quillDelta2.default().retain(index).concat(diff);\n      return this.applyDelta(delta);\n    }\n  }, {\n    key: 'update',\n    value: function update(change) {\n      var mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var cursorIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n      var oldDelta = this.delta;\n      if (mutations.length === 1 && mutations[0].type === 'characterData' && mutations[0].target.data.match(ASCII) && _parchment2.default.find(mutations[0].target)) {\n        // Optimization for character changes\n        var textBlot = _parchment2.default.find(mutations[0].target);\n        var formats = (0, _block.bubbleFormats)(textBlot);\n        var index = textBlot.offset(this.scroll);\n        var oldValue = mutations[0].oldValue.replace(_cursor2.default.CONTENTS, '');\n        var oldText = new _quillDelta2.default().insert(oldValue);\n        var newText = new _quillDelta2.default().insert(textBlot.value());\n        var diffDelta = new _quillDelta2.default().retain(index).concat(oldText.diff(newText, cursorIndex));\n        change = diffDelta.reduce(function (delta, op) {\n          if (op.insert) {\n            return delta.insert(op.insert, formats);\n          } else {\n            return delta.push(op);\n          }\n        }, new _quillDelta2.default());\n        this.delta = oldDelta.compose(change);\n      } else {\n        this.delta = this.getDelta();\n        if (!change || !(0, _deepEqual2.default)(oldDelta.compose(change), this.delta)) {\n          change = oldDelta.diff(this.delta, cursorIndex);\n        }\n      }\n      return change;\n    }\n  }]);\n\n  return Editor;\n}();\n\nfunction combineFormats(formats, combined) {\n  return Object.keys(combined).reduce(function (merged, name) {\n    if (formats[name] == null) return merged;\n    if (combined[name] === formats[name]) {\n      merged[name] = combined[name];\n    } else if (Array.isArray(combined[name])) {\n      if (combined[name].indexOf(formats[name]) < 0) {\n        merged[name] = combined[name].concat([formats[name]]);\n      }\n    } else {\n      merged[name] = [combined[name], formats[name]];\n    }\n    return merged;\n  }, {});\n}\n\nfunction normalizeDelta(delta) {\n  return delta.reduce(function (delta, op) {\n    if (op.insert === 1) {\n      var attributes = (0, _clone2.default)(op.attributes);\n      delete attributes['image'];\n      return delta.insert({ image: op.attributes.image }, attributes);\n    }\n    if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {\n      op = (0, _clone2.default)(op);\n      if (op.attributes.list) {\n        op.attributes.list = 'ordered';\n      } else {\n        op.attributes.list = 'bullet';\n        delete op.attributes.bullet;\n      }\n    }\n    if (typeof op.insert === 'string') {\n      var text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      return delta.insert(text, op.attributes);\n    }\n    return delta.push(op);\n  }, new _quillDelta2.default());\n}\n\nexports.default = Editor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.Range = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _emitter3 = __webpack_require__(8);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill:selection');\n\nvar Range = function Range(index) {\n  var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  _classCallCheck(this, Range);\n\n  this.index = index;\n  this.length = length;\n};\n\nvar Selection = function () {\n  function Selection(scroll, emitter) {\n    var _this = this;\n\n    _classCallCheck(this, Selection);\n\n    this.emitter = emitter;\n    this.scroll = scroll;\n    this.composing = false;\n    this.mouseDown = false;\n    this.root = this.scroll.domNode;\n    this.cursor = _parchment2.default.create('cursor', this);\n    // savedRange is last non-null range\n    this.lastRange = this.savedRange = new Range(0, 0);\n    this.handleComposition();\n    this.handleDragging();\n    this.emitter.listenDOM('selectionchange', document, function () {\n      if (!_this.mouseDown) {\n        setTimeout(_this.update.bind(_this, _emitter4.default.sources.USER), 1);\n      }\n    });\n    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type, delta) {\n      if (type === _emitter4.default.events.TEXT_CHANGE && delta.length() > 0) {\n        _this.update(_emitter4.default.sources.SILENT);\n      }\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_BEFORE_UPDATE, function () {\n      if (!_this.hasFocus()) return;\n      var native = _this.getNativeRange();\n      if (native == null) return;\n      if (native.start.node === _this.cursor.textNode) return; // cursor.restore() will handle\n      // TODO unclear if this has negative side effects\n      _this.emitter.once(_emitter4.default.events.SCROLL_UPDATE, function () {\n        try {\n          _this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n        } catch (ignored) {}\n      });\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_OPTIMIZE, function (mutations, context) {\n      if (context.range) {\n        var _context$range = context.range,\n            startNode = _context$range.startNode,\n            startOffset = _context$range.startOffset,\n            endNode = _context$range.endNode,\n            endOffset = _context$range.endOffset;\n\n        _this.setNativeRange(startNode, startOffset, endNode, endOffset);\n      }\n    });\n    this.update(_emitter4.default.sources.SILENT);\n  }\n\n  _createClass(Selection, [{\n    key: 'handleComposition',\n    value: function handleComposition() {\n      var _this2 = this;\n\n      this.root.addEventListener('compositionstart', function () {\n        _this2.composing = true;\n      });\n      this.root.addEventListener('compositionend', function () {\n        _this2.composing = false;\n        if (_this2.cursor.parent) {\n          var range = _this2.cursor.restore();\n          if (!range) return;\n          setTimeout(function () {\n            _this2.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n          }, 1);\n        }\n      });\n    }\n  }, {\n    key: 'handleDragging',\n    value: function handleDragging() {\n      var _this3 = this;\n\n      this.emitter.listenDOM('mousedown', document.body, function () {\n        _this3.mouseDown = true;\n      });\n      this.emitter.listenDOM('mouseup', document.body, function () {\n        _this3.mouseDown = false;\n        _this3.update(_emitter4.default.sources.USER);\n      });\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      if (this.hasFocus()) return;\n      this.root.focus();\n      this.setRange(this.savedRange);\n    }\n  }, {\n    key: 'format',\n    value: function format(_format, value) {\n      if (this.scroll.whitelist != null && !this.scroll.whitelist[_format]) return;\n      this.scroll.update();\n      var nativeRange = this.getNativeRange();\n      if (nativeRange == null || !nativeRange.native.collapsed || _parchment2.default.query(_format, _parchment2.default.Scope.BLOCK)) return;\n      if (nativeRange.start.node !== this.cursor.textNode) {\n        var blot = _parchment2.default.find(nativeRange.start.node, false);\n        if (blot == null) return;\n        // TODO Give blot ability to not split\n        if (blot instanceof _parchment2.default.Leaf) {\n          var after = blot.split(nativeRange.start.offset);\n          blot.parent.insertBefore(this.cursor, after);\n        } else {\n          blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n        }\n        this.cursor.attach();\n      }\n      this.cursor.format(_format, value);\n      this.scroll.optimize();\n      this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n      this.update();\n    }\n  }, {\n    key: 'getBounds',\n    value: function getBounds(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var scrollLength = this.scroll.length();\n      index = Math.min(index, scrollLength - 1);\n      length = Math.min(index + length, scrollLength - 1) - index;\n      var node = void 0,\n          _scroll$leaf = this.scroll.leaf(index),\n          _scroll$leaf2 = _slicedToArray(_scroll$leaf, 2),\n          leaf = _scroll$leaf2[0],\n          offset = _scroll$leaf2[1];\n      if (leaf == null) return null;\n\n      var _leaf$position = leaf.position(offset, true);\n\n      var _leaf$position2 = _slicedToArray(_leaf$position, 2);\n\n      node = _leaf$position2[0];\n      offset = _leaf$position2[1];\n\n      var range = document.createRange();\n      if (length > 0) {\n        range.setStart(node, offset);\n\n        var _scroll$leaf3 = this.scroll.leaf(index + length);\n\n        var _scroll$leaf4 = _slicedToArray(_scroll$leaf3, 2);\n\n        leaf = _scroll$leaf4[0];\n        offset = _scroll$leaf4[1];\n\n        if (leaf == null) return null;\n\n        var _leaf$position3 = leaf.position(offset, true);\n\n        var _leaf$position4 = _slicedToArray(_leaf$position3, 2);\n\n        node = _leaf$position4[0];\n        offset = _leaf$position4[1];\n\n        range.setEnd(node, offset);\n        return range.getBoundingClientRect();\n      } else {\n        var side = 'left';\n        var rect = void 0;\n        if (node instanceof Text) {\n          if (offset < node.data.length) {\n            range.setStart(node, offset);\n            range.setEnd(node, offset + 1);\n          } else {\n            range.setStart(node, offset - 1);\n            range.setEnd(node, offset);\n            side = 'right';\n          }\n          rect = range.getBoundingClientRect();\n        } else {\n          rect = leaf.domNode.getBoundingClientRect();\n          if (offset > 0) side = 'right';\n        }\n        return {\n          bottom: rect.top + rect.height,\n          height: rect.height,\n          left: rect[side],\n          right: rect[side],\n          top: rect.top,\n          width: 0\n        };\n      }\n    }\n  }, {\n    key: 'getNativeRange',\n    value: function getNativeRange() {\n      var selection = document.getSelection();\n      if (selection == null || selection.rangeCount <= 0) return null;\n      var nativeRange = selection.getRangeAt(0);\n      if (nativeRange == null) return null;\n      var range = this.normalizeNative(nativeRange);\n      debug.info('getNativeRange', range);\n      return range;\n    }\n  }, {\n    key: 'getRange',\n    value: function getRange() {\n      var normalized = this.getNativeRange();\n      if (normalized == null) return [null, null];\n      var range = this.normalizedToRange(normalized);\n      return [range, normalized];\n    }\n  }, {\n    key: 'hasFocus',\n    value: function hasFocus() {\n      return document.activeElement === this.root;\n    }\n  }, {\n    key: 'normalizedToRange',\n    value: function normalizedToRange(range) {\n      var _this4 = this;\n\n      var positions = [[range.start.node, range.start.offset]];\n      if (!range.native.collapsed) {\n        positions.push([range.end.node, range.end.offset]);\n      }\n      var indexes = positions.map(function (position) {\n        var _position = _slicedToArray(position, 2),\n            node = _position[0],\n            offset = _position[1];\n\n        var blot = _parchment2.default.find(node, true);\n        var index = blot.offset(_this4.scroll);\n        if (offset === 0) {\n          return index;\n        } else if (blot instanceof _parchment2.default.Container) {\n          return index + blot.length();\n        } else {\n          return index + blot.index(node, offset);\n        }\n      });\n      var end = Math.min(Math.max.apply(Math, _toConsumableArray(indexes)), this.scroll.length() - 1);\n      var start = Math.min.apply(Math, [end].concat(_toConsumableArray(indexes)));\n      return new Range(start, end - start);\n    }\n  }, {\n    key: 'normalizeNative',\n    value: function normalizeNative(nativeRange) {\n      if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {\n        return null;\n      }\n      var range = {\n        start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },\n        end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n        native: nativeRange\n      };\n      [range.start, range.end].forEach(function (position) {\n        var node = position.node,\n            offset = position.offset;\n        while (!(node instanceof Text) && node.childNodes.length > 0) {\n          if (node.childNodes.length > offset) {\n            node = node.childNodes[offset];\n            offset = 0;\n          } else if (node.childNodes.length === offset) {\n            node = node.lastChild;\n            offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;\n          } else {\n            break;\n          }\n        }\n        position.node = node, position.offset = offset;\n      });\n      return range;\n    }\n  }, {\n    key: 'rangeToNative',\n    value: function rangeToNative(range) {\n      var _this5 = this;\n\n      var indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];\n      var args = [];\n      var scrollLength = this.scroll.length();\n      indexes.forEach(function (index, i) {\n        index = Math.min(scrollLength - 1, index);\n        var node = void 0,\n            _scroll$leaf5 = _this5.scroll.leaf(index),\n            _scroll$leaf6 = _slicedToArray(_scroll$leaf5, 2),\n            leaf = _scroll$leaf6[0],\n            offset = _scroll$leaf6[1];\n        var _leaf$position5 = leaf.position(offset, i !== 0);\n\n        var _leaf$position6 = _slicedToArray(_leaf$position5, 2);\n\n        node = _leaf$position6[0];\n        offset = _leaf$position6[1];\n\n        args.push(node, offset);\n      });\n      if (args.length < 2) {\n        args = args.concat(args);\n      }\n      return args;\n    }\n  }, {\n    key: 'scrollIntoView',\n    value: function scrollIntoView(scrollingContainer) {\n      var range = this.lastRange;\n      if (range == null) return;\n      var bounds = this.getBounds(range.index, range.length);\n      if (bounds == null) return;\n      var limit = this.scroll.length() - 1;\n\n      var _scroll$line = this.scroll.line(Math.min(range.index, limit)),\n          _scroll$line2 = _slicedToArray(_scroll$line, 1),\n          first = _scroll$line2[0];\n\n      var last = first;\n      if (range.length > 0) {\n        var _scroll$line3 = this.scroll.line(Math.min(range.index + range.length, limit));\n\n        var _scroll$line4 = _slicedToArray(_scroll$line3, 1);\n\n        last = _scroll$line4[0];\n      }\n      if (first == null || last == null) return;\n      var scrollBounds = scrollingContainer.getBoundingClientRect();\n      if (bounds.top < scrollBounds.top) {\n        scrollingContainer.scrollTop -= scrollBounds.top - bounds.top;\n      } else if (bounds.bottom > scrollBounds.bottom) {\n        scrollingContainer.scrollTop += bounds.bottom - scrollBounds.bottom;\n      }\n    }\n  }, {\n    key: 'setNativeRange',\n    value: function setNativeRange(startNode, startOffset) {\n      var endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;\n      var endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;\n      var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n      debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n      if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {\n        return;\n      }\n      var selection = document.getSelection();\n      if (selection == null) return;\n      if (startNode != null) {\n        if (!this.hasFocus()) this.root.focus();\n        var native = (this.getNativeRange() || {}).native;\n        if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {\n\n          if (startNode.tagName == \"BR\") {\n            startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);\n            startNode = startNode.parentNode;\n          }\n          if (endNode.tagName == \"BR\") {\n            endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);\n            endNode = endNode.parentNode;\n          }\n          var range = document.createRange();\n          range.setStart(startNode, startOffset);\n          range.setEnd(endNode, endOffset);\n          selection.removeAllRanges();\n          selection.addRange(range);\n        }\n      } else {\n        selection.removeAllRanges();\n        this.root.blur();\n        document.body.focus(); // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)\n      }\n    }\n  }, {\n    key: 'setRange',\n    value: function setRange(range) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n      if (typeof force === 'string') {\n        source = force;\n        force = false;\n      }\n      debug.info('setRange', range);\n      if (range != null) {\n        var args = this.rangeToNative(range);\n        this.setNativeRange.apply(this, _toConsumableArray(args).concat([force]));\n      } else {\n        this.setNativeRange(null);\n      }\n      this.update(source);\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n      var oldRange = this.lastRange;\n\n      var _getRange = this.getRange(),\n          _getRange2 = _slicedToArray(_getRange, 2),\n          lastRange = _getRange2[0],\n          nativeRange = _getRange2[1];\n\n      this.lastRange = lastRange;\n      if (this.lastRange != null) {\n        this.savedRange = this.lastRange;\n      }\n      if (!(0, _deepEqual2.default)(oldRange, this.lastRange)) {\n        var _emitter;\n\n        if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n          this.cursor.restore();\n        }\n        var args = [_emitter4.default.events.SELECTION_CHANGE, (0, _clone2.default)(this.lastRange), (0, _clone2.default)(oldRange), source];\n        (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n        if (source !== _emitter4.default.sources.SILENT) {\n          var _emitter2;\n\n          (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n        }\n      }\n    }\n  }]);\n\n  return Selection;\n}();\n\nfunction contains(parent, descendant) {\n  try {\n    // Firefox inserts inaccessible nodes around video elements\n    descendant.parentNode;\n  } catch (e) {\n    return false;\n  }\n  // IE11 has bug with Text nodes\n  // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n  if (descendant instanceof Text) {\n    descendant = descendant.parentNode;\n  }\n  return parent.contains(descendant);\n}\n\nexports.Range = Range;\nexports.default = Selection;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Break = function (_Parchment$Embed) {\n  _inherits(Break, _Parchment$Embed);\n\n  function Break() {\n    _classCallCheck(this, Break);\n\n    return _possibleConstructorReturn(this, (Break.__proto__ || Object.getPrototypeOf(Break)).apply(this, arguments));\n  }\n\n  _createClass(Break, [{\n    key: 'insertInto',\n    value: function insertInto(parent, ref) {\n      if (parent.children.length === 0) {\n        _get(Break.prototype.__proto__ || Object.getPrototypeOf(Break.prototype), 'insertInto', this).call(this, parent, ref);\n      } else {\n        this.remove();\n      }\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      return 0;\n    }\n  }, {\n    key: 'value',\n    value: function value() {\n      return '';\n    }\n  }], [{\n    key: 'value',\n    value: function value() {\n      return undefined;\n    }\n  }]);\n\n  return Break;\n}(_parchment2.default.Embed);\n\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\nexports.default = Break;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar linked_list_1 = __webpack_require__(44);\nvar shadow_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar ContainerBlot = /** @class */ (function (_super) {\n    __extends(ContainerBlot, _super);\n    function ContainerBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.build();\n        return _this;\n    }\n    ContainerBlot.prototype.appendChild = function (other) {\n        this.insertBefore(other);\n    };\n    ContainerBlot.prototype.attach = function () {\n        _super.prototype.attach.call(this);\n        this.children.forEach(function (child) {\n            child.attach();\n        });\n    };\n    ContainerBlot.prototype.build = function () {\n        var _this = this;\n        this.children = new linked_list_1.default();\n        // Need to be reversed for if DOM nodes already in order\n        [].slice\n            .call(this.domNode.childNodes)\n            .reverse()\n            .forEach(function (node) {\n            try {\n                var child = makeBlot(node);\n                _this.insertBefore(child, _this.children.head || undefined);\n            }\n            catch (err) {\n                if (err instanceof Registry.ParchmentError)\n                    return;\n                else\n                    throw err;\n            }\n        });\n    };\n    ContainerBlot.prototype.deleteAt = function (index, length) {\n        if (index === 0 && length === this.length()) {\n            return this.remove();\n        }\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.deleteAt(offset, length);\n        });\n    };\n    ContainerBlot.prototype.descendant = function (criteria, index) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if ((criteria.blotName == null && criteria(child)) ||\n            (criteria.blotName != null && child instanceof criteria)) {\n            return [child, offset];\n        }\n        else if (child instanceof ContainerBlot) {\n            return child.descendant(criteria, offset);\n        }\n        else {\n            return [null, -1];\n        }\n    };\n    ContainerBlot.prototype.descendants = function (criteria, index, length) {\n        if (index === void 0) { index = 0; }\n        if (length === void 0) { length = Number.MAX_VALUE; }\n        var descendants = [];\n        var lengthLeft = length;\n        this.children.forEachAt(index, length, function (child, index, length) {\n            if ((criteria.blotName == null && criteria(child)) ||\n                (criteria.blotName != null && child instanceof criteria)) {\n                descendants.push(child);\n            }\n            if (child instanceof ContainerBlot) {\n                descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));\n            }\n            lengthLeft -= length;\n        });\n        return descendants;\n    };\n    ContainerBlot.prototype.detach = function () {\n        this.children.forEach(function (child) {\n            child.detach();\n        });\n        _super.prototype.detach.call(this);\n    };\n    ContainerBlot.prototype.formatAt = function (index, length, name, value) {\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.formatAt(offset, length, name, value);\n        });\n    };\n    ContainerBlot.prototype.insertAt = function (index, value, def) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if (child) {\n            child.insertAt(offset, value, def);\n        }\n        else {\n            var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n            this.appendChild(blot);\n        }\n    };\n    ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {\n        if (this.statics.allowedChildren != null &&\n            !this.statics.allowedChildren.some(function (child) {\n                return childBlot instanceof child;\n            })) {\n            throw new Registry.ParchmentError(\"Cannot insert \" + childBlot.statics.blotName + \" into \" + this.statics.blotName);\n        }\n        childBlot.insertInto(this, refBlot);\n    };\n    ContainerBlot.prototype.length = function () {\n        return this.children.reduce(function (memo, child) {\n            return memo + child.length();\n        }, 0);\n    };\n    ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {\n        this.children.forEach(function (child) {\n            targetParent.insertBefore(child, refNode);\n        });\n    };\n    ContainerBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        if (this.children.length === 0) {\n            if (this.statics.defaultChild != null) {\n                var child = Registry.create(this.statics.defaultChild);\n                this.appendChild(child);\n                child.optimize(context);\n            }\n            else {\n                this.remove();\n            }\n        }\n    };\n    ContainerBlot.prototype.path = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];\n        var position = [[this, index]];\n        if (child instanceof ContainerBlot) {\n            return position.concat(child.path(offset, inclusive));\n        }\n        else if (child != null) {\n            position.push([child, offset]);\n        }\n        return position;\n    };\n    ContainerBlot.prototype.removeChild = function (child) {\n        this.children.remove(child);\n    };\n    ContainerBlot.prototype.replace = function (target) {\n        if (target instanceof ContainerBlot) {\n            target.moveChildren(this);\n        }\n        _super.prototype.replace.call(this, target);\n    };\n    ContainerBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = this.clone();\n        this.parent.insertBefore(after, this.next);\n        this.children.forEachAt(index, this.length(), function (child, offset, length) {\n            child = child.split(offset, force);\n            after.appendChild(child);\n        });\n        return after;\n    };\n    ContainerBlot.prototype.unwrap = function () {\n        this.moveChildren(this.parent, this.next);\n        this.remove();\n    };\n    ContainerBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        var addedNodes = [];\n        var removedNodes = [];\n        mutations.forEach(function (mutation) {\n            if (mutation.target === _this.domNode && mutation.type === 'childList') {\n                addedNodes.push.apply(addedNodes, mutation.addedNodes);\n                removedNodes.push.apply(removedNodes, mutation.removedNodes);\n            }\n        });\n        removedNodes.forEach(function (node) {\n            // Check node has actually been removed\n            // One exception is Chrome does not immediately remove IFRAMEs\n            // from DOM but MutationRecord is correct in its reported removal\n            if (node.parentNode != null &&\n                // @ts-ignore\n                node.tagName !== 'IFRAME' &&\n                document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n                return;\n            }\n            var blot = Registry.find(node);\n            if (blot == null)\n                return;\n            if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {\n                blot.detach();\n            }\n        });\n        addedNodes\n            .filter(function (node) {\n            return node.parentNode == _this.domNode;\n        })\n            .sort(function (a, b) {\n            if (a === b)\n                return 0;\n            if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n                return 1;\n            }\n            return -1;\n        })\n            .forEach(function (node) {\n            var refBlot = null;\n            if (node.nextSibling != null) {\n                refBlot = Registry.find(node.nextSibling);\n            }\n            var blot = makeBlot(node);\n            if (blot.next != refBlot || blot.next == null) {\n                if (blot.parent != null) {\n                    blot.parent.removeChild(_this);\n                }\n                _this.insertBefore(blot, refBlot || undefined);\n            }\n        });\n    };\n    return ContainerBlot;\n}(shadow_1.default));\nfunction makeBlot(node) {\n    var blot = Registry.find(node);\n    if (blot == null) {\n        try {\n            blot = Registry.create(node);\n        }\n        catch (e) {\n            blot = Registry.create(Registry.Scope.INLINE);\n            [].slice.call(node.childNodes).forEach(function (child) {\n                // @ts-ignore\n                blot.domNode.appendChild(child);\n            });\n            if (node.parentNode) {\n                node.parentNode.replaceChild(blot.domNode, node);\n            }\n            blot.attach();\n        }\n    }\n    return blot;\n}\nexports.default = ContainerBlot;\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nvar store_1 = __webpack_require__(31);\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar FormatBlot = /** @class */ (function (_super) {\n    __extends(FormatBlot, _super);\n    function FormatBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.attributes = new store_1.default(_this.domNode);\n        return _this;\n    }\n    FormatBlot.formats = function (domNode) {\n        if (typeof this.tagName === 'string') {\n            return true;\n        }\n        else if (Array.isArray(this.tagName)) {\n            return domNode.tagName.toLowerCase();\n        }\n        return undefined;\n    };\n    FormatBlot.prototype.format = function (name, value) {\n        var format = Registry.query(name);\n        if (format instanceof attributor_1.default) {\n            this.attributes.attribute(format, value);\n        }\n        else if (value) {\n            if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {\n                this.replaceWith(name, value);\n            }\n        }\n    };\n    FormatBlot.prototype.formats = function () {\n        var formats = this.attributes.values();\n        var format = this.statics.formats(this.domNode);\n        if (format != null) {\n            formats[this.statics.blotName] = format;\n        }\n        return formats;\n    };\n    FormatBlot.prototype.replaceWith = function (name, value) {\n        var replacement = _super.prototype.replaceWith.call(this, name, value);\n        this.attributes.copy(replacement);\n        return replacement;\n    };\n    FormatBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        _super.prototype.update.call(this, mutations, context);\n        if (mutations.some(function (mutation) {\n            return mutation.target === _this.domNode && mutation.type === 'attributes';\n        })) {\n            this.attributes.build();\n        }\n    };\n    FormatBlot.prototype.wrap = function (name, value) {\n        var wrapper = _super.prototype.wrap.call(this, name, value);\n        if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {\n            this.attributes.move(wrapper);\n        }\n        return wrapper;\n    };\n    return FormatBlot;\n}(container_1.default));\nexports.default = FormatBlot;\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar shadow_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar LeafBlot = /** @class */ (function (_super) {\n    __extends(LeafBlot, _super);\n    function LeafBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LeafBlot.value = function (domNode) {\n        return true;\n    };\n    LeafBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node ||\n            this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n            return Math.min(offset, 1);\n        }\n        return -1;\n    };\n    LeafBlot.prototype.position = function (index, inclusive) {\n        var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);\n        if (index > 0)\n            offset += 1;\n        return [this.parent.domNode, offset];\n    };\n    LeafBlot.prototype.value = function () {\n        var _a;\n        return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;\n    };\n    LeafBlot.scope = Registry.Scope.INLINE_BLOT;\n    return LeafBlot;\n}(shadow_1.default));\nexports.default = LeafBlot;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar equal = __webpack_require__(11);\nvar extend = __webpack_require__(3);\n\n\nvar lib = {\n  attributes: {\n    compose: function (a, b, keepNull) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = extend(true, {}, b);\n      if (!keepNull) {\n        attributes = Object.keys(attributes).reduce(function (copy, key) {\n          if (attributes[key] != null) {\n            copy[key] = attributes[key];\n          }\n          return copy;\n        }, {});\n      }\n      for (var key in a) {\n        if (a[key] !== undefined && b[key] === undefined) {\n          attributes[key] = a[key];\n        }\n      }\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    diff: function(a, b) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {\n        if (!equal(a[key], b[key])) {\n          attributes[key] = b[key] === undefined ? null : b[key];\n        }\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    transform: function (a, b, priority) {\n      if (typeof a !== 'object') return b;\n      if (typeof b !== 'object') return undefined;\n      if (!priority) return b;  // b simply overwrites us without priority\n      var attributes = Object.keys(b).reduce(function (attributes, key) {\n        if (a[key] === undefined) attributes[key] = b[key];  // null is a valid value\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    }\n  },\n\n  iterator: function (ops) {\n    return new Iterator(ops);\n  },\n\n  length: function (op) {\n    if (typeof op['delete'] === 'number') {\n      return op['delete'];\n    } else if (typeof op.retain === 'number') {\n      return op.retain;\n    } else {\n      return typeof op.insert === 'string' ? op.insert.length : 1;\n    }\n  }\n};\n\n\nfunction Iterator(ops) {\n  this.ops = ops;\n  this.index = 0;\n  this.offset = 0;\n};\n\nIterator.prototype.hasNext = function () {\n  return this.peekLength() < Infinity;\n};\n\nIterator.prototype.next = function (length) {\n  if (!length) length = Infinity;\n  var nextOp = this.ops[this.index];\n  if (nextOp) {\n    var offset = this.offset;\n    var opLength = lib.length(nextOp)\n    if (length >= opLength - offset) {\n      length = opLength - offset;\n      this.index += 1;\n      this.offset = 0;\n    } else {\n      this.offset += length;\n    }\n    if (typeof nextOp['delete'] === 'number') {\n      return { 'delete': length };\n    } else {\n      var retOp = {};\n      if (nextOp.attributes) {\n        retOp.attributes = nextOp.attributes;\n      }\n      if (typeof nextOp.retain === 'number') {\n        retOp.retain = length;\n      } else if (typeof nextOp.insert === 'string') {\n        retOp.insert = nextOp.insert.substr(offset, length);\n      } else {\n        // offset should === 0, length should === 1\n        retOp.insert = nextOp.insert;\n      }\n      return retOp;\n    }\n  } else {\n    return { retain: Infinity };\n  }\n};\n\nIterator.prototype.peek = function () {\n  return this.ops[this.index];\n};\n\nIterator.prototype.peekLength = function () {\n  if (this.ops[this.index]) {\n    // Should never return 0 if our index is being managed correctly\n    return lib.length(this.ops[this.index]) - this.offset;\n  } else {\n    return Infinity;\n  }\n};\n\nIterator.prototype.peekType = function () {\n  if (this.ops[this.index]) {\n    if (typeof this.ops[this.index]['delete'] === 'number') {\n      return 'delete';\n    } else if (typeof this.ops[this.index].retain === 'number') {\n      return 'retain';\n    } else {\n      return 'insert';\n    }\n  }\n  return 'retain';\n};\n\nIterator.prototype.rest = function () {\n  if (!this.hasNext()) {\n    return [];\n  } else if (this.offset === 0) {\n    return this.ops.slice(this.index);\n  } else {\n    var offset = this.offset;\n    var index = this.index;\n    var next = this.next();\n    var rest = this.ops.slice(this.index);\n    this.offset = offset;\n    this.index = index;\n    return [next].concat(rest);\n  }\n};\n\n\nmodule.exports = lib;\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nvar clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n  return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n  nativeMap = Map;\n} catch(_) {\n  // maybe a reference error because no `Map`. Give it a dummy value that no\n  // value will ever be an instanceof.\n  nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n  nativeSet = Set;\n} catch(_) {\n  nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n  nativePromise = Promise;\n} catch(_) {\n  nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n *    should be cloned as well. Non-enumerable properties on the prototype\n *    chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    includeNonEnumerable = circular.includeNonEnumerable;\n    circular = circular.circular;\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth === 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      child = new nativeMap();\n    } else if (_instanceof(parent, nativeSet)) {\n      child = new nativeSet();\n    } else if (_instanceof(parent, nativePromise)) {\n      child = new nativePromise(function (resolve, reject) {\n        parent.then(function(value) {\n          resolve(_clone(value, depth - 1));\n        }, function(err) {\n          reject(_clone(err, depth - 1));\n        });\n      });\n    } else if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        // Node.js >= 4.5.0\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        // Older Node.js versions\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else if (_instanceof(parent, Error)) {\n      child = Object.create(parent);\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      parent.forEach(function(value, key) {\n        var keyChild = _clone(key, depth - 1);\n        var valueChild = _clone(value, depth - 1);\n        child.set(keyChild, valueChild);\n      });\n    }\n    if (_instanceof(parent, nativeSet)) {\n      parent.forEach(function(value) {\n        var entryChild = _clone(value, depth - 1);\n        child.add(entryChild);\n      });\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(parent);\n      for (var i = 0; i < symbols.length; i++) {\n        // Don't need to worry about cloning a symbol because it is a primitive,\n        // like a number or string.\n        var symbol = symbols[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n          continue;\n        }\n        child[symbol] = _clone(parent[symbol], depth - 1);\n        if (!descriptor.enumerable) {\n          Object.defineProperty(child, symbol, {\n            enumerable: false\n          });\n        }\n      }\n    }\n\n    if (includeNonEnumerable) {\n      var allPropertyNames = Object.getOwnPropertyNames(parent);\n      for (var i = 0; i < allPropertyNames.length; i++) {\n        var propertyName = allPropertyNames[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n        if (descriptor && descriptor.enumerable) {\n          continue;\n        }\n        child[propertyName] = _clone(parent[propertyName], depth - 1);\n        Object.defineProperty(child, propertyName, {\n          enumerable: false\n        });\n      }\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction isLine(blot) {\n  return blot instanceof _block2.default || blot instanceof _block.BlockEmbed;\n}\n\nvar Scroll = function (_Parchment$Scroll) {\n  _inherits(Scroll, _Parchment$Scroll);\n\n  function Scroll(domNode, config) {\n    _classCallCheck(this, Scroll);\n\n    var _this = _possibleConstructorReturn(this, (Scroll.__proto__ || Object.getPrototypeOf(Scroll)).call(this, domNode));\n\n    _this.emitter = config.emitter;\n    if (Array.isArray(config.whitelist)) {\n      _this.whitelist = config.whitelist.reduce(function (whitelist, format) {\n        whitelist[format] = true;\n        return whitelist;\n      }, {});\n    }\n    // Some reason fixes composition issues with character languages in Windows/Chrome, Safari\n    _this.domNode.addEventListener('DOMNodeInserted', function () {});\n    _this.optimize();\n    _this.enable();\n    return _this;\n  }\n\n  _createClass(Scroll, [{\n    key: 'batchStart',\n    value: function batchStart() {\n      this.batch = true;\n    }\n  }, {\n    key: 'batchEnd',\n    value: function batchEnd() {\n      this.batch = false;\n      this.optimize();\n    }\n  }, {\n    key: 'deleteAt',\n    value: function deleteAt(index, length) {\n      var _line = this.line(index),\n          _line2 = _slicedToArray(_line, 2),\n          first = _line2[0],\n          offset = _line2[1];\n\n      var _line3 = this.line(index + length),\n          _line4 = _slicedToArray(_line3, 1),\n          last = _line4[0];\n\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'deleteAt', this).call(this, index, length);\n      if (last != null && first !== last && offset > 0) {\n        if (first instanceof _block.BlockEmbed || last instanceof _block.BlockEmbed) {\n          this.optimize();\n          return;\n        }\n        if (first instanceof _code2.default) {\n          var newlineIndex = first.newlineIndex(first.length(), true);\n          if (newlineIndex > -1) {\n            first = first.split(newlineIndex + 1);\n            if (first === last) {\n              this.optimize();\n              return;\n            }\n          }\n        } else if (last instanceof _code2.default) {\n          var _newlineIndex = last.newlineIndex(0);\n          if (_newlineIndex > -1) {\n            last.split(_newlineIndex + 1);\n          }\n        }\n        var ref = last.children.head instanceof _break2.default ? null : last.children.head;\n        first.moveChildren(last, ref);\n        first.remove();\n      }\n      this.optimize();\n    }\n  }, {\n    key: 'enable',\n    value: function enable() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.domNode.setAttribute('contenteditable', enabled);\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, format, value) {\n      if (this.whitelist != null && !this.whitelist[format]) return;\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'formatAt', this).call(this, index, length, format, value);\n      this.optimize();\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null && this.whitelist != null && !this.whitelist[value]) return;\n      if (index >= this.length()) {\n        if (def == null || _parchment2.default.query(value, _parchment2.default.Scope.BLOCK) == null) {\n          var blot = _parchment2.default.create(this.statics.defaultChild);\n          this.appendChild(blot);\n          if (def == null && value.endsWith('\\n')) {\n            value = value.slice(0, -1);\n          }\n          blot.insertAt(0, value, def);\n        } else {\n          var embed = _parchment2.default.create(value, def);\n          this.appendChild(embed);\n        }\n      } else {\n        _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertAt', this).call(this, index, value, def);\n      }\n      this.optimize();\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      if (blot.statics.scope === _parchment2.default.Scope.INLINE_BLOT) {\n        var wrapper = _parchment2.default.create(this.statics.defaultChild);\n        wrapper.appendChild(blot);\n        blot = wrapper;\n      }\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertBefore', this).call(this, blot, ref);\n    }\n  }, {\n    key: 'leaf',\n    value: function leaf(index) {\n      return this.path(index).pop() || [null, -1];\n    }\n  }, {\n    key: 'line',\n    value: function line(index) {\n      if (index === this.length()) {\n        return this.line(index - 1);\n      }\n      return this.descendant(isLine, index);\n    }\n  }, {\n    key: 'lines',\n    value: function lines() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n      var getLines = function getLines(blot, index, length) {\n        var lines = [],\n            lengthLeft = length;\n        blot.children.forEachAt(index, length, function (child, index, length) {\n          if (isLine(child)) {\n            lines.push(child);\n          } else if (child instanceof _parchment2.default.Container) {\n            lines = lines.concat(getLines(child, index, lengthLeft));\n          }\n          lengthLeft -= length;\n        });\n        return lines;\n      };\n      return getLines(this, index, length);\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize() {\n      var mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (this.batch === true) return;\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'optimize', this).call(this, mutations, context);\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_OPTIMIZE, mutations, context);\n      }\n    }\n  }, {\n    key: 'path',\n    value: function path(index) {\n      return _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'path', this).call(this, index).slice(1); // Exclude self\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations) {\n      if (this.batch === true) return;\n      var source = _emitter2.default.sources.USER;\n      if (typeof mutations === 'string') {\n        source = mutations;\n      }\n      if (!Array.isArray(mutations)) {\n        mutations = this.observer.takeRecords();\n      }\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_BEFORE_UPDATE, source, mutations);\n      }\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'update', this).call(this, mutations.concat([])); // pass copy\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_UPDATE, source, mutations);\n      }\n    }\n  }]);\n\n  return Scroll;\n}(_parchment2.default.Scroll);\n\nScroll.blotName = 'scroll';\nScroll.className = 'ql-editor';\nScroll.tagName = 'DIV';\nScroll.defaultChild = 'block';\nScroll.allowedChildren = [_block2.default, _block.BlockEmbed, _container2.default];\n\nexports.default = Scroll;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SHORTKEY = exports.default = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:keyboard');\n\nvar SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\nvar Keyboard = function (_Module) {\n  _inherits(Keyboard, _Module);\n\n  _createClass(Keyboard, null, [{\n    key: 'match',\n    value: function match(evt, binding) {\n      binding = normalize(binding);\n      if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function (key) {\n        return !!binding[key] !== evt[key] && binding[key] !== null;\n      })) {\n        return false;\n      }\n      return binding.key === (evt.which || evt.keyCode);\n    }\n  }]);\n\n  function Keyboard(quill, options) {\n    _classCallCheck(this, Keyboard);\n\n    var _this = _possibleConstructorReturn(this, (Keyboard.__proto__ || Object.getPrototypeOf(Keyboard)).call(this, quill, options));\n\n    _this.bindings = {};\n    Object.keys(_this.options.bindings).forEach(function (name) {\n      if (name === 'list autofill' && quill.scroll.whitelist != null && !quill.scroll.whitelist['list']) {\n        return;\n      }\n      if (_this.options.bindings[name]) {\n        _this.addBinding(_this.options.bindings[name]);\n      }\n    });\n    _this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);\n    _this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function () {});\n    if (/Firefox/i.test(navigator.userAgent)) {\n      // Need to handle delete and backspace for Firefox in the general case #1171\n      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);\n      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);\n    } else {\n      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);\n      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);\n    }\n    _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);\n    _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);\n    _this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null }, { collapsed: true, offset: 0 }, handleBackspace);\n    _this.listen();\n    return _this;\n  }\n\n  _createClass(Keyboard, [{\n    key: 'addBinding',\n    value: function addBinding(key) {\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      var binding = normalize(key);\n      if (binding == null || binding.key == null) {\n        return debug.warn('Attempted to add invalid keyboard binding', binding);\n      }\n      if (typeof context === 'function') {\n        context = { handler: context };\n      }\n      if (typeof handler === 'function') {\n        handler = { handler: handler };\n      }\n      binding = (0, _extend2.default)(binding, context, handler);\n      this.bindings[binding.key] = this.bindings[binding.key] || [];\n      this.bindings[binding.key].push(binding);\n    }\n  }, {\n    key: 'listen',\n    value: function listen() {\n      var _this2 = this;\n\n      this.quill.root.addEventListener('keydown', function (evt) {\n        if (evt.defaultPrevented) return;\n        var which = evt.which || evt.keyCode;\n        var bindings = (_this2.bindings[which] || []).filter(function (binding) {\n          return Keyboard.match(evt, binding);\n        });\n        if (bindings.length === 0) return;\n        var range = _this2.quill.getSelection();\n        if (range == null || !_this2.quill.hasFocus()) return;\n\n        var _quill$getLine = _this2.quill.getLine(range.index),\n            _quill$getLine2 = _slicedToArray(_quill$getLine, 2),\n            line = _quill$getLine2[0],\n            offset = _quill$getLine2[1];\n\n        var _quill$getLeaf = _this2.quill.getLeaf(range.index),\n            _quill$getLeaf2 = _slicedToArray(_quill$getLeaf, 2),\n            leafStart = _quill$getLeaf2[0],\n            offsetStart = _quill$getLeaf2[1];\n\n        var _ref = range.length === 0 ? [leafStart, offsetStart] : _this2.quill.getLeaf(range.index + range.length),\n            _ref2 = _slicedToArray(_ref, 2),\n            leafEnd = _ref2[0],\n            offsetEnd = _ref2[1];\n\n        var prefixText = leafStart instanceof _parchment2.default.Text ? leafStart.value().slice(0, offsetStart) : '';\n        var suffixText = leafEnd instanceof _parchment2.default.Text ? leafEnd.value().slice(offsetEnd) : '';\n        var curContext = {\n          collapsed: range.length === 0,\n          empty: range.length === 0 && line.length() <= 1,\n          format: _this2.quill.getFormat(range),\n          offset: offset,\n          prefix: prefixText,\n          suffix: suffixText\n        };\n        var prevented = bindings.some(function (binding) {\n          if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;\n          if (binding.empty != null && binding.empty !== curContext.empty) return false;\n          if (binding.offset != null && binding.offset !== curContext.offset) return false;\n          if (Array.isArray(binding.format)) {\n            // any format is present\n            if (binding.format.every(function (name) {\n              return curContext.format[name] == null;\n            })) {\n              return false;\n            }\n          } else if (_typeof(binding.format) === 'object') {\n            // all formats must match\n            if (!Object.keys(binding.format).every(function (name) {\n              if (binding.format[name] === true) return curContext.format[name] != null;\n              if (binding.format[name] === false) return curContext.format[name] == null;\n              return (0, _deepEqual2.default)(binding.format[name], curContext.format[name]);\n            })) {\n              return false;\n            }\n          }\n          if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;\n          if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;\n          return binding.handler.call(_this2, range, curContext) !== true;\n        });\n        if (prevented) {\n          evt.preventDefault();\n        }\n      });\n    }\n  }]);\n\n  return Keyboard;\n}(_module2.default);\n\nKeyboard.keys = {\n  BACKSPACE: 8,\n  TAB: 9,\n  ENTER: 13,\n  ESCAPE: 27,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  DELETE: 46\n};\n\nKeyboard.DEFAULTS = {\n  bindings: {\n    'bold': makeFormatHandler('bold'),\n    'italic': makeFormatHandler('italic'),\n    'underline': makeFormatHandler('underline'),\n    'indent': {\n      // highlight tab or tab at beginning of list, indent or blockquote\n      key: Keyboard.keys.TAB,\n      format: ['blockquote', 'indent', 'list'],\n      handler: function handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '+1', _quill2.default.sources.USER);\n      }\n    },\n    'outdent': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      format: ['blockquote', 'indent', 'list'],\n      // highlight tab or tab at beginning of list, indent or blockquote\n      handler: function handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '-1', _quill2.default.sources.USER);\n      }\n    },\n    'outdent backspace': {\n      key: Keyboard.keys.BACKSPACE,\n      collapsed: true,\n      shiftKey: null,\n      metaKey: null,\n      ctrlKey: null,\n      altKey: null,\n      format: ['indent', 'list'],\n      offset: 0,\n      handler: function handler(range, context) {\n        if (context.format.indent != null) {\n          this.quill.format('indent', '-1', _quill2.default.sources.USER);\n        } else if (context.format.list != null) {\n          this.quill.format('list', false, _quill2.default.sources.USER);\n        }\n      }\n    },\n    'indent code-block': makeCodeBlockHandler(true),\n    'outdent code-block': makeCodeBlockHandler(false),\n    'remove tab': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      collapsed: true,\n      prefix: /\\t$/,\n      handler: function handler(range) {\n        this.quill.deleteText(range.index - 1, 1, _quill2.default.sources.USER);\n      }\n    },\n    'tab': {\n      key: Keyboard.keys.TAB,\n      handler: function handler(range) {\n        this.quill.history.cutoff();\n        var delta = new _quillDelta2.default().retain(range.index).delete(range.length).insert('\\t');\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n      }\n    },\n    'list empty enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['list'],\n      empty: true,\n      handler: function handler(range, context) {\n        this.quill.format('list', false, _quill2.default.sources.USER);\n        if (context.format.indent) {\n          this.quill.format('indent', false, _quill2.default.sources.USER);\n        }\n      }\n    },\n    'checklist enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: { list: 'checked' },\n      handler: function handler(range) {\n        var _quill$getLine3 = this.quill.getLine(range.index),\n            _quill$getLine4 = _slicedToArray(_quill$getLine3, 2),\n            line = _quill$getLine4[0],\n            offset = _quill$getLine4[1];\n\n        var formats = (0, _extend2.default)({}, line.formats(), { list: 'checked' });\n        var delta = new _quillDelta2.default().retain(range.index).insert('\\n', formats).retain(line.length() - offset - 1).retain(1, { list: 'unchecked' });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'header enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['header'],\n      suffix: /^$/,\n      handler: function handler(range, context) {\n        var _quill$getLine5 = this.quill.getLine(range.index),\n            _quill$getLine6 = _slicedToArray(_quill$getLine5, 2),\n            line = _quill$getLine6[0],\n            offset = _quill$getLine6[1];\n\n        var delta = new _quillDelta2.default().retain(range.index).insert('\\n', context.format).retain(line.length() - offset - 1).retain(1, { header: null });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'list autofill': {\n      key: ' ',\n      collapsed: true,\n      format: { list: false },\n      prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n      handler: function handler(range, context) {\n        var length = context.prefix.length;\n\n        var _quill$getLine7 = this.quill.getLine(range.index),\n            _quill$getLine8 = _slicedToArray(_quill$getLine7, 2),\n            line = _quill$getLine8[0],\n            offset = _quill$getLine8[1];\n\n        if (offset > length) return true;\n        var value = void 0;\n        switch (context.prefix.trim()) {\n          case '[]':case '[ ]':\n            value = 'unchecked';\n            break;\n          case '[x]':\n            value = 'checked';\n            break;\n          case '-':case '*':\n            value = 'bullet';\n            break;\n          default:\n            value = 'ordered';\n        }\n        this.quill.insertText(range.index, ' ', _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        var delta = new _quillDelta2.default().retain(range.index - offset).delete(length + 1).retain(line.length() - 2 - offset).retain(1, { list: value });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index - length, _quill2.default.sources.SILENT);\n      }\n    },\n    'code exit': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['code-block'],\n      prefix: /\\n\\n$/,\n      suffix: /^\\s+$/,\n      handler: function handler(range) {\n        var _quill$getLine9 = this.quill.getLine(range.index),\n            _quill$getLine10 = _slicedToArray(_quill$getLine9, 2),\n            line = _quill$getLine10[0],\n            offset = _quill$getLine10[1];\n\n        var delta = new _quillDelta2.default().retain(range.index + line.length() - offset - 2).retain(1, { 'code-block': null }).delete(1);\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n      }\n    },\n    'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),\n    'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),\n    'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),\n    'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)\n  }\n};\n\nfunction makeEmbedArrowHandler(key, shiftKey) {\n  var _ref3;\n\n  var where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';\n  return _ref3 = {\n    key: key,\n    shiftKey: shiftKey,\n    altKey: null\n  }, _defineProperty(_ref3, where, /^$/), _defineProperty(_ref3, 'handler', function handler(range) {\n    var index = range.index;\n    if (key === Keyboard.keys.RIGHT) {\n      index += range.length + 1;\n    }\n\n    var _quill$getLeaf3 = this.quill.getLeaf(index),\n        _quill$getLeaf4 = _slicedToArray(_quill$getLeaf3, 1),\n        leaf = _quill$getLeaf4[0];\n\n    if (!(leaf instanceof _parchment2.default.Embed)) return true;\n    if (key === Keyboard.keys.LEFT) {\n      if (shiftKey) {\n        this.quill.setSelection(range.index - 1, range.length + 1, _quill2.default.sources.USER);\n      } else {\n        this.quill.setSelection(range.index - 1, _quill2.default.sources.USER);\n      }\n    } else {\n      if (shiftKey) {\n        this.quill.setSelection(range.index, range.length + 1, _quill2.default.sources.USER);\n      } else {\n        this.quill.setSelection(range.index + range.length + 1, _quill2.default.sources.USER);\n      }\n    }\n    return false;\n  }), _ref3;\n}\n\nfunction handleBackspace(range, context) {\n  if (range.index === 0 || this.quill.getLength() <= 1) return;\n\n  var _quill$getLine11 = this.quill.getLine(range.index),\n      _quill$getLine12 = _slicedToArray(_quill$getLine11, 1),\n      line = _quill$getLine12[0];\n\n  var formats = {};\n  if (context.offset === 0) {\n    var _quill$getLine13 = this.quill.getLine(range.index - 1),\n        _quill$getLine14 = _slicedToArray(_quill$getLine13, 1),\n        prev = _quill$getLine14[0];\n\n    if (prev != null && prev.length() > 1) {\n      var curFormats = line.formats();\n      var prevFormats = this.quill.getFormat(range.index - 1, 1);\n      formats = _op2.default.attributes.diff(curFormats, prevFormats) || {};\n    }\n  }\n  // Check for astral symbols\n  var length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n  this.quill.deleteText(range.index - length, length, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index - length, length, formats, _quill2.default.sources.USER);\n  }\n  this.quill.focus();\n}\n\nfunction handleDelete(range, context) {\n  // Check for astral symbols\n  var length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n  if (range.index >= this.quill.getLength() - length) return;\n  var formats = {},\n      nextLength = 0;\n\n  var _quill$getLine15 = this.quill.getLine(range.index),\n      _quill$getLine16 = _slicedToArray(_quill$getLine15, 1),\n      line = _quill$getLine16[0];\n\n  if (context.offset >= line.length() - 1) {\n    var _quill$getLine17 = this.quill.getLine(range.index + 1),\n        _quill$getLine18 = _slicedToArray(_quill$getLine17, 1),\n        next = _quill$getLine18[0];\n\n    if (next) {\n      var curFormats = line.formats();\n      var nextFormats = this.quill.getFormat(range.index, 1);\n      formats = _op2.default.attributes.diff(curFormats, nextFormats) || {};\n      nextLength = next.length();\n    }\n  }\n  this.quill.deleteText(range.index, length, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index + nextLength - 1, length, formats, _quill2.default.sources.USER);\n  }\n}\n\nfunction handleDeleteRange(range) {\n  var lines = this.quill.getLines(range);\n  var formats = {};\n  if (lines.length > 1) {\n    var firstFormats = lines[0].formats();\n    var lastFormats = lines[lines.length - 1].formats();\n    formats = _op2.default.attributes.diff(lastFormats, firstFormats) || {};\n  }\n  this.quill.deleteText(range, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index, 1, formats, _quill2.default.sources.USER);\n  }\n  this.quill.setSelection(range.index, _quill2.default.sources.SILENT);\n  this.quill.focus();\n}\n\nfunction handleEnter(range, context) {\n  var _this3 = this;\n\n  if (range.length > 0) {\n    this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change\n  }\n  var lineFormats = Object.keys(context.format).reduce(function (lineFormats, format) {\n    if (_parchment2.default.query(format, _parchment2.default.Scope.BLOCK) && !Array.isArray(context.format[format])) {\n      lineFormats[format] = context.format[format];\n    }\n    return lineFormats;\n  }, {});\n  this.quill.insertText(range.index, '\\n', lineFormats, _quill2.default.sources.USER);\n  // Earlier scroll.deleteAt might have messed up our selection,\n  // so insertText's built in selection preservation is not reliable\n  this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n  this.quill.focus();\n  Object.keys(context.format).forEach(function (name) {\n    if (lineFormats[name] != null) return;\n    if (Array.isArray(context.format[name])) return;\n    if (name === 'link') return;\n    _this3.quill.format(name, context.format[name], _quill2.default.sources.USER);\n  });\n}\n\nfunction makeCodeBlockHandler(indent) {\n  return {\n    key: Keyboard.keys.TAB,\n    shiftKey: !indent,\n    format: { 'code-block': true },\n    handler: function handler(range) {\n      var CodeBlock = _parchment2.default.query('code-block');\n      var index = range.index,\n          length = range.length;\n\n      var _quill$scroll$descend = this.quill.scroll.descendant(CodeBlock, index),\n          _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n          block = _quill$scroll$descend2[0],\n          offset = _quill$scroll$descend2[1];\n\n      if (block == null) return;\n      var scrollIndex = this.quill.getIndex(block);\n      var start = block.newlineIndex(offset, true) + 1;\n      var end = block.newlineIndex(scrollIndex + offset + length);\n      var lines = block.domNode.textContent.slice(start, end).split('\\n');\n      offset = 0;\n      lines.forEach(function (line, i) {\n        if (indent) {\n          block.insertAt(start + offset, CodeBlock.TAB);\n          offset += CodeBlock.TAB.length;\n          if (i === 0) {\n            index += CodeBlock.TAB.length;\n          } else {\n            length += CodeBlock.TAB.length;\n          }\n        } else if (line.startsWith(CodeBlock.TAB)) {\n          block.deleteAt(start + offset, CodeBlock.TAB.length);\n          offset -= CodeBlock.TAB.length;\n          if (i === 0) {\n            index -= CodeBlock.TAB.length;\n          } else {\n            length -= CodeBlock.TAB.length;\n          }\n        }\n        offset += line.length + 1;\n      });\n      this.quill.update(_quill2.default.sources.USER);\n      this.quill.setSelection(index, length, _quill2.default.sources.SILENT);\n    }\n  };\n}\n\nfunction makeFormatHandler(format) {\n  return {\n    key: format[0].toUpperCase(),\n    shortKey: true,\n    handler: function handler(range, context) {\n      this.quill.format(format, !context.format[format], _quill2.default.sources.USER);\n    }\n  };\n}\n\nfunction normalize(binding) {\n  if (typeof binding === 'string' || typeof binding === 'number') {\n    return normalize({ key: binding });\n  }\n  if ((typeof binding === 'undefined' ? 'undefined' : _typeof(binding)) === 'object') {\n    binding = (0, _clone2.default)(binding, false);\n  }\n  if (typeof binding.key === 'string') {\n    if (Keyboard.keys[binding.key.toUpperCase()] != null) {\n      binding.key = Keyboard.keys[binding.key.toUpperCase()];\n    } else if (binding.key.length === 1) {\n      binding.key = binding.key.toUpperCase().charCodeAt(0);\n    } else {\n      return null;\n    }\n  }\n  if (binding.shortKey) {\n    binding[SHORTKEY] = binding.shortKey;\n    delete binding.shortKey;\n  }\n  return binding;\n}\n\nexports.default = Keyboard;\nexports.SHORTKEY = SHORTKEY;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Cursor = function (_Parchment$Embed) {\n  _inherits(Cursor, _Parchment$Embed);\n\n  _createClass(Cursor, null, [{\n    key: 'value',\n    value: function value() {\n      return undefined;\n    }\n  }]);\n\n  function Cursor(domNode, selection) {\n    _classCallCheck(this, Cursor);\n\n    var _this = _possibleConstructorReturn(this, (Cursor.__proto__ || Object.getPrototypeOf(Cursor)).call(this, domNode));\n\n    _this.selection = selection;\n    _this.textNode = document.createTextNode(Cursor.CONTENTS);\n    _this.domNode.appendChild(_this.textNode);\n    _this._length = 0;\n    return _this;\n  }\n\n  _createClass(Cursor, [{\n    key: 'detach',\n    value: function detach() {\n      // super.detach() will also clear domNode.__blot\n      if (this.parent != null) this.parent.removeChild(this);\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      if (this._length !== 0) {\n        return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'format', this).call(this, name, value);\n      }\n      var target = this,\n          index = 0;\n      while (target != null && target.statics.scope !== _parchment2.default.Scope.BLOCK_BLOT) {\n        index += target.offset(target.parent);\n        target = target.parent;\n      }\n      if (target != null) {\n        this._length = Cursor.CONTENTS.length;\n        target.optimize();\n        target.formatAt(index, Cursor.CONTENTS.length, name, value);\n        this._length = 0;\n      }\n    }\n  }, {\n    key: 'index',\n    value: function index(node, offset) {\n      if (node === this.textNode) return 0;\n      return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'index', this).call(this, node, offset);\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      return this._length;\n    }\n  }, {\n    key: 'position',\n    value: function position() {\n      return [this.textNode, this.textNode.data.length];\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'remove', this).call(this);\n      this.parent = null;\n    }\n  }, {\n    key: 'restore',\n    value: function restore() {\n      if (this.selection.composing || this.parent == null) return;\n      var textNode = this.textNode;\n      var range = this.selection.getNativeRange();\n      var restoreText = void 0,\n          start = void 0,\n          end = void 0;\n      if (range != null && range.start.node === textNode && range.end.node === textNode) {\n        var _ref = [textNode, range.start.offset, range.end.offset];\n        restoreText = _ref[0];\n        start = _ref[1];\n        end = _ref[2];\n      }\n      // Link format will insert text outside of anchor tag\n      while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n        this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n      }\n      if (this.textNode.data !== Cursor.CONTENTS) {\n        var text = this.textNode.data.split(Cursor.CONTENTS).join('');\n        if (this.next instanceof _text2.default) {\n          restoreText = this.next.domNode;\n          this.next.insertAt(0, text);\n          this.textNode.data = Cursor.CONTENTS;\n        } else {\n          this.textNode.data = text;\n          this.parent.insertBefore(_parchment2.default.create(this.textNode), this);\n          this.textNode = document.createTextNode(Cursor.CONTENTS);\n          this.domNode.appendChild(this.textNode);\n        }\n      }\n      this.remove();\n      if (start != null) {\n        var _map = [start, end].map(function (offset) {\n          return Math.max(0, Math.min(restoreText.data.length, offset - 1));\n        });\n\n        var _map2 = _slicedToArray(_map, 2);\n\n        start = _map2[0];\n        end = _map2[1];\n\n        return {\n          startNode: restoreText,\n          startOffset: start,\n          endNode: restoreText,\n          endOffset: end\n        };\n      }\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations, context) {\n      var _this2 = this;\n\n      if (mutations.some(function (mutation) {\n        return mutation.type === 'characterData' && mutation.target === _this2.textNode;\n      })) {\n        var range = this.restore();\n        if (range) context.range = range;\n      }\n    }\n  }, {\n    key: 'value',\n    value: function value() {\n      return '';\n    }\n  }]);\n\n  return Cursor;\n}(_parchment2.default.Embed);\n\nCursor.blotName = 'cursor';\nCursor.className = 'ql-cursor';\nCursor.tagName = 'span';\nCursor.CONTENTS = '\\uFEFF'; // Zero width no break space\n\n\nexports.default = Cursor;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Container = function (_Parchment$Container) {\n  _inherits(Container, _Parchment$Container);\n\n  function Container() {\n    _classCallCheck(this, Container);\n\n    return _possibleConstructorReturn(this, (Container.__proto__ || Object.getPrototypeOf(Container)).apply(this, arguments));\n  }\n\n  return Container;\n}(_parchment2.default.Container);\n\nContainer.allowedChildren = [_block2.default, _block.BlockEmbed, Container];\n\nexports.default = Container;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ColorStyle = exports.ColorClass = exports.ColorAttributor = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorAttributor = function (_Parchment$Attributor) {\n  _inherits(ColorAttributor, _Parchment$Attributor);\n\n  function ColorAttributor() {\n    _classCallCheck(this, ColorAttributor);\n\n    return _possibleConstructorReturn(this, (ColorAttributor.__proto__ || Object.getPrototypeOf(ColorAttributor)).apply(this, arguments));\n  }\n\n  _createClass(ColorAttributor, [{\n    key: 'value',\n    value: function value(domNode) {\n      var value = _get(ColorAttributor.prototype.__proto__ || Object.getPrototypeOf(ColorAttributor.prototype), 'value', this).call(this, domNode);\n      if (!value.startsWith('rgb(')) return value;\n      value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n      return '#' + value.split(',').map(function (component) {\n        return ('00' + parseInt(component).toString(16)).slice(-2);\n      }).join('');\n    }\n  }]);\n\n  return ColorAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar ColorClass = new _parchment2.default.Attributor.Class('color', 'ql-color', {\n  scope: _parchment2.default.Scope.INLINE\n});\nvar ColorStyle = new ColorAttributor('color', 'color', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nexports.ColorAttributor = ColorAttributor;\nexports.ColorClass = ColorClass;\nexports.ColorStyle = ColorStyle;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sanitize = exports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Link = function (_Inline) {\n  _inherits(Link, _Inline);\n\n  function Link() {\n    _classCallCheck(this, Link);\n\n    return _possibleConstructorReturn(this, (Link.__proto__ || Object.getPrototypeOf(Link)).apply(this, arguments));\n  }\n\n  _createClass(Link, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (name !== this.statics.blotName || !value) return _get(Link.prototype.__proto__ || Object.getPrototypeOf(Link.prototype), 'format', this).call(this, name, value);\n      value = this.constructor.sanitize(value);\n      this.domNode.setAttribute('href', value);\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Link.__proto__ || Object.getPrototypeOf(Link), 'create', this).call(this, value);\n      value = this.sanitize(value);\n      node.setAttribute('href', value);\n      node.setAttribute('rel', 'noopener noreferrer');\n      node.setAttribute('target', '_blank');\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return domNode.getAttribute('href');\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return _sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n    }\n  }]);\n\n  return Link;\n}(_inline2.default);\n\nLink.blotName = 'link';\nLink.tagName = 'A';\nLink.SANITIZED_URL = 'about:blank';\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel'];\n\nfunction _sanitize(url, protocols) {\n  var anchor = document.createElement('a');\n  anchor.href = url;\n  var protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n  return protocols.indexOf(protocol) > -1;\n}\n\nexports.default = Link;\nexports.sanitize = _sanitize;\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _dropdown = __webpack_require__(107);\n\nvar _dropdown2 = _interopRequireDefault(_dropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar optionsCounter = 0;\n\nfunction toggleAriaAttribute(element, attribute) {\n  element.setAttribute(attribute, !(element.getAttribute(attribute) === 'true'));\n}\n\nvar Picker = function () {\n  function Picker(select) {\n    var _this = this;\n\n    _classCallCheck(this, Picker);\n\n    this.select = select;\n    this.container = document.createElement('span');\n    this.buildPicker();\n    this.select.style.display = 'none';\n    this.select.parentNode.insertBefore(this.container, this.select);\n\n    this.label.addEventListener('mousedown', function () {\n      _this.togglePicker();\n    });\n    this.label.addEventListener('keydown', function (event) {\n      switch (event.keyCode) {\n        // Allows the \"Enter\" key to open the picker\n        case _keyboard2.default.keys.ENTER:\n          _this.togglePicker();\n          break;\n\n        // Allows the \"Escape\" key to close the picker\n        case _keyboard2.default.keys.ESCAPE:\n          _this.escape();\n          event.preventDefault();\n          break;\n        default:\n      }\n    });\n    this.select.addEventListener('change', this.update.bind(this));\n  }\n\n  _createClass(Picker, [{\n    key: 'togglePicker',\n    value: function togglePicker() {\n      this.container.classList.toggle('ql-expanded');\n      // Toggle aria-expanded and aria-hidden to make the picker accessible\n      toggleAriaAttribute(this.label, 'aria-expanded');\n      toggleAriaAttribute(this.options, 'aria-hidden');\n    }\n  }, {\n    key: 'buildItem',\n    value: function buildItem(option) {\n      var _this2 = this;\n\n      var item = document.createElement('span');\n      item.tabIndex = '0';\n      item.setAttribute('role', 'button');\n\n      item.classList.add('ql-picker-item');\n      if (option.hasAttribute('value')) {\n        item.setAttribute('data-value', option.getAttribute('value'));\n      }\n      if (option.textContent) {\n        item.setAttribute('data-label', option.textContent);\n      }\n      item.addEventListener('click', function () {\n        _this2.selectItem(item, true);\n      });\n      item.addEventListener('keydown', function (event) {\n        switch (event.keyCode) {\n          // Allows the \"Enter\" key to select an item\n          case _keyboard2.default.keys.ENTER:\n            _this2.selectItem(item, true);\n            event.preventDefault();\n            break;\n\n          // Allows the \"Escape\" key to close the picker\n          case _keyboard2.default.keys.ESCAPE:\n            _this2.escape();\n            event.preventDefault();\n            break;\n          default:\n        }\n      });\n\n      return item;\n    }\n  }, {\n    key: 'buildLabel',\n    value: function buildLabel() {\n      var label = document.createElement('span');\n      label.classList.add('ql-picker-label');\n      label.innerHTML = _dropdown2.default;\n      label.tabIndex = '0';\n      label.setAttribute('role', 'button');\n      label.setAttribute('aria-expanded', 'false');\n      this.container.appendChild(label);\n      return label;\n    }\n  }, {\n    key: 'buildOptions',\n    value: function buildOptions() {\n      var _this3 = this;\n\n      var options = document.createElement('span');\n      options.classList.add('ql-picker-options');\n\n      // Don't want screen readers to read this until options are visible\n      options.setAttribute('aria-hidden', 'true');\n      options.tabIndex = '-1';\n\n      // Need a unique id for aria-controls\n      options.id = 'ql-picker-options-' + optionsCounter;\n      optionsCounter += 1;\n      this.label.setAttribute('aria-controls', options.id);\n\n      this.options = options;\n\n      [].slice.call(this.select.options).forEach(function (option) {\n        var item = _this3.buildItem(option);\n        options.appendChild(item);\n        if (option.selected === true) {\n          _this3.selectItem(item);\n        }\n      });\n      this.container.appendChild(options);\n    }\n  }, {\n    key: 'buildPicker',\n    value: function buildPicker() {\n      var _this4 = this;\n\n      [].slice.call(this.select.attributes).forEach(function (item) {\n        _this4.container.setAttribute(item.name, item.value);\n      });\n      this.container.classList.add('ql-picker');\n      this.label = this.buildLabel();\n      this.buildOptions();\n    }\n  }, {\n    key: 'escape',\n    value: function escape() {\n      var _this5 = this;\n\n      // Close menu and return focus to trigger label\n      this.close();\n      // Need setTimeout for accessibility to ensure that the browser executes\n      // focus on the next process thread and after any DOM content changes\n      setTimeout(function () {\n        return _this5.label.focus();\n      }, 1);\n    }\n  }, {\n    key: 'close',\n    value: function close() {\n      this.container.classList.remove('ql-expanded');\n      this.label.setAttribute('aria-expanded', 'false');\n      this.options.setAttribute('aria-hidden', 'true');\n    }\n  }, {\n    key: 'selectItem',\n    value: function selectItem(item) {\n      var trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var selected = this.container.querySelector('.ql-selected');\n      if (item === selected) return;\n      if (selected != null) {\n        selected.classList.remove('ql-selected');\n      }\n      if (item == null) return;\n      item.classList.add('ql-selected');\n      this.select.selectedIndex = [].indexOf.call(item.parentNode.children, item);\n      if (item.hasAttribute('data-value')) {\n        this.label.setAttribute('data-value', item.getAttribute('data-value'));\n      } else {\n        this.label.removeAttribute('data-value');\n      }\n      if (item.hasAttribute('data-label')) {\n        this.label.setAttribute('data-label', item.getAttribute('data-label'));\n      } else {\n        this.label.removeAttribute('data-label');\n      }\n      if (trigger) {\n        if (typeof Event === 'function') {\n          this.select.dispatchEvent(new Event('change'));\n        } else if ((typeof Event === 'undefined' ? 'undefined' : _typeof(Event)) === 'object') {\n          // IE11\n          var event = document.createEvent('Event');\n          event.initEvent('change', true, true);\n          this.select.dispatchEvent(event);\n        }\n        this.close();\n      }\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var option = void 0;\n      if (this.select.selectedIndex > -1) {\n        var item = this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];\n        option = this.select.options[this.select.selectedIndex];\n        this.selectItem(item);\n      } else {\n        this.selectItem(null);\n      }\n      var isActive = option != null && option !== this.select.querySelector('option[selected]');\n      this.label.classList.toggle('ql-active', isActive);\n    }\n  }]);\n\n  return Picker;\n}();\n\nexports.default = Picker;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _cursor = __webpack_require__(24);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _embed = __webpack_require__(35);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _scroll = __webpack_require__(22);\n\nvar _scroll2 = _interopRequireDefault(_scroll);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _clipboard = __webpack_require__(55);\n\nvar _clipboard2 = _interopRequireDefault(_clipboard);\n\nvar _history = __webpack_require__(42);\n\nvar _history2 = _interopRequireDefault(_history);\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_quill2.default.register({\n  'blots/block': _block2.default,\n  'blots/block/embed': _block.BlockEmbed,\n  'blots/break': _break2.default,\n  'blots/container': _container2.default,\n  'blots/cursor': _cursor2.default,\n  'blots/embed': _embed2.default,\n  'blots/inline': _inline2.default,\n  'blots/scroll': _scroll2.default,\n  'blots/text': _text2.default,\n\n  'modules/clipboard': _clipboard2.default,\n  'modules/history': _history2.default,\n  'modules/keyboard': _keyboard2.default\n});\n\n_parchment2.default.register(_block2.default, _break2.default, _cursor2.default, _inline2.default, _scroll2.default, _text2.default);\n\nexports.default = _quill2.default;\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar ShadowBlot = /** @class */ (function () {\n    function ShadowBlot(domNode) {\n        this.domNode = domNode;\n        // @ts-ignore\n        this.domNode[Registry.DATA_KEY] = { blot: this };\n    }\n    Object.defineProperty(ShadowBlot.prototype, \"statics\", {\n        // Hack for accessing inherited static methods\n        get: function () {\n            return this.constructor;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ShadowBlot.create = function (value) {\n        if (this.tagName == null) {\n            throw new Registry.ParchmentError('Blot definition missing tagName');\n        }\n        var node;\n        if (Array.isArray(this.tagName)) {\n            if (typeof value === 'string') {\n                value = value.toUpperCase();\n                if (parseInt(value).toString() === value) {\n                    value = parseInt(value);\n                }\n            }\n            if (typeof value === 'number') {\n                node = document.createElement(this.tagName[value - 1]);\n            }\n            else if (this.tagName.indexOf(value) > -1) {\n                node = document.createElement(value);\n            }\n            else {\n                node = document.createElement(this.tagName[0]);\n            }\n        }\n        else {\n            node = document.createElement(this.tagName);\n        }\n        if (this.className) {\n            node.classList.add(this.className);\n        }\n        return node;\n    };\n    ShadowBlot.prototype.attach = function () {\n        if (this.parent != null) {\n            this.scroll = this.parent.scroll;\n        }\n    };\n    ShadowBlot.prototype.clone = function () {\n        var domNode = this.domNode.cloneNode(false);\n        return Registry.create(domNode);\n    };\n    ShadowBlot.prototype.detach = function () {\n        if (this.parent != null)\n            this.parent.removeChild(this);\n        // @ts-ignore\n        delete this.domNode[Registry.DATA_KEY];\n    };\n    ShadowBlot.prototype.deleteAt = function (index, length) {\n        var blot = this.isolate(index, length);\n        blot.remove();\n    };\n    ShadowBlot.prototype.formatAt = function (index, length, name, value) {\n        var blot = this.isolate(index, length);\n        if (Registry.query(name, Registry.Scope.BLOT) != null && value) {\n            blot.wrap(name, value);\n        }\n        else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {\n            var parent = Registry.create(this.statics.scope);\n            blot.wrap(parent);\n            parent.format(name, value);\n        }\n    };\n    ShadowBlot.prototype.insertAt = function (index, value, def) {\n        var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n        var ref = this.split(index);\n        this.parent.insertBefore(blot, ref);\n    };\n    ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {\n        if (refBlot === void 0) { refBlot = null; }\n        if (this.parent != null) {\n            this.parent.children.remove(this);\n        }\n        var refDomNode = null;\n        parentBlot.children.insertBefore(this, refBlot);\n        if (refBlot != null) {\n            refDomNode = refBlot.domNode;\n        }\n        if (this.domNode.parentNode != parentBlot.domNode ||\n            this.domNode.nextSibling != refDomNode) {\n            parentBlot.domNode.insertBefore(this.domNode, refDomNode);\n        }\n        this.parent = parentBlot;\n        this.attach();\n    };\n    ShadowBlot.prototype.isolate = function (index, length) {\n        var target = this.split(index);\n        target.split(length);\n        return target;\n    };\n    ShadowBlot.prototype.length = function () {\n        return 1;\n    };\n    ShadowBlot.prototype.offset = function (root) {\n        if (root === void 0) { root = this.parent; }\n        if (this.parent == null || this == root)\n            return 0;\n        return this.parent.children.offset(this) + this.parent.offset(root);\n    };\n    ShadowBlot.prototype.optimize = function (context) {\n        // TODO clean up once we use WeakMap\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY] != null) {\n            // @ts-ignore\n            delete this.domNode[Registry.DATA_KEY].mutations;\n        }\n    };\n    ShadowBlot.prototype.remove = function () {\n        if (this.domNode.parentNode != null) {\n            this.domNode.parentNode.removeChild(this.domNode);\n        }\n        this.detach();\n    };\n    ShadowBlot.prototype.replace = function (target) {\n        if (target.parent == null)\n            return;\n        target.parent.insertBefore(this, target.next);\n        target.remove();\n    };\n    ShadowBlot.prototype.replaceWith = function (name, value) {\n        var replacement = typeof name === 'string' ? Registry.create(name, value) : name;\n        replacement.replace(this);\n        return replacement;\n    };\n    ShadowBlot.prototype.split = function (index, force) {\n        return index === 0 ? this : this.next;\n    };\n    ShadowBlot.prototype.update = function (mutations, context) {\n        // Nothing to do by default\n    };\n    ShadowBlot.prototype.wrap = function (name, value) {\n        var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;\n        if (this.parent != null) {\n            this.parent.insertBefore(wrapper, this.next);\n        }\n        wrapper.appendChild(this);\n        return wrapper;\n    };\n    ShadowBlot.blotName = 'abstract';\n    return ShadowBlot;\n}());\nexports.default = ShadowBlot;\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nvar class_1 = __webpack_require__(32);\nvar style_1 = __webpack_require__(33);\nvar Registry = __webpack_require__(1);\nvar AttributorStore = /** @class */ (function () {\n    function AttributorStore(domNode) {\n        this.attributes = {};\n        this.domNode = domNode;\n        this.build();\n    }\n    AttributorStore.prototype.attribute = function (attribute, value) {\n        // verb\n        if (value) {\n            if (attribute.add(this.domNode, value)) {\n                if (attribute.value(this.domNode) != null) {\n                    this.attributes[attribute.attrName] = attribute;\n                }\n                else {\n                    delete this.attributes[attribute.attrName];\n                }\n            }\n        }\n        else {\n            attribute.remove(this.domNode);\n            delete this.attributes[attribute.attrName];\n        }\n    };\n    AttributorStore.prototype.build = function () {\n        var _this = this;\n        this.attributes = {};\n        var attributes = attributor_1.default.keys(this.domNode);\n        var classes = class_1.default.keys(this.domNode);\n        var styles = style_1.default.keys(this.domNode);\n        attributes\n            .concat(classes)\n            .concat(styles)\n            .forEach(function (name) {\n            var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);\n            if (attr instanceof attributor_1.default) {\n                _this.attributes[attr.attrName] = attr;\n            }\n        });\n    };\n    AttributorStore.prototype.copy = function (target) {\n        var _this = this;\n        Object.keys(this.attributes).forEach(function (key) {\n            var value = _this.attributes[key].value(_this.domNode);\n            target.format(key, value);\n        });\n    };\n    AttributorStore.prototype.move = function (target) {\n        var _this = this;\n        this.copy(target);\n        Object.keys(this.attributes).forEach(function (key) {\n            _this.attributes[key].remove(_this.domNode);\n        });\n        this.attributes = {};\n    };\n    AttributorStore.prototype.values = function () {\n        var _this = this;\n        return Object.keys(this.attributes).reduce(function (attributes, name) {\n            attributes[name] = _this.attributes[name].value(_this.domNode);\n            return attributes;\n        }, {});\n    };\n    return AttributorStore;\n}());\nexports.default = AttributorStore;\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nfunction match(node, prefix) {\n    var className = node.getAttribute('class') || '';\n    return className.split(/\\s+/).filter(function (name) {\n        return name.indexOf(prefix + \"-\") === 0;\n    });\n}\nvar ClassAttributor = /** @class */ (function (_super) {\n    __extends(ClassAttributor, _super);\n    function ClassAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ClassAttributor.keys = function (node) {\n        return (node.getAttribute('class') || '').split(/\\s+/).map(function (name) {\n            return name\n                .split('-')\n                .slice(0, -1)\n                .join('-');\n        });\n    };\n    ClassAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        this.remove(node);\n        node.classList.add(this.keyName + \"-\" + value);\n        return true;\n    };\n    ClassAttributor.prototype.remove = function (node) {\n        var matches = match(node, this.keyName);\n        matches.forEach(function (name) {\n            node.classList.remove(name);\n        });\n        if (node.classList.length === 0) {\n            node.removeAttribute('class');\n        }\n    };\n    ClassAttributor.prototype.value = function (node) {\n        var result = match(node, this.keyName)[0] || '';\n        var value = result.slice(this.keyName.length + 1); // +1 for hyphen\n        return this.canAdd(node, value) ? value : '';\n    };\n    return ClassAttributor;\n}(attributor_1.default));\nexports.default = ClassAttributor;\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nfunction camelize(name) {\n    var parts = name.split('-');\n    var rest = parts\n        .slice(1)\n        .map(function (part) {\n        return part[0].toUpperCase() + part.slice(1);\n    })\n        .join('');\n    return parts[0] + rest;\n}\nvar StyleAttributor = /** @class */ (function (_super) {\n    __extends(StyleAttributor, _super);\n    function StyleAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    StyleAttributor.keys = function (node) {\n        return (node.getAttribute('style') || '').split(';').map(function (value) {\n            var arr = value.split(':');\n            return arr[0].trim();\n        });\n    };\n    StyleAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = value;\n        return true;\n    };\n    StyleAttributor.prototype.remove = function (node) {\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = '';\n        if (!node.getAttribute('style')) {\n            node.removeAttribute('style');\n        }\n    };\n    StyleAttributor.prototype.value = function (node) {\n        // @ts-ignore\n        var value = node.style[camelize(this.keyName)];\n        return this.canAdd(node, value) ? value : '';\n    };\n    return StyleAttributor;\n}(attributor_1.default));\nexports.default = StyleAttributor;\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Theme = function () {\n  function Theme(quill, options) {\n    _classCallCheck(this, Theme);\n\n    this.quill = quill;\n    this.options = options;\n    this.modules = {};\n  }\n\n  _createClass(Theme, [{\n    key: 'init',\n    value: function init() {\n      var _this = this;\n\n      Object.keys(this.options.modules).forEach(function (name) {\n        if (_this.modules[name] == null) {\n          _this.addModule(name);\n        }\n      });\n    }\n  }, {\n    key: 'addModule',\n    value: function addModule(name) {\n      var moduleClass = this.quill.constructor.import('modules/' + name);\n      this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});\n      return this.modules[name];\n    }\n  }]);\n\n  return Theme;\n}();\n\nTheme.DEFAULTS = {\n  modules: {}\n};\nTheme.themes = {\n  'default': Theme\n};\n\nexports.default = Theme;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar GUARD_TEXT = '\\uFEFF';\n\nvar Embed = function (_Parchment$Embed) {\n  _inherits(Embed, _Parchment$Embed);\n\n  function Embed(node) {\n    _classCallCheck(this, Embed);\n\n    var _this = _possibleConstructorReturn(this, (Embed.__proto__ || Object.getPrototypeOf(Embed)).call(this, node));\n\n    _this.contentNode = document.createElement('span');\n    _this.contentNode.setAttribute('contenteditable', false);\n    [].slice.call(_this.domNode.childNodes).forEach(function (childNode) {\n      _this.contentNode.appendChild(childNode);\n    });\n    _this.leftGuard = document.createTextNode(GUARD_TEXT);\n    _this.rightGuard = document.createTextNode(GUARD_TEXT);\n    _this.domNode.appendChild(_this.leftGuard);\n    _this.domNode.appendChild(_this.contentNode);\n    _this.domNode.appendChild(_this.rightGuard);\n    return _this;\n  }\n\n  _createClass(Embed, [{\n    key: 'index',\n    value: function index(node, offset) {\n      if (node === this.leftGuard) return 0;\n      if (node === this.rightGuard) return 1;\n      return _get(Embed.prototype.__proto__ || Object.getPrototypeOf(Embed.prototype), 'index', this).call(this, node, offset);\n    }\n  }, {\n    key: 'restore',\n    value: function restore(node) {\n      var range = void 0,\n          textNode = void 0;\n      var text = node.data.split(GUARD_TEXT).join('');\n      if (node === this.leftGuard) {\n        if (this.prev instanceof _text2.default) {\n          var prevLength = this.prev.length();\n          this.prev.insertAt(prevLength, text);\n          range = {\n            startNode: this.prev.domNode,\n            startOffset: prevLength + text.length\n          };\n        } else {\n          textNode = document.createTextNode(text);\n          this.parent.insertBefore(_parchment2.default.create(textNode), this);\n          range = {\n            startNode: textNode,\n            startOffset: text.length\n          };\n        }\n      } else if (node === this.rightGuard) {\n        if (this.next instanceof _text2.default) {\n          this.next.insertAt(0, text);\n          range = {\n            startNode: this.next.domNode,\n            startOffset: text.length\n          };\n        } else {\n          textNode = document.createTextNode(text);\n          this.parent.insertBefore(_parchment2.default.create(textNode), this.next);\n          range = {\n            startNode: textNode,\n            startOffset: text.length\n          };\n        }\n      }\n      node.data = GUARD_TEXT;\n      return range;\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations, context) {\n      var _this2 = this;\n\n      mutations.forEach(function (mutation) {\n        if (mutation.type === 'characterData' && (mutation.target === _this2.leftGuard || mutation.target === _this2.rightGuard)) {\n          var range = _this2.restore(mutation.target);\n          if (range) context.range = range;\n        }\n      });\n    }\n  }]);\n\n  return Embed;\n}(_parchment2.default.Embed);\n\nexports.default = Embed;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AlignStyle = exports.AlignClass = exports.AlignAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: ['right', 'center', 'justify']\n};\n\nvar AlignAttribute = new _parchment2.default.Attributor.Attribute('align', 'align', config);\nvar AlignClass = new _parchment2.default.Attributor.Class('align', 'ql-align', config);\nvar AlignStyle = new _parchment2.default.Attributor.Style('align', 'text-align', config);\n\nexports.AlignAttribute = AlignAttribute;\nexports.AlignClass = AlignClass;\nexports.AlignStyle = AlignStyle;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.BackgroundStyle = exports.BackgroundClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _color = __webpack_require__(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar BackgroundClass = new _parchment2.default.Attributor.Class('background', 'ql-bg', {\n  scope: _parchment2.default.Scope.INLINE\n});\nvar BackgroundStyle = new _color.ColorAttributor('background', 'background-color', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nexports.BackgroundClass = BackgroundClass;\nexports.BackgroundStyle = BackgroundStyle;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DirectionStyle = exports.DirectionClass = exports.DirectionAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: ['rtl']\n};\n\nvar DirectionAttribute = new _parchment2.default.Attributor.Attribute('direction', 'dir', config);\nvar DirectionClass = new _parchment2.default.Attributor.Class('direction', 'ql-direction', config);\nvar DirectionStyle = new _parchment2.default.Attributor.Style('direction', 'direction', config);\n\nexports.DirectionAttribute = DirectionAttribute;\nexports.DirectionClass = DirectionClass;\nexports.DirectionStyle = DirectionStyle;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.FontClass = exports.FontStyle = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar config = {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['serif', 'monospace']\n};\n\nvar FontClass = new _parchment2.default.Attributor.Class('font', 'ql-font', config);\n\nvar FontStyleAttributor = function (_Parchment$Attributor) {\n  _inherits(FontStyleAttributor, _Parchment$Attributor);\n\n  function FontStyleAttributor() {\n    _classCallCheck(this, FontStyleAttributor);\n\n    return _possibleConstructorReturn(this, (FontStyleAttributor.__proto__ || Object.getPrototypeOf(FontStyleAttributor)).apply(this, arguments));\n  }\n\n  _createClass(FontStyleAttributor, [{\n    key: 'value',\n    value: function value(node) {\n      return _get(FontStyleAttributor.prototype.__proto__ || Object.getPrototypeOf(FontStyleAttributor.prototype), 'value', this).call(this, node).replace(/[\"']/g, '');\n    }\n  }]);\n\n  return FontStyleAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexports.FontStyle = FontStyle;\nexports.FontClass = FontClass;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SizeStyle = exports.SizeClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SizeClass = new _parchment2.default.Attributor.Class('size', 'ql-size', {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['small', 'large', 'huge']\n});\nvar SizeStyle = new _parchment2.default.Attributor.Style('size', 'font-size', {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['10px', '18px', '32px']\n});\n\nexports.SizeClass = SizeClass;\nexports.SizeStyle = SizeStyle;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n  'align': {\n    '': __webpack_require__(76),\n    'center': __webpack_require__(77),\n    'right': __webpack_require__(78),\n    'justify': __webpack_require__(79)\n  },\n  'background': __webpack_require__(80),\n  'blockquote': __webpack_require__(81),\n  'bold': __webpack_require__(82),\n  'clean': __webpack_require__(83),\n  'code': __webpack_require__(58),\n  'code-block': __webpack_require__(58),\n  'color': __webpack_require__(84),\n  'direction': {\n    '': __webpack_require__(85),\n    'rtl': __webpack_require__(86)\n  },\n  'float': {\n    'center': __webpack_require__(87),\n    'full': __webpack_require__(88),\n    'left': __webpack_require__(89),\n    'right': __webpack_require__(90)\n  },\n  'formula': __webpack_require__(91),\n  'header': {\n    '1': __webpack_require__(92),\n    '2': __webpack_require__(93)\n  },\n  'italic': __webpack_require__(94),\n  'image': __webpack_require__(95),\n  'indent': {\n    '+1': __webpack_require__(96),\n    '-1': __webpack_require__(97)\n  },\n  'link': __webpack_require__(98),\n  'list': {\n    'ordered': __webpack_require__(99),\n    'bullet': __webpack_require__(100),\n    'check': __webpack_require__(101)\n  },\n  'script': {\n    'sub': __webpack_require__(102),\n    'super': __webpack_require__(103)\n  },\n  'strike': __webpack_require__(104),\n  'underline': __webpack_require__(105),\n  'video': __webpack_require__(106)\n};\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getLastChangeIndex = exports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar History = function (_Module) {\n  _inherits(History, _Module);\n\n  function History(quill, options) {\n    _classCallCheck(this, History);\n\n    var _this = _possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).call(this, quill, options));\n\n    _this.lastRecorded = 0;\n    _this.ignoreChange = false;\n    _this.clear();\n    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (eventName, delta, oldDelta, source) {\n      if (eventName !== _quill2.default.events.TEXT_CHANGE || _this.ignoreChange) return;\n      if (!_this.options.userOnly || source === _quill2.default.sources.USER) {\n        _this.record(delta, oldDelta);\n      } else {\n        _this.transform(delta);\n      }\n    });\n    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, _this.undo.bind(_this));\n    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, _this.redo.bind(_this));\n    if (/Win/i.test(navigator.platform)) {\n      _this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, _this.redo.bind(_this));\n    }\n    return _this;\n  }\n\n  _createClass(History, [{\n    key: 'change',\n    value: function change(source, dest) {\n      if (this.stack[source].length === 0) return;\n      var delta = this.stack[source].pop();\n      this.stack[dest].push(delta);\n      this.lastRecorded = 0;\n      this.ignoreChange = true;\n      this.quill.updateContents(delta[source], _quill2.default.sources.USER);\n      this.ignoreChange = false;\n      var index = getLastChangeIndex(delta[source]);\n      this.quill.setSelection(index);\n    }\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.stack = { undo: [], redo: [] };\n    }\n  }, {\n    key: 'cutoff',\n    value: function cutoff() {\n      this.lastRecorded = 0;\n    }\n  }, {\n    key: 'record',\n    value: function record(changeDelta, oldDelta) {\n      if (changeDelta.ops.length === 0) return;\n      this.stack.redo = [];\n      var undoDelta = this.quill.getContents().diff(oldDelta);\n      var timestamp = Date.now();\n      if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n        var delta = this.stack.undo.pop();\n        undoDelta = undoDelta.compose(delta.undo);\n        changeDelta = delta.redo.compose(changeDelta);\n      } else {\n        this.lastRecorded = timestamp;\n      }\n      this.stack.undo.push({\n        redo: changeDelta,\n        undo: undoDelta\n      });\n      if (this.stack.undo.length > this.options.maxStack) {\n        this.stack.undo.shift();\n      }\n    }\n  }, {\n    key: 'redo',\n    value: function redo() {\n      this.change('redo', 'undo');\n    }\n  }, {\n    key: 'transform',\n    value: function transform(delta) {\n      this.stack.undo.forEach(function (change) {\n        change.undo = delta.transform(change.undo, true);\n        change.redo = delta.transform(change.redo, true);\n      });\n      this.stack.redo.forEach(function (change) {\n        change.undo = delta.transform(change.undo, true);\n        change.redo = delta.transform(change.redo, true);\n      });\n    }\n  }, {\n    key: 'undo',\n    value: function undo() {\n      this.change('undo', 'redo');\n    }\n  }]);\n\n  return History;\n}(_module2.default);\n\nHistory.DEFAULTS = {\n  delay: 1000,\n  maxStack: 100,\n  userOnly: false\n};\n\nfunction endsWithNewlineChange(delta) {\n  var lastOp = delta.ops[delta.ops.length - 1];\n  if (lastOp == null) return false;\n  if (lastOp.insert != null) {\n    return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n  }\n  if (lastOp.attributes != null) {\n    return Object.keys(lastOp.attributes).some(function (attr) {\n      return _parchment2.default.query(attr, _parchment2.default.Scope.BLOCK) != null;\n    });\n  }\n  return false;\n}\n\nfunction getLastChangeIndex(delta) {\n  var deleteLength = delta.reduce(function (length, op) {\n    length += op.delete || 0;\n    return length;\n  }, 0);\n  var changeIndex = delta.length() - deleteLength;\n  if (endsWithNewlineChange(delta)) {\n    changeIndex -= 1;\n  }\n  return changeIndex;\n}\n\nexports.default = History;\nexports.getLastChangeIndex = getLastChangeIndex;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BaseTooltip = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _theme = __webpack_require__(34);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nvar _colorPicker = __webpack_require__(59);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(60);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _tooltip = __webpack_require__(61);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ALIGNS = [false, 'center', 'right', 'justify'];\n\nvar COLORS = [\"#000000\", \"#e60000\", \"#ff9900\", \"#ffff00\", \"#008a00\", \"#0066cc\", \"#9933ff\", \"#ffffff\", \"#facccc\", \"#ffebcc\", \"#ffffcc\", \"#cce8cc\", \"#cce0f5\", \"#ebd6ff\", \"#bbbbbb\", \"#f06666\", \"#ffc266\", \"#ffff66\", \"#66b966\", \"#66a3e0\", \"#c285ff\", \"#888888\", \"#a10000\", \"#b26b00\", \"#b2b200\", \"#006100\", \"#0047b2\", \"#6b24b2\", \"#444444\", \"#5c0000\", \"#663d00\", \"#666600\", \"#003700\", \"#002966\", \"#3d1466\"];\n\nvar FONTS = [false, 'serif', 'monospace'];\n\nvar HEADERS = ['1', '2', '3', false];\n\nvar SIZES = ['small', false, 'large', 'huge'];\n\nvar BaseTheme = function (_Theme) {\n  _inherits(BaseTheme, _Theme);\n\n  function BaseTheme(quill, options) {\n    _classCallCheck(this, BaseTheme);\n\n    var _this = _possibleConstructorReturn(this, (BaseTheme.__proto__ || Object.getPrototypeOf(BaseTheme)).call(this, quill, options));\n\n    var listener = function listener(e) {\n      if (!document.body.contains(quill.root)) {\n        return document.body.removeEventListener('click', listener);\n      }\n      if (_this.tooltip != null && !_this.tooltip.root.contains(e.target) && document.activeElement !== _this.tooltip.textbox && !_this.quill.hasFocus()) {\n        _this.tooltip.hide();\n      }\n      if (_this.pickers != null) {\n        _this.pickers.forEach(function (picker) {\n          if (!picker.container.contains(e.target)) {\n            picker.close();\n          }\n        });\n      }\n    };\n    quill.emitter.listenDOM('click', document.body, listener);\n    return _this;\n  }\n\n  _createClass(BaseTheme, [{\n    key: 'addModule',\n    value: function addModule(name) {\n      var module = _get(BaseTheme.prototype.__proto__ || Object.getPrototypeOf(BaseTheme.prototype), 'addModule', this).call(this, name);\n      if (name === 'toolbar') {\n        this.extendToolbar(module);\n      }\n      return module;\n    }\n  }, {\n    key: 'buildButtons',\n    value: function buildButtons(buttons, icons) {\n      buttons.forEach(function (button) {\n        var className = button.getAttribute('class') || '';\n        className.split(/\\s+/).forEach(function (name) {\n          if (!name.startsWith('ql-')) return;\n          name = name.slice('ql-'.length);\n          if (icons[name] == null) return;\n          if (name === 'direction') {\n            button.innerHTML = icons[name][''] + icons[name]['rtl'];\n          } else if (typeof icons[name] === 'string') {\n            button.innerHTML = icons[name];\n          } else {\n            var value = button.value || '';\n            if (value != null && icons[name][value]) {\n              button.innerHTML = icons[name][value];\n            }\n          }\n        });\n      });\n    }\n  }, {\n    key: 'buildPickers',\n    value: function buildPickers(selects, icons) {\n      var _this2 = this;\n\n      this.pickers = selects.map(function (select) {\n        if (select.classList.contains('ql-align')) {\n          if (select.querySelector('option') == null) {\n            fillSelect(select, ALIGNS);\n          }\n          return new _iconPicker2.default(select, icons.align);\n        } else if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n          var format = select.classList.contains('ql-background') ? 'background' : 'color';\n          if (select.querySelector('option') == null) {\n            fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');\n          }\n          return new _colorPicker2.default(select, icons[format]);\n        } else {\n          if (select.querySelector('option') == null) {\n            if (select.classList.contains('ql-font')) {\n              fillSelect(select, FONTS);\n            } else if (select.classList.contains('ql-header')) {\n              fillSelect(select, HEADERS);\n            } else if (select.classList.contains('ql-size')) {\n              fillSelect(select, SIZES);\n            }\n          }\n          return new _picker2.default(select);\n        }\n      });\n      var update = function update() {\n        _this2.pickers.forEach(function (picker) {\n          picker.update();\n        });\n      };\n      this.quill.on(_emitter2.default.events.EDITOR_CHANGE, update);\n    }\n  }]);\n\n  return BaseTheme;\n}(_theme2.default);\n\nBaseTheme.DEFAULTS = (0, _extend2.default)(true, {}, _theme2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        formula: function formula() {\n          this.quill.theme.tooltip.edit('formula');\n        },\n        image: function image() {\n          var _this3 = this;\n\n          var fileInput = this.container.querySelector('input.ql-image[type=file]');\n          if (fileInput == null) {\n            fileInput = document.createElement('input');\n            fileInput.setAttribute('type', 'file');\n            fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\n            fileInput.classList.add('ql-image');\n            fileInput.addEventListener('change', function () {\n              if (fileInput.files != null && fileInput.files[0] != null) {\n                var reader = new FileReader();\n                reader.onload = function (e) {\n                  var range = _this3.quill.getSelection(true);\n                  _this3.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert({ image: e.target.result }), _emitter2.default.sources.USER);\n                  _this3.quill.setSelection(range.index + 1, _emitter2.default.sources.SILENT);\n                  fileInput.value = \"\";\n                };\n                reader.readAsDataURL(fileInput.files[0]);\n              }\n            });\n            this.container.appendChild(fileInput);\n          }\n          fileInput.click();\n        },\n        video: function video() {\n          this.quill.theme.tooltip.edit('video');\n        }\n      }\n    }\n  }\n});\n\nvar BaseTooltip = function (_Tooltip) {\n  _inherits(BaseTooltip, _Tooltip);\n\n  function BaseTooltip(quill, boundsContainer) {\n    _classCallCheck(this, BaseTooltip);\n\n    var _this4 = _possibleConstructorReturn(this, (BaseTooltip.__proto__ || Object.getPrototypeOf(BaseTooltip)).call(this, quill, boundsContainer));\n\n    _this4.textbox = _this4.root.querySelector('input[type=\"text\"]');\n    _this4.listen();\n    return _this4;\n  }\n\n  _createClass(BaseTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this5 = this;\n\n      this.textbox.addEventListener('keydown', function (event) {\n        if (_keyboard2.default.match(event, 'enter')) {\n          _this5.save();\n          event.preventDefault();\n        } else if (_keyboard2.default.match(event, 'escape')) {\n          _this5.cancel();\n          event.preventDefault();\n        }\n      });\n    }\n  }, {\n    key: 'cancel',\n    value: function cancel() {\n      this.hide();\n    }\n  }, {\n    key: 'edit',\n    value: function edit() {\n      var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'link';\n      var preview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      this.root.classList.remove('ql-hidden');\n      this.root.classList.add('ql-editing');\n      if (preview != null) {\n        this.textbox.value = preview;\n      } else if (mode !== this.root.getAttribute('data-mode')) {\n        this.textbox.value = '';\n      }\n      this.position(this.quill.getBounds(this.quill.selection.savedRange));\n      this.textbox.select();\n      this.textbox.setAttribute('placeholder', this.textbox.getAttribute('data-' + mode) || '');\n      this.root.setAttribute('data-mode', mode);\n    }\n  }, {\n    key: 'restoreFocus',\n    value: function restoreFocus() {\n      var scrollTop = this.quill.scrollingContainer.scrollTop;\n      this.quill.focus();\n      this.quill.scrollingContainer.scrollTop = scrollTop;\n    }\n  }, {\n    key: 'save',\n    value: function save() {\n      var value = this.textbox.value;\n      switch (this.root.getAttribute('data-mode')) {\n        case 'link':\n          {\n            var scrollTop = this.quill.root.scrollTop;\n            if (this.linkRange) {\n              this.quill.formatText(this.linkRange, 'link', value, _emitter2.default.sources.USER);\n              delete this.linkRange;\n            } else {\n              this.restoreFocus();\n              this.quill.format('link', value, _emitter2.default.sources.USER);\n            }\n            this.quill.root.scrollTop = scrollTop;\n            break;\n          }\n        case 'video':\n          {\n            value = extractVideoUrl(value);\n          } // eslint-disable-next-line no-fallthrough\n        case 'formula':\n          {\n            if (!value) break;\n            var range = this.quill.getSelection(true);\n            if (range != null) {\n              var index = range.index + range.length;\n              this.quill.insertEmbed(index, this.root.getAttribute('data-mode'), value, _emitter2.default.sources.USER);\n              if (this.root.getAttribute('data-mode') === 'formula') {\n                this.quill.insertText(index + 1, ' ', _emitter2.default.sources.USER);\n              }\n              this.quill.setSelection(index + 2, _emitter2.default.sources.USER);\n            }\n            break;\n          }\n        default:\n      }\n      this.textbox.value = '';\n      this.hide();\n    }\n  }]);\n\n  return BaseTooltip;\n}(_tooltip2.default);\n\nfunction extractVideoUrl(url) {\n  var match = url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n  if (match) {\n    return (match[1] || 'https') + '://www.youtube.com/embed/' + match[2] + '?showinfo=0';\n  }\n  if (match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {\n    // eslint-disable-line no-cond-assign\n    return (match[1] || 'https') + '://player.vimeo.com/video/' + match[2] + '/';\n  }\n  return url;\n}\n\nfunction fillSelect(select, values) {\n  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  values.forEach(function (value) {\n    var option = document.createElement('option');\n    if (value === defaultValue) {\n      option.setAttribute('selected', 'selected');\n    } else {\n      option.setAttribute('value', value);\n    }\n    select.appendChild(option);\n  });\n}\n\nexports.BaseTooltip = BaseTooltip;\nexports.default = BaseTheme;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedList = /** @class */ (function () {\n    function LinkedList() {\n        this.head = this.tail = null;\n        this.length = 0;\n    }\n    LinkedList.prototype.append = function () {\n        var nodes = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            nodes[_i] = arguments[_i];\n        }\n        this.insertBefore(nodes[0], null);\n        if (nodes.length > 1) {\n            this.append.apply(this, nodes.slice(1));\n        }\n    };\n    LinkedList.prototype.contains = function (node) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            if (cur === node)\n                return true;\n        }\n        return false;\n    };\n    LinkedList.prototype.insertBefore = function (node, refNode) {\n        if (!node)\n            return;\n        node.next = refNode;\n        if (refNode != null) {\n            node.prev = refNode.prev;\n            if (refNode.prev != null) {\n                refNode.prev.next = node;\n            }\n            refNode.prev = node;\n            if (refNode === this.head) {\n                this.head = node;\n            }\n        }\n        else if (this.tail != null) {\n            this.tail.next = node;\n            node.prev = this.tail;\n            this.tail = node;\n        }\n        else {\n            node.prev = null;\n            this.head = this.tail = node;\n        }\n        this.length += 1;\n    };\n    LinkedList.prototype.offset = function (target) {\n        var index = 0, cur = this.head;\n        while (cur != null) {\n            if (cur === target)\n                return index;\n            index += cur.length();\n            cur = cur.next;\n        }\n        return -1;\n    };\n    LinkedList.prototype.remove = function (node) {\n        if (!this.contains(node))\n            return;\n        if (node.prev != null)\n            node.prev.next = node.next;\n        if (node.next != null)\n            node.next.prev = node.prev;\n        if (node === this.head)\n            this.head = node.next;\n        if (node === this.tail)\n            this.tail = node.prev;\n        this.length -= 1;\n    };\n    LinkedList.prototype.iterator = function (curNode) {\n        if (curNode === void 0) { curNode = this.head; }\n        // TODO use yield when we can\n        return function () {\n            var ret = curNode;\n            if (curNode != null)\n                curNode = curNode.next;\n            return ret;\n        };\n    };\n    LinkedList.prototype.find = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            var length = cur.length();\n            if (index < length ||\n                (inclusive && index === length && (cur.next == null || cur.next.length() !== 0))) {\n                return [cur, index];\n            }\n            index -= length;\n        }\n        return [null, 0];\n    };\n    LinkedList.prototype.forEach = function (callback) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            callback(cur);\n        }\n    };\n    LinkedList.prototype.forEachAt = function (index, length, callback) {\n        if (length <= 0)\n            return;\n        var _a = this.find(index), startNode = _a[0], offset = _a[1];\n        var cur, curIndex = index - offset, next = this.iterator(startNode);\n        while ((cur = next()) && curIndex < index + length) {\n            var curLength = cur.length();\n            if (index > curIndex) {\n                callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));\n            }\n            else {\n                callback(cur, 0, Math.min(curLength, index + length - curIndex));\n            }\n            curIndex += curLength;\n        }\n    };\n    LinkedList.prototype.map = function (callback) {\n        return this.reduce(function (memo, cur) {\n            memo.push(callback(cur));\n            return memo;\n        }, []);\n    };\n    LinkedList.prototype.reduce = function (callback, memo) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            memo = callback(memo, cur);\n        }\n        return memo;\n    };\n    return LinkedList;\n}());\nexports.default = LinkedList;\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar OBSERVER_CONFIG = {\n    attributes: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true,\n};\nvar MAX_OPTIMIZE_ITERATIONS = 100;\nvar ScrollBlot = /** @class */ (function (_super) {\n    __extends(ScrollBlot, _super);\n    function ScrollBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.scroll = _this;\n        _this.observer = new MutationObserver(function (mutations) {\n            _this.update(mutations);\n        });\n        _this.observer.observe(_this.domNode, OBSERVER_CONFIG);\n        _this.attach();\n        return _this;\n    }\n    ScrollBlot.prototype.detach = function () {\n        _super.prototype.detach.call(this);\n        this.observer.disconnect();\n    };\n    ScrollBlot.prototype.deleteAt = function (index, length) {\n        this.update();\n        if (index === 0 && length === this.length()) {\n            this.children.forEach(function (child) {\n                child.remove();\n            });\n        }\n        else {\n            _super.prototype.deleteAt.call(this, index, length);\n        }\n    };\n    ScrollBlot.prototype.formatAt = function (index, length, name, value) {\n        this.update();\n        _super.prototype.formatAt.call(this, index, length, name, value);\n    };\n    ScrollBlot.prototype.insertAt = function (index, value, def) {\n        this.update();\n        _super.prototype.insertAt.call(this, index, value, def);\n    };\n    ScrollBlot.prototype.optimize = function (mutations, context) {\n        var _this = this;\n        if (mutations === void 0) { mutations = []; }\n        if (context === void 0) { context = {}; }\n        _super.prototype.optimize.call(this, context);\n        // We must modify mutations directly, cannot make copy and then modify\n        var records = [].slice.call(this.observer.takeRecords());\n        // Array.push currently seems to be implemented by a non-tail recursive function\n        // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n        while (records.length > 0)\n            mutations.push(records.pop());\n        // TODO use WeakMap\n        var mark = function (blot, markParent) {\n            if (markParent === void 0) { markParent = true; }\n            if (blot == null || blot === _this)\n                return;\n            if (blot.domNode.parentNode == null)\n                return;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [];\n            }\n            if (markParent)\n                mark(blot.parent);\n        };\n        var optimize = function (blot) {\n            // Post-order traversal\n            if (\n            // @ts-ignore\n            blot.domNode[Registry.DATA_KEY] == null ||\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations == null) {\n                return;\n            }\n            if (blot instanceof container_1.default) {\n                blot.children.forEach(optimize);\n            }\n            blot.optimize(context);\n        };\n        var remaining = mutations;\n        for (var i = 0; remaining.length > 0; i += 1) {\n            if (i >= MAX_OPTIMIZE_ITERATIONS) {\n                throw new Error('[Parchment] Maximum optimize iterations reached');\n            }\n            remaining.forEach(function (mutation) {\n                var blot = Registry.find(mutation.target, true);\n                if (blot == null)\n                    return;\n                if (blot.domNode === mutation.target) {\n                    if (mutation.type === 'childList') {\n                        mark(Registry.find(mutation.previousSibling, false));\n                        [].forEach.call(mutation.addedNodes, function (node) {\n                            var child = Registry.find(node, false);\n                            mark(child, false);\n                            if (child instanceof container_1.default) {\n                                child.children.forEach(function (grandChild) {\n                                    mark(grandChild, false);\n                                });\n                            }\n                        });\n                    }\n                    else if (mutation.type === 'attributes') {\n                        mark(blot.prev);\n                    }\n                }\n                mark(blot);\n            });\n            this.children.forEach(optimize);\n            remaining = [].slice.call(this.observer.takeRecords());\n            records = remaining.slice();\n            while (records.length > 0)\n                mutations.push(records.pop());\n        }\n    };\n    ScrollBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (context === void 0) { context = {}; }\n        mutations = mutations || this.observer.takeRecords();\n        // TODO use WeakMap\n        mutations\n            .map(function (mutation) {\n            var blot = Registry.find(mutation.target, true);\n            if (blot == null)\n                return null;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [mutation];\n                return blot;\n            }\n            else {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations.push(mutation);\n                return null;\n            }\n        })\n            .forEach(function (blot) {\n            if (blot == null ||\n                blot === _this ||\n                //@ts-ignore\n                blot.domNode[Registry.DATA_KEY] == null)\n                return;\n            // @ts-ignore\n            blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);\n        });\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY].mutations != null) {\n            // @ts-ignore\n            _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);\n        }\n        this.optimize(mutations, context);\n    };\n    ScrollBlot.blotName = 'scroll';\n    ScrollBlot.defaultChild = 'block';\n    ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;\n    ScrollBlot.tagName = 'DIV';\n    return ScrollBlot;\n}(container_1.default));\nexports.default = ScrollBlot;\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\n// Shallow object comparison\nfunction isEqual(obj1, obj2) {\n    if (Object.keys(obj1).length !== Object.keys(obj2).length)\n        return false;\n    // @ts-ignore\n    for (var prop in obj1) {\n        // @ts-ignore\n        if (obj1[prop] !== obj2[prop])\n            return false;\n    }\n    return true;\n}\nvar InlineBlot = /** @class */ (function (_super) {\n    __extends(InlineBlot, _super);\n    function InlineBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    InlineBlot.formats = function (domNode) {\n        if (domNode.tagName === InlineBlot.tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    InlineBlot.prototype.format = function (name, value) {\n        var _this = this;\n        if (name === this.statics.blotName && !value) {\n            this.children.forEach(function (child) {\n                if (!(child instanceof format_1.default)) {\n                    child = child.wrap(InlineBlot.blotName, true);\n                }\n                _this.attributes.copy(child);\n            });\n            this.unwrap();\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    InlineBlot.prototype.formatAt = function (index, length, name, value) {\n        if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {\n            var blot = this.isolate(index, length);\n            blot.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    InlineBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        var formats = this.formats();\n        if (Object.keys(formats).length === 0) {\n            return this.unwrap(); // unformatted span\n        }\n        var next = this.next;\n        if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {\n            next.moveChildren(this);\n            next.remove();\n        }\n    };\n    InlineBlot.blotName = 'inline';\n    InlineBlot.scope = Registry.Scope.INLINE_BLOT;\n    InlineBlot.tagName = 'SPAN';\n    return InlineBlot;\n}(format_1.default));\nexports.default = InlineBlot;\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\nvar BlockBlot = /** @class */ (function (_super) {\n    __extends(BlockBlot, _super);\n    function BlockBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BlockBlot.formats = function (domNode) {\n        var tagName = Registry.query(BlockBlot.blotName).tagName;\n        if (domNode.tagName === tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    BlockBlot.prototype.format = function (name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) == null) {\n            return;\n        }\n        else if (name === this.statics.blotName && !value) {\n            this.replaceWith(BlockBlot.blotName);\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    BlockBlot.prototype.formatAt = function (index, length, name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) != null) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    BlockBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {\n            // Insert text or inline\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n        else {\n            var after = this.split(index);\n            var blot = Registry.create(value, def);\n            after.parent.insertBefore(blot, after);\n        }\n    };\n    BlockBlot.prototype.update = function (mutations, context) {\n        if (navigator.userAgent.match(/Trident/)) {\n            this.build();\n        }\n        else {\n            _super.prototype.update.call(this, mutations, context);\n        }\n    };\n    BlockBlot.blotName = 'block';\n    BlockBlot.scope = Registry.Scope.BLOCK_BLOT;\n    BlockBlot.tagName = 'P';\n    return BlockBlot;\n}(format_1.default));\nexports.default = BlockBlot;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar EmbedBlot = /** @class */ (function (_super) {\n    __extends(EmbedBlot, _super);\n    function EmbedBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    EmbedBlot.formats = function (domNode) {\n        return undefined;\n    };\n    EmbedBlot.prototype.format = function (name, value) {\n        // super.formatAt wraps, which is what we want in general,\n        // but this allows subclasses to overwrite for formats\n        // that just apply to particular embeds\n        _super.prototype.formatAt.call(this, 0, this.length(), name, value);\n    };\n    EmbedBlot.prototype.formatAt = function (index, length, name, value) {\n        if (index === 0 && length === this.length()) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    EmbedBlot.prototype.formats = function () {\n        return this.statics.formats(this.domNode);\n    };\n    return EmbedBlot;\n}(leaf_1.default));\nexports.default = EmbedBlot;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar Registry = __webpack_require__(1);\nvar TextBlot = /** @class */ (function (_super) {\n    __extends(TextBlot, _super);\n    function TextBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.text = _this.statics.value(_this.domNode);\n        return _this;\n    }\n    TextBlot.create = function (value) {\n        return document.createTextNode(value);\n    };\n    TextBlot.value = function (domNode) {\n        var text = domNode.data;\n        // @ts-ignore\n        if (text['normalize'])\n            text = text['normalize']();\n        return text;\n    };\n    TextBlot.prototype.deleteAt = function (index, length) {\n        this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n    };\n    TextBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node) {\n            return offset;\n        }\n        return -1;\n    };\n    TextBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null) {\n            this.text = this.text.slice(0, index) + value + this.text.slice(index);\n            this.domNode.data = this.text;\n        }\n        else {\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n    };\n    TextBlot.prototype.length = function () {\n        return this.text.length;\n    };\n    TextBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        this.text = this.statics.value(this.domNode);\n        if (this.text.length === 0) {\n            this.remove();\n        }\n        else if (this.next instanceof TextBlot && this.next.prev === this) {\n            this.insertAt(this.length(), this.next.value());\n            this.next.remove();\n        }\n    };\n    TextBlot.prototype.position = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        return [this.domNode, index];\n    };\n    TextBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = Registry.create(this.domNode.splitText(index));\n        this.parent.insertBefore(after, this.next);\n        this.text = this.statics.value(this.domNode);\n        return after;\n    };\n    TextBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (mutations.some(function (mutation) {\n            return mutation.type === 'characterData' && mutation.target === _this.domNode;\n        })) {\n            this.text = this.statics.value(this.domNode);\n        }\n    };\n    TextBlot.prototype.value = function () {\n        return this.text;\n    };\n    TextBlot.blotName = 'text';\n    TextBlot.scope = Registry.Scope.INLINE_BLOT;\n    return TextBlot;\n}(leaf_1.default));\nexports.default = TextBlot;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar elem = document.createElement('div');\nelem.classList.toggle('test-class', false);\nif (elem.classList.contains('test-class')) {\n  var _toggle = DOMTokenList.prototype.toggle;\n  DOMTokenList.prototype.toggle = function (token, force) {\n    if (arguments.length > 1 && !this.contains(token) === !force) {\n      return force;\n    } else {\n      return _toggle.call(this, token);\n    }\n  };\n}\n\nif (!String.prototype.startsWith) {\n  String.prototype.startsWith = function (searchString, position) {\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (!String.prototype.endsWith) {\n  String.prototype.endsWith = function (searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!Array.prototype.find) {\n  Object.defineProperty(Array.prototype, \"find\", {\n    value: function value(predicate) {\n      if (this === null) {\n        throw new TypeError('Array.prototype.find called on null or undefined');\n      }\n      if (typeof predicate !== 'function') {\n        throw new TypeError('predicate must be a function');\n      }\n      var list = Object(this);\n      var length = list.length >>> 0;\n      var thisArg = arguments[1];\n      var value;\n\n      for (var i = 0; i < length; i++) {\n        value = list[i];\n        if (predicate.call(thisArg, value, i, list)) {\n          return value;\n        }\n      }\n      return undefined;\n    }\n  });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  // Disable resizing in Firefox\n  document.execCommand(\"enableObjectResizing\", false, false);\n  // Disable automatic linkifying in IE11\n  document.execCommand(\"autoUrlDetect\", false, false);\n});\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\n/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int} cursor_pos Expected edit position in text1 (optional)\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos) {\n  // Check for equality (speedup).\n  if (text1 == text2) {\n    if (text1) {\n      return [[DIFF_EQUAL, text1]];\n    }\n    return [];\n  }\n\n  // Check cursor_pos within bounds\n  if (cursor_pos < 0 || text1.length < cursor_pos) {\n    cursor_pos = null;\n  }\n\n  // Trim off common prefix (speedup).\n  var commonlength = diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n\n  // Trim off common suffix (speedup).\n  commonlength = diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n\n  // Compute the diff on the middle block.\n  var diffs = diff_compute_(text1, text2);\n\n  // Restore the prefix and suffix.\n  if (commonprefix) {\n    diffs.unshift([DIFF_EQUAL, commonprefix]);\n  }\n  if (commonsuffix) {\n    diffs.push([DIFF_EQUAL, commonsuffix]);\n  }\n  diff_cleanupMerge(diffs);\n  if (cursor_pos != null) {\n    diffs = fix_cursor(diffs, cursor_pos);\n  }\n  diffs = fix_emoji(diffs);\n  return diffs;\n};\n\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n  var diffs;\n\n  if (!text1) {\n    // Just add some text (speedup).\n    return [[DIFF_INSERT, text2]];\n  }\n\n  if (!text2) {\n    // Just delete some text (speedup).\n    return [[DIFF_DELETE, text1]];\n  }\n\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i != -1) {\n    // Shorter text is inside the longer text (speedup).\n    diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n             [DIFF_EQUAL, shorttext],\n             [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n    // Swap insertions for deletions if diff is reversed.\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n\n  if (shorttext.length == 1) {\n    // Single character string.\n    // After the previous speedup, the character can't be an equality.\n    return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n  }\n\n  // Check to see if the problem can be split in two.\n  var hm = diff_halfMatch_(text1, text2);\n  if (hm) {\n    // A half-match was found, sort out the return data.\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    // Send both pairs off for separate processing.\n    var diffs_a = diff_main(text1_a, text2_a);\n    var diffs_b = diff_main(text1_b, text2_b);\n    // Merge the results.\n    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n  }\n\n  return diff_bisect_(text1, text2);\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  // integers and undefined.\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  // If the total number of characters is odd, then the front path will collide\n  // with the reverse path.\n  var front = (delta % 2 != 0);\n  // Offsets for start and end of k loop.\n  // Prevents mapping of space beyond the grid.\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    // Walk the front path one step.\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (x1 < text1_length && y1 < text2_length &&\n             text1.charAt(x1) == text2.charAt(y1)) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        // Ran off the right of the graph.\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        // Ran off the bottom of the graph.\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n          // Mirror x2 onto top-left coordinate system.\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n\n    // Walk the reverse path one step.\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (x2 < text1_length && y2 < text2_length &&\n             text1.charAt(text1_length - x2 - 1) ==\n             text2.charAt(text2_length - y2 - 1)) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        // Ran off the left of the graph.\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        // Ran off the top of the graph.\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          // Mirror x2 onto top-left coordinate system.\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n  }\n  // Diff took too long and hit the deadline or\n  // number of diffs equals number of characters, no commonality at all.\n  return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n\n  // Compute both diffs serially.\n  var diffs = diff_main(text1a, text2a);\n  var diffsb = diff_main(text1b, text2b);\n\n  return diffs.concat(diffsb);\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\nfunction diff_commonPrefix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(pointerstart, pointermid) ==\n        text2.substring(pointerstart, pointermid)) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 ||\n      text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n        text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null;  // Pointless.\n  }\n\n  /**\n   * Does a substring of shorttext exist within longtext such that the substring\n   * is at least half the length of longtext?\n   * Closure, but does not reference any external variables.\n   * @param {string} longtext Longer string.\n   * @param {string} shorttext Shorter string.\n   * @param {number} i Start index of quarter length substring within longtext.\n   * @return {Array.<string>} Five element Array, containing the prefix of\n   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n   *     of shorttext and the common middle.  Or null if there was no match.\n   * @private\n   */\n  function diff_halfMatchI_(longtext, shorttext, i) {\n    // Start with a 1/4 length substring at position i as a seed.\n    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n    var j = -1;\n    var best_common = '';\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n      var prefixLength = diff_commonPrefix(longtext.substring(i),\n                                           shorttext.substring(j));\n      var suffixLength = diff_commonSuffix(longtext.substring(0, i),\n                                           shorttext.substring(0, j));\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common = shorttext.substring(j - suffixLength, j) +\n            shorttext.substring(j, j + prefixLength);\n        best_longtext_a = longtext.substring(0, i - suffixLength);\n        best_longtext_b = longtext.substring(i + prefixLength);\n        best_shorttext_a = shorttext.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext.length) {\n      return [best_longtext_a, best_longtext_b,\n              best_shorttext_a, best_shorttext_b, best_common];\n    } else {\n      return null;\n    }\n  }\n\n  // First check if the second quarter is the seed for a half-match.\n  var hm1 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 4));\n  // Check again based on the third quarter.\n  var hm2 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 2));\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    // Both matched.  Select the longest.\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n\n  // A half-match was found, sort out the return data.\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n */\nfunction diff_cleanupMerge(diffs) {\n  diffs.push([DIFF_EQUAL, '']);  // Add a dummy entry at the end.\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  var commonlength;\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete + count_insert > 1) {\n          if (count_delete !== 0 && count_insert !== 0) {\n            // Factor out any common prefixies.\n            commonlength = diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if ((pointer - count_delete - count_insert) > 0 &&\n                  diffs[pointer - count_delete - count_insert - 1][0] ==\n                  DIFF_EQUAL) {\n                diffs[pointer - count_delete - count_insert - 1][1] +=\n                    text_insert.substring(0, commonlength);\n              } else {\n                diffs.splice(0, 0, [DIFF_EQUAL,\n                                    text_insert.substring(0, commonlength)]);\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            // Factor out any common suffixies.\n            commonlength = diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] = text_insert.substring(text_insert.length -\n                  commonlength) + diffs[pointer][1];\n              text_insert = text_insert.substring(0, text_insert.length -\n                  commonlength);\n              text_delete = text_delete.substring(0, text_delete.length -\n                  commonlength);\n            }\n          }\n          // Delete the offending records and add the merged ones.\n          if (count_delete === 0) {\n            diffs.splice(pointer - count_insert,\n                count_delete + count_insert, [DIFF_INSERT, text_insert]);\n          } else if (count_insert === 0) {\n            diffs.splice(pointer - count_delete,\n                count_delete + count_insert, [DIFF_DELETE, text_delete]);\n          } else {\n            diffs.splice(pointer - count_delete - count_insert,\n                count_delete + count_insert, [DIFF_DELETE, text_delete],\n                [DIFF_INSERT, text_insert]);\n          }\n          pointer = pointer - count_delete - count_insert +\n                    (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n          // Merge this equality with the previous one.\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === '') {\n    diffs.pop();  // Remove the dummy entry at the end.\n  }\n\n  // Second pass: look for single edits surrounded on both sides by equalities\n  // which can be shifted sideways to eliminate an equality.\n  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  var changes = false;\n  pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n        diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      if (diffs[pointer][1].substring(diffs[pointer][1].length -\n          diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n        // Shift the edit over the previous equality.\n        diffs[pointer][1] = diffs[pointer - 1][1] +\n            diffs[pointer][1].substring(0, diffs[pointer][1].length -\n                                        diffs[pointer - 1][1].length);\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n          diffs[pointer + 1][1]) {\n        // Shift the edit over the next equality.\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] =\n            diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n            diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  // If shifts were made, the diff needs reordering and another shift sweep.\n  if (changes) {\n    diff_cleanupMerge(diffs);\n  }\n};\n\n\nvar diff = diff_main;\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n\n/*\n * Modify a diff such that the cursor position points to the start of a change:\n * E.g.\n *   cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)\n *     => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]\n *   cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)\n *     => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} A tuple [cursor location in the modified diff, modified diff]\n */\nfunction cursor_normalize_diff (diffs, cursor_pos) {\n  if (cursor_pos === 0) {\n    return [DIFF_EQUAL, diffs];\n  }\n  for (var current_pos = 0, i = 0; i < diffs.length; i++) {\n    var d = diffs[i];\n    if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {\n      var next_pos = current_pos + d[1].length;\n      if (cursor_pos === next_pos) {\n        return [i + 1, diffs];\n      } else if (cursor_pos < next_pos) {\n        // copy to prevent side effects\n        diffs = diffs.slice();\n        // split d into two diff changes\n        var split_pos = cursor_pos - current_pos;\n        var d_left = [d[0], d[1].slice(0, split_pos)];\n        var d_right = [d[0], d[1].slice(split_pos)];\n        diffs.splice(i, 1, d_left, d_right);\n        return [i + 1, diffs];\n      } else {\n        current_pos = next_pos;\n      }\n    }\n  }\n  throw new Error('cursor_pos is out of bounds!')\n}\n\n/*\n * Modify a diff such that the edit position is \"shifted\" to the proposed edit location (cursor_position).\n *\n * Case 1)\n *   Check if a naive shift is possible:\n *     [0, X], [ 1, Y] -> [ 1, Y], [0, X]    (if X + Y === Y + X)\n *     [0, X], [-1, Y] -> [-1, Y], [0, X]    (if X + Y === Y + X) - holds same result\n * Case 2)\n *   Check if the following shifts are possible:\n *     [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']\n *     [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']\n *         ^            ^\n *         d          d_next\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} Array of diff tuples\n */\nfunction fix_cursor (diffs, cursor_pos) {\n  var norm = cursor_normalize_diff(diffs, cursor_pos);\n  var ndiffs = norm[1];\n  var cursor_pointer = norm[0];\n  var d = ndiffs[cursor_pointer];\n  var d_next = ndiffs[cursor_pointer + 1];\n\n  if (d == null) {\n    // Text was deleted from end of original string,\n    // cursor is now out of bounds in new string\n    return diffs;\n  } else if (d[0] !== DIFF_EQUAL) {\n    // A modification happened at the cursor location.\n    // This is the expected outcome, so we can return the original diff.\n    return diffs;\n  } else {\n    if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {\n      // Case 1)\n      // It is possible to perform a naive shift\n      ndiffs.splice(cursor_pointer, 2, d_next, d)\n      return merge_tuples(ndiffs, cursor_pointer, 2)\n    } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {\n      // Case 2)\n      // d[1] is a prefix of d_next[1]\n      // We can assume that d_next[0] !== 0, since d[0] === 0\n      // Shift edit locations..\n      ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);\n      var suffix = d_next[1].slice(d[1].length);\n      if (suffix.length > 0) {\n        ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);\n      }\n      return merge_tuples(ndiffs, cursor_pointer, 3)\n    } else {\n      // Not possible to perform any modification\n      return diffs;\n    }\n  }\n}\n\n/*\n * Check diff did not split surrogate pairs.\n * Ex. [0, '\\uD83D'], [-1, '\\uDC36'], [1, '\\uDC2F'] -> [-1, '\\uD83D\\uDC36'], [1, '\\uD83D\\uDC2F']\n *     '\\uD83D\\uDC36' === '🐶', '\\uD83D\\uDC2F' === '🐯'\n *\n * @param {Array} diffs Array of diff tuples\n * @return {Array} Array of diff tuples\n */\nfunction fix_emoji (diffs) {\n  var compact = false;\n  var starts_with_pair_end = function(str) {\n    return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;\n  }\n  var ends_with_pair_start = function(str) {\n    return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;\n  }\n  for (var i = 2; i < diffs.length; i += 1) {\n    if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&\n        diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&\n        diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {\n      compact = true;\n\n      diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];\n      diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];\n\n      diffs[i-2][1] = diffs[i-2][1].slice(0, -1);\n    }\n  }\n  if (!compact) {\n    return diffs;\n  }\n  var fixed_diffs = [];\n  for (var i = 0; i < diffs.length; i += 1) {\n    if (diffs[i][1].length > 0) {\n      fixed_diffs.push(diffs[i]);\n    }\n  }\n  return fixed_diffs;\n}\n\n/*\n * Try to merge tuples with their neigbors in a given range.\n * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']\n *\n * @param {Array} diffs Array of diff tuples.\n * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).\n * @param {Int} length Number of consecutive elements to check.\n * @return {Array} Array of merged diff tuples.\n */\nfunction merge_tuples (diffs, start, length) {\n  // Check from (start-1) to (start+length).\n  for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {\n    if (i + 1 < diffs.length) {\n      var left_d = diffs[i];\n      var right_d = diffs[i+1];\n      if (left_d[0] === right_d[1]) {\n        diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);\n      }\n    }\n  }\n  return diffs;\n}\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports) {\n\nexports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nvar supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @api private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {Mixed} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @api private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @api public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @api public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Boolean} exists Only check if there are listeners.\n * @returns {Array|Boolean}\n * @api public\n */\nEventEmitter.prototype.listeners = function listeners(event, exists) {\n  var evt = prefix ? prefix + event : event\n    , available = this._events[evt];\n\n  if (exists) return !!available;\n  if (!available) return [];\n  if (available.fn) return [available.fn];\n\n  for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {\n    ee[i] = available[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @api public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  var listener = new EE(fn, context || this)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  var listener = new EE(fn, context || this, true)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {Mixed} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n         listeners.fn === fn\n      && (!once || listeners.once)\n      && (!context || listeners.context === context)\n    ) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n           listeners[i].fn !== fn\n        || (once && !listeners[i].once)\n        || (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {String|Symbol} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// This function doesn't apply anymore.\n//\nEventEmitter.prototype.setMaxListeners = function setMaxListeners() {\n  return this;\n};\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.matchText = exports.matchSpacing = exports.matchNewline = exports.matchBlot = exports.matchAttributor = exports.default = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend2 = __webpack_require__(3);\n\nvar _extend3 = _interopRequireDefault(_extend2);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _align = __webpack_require__(36);\n\nvar _background = __webpack_require__(37);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _color = __webpack_require__(26);\n\nvar _direction = __webpack_require__(38);\n\nvar _font = __webpack_require__(39);\n\nvar _size = __webpack_require__(40);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:clipboard');\n\nvar DOM_KEY = '__ql-matcher';\n\nvar CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchSpacing], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['b', matchAlias.bind(matchAlias, 'bold')], ['i', matchAlias.bind(matchAlias, 'italic')], ['style', matchIgnore]];\n\nvar ATTRIBUTE_ATTRIBUTORS = [_align.AlignAttribute, _direction.DirectionAttribute].reduce(function (memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nvar STYLE_ATTRIBUTORS = [_align.AlignStyle, _background.BackgroundStyle, _color.ColorStyle, _direction.DirectionStyle, _font.FontStyle, _size.SizeStyle].reduce(function (memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nvar Clipboard = function (_Module) {\n  _inherits(Clipboard, _Module);\n\n  function Clipboard(quill, options) {\n    _classCallCheck(this, Clipboard);\n\n    var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this, quill, options));\n\n    _this.quill.root.addEventListener('paste', _this.onPaste.bind(_this));\n    _this.container = _this.quill.addContainer('ql-clipboard');\n    _this.container.setAttribute('contenteditable', true);\n    _this.container.setAttribute('tabindex', -1);\n    _this.matchers = [];\n    CLIPBOARD_CONFIG.concat(_this.options.matchers).forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          selector = _ref2[0],\n          matcher = _ref2[1];\n\n      if (!options.matchVisual && matcher === matchSpacing) return;\n      _this.addMatcher(selector, matcher);\n    });\n    return _this;\n  }\n\n  _createClass(Clipboard, [{\n    key: 'addMatcher',\n    value: function addMatcher(selector, matcher) {\n      this.matchers.push([selector, matcher]);\n    }\n  }, {\n    key: 'convert',\n    value: function convert(html) {\n      if (typeof html === 'string') {\n        this.container.innerHTML = html.replace(/\\>\\r?\\n +\\</g, '><'); // Remove spaces between tags\n        return this.convert();\n      }\n      var formats = this.quill.getFormat(this.quill.selection.savedRange.index);\n      if (formats[_code2.default.blotName]) {\n        var text = this.container.innerText;\n        this.container.innerHTML = '';\n        return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));\n      }\n\n      var _prepareMatching = this.prepareMatching(),\n          _prepareMatching2 = _slicedToArray(_prepareMatching, 2),\n          elementMatchers = _prepareMatching2[0],\n          textMatchers = _prepareMatching2[1];\n\n      var delta = traverse(this.container, elementMatchers, textMatchers);\n      // Remove trailing newline\n      if (deltaEndsWith(delta, '\\n') && delta.ops[delta.ops.length - 1].attributes == null) {\n        delta = delta.compose(new _quillDelta2.default().retain(delta.length() - 1).delete(1));\n      }\n      debug.log('convert', this.container.innerHTML, delta);\n      this.container.innerHTML = '';\n      return delta;\n    }\n  }, {\n    key: 'dangerouslyPasteHTML',\n    value: function dangerouslyPasteHTML(index, html) {\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _quill2.default.sources.API;\n\n      if (typeof index === 'string') {\n        this.quill.setContents(this.convert(index), html);\n        this.quill.setSelection(0, _quill2.default.sources.SILENT);\n      } else {\n        var paste = this.convert(html);\n        this.quill.updateContents(new _quillDelta2.default().retain(index).concat(paste), source);\n        this.quill.setSelection(index + paste.length(), _quill2.default.sources.SILENT);\n      }\n    }\n  }, {\n    key: 'onPaste',\n    value: function onPaste(e) {\n      var _this2 = this;\n\n      if (e.defaultPrevented || !this.quill.isEnabled()) return;\n      var range = this.quill.getSelection();\n      var delta = new _quillDelta2.default().retain(range.index);\n      var scrollTop = this.quill.scrollingContainer.scrollTop;\n      this.container.focus();\n      this.quill.selection.update(_quill2.default.sources.SILENT);\n      setTimeout(function () {\n        delta = delta.concat(_this2.convert()).delete(range.length);\n        _this2.quill.updateContents(delta, _quill2.default.sources.USER);\n        // range.length contributes to delta.length()\n        _this2.quill.setSelection(delta.length() - range.length, _quill2.default.sources.SILENT);\n        _this2.quill.scrollingContainer.scrollTop = scrollTop;\n        _this2.quill.focus();\n      }, 1);\n    }\n  }, {\n    key: 'prepareMatching',\n    value: function prepareMatching() {\n      var _this3 = this;\n\n      var elementMatchers = [],\n          textMatchers = [];\n      this.matchers.forEach(function (pair) {\n        var _pair = _slicedToArray(pair, 2),\n            selector = _pair[0],\n            matcher = _pair[1];\n\n        switch (selector) {\n          case Node.TEXT_NODE:\n            textMatchers.push(matcher);\n            break;\n          case Node.ELEMENT_NODE:\n            elementMatchers.push(matcher);\n            break;\n          default:\n            [].forEach.call(_this3.container.querySelectorAll(selector), function (node) {\n              // TODO use weakmap\n              node[DOM_KEY] = node[DOM_KEY] || [];\n              node[DOM_KEY].push(matcher);\n            });\n            break;\n        }\n      });\n      return [elementMatchers, textMatchers];\n    }\n  }]);\n\n  return Clipboard;\n}(_module2.default);\n\nClipboard.DEFAULTS = {\n  matchers: [],\n  matchVisual: true\n};\n\nfunction applyFormat(delta, format, value) {\n  if ((typeof format === 'undefined' ? 'undefined' : _typeof(format)) === 'object') {\n    return Object.keys(format).reduce(function (delta, key) {\n      return applyFormat(delta, key, format[key]);\n    }, delta);\n  } else {\n    return delta.reduce(function (delta, op) {\n      if (op.attributes && op.attributes[format]) {\n        return delta.push(op);\n      } else {\n        return delta.insert(op.insert, (0, _extend3.default)({}, _defineProperty({}, format, value), op.attributes));\n      }\n    }, new _quillDelta2.default());\n  }\n}\n\nfunction computeStyle(node) {\n  if (node.nodeType !== Node.ELEMENT_NODE) return {};\n  var DOM_KEY = '__ql-computed-style';\n  return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));\n}\n\nfunction deltaEndsWith(delta, text) {\n  var endText = \"\";\n  for (var i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {\n    var op = delta.ops[i];\n    if (typeof op.insert !== 'string') break;\n    endText = op.insert + endText;\n  }\n  return endText.slice(-1 * text.length) === text;\n}\n\nfunction isLine(node) {\n  if (node.childNodes.length === 0) return false; // Exclude embed blocks\n  var style = computeStyle(node);\n  return ['block', 'list-item'].indexOf(style.display) > -1;\n}\n\nfunction traverse(node, elementMatchers, textMatchers) {\n  // Post-order\n  if (node.nodeType === node.TEXT_NODE) {\n    return textMatchers.reduce(function (delta, matcher) {\n      return matcher(node, delta);\n    }, new _quillDelta2.default());\n  } else if (node.nodeType === node.ELEMENT_NODE) {\n    return [].reduce.call(node.childNodes || [], function (delta, childNode) {\n      var childrenDelta = traverse(childNode, elementMatchers, textMatchers);\n      if (childNode.nodeType === node.ELEMENT_NODE) {\n        childrenDelta = elementMatchers.reduce(function (childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n        childrenDelta = (childNode[DOM_KEY] || []).reduce(function (childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n      }\n      return delta.concat(childrenDelta);\n    }, new _quillDelta2.default());\n  } else {\n    return new _quillDelta2.default();\n  }\n}\n\nfunction matchAlias(format, node, delta) {\n  return applyFormat(delta, format, true);\n}\n\nfunction matchAttributor(node, delta) {\n  var attributes = _parchment2.default.Attributor.Attribute.keys(node);\n  var classes = _parchment2.default.Attributor.Class.keys(node);\n  var styles = _parchment2.default.Attributor.Style.keys(node);\n  var formats = {};\n  attributes.concat(classes).concat(styles).forEach(function (name) {\n    var attr = _parchment2.default.query(name, _parchment2.default.Scope.ATTRIBUTE);\n    if (attr != null) {\n      formats[attr.attrName] = attr.value(node);\n      if (formats[attr.attrName]) return;\n    }\n    attr = ATTRIBUTE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n    attr = STYLE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      attr = STYLE_ATTRIBUTORS[name];\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n  });\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  return delta;\n}\n\nfunction matchBlot(node, delta) {\n  var match = _parchment2.default.query(node);\n  if (match == null) return delta;\n  if (match.prototype instanceof _parchment2.default.Embed) {\n    var embed = {};\n    var value = match.value(node);\n    if (value != null) {\n      embed[match.blotName] = value;\n      delta = new _quillDelta2.default().insert(embed, match.formats(node));\n    }\n  } else if (typeof match.formats === 'function') {\n    delta = applyFormat(delta, match.blotName, match.formats(node));\n  }\n  return delta;\n}\n\nfunction matchBreak(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    delta.insert('\\n');\n  }\n  return delta;\n}\n\nfunction matchIgnore() {\n  return new _quillDelta2.default();\n}\n\nfunction matchIndent(node, delta) {\n  var match = _parchment2.default.query(node);\n  if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\\n')) {\n    return delta;\n  }\n  var indent = -1,\n      parent = node.parentNode;\n  while (!parent.classList.contains('ql-clipboard')) {\n    if ((_parchment2.default.query(parent) || {}).blotName === 'list') {\n      indent += 1;\n    }\n    parent = parent.parentNode;\n  }\n  if (indent <= 0) return delta;\n  return delta.compose(new _quillDelta2.default().retain(delta.length() - 1).retain(1, { indent: indent }));\n}\n\nfunction matchNewline(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    if (isLine(node) || delta.length() > 0 && node.nextSibling && isLine(node.nextSibling)) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchSpacing(node, delta) {\n  if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\\n\\n')) {\n    var nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);\n    if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight * 1.5) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchStyles(node, delta) {\n  var formats = {};\n  var style = node.style || {};\n  if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {\n    formats.italic = true;\n  }\n  if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') || parseInt(computeStyle(node).fontWeight) >= 700)) {\n    formats.bold = true;\n  }\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  if (parseFloat(style.textIndent || 0) > 0) {\n    // Could be 0.5in\n    delta = new _quillDelta2.default().insert('\\t').concat(delta);\n  }\n  return delta;\n}\n\nfunction matchText(node, delta) {\n  var text = node.data;\n  // Word represents empty line with <o:p>&nbsp;</o:p>\n  if (node.parentNode.tagName === 'O:P') {\n    return delta.insert(text.trim());\n  }\n  if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {\n    return delta;\n  }\n  if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {\n    // eslint-disable-next-line func-style\n    var replacer = function replacer(collapse, match) {\n      match = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n      return match.length < 1 && collapse ? ' ' : match;\n    };\n    text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n    text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n    if (node.previousSibling == null && isLine(node.parentNode) || node.previousSibling != null && isLine(node.previousSibling)) {\n      text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n    }\n    if (node.nextSibling == null && isLine(node.parentNode) || node.nextSibling != null && isLine(node.nextSibling)) {\n      text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n    }\n  }\n  return delta.insert(text);\n}\n\nexports.default = Clipboard;\nexports.matchAttributor = matchAttributor;\nexports.matchBlot = matchBlot;\nexports.matchNewline = matchNewline;\nexports.matchSpacing = matchSpacing;\nexports.matchText = matchText;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Bold = function (_Inline) {\n  _inherits(Bold, _Inline);\n\n  function Bold() {\n    _classCallCheck(this, Bold);\n\n    return _possibleConstructorReturn(this, (Bold.__proto__ || Object.getPrototypeOf(Bold)).apply(this, arguments));\n  }\n\n  _createClass(Bold, [{\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Bold.prototype.__proto__ || Object.getPrototypeOf(Bold.prototype), 'optimize', this).call(this, context);\n      if (this.domNode.tagName !== this.statics.tagName[0]) {\n        this.replaceWith(this.statics.blotName);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create() {\n      return _get(Bold.__proto__ || Object.getPrototypeOf(Bold), 'create', this).call(this);\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      return true;\n    }\n  }]);\n\n  return Bold;\n}(_inline2.default);\n\nBold.blotName = 'bold';\nBold.tagName = ['STRONG', 'B'];\n\nexports.default = Bold;\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.addControls = exports.default = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:toolbar');\n\nvar Toolbar = function (_Module) {\n  _inherits(Toolbar, _Module);\n\n  function Toolbar(quill, options) {\n    _classCallCheck(this, Toolbar);\n\n    var _this = _possibleConstructorReturn(this, (Toolbar.__proto__ || Object.getPrototypeOf(Toolbar)).call(this, quill, options));\n\n    if (Array.isArray(_this.options.container)) {\n      var container = document.createElement('div');\n      addControls(container, _this.options.container);\n      quill.container.parentNode.insertBefore(container, quill.container);\n      _this.container = container;\n    } else if (typeof _this.options.container === 'string') {\n      _this.container = document.querySelector(_this.options.container);\n    } else {\n      _this.container = _this.options.container;\n    }\n    if (!(_this.container instanceof HTMLElement)) {\n      var _ret;\n\n      return _ret = debug.error('Container required for toolbar', _this.options), _possibleConstructorReturn(_this, _ret);\n    }\n    _this.container.classList.add('ql-toolbar');\n    _this.controls = [];\n    _this.handlers = {};\n    Object.keys(_this.options.handlers).forEach(function (format) {\n      _this.addHandler(format, _this.options.handlers[format]);\n    });\n    [].forEach.call(_this.container.querySelectorAll('button, select'), function (input) {\n      _this.attach(input);\n    });\n    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (type, range) {\n      if (type === _quill2.default.events.SELECTION_CHANGE) {\n        _this.update(range);\n      }\n    });\n    _this.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n      var _this$quill$selection = _this.quill.selection.getRange(),\n          _this$quill$selection2 = _slicedToArray(_this$quill$selection, 1),\n          range = _this$quill$selection2[0]; // quill.getSelection triggers update\n\n\n      _this.update(range);\n    });\n    return _this;\n  }\n\n  _createClass(Toolbar, [{\n    key: 'addHandler',\n    value: function addHandler(format, handler) {\n      this.handlers[format] = handler;\n    }\n  }, {\n    key: 'attach',\n    value: function attach(input) {\n      var _this2 = this;\n\n      var format = [].find.call(input.classList, function (className) {\n        return className.indexOf('ql-') === 0;\n      });\n      if (!format) return;\n      format = format.slice('ql-'.length);\n      if (input.tagName === 'BUTTON') {\n        input.setAttribute('type', 'button');\n      }\n      if (this.handlers[format] == null) {\n        if (this.quill.scroll.whitelist != null && this.quill.scroll.whitelist[format] == null) {\n          debug.warn('ignoring attaching to disabled format', format, input);\n          return;\n        }\n        if (_parchment2.default.query(format) == null) {\n          debug.warn('ignoring attaching to nonexistent format', format, input);\n          return;\n        }\n      }\n      var eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n      input.addEventListener(eventName, function (e) {\n        var value = void 0;\n        if (input.tagName === 'SELECT') {\n          if (input.selectedIndex < 0) return;\n          var selected = input.options[input.selectedIndex];\n          if (selected.hasAttribute('selected')) {\n            value = false;\n          } else {\n            value = selected.value || false;\n          }\n        } else {\n          if (input.classList.contains('ql-active')) {\n            value = false;\n          } else {\n            value = input.value || !input.hasAttribute('value');\n          }\n          e.preventDefault();\n        }\n        _this2.quill.focus();\n\n        var _quill$selection$getR = _this2.quill.selection.getRange(),\n            _quill$selection$getR2 = _slicedToArray(_quill$selection$getR, 1),\n            range = _quill$selection$getR2[0];\n\n        if (_this2.handlers[format] != null) {\n          _this2.handlers[format].call(_this2, value);\n        } else if (_parchment2.default.query(format).prototype instanceof _parchment2.default.Embed) {\n          value = prompt('Enter ' + format);\n          if (!value) return;\n          _this2.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert(_defineProperty({}, format, value)), _quill2.default.sources.USER);\n        } else {\n          _this2.quill.format(format, value, _quill2.default.sources.USER);\n        }\n        _this2.update(range);\n      });\n      // TODO use weakmap\n      this.controls.push([format, input]);\n    }\n  }, {\n    key: 'update',\n    value: function update(range) {\n      var formats = range == null ? {} : this.quill.getFormat(range);\n      this.controls.forEach(function (pair) {\n        var _pair = _slicedToArray(pair, 2),\n            format = _pair[0],\n            input = _pair[1];\n\n        if (input.tagName === 'SELECT') {\n          var option = void 0;\n          if (range == null) {\n            option = null;\n          } else if (formats[format] == null) {\n            option = input.querySelector('option[selected]');\n          } else if (!Array.isArray(formats[format])) {\n            var value = formats[format];\n            if (typeof value === 'string') {\n              value = value.replace(/\\\"/g, '\\\\\"');\n            }\n            option = input.querySelector('option[value=\"' + value + '\"]');\n          }\n          if (option == null) {\n            input.value = ''; // TODO make configurable?\n            input.selectedIndex = -1;\n          } else {\n            option.selected = true;\n          }\n        } else {\n          if (range == null) {\n            input.classList.remove('ql-active');\n          } else if (input.hasAttribute('value')) {\n            // both being null should match (default values)\n            // '1' should match with 1 (headers)\n            var isActive = formats[format] === input.getAttribute('value') || formats[format] != null && formats[format].toString() === input.getAttribute('value') || formats[format] == null && !input.getAttribute('value');\n            input.classList.toggle('ql-active', isActive);\n          } else {\n            input.classList.toggle('ql-active', formats[format] != null);\n          }\n        }\n      });\n    }\n  }]);\n\n  return Toolbar;\n}(_module2.default);\n\nToolbar.DEFAULTS = {};\n\nfunction addButton(container, format, value) {\n  var input = document.createElement('button');\n  input.setAttribute('type', 'button');\n  input.classList.add('ql-' + format);\n  if (value != null) {\n    input.value = value;\n  }\n  container.appendChild(input);\n}\n\nfunction addControls(container, groups) {\n  if (!Array.isArray(groups[0])) {\n    groups = [groups];\n  }\n  groups.forEach(function (controls) {\n    var group = document.createElement('span');\n    group.classList.add('ql-formats');\n    controls.forEach(function (control) {\n      if (typeof control === 'string') {\n        addButton(group, control);\n      } else {\n        var format = Object.keys(control)[0];\n        var value = control[format];\n        if (Array.isArray(value)) {\n          addSelect(group, format, value);\n        } else {\n          addButton(group, format, value);\n        }\n      }\n    });\n    container.appendChild(group);\n  });\n}\n\nfunction addSelect(container, format, values) {\n  var input = document.createElement('select');\n  input.classList.add('ql-' + format);\n  values.forEach(function (value) {\n    var option = document.createElement('option');\n    if (value !== false) {\n      option.setAttribute('value', value);\n    } else {\n      option.setAttribute('selected', 'selected');\n    }\n    input.appendChild(option);\n  });\n  container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n  container: null,\n  handlers: {\n    clean: function clean() {\n      var _this3 = this;\n\n      var range = this.quill.getSelection();\n      if (range == null) return;\n      if (range.length == 0) {\n        var formats = this.quill.getFormat();\n        Object.keys(formats).forEach(function (name) {\n          // Clean functionality in existing apps only clean inline formats\n          if (_parchment2.default.query(name, _parchment2.default.Scope.INLINE) != null) {\n            _this3.quill.format(name, false);\n          }\n        });\n      } else {\n        this.quill.removeFormat(range, _quill2.default.sources.USER);\n      }\n    },\n    direction: function direction(value) {\n      var align = this.quill.getFormat()['align'];\n      if (value === 'rtl' && align == null) {\n        this.quill.format('align', 'right', _quill2.default.sources.USER);\n      } else if (!value && align === 'right') {\n        this.quill.format('align', false, _quill2.default.sources.USER);\n      }\n      this.quill.format('direction', value, _quill2.default.sources.USER);\n    },\n    indent: function indent(value) {\n      var range = this.quill.getSelection();\n      var formats = this.quill.getFormat(range);\n      var indent = parseInt(formats.indent || 0);\n      if (value === '+1' || value === '-1') {\n        var modifier = value === '+1' ? 1 : -1;\n        if (formats.direction === 'rtl') modifier *= -1;\n        this.quill.format('indent', indent + modifier, _quill2.default.sources.USER);\n      }\n    },\n    link: function link(value) {\n      if (value === true) {\n        value = prompt('Enter link URL:');\n      }\n      this.quill.format('link', value, _quill2.default.sources.USER);\n    },\n    list: function list(value) {\n      var range = this.quill.getSelection();\n      var formats = this.quill.getFormat(range);\n      if (value === 'check') {\n        if (formats['list'] === 'checked' || formats['list'] === 'unchecked') {\n          this.quill.format('list', false, _quill2.default.sources.USER);\n        } else {\n          this.quill.format('list', 'unchecked', _quill2.default.sources.USER);\n        }\n      } else {\n        this.quill.format('list', value, _quill2.default.sources.USER);\n      }\n    }\n  }\n};\n\nexports.default = Toolbar;\nexports.addControls = addControls;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"5 7 3 9 5 11\\\"></polyline> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"13 7 15 9 13 11\\\"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>\";\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorPicker = function (_Picker) {\n  _inherits(ColorPicker, _Picker);\n\n  function ColorPicker(select, label) {\n    _classCallCheck(this, ColorPicker);\n\n    var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this, select));\n\n    _this.label.innerHTML = label;\n    _this.container.classList.add('ql-color-picker');\n    [].slice.call(_this.container.querySelectorAll('.ql-picker-item'), 0, 7).forEach(function (item) {\n      item.classList.add('ql-primary');\n    });\n    return _this;\n  }\n\n  _createClass(ColorPicker, [{\n    key: 'buildItem',\n    value: function buildItem(option) {\n      var item = _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'buildItem', this).call(this, option);\n      item.style.backgroundColor = option.getAttribute('value') || '';\n      return item;\n    }\n  }, {\n    key: 'selectItem',\n    value: function selectItem(item, trigger) {\n      _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'selectItem', this).call(this, item, trigger);\n      var colorLabel = this.label.querySelector('.ql-color-label');\n      var value = item ? item.getAttribute('data-value') || '' : '';\n      if (colorLabel) {\n        if (colorLabel.tagName === 'line') {\n          colorLabel.style.stroke = value;\n        } else {\n          colorLabel.style.fill = value;\n        }\n      }\n    }\n  }]);\n\n  return ColorPicker;\n}(_picker2.default);\n\nexports.default = ColorPicker;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IconPicker = function (_Picker) {\n  _inherits(IconPicker, _Picker);\n\n  function IconPicker(select, icons) {\n    _classCallCheck(this, IconPicker);\n\n    var _this = _possibleConstructorReturn(this, (IconPicker.__proto__ || Object.getPrototypeOf(IconPicker)).call(this, select));\n\n    _this.container.classList.add('ql-icon-picker');\n    [].forEach.call(_this.container.querySelectorAll('.ql-picker-item'), function (item) {\n      item.innerHTML = icons[item.getAttribute('data-value') || ''];\n    });\n    _this.defaultItem = _this.container.querySelector('.ql-selected');\n    _this.selectItem(_this.defaultItem);\n    return _this;\n  }\n\n  _createClass(IconPicker, [{\n    key: 'selectItem',\n    value: function selectItem(item, trigger) {\n      _get(IconPicker.prototype.__proto__ || Object.getPrototypeOf(IconPicker.prototype), 'selectItem', this).call(this, item, trigger);\n      item = item || this.defaultItem;\n      this.label.innerHTML = item.innerHTML;\n    }\n  }]);\n\n  return IconPicker;\n}(_picker2.default);\n\nexports.default = IconPicker;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Tooltip = function () {\n  function Tooltip(quill, boundsContainer) {\n    var _this = this;\n\n    _classCallCheck(this, Tooltip);\n\n    this.quill = quill;\n    this.boundsContainer = boundsContainer || document.body;\n    this.root = quill.addContainer('ql-tooltip');\n    this.root.innerHTML = this.constructor.TEMPLATE;\n    if (this.quill.root === this.quill.scrollingContainer) {\n      this.quill.root.addEventListener('scroll', function () {\n        _this.root.style.marginTop = -1 * _this.quill.root.scrollTop + 'px';\n      });\n    }\n    this.hide();\n  }\n\n  _createClass(Tooltip, [{\n    key: 'hide',\n    value: function hide() {\n      this.root.classList.add('ql-hidden');\n    }\n  }, {\n    key: 'position',\n    value: function position(reference) {\n      var left = reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n      // root.scrollTop should be 0 if scrollContainer !== root\n      var top = reference.bottom + this.quill.root.scrollTop;\n      this.root.style.left = left + 'px';\n      this.root.style.top = top + 'px';\n      this.root.classList.remove('ql-flip');\n      var containerBounds = this.boundsContainer.getBoundingClientRect();\n      var rootBounds = this.root.getBoundingClientRect();\n      var shift = 0;\n      if (rootBounds.right > containerBounds.right) {\n        shift = containerBounds.right - rootBounds.right;\n        this.root.style.left = left + shift + 'px';\n      }\n      if (rootBounds.left < containerBounds.left) {\n        shift = containerBounds.left - rootBounds.left;\n        this.root.style.left = left + shift + 'px';\n      }\n      if (rootBounds.bottom > containerBounds.bottom) {\n        var height = rootBounds.bottom - rootBounds.top;\n        var verticalShift = reference.bottom - reference.top + height;\n        this.root.style.top = top - verticalShift + 'px';\n        this.root.classList.add('ql-flip');\n      }\n      return shift;\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      this.root.classList.remove('ql-editing');\n      this.root.classList.remove('ql-hidden');\n    }\n  }]);\n\n  return Tooltip;\n}();\n\nexports.default = Tooltip;\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(43);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _selection = __webpack_require__(15);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [[{ header: ['1', '2', '3', false] }], ['bold', 'italic', 'underline', 'link'], [{ list: 'ordered' }, { list: 'bullet' }], ['clean']];\n\nvar SnowTheme = function (_BaseTheme) {\n  _inherits(SnowTheme, _BaseTheme);\n\n  function SnowTheme(quill, options) {\n    _classCallCheck(this, SnowTheme);\n\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n\n    var _this = _possibleConstructorReturn(this, (SnowTheme.__proto__ || Object.getPrototypeOf(SnowTheme)).call(this, quill, options));\n\n    _this.quill.container.classList.add('ql-snow');\n    return _this;\n  }\n\n  _createClass(SnowTheme, [{\n    key: 'extendToolbar',\n    value: function extendToolbar(toolbar) {\n      toolbar.container.classList.add('ql-snow');\n      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n      this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n      if (toolbar.container.querySelector('.ql-link')) {\n        this.quill.keyboard.addBinding({ key: 'K', shortKey: true }, function (range, context) {\n          toolbar.handlers['link'].call(toolbar, !context.format.link);\n        });\n      }\n    }\n  }]);\n\n  return SnowTheme;\n}(_base2.default);\n\nSnowTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function link(value) {\n          if (value) {\n            var range = this.quill.getSelection();\n            if (range == null || range.length == 0) return;\n            var preview = this.quill.getText(range);\n            if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {\n              preview = 'mailto:' + preview;\n            }\n            var tooltip = this.quill.theme.tooltip;\n            tooltip.edit('link', preview);\n          } else {\n            this.quill.format('link', false);\n          }\n        }\n      }\n    }\n  }\n});\n\nvar SnowTooltip = function (_BaseTooltip) {\n  _inherits(SnowTooltip, _BaseTooltip);\n\n  function SnowTooltip(quill, bounds) {\n    _classCallCheck(this, SnowTooltip);\n\n    var _this2 = _possibleConstructorReturn(this, (SnowTooltip.__proto__ || Object.getPrototypeOf(SnowTooltip)).call(this, quill, bounds));\n\n    _this2.preview = _this2.root.querySelector('a.ql-preview');\n    return _this2;\n  }\n\n  _createClass(SnowTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this3 = this;\n\n      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'listen', this).call(this);\n      this.root.querySelector('a.ql-action').addEventListener('click', function (event) {\n        if (_this3.root.classList.contains('ql-editing')) {\n          _this3.save();\n        } else {\n          _this3.edit('link', _this3.preview.textContent);\n        }\n        event.preventDefault();\n      });\n      this.root.querySelector('a.ql-remove').addEventListener('click', function (event) {\n        if (_this3.linkRange != null) {\n          var range = _this3.linkRange;\n          _this3.restoreFocus();\n          _this3.quill.formatText(range, 'link', false, _emitter2.default.sources.USER);\n          delete _this3.linkRange;\n        }\n        event.preventDefault();\n        _this3.hide();\n      });\n      this.quill.on(_emitter2.default.events.SELECTION_CHANGE, function (range, oldRange, source) {\n        if (range == null) return;\n        if (range.length === 0 && source === _emitter2.default.sources.USER) {\n          var _quill$scroll$descend = _this3.quill.scroll.descendant(_link2.default, range.index),\n              _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n              link = _quill$scroll$descend2[0],\n              offset = _quill$scroll$descend2[1];\n\n          if (link != null) {\n            _this3.linkRange = new _selection.Range(range.index - offset, link.length());\n            var preview = _link2.default.formats(link.domNode);\n            _this3.preview.textContent = preview;\n            _this3.preview.setAttribute('href', preview);\n            _this3.show();\n            _this3.position(_this3.quill.getBounds(_this3.linkRange));\n            return;\n          }\n        } else {\n          delete _this3.linkRange;\n        }\n        _this3.hide();\n      });\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'show', this).call(this);\n      this.root.removeAttribute('data-mode');\n    }\n  }]);\n\n  return SnowTooltip;\n}(_base.BaseTooltip);\n\nSnowTooltip.TEMPLATE = ['<a class=\"ql-preview\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"about:blank\"></a>', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-action\"></a>', '<a class=\"ql-remove\"></a>'].join('');\n\nexports.default = SnowTheme;\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _core = __webpack_require__(29);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _align = __webpack_require__(36);\n\nvar _direction = __webpack_require__(38);\n\nvar _indent = __webpack_require__(64);\n\nvar _blockquote = __webpack_require__(65);\n\nvar _blockquote2 = _interopRequireDefault(_blockquote);\n\nvar _header = __webpack_require__(66);\n\nvar _header2 = _interopRequireDefault(_header);\n\nvar _list = __webpack_require__(67);\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _background = __webpack_require__(37);\n\nvar _color = __webpack_require__(26);\n\nvar _font = __webpack_require__(39);\n\nvar _size = __webpack_require__(40);\n\nvar _bold = __webpack_require__(56);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nvar _italic = __webpack_require__(68);\n\nvar _italic2 = _interopRequireDefault(_italic);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _script = __webpack_require__(69);\n\nvar _script2 = _interopRequireDefault(_script);\n\nvar _strike = __webpack_require__(70);\n\nvar _strike2 = _interopRequireDefault(_strike);\n\nvar _underline = __webpack_require__(71);\n\nvar _underline2 = _interopRequireDefault(_underline);\n\nvar _image = __webpack_require__(72);\n\nvar _image2 = _interopRequireDefault(_image);\n\nvar _video = __webpack_require__(73);\n\nvar _video2 = _interopRequireDefault(_video);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _formula = __webpack_require__(74);\n\nvar _formula2 = _interopRequireDefault(_formula);\n\nvar _syntax = __webpack_require__(75);\n\nvar _syntax2 = _interopRequireDefault(_syntax);\n\nvar _toolbar = __webpack_require__(57);\n\nvar _toolbar2 = _interopRequireDefault(_toolbar);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _colorPicker = __webpack_require__(59);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(60);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _tooltip = __webpack_require__(61);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nvar _bubble = __webpack_require__(108);\n\nvar _bubble2 = _interopRequireDefault(_bubble);\n\nvar _snow = __webpack_require__(62);\n\nvar _snow2 = _interopRequireDefault(_snow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_core2.default.register({\n  'attributors/attribute/direction': _direction.DirectionAttribute,\n\n  'attributors/class/align': _align.AlignClass,\n  'attributors/class/background': _background.BackgroundClass,\n  'attributors/class/color': _color.ColorClass,\n  'attributors/class/direction': _direction.DirectionClass,\n  'attributors/class/font': _font.FontClass,\n  'attributors/class/size': _size.SizeClass,\n\n  'attributors/style/align': _align.AlignStyle,\n  'attributors/style/background': _background.BackgroundStyle,\n  'attributors/style/color': _color.ColorStyle,\n  'attributors/style/direction': _direction.DirectionStyle,\n  'attributors/style/font': _font.FontStyle,\n  'attributors/style/size': _size.SizeStyle\n}, true);\n\n_core2.default.register({\n  'formats/align': _align.AlignClass,\n  'formats/direction': _direction.DirectionClass,\n  'formats/indent': _indent.IndentClass,\n\n  'formats/background': _background.BackgroundStyle,\n  'formats/color': _color.ColorStyle,\n  'formats/font': _font.FontClass,\n  'formats/size': _size.SizeClass,\n\n  'formats/blockquote': _blockquote2.default,\n  'formats/code-block': _code2.default,\n  'formats/header': _header2.default,\n  'formats/list': _list2.default,\n\n  'formats/bold': _bold2.default,\n  'formats/code': _code.Code,\n  'formats/italic': _italic2.default,\n  'formats/link': _link2.default,\n  'formats/script': _script2.default,\n  'formats/strike': _strike2.default,\n  'formats/underline': _underline2.default,\n\n  'formats/image': _image2.default,\n  'formats/video': _video2.default,\n\n  'formats/list/item': _list.ListItem,\n\n  'modules/formula': _formula2.default,\n  'modules/syntax': _syntax2.default,\n  'modules/toolbar': _toolbar2.default,\n\n  'themes/bubble': _bubble2.default,\n  'themes/snow': _snow2.default,\n\n  'ui/icons': _icons2.default,\n  'ui/picker': _picker2.default,\n  'ui/icon-picker': _iconPicker2.default,\n  'ui/color-picker': _colorPicker2.default,\n  'ui/tooltip': _tooltip2.default\n}, true);\n\nexports.default = _core2.default;\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.IndentClass = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IdentAttributor = function (_Parchment$Attributor) {\n  _inherits(IdentAttributor, _Parchment$Attributor);\n\n  function IdentAttributor() {\n    _classCallCheck(this, IdentAttributor);\n\n    return _possibleConstructorReturn(this, (IdentAttributor.__proto__ || Object.getPrototypeOf(IdentAttributor)).apply(this, arguments));\n  }\n\n  _createClass(IdentAttributor, [{\n    key: 'add',\n    value: function add(node, value) {\n      if (value === '+1' || value === '-1') {\n        var indent = this.value(node) || 0;\n        value = value === '+1' ? indent + 1 : indent - 1;\n      }\n      if (value === 0) {\n        this.remove(node);\n        return true;\n      } else {\n        return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'add', this).call(this, node, value);\n      }\n    }\n  }, {\n    key: 'canAdd',\n    value: function canAdd(node, value) {\n      return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, value) || _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, parseInt(value));\n    }\n  }, {\n    key: 'value',\n    value: function value(node) {\n      return parseInt(_get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'value', this).call(this, node)) || undefined; // Don't return NaN\n    }\n  }]);\n\n  return IdentAttributor;\n}(_parchment2.default.Attributor.Class);\n\nvar IndentClass = new IdentAttributor('indent', 'ql-indent', {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\n\nexports.IndentClass = IndentClass;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Blockquote = function (_Block) {\n  _inherits(Blockquote, _Block);\n\n  function Blockquote() {\n    _classCallCheck(this, Blockquote);\n\n    return _possibleConstructorReturn(this, (Blockquote.__proto__ || Object.getPrototypeOf(Blockquote)).apply(this, arguments));\n  }\n\n  return Blockquote;\n}(_block2.default);\n\nBlockquote.blotName = 'blockquote';\nBlockquote.tagName = 'blockquote';\n\nexports.default = Blockquote;\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Header = function (_Block) {\n  _inherits(Header, _Block);\n\n  function Header() {\n    _classCallCheck(this, Header);\n\n    return _possibleConstructorReturn(this, (Header.__proto__ || Object.getPrototypeOf(Header)).apply(this, arguments));\n  }\n\n  _createClass(Header, null, [{\n    key: 'formats',\n    value: function formats(domNode) {\n      return this.tagName.indexOf(domNode.tagName) + 1;\n    }\n  }]);\n\n  return Header;\n}(_block2.default);\n\nHeader.blotName = 'header';\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n\nexports.default = Header;\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.ListItem = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ListItem = function (_Block) {\n  _inherits(ListItem, _Block);\n\n  function ListItem() {\n    _classCallCheck(this, ListItem);\n\n    return _possibleConstructorReturn(this, (ListItem.__proto__ || Object.getPrototypeOf(ListItem)).apply(this, arguments));\n  }\n\n  _createClass(ListItem, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (name === List.blotName && !value) {\n        this.replaceWith(_parchment2.default.create(this.statics.scope));\n      } else {\n        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      if (this.prev == null && this.next == null) {\n        this.parent.remove();\n      } else {\n        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'remove', this).call(this);\n      }\n    }\n  }, {\n    key: 'replaceWith',\n    value: function replaceWith(name, value) {\n      this.parent.isolate(this.offset(this.parent), this.length());\n      if (name === this.parent.statics.blotName) {\n        this.parent.replaceWith(name, value);\n        return this;\n      } else {\n        this.parent.unwrap();\n        return _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'replaceWith', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'formats',\n    value: function formats(domNode) {\n      return domNode.tagName === this.tagName ? undefined : _get(ListItem.__proto__ || Object.getPrototypeOf(ListItem), 'formats', this).call(this, domNode);\n    }\n  }]);\n\n  return ListItem;\n}(_block2.default);\n\nListItem.blotName = 'list-item';\nListItem.tagName = 'LI';\n\nvar List = function (_Container) {\n  _inherits(List, _Container);\n\n  _createClass(List, null, [{\n    key: 'create',\n    value: function create(value) {\n      var tagName = value === 'ordered' ? 'OL' : 'UL';\n      var node = _get(List.__proto__ || Object.getPrototypeOf(List), 'create', this).call(this, tagName);\n      if (value === 'checked' || value === 'unchecked') {\n        node.setAttribute('data-checked', value === 'checked');\n      }\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      if (domNode.tagName === 'OL') return 'ordered';\n      if (domNode.tagName === 'UL') {\n        if (domNode.hasAttribute('data-checked')) {\n          return domNode.getAttribute('data-checked') === 'true' ? 'checked' : 'unchecked';\n        } else {\n          return 'bullet';\n        }\n      }\n      return undefined;\n    }\n  }]);\n\n  function List(domNode) {\n    _classCallCheck(this, List);\n\n    var _this2 = _possibleConstructorReturn(this, (List.__proto__ || Object.getPrototypeOf(List)).call(this, domNode));\n\n    var listEventHandler = function listEventHandler(e) {\n      if (e.target.parentNode !== domNode) return;\n      var format = _this2.statics.formats(domNode);\n      var blot = _parchment2.default.find(e.target);\n      if (format === 'checked') {\n        blot.format('list', 'unchecked');\n      } else if (format === 'unchecked') {\n        blot.format('list', 'checked');\n      }\n    };\n\n    domNode.addEventListener('touchstart', listEventHandler);\n    domNode.addEventListener('mousedown', listEventHandler);\n    return _this2;\n  }\n\n  _createClass(List, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (this.children.length > 0) {\n        this.children.tail.format(name, value);\n      }\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      // We don't inherit from FormatBlot\n      return _defineProperty({}, this.statics.blotName, this.statics.formats(this.domNode));\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      if (blot instanceof ListItem) {\n        _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'insertBefore', this).call(this, blot, ref);\n      } else {\n        var index = ref == null ? this.length() : ref.offset(this);\n        var after = this.split(index);\n        after.parent.insertBefore(blot, after);\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'optimize', this).call(this, context);\n      var next = this.next;\n      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && next.domNode.tagName === this.domNode.tagName && next.domNode.getAttribute('data-checked') === this.domNode.getAttribute('data-checked')) {\n        next.moveChildren(this);\n        next.remove();\n      }\n    }\n  }, {\n    key: 'replace',\n    value: function replace(target) {\n      if (target.statics.blotName !== this.statics.blotName) {\n        var item = _parchment2.default.create(this.statics.defaultChild);\n        target.moveChildren(item);\n        this.appendChild(item);\n      }\n      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'replace', this).call(this, target);\n    }\n  }]);\n\n  return List;\n}(_container2.default);\n\nList.blotName = 'list';\nList.scope = _parchment2.default.Scope.BLOCK_BLOT;\nList.tagName = ['OL', 'UL'];\nList.defaultChild = 'list-item';\nList.allowedChildren = [ListItem];\n\nexports.ListItem = ListItem;\nexports.default = List;\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _bold = __webpack_require__(56);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Italic = function (_Bold) {\n  _inherits(Italic, _Bold);\n\n  function Italic() {\n    _classCallCheck(this, Italic);\n\n    return _possibleConstructorReturn(this, (Italic.__proto__ || Object.getPrototypeOf(Italic)).apply(this, arguments));\n  }\n\n  return Italic;\n}(_bold2.default);\n\nItalic.blotName = 'italic';\nItalic.tagName = ['EM', 'I'];\n\nexports.default = Italic;\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Script = function (_Inline) {\n  _inherits(Script, _Inline);\n\n  function Script() {\n    _classCallCheck(this, Script);\n\n    return _possibleConstructorReturn(this, (Script.__proto__ || Object.getPrototypeOf(Script)).apply(this, arguments));\n  }\n\n  _createClass(Script, null, [{\n    key: 'create',\n    value: function create(value) {\n      if (value === 'super') {\n        return document.createElement('sup');\n      } else if (value === 'sub') {\n        return document.createElement('sub');\n      } else {\n        return _get(Script.__proto__ || Object.getPrototypeOf(Script), 'create', this).call(this, value);\n      }\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      if (domNode.tagName === 'SUB') return 'sub';\n      if (domNode.tagName === 'SUP') return 'super';\n      return undefined;\n    }\n  }]);\n\n  return Script;\n}(_inline2.default);\n\nScript.blotName = 'script';\nScript.tagName = ['SUB', 'SUP'];\n\nexports.default = Script;\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Strike = function (_Inline) {\n  _inherits(Strike, _Inline);\n\n  function Strike() {\n    _classCallCheck(this, Strike);\n\n    return _possibleConstructorReturn(this, (Strike.__proto__ || Object.getPrototypeOf(Strike)).apply(this, arguments));\n  }\n\n  return Strike;\n}(_inline2.default);\n\nStrike.blotName = 'strike';\nStrike.tagName = 'S';\n\nexports.default = Strike;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Underline = function (_Inline) {\n  _inherits(Underline, _Inline);\n\n  function Underline() {\n    _classCallCheck(this, Underline);\n\n    return _possibleConstructorReturn(this, (Underline.__proto__ || Object.getPrototypeOf(Underline)).apply(this, arguments));\n  }\n\n  return Underline;\n}(_inline2.default);\n\nUnderline.blotName = 'underline';\nUnderline.tagName = 'U';\n\nexports.default = Underline;\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _link = __webpack_require__(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['alt', 'height', 'width'];\n\nvar Image = function (_Parchment$Embed) {\n  _inherits(Image, _Parchment$Embed);\n\n  function Image() {\n    _classCallCheck(this, Image);\n\n    return _possibleConstructorReturn(this, (Image.__proto__ || Object.getPrototypeOf(Image)).apply(this, arguments));\n  }\n\n  _createClass(Image, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (ATTRIBUTES.indexOf(name) > -1) {\n        if (value) {\n          this.domNode.setAttribute(name, value);\n        } else {\n          this.domNode.removeAttribute(name);\n        }\n      } else {\n        _get(Image.prototype.__proto__ || Object.getPrototypeOf(Image.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Image.__proto__ || Object.getPrototypeOf(Image), 'create', this).call(this, value);\n      if (typeof value === 'string') {\n        node.setAttribute('src', this.sanitize(value));\n      }\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return ATTRIBUTES.reduce(function (formats, attribute) {\n        if (domNode.hasAttribute(attribute)) {\n          formats[attribute] = domNode.getAttribute(attribute);\n        }\n        return formats;\n      }, {});\n    }\n  }, {\n    key: 'match',\n    value: function match(url) {\n      return (/\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url)\n      );\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return (0, _link.sanitize)(url, ['http', 'https', 'data']) ? url : '//:0';\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('src');\n    }\n  }]);\n\n  return Image;\n}(_parchment2.default.Embed);\n\nImage.blotName = 'image';\nImage.tagName = 'IMG';\n\nexports.default = Image;\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _block = __webpack_require__(4);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['height', 'width'];\n\nvar Video = function (_BlockEmbed) {\n  _inherits(Video, _BlockEmbed);\n\n  function Video() {\n    _classCallCheck(this, Video);\n\n    return _possibleConstructorReturn(this, (Video.__proto__ || Object.getPrototypeOf(Video)).apply(this, arguments));\n  }\n\n  _createClass(Video, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (ATTRIBUTES.indexOf(name) > -1) {\n        if (value) {\n          this.domNode.setAttribute(name, value);\n        } else {\n          this.domNode.removeAttribute(name);\n        }\n      } else {\n        _get(Video.prototype.__proto__ || Object.getPrototypeOf(Video.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Video.__proto__ || Object.getPrototypeOf(Video), 'create', this).call(this, value);\n      node.setAttribute('frameborder', '0');\n      node.setAttribute('allowfullscreen', true);\n      node.setAttribute('src', this.sanitize(value));\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return ATTRIBUTES.reduce(function (formats, attribute) {\n        if (domNode.hasAttribute(attribute)) {\n          formats[attribute] = domNode.getAttribute(attribute);\n        }\n        return formats;\n      }, {});\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return _link2.default.sanitize(url);\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('src');\n    }\n  }]);\n\n  return Video;\n}(_block.BlockEmbed);\n\nVideo.blotName = 'video';\nVideo.className = 'ql-video';\nVideo.tagName = 'IFRAME';\n\nexports.default = Video;\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.FormulaBlot = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _embed = __webpack_require__(35);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FormulaBlot = function (_Embed) {\n  _inherits(FormulaBlot, _Embed);\n\n  function FormulaBlot() {\n    _classCallCheck(this, FormulaBlot);\n\n    return _possibleConstructorReturn(this, (FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot)).apply(this, arguments));\n  }\n\n  _createClass(FormulaBlot, null, [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot), 'create', this).call(this, value);\n      if (typeof value === 'string') {\n        window.katex.render(value, node, {\n          throwOnError: false,\n          errorColor: '#f00'\n        });\n        node.setAttribute('data-value', value);\n      }\n      return node;\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('data-value');\n    }\n  }]);\n\n  return FormulaBlot;\n}(_embed2.default);\n\nFormulaBlot.blotName = 'formula';\nFormulaBlot.className = 'ql-formula';\nFormulaBlot.tagName = 'SPAN';\n\nvar Formula = function (_Module) {\n  _inherits(Formula, _Module);\n\n  _createClass(Formula, null, [{\n    key: 'register',\n    value: function register() {\n      _quill2.default.register(FormulaBlot, true);\n    }\n  }]);\n\n  function Formula() {\n    _classCallCheck(this, Formula);\n\n    var _this2 = _possibleConstructorReturn(this, (Formula.__proto__ || Object.getPrototypeOf(Formula)).call(this));\n\n    if (window.katex == null) {\n      throw new Error('Formula module requires KaTeX.');\n    }\n    return _this2;\n  }\n\n  return Formula;\n}(_module2.default);\n\nexports.FormulaBlot = FormulaBlot;\nexports.default = Formula;\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.CodeToken = exports.CodeBlock = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SyntaxCodeBlock = function (_CodeBlock) {\n  _inherits(SyntaxCodeBlock, _CodeBlock);\n\n  function SyntaxCodeBlock() {\n    _classCallCheck(this, SyntaxCodeBlock);\n\n    return _possibleConstructorReturn(this, (SyntaxCodeBlock.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock)).apply(this, arguments));\n  }\n\n  _createClass(SyntaxCodeBlock, [{\n    key: 'replaceWith',\n    value: function replaceWith(block) {\n      this.domNode.textContent = this.domNode.textContent;\n      this.attach();\n      _get(SyntaxCodeBlock.prototype.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock.prototype), 'replaceWith', this).call(this, block);\n    }\n  }, {\n    key: 'highlight',\n    value: function highlight(_highlight) {\n      var text = this.domNode.textContent;\n      if (this.cachedText !== text) {\n        if (text.trim().length > 0 || this.cachedText == null) {\n          this.domNode.innerHTML = _highlight(text);\n          this.domNode.normalize();\n          this.attach();\n        }\n        this.cachedText = text;\n      }\n    }\n  }]);\n\n  return SyntaxCodeBlock;\n}(_code2.default);\n\nSyntaxCodeBlock.className = 'ql-syntax';\n\nvar CodeToken = new _parchment2.default.Attributor.Class('token', 'hljs', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nvar Syntax = function (_Module) {\n  _inherits(Syntax, _Module);\n\n  _createClass(Syntax, null, [{\n    key: 'register',\n    value: function register() {\n      _quill2.default.register(CodeToken, true);\n      _quill2.default.register(SyntaxCodeBlock, true);\n    }\n  }]);\n\n  function Syntax(quill, options) {\n    _classCallCheck(this, Syntax);\n\n    var _this2 = _possibleConstructorReturn(this, (Syntax.__proto__ || Object.getPrototypeOf(Syntax)).call(this, quill, options));\n\n    if (typeof _this2.options.highlight !== 'function') {\n      throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');\n    }\n    var timer = null;\n    _this2.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n      clearTimeout(timer);\n      timer = setTimeout(function () {\n        _this2.highlight();\n        timer = null;\n      }, _this2.options.interval);\n    });\n    _this2.highlight();\n    return _this2;\n  }\n\n  _createClass(Syntax, [{\n    key: 'highlight',\n    value: function highlight() {\n      var _this3 = this;\n\n      if (this.quill.selection.composing) return;\n      this.quill.update(_quill2.default.sources.USER);\n      var range = this.quill.getSelection();\n      this.quill.scroll.descendants(SyntaxCodeBlock).forEach(function (code) {\n        code.highlight(_this3.options.highlight);\n      });\n      this.quill.update(_quill2.default.sources.SILENT);\n      if (range != null) {\n        this.quill.setSelection(range, _quill2.default.sources.SILENT);\n      }\n    }\n  }]);\n\n  return Syntax;\n}(_module2.default);\n\nSyntax.DEFAULTS = {\n  highlight: function () {\n    if (window.hljs == null) return null;\n    return function (text) {\n      var result = window.hljs.highlightAuto(text);\n      return result.value;\n    };\n  }(),\n  interval: 1000\n};\n\nexports.CodeBlock = SyntaxCodeBlock;\nexports.CodeToken = CodeToken;\nexports.default = Syntax;\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <g class=\\\"ql-fill ql-color-label\\\"> <polygon points=\\\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\\\"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points=\\\"6.817 5 6 5 6 6 6.38 6 6.817 5\\\"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points=\\\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\\\"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points=\\\"4.63 10 4 10 4 11 4.192 11 4.63 10\\\"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points=\\\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\\\"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points=\\\"12 6.868 12 6 11.62 6 12 6.868\\\"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points=\\\"12.933 9 13 9 13 8 12.495 8 12.933 9\\\"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points=\\\"5.5 13 9 5 12.5 13\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>\";\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=4 y=5></rect> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=11 y=5></rect> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M7,8c0,4.031-3,5-3,5></path> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M14,8c0,4.031-3,5-3,5></path> </svg>\";\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>\";\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>\";\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-color-label ql-stroke ql-transparent\\\" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points=\\\"5.5 11 9 3 12.5 11\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>\";\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"3 11 5 9 3 7 3 11\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>\";\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"15 12 13 10 15 8 15 12\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>\";\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z /> <path class=ql-fill d=M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z /> <rect class=ql-fill x=3 y=6 width=12 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=2 y=6 width=14 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z /> <path class=ql-fill d=M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z /> <path class=ql-fill d=M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z /> <path class=ql-fill d=M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z /> <rect class=ql-fill x=2 y=6 width=8 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z /> <path class=ql-fill d=M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z /> <path class=ql-fill d=M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=8 y=6 width=8 height=6 rx=1 ry=1 transform=\\\"translate(24 18) rotate(-180)\\\"/> </svg>\";\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>\";\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z /> </svg>\";\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z /> </svg>\";\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>\";\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class=\\\"ql-even ql-fill\\\" points=\\\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=\\\"ql-fill ql-stroke\\\" points=\\\"3 7 3 11 5 9 3 7\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"5 7 5 11 3 9 5 7\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class=\\\"ql-even ql-stroke\\\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class=\\\"ql-even ql-stroke\\\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>\";\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class=\\\"ql-stroke ql-thin\\\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class=\\\"ql-stroke ql-thin\\\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class=\\\"ql-stroke ql-thin\\\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>\";\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>\";\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points=\\\"3 4 4 5 6 3\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points=\\\"3 14 4 15 6 13\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"3 9 4 10 6 8\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>\";\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>\";\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-stroke ql-thin\\\" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>\";\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>\";\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>\";\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=ql-stroke points=\\\"7 11 9 13 11 11 7 11\\\"></polygon> <polygon class=ql-stroke points=\\\"7 7 9 5 11 7 7 7\\\"></polygon> </svg>\";\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BubbleTooltip = undefined;\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(43);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _selection = __webpack_require__(15);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [['bold', 'italic', 'link'], [{ header: 1 }, { header: 2 }, 'blockquote']];\n\nvar BubbleTheme = function (_BaseTheme) {\n  _inherits(BubbleTheme, _BaseTheme);\n\n  function BubbleTheme(quill, options) {\n    _classCallCheck(this, BubbleTheme);\n\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n\n    var _this = _possibleConstructorReturn(this, (BubbleTheme.__proto__ || Object.getPrototypeOf(BubbleTheme)).call(this, quill, options));\n\n    _this.quill.container.classList.add('ql-bubble');\n    return _this;\n  }\n\n  _createClass(BubbleTheme, [{\n    key: 'extendToolbar',\n    value: function extendToolbar(toolbar) {\n      this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n      this.tooltip.root.appendChild(toolbar.container);\n      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n    }\n  }]);\n\n  return BubbleTheme;\n}(_base2.default);\n\nBubbleTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function link(value) {\n          if (!value) {\n            this.quill.format('link', false);\n          } else {\n            this.quill.theme.tooltip.edit();\n          }\n        }\n      }\n    }\n  }\n});\n\nvar BubbleTooltip = function (_BaseTooltip) {\n  _inherits(BubbleTooltip, _BaseTooltip);\n\n  function BubbleTooltip(quill, bounds) {\n    _classCallCheck(this, BubbleTooltip);\n\n    var _this2 = _possibleConstructorReturn(this, (BubbleTooltip.__proto__ || Object.getPrototypeOf(BubbleTooltip)).call(this, quill, bounds));\n\n    _this2.quill.on(_emitter2.default.events.EDITOR_CHANGE, function (type, range, oldRange, source) {\n      if (type !== _emitter2.default.events.SELECTION_CHANGE) return;\n      if (range != null && range.length > 0 && source === _emitter2.default.sources.USER) {\n        _this2.show();\n        // Lock our width so we will expand beyond our offsetParent boundaries\n        _this2.root.style.left = '0px';\n        _this2.root.style.width = '';\n        _this2.root.style.width = _this2.root.offsetWidth + 'px';\n        var lines = _this2.quill.getLines(range.index, range.length);\n        if (lines.length === 1) {\n          _this2.position(_this2.quill.getBounds(range));\n        } else {\n          var lastLine = lines[lines.length - 1];\n          var index = _this2.quill.getIndex(lastLine);\n          var length = Math.min(lastLine.length() - 1, range.index + range.length - index);\n          var _bounds = _this2.quill.getBounds(new _selection.Range(index, length));\n          _this2.position(_bounds);\n        }\n      } else if (document.activeElement !== _this2.textbox && _this2.quill.hasFocus()) {\n        _this2.hide();\n      }\n    });\n    return _this2;\n  }\n\n  _createClass(BubbleTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this3 = this;\n\n      _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'listen', this).call(this);\n      this.root.querySelector('.ql-close').addEventListener('click', function () {\n        _this3.root.classList.remove('ql-editing');\n      });\n      this.quill.on(_emitter2.default.events.SCROLL_OPTIMIZE, function () {\n        // Let selection be restored by toolbar handlers before repositioning\n        setTimeout(function () {\n          if (_this3.root.classList.contains('ql-hidden')) return;\n          var range = _this3.quill.getSelection();\n          if (range != null) {\n            _this3.position(_this3.quill.getBounds(range));\n          }\n        }, 1);\n      });\n    }\n  }, {\n    key: 'cancel',\n    value: function cancel() {\n      this.show();\n    }\n  }, {\n    key: 'position',\n    value: function position(reference) {\n      var shift = _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'position', this).call(this, reference);\n      var arrow = this.root.querySelector('.ql-tooltip-arrow');\n      arrow.style.marginLeft = '';\n      if (shift === 0) return shift;\n      arrow.style.marginLeft = -1 * shift - arrow.offsetWidth / 2 + 'px';\n    }\n  }]);\n\n  return BubbleTooltip;\n}(_base.BaseTooltip);\n\nBubbleTooltip.TEMPLATE = ['<span class=\"ql-tooltip-arrow\"></span>', '<div class=\"ql-tooltip-editor\">', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-close\"></a>', '</div>'].join('');\n\nexports.BubbleTooltip = BubbleTooltip;\nexports.default = BubbleTheme;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(63);\n\n\n/***/ })\n/******/ ])[\"default\"];\n});\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(745).Buffer))\n\n/***/ }),\n/* 745 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(global) {/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n\n\nvar base64 = __webpack_require__(746)\nvar ieee754 = __webpack_require__(747)\nvar isArray = __webpack_require__(748)\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(49)))\n\n/***/ }),\n/* 746 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n\n/***/ }),\n/* 747 */\n/***/ (function(module, exports) {\n\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n\n/***/ }),\n/* 748 */\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n/***/ }),\n/* 749 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar idx = 0;\nvar Fieldset = /** @class */ (function () {\n    function Fieldset(el) {\n        this.el = el;\n        this.collapsed = false;\n        this.collapsedChange = new core_1.EventEmitter();\n        this.onBeforeToggle = new core_1.EventEmitter();\n        this.onAfterToggle = new core_1.EventEmitter();\n        this.id = \"ui-fieldset-\" + idx++;\n    }\n    Fieldset.prototype.toggle = function (event) {\n        if (this.animating) {\n            return false;\n        }\n        this.animating = true;\n        this.onBeforeToggle.emit({ originalEvent: event, collapsed: this.collapsed });\n        if (this.collapsed)\n            this.expand(event);\n        else\n            this.collapse(event);\n        this.onAfterToggle.emit({ originalEvent: event, collapsed: this.collapsed });\n        event.preventDefault();\n    };\n    Fieldset.prototype.expand = function (event) {\n        this.collapsed = false;\n        this.collapsedChange.emit(this.collapsed);\n    };\n    Fieldset.prototype.collapse = function (event) {\n        this.collapsed = true;\n        this.collapsedChange.emit(this.collapsed);\n    };\n    Fieldset.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Fieldset.prototype.onToggleDone = function (event) {\n        this.animating = false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Fieldset.prototype, \"legend\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Fieldset.prototype, \"toggleable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Fieldset.prototype, \"collapsed\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Fieldset.prototype, \"collapsedChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Fieldset.prototype, \"onBeforeToggle\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Fieldset.prototype, \"onAfterToggle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Fieldset.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Fieldset.prototype, \"styleClass\", void 0);\n    Fieldset = __decorate([\n        core_1.Component({\n            selector: 'p-fieldset',\n            template: \"\\n        <fieldset [attr.id]=\\\"id\\\" [ngClass]=\\\"{'ui-fieldset ui-widget ui-widget-content ui-corner-all': true, 'ui-fieldset-toggleable': toggleable}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <legend class=\\\"ui-fieldset-legend ui-corner-all ui-state-default ui-unselectable-text\\\">\\n                <ng-container *ngIf=\\\"toggleable; else legendContent\\\">\\n                    <a href=\\\"#\\\" (click)=\\\"toggle($event)\\\" [attr.aria-controls]=\\\"id + '-content'\\\" [attr.aria-expanded]=\\\"!collapsed\\\" [attr.tabindex]=\\\"toggleable ? null : -1\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"legendContent\\\"></ng-container>\\n                    </a>\\n                </ng-container>\\n                <ng-template #legendContent>\\n                    <span class=\\\"ui-fieldset-toggler fa fa-w\\\" *ngIf=\\\"toggleable\\\" [ngClass]=\\\"{'fa-minus': !collapsed,'fa-plus':collapsed}\\\"></span>\\n                    <span class=\\\"ui-fieldset-legend-text\\\">{{legend}}</span>\\n                    <ng-content select=\\\"p-header\\\"></ng-content>\\n                </ng-template>\\n            </legend>\\n            <div [attr.id]=\\\"id + '-content'\\\" class=\\\"ui-fieldset-content-wrapper\\\" [@fieldsetContent]=\\\"collapsed ? 'hidden' : 'visible'\\\" \\n                        [ngClass]=\\\"{'ui-fieldset-content-wrapper-overflown': collapsed||animating}\\\" [attr.aria-hidden]=\\\"collapsed\\\"\\n                         (@fieldsetContent.done)=\\\"onToggleDone($event)\\\" role=\\\"region\\\">\\n                <div class=\\\"ui-fieldset-content\\\">\\n                    <ng-content></ng-content>\\n                </div>\\n            </div>\\n        </fieldset>\\n    \",\n            animations: [\n                animations_1.trigger('fieldsetContent', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0px'\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*'\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], Fieldset);\n    return Fieldset;\n}());\nexports.Fieldset = Fieldset;\nvar FieldsetModule = /** @class */ (function () {\n    function FieldsetModule() {\n    }\n    FieldsetModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Fieldset, shared_1.SharedModule],\n            declarations: [Fieldset]\n        })\n    ], FieldsetModule);\n    return FieldsetModule;\n}());\nexports.FieldsetModule = FieldsetModule;\n//# sourceMappingURL=fieldset.js.map\n\n/***/ }),\n/* 750 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar platform_browser_1 = __webpack_require__(6);\nvar button_1 = __webpack_require__(37);\nvar messages_1 = __webpack_require__(235);\nvar progressbar_1 = __webpack_require__(237);\nvar domhandler_1 = __webpack_require__(9);\nvar shared_1 = __webpack_require__(15);\nvar FileUpload = /** @class */ (function () {\n    function FileUpload(el, domHandler, sanitizer, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.sanitizer = sanitizer;\n        this.zone = zone;\n        this.method = 'POST';\n        this.invalidFileSizeMessageSummary = '{0}: Invalid file size, ';\n        this.invalidFileSizeMessageDetail = 'maximum upload size is {0}.';\n        this.invalidFileTypeMessageSummary = '{0}: Invalid file type, ';\n        this.invalidFileTypeMessageDetail = 'allowed file types: {0}.';\n        this.previewWidth = 50;\n        this.chooseLabel = 'Choose';\n        this.uploadLabel = 'Upload';\n        this.cancelLabel = 'Cancel';\n        this.showUploadButton = true;\n        this.showCancelButton = true;\n        this.mode = 'advanced';\n        this.onBeforeUpload = new core_1.EventEmitter();\n        this.onBeforeSend = new core_1.EventEmitter();\n        this.onUpload = new core_1.EventEmitter();\n        this.onError = new core_1.EventEmitter();\n        this.onClear = new core_1.EventEmitter();\n        this.onRemove = new core_1.EventEmitter();\n        this.onSelect = new core_1.EventEmitter();\n        this.onProgress = new core_1.EventEmitter();\n        this.uploadHandler = new core_1.EventEmitter();\n        this.progress = 0;\n    }\n    FileUpload.prototype.ngOnInit = function () {\n        this.files = [];\n    };\n    FileUpload.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'file':\n                    _this.fileTemplate = item.template;\n                    break;\n                case 'content':\n                    _this.contentTemplate = item.template;\n                    break;\n                case 'toolbar':\n                    _this.toolbarTemplate = item.template;\n                    break;\n                default:\n                    _this.fileTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    FileUpload.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.mode === 'advanced') {\n            this.zone.runOutsideAngular(function () {\n                _this.content.nativeElement.addEventListener('dragover', _this.onDragOver.bind(_this));\n            });\n        }\n    };\n    FileUpload.prototype.onFileSelect = function (event) {\n        if (event.type !== 'drop' && this.isIE11() && this.duplicateIEEvent) {\n            this.duplicateIEEvent = false;\n            return;\n        }\n        this.msgs = [];\n        if (!this.multiple) {\n            this.files = [];\n        }\n        var files = event.dataTransfer ? event.dataTransfer.files : event.target.files;\n        for (var i = 0; i < files.length; i++) {\n            var file = files[i];\n            if (!this.isFileSelected(file)) {\n                if (this.validate(file)) {\n                    if (this.isImage(file)) {\n                        file.objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));\n                    }\n                    this.files.push(files[i]);\n                }\n            }\n        }\n        this.onSelect.emit({ originalEvent: event, files: files });\n        if (this.hasFiles() && this.auto) {\n            this.upload();\n        }\n        if (event.type !== 'drop' && this.isIE11()) {\n            this.clearIEInput();\n        }\n        else {\n            this.clearInputElement();\n        }\n    };\n    FileUpload.prototype.isFileSelected = function (file) {\n        for (var _i = 0, _a = this.files; _i < _a.length; _i++) {\n            var sFile = _a[_i];\n            if ((sFile.name + sFile.type + sFile.size) === (file.name + file.type + file.size)) {\n                return true;\n            }\n        }\n        return false;\n    };\n    FileUpload.prototype.isIE11 = function () {\n        return !!window['MSInputMethodContext'] && !!document['documentMode'];\n    };\n    FileUpload.prototype.validate = function (file) {\n        if (this.accept && !this.isFileTypeValid(file)) {\n            this.msgs.push({\n                severity: 'error',\n                summary: this.invalidFileTypeMessageSummary.replace('{0}', file.name),\n                detail: this.invalidFileTypeMessageDetail.replace('{0}', this.accept)\n            });\n            return false;\n        }\n        if (this.maxFileSize && file.size > this.maxFileSize) {\n            this.msgs.push({\n                severity: 'error',\n                summary: this.invalidFileSizeMessageSummary.replace('{0}', file.name),\n                detail: this.invalidFileSizeMessageDetail.replace('{0}', this.formatSize(this.maxFileSize))\n            });\n            return false;\n        }\n        return true;\n    };\n    FileUpload.prototype.isFileTypeValid = function (file) {\n        var acceptableTypes = this.accept.split(',');\n        for (var _i = 0, acceptableTypes_1 = acceptableTypes; _i < acceptableTypes_1.length; _i++) {\n            var type = acceptableTypes_1[_i];\n            var acceptable = this.isWildcard(type) ? this.getTypeClass(file.type) === this.getTypeClass(type)\n                : file.type == type || this.getFileExtension(file) === type;\n            if (acceptable) {\n                return true;\n            }\n        }\n        return false;\n    };\n    FileUpload.prototype.getTypeClass = function (fileType) {\n        return fileType.substring(0, fileType.indexOf('/'));\n    };\n    FileUpload.prototype.isWildcard = function (fileType) {\n        return fileType.indexOf('*') !== -1;\n    };\n    FileUpload.prototype.getFileExtension = function (file) {\n        return '.' + file.name.split('.').pop();\n    };\n    FileUpload.prototype.isImage = function (file) {\n        return /^image\\//.test(file.type);\n    };\n    FileUpload.prototype.onImageLoad = function (img) {\n        window.URL.revokeObjectURL(img.src);\n    };\n    FileUpload.prototype.upload = function () {\n        var _this = this;\n        if (this.customUpload) {\n            this.uploadHandler.emit({\n                files: this.files\n            });\n        }\n        else {\n            this.msgs = [];\n            var xhr_1 = new XMLHttpRequest(), formData = new FormData();\n            this.onBeforeUpload.emit({\n                'xhr': xhr_1,\n                'formData': formData\n            });\n            for (var i = 0; i < this.files.length; i++) {\n                formData.append(this.name, this.files[i], this.files[i].name);\n            }\n            xhr_1.upload.addEventListener('progress', function (e) {\n                if (e.lengthComputable) {\n                    _this.progress = Math.round((e.loaded * 100) / e.total);\n                }\n                _this.onProgress.emit({ originalEvent: e, progress: _this.progress });\n            }, false);\n            xhr_1.onreadystatechange = function () {\n                if (xhr_1.readyState == 4) {\n                    _this.progress = 0;\n                    if (xhr_1.status >= 200 && xhr_1.status < 300)\n                        _this.onUpload.emit({ xhr: xhr_1, files: _this.files });\n                    else\n                        _this.onError.emit({ xhr: xhr_1, files: _this.files });\n                    _this.clear();\n                }\n            };\n            xhr_1.open(this.method, this.url, true);\n            this.onBeforeSend.emit({\n                'xhr': xhr_1,\n                'formData': formData\n            });\n            xhr_1.withCredentials = this.withCredentials;\n            xhr_1.send(formData);\n        }\n    };\n    FileUpload.prototype.clear = function () {\n        this.files = [];\n        this.onClear.emit();\n        this.clearInputElement();\n    };\n    FileUpload.prototype.remove = function (event, index) {\n        this.clearInputElement();\n        this.onRemove.emit({ originalEvent: event, file: this.files[index] });\n        this.files.splice(index, 1);\n    };\n    FileUpload.prototype.clearInputElement = function () {\n        if (this.advancedFileInput && this.advancedFileInput.nativeElement) {\n            this.advancedFileInput.nativeElement.value = '';\n        }\n        if (this.basicFileInput && this.basicFileInput.nativeElement) {\n            this.basicFileInput.nativeElement.value = '';\n        }\n    };\n    FileUpload.prototype.clearIEInput = function () {\n        if (this.advancedFileInput && this.advancedFileInput.nativeElement) {\n            this.duplicateIEEvent = true; //IE11 fix to prevent onFileChange trigger again\n            this.advancedFileInput.nativeElement.value = '';\n        }\n    };\n    FileUpload.prototype.hasFiles = function () {\n        return this.files && this.files.length > 0;\n    };\n    FileUpload.prototype.onDragEnter = function (e) {\n        if (!this.disabled) {\n            e.stopPropagation();\n            e.preventDefault();\n        }\n    };\n    FileUpload.prototype.onDragOver = function (e) {\n        if (!this.disabled) {\n            this.domHandler.addClass(this.content.nativeElement, 'ui-fileupload-highlight');\n            this.dragHighlight = true;\n            e.stopPropagation();\n            e.preventDefault();\n        }\n    };\n    FileUpload.prototype.onDragLeave = function (event) {\n        if (!this.disabled) {\n            this.domHandler.removeClass(this.content.nativeElement, 'ui-fileupload-highlight');\n        }\n    };\n    FileUpload.prototype.onDrop = function (event) {\n        if (!this.disabled) {\n            this.domHandler.removeClass(this.content.nativeElement, 'ui-fileupload-highlight');\n            event.stopPropagation();\n            event.preventDefault();\n            var files = event.dataTransfer ? event.dataTransfer.files : event.target.files;\n            var allowDrop = this.multiple || (files && files.length === 1);\n            if (allowDrop) {\n                this.onFileSelect(event);\n            }\n        }\n    };\n    FileUpload.prototype.onFocus = function () {\n        this.focus = true;\n    };\n    FileUpload.prototype.onBlur = function () {\n        this.focus = false;\n    };\n    FileUpload.prototype.formatSize = function (bytes) {\n        if (bytes == 0) {\n            return '0 B';\n        }\n        var k = 1000, dm = 3, sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], i = Math.floor(Math.log(bytes) / Math.log(k));\n        return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n    };\n    FileUpload.prototype.onSimpleUploaderClick = function (event) {\n        if (this.hasFiles()) {\n            this.upload();\n        }\n    };\n    FileUpload.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    FileUpload.prototype.ngOnDestroy = function () {\n        if (this.content && this.content.nativeElement) {\n            this.content.nativeElement.removeEventListener('dragover', this.onDragOver);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"url\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"method\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"accept\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"auto\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"withCredentials\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], FileUpload.prototype, \"maxFileSize\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"invalidFileSizeMessageSummary\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"invalidFileSizeMessageDetail\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"invalidFileTypeMessageSummary\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"invalidFileTypeMessageDetail\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], FileUpload.prototype, \"previewWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"chooseLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"uploadLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"cancelLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"showUploadButton\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"showCancelButton\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"mode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"customUpload\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onBeforeUpload\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onBeforeSend\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onUpload\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onError\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onClear\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onRemove\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onProgress\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"uploadHandler\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], FileUpload.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ViewChild('advancedfileinput'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], FileUpload.prototype, \"advancedFileInput\", void 0);\n    __decorate([\n        core_1.ViewChild('basicfileinput'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], FileUpload.prototype, \"basicFileInput\", void 0);\n    __decorate([\n        core_1.ViewChild('content'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], FileUpload.prototype, \"content\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], FileUpload.prototype, \"files\", void 0);\n    FileUpload = __decorate([\n        core_1.Component({\n            selector: 'p-fileUpload',\n            template: \"\\n        <div [ngClass]=\\\"'ui-fileupload ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"mode === 'advanced'\\\">\\n            <div class=\\\"ui-fileupload-buttonbar ui-widget-header ui-corner-top\\\">\\n                <span class=\\\"ui-fileupload-choose\\\" [label]=\\\"chooseLabel\\\" icon=\\\"fa-plus\\\" pButton [ngClass]=\\\"{'ui-state-focus': focus, 'ui-state-disabled':disabled}\\\"> \\n                    <input #advancedfileinput type=\\\"file\\\" (change)=\\\"onFileSelect($event)\\\" [multiple]=\\\"multiple\\\" [accept]=\\\"accept\\\" [disabled]=\\\"disabled\\\" (focus)=\\\"onFocus()\\\" (blur)=\\\"onBlur()\\\">\\n                </span>\\n\\n                <button *ngIf=\\\"!auto&&showUploadButton\\\" type=\\\"button\\\" [label]=\\\"uploadLabel\\\" icon=\\\"fa-upload\\\" pButton (click)=\\\"upload()\\\" [disabled]=\\\"!hasFiles()\\\"></button>\\n                <button *ngIf=\\\"!auto&&showCancelButton\\\" type=\\\"button\\\" [label]=\\\"cancelLabel\\\" icon=\\\"fa-close\\\" pButton (click)=\\\"clear()\\\" [disabled]=\\\"!hasFiles()\\\"></button>\\n            \\n                <ng-container *ngTemplateOutlet=\\\"toolbarTemplate\\\"></ng-container>\\n            </div>\\n            <div #content [ngClass]=\\\"{'ui-fileupload-content ui-widget-content ui-corner-bottom':true}\\\" \\n                (dragenter)=\\\"onDragEnter($event)\\\" (dragleave)=\\\"onDragLeave($event)\\\" (drop)=\\\"onDrop($event)\\\">\\n                <p-progressBar [value]=\\\"progress\\\" [showValue]=\\\"false\\\" *ngIf=\\\"hasFiles()\\\"></p-progressBar>\\n                \\n                <p-messages [value]=\\\"msgs\\\" [enableService]=\\\"false\\\"></p-messages>\\n                \\n                <div class=\\\"ui-fileupload-files\\\" *ngIf=\\\"hasFiles()\\\">\\n                    <div *ngIf=\\\"!fileTemplate\\\">\\n                        <div class=\\\"ui-fileupload-row\\\" *ngFor=\\\"let file of files; let i = index;\\\">\\n                            <div><img [src]=\\\"file.objectURL\\\" *ngIf=\\\"isImage(file)\\\" [width]=\\\"previewWidth\\\" /></div>\\n                            <div>{{file.name}}</div>\\n                            <div>{{formatSize(file.size)}}</div>\\n                            <div><button type=\\\"button\\\" icon=\\\"fa-close\\\" pButton (click)=\\\"remove($event,i)\\\"></button></div>\\n                        </div>\\n                    </div>\\n                    <div *ngIf=\\\"fileTemplate\\\">\\n                        <ng-template ngFor [ngForOf]=\\\"files\\\" [ngForTemplate]=\\\"fileTemplate\\\"></ng-template>\\n                    </div>\\n                </div>\\n                <ng-container *ngTemplateOutlet=\\\"contentTemplate\\\"></ng-container>\\n            </div>\\n        </div>\\n        <span class=\\\"ui-button ui-fileupload-choose ui-widget ui-state-default ui-corner-all ui-button-text-icon-left\\\" *ngIf=\\\"mode === 'basic'\\\" \\n        (mouseup)=\\\"onSimpleUploaderClick($event)\\\"\\n        [ngClass]=\\\"{'ui-fileupload-choose-selected': hasFiles(),'ui-state-focus': focus, 'ui-state-disabled':disabled}\\\">\\n            <span class=\\\"ui-button-icon-left fa\\\" [ngClass]=\\\"{'fa-plus': !hasFiles()||auto, 'fa-upload': hasFiles()&&!auto}\\\"></span>\\n            <span class=\\\"ui-button-text ui-clickable\\\">{{auto ? chooseLabel : hasFiles() ? files[0].name : chooseLabel}}</span>\\n            <input #basicfileinput type=\\\"file\\\" [accept]=\\\"accept\\\" [multiple]=\\\"multiple\\\" [disabled]=\\\"disabled\\\"\\n                (change)=\\\"onFileSelect($event)\\\" *ngIf=\\\"!hasFiles()\\\" (focus)=\\\"onFocus()\\\" (blur)=\\\"onBlur()\\\">\\n        </span>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, platform_browser_1.DomSanitizer, core_1.NgZone])\n    ], FileUpload);\n    return FileUpload;\n}());\nexports.FileUpload = FileUpload;\nvar FileUploadModule = /** @class */ (function () {\n    function FileUploadModule() {\n    }\n    FileUploadModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule, button_1.ButtonModule, progressbar_1.ProgressBarModule, messages_1.MessagesModule],\n            exports: [FileUpload, shared_1.SharedModule, button_1.ButtonModule, progressbar_1.ProgressBarModule, messages_1.MessagesModule],\n            declarations: [FileUpload]\n        })\n    ], FileUploadModule);\n    return FileUploadModule;\n}());\nexports.FileUploadModule = FileUploadModule;\n//# sourceMappingURL=fileupload.js.map\n\n/***/ }),\n/* 751 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar Galleria = /** @class */ (function () {\n    function Galleria(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.panelWidth = 600;\n        this.panelHeight = 400;\n        this.frameWidth = 60;\n        this.frameHeight = 40;\n        this.activeIndex = 0;\n        this.showFilmstrip = true;\n        this.autoPlay = true;\n        this.transitionInterval = 4000;\n        this.showCaption = true;\n        this.effectDuration = 500;\n        this.onImageClicked = new core_1.EventEmitter();\n        this.onImageChange = new core_1.EventEmitter();\n        this.stripLeft = 0;\n    }\n    Galleria.prototype.ngAfterViewChecked = function () {\n        if (this.imagesChanged) {\n            this.stopSlideshow();\n            this.render();\n            this.imagesChanged = false;\n        }\n    };\n    Object.defineProperty(Galleria.prototype, \"images\", {\n        get: function () {\n            return this._images;\n        },\n        set: function (value) {\n            this._images = value;\n            this.activeIndex = 0;\n            this.imagesChanged = true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Galleria.prototype.ngAfterViewInit = function () {\n        this.container = this.el.nativeElement.children[0];\n        this.panelWrapper = this.domHandler.findSingle(this.el.nativeElement, 'ul.ui-galleria-panel-wrapper');\n        this.initialized = true;\n        if (this.showFilmstrip) {\n            this.stripWrapper = this.domHandler.findSingle(this.container, 'div.ui-galleria-filmstrip-wrapper');\n            this.strip = this.domHandler.findSingle(this.stripWrapper, 'ul.ui-galleria-filmstrip');\n        }\n        if (this.images && this.images.length) {\n            this.render();\n        }\n    };\n    Galleria.prototype.render = function () {\n        this.panels = this.domHandler.find(this.panelWrapper, 'li.ui-galleria-panel');\n        if (this.showFilmstrip) {\n            this.frames = this.domHandler.find(this.strip, 'li.ui-galleria-frame');\n            this.stripWrapper.style.width = this.domHandler.width(this.panelWrapper) - 50 + 'px';\n            this.stripWrapper.style.height = this.frameHeight + 'px';\n        }\n        if (this.showCaption) {\n            this.caption = this.domHandler.findSingle(this.container, 'div.ui-galleria-caption');\n            this.caption.style.bottom = this.showFilmstrip ? this.domHandler.getOuterHeight(this.stripWrapper, true) + 'px' : 0 + 'px';\n            this.caption.style.width = this.domHandler.width(this.panelWrapper) + 'px';\n        }\n        if (this.autoPlay) {\n            this.startSlideshow();\n        }\n        this.container.style.visibility = 'visible';\n    };\n    Galleria.prototype.startSlideshow = function () {\n        var _this = this;\n        this.interval = setInterval(function () {\n            _this.next();\n        }, this.transitionInterval);\n        this.slideshowActive = true;\n    };\n    Galleria.prototype.stopSlideshow = function () {\n        if (this.interval) {\n            clearInterval(this.interval);\n        }\n        this.slideshowActive = false;\n    };\n    Galleria.prototype.clickNavRight = function () {\n        if (this.slideshowActive) {\n            this.stopSlideshow();\n        }\n        this.next();\n    };\n    Galleria.prototype.clickNavLeft = function () {\n        if (this.slideshowActive) {\n            this.stopSlideshow();\n        }\n        this.prev();\n    };\n    Galleria.prototype.frameClick = function (frame) {\n        if (this.slideshowActive) {\n            this.stopSlideshow();\n        }\n        this.select(this.domHandler.index(frame), false);\n    };\n    Galleria.prototype.prev = function () {\n        if (this.activeIndex !== 0) {\n            this.select(this.activeIndex - 1, true);\n        }\n    };\n    Galleria.prototype.next = function () {\n        if (this.activeIndex !== (this.panels.length - 1)) {\n            this.select(this.activeIndex + 1, true);\n        }\n        else {\n            this.select(0, false);\n            this.stripLeft = 0;\n        }\n    };\n    Galleria.prototype.select = function (index, reposition) {\n        if (index !== this.activeIndex) {\n            var oldPanel = this.panels[this.activeIndex], newPanel = this.panels[index];\n            this.domHandler.fadeIn(newPanel, this.effectDuration);\n            if (this.showFilmstrip) {\n                var oldFrame = this.frames[this.activeIndex], newFrame = this.frames[index];\n                if (reposition === undefined || reposition === true) {\n                    var frameLeft = newFrame.offsetLeft, stepFactor = this.frameWidth + parseInt(getComputedStyle(newFrame)['margin-right'], 10), stripLeft = this.strip.offsetLeft, frameViewportLeft = frameLeft + stripLeft, frameViewportRight = frameViewportLeft + this.frameWidth;\n                    if (frameViewportRight > this.domHandler.width(this.stripWrapper))\n                        this.stripLeft -= stepFactor;\n                    else if (frameViewportLeft < 0)\n                        this.stripLeft += stepFactor;\n                }\n            }\n            this.activeIndex = index;\n            this.onImageChange.emit({ index: index });\n        }\n    };\n    Galleria.prototype.clickImage = function (event, image, i) {\n        this.onImageClicked.emit({ originalEvent: event, image: image, index: i });\n    };\n    Galleria.prototype.ngOnDestroy = function () {\n        this.stopSlideshow();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Galleria.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Galleria.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"panelWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"panelHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"frameWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"frameHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"activeIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Galleria.prototype, \"showFilmstrip\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Galleria.prototype, \"autoPlay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"transitionInterval\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Galleria.prototype, \"showCaption\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"effectDuration\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", Object)\n    ], Galleria.prototype, \"onImageClicked\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", Object)\n    ], Galleria.prototype, \"onImageChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Galleria.prototype, \"images\", null);\n    Galleria = __decorate([\n        core_1.Component({\n            selector: 'p-galleria',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-galleria ui-widget ui-widget-content ui-corner-all':true}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [style.width.px]=\\\"panelWidth\\\">\\n            <ul class=\\\"ui-galleria-panel-wrapper\\\" [style.width.px]=\\\"panelWidth\\\" [style.height.px]=\\\"panelHeight\\\">\\n                <li *ngFor=\\\"let image of images;let i=index\\\" class=\\\"ui-galleria-panel\\\" [ngClass]=\\\"{'ui-helper-hidden':i!=activeIndex}\\\"\\n                    [style.width.px]=\\\"panelWidth\\\" [style.height.px]=\\\"panelHeight\\\" (click)=\\\"clickImage($event,image,i)\\\">\\n                    <img class=\\\"ui-panel-images\\\" [src]=\\\"image.source\\\" [alt]=\\\"image.alt\\\" [title]=\\\"image.title\\\"/>\\n                </li>\\n            </ul>\\n            <div [ngClass]=\\\"{'ui-galleria-filmstrip-wrapper':true}\\\" *ngIf=\\\"showFilmstrip\\\">\\n                <ul class=\\\"ui-galleria-filmstrip\\\" style=\\\"transition:left 1s\\\" [style.left.px]=\\\"stripLeft\\\">\\n                    <li #frame *ngFor=\\\"let image of images;let i=index\\\" [ngClass]=\\\"{'ui-galleria-frame-active':i==activeIndex}\\\" class=\\\"ui-galleria-frame\\\" (click)=\\\"frameClick(frame)\\\"\\n                        [style.width.px]=\\\"frameWidth\\\" [style.height.px]=\\\"frameHeight\\\" [style.transition]=\\\"'opacity 0.75s ease'\\\">\\n                        <div class=\\\"ui-galleria-frame-content\\\">\\n                            <img [src]=\\\"image.source\\\" [alt]=\\\"image.alt\\\" [title]=\\\"image.title\\\" class=\\\"ui-galleria-frame-image\\\"\\n                                [style.width.px]=\\\"frameWidth\\\" [style.height.px]=\\\"frameHeight\\\">\\n                        </div>\\n                    </li>\\n                </ul>\\n            </div>\\n            <div class=\\\"ui-galleria-nav-prev fa fa-fw fa-chevron-circle-left\\\" (click)=\\\"clickNavLeft()\\\" [style.bottom.px]=\\\"frameHeight/2\\\" *ngIf=\\\"activeIndex !== 0\\\"></div>\\n            <div class=\\\"ui-galleria-nav-next fa fa-fw fa-chevron-circle-right\\\" (click)=\\\"clickNavRight()\\\" [style.bottom.px]=\\\"frameHeight/2\\\"></div>\\n            <div class=\\\"ui-galleria-caption\\\" *ngIf=\\\"showCaption&&images\\\" style=\\\"display:block\\\">\\n                <h4>{{images[activeIndex]?.title}}</h4><p>{{images[activeIndex]?.alt}}</p>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Galleria);\n    return Galleria;\n}());\nexports.Galleria = Galleria;\nvar GalleriaModule = /** @class */ (function () {\n    function GalleriaModule() {\n    }\n    GalleriaModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Galleria],\n            declarations: [Galleria]\n        })\n    ], GalleriaModule);\n    return GalleriaModule;\n}());\nexports.GalleriaModule = GalleriaModule;\n//# sourceMappingURL=galleria.js.map\n\n/***/ }),\n/* 752 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar GMap = /** @class */ (function () {\n    function GMap(el, differs, cd, zone) {\n        this.el = el;\n        this.cd = cd;\n        this.zone = zone;\n        this.onMapClick = new core_1.EventEmitter();\n        this.onOverlayClick = new core_1.EventEmitter();\n        this.onOverlayDragStart = new core_1.EventEmitter();\n        this.onOverlayDrag = new core_1.EventEmitter();\n        this.onOverlayDragEnd = new core_1.EventEmitter();\n        this.onMapReady = new core_1.EventEmitter();\n        this.onMapDragEnd = new core_1.EventEmitter();\n        this.onZoomChanged = new core_1.EventEmitter();\n        this.differ = differs.find([]).create(null);\n    }\n    GMap.prototype.ngAfterViewChecked = function () {\n        if (!this.map && this.el.nativeElement.offsetParent) {\n            this.initialize();\n        }\n    };\n    GMap.prototype.initialize = function () {\n        var _this = this;\n        this.map = new google.maps.Map(this.el.nativeElement.children[0], this.options);\n        this.onMapReady.emit({\n            map: this.map\n        });\n        if (this.overlays) {\n            for (var _i = 0, _a = this.overlays; _i < _a.length; _i++) {\n                var overlay = _a[_i];\n                overlay.setMap(this.map);\n                this.bindOverlayEvents(overlay);\n            }\n        }\n        this.map.addListener('click', function (event) {\n            _this.zone.run(function () {\n                _this.onMapClick.emit(event);\n            });\n        });\n        this.map.addListener('dragend', function (event) {\n            _this.zone.run(function () {\n                _this.onMapDragEnd.emit(event);\n            });\n        });\n        this.map.addListener('zoom_changed', function (event) {\n            _this.zone.run(function () {\n                _this.onZoomChanged.emit(event);\n            });\n        });\n    };\n    GMap.prototype.bindOverlayEvents = function (overlay) {\n        var _this = this;\n        overlay.addListener('click', function (event) {\n            _this.zone.run(function () {\n                _this.onOverlayClick.emit({\n                    originalEvent: event,\n                    'overlay': overlay,\n                    map: _this.map\n                });\n            });\n        });\n        if (overlay.getDraggable()) {\n            this.bindDragEvents(overlay);\n        }\n    };\n    GMap.prototype.ngDoCheck = function () {\n        var _this = this;\n        var changes = this.differ.diff(this.overlays);\n        if (changes && this.map) {\n            changes.forEachRemovedItem(function (record) {\n                google.maps.event.clearInstanceListeners(record.item);\n                record.item.setMap(null);\n            });\n            changes.forEachAddedItem(function (record) {\n                record.item.setMap(_this.map);\n                record.item.addListener('click', function (event) {\n                    _this.zone.run(function () {\n                        _this.onOverlayClick.emit({\n                            originalEvent: event,\n                            overlay: record.item,\n                            map: _this.map\n                        });\n                    });\n                });\n                if (record.item.getDraggable()) {\n                    _this.bindDragEvents(record.item);\n                }\n            });\n        }\n    };\n    GMap.prototype.bindDragEvents = function (overlay) {\n        var _this = this;\n        overlay.addListener('dragstart', function (event) {\n            _this.zone.run(function () {\n                _this.onOverlayDragStart.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: _this.map\n                });\n            });\n        });\n        overlay.addListener('drag', function (event) {\n            _this.zone.run(function () {\n                _this.onOverlayDrag.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: _this.map\n                });\n            });\n        });\n        overlay.addListener('dragend', function (event) {\n            _this.zone.run(function () {\n                _this.onOverlayDragEnd.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: _this.map\n                });\n            });\n        });\n    };\n    GMap.prototype.getMap = function () {\n        return this.map;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], GMap.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], GMap.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], GMap.prototype, \"options\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], GMap.prototype, \"overlays\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onMapClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onOverlayClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onOverlayDragStart\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onOverlayDrag\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onOverlayDragEnd\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onMapReady\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onMapDragEnd\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onZoomChanged\", void 0);\n    GMap = __decorate([\n        core_1.Component({\n            selector: 'p-gmap',\n            template: \"<div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\"></div>\"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.IterableDiffers, core_1.ChangeDetectorRef, core_1.NgZone])\n    ], GMap);\n    return GMap;\n}());\nexports.GMap = GMap;\nvar GMapModule = /** @class */ (function () {\n    function GMapModule() {\n    }\n    GMapModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [GMap],\n            declarations: [GMap]\n        })\n    ], GMapModule);\n    return GMapModule;\n}());\nexports.GMapModule = GMapModule;\n//# sourceMappingURL=gmap.js.map\n\n/***/ }),\n/* 753 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar messageservice_1 = __webpack_require__(236);\nvar Growl = /** @class */ (function () {\n    function Growl(el, domHandler, differs, messageService, zone) {\n        var _this = this;\n        this.el = el;\n        this.domHandler = domHandler;\n        this.differs = differs;\n        this.messageService = messageService;\n        this.zone = zone;\n        this.life = 3000;\n        this.immutable = true;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.onClick = new core_1.EventEmitter();\n        this.onHover = new core_1.EventEmitter();\n        this.onClose = new core_1.EventEmitter();\n        this.valueChange = new core_1.EventEmitter();\n        this.differ = differs.find([]).create(null);\n        if (messageService) {\n            this.subscription = messageService.messageObserver.subscribe(function (messages) {\n                if (messages) {\n                    if (messages instanceof Array) {\n                        var filteredMessages = messages.filter(function (m) { return _this.key === m.key; });\n                        _this.value = _this.value ? _this.value.concat(filteredMessages) : filteredMessages.slice();\n                    }\n                    else if (_this.key === messages.key) {\n                        _this.value = _this.value ? _this.value.concat([messages]) : [messages];\n                    }\n                }\n                else {\n                    _this.value = null;\n                }\n            });\n        }\n    }\n    Growl.prototype.ngAfterViewInit = function () {\n        if (!this.sticky) {\n            this.initTimeout();\n        }\n    };\n    Object.defineProperty(Growl.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            if (this.containerViewChild && this.containerViewChild.nativeElement && this.immutable) {\n                this.handleValueChange();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Growl.prototype, \"sticky\", {\n        get: function () {\n            return this._sticky;\n        },\n        set: function (value) {\n            if (value && this.timeout) {\n                clearTimeout(this.timeout);\n            }\n            this._sticky = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Growl.prototype.ngDoCheck = function () {\n        if (!this.immutable && this.containerViewChild && this.containerViewChild.nativeElement) {\n            var changes = this.differ.diff(this.value);\n            if (changes) {\n                this.handleValueChange();\n            }\n        }\n    };\n    Growl.prototype.handleValueChange = function () {\n        if (this.preventRerender) {\n            this.preventRerender = false;\n            return;\n        }\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n        this.domHandler.fadeIn(this.containerViewChild.nativeElement, 250);\n        if (!this.sticky) {\n            this.initTimeout();\n        }\n    };\n    Growl.prototype.initTimeout = function () {\n        var _this = this;\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n        }\n        this.zone.runOutsideAngular(function () {\n            _this.timeout = setTimeout(function () {\n                _this.zone.run(function () {\n                    _this.removeAll();\n                });\n            }, _this.life);\n        });\n    };\n    Growl.prototype.remove = function (index, msgel) {\n        var _this = this;\n        this.closeIconClick = true;\n        this.domHandler.fadeOut(msgel, 250);\n        setTimeout(function () {\n            _this.preventRerender = true;\n            _this.onClose.emit({ message: _this.value[index] });\n            if (_this.immutable) {\n                _this._value = _this.value.filter(function (val, i) { return i != index; });\n                _this.valueChange.emit(_this._value);\n            }\n            else {\n                _this._value.splice(index, 1);\n            }\n        }, 250);\n    };\n    Growl.prototype.removeAll = function () {\n        var _this = this;\n        if (this.value && this.value.length) {\n            this.domHandler.fadeOut(this.containerViewChild.nativeElement, 250);\n            setTimeout(function () {\n                _this.value.forEach(function (msg, index) { return _this.onClose.emit({ message: _this.value[index] }); });\n                if (_this.immutable) {\n                    _this.value = [];\n                    _this.valueChange.emit(_this.value);\n                }\n                else {\n                    _this.value.splice(0, _this.value.length);\n                }\n            }, 250);\n        }\n    };\n    Growl.prototype.onMessageClick = function (i) {\n        if (this.closeIconClick)\n            this.closeIconClick = false;\n        else\n            this.onClick.emit({ message: this.value[i] });\n    };\n    Growl.prototype.onMessageHover = function (i) {\n        this.onHover.emit({ message: this.value[i] });\n    };\n    Growl.prototype.ngOnDestroy = function () {\n        if (!this.sticky) {\n            clearTimeout(this.timeout);\n        }\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Growl.prototype, \"life\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Growl.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Growl.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Growl.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Growl.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Growl.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Growl.prototype, \"key\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Growl.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Growl.prototype, \"onHover\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Growl.prototype, \"onClose\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Growl.prototype, \"valueChange\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Growl.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Growl.prototype, \"value\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Growl.prototype, \"sticky\", null);\n    Growl = __decorate([\n        core_1.Component({\n            selector: 'p-growl',\n            template: \"\\n        <div #container [ngClass]=\\\"'ui-growl ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div #msgel *ngFor=\\\"let msg of value;let i = index\\\" class=\\\"ui-growl-item-container ui-state-highlight ui-corner-all ui-shadow\\\" aria-live=\\\"polite\\\"\\n                [ngClass]=\\\"{'ui-growl-message-info':msg.severity == 'info','ui-growl-message-warn':msg.severity == 'warn',\\n                    'ui-growl-message-error':msg.severity == 'error','ui-growl-message-success':msg.severity == 'success'}\\\"\\n                    (click)=\\\"onMessageClick(i)\\\" (mouseenter)=\\\"onMessageHover(i)\\\">\\n                <div class=\\\"ui-growl-item\\\">\\n                     <div class=\\\"ui-growl-icon-close fa fa-close\\\" (click)=\\\"remove(i,msgel)\\\"></div>\\n                     <span class=\\\"ui-growl-image fa fa-2x\\\"\\n                        [ngClass]=\\\"{'fa-info-circle':msg.severity == 'info','fa-exclamation-circle':msg.severity == 'warn',\\n                                'fa-close':msg.severity == 'error','fa-check':msg.severity == 'success'}\\\"></span>\\n                     <div class=\\\"ui-growl-message\\\">\\n                        <span class=\\\"ui-growl-title\\\">{{msg.summary}}</span>\\n                        <p [innerHTML]=\\\"msg.detail||''\\\"></p>\\n                     </div>\\n                     <div style=\\\"clear: both;\\\"></div>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __param(3, core_1.Optional()),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.IterableDiffers, messageservice_1.MessageService, core_1.NgZone])\n    ], Growl);\n    return Growl;\n}());\nexports.Growl = Growl;\nvar GrowlModule = /** @class */ (function () {\n    function GrowlModule() {\n    }\n    GrowlModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Growl],\n            declarations: [Growl]\n        })\n    ], GrowlModule);\n    return GrowlModule;\n}());\nexports.GrowlModule = GrowlModule;\n//# sourceMappingURL=growl.js.map\n\n/***/ }),\n/* 754 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar button_1 = __webpack_require__(37);\nvar InplaceDisplay = /** @class */ (function () {\n    function InplaceDisplay() {\n    }\n    InplaceDisplay = __decorate([\n        core_1.Component({\n            selector: 'p-inplaceDisplay',\n            template: '<ng-content></ng-content>'\n        })\n    ], InplaceDisplay);\n    return InplaceDisplay;\n}());\nexports.InplaceDisplay = InplaceDisplay;\nvar InplaceContent = /** @class */ (function () {\n    function InplaceContent() {\n    }\n    InplaceContent = __decorate([\n        core_1.Component({\n            selector: 'p-inplaceContent',\n            template: '<ng-content></ng-content>'\n        })\n    ], InplaceContent);\n    return InplaceContent;\n}());\nexports.InplaceContent = InplaceContent;\nvar Inplace = /** @class */ (function () {\n    function Inplace() {\n        this.onActivate = new core_1.EventEmitter();\n        this.onDeactivate = new core_1.EventEmitter();\n    }\n    Inplace.prototype.activate = function (event) {\n        if (!this.disabled) {\n            this.active = true;\n            this.onActivate.emit(event);\n        }\n    };\n    Inplace.prototype.deactivate = function (event) {\n        if (!this.disabled) {\n            this.active = false;\n            this.hover = false;\n            this.onDeactivate.emit(event);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Inplace.prototype, \"active\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Inplace.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Inplace.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Inplace.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Inplace.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Inplace.prototype, \"onActivate\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Inplace.prototype, \"onDeactivate\", void 0);\n    Inplace = __decorate([\n        core_1.Component({\n            selector: 'p-inplace',\n            template: \"\\n        <div [ngClass]=\\\"'ui-inplace ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-inplace-display\\\" (click)=\\\"activate($event)\\\"\\n                [ngClass]=\\\"{'ui-state-disabled':disabled}\\\" *ngIf=\\\"!active\\\">\\n                <ng-content select=\\\"[pInplaceDisplay]\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-inplace-content\\\" *ngIf=\\\"active\\\">\\n                <ng-content select=\\\"[pInplaceContent]\\\"></ng-content>\\n                <button type=\\\"button\\\" icon=\\\"fa-close\\\" pButton (click)=\\\"deactivate($event)\\\" *ngIf=\\\"closable\\\"></button>\\n            </div>\\n        </div>\\n    \"\n        })\n    ], Inplace);\n    return Inplace;\n}());\nexports.Inplace = Inplace;\nvar InplaceModule = /** @class */ (function () {\n    function InplaceModule() {\n    }\n    InplaceModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule],\n            exports: [Inplace, InplaceDisplay, InplaceContent, button_1.ButtonModule],\n            declarations: [Inplace, InplaceDisplay, InplaceContent]\n        })\n    ], InplaceModule);\n    return InplaceModule;\n}());\nexports.InplaceModule = InplaceModule;\n//# sourceMappingURL=inplace.js.map\n\n/***/ }),\n/* 755 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar forms_1 = __webpack_require__(17);\nvar domhandler_1 = __webpack_require__(9);\nexports.INPUTSWITCH_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return InputSwitch; }),\n    multi: true\n};\nvar InputSwitch = /** @class */ (function () {\n    function InputSwitch(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.onLabel = 'On';\n        this.offLabel = 'Off';\n        this.ariaLabelTemplate = \"InputSwitch {0}\";\n        this.onChange = new core_1.EventEmitter();\n        this.checked = false;\n        this.focused = false;\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.initialized = false;\n    }\n    InputSwitch.prototype.ngAfterViewInit = function () {\n        this.container = this.el.nativeElement.children[0];\n        this.handle = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-inputswitch-handle');\n        this.onContainer = this.domHandler.findSingle(this.container, 'div.ui-inputswitch-on');\n        this.offContainer = this.domHandler.findSingle(this.container, 'div.ui-inputswitch-off');\n        this.onLabelChild = this.domHandler.findSingle(this.onContainer, 'span.ui-inputswitch-onlabel');\n        this.offLabelChild = this.domHandler.findSingle(this.offContainer, 'span.ui-inputswitch-offlabel');\n    };\n    InputSwitch.prototype.ngAfterViewChecked = function () {\n        if (this.container && this.container.offsetParent && !this.initialized) {\n            this.render();\n        }\n    };\n    InputSwitch.prototype.render = function () {\n        var onContainerWidth = this.domHandler.width(this.onContainer), offContainerWidth = this.domHandler.width(this.offContainer), spanPadding = this.domHandler.innerWidth(this.offLabelChild) - this.domHandler.width(this.offLabelChild), handleMargins = this.domHandler.getOuterWidth(this.handle) - this.domHandler.innerWidth(this.handle);\n        var containerWidth = (onContainerWidth > offContainerWidth) ? onContainerWidth : offContainerWidth, handleWidth = containerWidth;\n        this.handle.style.width = handleWidth + 'px';\n        handleWidth = this.domHandler.width(this.handle);\n        containerWidth = containerWidth + handleWidth + 6;\n        var labelWidth = containerWidth - handleWidth - spanPadding - handleMargins;\n        this.container.style.width = containerWidth + 'px';\n        this.onLabelChild.style.width = labelWidth + 'px';\n        this.offLabelChild.style.width = labelWidth + 'px';\n        //position\n        this.offContainer.style.width = (this.domHandler.width(this.container) - 5) + 'px';\n        this.offset = this.domHandler.width(this.container) - this.domHandler.getOuterWidth(this.handle);\n        //default value\n        if (this.checked) {\n            this.handle.style.left = this.offset + 'px';\n            this.onContainer.style.width = this.offset + 'px';\n            this.offLabelChild.style.marginRight = -this.offset + 'px';\n        }\n        else {\n            this.onContainer.style.width = 0 + 'px';\n            this.onLabelChild.style.marginLeft = -this.offset + 'px';\n        }\n        this.initialized = true;\n    };\n    InputSwitch.prototype.toggle = function (event, checkbox) {\n        if (!this.disabled) {\n            if (this.checked) {\n                this.checked = false;\n                this.uncheckUI();\n            }\n            else {\n                this.checked = true;\n                this.checkUI();\n            }\n            this.onModelChange(this.checked);\n            this.onChange.emit({\n                originalEvent: event,\n                checked: this.checked\n            });\n            checkbox.focus();\n        }\n    };\n    InputSwitch.prototype.checkUI = function () {\n        this.onContainer.style.width = this.offset + 'px';\n        this.onLabelChild.style.marginLeft = 0 + 'px';\n        this.offLabelChild.style.marginRight = -this.offset + 'px';\n        this.handle.style.left = this.offset + 'px';\n        this.updateAriaLabel();\n    };\n    InputSwitch.prototype.uncheckUI = function () {\n        this.onContainer.style.width = 0 + 'px';\n        this.onLabelChild.style.marginLeft = -this.offset + 'px';\n        this.offLabelChild.style.marginRight = 0 + 'px';\n        this.handle.style.left = 0 + 'px';\n        this.updateAriaLabel();\n    };\n    InputSwitch.prototype.onFocus = function (event) {\n        this.focused = true;\n    };\n    InputSwitch.prototype.onBlur = function (event) {\n        this.focused = false;\n        this.onModelTouched();\n    };\n    InputSwitch.prototype.writeValue = function (checked) {\n        this.checked = checked;\n        if (this.initialized) {\n            if (this.checked === true)\n                this.checkUI();\n            else\n                this.uncheckUI();\n        }\n    };\n    InputSwitch.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    InputSwitch.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    InputSwitch.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    InputSwitch.prototype.updateAriaLabel = function () {\n        var pattern = /{(.*?)}/, value = this.checked ? this.onLabel : this.offLabel;\n        this.ariaLabel = this.ariaLabelTemplate.replace(this.ariaLabelTemplate.match(pattern)[0], value);\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"onLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"offLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputSwitch.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], InputSwitch.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputSwitch.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"ariaLabelTemplate\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputSwitch.prototype, \"onChange\", void 0);\n    InputSwitch = __decorate([\n        core_1.Component({\n            selector: 'p-inputSwitch',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-inputswitch ui-widget ui-widget-content ui-corner-all': true,\\n            'ui-state-disabled': disabled,'ui-inputswitch-checked':checked, 'ui-state-focus':focused}\\\" (click)=\\\"toggle($event, in)\\\"\\n            [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-inputswitch-off\\\">\\n                <span class=\\\"ui-inputswitch-offlabel\\\">{{offLabel}}</span>\\n            </div>\\n            <div class=\\\"ui-inputswitch-on\\\">\\n                <span class=\\\"ui-inputswitch-onlabel\\\">{{onLabel}}</span>\\n            </div>\\n            <div [ngClass]=\\\"{'ui-inputswitch-handle ui-state-default':true, 'ui-state-focus':focused}\\\"></div>\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #in type=\\\"checkbox\\\" [attr.aria-label]=\\\"ariaLabel\\\" [attr.aria-labelledby]=\\\"ariaLabelledBy\\\" aria-live=\\\"polite\\\" [attr.id]=\\\"inputId\\\" (focus)=\\\"onFocus($event)\\\" (blur)=\\\"onBlur($event)\\\" readonly=\\\"readonly\\\" [attr.tabindex]=\\\"tabindex\\\"/>\\n            </div>\\n        </div>\\n    \",\n            providers: [exports.INPUTSWITCH_VALUE_ACCESSOR, domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], InputSwitch);\n    return InputSwitch;\n}());\nexports.InputSwitch = InputSwitch;\nvar InputSwitchModule = /** @class */ (function () {\n    function InputSwitchModule() {\n    }\n    InputSwitchModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [InputSwitch],\n            declarations: [InputSwitch]\n        })\n    ], InputSwitchModule);\n    return InputSwitchModule;\n}());\nexports.InputSwitchModule = InputSwitchModule;\n//# sourceMappingURL=inputswitch.js.map\n\n/***/ }),\n/* 756 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar forms_1 = __webpack_require__(17);\nvar common_1 = __webpack_require__(3);\nvar InputTextarea = /** @class */ (function () {\n    function InputTextarea(el, ngModel) {\n        this.el = el;\n        this.ngModel = ngModel;\n        this.rows = 2;\n        this.cols = 20;\n        this.onResize = new core_1.EventEmitter();\n    }\n    InputTextarea.prototype.ngOnInit = function () {\n        this.rowsDefault = this.rows;\n        this.colsDefault = this.cols;\n    };\n    InputTextarea.prototype.ngDoCheck = function () {\n        this.updateFilledState();\n    };\n    //To trigger change detection to manage ui-state-filled for material labels when there is no value binding\n    InputTextarea.prototype.onInput = function (e) {\n        this.updateFilledState();\n    };\n    InputTextarea.prototype.updateFilledState = function () {\n        this.filled = (this.el.nativeElement.value && this.el.nativeElement.value.length) ||\n            (this.ngModel && this.ngModel.model);\n    };\n    InputTextarea.prototype.onFocus = function (e) {\n        if (this.autoResize) {\n            this.resize(e);\n        }\n    };\n    InputTextarea.prototype.onBlur = function (e) {\n        if (this.autoResize) {\n            this.resize(e);\n        }\n    };\n    InputTextarea.prototype.onKeyup = function (e) {\n        if (this.autoResize) {\n            this.resize(e);\n        }\n    };\n    InputTextarea.prototype.resize = function (event) {\n        var linesCount = 0, lines = this.el.nativeElement.value.split('\\n');\n        for (var i = lines.length - 1; i >= 0; --i) {\n            linesCount += Math.floor((lines[i].length / this.colsDefault) + 1);\n        }\n        this.rows = (linesCount >= this.rowsDefault) ? (linesCount + 1) : this.rowsDefault;\n        this.onResize.emit(event || {});\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputTextarea.prototype, \"autoResize\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputTextarea.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputTextarea.prototype, \"cols\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputTextarea.prototype, \"onResize\", void 0);\n    __decorate([\n        core_1.HostListener('input', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputTextarea.prototype, \"onInput\", null);\n    __decorate([\n        core_1.HostListener('focus', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputTextarea.prototype, \"onFocus\", null);\n    __decorate([\n        core_1.HostListener('blur', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputTextarea.prototype, \"onBlur\", null);\n    __decorate([\n        core_1.HostListener('keyup', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputTextarea.prototype, \"onKeyup\", null);\n    InputTextarea = __decorate([\n        core_1.Directive({\n            selector: '[pInputTextarea]',\n            host: {\n                '[class.ui-inputtext]': 'true',\n                '[class.ui-corner-all]': 'true',\n                '[class.ui-state-default]': 'true',\n                '[class.ui-widget]': 'true',\n                '[class.ui-state-filled]': 'filled',\n                '[attr.rows]': 'rows',\n                '[attr.cols]': 'cols'\n            }\n        }),\n        __param(1, core_1.Optional()),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, forms_1.NgModel])\n    ], InputTextarea);\n    return InputTextarea;\n}());\nexports.InputTextarea = InputTextarea;\nvar InputTextareaModule = /** @class */ (function () {\n    function InputTextareaModule() {\n    }\n    InputTextareaModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [InputTextarea],\n            declarations: [InputTextarea]\n        })\n    ], InputTextareaModule);\n    return InputTextareaModule;\n}());\nexports.InputTextareaModule = InputTextareaModule;\n//# sourceMappingURL=inputtextarea.js.map\n\n/***/ }),\n/* 757 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar Lightbox = /** @class */ (function () {\n    function Lightbox(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.type = 'image';\n        this.effectDuration = '500ms';\n    }\n    Lightbox.prototype.onImageClick = function (event, image, i, content) {\n        this.index = i;\n        this.loading = true;\n        content.style.width = 32 + 'px';\n        content.style.height = 32 + 'px';\n        this.show();\n        this.displayImage(image);\n        this.preventDocumentClickListener = true;\n        event.preventDefault();\n    };\n    Lightbox.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.panel = this.domHandler.findSingle(this.el.nativeElement, '.ui-lightbox ');\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panel);\n            else\n                this.domHandler.appendChild(this.panel, this.appendTo);\n        }\n        this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n            if (!_this.preventDocumentClickListener && _this.visible) {\n                _this.hide(event);\n            }\n            _this.preventDocumentClickListener = false;\n        });\n    };\n    Lightbox.prototype.onLinkClick = function (event, content) {\n        this.show();\n        this.preventDocumentClickListener = true;\n        event.preventDefault();\n    };\n    Lightbox.prototype.displayImage = function (image) {\n        var _this = this;\n        setTimeout(function () {\n            _this.currentImage = image;\n            _this.captionText = image.title;\n            _this.center();\n        }, 1000);\n    };\n    Lightbox.prototype.show = function () {\n        this.mask = document.createElement('div');\n        this.mask.style.zIndex = ++domhandler_1.DomHandler.zindex;\n        this.domHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-dialog-mask');\n        document.body.appendChild(this.mask);\n        this.zindex = ++domhandler_1.DomHandler.zindex;\n        this.center();\n        this.visible = true;\n    };\n    Lightbox.prototype.hide = function (event) {\n        this.captionText = null;\n        this.index = null;\n        this.currentImage = null;\n        this.visible = false;\n        this.panel.style.left = 'auto';\n        this.panel.style.top = 'auto';\n        if (this.mask) {\n            document.body.removeChild(this.mask);\n            this.mask = null;\n        }\n        event.preventDefault();\n    };\n    Lightbox.prototype.center = function () {\n        var elementWidth = this.domHandler.getOuterWidth(this.panel);\n        var elementHeight = this.domHandler.getOuterHeight(this.panel);\n        if (elementWidth == 0 && elementHeight == 0) {\n            this.panel.style.visibility = 'hidden';\n            this.panel.style.display = 'block';\n            elementWidth = this.domHandler.getOuterWidth(this.panel);\n            elementHeight = this.domHandler.getOuterHeight(this.panel);\n            this.panel.style.display = 'none';\n            this.panel.style.visibility = 'visible';\n        }\n        var viewport = this.domHandler.getViewport();\n        var x = (viewport.width - elementWidth) / 2;\n        var y = (viewport.height - elementHeight) / 2;\n        this.panel.style.left = x + 'px';\n        this.panel.style.top = y + 'px';\n    };\n    Lightbox.prototype.onImageLoad = function (event, content) {\n        var _this = this;\n        var image = event.target;\n        image.style.visibility = 'hidden';\n        image.style.display = 'block';\n        var imageWidth = this.domHandler.getOuterWidth(image);\n        var imageHeight = this.domHandler.getOuterHeight(image);\n        image.style.display = 'none';\n        image.style.visibility = 'visible';\n        content.style.width = imageWidth + 'px';\n        content.style.height = imageHeight + 'px';\n        this.panel.style.left = parseInt(this.panel.style.left) + (this.domHandler.getOuterWidth(this.panel) - imageWidth) / 2 + 'px';\n        this.panel.style.top = parseInt(this.panel.style.top) + (this.domHandler.getOuterHeight(this.panel) - imageHeight) / 2 + 'px';\n        setTimeout(function () {\n            _this.domHandler.fadeIn(image, 500);\n            image.style.display = 'block';\n            //this.captionText = this.currentImage.title;\n            _this.loading = false;\n        }, parseInt(this.effectDuration));\n    };\n    Lightbox.prototype.prev = function (placeholder) {\n        this.captionText = null;\n        this.loading = true;\n        placeholder.style.display = 'none';\n        if (this.index > 0) {\n            this.displayImage(this.images[--this.index]);\n        }\n    };\n    Lightbox.prototype.next = function (placeholder) {\n        this.captionText = null;\n        this.loading = true;\n        placeholder.style.display = 'none';\n        if (this.index <= (this.images.length - 1)) {\n            this.displayImage(this.images[++this.index]);\n        }\n    };\n    Object.defineProperty(Lightbox.prototype, \"leftVisible\", {\n        get: function () {\n            return this.images && this.images.length && this.index != 0 && !this.loading;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Lightbox.prototype, \"rightVisible\", {\n        get: function () {\n            return this.images && this.images.length && this.index < (this.images.length - 1) && !this.loading;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Lightbox.prototype.ngOnDestroy = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n        }\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panel);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Lightbox.prototype, \"images\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Lightbox.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Lightbox.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Lightbox.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Lightbox.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Lightbox.prototype, \"easing\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Lightbox.prototype, \"effectDuration\", void 0);\n    Lightbox = __decorate([\n        core_1.Component({\n            selector: 'p-lightbox',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"(type == 'image')\\\">\\n            <a *ngFor=\\\"let image of images; let i = index;\\\" [href]=\\\"image.source\\\" (click)=\\\"onImageClick($event,image,i,content)\\\">\\n                <img [src]=\\\"image.thumbnail\\\" [title]=\\\"image.title\\\" [alt]=\\\"image.alt\\\">\\n            </a>\\n        </div>\\n        <span [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"(type == 'content')\\\" (click)=\\\"onLinkClick($event,content)\\\">\\n            <ng-content select=\\\"a\\\"></ng-content>\\n        </span>\\n        <div class=\\\"ui-lightbox ui-widget ui-corner-all ui-shadow\\\" [style.display]=\\\"visible ? 'block' : 'none'\\\" [style.zIndex]=\\\"zindex\\\"\\n            [ngClass]=\\\"{'ui-lightbox-loading': loading}\\\"\\n            [style.transitionProperty]=\\\"'all'\\\" [style.transitionDuration]=\\\"effectDuration\\\" [style.transitionTimingFunction]=\\\"easing\\\" (click)=\\\"preventDocumentClickListener=true\\\">\\n           <div class=\\\"ui-lightbox-content-wrapper\\\">\\n              <a class=\\\"ui-state-default ui-lightbox-nav-left ui-corner-right\\\" [style.zIndex]=\\\"zindex + 1\\\" (click)=\\\"prev(img)\\\"\\n                [ngClass]=\\\"{'ui-helper-hidden':!leftVisible}\\\"><span class=\\\"fa fa-fw fa-caret-left\\\"></span></a>\\n              <div #content class=\\\"ui-lightbox-content ui-corner-all\\\" \\n                [style.transitionProperty]=\\\"'width,height'\\\" [style.transitionDuration]=\\\"effectDuration\\\" [style.transitionTimingFunction]=\\\"easing\\\">\\n                <img #img [src]=\\\"currentImage ? currentImage.source||'' : ''\\\" (load)=\\\"onImageLoad($event,content)\\\" style=\\\"display:none\\\">\\n                <ng-content></ng-content>\\n              </div>\\n              <a class=\\\"ui-state-default ui-lightbox-nav-right ui-corner-left ui-helper-hidden\\\" [style.zIndex]=\\\"zindex + 1\\\" (click)=\\\"next(img)\\\"\\n                [ngClass]=\\\"{'ui-helper-hidden':!rightVisible}\\\"><span class=\\\"fa fa-fw fa-caret-right\\\"></span></a>\\n           </div>\\n           <div class=\\\"ui-lightbox-caption ui-widget-header\\\" [style.display]=\\\"captionText ? 'block' : 'none'\\\">\\n              <span class=\\\"ui-lightbox-caption-text\\\">{{captionText}}</span><a class=\\\"ui-lightbox-close ui-corner-all\\\" href=\\\"#\\\" (click)=\\\"hide($event)\\\"><span class=\\\"fa fa-fw fa-close\\\"></span></a>\\n              <div style=\\\"clear:both\\\"></div>\\n           </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], Lightbox);\n    return Lightbox;\n}());\nexports.Lightbox = Lightbox;\nvar LightboxModule = /** @class */ (function () {\n    function LightboxModule() {\n    }\n    LightboxModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Lightbox],\n            declarations: [Lightbox]\n        })\n    ], LightboxModule);\n    return LightboxModule;\n}());\nexports.LightboxModule = LightboxModule;\n//# sourceMappingURL=lightbox.js.map\n\n/***/ }),\n/* 758 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar objectutils_1 = __webpack_require__(40);\nvar forms_1 = __webpack_require__(17);\nexports.LISTBOX_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Listbox; }),\n    multi: true\n};\nvar Listbox = /** @class */ (function () {\n    function Listbox(el, domHandler, objectUtils, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.objectUtils = objectUtils;\n        this.cd = cd;\n        this.checkbox = false;\n        this.filter = false;\n        this.filterMode = 'contains';\n        this.metaKeySelection = true;\n        this.showToggleAll = true;\n        this.onChange = new core_1.EventEmitter();\n        this.onDblClick = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Object.defineProperty(Listbox.prototype, \"options\", {\n        get: function () {\n            return this._options;\n        },\n        set: function (val) {\n            var opts = this.optionLabel ? this.objectUtils.generateSelectItems(val, this.optionLabel) : val;\n            this._options = opts;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Listbox.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Listbox.prototype.writeValue = function (value) {\n        this.value = value;\n        this.cd.markForCheck();\n    };\n    Listbox.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Listbox.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Listbox.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Listbox.prototype.onOptionClick = function (event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        if (!this.checkboxClick) {\n            if (this.multiple)\n                this.onOptionClickMultiple(event, option);\n            else\n                this.onOptionClickSingle(event, option);\n        }\n        else {\n            this.checkboxClick = false;\n        }\n        this.optionTouched = false;\n    };\n    Listbox.prototype.onOptionTouchEnd = function (event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        this.optionTouched = true;\n    };\n    Listbox.prototype.onOptionClickSingle = function (event, option) {\n        var selected = this.isSelected(option);\n        var valueChanged = false;\n        var metaSelection = this.optionTouched ? false : this.metaKeySelection;\n        if (metaSelection) {\n            var metaKey = (event.metaKey || event.ctrlKey);\n            if (selected) {\n                if (metaKey) {\n                    this.value = null;\n                    valueChanged = true;\n                }\n            }\n            else {\n                this.value = option.value;\n                valueChanged = true;\n            }\n        }\n        else {\n            this.value = selected ? null : option.value;\n            valueChanged = true;\n        }\n        if (valueChanged) {\n            this.onModelChange(this.value);\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    };\n    Listbox.prototype.onOptionClickMultiple = function (event, option) {\n        var selected = this.isSelected(option);\n        var valueChanged = false;\n        var metaSelection = this.optionTouched ? false : this.metaKeySelection;\n        if (metaSelection) {\n            var metaKey = (event.metaKey || event.ctrlKey);\n            if (selected) {\n                if (metaKey) {\n                    this.removeOption(option);\n                }\n                else {\n                    this.value = [option.value];\n                }\n                valueChanged = true;\n            }\n            else {\n                this.value = (metaKey) ? this.value || [] : [];\n                this.value = this.value.concat([option.value]);\n                valueChanged = true;\n            }\n        }\n        else {\n            if (selected) {\n                this.removeOption(option);\n            }\n            else {\n                this.value = (this.value || []).concat([option.value]);\n            }\n            valueChanged = true;\n        }\n        if (valueChanged) {\n            this.onModelChange(this.value);\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    };\n    Listbox.prototype.removeOption = function (option) {\n        var _this = this;\n        this.value = this.value.filter(function (val) { return !_this.objectUtils.equals(val, option.value, _this.dataKey); });\n    };\n    Listbox.prototype.isSelected = function (option) {\n        var selected = false;\n        if (this.multiple) {\n            if (this.value) {\n                for (var _i = 0, _a = this.value; _i < _a.length; _i++) {\n                    var val = _a[_i];\n                    if (this.objectUtils.equals(val, option.value, this.dataKey)) {\n                        selected = true;\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            selected = this.objectUtils.equals(this.value, option.value, this.dataKey);\n        }\n        return selected;\n    };\n    Object.defineProperty(Listbox.prototype, \"allChecked\", {\n        get: function () {\n            if (this.filterValue)\n                return this.allFilteredSelected();\n            else\n                return this.value && this.options && (this.value.length === this.options.length);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Listbox.prototype.allFilteredSelected = function () {\n        var allSelected;\n        if (this.value && this.options && this.options.length) {\n            allSelected = true;\n            for (var _i = 0, _a = this.options; _i < _a.length; _i++) {\n                var opt = _a[_i];\n                if (this.isItemVisible(opt)) {\n                    if (!this.isSelected(opt)) {\n                        allSelected = false;\n                        break;\n                    }\n                }\n            }\n        }\n        return allSelected;\n    };\n    Listbox.prototype.onFilter = function (event) {\n        var query = event.target.value.trim().toLowerCase();\n        this.filterValue = query.length ? query : null;\n    };\n    Listbox.prototype.toggleAll = function (event, checkbox) {\n        if (this.disabled || this.readonly || !this.options || this.options.length === 0) {\n            return;\n        }\n        if (checkbox.checked) {\n            this.value = [];\n        }\n        else {\n            if (this.options) {\n                this.value = [];\n                for (var i = 0; i < this.options.length; i++) {\n                    var opt = this.options[i];\n                    if (this.isItemVisible(opt)) {\n                        this.value.push(opt.value);\n                    }\n                }\n            }\n        }\n        checkbox.checked = !checkbox.checked;\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value });\n    };\n    Listbox.prototype.isItemVisible = function (option) {\n        if (this.filterValue) {\n            var visible = void 0;\n            switch (this.filterMode) {\n                case 'startsWith':\n                    visible = option.label.toLowerCase().indexOf(this.filterValue.toLowerCase()) === 0;\n                    break;\n                case 'contains':\n                    visible = option.label.toLowerCase().indexOf(this.filterValue.toLowerCase()) > -1;\n                    break;\n                default:\n                    visible = true;\n            }\n            return visible;\n        }\n        else {\n            return true;\n        }\n    };\n    Listbox.prototype.onDoubleClick = function (event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        this.onDblClick.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    Listbox.prototype.onCheckboxClick = function (event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        this.checkboxClick = true;\n        var selected = this.isSelected(option);\n        if (selected) {\n            this.removeOption(option);\n        }\n        else {\n            this.value = this.value ? this.value : [];\n            this.value = this.value.concat([option.value]);\n        }\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    Listbox.prototype.onInputFocus = function (event) {\n        this.focus = true;\n    };\n    Listbox.prototype.onInputBlur = function (event) {\n        this.focus = false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Listbox.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Listbox.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Listbox.prototype, \"listStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"checkbox\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"filter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Listbox.prototype, \"filterMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Listbox.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"showToggleAll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Listbox.prototype, \"optionLabel\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Listbox.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Listbox.prototype, \"onDblClick\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], Listbox.prototype, \"headerFacet\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], Listbox.prototype, \"footerFacet\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Listbox.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Listbox.prototype, \"options\", null);\n    Listbox = __decorate([\n        core_1.Component({\n            selector: 'p-listbox',\n            template: \"\\n    <div [ngClass]=\\\"{'ui-listbox ui-inputtext ui-widget ui-widget-content ui-corner-all':true,'ui-state-disabled':disabled,'ui-state-focus':focus}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n      <div class=\\\"ui-helper-hidden-accessible\\\">\\n        <input type=\\\"text\\\" readonly=\\\"readonly\\\" (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\">\\n      </div>\\n      <div class=\\\"ui-widget-header ui-corner-all ui-listbox-header ui-helper-clearfix\\\" *ngIf=\\\"headerFacet\\\">\\n        <ng-content select=\\\"p-header\\\"></ng-content>\\n      </div>\\n      <div class=\\\"ui-widget-header ui-corner-all ui-listbox-header ui-helper-clearfix\\\" *ngIf=\\\"(checkbox && multiple) || filter\\\" [ngClass]=\\\"{'ui-listbox-header-w-checkbox': checkbox}\\\">\\n        <div class=\\\"ui-chkbox ui-widget\\\" *ngIf=\\\"checkbox && multiple && showToggleAll\\\">\\n          <div class=\\\"ui-helper-hidden-accessible\\\">\\n            <input #cb type=\\\"checkbox\\\" readonly=\\\"readonly\\\" [checked]=\\\"allChecked\\\">\\n          </div>\\n          <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" [ngClass]=\\\"{'ui-state-active':allChecked}\\\" (click)=\\\"toggleAll($event,cb)\\\">\\n            <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':allChecked}\\\"></span>\\n          </div>\\n        </div>\\n        <div class=\\\"ui-listbox-filter-container\\\" *ngIf=\\\"filter\\\">\\n          <input type=\\\"text\\\" role=\\\"textbox\\\" (input)=\\\"onFilter($event)\\\" class=\\\"ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [disabled]=\\\"disabled\\\">\\n          <span class=\\\"ui-listbox-filter-icon fa fa-search\\\"></span>\\n        </div>\\n      </div>\\n      <div class=\\\"ui-listbox-list-wrapper\\\" [ngStyle]=\\\"listStyle\\\">\\n        <ul class=\\\"ui-listbox-list\\\">\\n          <li *ngFor=\\\"let option of options; let i = index;\\\" [style.display]=\\\"isItemVisible(option) ? 'block' : 'none'\\\"\\n              [ngClass]=\\\"{'ui-listbox-item ui-corner-all':true,'ui-state-highlight':isSelected(option)}\\\"\\n              (click)=\\\"onOptionClick($event,option)\\\" (dblclick)=\\\"onDoubleClick($event,option)\\\" (touchend)=\\\"onOptionTouchEnd($event,option)\\\">\\n            <div class=\\\"ui-chkbox ui-widget\\\" *ngIf=\\\"checkbox && multiple\\\" (click)=\\\"onCheckboxClick($event,option)\\\">\\n              <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input type=\\\"checkbox\\\" [checked]=\\\"isSelected(option)\\\" [disabled]=\\\"disabled\\\">\\n              </div>\\n              <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" [ngClass]=\\\"{'ui-state-active':isSelected(option)}\\\">\\n                <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':isSelected(option)}\\\"></span>\\n              </div>\\n            </div>\\n            <span *ngIf=\\\"!itemTemplate\\\">{{option.label}}</span>\\n            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option, index: i}\\\"></ng-container>\\n          </li>\\n        </ul>\\n      </div>\\n      <div class=\\\"ui-listbox-footer ui-widget-header ui-corner-all\\\" *ngIf=\\\"footerFacet\\\">\\n        <ng-content select=\\\"p-footer\\\"></ng-content>\\n      </div>\\n    </div>\\n  \",\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils, exports.LISTBOX_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, objectutils_1.ObjectUtils, core_1.ChangeDetectorRef])\n    ], Listbox);\n    return Listbox;\n}());\nexports.Listbox = Listbox;\nvar ListboxModule = /** @class */ (function () {\n    function ListboxModule() {\n    }\n    ListboxModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [Listbox, shared_1.SharedModule],\n            declarations: [Listbox]\n        })\n    ], ListboxModule);\n    return ListboxModule;\n}());\nexports.ListboxModule = ListboxModule;\n//# sourceMappingURL=listbox.js.map\n\n/***/ }),\n/* 759 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar router_1 = __webpack_require__(5);\nvar MegaMenu = /** @class */ (function () {\n    function MegaMenu(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.orientation = 'horizontal';\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    MegaMenu.prototype.onItemMouseEnter = function (event, item, menuitem) {\n        if (menuitem.disabled) {\n            return;\n        }\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n        this.activeItem = item;\n        if (menuitem.items) {\n            var submenu = item.children[0].nextElementSibling;\n            if (submenu) {\n                if (this.autoZIndex) {\n                    submenu.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n                }\n                if (this.orientation === 'horizontal') {\n                    submenu.style.top = this.domHandler.getOuterHeight(item.children[0]) + 'px';\n                    submenu.style.left = '0px';\n                }\n                else if (this.orientation === 'vertical') {\n                    submenu.style.top = '0px';\n                    submenu.style.left = this.domHandler.getOuterWidth(item.children[0]) + 'px';\n                }\n            }\n        }\n    };\n    MegaMenu.prototype.onItemMouseLeave = function (event, link) {\n        var _this = this;\n        this.hideTimeout = setTimeout(function () {\n            _this.activeItem = null;\n        }, 1000);\n    };\n    MegaMenu.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        this.activeItem = null;\n    };\n    MegaMenu.prototype.getColumnClass = function (menuitem) {\n        var length = menuitem.items ? menuitem.items.length : 0;\n        var columnClass;\n        switch (length) {\n            case 2:\n                columnClass = 'ui-g-6';\n                break;\n            case 3:\n                columnClass = 'ui-g-4';\n                break;\n            case 4:\n                columnClass = 'ui-g-3';\n                break;\n            case 6:\n                columnClass = 'ui-g-2';\n                break;\n            default:\n                columnClass = 'ui-g-12';\n                break;\n        }\n        return columnClass;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], MegaMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MegaMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MegaMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MegaMenu.prototype, \"orientation\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MegaMenu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], MegaMenu.prototype, \"baseZIndex\", void 0);\n    MegaMenu = __decorate([\n        core_1.Component({\n            selector: 'p-megaMenu',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\"\\n            [ngClass]=\\\"{'ui-megamenu ui-widget ui-widget-content ui-corner-all':true,'ui-megamenu-horizontal': orientation == 'horizontal','ui-megamenu-vertical': orientation == 'vertical'}\\\">\\n            <ul class=\\\"ui-megamenu-root-list\\\">\\n                <ng-template ngFor let-category [ngForOf]=\\\"model\\\">\\n                    <li *ngIf=\\\"category.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': category.visible === false}\\\">\\n                    <li *ngIf=\\\"!category.separator\\\" #item [ngClass]=\\\"{'ui-menuitem ui-corner-all':true,'ui-menuitem-active':item==activeItem, 'ui-helper-hidden': category.visible === false}\\\"\\n                        (mouseenter)=\\\"onItemMouseEnter($event, item, category)\\\" (mouseleave)=\\\"onItemMouseLeave($event, item)\\\">\\n   \\n                        <a *ngIf=\\\"!category.routerLink\\\" [href]=\\\"category.url||'#'\\\" [attr.target]=\\\"category.target\\\" [attr.title]=\\\"category.title\\\" [attr.id]=\\\"category.id\\\" (click)=\\\"itemClick($event, category)\\\"\\n                            [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':category.disabled}\\\" [ngStyle]=\\\"category.style\\\" [class]=\\\"category.styleClass\\\">\\n                            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"category.icon\\\" [ngClass]=\\\"category.icon\\\"></span>\\n                            <span class=\\\"ui-menuitem-text\\\">{{category.label}}</span>\\n                            <span *ngIf=\\\"category.items\\\" class=\\\"ui-submenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-down':orientation=='horizontal','fa-caret-right':orientation=='vertical'}\\\"></span>\\n                        </a>\\n                        <a *ngIf=\\\"category.routerLink\\\" [routerLink]=\\\"category.routerLink\\\" [queryParams]=\\\"category.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"category.routerLinkActiveOptions||{exact:false}\\\" \\n                            [attr.target]=\\\"category.target\\\" [attr.title]=\\\"category.title\\\" [attr.id]=\\\"category.id\\\"\\n                            (click)=\\\"itemClick($event, category)\\\" [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':category.disabled}\\\" [ngStyle]=\\\"category.style\\\" [class]=\\\"category.styleClass\\\">\\n                            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"category.icon\\\" [ngClass]=\\\"category.icon\\\"></span>\\n                            <span class=\\\"ui-menuitem-text\\\">{{category.label}}</span>\\n                        </a>\\n\\n                        <div class=\\\"ui-megamenu-panel ui-widget-content ui-corner-all ui-shadow\\\" *ngIf=\\\"category.items\\\">\\n                            <div class=\\\"ui-g\\\">\\n                                <ng-template ngFor let-column [ngForOf]=\\\"category.items\\\">\\n                                    <div [class]=\\\"getColumnClass(category)\\\">\\n                                        <ng-template ngFor let-submenu [ngForOf]=\\\"column\\\">\\n                                            <ul class=\\\"ui-megamenu-submenu\\\">\\n                                                <li class=\\\"ui-widget-header ui-megamenu-submenu-header ui-corner-all\\\">{{submenu.label}}</li>\\n                                                <ng-template ngFor let-item [ngForOf]=\\\"submenu.items\\\">\\n                                                    <li *ngIf=\\\"item.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\">\\n                                                    <li *ngIf=\\\"!item.separator\\\" class=\\\"ui-menuitem ui-corner-all\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\">\\n                                                        <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\"\\n                                                            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"itemClick($event, item)\\\">\\n                                                            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"item.icon\\\" [ngClass]=\\\"item.icon\\\"></span>\\n                                                            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                                                        </a>\\n                                                        <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" \\n                                                            [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" \\n                                                             [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\"\\n                                                            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"itemClick($event, item)\\\">\\n                                                            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"item.icon\\\" [ngClass]=\\\"item.icon\\\"></span>\\n                                                            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                                                        </a>\\n                                                    </li>\\n                                                </ng-template>\\n                                            </ul>\\n                                        </ng-template>\\n                                    </div>\\n                                </ng-template>\\n                            </div>\\n                        </div>\\n                    </li>\\n                </ng-template>\\n                <li class=\\\"ui-menuitem ui-menuitem-custom ui-corner-all\\\" *ngIf=\\\"orientation === 'horizontal'\\\">\\n                    <ng-content></ng-content>\\n                </li>\\n            </ul>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], MegaMenu);\n    return MegaMenu;\n}());\nexports.MegaMenu = MegaMenu;\nvar MegaMenuModule = /** @class */ (function () {\n    function MegaMenuModule() {\n    }\n    MegaMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [MegaMenu, router_1.RouterModule],\n            declarations: [MegaMenu]\n        })\n    ], MegaMenuModule);\n    return MegaMenuModule;\n}());\nexports.MegaMenuModule = MegaMenuModule;\n//# sourceMappingURL=megamenu.js.map\n\n/***/ }),\n/* 760 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar router_1 = __webpack_require__(5);\nvar MenuItemContent = /** @class */ (function () {\n    function MenuItemContent(menu) {\n        this.menu = menu;\n    }\n    __decorate([\n        core_1.Input(\"pMenuItemContent\"),\n        __metadata(\"design:type\", Object)\n    ], MenuItemContent.prototype, \"item\", void 0);\n    MenuItemContent = __decorate([\n        core_1.Component({\n            selector: '[pMenuItemContent]',\n            template: \"\\n        <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.data-automationid]=\\\"item.automationId\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\"\\n            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"menu.itemClick($event, item)\\\">\\n            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"item.icon\\\" [ngClass]=\\\"item.icon\\\"></span>\\n            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n        </a>\\n        <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [attr.data-automationid]=\\\"item.automationId\\\"  [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\"\\n            [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"item.target\\\" [attr.id]=\\\"item.id\\\"\\n             [attr.title]=\\\"item.title\\\" [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"menu.itemClick($event, item)\\\">\\n            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"item.icon\\\" [ngClass]=\\\"item.icon\\\"></span>\\n            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n        </a>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return Menu; }))),\n        __metadata(\"design:paramtypes\", [Menu])\n    ], MenuItemContent);\n    return MenuItemContent;\n}());\nexports.MenuItemContent = MenuItemContent;\nvar Menu = /** @class */ (function () {\n    function Menu(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    Menu.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.container = this.containerViewChild.nativeElement;\n        if (this.popup) {\n            if (this.appendTo) {\n                if (this.appendTo === 'body')\n                    document.body.appendChild(this.container);\n                else\n                    this.domHandler.appendChild(this.container, this.appendTo);\n            }\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.preventDocumentDefault) {\n                    _this.hide();\n                }\n                _this.preventDocumentDefault = false;\n            });\n        }\n    };\n    Menu.prototype.toggle = function (event) {\n        if (this.container.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n        this.preventDocumentDefault = true;\n    };\n    Menu.prototype.onResize = function (event) {\n        if (this.onResizeTarget && this.container.offsetParent) {\n            this.domHandler.absolutePosition(this.container, this.onResizeTarget);\n        }\n    };\n    Menu.prototype.show = function (event) {\n        var target = event.currentTarget;\n        this.onResizeTarget = event.currentTarget;\n        this.moveOnTop();\n        this.container.style.display = 'block';\n        this.domHandler.absolutePosition(this.container, target);\n        this.domHandler.fadeIn(this.container, 250);\n        this.preventDocumentDefault = true;\n    };\n    Menu.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    Menu.prototype.hide = function () {\n        this.container.style.display = 'none';\n    };\n    Menu.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        if (this.popup) {\n            this.hide();\n        }\n    };\n    Menu.prototype.ngOnDestroy = function () {\n        if (this.popup) {\n            if (this.documentClickListener) {\n                this.documentClickListener();\n            }\n            if (this.appendTo) {\n                this.el.nativeElement.appendChild(this.container);\n            }\n        }\n    };\n    Menu.prototype.hasSubMenu = function () {\n        if (this.model) {\n            for (var _i = 0, _a = this.model; _i < _a.length; _i++) {\n                var item = _a[_i];\n                if (item.items) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Menu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Menu.prototype, \"popup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Menu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Menu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Menu.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Menu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Menu.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Menu.prototype, \"containerViewChild\", void 0);\n    Menu = __decorate([\n        core_1.Component({\n            selector: 'p-menu',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-menu ui-widget ui-widget-content ui-corner-all':true, 'ui-menu-dynamic ui-shadow':popup}\\\"\\n            [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" (click)=\\\"preventDocumentDefault=true\\\">\\n            <ul>\\n                <ng-template ngFor let-submenu [ngForOf]=\\\"model\\\" *ngIf=\\\"hasSubMenu()\\\">\\n                    <li class=\\\"ui-menu-separator ui-widget-content\\\" *ngIf=\\\"submenu.separator\\\" [ngClass]=\\\"{'ui-helper-hidden': submenu.visible === false}\\\"></li>\\n                    <li class=\\\"ui-submenu-header ui-widget-header ui-corner-all\\\" [attr.data-automationid]=\\\"submenu.automationId\\\" *ngIf=\\\"!submenu.separator\\\" [ngClass]=\\\"{'ui-helper-hidden': submenu.visible === false}\\\">{{submenu.label}}</li>\\n                    <ng-template ngFor let-item [ngForOf]=\\\"submenu.items\\\">\\n                        <li class=\\\"ui-menu-separator ui-widget-content\\\" *ngIf=\\\"item.separator\\\" [ngClass]=\\\"{'ui-helper-hidden': (item.visible === false ||\\u00A0submenu.visible === false)}\\\"></li>\\n                        <li class=\\\"ui-menuitem ui-widget ui-corner-all\\\" *ngIf=\\\"!item.separator\\\" [pMenuItemContent]=\\\"item\\\" [ngClass]=\\\"{'ui-helper-hidden': (item.visible === false || submenu.visible === false)}\\\" [ngStyle]=\\\"item.style\\\" [class]=\\\"item.styleClass\\\"></li>\\n                    </ng-template>\\n                </ng-template>\\n                <ng-template ngFor let-item [ngForOf]=\\\"model\\\" *ngIf=\\\"!hasSubMenu()\\\">\\n                    <li class=\\\"ui-menu-separator ui-widget-content\\\" *ngIf=\\\"item.separator\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\"></li>\\n                    <li class=\\\"ui-menuitem ui-widget ui-corner-all\\\" *ngIf=\\\"!item.separator\\\" [pMenuItemContent]=\\\"item\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\" [ngStyle]=\\\"item.style\\\" [class]=\\\"item.styleClass\\\"></li>\\n                </ng-template>\\n            </ul>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler],\n            host: { '(window:resize)': 'onResize($event)' }\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], Menu);\n    return Menu;\n}());\nexports.Menu = Menu;\nvar MenuModule = /** @class */ (function () {\n    function MenuModule() {\n    }\n    MenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [Menu, router_1.RouterModule],\n            declarations: [Menu, MenuItemContent]\n        })\n    ], MenuModule);\n    return MenuModule;\n}());\nexports.MenuModule = MenuModule;\n//# sourceMappingURL=menu.js.map\n\n/***/ }),\n/* 761 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar router_1 = __webpack_require__(5);\nvar MenubarSub = /** @class */ (function () {\n    function MenubarSub(domHandler, renderer, cd) {\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.menuHoverActive = false;\n    }\n    MenubarSub.prototype.onItemMenuClick = function (event, item, menuitem) {\n        if (!this.autoDisplay) {\n            if (menuitem.disabled) {\n                return;\n            }\n            this.activeItem = this.activeMenu ? (this.activeMenu.isEqualNode(item) ? null : item) : item;\n            var nextElement = item.children[0].nextElementSibling;\n            if (nextElement) {\n                var sublist = nextElement.children[0];\n                if (this.autoZIndex) {\n                    sublist.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n                }\n                if (this.root) {\n                    sublist.style.top = this.domHandler.getOuterHeight(item.children[0]) + 'px';\n                    sublist.style.left = '0px';\n                }\n                else {\n                    sublist.style.top = '0px';\n                    sublist.style.left = this.domHandler.getOuterWidth(item.children[0]) + 'px';\n                }\n            }\n            this.menuClick = true;\n            this.menuHoverActive = this.activeMenu ? (!this.activeMenu.isEqualNode(item)) : true;\n            this.activeMenu = this.activeMenu ? (this.activeMenu.isEqualNode(item) ? null : item) : item;\n            this.bindEventListener();\n        }\n    };\n    MenubarSub.prototype.bindEventListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n                if (!_this.menuClick) {\n                    _this.activeItem = null;\n                    _this.menuHoverActive = false;\n                }\n                _this.menuClick = false;\n            });\n        }\n    };\n    MenubarSub.prototype.onItemMouseEnter = function (event, item, menuitem) {\n        if (this.autoDisplay || (!this.autoDisplay && this.root && this.menuHoverActive)) {\n            if (menuitem.disabled) {\n                return;\n            }\n            if (this.hideTimeout) {\n                clearTimeout(this.hideTimeout);\n                this.hideTimeout = null;\n            }\n            this.activeItem = this.activeItem ? (this.activeItem.isEqualNode(item) ? null : item) : item;\n            var nextElement = item.children[0].nextElementSibling;\n            if (nextElement) {\n                var sublist = nextElement.children[0];\n                sublist.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n                if (this.root) {\n                    sublist.style.top = this.domHandler.getOuterHeight(item.children[0]) + 'px';\n                    sublist.style.left = '0px';\n                }\n                else {\n                    sublist.style.top = '0px';\n                    sublist.style.left = this.domHandler.getOuterWidth(item.children[0]) + 'px';\n                }\n            }\n            this.activeMenu = this.activeMenu ? (this.activeMenu.isEqualNode(item) ? null : item) : item;\n        }\n    };\n    MenubarSub.prototype.onItemMouseLeave = function (event) {\n        var _this = this;\n        if (this.autoDisplay) {\n            this.hideTimeout = setTimeout(function () {\n                _this.activeItem = null;\n                _this.cd.markForCheck();\n            }, 250);\n        }\n    };\n    MenubarSub.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        this.activeItem = null;\n    };\n    MenubarSub.prototype.listClick = function (event) {\n        if (this.autoDisplay) {\n            this.activeItem = null;\n        }\n    };\n    MenubarSub.prototype.ngOnDestroy = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MenubarSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MenubarSub.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MenubarSub.prototype, \"autoDisplay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MenubarSub.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], MenubarSub.prototype, \"baseZIndex\", void 0);\n    MenubarSub = __decorate([\n        core_1.Component({\n            selector: 'p-menubarSub',\n            template: \"\\n        <ul [ngClass]=\\\"{'ui-menubar-root-list':root, 'ui-widget-content ui-corner-all ui-submenu-list ui-shadow':!root}\\\"\\n            (click)=\\\"listClick($event)\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"(root ? item : item.items)\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': child.visible === false}\\\">\\n                <li *ngIf=\\\"!child.separator\\\" #listItem [ngClass]=\\\"{'ui-menuitem ui-corner-all':true,\\n                        'ui-menu-parent':child.items,'ui-menuitem-active':listItem==activeItem,'ui-helper-hidden': child.visible === false}\\\"\\n                        (mouseenter)=\\\"onItemMouseEnter($event,listItem,child)\\\" (mouseleave)=\\\"onItemMouseLeave($event)\\\" (click)=\\\"onItemMenuClick($event, listItem, child)\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" [attr.data-automationid]=\\\"child.automationId\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\" (click)=\\\"itemClick($event, child)\\\"\\n                         [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':child.disabled}\\\" [ngStyle]=\\\"child.style\\\" [class]=\\\"child.styleClass\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw\\\" *ngIf=\\\"child.items\\\" [ngClass]=\\\"{'fa-caret-down':root,'fa-caret-right':!root}\\\"></span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [attr.data-automationid]=\\\"child.automationId\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\"\\n                        [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        (click)=\\\"itemClick($event, child)\\\" [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':child.disabled}\\\" [ngStyle]=\\\"child.style\\\" [class]=\\\"child.styleClass\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw\\\" *ngIf=\\\"child.items\\\" [ngClass]=\\\"{'fa-caret-down':root,'fa-caret-right':!root}\\\"></span>\\n                    </a>\\n                    <p-menubarSub class=\\\"ui-submenu\\\" [item]=\\\"child\\\" *ngIf=\\\"child.items\\\" [autoDisplay]=\\\"true\\\"></p-menubarSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], MenubarSub);\n    return MenubarSub;\n}());\nexports.MenubarSub = MenubarSub;\nvar Menubar = /** @class */ (function () {\n    function Menubar(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.autoDisplay = true;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Menubar.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Menubar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Menubar.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Menubar.prototype, \"autoDisplay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Menubar.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Menubar.prototype, \"baseZIndex\", void 0);\n    Menubar = __decorate([\n        core_1.Component({\n            selector: 'p-menubar',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-menubar ui-widget ui-widget-content ui-corner-all':true}\\\" [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\">\\n            <p-menubarSub [item]=\\\"model\\\" root=\\\"root\\\" [autoDisplay]=\\\"autoDisplay\\\" [baseZIndex]=\\\"baseZIndex\\\" [autoZIndex]=\\\"autoZIndex\\\">\\n                <ng-content></ng-content>\\n            </p-menubarSub>\\n            <div class=\\\"ui-menubar-custom\\\">\\n                <ng-content></ng-content>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], Menubar);\n    return Menubar;\n}());\nexports.Menubar = Menubar;\nvar MenubarModule = /** @class */ (function () {\n    function MenubarModule() {\n    }\n    MenubarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [Menubar, router_1.RouterModule],\n            declarations: [Menubar, MenubarSub]\n        })\n    ], MenubarModule);\n    return MenubarModule;\n}());\nexports.MenubarModule = MenubarModule;\n//# sourceMappingURL=menubar.js.map\n\n/***/ }),\n/* 762 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar UIMessage = /** @class */ (function () {\n    function UIMessage() {\n    }\n    Object.defineProperty(UIMessage.prototype, \"icon\", {\n        get: function () {\n            var icon = null;\n            if (this.severity) {\n                switch (this.severity) {\n                    case 'success':\n                        icon = 'fa fa-check';\n                        break;\n                    case 'info':\n                        icon = 'fa fa-info-circle';\n                        break;\n                    case 'error':\n                        icon = 'fa fa-close';\n                        break;\n                    case 'warn':\n                        icon = 'fa fa-warning';\n                        break;\n                    default:\n                        icon = 'fa fa-info-circle';\n                        break;\n                }\n            }\n            return icon;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIMessage.prototype, \"severity\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIMessage.prototype, \"text\", void 0);\n    UIMessage = __decorate([\n        core_1.Component({\n            selector: 'p-message',\n            template: \"\\n        <div aria-live=\\\"polite\\\" class=\\\"ui-message ui-widget ui-corner-all\\\" *ngIf=\\\"severity\\\"\\n        [ngClass]=\\\"{'ui-messages-info': (severity === 'info'),\\n                'ui-messages-warn': (severity === 'warn'),\\n                'ui-messages-error': (severity === 'error'),\\n                'ui-messages-success': (severity === 'success')}\\\">\\n            <span class=\\\"ui-message-icon\\\" [ngClass]=\\\"icon\\\"></span>\\n            <span class=\\\"ui-message-text\\\">{{text}}</span>\\n        </div>\\n    \"\n        })\n    ], UIMessage);\n    return UIMessage;\n}());\nexports.UIMessage = UIMessage;\nvar MessageModule = /** @class */ (function () {\n    function MessageModule() {\n    }\n    MessageModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [UIMessage],\n            declarations: [UIMessage]\n        })\n    ], MessageModule);\n    return MessageModule;\n}());\nexports.MessageModule = MessageModule;\n//# sourceMappingURL=message.js.map\n\n/***/ }),\n/* 763 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar objectutils_1 = __webpack_require__(40);\nvar shared_1 = __webpack_require__(15);\nvar forms_1 = __webpack_require__(17);\nexports.MULTISELECT_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return MultiSelect; }),\n    multi: true\n};\nvar MultiSelect = /** @class */ (function () {\n    function MultiSelect(el, domHandler, renderer, objectUtils, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.objectUtils = objectUtils;\n        this.cd = cd;\n        this.scrollHeight = '200px';\n        this.defaultLabel = 'Choose';\n        this.filter = true;\n        this.displaySelectedLabel = true;\n        this.maxSelectedLabels = 3;\n        this.selectedItemsLabel = '{0} items selected';\n        this.showToggleAll = true;\n        this.resetFilterOnHide = false;\n        this.dropdownIcon = 'fa fa-fw fa-caret-down';\n        this.showHeader = true;\n        this.onChange = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onPanelShow = new core_1.EventEmitter();\n        this.onPanelHide = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Object.defineProperty(MultiSelect.prototype, \"options\", {\n        get: function () {\n            return this._options;\n        },\n        set: function (val) {\n            var opts = this.optionLabel ? this.objectUtils.generateSelectItems(val, this.optionLabel) : val;\n            this._options = opts;\n            this.updateLabel();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MultiSelect.prototype.ngOnInit = function () {\n        this.updateLabel();\n    };\n    MultiSelect.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    MultiSelect.prototype.ngAfterViewInit = function () {\n        this.container = this.containerViewChild.nativeElement;\n        this.panel = this.panelViewChild.nativeElement;\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panel);\n            else\n                this.domHandler.appendChild(this.panel, this.appendTo);\n        }\n        if (this.overlayVisible) {\n            this.show();\n        }\n    };\n    MultiSelect.prototype.ngAfterViewChecked = function () {\n        if (this.filtered) {\n            if (this.appendTo)\n                this.domHandler.absolutePosition(this.panel, this.container);\n            else\n                this.domHandler.relativePosition(this.panel, this.container);\n            this.filtered = false;\n        }\n    };\n    MultiSelect.prototype.writeValue = function (value) {\n        this.value = value;\n        this.updateLabel();\n        this.updateFilledState();\n        this.cd.markForCheck();\n    };\n    MultiSelect.prototype.updateFilledState = function () {\n        this.filled = (this.valuesAsString != null && this.valuesAsString.length > 0);\n    };\n    MultiSelect.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    MultiSelect.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    MultiSelect.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    MultiSelect.prototype.onItemClick = function (event, value) {\n        var selectionIndex = this.findSelectionIndex(value);\n        if (selectionIndex != -1)\n            this.value = this.value.filter(function (val, i) { return i != selectionIndex; });\n        else\n            this.value = (this.value || []).concat([value]);\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value, itemValue: value });\n        this.updateLabel();\n        this.updateFilledState();\n    };\n    MultiSelect.prototype.isSelected = function (value) {\n        return this.findSelectionIndex(value) != -1;\n    };\n    MultiSelect.prototype.findSelectionIndex = function (val) {\n        var index = -1;\n        if (this.value) {\n            for (var i = 0; i < this.value.length; i++) {\n                if (this.objectUtils.equals(this.value[i], val, this.dataKey)) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    MultiSelect.prototype.toggleAll = function (event, checkbox) {\n        if (checkbox.checked) {\n            this.value = [];\n        }\n        else {\n            var opts = this.getVisibleOptions();\n            if (opts) {\n                this.value = [];\n                for (var i = 0; i < opts.length; i++) {\n                    this.value.push(opts[i].value);\n                }\n            }\n        }\n        checkbox.checked = !checkbox.checked;\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value });\n        this.updateLabel();\n    };\n    MultiSelect.prototype.isAllChecked = function () {\n        if (this.filterValue && this.filterValue.trim().length)\n            return this.value && this.visibleOptions && this.visibleOptions.length && (this.value.length == this.visibleOptions.length);\n        else\n            return this.value && this.options && (this.value.length == this.options.length);\n    };\n    MultiSelect.prototype.show = function () {\n        this.overlayVisible = true;\n        this.panel.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n        this.bindDocumentClickListener();\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.panel, this.container);\n        else\n            this.domHandler.relativePosition(this.panel, this.container);\n        this.domHandler.fadeIn(this.panel, 250);\n        this.onPanelShow.emit();\n    };\n    MultiSelect.prototype.hide = function () {\n        this.overlayVisible = false;\n        this.unbindDocumentClickListener();\n        if (this.resetFilterOnHide) {\n            this.filterValue = null;\n            this.filterInputChild.nativeElement.value = null;\n        }\n        this.onPanelHide.emit();\n    };\n    MultiSelect.prototype.close = function (event) {\n        this.hide();\n        event.preventDefault();\n        event.stopPropagation();\n    };\n    MultiSelect.prototype.onMouseclick = function (event, input) {\n        if (this.disabled) {\n            return;\n        }\n        if (!this.panelClick) {\n            if (this.overlayVisible) {\n                this.hide();\n            }\n            else {\n                input.focus();\n                this.show();\n            }\n        }\n        this.selfClick = true;\n    };\n    MultiSelect.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        this.onFocus.emit({ originalEvent: event });\n    };\n    MultiSelect.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        this.onBlur.emit({ originalEvent: event });\n        this.onModelTouched();\n    };\n    MultiSelect.prototype.onInputKeydown = function (event) {\n        switch (event.which) {\n            //down\n            case 40:\n                if (!this.overlayVisible && event.altKey) {\n                    this.show();\n                }\n                event.preventDefault();\n                break;\n            //escape and tab\n            case 27:\n            case 9:\n                this.hide();\n                break;\n        }\n    };\n    MultiSelect.prototype.updateLabel = function () {\n        if (this.value && this.options && this.value.length && this.displaySelectedLabel) {\n            var label = '';\n            for (var i = 0; i < this.value.length; i++) {\n                var itemLabel = this.findLabelByValue(this.value[i]);\n                if (itemLabel) {\n                    if (label.length > 0) {\n                        label = label + ', ';\n                    }\n                    label = label + itemLabel;\n                }\n            }\n            if (this.value.length <= this.maxSelectedLabels) {\n                this.valuesAsString = label;\n            }\n            else {\n                var pattern = /{(.*?)}/;\n                if (pattern.test(this.selectedItemsLabel)) {\n                    this.valuesAsString = this.selectedItemsLabel.replace(this.selectedItemsLabel.match(pattern)[0], this.value.length + '');\n                }\n            }\n        }\n        else {\n            this.valuesAsString = this.defaultLabel;\n        }\n    };\n    MultiSelect.prototype.findLabelByValue = function (val) {\n        var label = null;\n        for (var i = 0; i < this.options.length; i++) {\n            var option = this.options[i];\n            if (val == null && option.value == null || this.objectUtils.equals(val, option.value, this.dataKey)) {\n                label = option.label;\n                break;\n            }\n        }\n        return label;\n    };\n    MultiSelect.prototype.onFilter = function (event) {\n        this.filterValue = event.target.value.trim().toLowerCase();\n        this.visibleOptions = [];\n        for (var i = 0; i < this.options.length; i++) {\n            var option = this.options[i];\n            if (option.label.toLowerCase().indexOf(this.filterValue.toLowerCase()) > -1) {\n                this.visibleOptions.push(option);\n            }\n        }\n        this.filtered = true;\n    };\n    MultiSelect.prototype.isItemVisible = function (option) {\n        if (this.filterValue && this.filterValue.trim().length) {\n            for (var i = 0; i < this.visibleOptions.length; i++) {\n                if (this.visibleOptions[i].value == option.value) {\n                    return true;\n                }\n            }\n        }\n        else {\n            return true;\n        }\n    };\n    MultiSelect.prototype.getVisibleOptions = function () {\n        if (this.filterValue && this.filterValue.trim().length) {\n            var items = [];\n            for (var i = 0; i < this.options.length; i++) {\n                var option = this.options[i];\n                if (option.label.toLowerCase().includes(this.filterValue.toLowerCase())) {\n                    items.push(option);\n                }\n            }\n            return items;\n        }\n        else {\n            return this.options;\n        }\n    };\n    MultiSelect.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.selfClick && !_this.panelClick && _this.overlayVisible) {\n                    _this.hide();\n                }\n                _this.selfClick = false;\n                _this.panelClick = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    MultiSelect.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    MultiSelect.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.container.appendChild(this.panel);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"defaultLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MultiSelect.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MultiSelect.prototype, \"panelStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"panelStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"filter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"filterPlaceHolder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"overlayVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], MultiSelect.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MultiSelect.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"displaySelectedLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], MultiSelect.prototype, \"maxSelectedLabels\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"selectedItemsLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"showToggleAll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"resetFilterOnHide\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"dropdownIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"optionLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"showHeader\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], MultiSelect.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('panel'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], MultiSelect.prototype, \"panelViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('filterInput'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], MultiSelect.prototype, \"filterInputChild\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], MultiSelect.prototype, \"footerFacet\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], MultiSelect.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onPanelShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onPanelHide\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], MultiSelect.prototype, \"options\", null);\n    MultiSelect = __decorate([\n        core_1.Component({\n            selector: 'p-multiSelect',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-multiselect ui-widget ui-state-default ui-corner-all':true,'ui-state-focus':focus,'ui-state-disabled': disabled}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\"\\n            (click)=\\\"onMouseclick($event,in)\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #in type=\\\"text\\\" readonly=\\\"readonly\\\" [attr.id]=\\\"inputId\\\" [attr.name]=\\\"name\\\" (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\" (keydown)=\\\"onInputKeydown($event)\\\">\\n            </div>\\n            <div class=\\\"ui-multiselect-label-container\\\" [title]=\\\"valuesAsString\\\">\\n                <label class=\\\"ui-multiselect-label ui-corner-all\\\">{{valuesAsString}}</label>\\n            </div>\\n            <div [ngClass]=\\\"{'ui-multiselect-trigger ui-state-default ui-corner-right':true}\\\">\\n                <span class=\\\"ui-multiselect-trigger-icon ui-clickable\\\" [ngClass]=\\\"dropdownIcon\\\"></span>\\n            </div>\\n            <div #panel [ngClass]=\\\"['ui-multiselect-panel ui-widget ui-widget-content ui-corner-all ui-shadow', panelStyleClass||'']\\\" [ngStyle]=\\\"panelStyle\\\"\\n                [style.display]=\\\"overlayVisible ? 'block' : 'none'\\\" (click)=\\\"panelClick=true\\\">\\n                <div class=\\\"ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix\\\" [ngClass]=\\\"{'ui-multiselect-header-no-toggleall': !showToggleAll}\\\" *ngIf=\\\"showHeader\\\">\\n                    <div class=\\\"ui-chkbox ui-widget\\\" *ngIf=\\\"showToggleAll\\\">\\n                        <div class=\\\"ui-helper-hidden-accessible\\\">\\n                            <input #cb type=\\\"checkbox\\\" readonly=\\\"readonly\\\" [checked]=\\\"isAllChecked()\\\">\\n                        </div>\\n                        <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" [ngClass]=\\\"{'ui-state-active':isAllChecked()}\\\" (click)=\\\"toggleAll($event,cb)\\\">\\n                            <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':isAllChecked()}\\\"></span>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"ui-multiselect-filter-container\\\" *ngIf=\\\"filter\\\">\\n                        <input #filterInput type=\\\"text\\\" role=\\\"textbox\\\" (input)=\\\"onFilter($event)\\\" class=\\\"ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [attr.placeholder]=\\\"filterPlaceHolder\\\">\\n                        <span class=\\\"ui-multiselect-filter-icon fa fa-fw fa-search\\\"></span>\\n                    </div>\\n                    <a class=\\\"ui-multiselect-close ui-corner-all\\\" href=\\\"#\\\" (click)=\\\"close($event)\\\">\\n                        <span class=\\\"fa fa-close\\\"></span>\\n                    </a>\\n                </div>\\n                <div class=\\\"ui-multiselect-items-wrapper\\\">\\n                    <ul class=\\\"ui-multiselect-items ui-multiselect-list ui-widget-content ui-widget ui-corner-all ui-helper-reset\\\" [style.max-height]=\\\"scrollHeight||'auto'\\\">\\n                        <li *ngFor=\\\"let option of options; let i = index\\\" class=\\\"ui-multiselect-item ui-corner-all\\\" (click)=\\\"onItemClick($event,option.value)\\\" \\n                            [style.display]=\\\"isItemVisible(option) ? 'block' : 'none'\\\" [ngClass]=\\\"{'ui-state-highlight':isSelected(option.value)}\\\">\\n                            <div class=\\\"ui-chkbox ui-widget\\\">\\n                                <div class=\\\"ui-helper-hidden-accessible\\\">\\n                                    <input #itemcb type=\\\"checkbox\\\" readonly=\\\"readonly\\\" [checked]=\\\"isSelected(option.value)\\\" (focus)=\\\"focusedItemCheckbox=itemcb\\\" (blur)=\\\"focusedItemCheckbox=null\\\" [attr.aria-label]=\\\"option.label\\\">\\n                                </div>\\n                                <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" [ngClass]=\\\"{'ui-state-active':isSelected(option.value), 'ui-state-focus': (focusedItemCheckbox === itemcb)}\\\">\\n                                    <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':isSelected(option.value)}\\\"></span>\\n                                </div>\\n                            </div>\\n                            <label *ngIf=\\\"!itemTemplate\\\">{{option.label}}</label>\\n                            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option, index: i}\\\"></ng-container>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"ui-multiselect-footer ui-widget-content\\\" *ngIf=\\\"footerFacet\\\">\\n                    <ng-content select=\\\"p-footer\\\"></ng-content>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils, exports.MULTISELECT_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, objectutils_1.ObjectUtils, core_1.ChangeDetectorRef])\n    ], MultiSelect);\n    return MultiSelect;\n}());\nexports.MultiSelect = MultiSelect;\nvar MultiSelectModule = /** @class */ (function () {\n    function MultiSelectModule() {\n    }\n    MultiSelectModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [MultiSelect, shared_1.SharedModule],\n            declarations: [MultiSelect]\n        })\n    ], MultiSelectModule);\n    return MultiSelectModule;\n}());\nexports.MultiSelectModule = MultiSelectModule;\n//# sourceMappingURL=multiselect.js.map\n\n/***/ }),\n/* 764 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar button_1 = __webpack_require__(37);\nvar shared_1 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar objectutils_1 = __webpack_require__(40);\nvar OrderList = /** @class */ (function () {\n    function OrderList(el, domHandler, objectUtils) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.objectUtils = objectUtils;\n        this.metaKeySelection = true;\n        this.trackBy = function (index, item) { return item; };\n        this.onReorder = new core_1.EventEmitter();\n        this.onSelectionChange = new core_1.EventEmitter();\n        this.onFilterEvent = new core_1.EventEmitter();\n    }\n    OrderList.prototype.ngAfterViewInit = function () {\n        this.listContainer = this.domHandler.findSingle(this.el.nativeElement, 'ul.ui-orderlist-list');\n    };\n    OrderList.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    OrderList.prototype.ngAfterViewChecked = function () {\n        if (this.movedUp || this.movedDown) {\n            var listItems = this.domHandler.find(this.listContainer, 'li.ui-state-highlight');\n            var listItem = void 0;\n            if (listItems.length > 0) {\n                if (this.movedUp)\n                    listItem = listItems[0];\n                else\n                    listItem = listItems[listItems.length - 1];\n                this.domHandler.scrollInView(this.listContainer, listItem);\n            }\n            this.movedUp = false;\n            this.movedDown = false;\n        }\n    };\n    Object.defineProperty(OrderList.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            if (this.filterValue) {\n                this.filter();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    OrderList.prototype.onItemClick = function (event, item, index) {\n        var selectedIndex = this.objectUtils.findIndexInList(item, this.selectedItems);\n        var selected = (selectedIndex != -1);\n        var metaSelection = this.itemTouched ? false : this.metaKeySelection;\n        if (metaSelection) {\n            var metaKey = (event.metaKey || event.ctrlKey);\n            if (selected && metaKey) {\n                this.selectedItems.splice(selectedIndex, 1);\n            }\n            else {\n                this.selectedItems = (metaKey) ? this.selectedItems || [] : [];\n                this.selectItem(item, index);\n            }\n        }\n        else {\n            if (selected) {\n                this.selectedItems.splice(selectedIndex, 1);\n            }\n            else {\n                this.selectedItems = this.selectedItems || [];\n                this.selectItem(item, index);\n            }\n        }\n        this.onSelectionChange.emit({ originalEvent: event, value: this.selectedItems });\n        this.itemTouched = false;\n    };\n    OrderList.prototype.selectItem = function (item, index) {\n        this.selectedItems = this.selectedItems || [];\n        this.objectUtils.insertIntoOrderedArray(item, index, this.selectedItems, this.value);\n    };\n    OrderList.prototype.onFilterKeyup = function (event) {\n        this.filterValue = event.target.value.trim().toLowerCase();\n        this.filter();\n        this.onFilterEvent.emit({\n            originalEvent: event,\n            value: this.visibleOptions\n        });\n    };\n    OrderList.prototype.filter = function () {\n        var searchFields = this.filterBy.split(',');\n        this.visibleOptions = this.objectUtils.filter(this.value, searchFields, this.filterValue);\n    };\n    OrderList.prototype.isItemVisible = function (item) {\n        if (this.filterValue && this.filterValue.trim().length) {\n            for (var i = 0; i < this.visibleOptions.length; i++) {\n                if (item == this.visibleOptions[i]) {\n                    return true;\n                }\n            }\n        }\n        else {\n            return true;\n        }\n    };\n    OrderList.prototype.onItemTouchEnd = function (event) {\n        this.itemTouched = true;\n    };\n    OrderList.prototype.isSelected = function (item) {\n        return this.objectUtils.findIndexInList(item, this.selectedItems) != -1;\n    };\n    OrderList.prototype.moveUp = function (event, listElement) {\n        if (this.selectedItems) {\n            for (var i = 0; i < this.selectedItems.length; i++) {\n                var selectedItem = this.selectedItems[i];\n                var selectedItemIndex = this.objectUtils.findIndexInList(selectedItem, this.value);\n                if (selectedItemIndex != 0) {\n                    var movedItem = this.value[selectedItemIndex];\n                    var temp = this.value[selectedItemIndex - 1];\n                    this.value[selectedItemIndex - 1] = movedItem;\n                    this.value[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n            this.movedUp = true;\n            this.onReorder.emit(event);\n        }\n    };\n    OrderList.prototype.moveTop = function (event, listElement) {\n        if (this.selectedItems) {\n            for (var i = 0; i < this.selectedItems.length; i++) {\n                var selectedItem = this.selectedItems[i];\n                var selectedItemIndex = this.objectUtils.findIndexInList(selectedItem, this.value);\n                if (selectedItemIndex != 0) {\n                    var movedItem = this.value.splice(selectedItemIndex, 1)[0];\n                    this.value.unshift(movedItem);\n                    listElement.scrollTop = 0;\n                }\n                else {\n                    break;\n                }\n            }\n            this.onReorder.emit(event);\n            listElement.scrollTop = 0;\n        }\n    };\n    OrderList.prototype.moveDown = function (event, listElement) {\n        if (this.selectedItems) {\n            for (var i = this.selectedItems.length - 1; i >= 0; i--) {\n                var selectedItem = this.selectedItems[i];\n                var selectedItemIndex = this.objectUtils.findIndexInList(selectedItem, this.value);\n                if (selectedItemIndex != (this.value.length - 1)) {\n                    var movedItem = this.value[selectedItemIndex];\n                    var temp = this.value[selectedItemIndex + 1];\n                    this.value[selectedItemIndex + 1] = movedItem;\n                    this.value[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n            this.movedDown = true;\n            this.onReorder.emit(event);\n        }\n    };\n    OrderList.prototype.moveBottom = function (event, listElement) {\n        if (this.selectedItems) {\n            for (var i = this.selectedItems.length - 1; i >= 0; i--) {\n                var selectedItem = this.selectedItems[i];\n                var selectedItemIndex = this.objectUtils.findIndexInList(selectedItem, this.value);\n                if (selectedItemIndex != (this.value.length - 1)) {\n                    var movedItem = this.value.splice(selectedItemIndex, 1)[0];\n                    this.value.push(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n            this.onReorder.emit(event);\n            listElement.scrollTop = listElement.scrollHeight;\n        }\n    };\n    OrderList.prototype.onDragStart = function (event, index) {\n        this.dragging = true;\n        this.draggedItemIndex = index;\n        if (this.dragdropScope) {\n            event.dataTransfer.setData(\"text\", this.dragdropScope);\n        }\n    };\n    OrderList.prototype.onDragOver = function (event, index) {\n        if (this.draggedItemIndex !== index && this.draggedItemIndex + 1 !== index) {\n            this.dragOverItemIndex = index;\n            event.preventDefault();\n        }\n    };\n    OrderList.prototype.onDragLeave = function (event) {\n        this.dragOverItemIndex = null;\n    };\n    OrderList.prototype.onDrop = function (event, index) {\n        var dropIndex = (this.draggedItemIndex > index) ? index : (index === 0) ? 0 : index - 1;\n        this.objectUtils.reorderArray(this.value, this.draggedItemIndex, dropIndex);\n        this.dragOverItemIndex = null;\n        this.onReorder.emit(event);\n        event.preventDefault();\n    };\n    OrderList.prototype.onDragEnd = function (event) {\n        this.dragging = false;\n    };\n    OrderList.prototype.onListMouseMove = function (event) {\n        if (this.dragging) {\n            var offsetY = this.listViewChild.nativeElement.getBoundingClientRect().top + document.body.scrollTop;\n            var bottomDiff = (offsetY + this.listViewChild.nativeElement.clientHeight) - event.pageY;\n            var topDiff = (event.pageY - offsetY);\n            if (bottomDiff < 25 && bottomDiff > 0)\n                this.listViewChild.nativeElement.scrollTop += 15;\n            else if (topDiff < 25 && topDiff > 0)\n                this.listViewChild.nativeElement.scrollTop -= 15;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrderList.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrderList.prototype, \"listStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrderList.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"filterBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"filterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrderList.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrderList.prototype, \"dragdrop\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"dragdropScope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], OrderList.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrderList.prototype, \"onReorder\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrderList.prototype, \"onSelectionChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrderList.prototype, \"onFilterEvent\", void 0);\n    __decorate([\n        core_1.ViewChild('listelement'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], OrderList.prototype, \"listViewChild\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], OrderList.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], OrderList.prototype, \"value\", null);\n    OrderList = __decorate([\n        core_1.Component({\n            selector: 'p-orderList',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-orderlist ui-widget':true,'ui-orderlist-responsive':responsive}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-orderlist-controls\\\">\\n                <button type=\\\"button\\\" pButton icon=\\\"fa-angle-up\\\" (click)=\\\"moveUp($event,listelement)\\\"></button>\\n                <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-up\\\" (click)=\\\"moveTop($event,listelement)\\\"></button>\\n                <button type=\\\"button\\\" pButton icon=\\\"fa-angle-down\\\" (click)=\\\"moveDown($event,listelement)\\\"></button>\\n                <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-down\\\" (click)=\\\"moveBottom($event,listelement)\\\"></button>\\n            </div>\\n            <div class=\\\"ui-orderlist-list-container\\\">\\n                <div class=\\\"ui-orderlist-caption ui-widget-header ui-corner-top\\\" *ngIf=\\\"header\\\">{{header}}</div>\\n                <div class=\\\"ui-orderlist-filter-container ui-widget-content\\\" *ngIf=\\\"filterBy\\\">\\n                    <input type=\\\"text\\\" role=\\\"textbox\\\" (keyup)=\\\"onFilterKeyup($event)\\\" class=\\\"ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [attr.placeholder]=\\\"filterPlaceholder\\\">\\n                    <span class=\\\"ui-orderlist-filter-icon fa fa-search\\\"></span>\\n                </div>\\n                <ul #listelement class=\\\"ui-widget-content ui-orderlist-list ui-corner-bottom\\\" [ngStyle]=\\\"listStyle\\\" (dragover)=\\\"onListMouseMove($event)\\\">\\n                    <ng-template ngFor [ngForTrackBy]=\\\"trackBy\\\" let-item [ngForOf]=\\\"value\\\" let-i=\\\"index\\\" let-l=\\\"last\\\">\\n                        <li class=\\\"ui-orderlist-droppoint\\\" *ngIf=\\\"dragdrop && isItemVisible(item)\\\" (dragover)=\\\"onDragOver($event, i)\\\" (drop)=\\\"onDrop($event, i)\\\" (dragleave)=\\\"onDragLeave($event)\\\" \\n                            [ngClass]=\\\"{'ui-state-highlight': (i === dragOverItemIndex)}\\\"></li>\\n                        <li class=\\\"ui-orderlist-item\\\"\\n                            [ngClass]=\\\"{'ui-state-highlight':isSelected(item)}\\\" \\n                            (click)=\\\"onItemClick($event,item,i)\\\" (touchend)=\\\"onItemTouchEnd($event)\\\"\\n                            [style.display]=\\\"isItemVisible(item) ? 'block' : 'none'\\\"\\n                            [draggable]=\\\"dragdrop\\\" (dragstart)=\\\"onDragStart($event, i)\\\" (dragend)=\\\"onDragEnd($event)\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: i}\\\"></ng-container>\\n                        </li>\\n                        <li class=\\\"ui-orderlist-droppoint\\\" *ngIf=\\\"dragdrop && l\\\" (dragover)=\\\"onDragOver($event, i + 1)\\\" (drop)=\\\"onDrop($event, i + 1)\\\" (dragleave)=\\\"onDragLeave($event)\\\" \\n                            [ngClass]=\\\"{'ui-state-highlight': (i + 1 === dragOverItemIndex)}\\\"></li>\\n                    </ng-template>\\n                </ul>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, objectutils_1.ObjectUtils])\n    ], OrderList);\n    return OrderList;\n}());\nexports.OrderList = OrderList;\nvar OrderListModule = /** @class */ (function () {\n    function OrderListModule() {\n    }\n    OrderListModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule, shared_1.SharedModule],\n            exports: [OrderList, shared_1.SharedModule],\n            declarations: [OrderList]\n        })\n    ], OrderListModule);\n    return OrderListModule;\n}());\nexports.OrderListModule = OrderListModule;\n//# sourceMappingURL=orderlist.js.map\n\n/***/ }),\n/* 765 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar shared_1 = __webpack_require__(15);\nvar shared_2 = __webpack_require__(15);\nvar OrganizationChartNode = /** @class */ (function () {\n    function OrganizationChartNode(chart) {\n        this.chart = chart;\n    }\n    Object.defineProperty(OrganizationChartNode.prototype, \"leaf\", {\n        get: function () {\n            return this.node.leaf == false ? false : !(this.node.children && this.node.children.length);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(OrganizationChartNode.prototype, \"colspan\", {\n        get: function () {\n            return (this.node.children && this.node.children.length) ? this.node.children.length * 2 : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    OrganizationChartNode.prototype.onNodeClick = function (event, node) {\n        this.chart.onNodeClick(event, node);\n    };\n    OrganizationChartNode.prototype.toggleNode = function (event, node) {\n        node.expanded = !node.expanded;\n        event.preventDefault();\n    };\n    OrganizationChartNode.prototype.isSelected = function () {\n        return this.chart.isSelected(this.node);\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrganizationChartNode.prototype, \"node\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrganizationChartNode.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrganizationChartNode.prototype, \"first\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrganizationChartNode.prototype, \"last\", void 0);\n    OrganizationChartNode = __decorate([\n        core_1.Component({\n            selector: '[pOrganizationChartNode]',\n            template: \"\\n        <tr *ngIf=\\\"node\\\">\\n            <td [attr.colspan]=\\\"colspan\\\">\\n                <div class=\\\"ui-organizationchart-node-content ui-widget-content ui-corner-all {{node.styleClass}}\\\" \\n                    [ngClass]=\\\"{'ui-organizationchart-selectable-node': chart.selectionMode && node.selectable !== false,'ui-state-highlight':isSelected()}\\\"\\n                    (click)=\\\"onNodeClick($event,node)\\\">\\n                    <div *ngIf=\\\"!chart.getTemplateForNode(node)\\\">{{node.label}}</div>\\n                    <div *ngIf=\\\"chart.getTemplateForNode(node)\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"chart.getTemplateForNode(node); context: {$implicit: node}\\\"></ng-container>\\n                    </div>\\n                    <a *ngIf=\\\"!leaf\\\" href=\\\"#\\\" class=\\\"ui-node-toggler\\\" (click)=\\\"toggleNode($event, node)\\\">\\n                        <i class=\\\"fa ui-node-toggler-icon\\\" [ngClass]=\\\"{'fa-chevron-down': node.expanded, 'fa-chevron-up': !node.expanded}\\\"></i>\\n                    </a>\\n                </div>\\n            </td>\\n        </tr>\\n        <tr [style.visibility]=\\\"!leaf&&node.expanded ? 'inherit' : 'hidden'\\\" class=\\\"ui-organizationchart-lines\\\" [@childState]=\\\"'in'\\\">\\n            <td [attr.colspan]=\\\"colspan\\\">\\n                <div class=\\\"ui-organizationchart-line-down\\\"></div>\\n            </td>\\n        </tr>\\n        <tr [style.visibility]=\\\"!leaf&&node.expanded ? 'inherit' : 'hidden'\\\" class=\\\"ui-organizationchart-lines\\\" [@childState]=\\\"'in'\\\">\\n            <ng-container *ngIf=\\\"node.children && node.children.length === 1\\\">\\n                <td [attr.colspan]=\\\"colspan\\\">\\n                    <div class=\\\"ui-organizationchart-line-down\\\"></div>\\n                </td>\\n            </ng-container>\\n            <ng-container *ngIf=\\\"node.children && node.children.length > 1\\\">\\n                <ng-template ngFor let-child [ngForOf]=\\\"node.children\\\" let-first=\\\"first\\\" let-last=\\\"last\\\">\\n                    <td class=\\\"ui-organizationchart-line-left\\\" [ngClass]=\\\"{'ui-organizationchart-line-top':!first}\\\">&nbsp;</td>\\n                    <td class=\\\"ui-organizationchart-line-right\\\" [ngClass]=\\\"{'ui-organizationchart-line-top':!last}\\\">&nbsp;</td>\\n                </ng-template>\\n            </ng-container>\\n        </tr>\\n        <tr [style.visibility]=\\\"!leaf&&node.expanded ? 'inherit' : 'hidden'\\\" class=\\\"ui-organizationchart-nodes\\\" [@childState]=\\\"'in'\\\">\\n            <td *ngFor=\\\"let child of node.children\\\" colspan=\\\"2\\\">\\n                <table class=\\\"ui-organizationchart-table\\\" pOrganizationChartNode [node]=\\\"child\\\"></table>\\n            </td>\\n        </tr>\\n    \",\n            animations: [\n                animations_1.trigger('childState', [\n                    animations_1.state('in', animations_1.style({ opacity: 1 })),\n                    animations_1.transition('void => *', [\n                        animations_1.style({ opacity: 0 }),\n                        animations_1.animate(150)\n                    ]),\n                    animations_1.transition('* => void', [\n                        animations_1.animate(150, animations_1.style({ opacity: 0 }))\n                    ])\n                ])\n            ],\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return OrganizationChart; }))),\n        __metadata(\"design:paramtypes\", [OrganizationChart])\n    ], OrganizationChartNode);\n    return OrganizationChartNode;\n}());\nexports.OrganizationChartNode = OrganizationChartNode;\nvar OrganizationChart = /** @class */ (function () {\n    function OrganizationChart(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.selectionChange = new core_1.EventEmitter();\n        this.onNodeSelect = new core_1.EventEmitter();\n        this.onNodeUnselect = new core_1.EventEmitter();\n    }\n    Object.defineProperty(OrganizationChart.prototype, \"root\", {\n        get: function () {\n            return this.value && this.value.length ? this.value[0] : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    OrganizationChart.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        if (this.templates.length) {\n            this.templateMap = {};\n        }\n        this.templates.forEach(function (item) {\n            _this.templateMap[item.getType()] = item.template;\n        });\n    };\n    OrganizationChart.prototype.getTemplateForNode = function (node) {\n        if (this.templateMap)\n            return node.type ? this.templateMap[node.type] : this.templateMap['default'];\n        else\n            return null;\n    };\n    OrganizationChart.prototype.onNodeClick = function (event, node) {\n        var eventTarget = event.target;\n        if (eventTarget.className && (eventTarget.className.indexOf('ui-node-toggler') !== -1 || eventTarget.className.indexOf('ui-node-toggler-icon') !== -1)) {\n            return;\n        }\n        else if (this.selectionMode) {\n            if (node.selectable === false) {\n                return;\n            }\n            var index_1 = this.findIndexInSelection(node);\n            var selected = (index_1 >= 0);\n            if (this.selectionMode === 'single') {\n                if (selected) {\n                    this.selection = null;\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                }\n                else {\n                    this.selection = node;\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            }\n            else if (this.selectionMode === 'multiple') {\n                if (selected) {\n                    this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                }\n                else {\n                    this.selection = (this.selection || []).concat([node]);\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            }\n            this.selectionChange.emit(this.selection);\n        }\n    };\n    OrganizationChart.prototype.findIndexInSelection = function (node) {\n        var index = -1;\n        if (this.selectionMode && this.selection) {\n            if (this.selectionMode === 'single') {\n                index = (this.selection == node) ? 0 : -1;\n            }\n            else if (this.selectionMode === 'multiple') {\n                for (var i = 0; i < this.selection.length; i++) {\n                    if (this.selection[i] == node) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n        return index;\n    };\n    OrganizationChart.prototype.isSelected = function (node) {\n        return this.findIndexInSelection(node) != -1;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], OrganizationChart.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrganizationChart.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrganizationChart.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrganizationChart.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrganizationChart.prototype, \"selection\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrganizationChart.prototype, \"selectionChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrganizationChart.prototype, \"onNodeSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrganizationChart.prototype, \"onNodeUnselect\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], OrganizationChart.prototype, \"templates\", void 0);\n    OrganizationChart = __decorate([\n        core_1.Component({\n            selector: 'p-organizationChart',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [ngClass]=\\\"'ui-organizationchart ui-widget'\\\">\\n            <table class=\\\"ui-organizationchart-table\\\" pOrganizationChartNode [node]=\\\"root\\\" *ngIf=\\\"root\\\"></table>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], OrganizationChart);\n    return OrganizationChart;\n}());\nexports.OrganizationChart = OrganizationChart;\nvar OrganizationChartModule = /** @class */ (function () {\n    function OrganizationChartModule() {\n    }\n    OrganizationChartModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [OrganizationChart, shared_1.SharedModule],\n            declarations: [OrganizationChart, OrganizationChartNode]\n        })\n    ], OrganizationChartModule);\n    return OrganizationChartModule;\n}());\nexports.OrganizationChartModule = OrganizationChartModule;\n//# sourceMappingURL=organizationchart.js.map\n\n/***/ }),\n/* 766 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar animations_1 = __webpack_require__(28);\nvar OverlayPanel = /** @class */ (function () {\n    function OverlayPanel(el, domHandler, renderer, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.dismissable = true;\n        this.onBeforeShow = new core_1.EventEmitter();\n        this.onAfterShow = new core_1.EventEmitter();\n        this.onBeforeHide = new core_1.EventEmitter();\n        this.onAfterHide = new core_1.EventEmitter();\n        this.visible = false;\n    }\n    OverlayPanel.prototype.ngAfterViewInit = function () {\n        this.container = this.el.nativeElement.children[0];\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.container);\n            else\n                this.domHandler.appendChild(this.container, this.appendTo);\n        }\n    };\n    OverlayPanel.prototype.ngAfterViewChecked = function () {\n        if (this.willShow) {\n            this.domHandler.absolutePosition(this.container, this.target);\n            this.bindDocumentClickListener();\n            this.onAfterShow.emit(null);\n            this.willShow = false;\n        }\n        if (this.willHide) {\n            this.onAfterHide.emit(null);\n            this.willHide = false;\n        }\n    };\n    OverlayPanel.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener && this.dismissable) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.selfClick && !_this.targetClickEvent) {\n                    _this.hide();\n                }\n                _this.selfClick = false;\n                _this.targetClickEvent = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    OverlayPanel.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    OverlayPanel.prototype.toggle = function (event, target) {\n        if (!this.target || this.target === (target || event.currentTarget || event.target)) {\n            if (this.visible)\n                this.hide();\n            else\n                this.show(event, target);\n        }\n        else {\n            this.show(event, target);\n        }\n    };\n    OverlayPanel.prototype.show = function (event, target) {\n        this.onBeforeShow.emit(null);\n        this.target = target || event.currentTarget || event.target;\n        this.container.style.zIndex = ++domhandler_1.DomHandler.zindex;\n        this.visible = true;\n        this.willShow = true;\n        if (event.type === 'click') {\n            this.targetClickEvent = true;\n        }\n    };\n    OverlayPanel.prototype.hide = function () {\n        if (this.visible) {\n            this.onBeforeHide.emit(null);\n            this.willHide = true;\n            this.visible = false;\n            this.selfClick = false;\n            this.targetClickEvent = false;\n            this.unbindDocumentClickListener();\n        }\n    };\n    OverlayPanel.prototype.onPanelClick = function (event) {\n        if (this.closeClick) {\n            this.hide();\n            this.closeClick = false;\n        }\n        else if (this.dismissable) {\n            this.selfClick = true;\n        }\n    };\n    OverlayPanel.prototype.onCloseClick = function (event) {\n        this.closeClick = true;\n        event.preventDefault();\n    };\n    OverlayPanel.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.container);\n        }\n        this.target = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OverlayPanel.prototype, \"dismissable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OverlayPanel.prototype, \"showCloseIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OverlayPanel.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OverlayPanel.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OverlayPanel.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OverlayPanel.prototype, \"onBeforeShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OverlayPanel.prototype, \"onAfterShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OverlayPanel.prototype, \"onBeforeHide\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OverlayPanel.prototype, \"onAfterHide\", void 0);\n    OverlayPanel = __decorate([\n        core_1.Component({\n            selector: 'p-overlayPanel',\n            template: \"\\n        <div [ngClass]=\\\"'ui-overlaypanel ui-widget ui-widget-content ui-corner-all ui-shadow'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\"\\n            [style.display]=\\\"visible ? 'block' : 'none'\\\" (click)=\\\"onPanelClick($event)\\\" [@panelState]=\\\"visible ? 'visible' : 'hidden'\\\">\\n            <div class=\\\"ui-overlaypanel-content\\\">\\n                <ng-content></ng-content>\\n            </div>\\n            <a href=\\\"#\\\" *ngIf=\\\"showCloseIcon\\\" class=\\\"ui-overlaypanel-close ui-state-default\\\" (click)=\\\"onCloseClick($event)\\\">\\n                <span class=\\\"fa fa-fw fa-close\\\"></span>\\n            </a>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], OverlayPanel);\n    return OverlayPanel;\n}());\nexports.OverlayPanel = OverlayPanel;\nvar OverlayPanelModule = /** @class */ (function () {\n    function OverlayPanelModule() {\n    }\n    OverlayPanelModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [OverlayPanel],\n            declarations: [OverlayPanel]\n        })\n    ], OverlayPanelModule);\n    return OverlayPanelModule;\n}());\nexports.OverlayPanelModule = OverlayPanelModule;\n//# sourceMappingURL=overlaypanel.js.map\n\n/***/ }),\n/* 767 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar animations_1 = __webpack_require__(28);\nvar idx = 0;\nvar Panel = /** @class */ (function () {\n    function Panel(el) {\n        this.el = el;\n        this.collapsed = false;\n        this.expandIcon = 'fa-plus';\n        this.collapseIcon = 'fa-minus';\n        this.showHeader = true;\n        this.collapsedChange = new core_1.EventEmitter();\n        this.onBeforeToggle = new core_1.EventEmitter();\n        this.onAfterToggle = new core_1.EventEmitter();\n        this.id = \"ui-panel-\" + idx++;\n    }\n    Panel.prototype.toggle = function (event) {\n        if (this.animating) {\n            return false;\n        }\n        this.animating = true;\n        this.onBeforeToggle.emit({ originalEvent: event, collapsed: this.collapsed });\n        if (this.toggleable) {\n            if (this.collapsed)\n                this.expand(event);\n            else\n                this.collapse(event);\n        }\n        event.preventDefault();\n    };\n    Panel.prototype.expand = function (event) {\n        this.collapsed = false;\n        this.collapsedChange.emit(this.collapsed);\n    };\n    Panel.prototype.collapse = function (event) {\n        this.collapsed = true;\n        this.collapsedChange.emit(this.collapsed);\n    };\n    Panel.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Panel.prototype.onToggleDone = function (event) {\n        this.animating = false;\n        this.onAfterToggle.emit({ originalEvent: event, collapsed: this.collapsed });\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Panel.prototype, \"toggleable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Panel.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Panel.prototype, \"collapsed\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Panel.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Panel.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Panel.prototype, \"expandIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Panel.prototype, \"collapseIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Panel.prototype, \"showHeader\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Panel.prototype, \"collapsedChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Panel.prototype, \"onBeforeToggle\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Panel.prototype, \"onAfterToggle\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], Panel.prototype, \"footerFacet\", void 0);\n    Panel = __decorate([\n        core_1.Component({\n            selector: 'p-panel',\n            template: \"\\n        <div [attr.id]=\\\"id\\\" [ngClass]=\\\"'ui-panel ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-panel-titlebar ui-widget-header ui-helper-clearfix ui-corner-all\\\" *ngIf=\\\"showHeader\\\">\\n                <span class=\\\"ui-panel-title\\\" *ngIf=\\\"header\\\">{{header}}</span>\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n                <a *ngIf=\\\"toggleable\\\" [attr.id]=\\\"id + '-label'\\\" class=\\\"ui-panel-titlebar-icon ui-panel-titlebar-toggler ui-corner-all ui-state-default\\\" href=\\\"#\\\"\\n                    (click)=\\\"toggle($event)\\\" [attr.aria-controls]=\\\"id + '-content'\\\" role=\\\"tab\\\" [attr.aria-expanded]=\\\"!collapsed\\\">\\n                    <span [class]=\\\"collapsed ? 'fa fa-fw ' + expandIcon : 'fa fa-fw ' + collapseIcon\\\"></span>\\n                </a>\\n            </div>\\n            <div [attr.id]=\\\"id + '-content'\\\" class=\\\"ui-panel-content-wrapper\\\" [@panelContent]=\\\"collapsed ? 'hidden' : 'visible'\\\" (@panelContent.done)=\\\"onToggleDone($event)\\\"\\n                [ngClass]=\\\"{'ui-panel-content-wrapper-overflown': collapsed||animating}\\\"\\n                role=\\\"region\\\" [attr.aria-hidden]=\\\"collapsed\\\" [attr.aria-labelledby]=\\\"id + '-label'\\\">\\n                <div class=\\\"ui-panel-content ui-widget-content\\\">\\n                    <ng-content></ng-content>\\n                </div>\\n                \\n                <div class=\\\"ui-panel-footer ui-widget-content\\\" *ngIf=\\\"footerFacet\\\">\\n                    <ng-content select=\\\"p-footer\\\"></ng-content>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelContent', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0',\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*',\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible <=> hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], Panel);\n    return Panel;\n}());\nexports.Panel = Panel;\nvar PanelModule = /** @class */ (function () {\n    function PanelModule() {\n    }\n    PanelModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Panel, shared_1.SharedModule],\n            declarations: [Panel]\n        })\n    ], PanelModule);\n    return PanelModule;\n}());\nexports.PanelModule = PanelModule;\n//# sourceMappingURL=panel.js.map\n\n/***/ }),\n/* 768 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar router_1 = __webpack_require__(5);\nvar BasePanelMenuItem = /** @class */ (function () {\n    function BasePanelMenuItem() {\n    }\n    BasePanelMenuItem.prototype.handleClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        item.expanded = !item.expanded;\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    };\n    return BasePanelMenuItem;\n}());\nexports.BasePanelMenuItem = BasePanelMenuItem;\nvar PanelMenuSub = /** @class */ (function (_super) {\n    __extends(PanelMenuSub, _super);\n    function PanelMenuSub() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PanelMenuSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PanelMenuSub.prototype, \"expanded\", void 0);\n    PanelMenuSub = __decorate([\n        core_1.Component({\n            selector: 'p-panelMenuSub',\n            template: \"\\n        <ul class=\\\"ui-submenu-list\\\" [@submenu]=\\\"expanded ? 'visible' : 'hidden'\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"item.items\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\">\\n                <li *ngIf=\\\"!child.separator\\\" class=\\\"ui-menuitem ui-corner-all\\\" [ngClass]=\\\"child.styleClass\\\" [class.ui-helper-hidden]=\\\"child.visible === false\\\" [ngStyle]=\\\"child.style\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.tabindex]=\\\"item.expanded ? null : '-1'\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" \\n                        (click)=\\\"handleClick($event,child)\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\">\\n                        <span class=\\\"ui-panelmenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!child.expanded,'fa-caret-down':child.expanded}\\\" *ngIf=\\\"child.items\\\"></span\\n                        ><span class=\\\"ui-menuitem-icon fa fa-fw\\\" [ngClass]=\\\"child.icon\\\" *ngIf=\\\"child.icon\\\"></span\\n                        ><span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" [attr.tabindex]=\\\"item.expanded ? null : '-1'\\\" [attr.id]=\\\"child.id\\\"\\n                        (click)=\\\"handleClick($event,child)\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\">\\n                        <span class=\\\"ui-panelmenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!child.expanded,'fa-caret-down':child.expanded}\\\" *ngIf=\\\"child.items\\\"></span\\n                        ><span class=\\\"ui-menuitem-icon fa fa-fw\\\" [ngClass]=\\\"child.icon\\\" *ngIf=\\\"child.icon\\\"></span\\n                        ><span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                    </a>\\n                    <p-panelMenuSub [item]=\\\"child\\\" [expanded]=\\\"child.expanded\\\" *ngIf=\\\"child.items\\\"></p-panelMenuSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \",\n            animations: [\n                animations_1.trigger('submenu', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0px'\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*'\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        })\n    ], PanelMenuSub);\n    return PanelMenuSub;\n}(BasePanelMenuItem));\nexports.PanelMenuSub = PanelMenuSub;\nvar PanelMenu = /** @class */ (function (_super) {\n    __extends(PanelMenu, _super);\n    function PanelMenu() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.multiple = true;\n        return _this;\n    }\n    PanelMenu.prototype.collapseAll = function () {\n        for (var _i = 0, _a = this.model; _i < _a.length; _i++) {\n            var item = _a[_i];\n            if (item.expanded) {\n                item.expanded = false;\n            }\n        }\n    };\n    PanelMenu.prototype.handleClick = function (event, item) {\n        if (!this.multiple) {\n            for (var _i = 0, _a = this.model; _i < _a.length; _i++) {\n                var modelItem = _a[_i];\n                if (item !== modelItem && modelItem.expanded) {\n                    modelItem.expanded = false;\n                }\n            }\n        }\n        this.animating = true;\n        _super.prototype.handleClick.call(this, event, item);\n    };\n    PanelMenu.prototype.onToggleDone = function () {\n        this.animating = false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], PanelMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PanelMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PanelMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PanelMenu.prototype, \"multiple\", void 0);\n    PanelMenu = __decorate([\n        core_1.Component({\n            selector: 'p-panelMenu',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-panelmenu ui-widget'\\\">\\n            <ng-container *ngFor=\\\"let item of model;let f=first;let l=last;\\\">\\n                <div class=\\\"ui-panelmenu-panel\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\">\\n                    <div [ngClass]=\\\"{'ui-widget ui-panelmenu-header ui-state-default':true,'ui-corner-top':f,'ui-corner-bottom':l&&!item.expanded,\\n                    'ui-state-active':item.expanded,'ui-state-disabled':item.disabled}\\\" [class]=\\\"item.styleClass\\\" [ngStyle]=\\\"item.style\\\">\\n                        <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" (click)=\\\"handleClick($event,item)\\\"\\n                           [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" class=\\\"ui-panelmenu-header-link\\\">\\n                        <span *ngIf=\\\"item.items\\\" class=\\\"ui-panelmenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!item.expanded,'fa-caret-down':item.expanded}\\\"></span\\n                        ><span class=\\\"ui-menuitem-icon fa fa-fw\\\" [ngClass]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span\\n                        ><span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                        </a>\\n                        <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\"\\n                           (click)=\\\"handleClick($event,item)\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" class=\\\"ui-panelmenu-header-link\\\">\\n                        <span *ngIf=\\\"item.items\\\" class=\\\"ui-panelmenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!item.expanded,'fa-caret-down':item.expanded}\\\"></span\\n                        ><span class=\\\"ui-menuitem-icon fa fa-fw\\\" [ngClass]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span\\n                        ><span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                        </a>\\n                    </div>\\n                    <div *ngIf=\\\"item.items\\\" class=\\\"ui-panelmenu-content-wrapper\\\" [@rootItem]=\\\"item.expanded ? 'visible' : 'hidden'\\\"  (@rootItem.done)=\\\"onToggleDone()\\\"\\n                         [ngClass]=\\\"{'ui-panelmenu-content-wrapper-overflown': !item.expanded||animating}\\\">\\n                        <div class=\\\"ui-panelmenu-content ui-widget-content\\\">\\n                            <p-panelMenuSub [item]=\\\"item\\\" [expanded]=\\\"true\\\" class=\\\"ui-panelmenu-root-submenu\\\"></p-panelMenuSub>\\n                        </div>\\n                    </div>\\n                </div>\\n            </ng-container>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('rootItem', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0px'\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*'\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        })\n    ], PanelMenu);\n    return PanelMenu;\n}(BasePanelMenuItem));\nexports.PanelMenu = PanelMenu;\nvar PanelMenuModule = /** @class */ (function () {\n    function PanelMenuModule() {\n    }\n    PanelMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [PanelMenu, router_1.RouterModule],\n            declarations: [PanelMenu, PanelMenuSub]\n        })\n    ], PanelMenuModule);\n    return PanelMenuModule;\n}());\nexports.PanelMenuModule = PanelMenuModule;\n//# sourceMappingURL=panelmenu.js.map\n\n/***/ }),\n/* 769 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar button_1 = __webpack_require__(37);\nvar shared_1 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar objectutils_1 = __webpack_require__(40);\nvar PickList = /** @class */ (function () {\n    function PickList(el, domHandler, objectUtils) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.objectUtils = objectUtils;\n        this.trackBy = function (index, item) { return item; };\n        this.showSourceFilter = true;\n        this.showTargetFilter = true;\n        this.metaKeySelection = true;\n        this.showSourceControls = true;\n        this.showTargetControls = true;\n        this.disabled = false;\n        this.onMoveToSource = new core_1.EventEmitter();\n        this.onMoveAllToSource = new core_1.EventEmitter();\n        this.onMoveAllToTarget = new core_1.EventEmitter();\n        this.onMoveToTarget = new core_1.EventEmitter();\n        this.onSourceReorder = new core_1.EventEmitter();\n        this.onTargetReorder = new core_1.EventEmitter();\n        this.onSourceSelect = new core_1.EventEmitter();\n        this.onTargetSelect = new core_1.EventEmitter();\n        this.selectedItemsSource = [];\n        this.selectedItemsTarget = [];\n    }\n    PickList.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    PickList.prototype.ngAfterViewChecked = function () {\n        if (this.movedUp || this.movedDown) {\n            var listItems = this.domHandler.find(this.reorderedListElement, 'li.ui-state-highlight');\n            var listItem = void 0;\n            if (this.movedUp)\n                listItem = listItems[0];\n            else\n                listItem = listItems[listItems.length - 1];\n            this.domHandler.scrollInView(this.reorderedListElement, listItem);\n            this.movedUp = false;\n            this.movedDown = false;\n            this.reorderedListElement = null;\n        }\n    };\n    PickList.prototype.onItemClick = function (event, item, selectedItems, callback) {\n        if (this.disabled) {\n            return;\n        }\n        var index = this.findIndexInSelection(item, selectedItems);\n        var selected = (index != -1);\n        var metaSelection = this.itemTouched ? false : this.metaKeySelection;\n        if (metaSelection) {\n            var metaKey = (event.metaKey || event.ctrlKey);\n            if (selected && metaKey) {\n                selectedItems.splice(index, 1);\n            }\n            else {\n                if (!metaKey) {\n                    selectedItems.length = 0;\n                }\n                selectedItems.push(item);\n            }\n        }\n        else {\n            if (selected)\n                selectedItems.splice(index, 1);\n            else\n                selectedItems.push(item);\n        }\n        callback.emit({ originalEvent: event, items: selectedItems });\n        this.itemTouched = false;\n    };\n    PickList.prototype.onSourceItemDblClick = function () {\n        if (this.disabled) {\n            return;\n        }\n        this.moveRight();\n    };\n    PickList.prototype.onTargetItemDblClick = function () {\n        if (this.disabled) {\n            return;\n        }\n        this.moveLeft();\n    };\n    PickList.prototype.onFilter = function (event, data, listType) {\n        var query = event.target.value.trim().toLowerCase();\n        if (listType === -1)\n            this.filterValueSource = query;\n        else\n            this.filterValueTarget = query;\n        this.activateFilter(data, listType);\n    };\n    PickList.prototype.activateFilter = function (data, listType) {\n        var searchFields = this.filterBy.split(',');\n        if (listType === -1)\n            this.visibleOptionsSource = this.objectUtils.filter(data, searchFields, this.filterValueSource);\n        else\n            this.visibleOptionsTarget = this.objectUtils.filter(data, searchFields, this.filterValueTarget);\n    };\n    PickList.prototype.isItemVisible = function (item, listType) {\n        if (listType == -1)\n            return this.isVisibleInList(this.visibleOptionsSource, item, this.filterValueSource);\n        else\n            return this.isVisibleInList(this.visibleOptionsTarget, item, this.filterValueTarget);\n    };\n    PickList.prototype.isVisibleInList = function (data, item, filterValue) {\n        if (filterValue && filterValue.trim().length) {\n            for (var i = 0; i < data.length; i++) {\n                if (item == data[i]) {\n                    return true;\n                }\n            }\n        }\n        else {\n            return true;\n        }\n    };\n    PickList.prototype.onItemTouchEnd = function (event) {\n        if (this.disabled) {\n            return;\n        }\n        this.itemTouched = true;\n    };\n    PickList.prototype.sortByIndexInList = function (items, list) {\n        var _this = this;\n        return items.sort(function (item1, item2) {\n            return _this.findIndexInList(item1, list) - _this.findIndexInList(item2, list);\n        });\n    };\n    PickList.prototype.moveUp = function (listElement, list, selectedItems, callback) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for (var i = 0; i < selectedItems.length; i++) {\n                var selectedItem = selectedItems[i];\n                var selectedItemIndex = this.findIndexInList(selectedItem, list);\n                if (selectedItemIndex != 0) {\n                    var movedItem = list[selectedItemIndex];\n                    var temp = list[selectedItemIndex - 1];\n                    list[selectedItemIndex - 1] = movedItem;\n                    list[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n            this.movedUp = true;\n            this.reorderedListElement = listElement;\n            callback.emit({ items: selectedItems });\n        }\n    };\n    PickList.prototype.moveTop = function (listElement, list, selectedItems, callback) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for (var i = 0; i < selectedItems.length; i++) {\n                var selectedItem = selectedItems[i];\n                var selectedItemIndex = this.findIndexInList(selectedItem, list);\n                if (selectedItemIndex != 0) {\n                    var movedItem = list.splice(selectedItemIndex, 1)[0];\n                    list.unshift(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n            listElement.scrollTop = 0;\n            callback.emit({ items: selectedItems });\n        }\n    };\n    PickList.prototype.moveDown = function (listElement, list, selectedItems, callback) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for (var i = selectedItems.length - 1; i >= 0; i--) {\n                var selectedItem = selectedItems[i];\n                var selectedItemIndex = this.findIndexInList(selectedItem, list);\n                if (selectedItemIndex != (list.length - 1)) {\n                    var movedItem = list[selectedItemIndex];\n                    var temp = list[selectedItemIndex + 1];\n                    list[selectedItemIndex + 1] = movedItem;\n                    list[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n            this.movedDown = true;\n            this.reorderedListElement = listElement;\n            callback.emit({ items: selectedItems });\n        }\n    };\n    PickList.prototype.moveBottom = function (listElement, list, selectedItems, callback) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for (var i = selectedItems.length - 1; i >= 0; i--) {\n                var selectedItem = selectedItems[i];\n                var selectedItemIndex = this.findIndexInList(selectedItem, list);\n                if (selectedItemIndex != (list.length - 1)) {\n                    var movedItem = list.splice(selectedItemIndex, 1)[0];\n                    list.push(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n            listElement.scrollTop = listElement.scrollHeight;\n            callback.emit({ items: selectedItems });\n        }\n    };\n    PickList.prototype.moveRight = function () {\n        if (this.selectedItemsSource && this.selectedItemsSource.length) {\n            for (var i = 0; i < this.selectedItemsSource.length; i++) {\n                var selectedItem = this.selectedItemsSource[i];\n                if (this.findIndexInList(selectedItem, this.target) == -1) {\n                    this.target.push(this.source.splice(this.findIndexInList(selectedItem, this.source), 1)[0]);\n                }\n            }\n            this.onMoveToTarget.emit({\n                items: this.selectedItemsSource\n            });\n            this.selectedItemsSource = [];\n        }\n    };\n    PickList.prototype.moveAllRight = function () {\n        if (this.source) {\n            var movedItems = [];\n            for (var i = 0; i < this.source.length; i++) {\n                if (this.isItemVisible(this.source[i], -1)) {\n                    var removedItem = this.source.splice(i, 1)[0];\n                    this.target.push(removedItem);\n                    movedItems.push(removedItem);\n                    i--;\n                }\n            }\n            this.onMoveToTarget.emit({\n                items: movedItems\n            });\n            this.onMoveAllToTarget.emit({\n                items: movedItems\n            });\n            this.selectedItemsSource = [];\n        }\n    };\n    PickList.prototype.moveLeft = function () {\n        if (this.selectedItemsTarget && this.selectedItemsTarget.length) {\n            for (var i = 0; i < this.selectedItemsTarget.length; i++) {\n                var selectedItem = this.selectedItemsTarget[i];\n                if (this.findIndexInList(selectedItem, this.source) == -1) {\n                    this.source.push(this.target.splice(this.findIndexInList(selectedItem, this.target), 1)[0]);\n                }\n            }\n            this.onMoveToSource.emit({\n                items: this.selectedItemsTarget\n            });\n            this.selectedItemsTarget = [];\n        }\n    };\n    PickList.prototype.moveAllLeft = function () {\n        if (this.target) {\n            var movedItems = [];\n            for (var i = 0; i < this.target.length; i++) {\n                if (this.isItemVisible(this.target[i], 1)) {\n                    var removedItem = this.target.splice(i, 1)[0];\n                    this.source.push(removedItem);\n                    movedItems.push(removedItem);\n                    i--;\n                }\n            }\n            this.onMoveToSource.emit({\n                items: movedItems\n            });\n            this.onMoveAllToSource.emit({\n                items: movedItems\n            });\n            this.selectedItemsTarget = [];\n        }\n    };\n    PickList.prototype.isSelected = function (item, selectedItems) {\n        return this.findIndexInSelection(item, selectedItems) != -1;\n    };\n    PickList.prototype.findIndexInSelection = function (item, selectedItems) {\n        return this.findIndexInList(item, selectedItems);\n    };\n    PickList.prototype.findIndexInList = function (item, list) {\n        var index = -1;\n        if (list) {\n            for (var i = 0; i < list.length; i++) {\n                if (list[i] == item) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    PickList.prototype.onDragStart = function (event, index, listType) {\n        this.dragging = true;\n        this.fromListType = listType;\n        if (listType === -1)\n            this.draggedItemIndexSource = index;\n        else\n            this.draggedItemIndexTarget = index;\n        if (this.dragdropScope) {\n            event.dataTransfer.setData(\"text\", this.dragdropScope);\n        }\n    };\n    PickList.prototype.onDragOver = function (event, index, listType) {\n        if (listType == -1) {\n            if (this.draggedItemIndexSource !== index && this.draggedItemIndexSource + 1 !== index || (this.fromListType === 1)) {\n                this.dragOverItemIndexSource = index;\n                event.preventDefault();\n            }\n        }\n        else {\n            if (this.draggedItemIndexTarget !== index && this.draggedItemIndexTarget + 1 !== index || (this.fromListType === -1)) {\n                this.dragOverItemIndexTarget = index;\n                event.preventDefault();\n            }\n        }\n        this.onListItemDroppoint = true;\n    };\n    PickList.prototype.onDragLeave = function (event, listType) {\n        this.dragOverItemIndexSource = null;\n        this.dragOverItemIndexTarget = null;\n        this.onListItemDroppoint = false;\n    };\n    PickList.prototype.onDrop = function (event, index, listType) {\n        if (this.onListItemDroppoint) {\n            if (listType === -1) {\n                if (this.fromListType === 1)\n                    this.insert(this.draggedItemIndexTarget, this.target, index, this.source, this.onMoveToSource);\n                else\n                    this.objectUtils.reorderArray(this.source, this.draggedItemIndexSource, (this.draggedItemIndexSource > index) ? index : (index === 0) ? 0 : index - 1);\n                this.dragOverItemIndexSource = null;\n            }\n            else {\n                if (this.fromListType === -1)\n                    this.insert(this.draggedItemIndexSource, this.source, index, this.target, this.onMoveToTarget);\n                else\n                    this.objectUtils.reorderArray(this.target, this.draggedItemIndexTarget, (this.draggedItemIndexTarget > index) ? index : (index === 0) ? 0 : index - 1);\n                this.dragOverItemIndexTarget = null;\n            }\n            this.listHighlightTarget = false;\n            this.listHighlightSource = false;\n            event.preventDefault();\n        }\n    };\n    PickList.prototype.onDragEnd = function (event) {\n        this.dragging = false;\n    };\n    PickList.prototype.onListDrop = function (event, listType) {\n        if (!this.onListItemDroppoint) {\n            if (listType === -1) {\n                if (this.fromListType === 1)\n                    this.insert(this.draggedItemIndexTarget, this.target, null, this.source, this.onMoveToSource);\n            }\n            else {\n                if (this.fromListType === -1)\n                    this.insert(this.draggedItemIndexSource, this.source, null, this.target, this.onMoveToTarget);\n            }\n            this.listHighlightTarget = false;\n            this.listHighlightSource = false;\n            event.preventDefault();\n        }\n    };\n    PickList.prototype.insert = function (fromIndex, fromList, toIndex, toList, callback) {\n        var elementtomove = fromList[fromIndex];\n        if (toIndex === null)\n            toList.push(fromList.splice(fromIndex, 1)[0]);\n        else\n            toList.splice(toIndex, 0, fromList.splice(fromIndex, 1)[0]);\n        callback.emit({\n            items: [elementtomove]\n        });\n    };\n    PickList.prototype.onListMouseMove = function (event, listType) {\n        if (this.dragging) {\n            var moveListType = (listType == 0 ? this.listViewSourceChild : this.listViewTargetChild);\n            var offsetY = moveListType.nativeElement.getBoundingClientRect().top + document.body.scrollTop;\n            var bottomDiff = (offsetY + moveListType.nativeElement.clientHeight) - event.pageY;\n            var topDiff = (event.pageY - offsetY);\n            if (bottomDiff < 25 && bottomDiff > 0)\n                moveListType.nativeElement.scrollTop += 15;\n            else if (topDiff < 25 && topDiff > 0)\n                moveListType.nativeElement.scrollTop -= 15;\n        }\n        if (listType === -1) {\n            if (this.fromListType === 1)\n                this.listHighlightSource = true;\n        }\n        else {\n            if (this.fromListType === -1)\n                this.listHighlightTarget = true;\n        }\n        event.preventDefault();\n    };\n    PickList.prototype.onListDragLeave = function () {\n        this.listHighlightTarget = false;\n        this.listHighlightSource = false;\n    };\n    PickList.prototype.resetFilter = function () {\n        this.visibleOptionsSource = null;\n        this.filterValueSource = null;\n        this.visibleOptionsTarget = null;\n        this.filterValueTarget = null;\n        this.sourceFilterViewChild.nativeElement.value = '';\n        this.targetFilterViewChild.nativeElement.value = '';\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], PickList.prototype, \"source\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], PickList.prototype, \"target\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"sourceHeader\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"targetHeader\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"filterBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], PickList.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"showSourceFilter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"showTargetFilter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"dragdrop\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"dragdropScope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PickList.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PickList.prototype, \"sourceStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PickList.prototype, \"targetStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"showSourceControls\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"showTargetControls\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"sourceFilterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"targetFilterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onMoveToSource\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onMoveAllToSource\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onMoveAllToTarget\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onMoveToTarget\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onSourceReorder\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onTargetReorder\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onSourceSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onTargetSelect\", void 0);\n    __decorate([\n        core_1.ViewChild('sourcelist'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], PickList.prototype, \"listViewSourceChild\", void 0);\n    __decorate([\n        core_1.ViewChild('targetlist'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], PickList.prototype, \"listViewTargetChild\", void 0);\n    __decorate([\n        core_1.ViewChild('sourceFilter'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], PickList.prototype, \"sourceFilterViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('targetFilter'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], PickList.prototype, \"targetFilterViewChild\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], PickList.prototype, \"templates\", void 0);\n    PickList = __decorate([\n        core_1.Component({\n            selector: 'p-pickList',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"{'ui-picklist ui-widget ui-helper-clearfix': true,'ui-picklist-responsive': responsive}\\\">\\n            <div class=\\\"ui-picklist-source-controls ui-picklist-buttons\\\" *ngIf=\\\"showSourceControls\\\">\\n                <div class=\\\"ui-picklist-buttons-cell\\\">\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-up\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveUp(sourcelist,source,selectedItemsSource,onSourceReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-up\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveTop(sourcelist,source,selectedItemsSource,onSourceReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-down\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveDown(sourcelist,source,selectedItemsSource,onSourceReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-down\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveBottom(sourcelist,source,selectedItemsSource,onSourceReorder)\\\"></button>\\n                </div>\\n            </div>\\n            <div class=\\\"ui-picklist-listwrapper ui-picklist-source-wrapper\\\" [ngClass]=\\\"{'ui-picklist-listwrapper-nocontrols':!showSourceControls}\\\">\\n                <div class=\\\"ui-picklist-caption ui-widget-header ui-corner-tl ui-corner-tr\\\" *ngIf=\\\"sourceHeader\\\">{{sourceHeader}}</div>\\n                <div class=\\\"ui-picklist-filter-container ui-widget-content\\\" *ngIf=\\\"filterBy && showSourceFilter !== false\\\">\\n                    <input #sourceFilter type=\\\"text\\\" role=\\\"textbox\\\" (keyup)=\\\"onFilter($event,source,-1)\\\" class=\\\"ui-picklist-filter ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [disabled]=\\\"disabled\\\" [attr.placeholder]=\\\"sourceFilterPlaceholder\\\">\\n                    <span class=\\\"ui-picklist-filter-icon fa fa-search\\\"></span>\\n                </div>\\n                <ul #sourcelist class=\\\"ui-widget-content ui-picklist-list ui-picklist-source ui-corner-bottom\\\" [ngClass]=\\\"{'ui-picklist-highlight': listHighlightSource}\\\" [ngStyle]=\\\"sourceStyle\\\" (dragover)=\\\"onListMouseMove($event,-1)\\\" (dragleave)=\\\"onListDragLeave()\\\" (drop)=\\\"onListDrop($event, -1)\\\">\\n                    <ng-template ngFor let-item [ngForOf]=\\\"source\\\" [ngForTrackBy]=\\\"trackBy\\\" let-i=\\\"index\\\" let-l=\\\"last\\\">\\n                        <li class=\\\"ui-picklist-droppoint\\\" *ngIf=\\\"dragdrop\\\" (dragover)=\\\"onDragOver($event, i, -1)\\\" (drop)=\\\"onDrop($event, i, -1)\\\" (dragleave)=\\\"onDragLeave($event, -1)\\\" \\n                        [ngClass]=\\\"{'ui-picklist-droppoint-highlight': (i === dragOverItemIndexSource)}\\\" [style.display]=\\\"isItemVisible(item, -1) ? 'block' : 'none'\\\"></li>\\n                        <li [ngClass]=\\\"{'ui-picklist-item':true,'ui-state-highlight':isSelected(item,selectedItemsSource), 'ui-state-disabled': disabled}\\\"\\n                            (click)=\\\"onItemClick($event,item,selectedItemsSource,onSourceSelect)\\\" (dblclick)=\\\"onSourceItemDblClick()\\\" (touchend)=\\\"onItemTouchEnd($event)\\\"\\n                            [style.display]=\\\"isItemVisible(item, -1) ? 'block' : 'none'\\\"\\n                            [draggable]=\\\"dragdrop\\\" (dragstart)=\\\"onDragStart($event, i, -1)\\\" (dragend)=\\\"onDragEnd($event)\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: i}\\\"></ng-container>\\n                        </li>\\n                        <li class=\\\"ui-picklist-droppoint\\\" *ngIf=\\\"dragdrop&&l\\\" (dragover)=\\\"onDragOver($event, i + 1, -1)\\\" (drop)=\\\"onDrop($event, i + 1, -1)\\\" (dragleave)=\\\"onDragLeave($event, -1)\\\" \\n                        [ngClass]=\\\"{'ui-picklist-droppoint-highlight': (i + 1 === dragOverItemIndexSource)}\\\"></li>\\n                    </ng-template>\\n                </ul>\\n            </div>\\n            <div class=\\\"ui-picklist-buttons\\\">\\n                <div class=\\\"ui-picklist-buttons-cell\\\">\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-right\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveRight()\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-right\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveAllRight()\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-left\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveLeft()\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-left\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveAllLeft()\\\"></button>\\n                </div>\\n            </div>\\n            <div class=\\\"ui-picklist-listwrapper ui-picklist-target-wrapper\\\" [ngClass]=\\\"{'ui-picklist-listwrapper-nocontrols':!showTargetControls}\\\">\\n                <div class=\\\"ui-picklist-caption ui-widget-header ui-corner-tl ui-corner-tr\\\" *ngIf=\\\"targetHeader\\\">{{targetHeader}}</div>\\n                <div class=\\\"ui-picklist-filter-container ui-widget-content\\\" *ngIf=\\\"filterBy && showTargetFilter !== false\\\">\\n                    <input #targetFilter type=\\\"text\\\" role=\\\"textbox\\\" (keyup)=\\\"onFilter($event,target,1)\\\" class=\\\"ui-picklist-filter ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [disabled]=\\\"disabled\\\" [attr.placeholder]=\\\"targetFilterPlaceholder\\\">\\n                    <span class=\\\"ui-picklist-filter-icon fa fa-search\\\"></span>\\n                </div>\\n                <ul #targetlist class=\\\"ui-widget-content ui-picklist-list ui-picklist-target ui-corner-bottom\\\" [ngClass]=\\\"{'ui-picklist-highlight': listHighlightTarget}\\\" [ngStyle]=\\\"targetStyle\\\" (dragover)=\\\"onListMouseMove($event,1)\\\" (dragleave)=\\\"onListDragLeave()\\\" (drop)=\\\"onListDrop($event,1)\\\">\\n                    <ng-template ngFor let-item [ngForOf]=\\\"target\\\" [ngForTrackBy]=\\\"trackBy\\\" let-i=\\\"index\\\" let-l=\\\"last\\\">\\n                        <li class=\\\"ui-picklist-droppoint\\\" *ngIf=\\\"dragdrop\\\" (dragover)=\\\"onDragOver($event, i, 1)\\\" (drop)=\\\"onDrop($event, i, 1)\\\" (dragleave)=\\\"onDragLeave($event, 1)\\\" \\n                        [ngClass]=\\\"{'ui-picklist-droppoint-highlight': (i === dragOverItemIndexTarget)}\\\" [style.display]=\\\"isItemVisible(item, 1) ? 'block' : 'none'\\\"></li>\\n                        <li [ngClass]=\\\"{'ui-picklist-item':true,'ui-state-highlight':isSelected(item,selectedItemsTarget), 'ui-state-disabled': disabled}\\\"\\n                            (click)=\\\"onItemClick($event,item,selectedItemsTarget,onTargetSelect)\\\" (dblclick)=\\\"onTargetItemDblClick()\\\" (touchend)=\\\"onItemTouchEnd($event)\\\"\\n                            [style.display]=\\\"isItemVisible(item, 1) ? 'block' : 'none'\\\"\\n                            [draggable]=\\\"dragdrop\\\" (dragstart)=\\\"onDragStart($event, i, 1)\\\" (dragend)=\\\"onDragEnd($event)\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: i}\\\"></ng-container>\\n                        </li>\\n                        <li class=\\\"ui-picklist-droppoint\\\" *ngIf=\\\"dragdrop&&l\\\" (dragover)=\\\"onDragOver($event, i + 1, 1)\\\" (drop)=\\\"onDrop($event, i + 1, 1)\\\" (dragleave)=\\\"onDragLeave($event, 1)\\\" \\n                        [ngClass]=\\\"{'ui-picklist-droppoint-highlight': (i + 1 === dragOverItemIndexTarget)}\\\"></li>\\n                    </ng-template>\\n                </ul>\\n            </div>\\n            <div class=\\\"ui-picklist-target-controls ui-picklist-buttons\\\" *ngIf=\\\"showTargetControls\\\">\\n                <div class=\\\"ui-picklist-buttons-cell\\\">\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-up\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveUp(targetlist,target,selectedItemsTarget,onTargetReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-up\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveTop(targetlist,target,selectedItemsTarget,onTargetReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-down\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveDown(targetlist,target,selectedItemsTarget,onTargetReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-down\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveBottom(targetlist,target,selectedItemsTarget,onTargetReorder)\\\"></button>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, objectutils_1.ObjectUtils])\n    ], PickList);\n    return PickList;\n}());\nexports.PickList = PickList;\nvar PickListModule = /** @class */ (function () {\n    function PickListModule() {\n    }\n    PickListModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule, shared_1.SharedModule],\n            exports: [PickList, shared_1.SharedModule],\n            declarations: [PickList]\n        })\n    ], PickListModule);\n    return PickListModule;\n}());\nexports.PickListModule = PickListModule;\n//# sourceMappingURL=picklist.js.map\n\n/***/ }),\n/* 770 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar ProgressSpinner = /** @class */ (function () {\n    function ProgressSpinner() {\n        this.strokeWidth = \"2\";\n        this.fill = \"none\";\n        this.animationDuration = \"2s\";\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ProgressSpinner.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressSpinner.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressSpinner.prototype, \"strokeWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressSpinner.prototype, \"fill\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressSpinner.prototype, \"animationDuration\", void 0);\n    ProgressSpinner = __decorate([\n        core_1.Component({\n            selector: 'p-progressSpinner',\n            template: \"\\n        <div class=\\\"ui-progress-spinner\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"styleClass\\\">\\n            <svg class=\\\"ui-progress-spinner-svg\\\" viewBox=\\\"25 25 50 50\\\" [style.animation-duration]=\\\"animationDuration\\\">\\n                <circle class=\\\"ui-progress-spinner-circle\\\" cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"20\\\" [attr.fill]=\\\"fill\\\" [attr.stroke-width]=\\\"strokeWidth\\\" stroke-miterlimit=\\\"10\\\"/>\\n            </svg>\\n        </div>\\n    \"\n        })\n    ], ProgressSpinner);\n    return ProgressSpinner;\n}());\nexports.ProgressSpinner = ProgressSpinner;\nvar ProgressSpinnerModule = /** @class */ (function () {\n    function ProgressSpinnerModule() {\n    }\n    ProgressSpinnerModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ProgressSpinner],\n            declarations: [ProgressSpinner]\n        })\n    ], ProgressSpinnerModule);\n    return ProgressSpinnerModule;\n}());\nexports.ProgressSpinnerModule = ProgressSpinnerModule;\n//# sourceMappingURL=progressspinner.js.map\n\n/***/ }),\n/* 771 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar forms_1 = __webpack_require__(17);\nexports.RADIO_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return RadioButton; }),\n    multi: true\n};\nvar RadioButton = /** @class */ (function () {\n    function RadioButton(cd) {\n        this.cd = cd;\n        this.onClick = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    RadioButton.prototype.handleClick = function (event, radioButton, focus) {\n        event.preventDefault();\n        if (this.disabled) {\n            return;\n        }\n        this.select();\n        if (focus) {\n            radioButton.focus();\n        }\n    };\n    RadioButton.prototype.select = function () {\n        if (!this.disabled) {\n            this.onClick.emit(null);\n            this.inputViewChild.nativeElement.checked = true;\n            this.checked = true;\n            this.onModelChange(this.value);\n        }\n    };\n    RadioButton.prototype.writeValue = function (value) {\n        this.checked = (value == this.value);\n        if (this.inputViewChild.nativeElement) {\n            this.inputViewChild.nativeElement.checked = this.checked;\n        }\n        this.cd.markForCheck();\n    };\n    RadioButton.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    RadioButton.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    RadioButton.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    RadioButton.prototype.onFocus = function (event) {\n        this.focused = true;\n    };\n    RadioButton.prototype.onBlur = function (event) {\n        this.focused = false;\n        this.onModelTouched();\n    };\n    RadioButton.prototype.onChange = function (event) {\n        this.select();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], RadioButton.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], RadioButton.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], RadioButton.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], RadioButton.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"labelStyleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], RadioButton.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.ViewChild('rb'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], RadioButton.prototype, \"inputViewChild\", void 0);\n    RadioButton = __decorate([\n        core_1.Component({\n            selector: 'p-radioButton',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-radiobutton ui-widget'\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #rb type=\\\"radio\\\" [attr.id]=\\\"inputId\\\" [attr.name]=\\\"name\\\" [attr.value]=\\\"value\\\" [attr.tabindex]=\\\"tabindex\\\" \\n                    [checked]=\\\"checked\\\" (change)=\\\"onChange($event)\\\" (focus)=\\\"onFocus($event)\\\" (blur)=\\\"onBlur($event)\\\" [disabled]=\\\"disabled\\\">\\n            </div>\\n            <div (click)=\\\"handleClick($event, rb, true)\\\"\\n                [ngClass]=\\\"{'ui-radiobutton-box ui-widget ui-state-default':true,\\n                'ui-state-active':rb.checked,'ui-state-disabled':disabled,'ui-state-focus':focused}\\\">\\n                <span class=\\\"ui-radiobutton-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-circle':rb.checked}\\\"></span>\\n            </div>\\n        </div>\\n        <label (click)=\\\"select()\\\" [class]=\\\"labelStyleClass\\\"\\n            [ngClass]=\\\"{'ui-radiobutton-label':true, 'ui-label-active':rb.checked, 'ui-label-disabled':disabled, 'ui-label-focus':focused}\\\"\\n            *ngIf=\\\"label\\\" [attr.for]=\\\"inputId\\\">{{label}}</label>\\n    \",\n            providers: [exports.RADIO_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ChangeDetectorRef])\n    ], RadioButton);\n    return RadioButton;\n}());\nexports.RadioButton = RadioButton;\nvar RadioButtonModule = /** @class */ (function () {\n    function RadioButtonModule() {\n    }\n    RadioButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [RadioButton],\n            declarations: [RadioButton]\n        })\n    ], RadioButtonModule);\n    return RadioButtonModule;\n}());\nexports.RadioButtonModule = RadioButtonModule;\n//# sourceMappingURL=radiobutton.js.map\n\n/***/ }),\n/* 772 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar forms_1 = __webpack_require__(17);\nexports.RATING_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Rating; }),\n    multi: true\n};\nvar Rating = /** @class */ (function () {\n    function Rating(cd) {\n        this.cd = cd;\n        this.stars = 5;\n        this.cancel = true;\n        this.iconOnClass = 'fa-star';\n        this.iconOffClass = 'fa-star-o';\n        this.iconCancelClass = 'fa-ban';\n        this.onRate = new core_1.EventEmitter();\n        this.onCancel = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Rating.prototype.ngOnInit = function () {\n        this.starsArray = [];\n        for (var i = 0; i < this.stars; i++) {\n            this.starsArray[i] = i;\n        }\n    };\n    Rating.prototype.rate = function (event, i) {\n        if (!this.readonly && !this.disabled) {\n            this.value = (i + 1);\n            this.onModelChange(this.value);\n            this.onModelTouched();\n            this.onRate.emit({\n                originalEvent: event,\n                value: (i + 1)\n            });\n        }\n        event.preventDefault();\n    };\n    Rating.prototype.clear = function (event) {\n        if (!this.readonly && !this.disabled) {\n            this.value = null;\n            this.onModelChange(this.value);\n            this.onModelTouched();\n            this.onCancel.emit(event);\n        }\n        event.preventDefault();\n    };\n    Rating.prototype.writeValue = function (value) {\n        this.value = value;\n        this.cd.detectChanges();\n    };\n    Rating.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Rating.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Rating.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Rating.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Rating.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Rating.prototype, \"stars\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Rating.prototype, \"cancel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Rating.prototype, \"iconOnClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Rating.prototype, \"iconOnStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Rating.prototype, \"iconOffClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Rating.prototype, \"iconOffStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Rating.prototype, \"iconCancelClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Rating.prototype, \"iconCancelStyle\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Rating.prototype, \"onRate\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Rating.prototype, \"onCancel\", void 0);\n    Rating = __decorate([\n        core_1.Component({\n            selector: 'p-rating',\n            template: \"\\n        <div class=\\\"ui-rating\\\" [ngClass]=\\\"{'ui-state-disabled': disabled}\\\">\\n            <a href=\\\"#\\\" *ngIf=\\\"cancel\\\" (click)=\\\"clear($event)\\\" class=\\\"ui-rating-cancel\\\">\\n                <span class=\\\"ui-rating-icon fa\\\" [ngClass]=\\\"iconCancelClass\\\" [ngStyle]=\\\"iconCancelStyle\\\"></span>\\n            </a>\\n            <a href=\\\"#\\\" *ngFor=\\\"let star of starsArray;let i=index\\\" (click)=\\\"rate($event,i)\\\">\\n                <span class=\\\"ui-rating-icon fa\\\" \\n                    [ngClass]=\\\"(!value || i >= value) ? iconOffClass : iconOnClass\\\"\\n                    [ngStyle]=\\\"(!value || i >= value) ? iconOffStyle : iconOnStyle\\\"\\n                ></span>\\n            </a>\\n        </div>\\n    \",\n            providers: [exports.RATING_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ChangeDetectorRef])\n    ], Rating);\n    return Rating;\n}());\nexports.Rating = Rating;\nvar RatingModule = /** @class */ (function () {\n    function RatingModule() {\n    }\n    RatingModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Rating],\n            declarations: [Rating]\n        })\n    ], RatingModule);\n    return RatingModule;\n}());\nexports.RatingModule = RatingModule;\n//# sourceMappingURL=rating.js.map\n\n/***/ }),\n/* 773 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function(jQuery) {\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar Schedule = /** @class */ (function () {\n    function Schedule(el, differs) {\n        this.el = el;\n        this.aspectRatio = 1.35;\n        this.defaultView = 'month';\n        this.allDaySlot = true;\n        this.allDayText = 'all-day';\n        this.slotDuration = '00:30:00';\n        this.scrollTime = '06:00:00';\n        this.minTime = '00:00:00';\n        this.maxTime = '24:00:00';\n        this.slotEventOverlap = true;\n        this.dragRevertDuration = 500;\n        this.dragOpacity = .75;\n        this.dragScroll = true;\n        this.timezone = false;\n        this.timeFormat = null;\n        this.onDayClick = new core_1.EventEmitter();\n        this.onDrop = new core_1.EventEmitter();\n        this.onEventClick = new core_1.EventEmitter();\n        this.onEventMouseover = new core_1.EventEmitter();\n        this.onEventMouseout = new core_1.EventEmitter();\n        this.onEventDragStart = new core_1.EventEmitter();\n        this.onEventDragStop = new core_1.EventEmitter();\n        this.onEventDrop = new core_1.EventEmitter();\n        this.onEventResizeStart = new core_1.EventEmitter();\n        this.onEventResizeStop = new core_1.EventEmitter();\n        this.onEventResize = new core_1.EventEmitter();\n        this.onViewRender = new core_1.EventEmitter();\n        this.onViewDestroy = new core_1.EventEmitter();\n        this.onNavLinkDayClick = new core_1.EventEmitter();\n        this.onNavLinkWeekClick = new core_1.EventEmitter();\n        this.differ = differs.find([]).create(null);\n        this.initialized = false;\n    }\n    Schedule.prototype.ngOnInit = function () {\n        var _this = this;\n        this.config = {\n            theme: true,\n            header: this.header,\n            isRTL: this.rtl,\n            weekends: this.weekends,\n            hiddenDays: this.hiddenDays,\n            fixedWeekCount: this.fixedWeekCount,\n            weekNumbers: this.weekNumbers,\n            businessHours: this.businessHours,\n            height: this.height,\n            contentHeight: this.contentHeight,\n            aspectRatio: this.aspectRatio,\n            eventLimit: this.eventLimit,\n            defaultDate: this.defaultDate,\n            locale: this.locale,\n            timezone: this.timezone,\n            timeFormat: this.timeFormat,\n            editable: this.editable,\n            droppable: this.droppable,\n            eventStartEditable: this.eventStartEditable,\n            eventDurationEditable: this.eventDurationEditable,\n            defaultView: this.defaultView,\n            allDaySlot: this.allDaySlot,\n            allDayText: this.allDayText,\n            slotDuration: this.slotDuration,\n            slotLabelInterval: this.slotLabelInterval,\n            snapDuration: this.snapDuration,\n            scrollTime: this.scrollTime,\n            minTime: this.minTime,\n            maxTime: this.maxTime,\n            slotEventOverlap: this.slotEventOverlap,\n            nowIndicator: this.nowIndicator,\n            dragRevertDuration: this.dragRevertDuration,\n            dragOpacity: this.dragOpacity,\n            dragScroll: this.dragScroll,\n            eventOverlap: this.eventOverlap,\n            eventConstraint: this.eventConstraint,\n            eventRender: this.eventRender,\n            dayRender: this.dayRender,\n            navLinks: this.navLinks,\n            dayClick: function (date, jsEvent, view) {\n                _this.onDayClick.emit({\n                    'date': date,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            drop: function (date, jsEvent, ui, resourceId) {\n                _this.onDrop.emit({\n                    'date': date,\n                    'jsEvent': jsEvent,\n                    'ui': ui,\n                    'resourceId': resourceId\n                });\n            },\n            eventClick: function (calEvent, jsEvent, view) {\n                _this.onEventClick.emit({\n                    'calEvent': calEvent,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventMouseover: function (calEvent, jsEvent, view) {\n                _this.onEventMouseover.emit({\n                    'calEvent': calEvent,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventMouseout: function (calEvent, jsEvent, view) {\n                _this.onEventMouseout.emit({\n                    'calEvent': calEvent,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventDragStart: function (event, jsEvent, ui, view) {\n                _this.onEventDragStart.emit({\n                    'event': event,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventDragStop: function (event, jsEvent, ui, view) {\n                _this.onEventDragStop.emit({\n                    'event': event,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventDrop: function (event, delta, revertFunc, jsEvent, ui, view) {\n                _this._updateEvent(event);\n                _this.onEventDrop.emit({\n                    'event': event,\n                    'delta': delta,\n                    'revertFunc': revertFunc,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventResizeStart: function (event, jsEvent, ui, view) {\n                _this.onEventResizeStart.emit({\n                    'event': event,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventResizeStop: function (event, jsEvent, ui, view) {\n                _this.onEventResizeStop.emit({\n                    'event': event,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventResize: function (event, delta, revertFunc, jsEvent, ui, view) {\n                _this._updateEvent(event);\n                _this.onEventResize.emit({\n                    'event': event,\n                    'delta': delta,\n                    'revertFunc': revertFunc,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            viewRender: function (view, element) {\n                _this.onViewRender.emit({\n                    'view': view,\n                    'element': element\n                });\n            },\n            viewDestroy: function (view, element) {\n                _this.onViewDestroy.emit({\n                    'view': view,\n                    'element': element\n                });\n            },\n            navLinkDayClick: function (weekStart, jsEvent) {\n                _this.onNavLinkDayClick.emit({\n                    'weekStart': weekStart,\n                    'event': jsEvent\n                });\n            },\n            navLinkWeekClick: function (weekStart, jsEvent) {\n                _this.onNavLinkWeekClick.emit({\n                    'weekStart': weekStart,\n                    'event': jsEvent\n                });\n            }\n        };\n        if (this.options) {\n            for (var prop in this.options) {\n                this.config[prop] = this.options[prop];\n            }\n        }\n    };\n    Schedule.prototype.ngAfterViewChecked = function () {\n        if (!this.initialized && this.el.nativeElement.offsetParent) {\n            this.initialize();\n        }\n    };\n    Schedule.prototype.ngOnChanges = function (changes) {\n        if (this.schedule) {\n            var options = {};\n            for (var change in changes) {\n                if (change !== 'events') {\n                    options[change] = changes[change].currentValue;\n                }\n            }\n            if (Object.keys(options).length) {\n                this.schedule.fullCalendar('option', options);\n            }\n        }\n    };\n    Schedule.prototype.initialize = function () {\n        this.schedule = jQuery(this.el.nativeElement.children[0]);\n        this.schedule.fullCalendar(this.config);\n        if (this.events) {\n            this.schedule.fullCalendar('addEventSource', this.events);\n        }\n        this.initialized = true;\n    };\n    Schedule.prototype.ngDoCheck = function () {\n        var changes = this.differ.diff(this.events);\n        if (this.schedule && changes) {\n            this.schedule.fullCalendar('removeEventSources');\n            if (this.events) {\n                this.schedule.fullCalendar('addEventSource', this.events);\n            }\n        }\n    };\n    Schedule.prototype.ngOnDestroy = function () {\n        jQuery(this.el.nativeElement.children[0]).fullCalendar('destroy');\n        this.initialized = false;\n        this.schedule = null;\n    };\n    Schedule.prototype.gotoDate = function (date) {\n        this.schedule.fullCalendar('gotoDate', date);\n    };\n    Schedule.prototype.prev = function () {\n        this.schedule.fullCalendar('prev');\n    };\n    Schedule.prototype.next = function () {\n        this.schedule.fullCalendar('next');\n    };\n    Schedule.prototype.prevYear = function () {\n        this.schedule.fullCalendar('prevYear');\n    };\n    Schedule.prototype.nextYear = function () {\n        this.schedule.fullCalendar('nextYear');\n    };\n    Schedule.prototype.today = function () {\n        this.schedule.fullCalendar('today');\n    };\n    Schedule.prototype.incrementDate = function (duration) {\n        this.schedule.fullCalendar('incrementDate', duration);\n    };\n    Schedule.prototype.changeView = function (viewName) {\n        this.schedule.fullCalendar('changeView', viewName);\n    };\n    Schedule.prototype.getDate = function () {\n        return this.schedule.fullCalendar('getDate');\n    };\n    Schedule.prototype.updateEvent = function (event) {\n        this.schedule.fullCalendar('updateEvent', event);\n    };\n    Schedule.prototype._findEvent = function (id) {\n        var event;\n        if (this.events) {\n            for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\n                var e = _a[_i];\n                if (e.id === id) {\n                    event = e;\n                    break;\n                }\n            }\n        }\n        return event;\n    };\n    Schedule.prototype._updateEvent = function (event) {\n        var sourceEvent = this._findEvent(event.id);\n        if (sourceEvent) {\n            sourceEvent.start = event.start.format();\n            if (event.end) {\n                sourceEvent.end = event.end.format();\n            }\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Schedule.prototype, \"events\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"rtl\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"weekends\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Schedule.prototype, \"hiddenDays\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"fixedWeekCount\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"weekNumbers\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"businessHours\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"height\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"contentHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Schedule.prototype, \"aspectRatio\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"eventLimit\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"defaultDate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"editable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"droppable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"eventStartEditable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"eventDurationEditable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"defaultView\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"allDaySlot\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"allDayText\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"slotDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"slotLabelInterval\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"snapDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"scrollTime\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"minTime\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"maxTime\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"slotEventOverlap\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"nowIndicator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Schedule.prototype, \"dragRevertDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Schedule.prototype, \"dragOpacity\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"dragScroll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"eventOverlap\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"eventConstraint\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"locale\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"timezone\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"timeFormat\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], Schedule.prototype, \"eventRender\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], Schedule.prototype, \"dayRender\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"navLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"options\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onDayClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onDrop\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventMouseover\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventMouseout\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventDragStart\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventDragStop\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventDrop\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventResizeStart\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventResizeStop\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventResize\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onViewRender\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onViewDestroy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onNavLinkDayClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onNavLinkWeekClick\", void 0);\n    Schedule = __decorate([\n        core_1.Component({\n            selector: 'p-schedule',\n            template: '<div [ngStyle]=\"style\" [class]=\"styleClass\"></div>'\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.IterableDiffers])\n    ], Schedule);\n    return Schedule;\n}());\nexports.Schedule = Schedule;\nvar ScheduleModule = /** @class */ (function () {\n    function ScheduleModule() {\n    }\n    ScheduleModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Schedule],\n            declarations: [Schedule]\n        })\n    ], ScheduleModule);\n    return ScheduleModule;\n}());\nexports.ScheduleModule = ScheduleModule;\n//# sourceMappingURL=schedule.js.map\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 774 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar ScrollPanel = /** @class */ (function () {\n    function ScrollPanel(el, zone, domHandler) {\n        this.el = el;\n        this.zone = zone;\n        this.domHandler = domHandler;\n        this.timeoutFrame = function (fn) { return setTimeout(fn, 0); };\n    }\n    ScrollPanel.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.moveBar();\n            _this.moveBar = _this.moveBar.bind(_this);\n            _this.onXBarMouseDown = _this.onXBarMouseDown.bind(_this);\n            _this.onYBarMouseDown = _this.onYBarMouseDown.bind(_this);\n            _this.onDocumentMouseMove = _this.onDocumentMouseMove.bind(_this);\n            _this.onDocumentMouseUp = _this.onDocumentMouseUp.bind(_this);\n            window.addEventListener('resize', _this.moveBar);\n            _this.contentViewChild.nativeElement.addEventListener('scroll', _this.moveBar);\n            _this.contentViewChild.nativeElement.addEventListener('mouseenter', _this.moveBar);\n            _this.xBarViewChild.nativeElement.addEventListener('mousedown', _this.onXBarMouseDown);\n            _this.yBarViewChild.nativeElement.addEventListener('mousedown', _this.onYBarMouseDown);\n            _this.calculateContainerHeight();\n            _this.initialized = true;\n        });\n    };\n    ScrollPanel.prototype.calculateContainerHeight = function () {\n        var container = this.containerViewChild.nativeElement;\n        var content = this.contentViewChild.nativeElement;\n        var xBar = this.xBarViewChild.nativeElement;\n        var containerStyles = getComputedStyle(container), xBarStyles = getComputedStyle(xBar), pureContainerHeight = this.domHandler.getHeight(container) - parseInt(xBarStyles['height'], 10);\n        if (containerStyles['max-height'] != \"none\" && pureContainerHeight == 0) {\n            if (content.offsetHeight + parseInt(xBarStyles['height'], 10) > parseInt(containerStyles['max-height'], 10)) {\n                container.style.height = containerStyles['max-height'];\n            }\n            else {\n                container.style.height = content.offsetHeight + parseFloat(containerStyles.paddingTop) + parseFloat(containerStyles.paddingBottom) + parseFloat(containerStyles.borderTopWidth) + parseFloat(containerStyles.borderBottomWidth) + \"px\";\n            }\n        }\n    };\n    ScrollPanel.prototype.moveBar = function () {\n        var _this = this;\n        var container = this.containerViewChild.nativeElement;\n        var content = this.contentViewChild.nativeElement;\n        /* horizontal scroll */\n        var xBar = this.xBarViewChild.nativeElement;\n        var totalWidth = content.scrollWidth;\n        var ownWidth = content.clientWidth;\n        var bottom = (container.clientHeight - xBar.clientHeight) * -1;\n        this.scrollXRatio = ownWidth / totalWidth;\n        /* vertical scroll */\n        var yBar = this.yBarViewChild.nativeElement;\n        var totalHeight = content.scrollHeight;\n        var ownHeight = content.clientHeight;\n        var right = (container.clientWidth - yBar.clientWidth) * -1;\n        this.scrollYRatio = ownHeight / totalHeight;\n        this.requestAnimationFrame(function () {\n            if (_this.scrollXRatio >= 1) {\n                _this.domHandler.addClass(xBar, 'ui-scrollpanel-hidden');\n            }\n            else {\n                _this.domHandler.removeClass(xBar, 'ui-scrollpanel-hidden');\n                xBar.style.cssText = 'width:' + Math.max(_this.scrollXRatio * 100, 10) + '%; left:' + (content.scrollLeft / totalWidth) * 100 + '%;bottom:' + bottom + 'px;';\n            }\n            if (_this.scrollYRatio >= 1) {\n                _this.domHandler.addClass(yBar, 'ui-scrollpanel-hidden');\n            }\n            else {\n                _this.domHandler.removeClass(yBar, 'ui-scrollpanel-hidden');\n                yBar.style.cssText = 'height:' + Math.max(_this.scrollYRatio * 100, 10) + '%; top: calc(' + (content.scrollTop / totalHeight) * 100 + '% - ' + xBar.clientHeight + 'px);right:' + right + 'px;';\n            }\n        });\n    };\n    ScrollPanel.prototype.onYBarMouseDown = function (e) {\n        this.isYBarClicked = true;\n        this.lastPageY = e.pageY;\n        this.domHandler.addClass(this.yBarViewChild.nativeElement, 'ui-scrollpanel-grabbed');\n        this.domHandler.addClass(document.body, 'ui-scrollpanel-grabbed');\n        document.addEventListener('mousemove', this.onDocumentMouseMove);\n        document.addEventListener('mouseup', this.onDocumentMouseUp);\n        e.preventDefault();\n    };\n    ScrollPanel.prototype.onXBarMouseDown = function (e) {\n        this.isXBarClicked = true;\n        this.lastPageX = e.pageX;\n        this.domHandler.addClass(this.xBarViewChild.nativeElement, 'ui-scrollpanel-grabbed');\n        this.domHandler.addClass(document.body, 'ui-scrollpanel-grabbed');\n        document.addEventListener('mousemove', this.onDocumentMouseMove);\n        document.addEventListener('mouseup', this.onDocumentMouseUp);\n        e.preventDefault();\n    };\n    ScrollPanel.prototype.onDocumentMouseMove = function (e) {\n        if (this.isXBarClicked) {\n            this.onMouseMoveForXBar(e);\n        }\n        else if (this.isYBarClicked) {\n            this.onMouseMoveForYBar(e);\n        }\n        else {\n            this.onMouseMoveForXBar(e);\n            this.onMouseMoveForYBar(e);\n        }\n    };\n    ScrollPanel.prototype.onMouseMoveForXBar = function (e) {\n        var _this = this;\n        var deltaX = e.pageX - this.lastPageX;\n        this.lastPageX = e.pageX;\n        this.requestAnimationFrame(function () {\n            _this.contentViewChild.nativeElement.scrollLeft += deltaX / _this.scrollXRatio;\n        });\n    };\n    ScrollPanel.prototype.onMouseMoveForYBar = function (e) {\n        var _this = this;\n        var deltaY = e.pageY - this.lastPageY;\n        this.lastPageY = e.pageY;\n        this.requestAnimationFrame(function () {\n            _this.contentViewChild.nativeElement.scrollTop += deltaY / _this.scrollYRatio;\n        });\n    };\n    ScrollPanel.prototype.onDocumentMouseUp = function (e) {\n        this.domHandler.removeClass(this.yBarViewChild.nativeElement, 'ui-scrollpanel-grabbed');\n        this.domHandler.removeClass(this.xBarViewChild.nativeElement, 'ui-scrollpanel-grabbed');\n        this.domHandler.removeClass(document.body, 'ui-scrollpanel-grabbed');\n        document.removeEventListener('mousemove', this.onDocumentMouseMove);\n        document.removeEventListener('mouseup', this.onDocumentMouseUp);\n        this.isXBarClicked = false;\n        this.isYBarClicked = false;\n    };\n    ScrollPanel.prototype.requestAnimationFrame = function (f) {\n        var frame = window.requestAnimationFrame || this.timeoutFrame;\n        frame(f);\n    };\n    ScrollPanel.prototype.ngOnDestroy = function () {\n        if (this.initialized) {\n            window.removeEventListener('resize', this.moveBar);\n            this.contentViewChild.nativeElement.removeEventListener('scroll', this.moveBar);\n            this.contentViewChild.nativeElement.removeEventListener('mouseenter', this.moveBar);\n            this.xBarViewChild.nativeElement.removeEventListener('mousedown', this.onXBarMouseDown);\n            this.yBarViewChild.nativeElement.removeEventListener('mousedown', this.onYBarMouseDown);\n        }\n    };\n    ScrollPanel.prototype.refresh = function () {\n        this.moveBar();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ScrollPanel.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ScrollPanel.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollPanel.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('content'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollPanel.prototype, \"contentViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('xBar'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollPanel.prototype, \"xBarViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('yBar'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollPanel.prototype, \"yBarViewChild\", void 0);\n    ScrollPanel = __decorate([\n        core_1.Component({\n            selector: 'p-scrollPanel',\n            template: \"\\n        <div #container [ngClass]=\\\"'ui-scrollpanel ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-scrollpanel-wrapper\\\">\\n                <div #content class=\\\"ui-scrollpanel-content\\\">\\n                    <ng-content></ng-content>\\n                </div>\\n            </div>\\n            <div #xBar class=\\\"ui-scrollpanel-bar ui-scrollpanel-bar-x\\\"></div>\\n            <div #yBar class=\\\"ui-scrollpanel-bar ui-scrollpanel-bar-y\\\"></div>   \\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.NgZone, domhandler_1.DomHandler])\n    ], ScrollPanel);\n    return ScrollPanel;\n}());\nexports.ScrollPanel = ScrollPanel;\nvar ScrollPanelModule = /** @class */ (function () {\n    function ScrollPanelModule() {\n    }\n    ScrollPanelModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ScrollPanel],\n            declarations: [ScrollPanel]\n        })\n    ], ScrollPanelModule);\n    return ScrollPanelModule;\n}());\nexports.ScrollPanelModule = ScrollPanelModule;\n//# sourceMappingURL=scrollpanel.js.map\n\n/***/ }),\n/* 775 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar objectutils_1 = __webpack_require__(40);\nvar forms_1 = __webpack_require__(17);\nexports.SELECTBUTTON_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return SelectButton; }),\n    multi: true\n};\nvar SelectButton = /** @class */ (function () {\n    function SelectButton(objectUtils, cd) {\n        this.objectUtils = objectUtils;\n        this.cd = cd;\n        this.onOptionClick = new core_1.EventEmitter();\n        this.onChange = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Object.defineProperty(SelectButton.prototype, \"options\", {\n        get: function () {\n            return this._options;\n        },\n        set: function (val) {\n            var opts = this.optionLabel || this.itemTemplate ? this.objectUtils.generateSelectItems(val, this.optionLabel) : val;\n            this._options = opts;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    SelectButton.prototype.writeValue = function (value) {\n        this.value = value;\n        this.cd.markForCheck();\n    };\n    SelectButton.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    SelectButton.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    SelectButton.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    SelectButton.prototype.onItemClick = function (event, option, checkbox, index) {\n        if (this.disabled) {\n            return;\n        }\n        checkbox.focus();\n        if (this.multiple) {\n            var itemIndex_1 = this.findItemIndex(option);\n            if (itemIndex_1 != -1)\n                this.value = this.value.filter(function (val, i) { return i != itemIndex_1; });\n            else\n                this.value = (this.value || []).concat([option.value]);\n        }\n        else {\n            this.value = option.value;\n        }\n        this.onOptionClick.emit({\n            originalEvent: event,\n            option: option,\n            index: index\n        });\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    SelectButton.prototype.onFocus = function (event) {\n        this.focusedItem = event.target;\n    };\n    SelectButton.prototype.onBlur = function (event) {\n        this.focusedItem = null;\n        this.onModelTouched();\n    };\n    SelectButton.prototype.isSelected = function (option) {\n        if (this.multiple)\n            return this.findItemIndex(option) != -1;\n        else\n            return this.objectUtils.equals(option.value, this.value, this.dataKey);\n    };\n    SelectButton.prototype.findItemIndex = function (option) {\n        var index = -1;\n        if (this.value) {\n            for (var i = 0; i < this.value.length; i++) {\n                if (this.value[i] == option.value) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SelectButton.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SelectButton.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SelectButton.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SelectButton.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SelectButton.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SelectButton.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SelectButton.prototype, \"optionLabel\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], SelectButton.prototype, \"onOptionClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], SelectButton.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.ContentChild(core_1.TemplateRef),\n        __metadata(\"design:type\", Object)\n    ], SelectButton.prototype, \"itemTemplate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], SelectButton.prototype, \"options\", null);\n    SelectButton = __decorate([\n        core_1.Component({\n            selector: 'p-selectButton',\n            template: \"\\n        <div [ngClass]=\\\"'ui-selectbutton ui-buttonset ui-widget ui-corner-all ui-buttonset-' + options.length\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div *ngFor=\\\"let option of options; let i = index\\\" class=\\\"ui-button ui-widget ui-state-default ui-button-text-only {{option.styleClass}}\\\"\\n                [ngClass]=\\\"{'ui-state-active':isSelected(option), 'ui-state-disabled':disabled, 'ui-state-focus': cbox == focusedItem, \\n                'ui-button-text-icon-left': (option.icon != null), 'ui-button-icon-only': (option.icon && !option.label)}\\\" (click)=\\\"onItemClick($event,option,cbox,i)\\\" [attr.title]=\\\"option.title\\\">\\n                <ng-container *ngIf=\\\"!itemTemplate else customcontent\\\">\\n                    <span [ngClass]=\\\"['ui-clickable', 'ui-button-icon-left']\\\" [class]=\\\"option.icon\\\" *ngIf=\\\"option.icon\\\"></span>\\n                    <span class=\\\"ui-button-text ui-clickable\\\">{{option.label||'ui-btn'}}</span>\\n                </ng-container>\\n                <ng-template #customcontent>\\n                    <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option.value, index: i}\\\"></ng-container>\\n                </ng-template>\\n                <div class=\\\"ui-helper-hidden-accessible\\\">\\n                    <input #cbox type=\\\"checkbox\\\" [checked]=\\\"isSelected(option)\\\" (focus)=\\\"onFocus($event)\\\" (blur)=\\\"onBlur($event)\\\" [attr.tabindex]=\\\"tabindex\\\" [attr.disabled]=\\\"disabled\\\">\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            providers: [objectutils_1.ObjectUtils, exports.SELECTBUTTON_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [objectutils_1.ObjectUtils, core_1.ChangeDetectorRef])\n    ], SelectButton);\n    return SelectButton;\n}());\nexports.SelectButton = SelectButton;\nvar SelectButtonModule = /** @class */ (function () {\n    function SelectButtonModule() {\n    }\n    SelectButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [SelectButton],\n            declarations: [SelectButton]\n        })\n    ], SelectButtonModule);\n    return SelectButtonModule;\n}());\nexports.SelectButtonModule = SelectButtonModule;\n//# sourceMappingURL=selectbutton.js.map\n\n/***/ }),\n/* 776 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar router_1 = __webpack_require__(5);\nvar SlideMenuSub = /** @class */ (function () {\n    function SlideMenuSub(slideMenu) {\n        this.slideMenu = slideMenu;\n        this.backLabel = 'Back';\n        this.easing = 'ease-out';\n    }\n    SlideMenuSub.prototype.itemClick = function (event, item, listitem) {\n        var _this = this;\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        if (item.items && !this.slideMenu.animating) {\n            this.slideMenu.left -= this.slideMenu.menuWidth;\n            this.activeItem = listitem;\n            this.slideMenu.animating = true;\n            setTimeout(function () { return _this.slideMenu.animating = false; }, this.effectDuration);\n        }\n    };\n    SlideMenuSub.prototype.ngOnDestroy = function () {\n        this.activeItem = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenuSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SlideMenuSub.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenuSub.prototype, \"backLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenuSub.prototype, \"menuWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenuSub.prototype, \"effectDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenuSub.prototype, \"easing\", void 0);\n    SlideMenuSub = __decorate([\n        core_1.Component({\n            selector: 'p-slideMenuSub',\n            template: \"\\n        <ul [ngClass]=\\\"{'ui-slidemenu-rootlist':root, 'ui-submenu-list':!root}\\\"\\n            [style.width.px]=\\\"menuWidth\\\" [style.left.px]=\\\"root ? slideMenu.left : slideMenu.menuWidth\\\"\\n            [style.transitionProperty]=\\\"root ? 'left' : 'none'\\\" [style.transitionDuration]=\\\"effectDuration + 'ms'\\\" [style.transitionTimingFunction]=\\\"easing\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"(root ? item : item.items)\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\">\\n                <li *ngIf=\\\"!child.separator\\\" #listitem [ngClass]=\\\"{'ui-menuitem ui-widget ui-corner-all':true,'ui-menuitem-active':listitem==activeItem}\\\"\\n                    [class]=\\\"child.styleClass\\\" [ngStyle]=\\\"child.style\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" \\n                        (click)=\\\"itemClick($event, child, listitem)\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" \\n                        [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\" [href]=\\\"child.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" \\n                        [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" \\n                        (click)=\\\"itemClick($event, child, listitem)\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                    </a>\\n                    <p-slideMenuSub class=\\\"ui-submenu\\\" [item]=\\\"child\\\" [menuWidth]=\\\"menuWidth\\\" *ngIf=\\\"child.items\\\"></p-slideMenuSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return SlideMenu; }))),\n        __metadata(\"design:paramtypes\", [SlideMenu])\n    ], SlideMenuSub);\n    return SlideMenuSub;\n}());\nexports.SlideMenuSub = SlideMenuSub;\nvar SlideMenu = /** @class */ (function () {\n    function SlideMenu(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.menuWidth = 190;\n        this.viewportHeight = 180;\n        this.effectDuration = 250;\n        this.easing = 'ease-out';\n        this.backLabel = 'Back';\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.left = 0;\n        this.animating = false;\n    }\n    SlideMenu.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.container = this.containerViewChild.nativeElement;\n        this.backwardElement = this.backwardViewChild.nativeElement;\n        this.slideMenuContentElement = this.slideMenuContentViewChild.nativeElement;\n        this.slideMenuContentElement.style.height = this.viewportHeight - this.domHandler.getHiddenElementOuterHeight(this.backwardElement) + 'px';\n        if (this.popup) {\n            if (this.appendTo) {\n                if (this.appendTo === 'body')\n                    document.body.appendChild(this.container);\n                else\n                    this.domHandler.appendChild(this.container, this.appendTo);\n            }\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.preventDocumentDefault) {\n                    _this.hide();\n                }\n                _this.preventDocumentDefault = false;\n            });\n        }\n    };\n    SlideMenu.prototype.toggle = function (event) {\n        if (this.container.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n    };\n    SlideMenu.prototype.show = function (event) {\n        this.preventDocumentDefault = true;\n        this.moveOnTop();\n        this.container.style.display = 'block';\n        this.domHandler.absolutePosition(this.container, event.target);\n        this.domHandler.fadeIn(this.container, 250);\n    };\n    SlideMenu.prototype.hide = function () {\n        this.container.style.display = 'none';\n    };\n    SlideMenu.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.container.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    SlideMenu.prototype.onClick = function (event) {\n        this.preventDocumentDefault = true;\n    };\n    SlideMenu.prototype.goBack = function () {\n        this.left += this.menuWidth;\n    };\n    SlideMenu.prototype.ngOnDestroy = function () {\n        if (this.popup) {\n            if (this.documentClickListener) {\n                this.documentClickListener();\n            }\n            if (this.appendTo) {\n                this.el.nativeElement.appendChild(this.container);\n            }\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], SlideMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SlideMenu.prototype, \"popup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SlideMenu.prototype, \"menuWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SlideMenu.prototype, \"viewportHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenu.prototype, \"effectDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenu.prototype, \"easing\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenu.prototype, \"backLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenu.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SlideMenu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SlideMenu.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SlideMenu.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('backward'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SlideMenu.prototype, \"backwardViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('slideMenuContent'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SlideMenu.prototype, \"slideMenuContentViewChild\", void 0);\n    SlideMenu = __decorate([\n        core_1.Component({\n            selector: 'p-slideMenu',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-slidemenu ui-widget ui-widget-content ui-corner-all':true, 'ui-slidemenu-dynamic ui-shadow':popup}\\\" \\n            [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" (click)=\\\"onClick($event)\\\">\\n            <div class=\\\"ui-slidemenu-wrapper\\\" [style.height.px]=\\\"viewportHeight\\\">\\n                <div #slideMenuContent class=\\\"ui-slidemenu-content\\\">\\n                    <p-slideMenuSub [item]=\\\"model\\\" root=\\\"root\\\" [menuWidth]=\\\"menuWidth\\\" [effectDuration]=\\\"effectDuration\\\" [easing]=\\\"easing\\\"></p-slideMenuSub>\\n                </div>\\n                <div #backward class=\\\"ui-slidemenu-backward ui-widget-header ui-corner-all\\\" [style.display]=\\\"left ? 'block' : 'none'\\\" (click)=\\\"goBack()\\\">\\n                    <span class=\\\"ui-slidemenu-backward-icon fa fa-fw fa-caret-left\\\"></span><span>{{backLabel}}</span>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], SlideMenu);\n    return SlideMenu;\n}());\nexports.SlideMenu = SlideMenu;\nvar SlideMenuModule = /** @class */ (function () {\n    function SlideMenuModule() {\n    }\n    SlideMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [SlideMenu, router_1.RouterModule],\n            declarations: [SlideMenu, SlideMenuSub]\n        })\n    ], SlideMenuModule);\n    return SlideMenuModule;\n}());\nexports.SlideMenuModule = SlideMenuModule;\n//# sourceMappingURL=slidemenu.js.map\n\n/***/ }),\n/* 777 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar forms_1 = __webpack_require__(17);\nexports.SLIDER_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Slider; }),\n    multi: true\n};\nvar Slider = /** @class */ (function () {\n    function Slider(el, domHandler, renderer, ngZone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.ngZone = ngZone;\n        this.min = 0;\n        this.max = 100;\n        this.orientation = 'horizontal';\n        this.onChange = new core_1.EventEmitter();\n        this.onSlideEnd = new core_1.EventEmitter();\n        this.handleValues = [];\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.handleIndex = 0;\n    }\n    Slider.prototype.onMouseDown = function (event, index) {\n        if (this.disabled) {\n            return;\n        }\n        this.dragging = true;\n        this.updateDomData();\n        this.sliderHandleClick = true;\n        this.handleIndex = index;\n        this.bindDragListeners();\n        event.preventDefault();\n    };\n    Slider.prototype.onTouchStart = function (event, index) {\n        var touchobj = event.changedTouches[0];\n        this.startHandleValue = (this.range) ? this.handleValues[index] : this.handleValue;\n        this.dragging = true;\n        this.handleIndex = index;\n        if (this.orientation === 'horizontal') {\n            this.startx = parseInt(touchobj.clientX, 10);\n            this.barWidth = this.el.nativeElement.children[0].offsetWidth;\n        }\n        else {\n            this.starty = parseInt(touchobj.clientY, 10);\n            this.barHeight = this.el.nativeElement.children[0].offsetHeight;\n        }\n        event.preventDefault();\n    };\n    Slider.prototype.onTouchMove = function (event, index) {\n        var touchobj = event.changedTouches[0], handleValue = 0;\n        if (this.orientation === 'horizontal') {\n            handleValue = Math.floor(((parseInt(touchobj.clientX, 10) - this.startx) * 100) / (this.barWidth)) + this.startHandleValue;\n        }\n        else {\n            handleValue = Math.floor(((this.starty - parseInt(touchobj.clientY, 10)) * 100) / (this.barHeight)) + this.startHandleValue;\n        }\n        this.setValueFromHandle(event, handleValue);\n        event.preventDefault();\n    };\n    Slider.prototype.onBarClick = function (event) {\n        if (this.disabled) {\n            return;\n        }\n        if (!this.sliderHandleClick) {\n            this.updateDomData();\n            this.handleChange(event);\n        }\n        this.sliderHandleClick = false;\n    };\n    Slider.prototype.handleChange = function (event) {\n        var handleValue = this.calculateHandleValue(event);\n        this.setValueFromHandle(event, handleValue);\n    };\n    Slider.prototype.bindDragListeners = function () {\n        var _this = this;\n        this.ngZone.runOutsideAngular(function () {\n            if (!_this.dragListener) {\n                _this.dragListener = _this.renderer.listen('document', 'mousemove', function (event) {\n                    if (_this.dragging) {\n                        _this.ngZone.run(function () {\n                            _this.handleChange(event);\n                        });\n                    }\n                });\n            }\n            if (!_this.mouseupListener) {\n                _this.mouseupListener = _this.renderer.listen('document', 'mouseup', function (event) {\n                    if (_this.dragging) {\n                        _this.dragging = false;\n                        _this.ngZone.run(function () {\n                            if (_this.range) {\n                                _this.onSlideEnd.emit({ originalEvent: event, values: _this.values });\n                            }\n                            else {\n                                _this.onSlideEnd.emit({ originalEvent: event, value: _this.value });\n                            }\n                        });\n                    }\n                });\n            }\n        });\n    };\n    Slider.prototype.unbindDragListeners = function () {\n        if (this.dragListener) {\n            this.dragListener();\n        }\n        if (this.mouseupListener) {\n            this.mouseupListener();\n        }\n    };\n    Slider.prototype.setValueFromHandle = function (event, handleValue) {\n        var newValue = this.getValueFromHandle(handleValue);\n        if (this.range) {\n            if (this.step) {\n                this.handleStepChange(newValue, this.values[this.handleIndex]);\n            }\n            else {\n                this.handleValues[this.handleIndex] = handleValue;\n                this.updateValue(newValue, event);\n            }\n        }\n        else {\n            if (this.step) {\n                this.handleStepChange(newValue, this.value);\n            }\n            else {\n                this.handleValue = handleValue;\n                this.updateValue(newValue, event);\n            }\n        }\n    };\n    Slider.prototype.handleStepChange = function (newValue, oldValue) {\n        var diff = (newValue - oldValue);\n        var val = oldValue;\n        if (diff < 0) {\n            val = oldValue + Math.ceil((newValue - oldValue) / this.step) * this.step;\n        }\n        else if (diff > 0) {\n            val = oldValue + Math.floor((newValue - oldValue) / this.step) * this.step;\n        }\n        this.updateValue(val);\n        this.updateHandleValue();\n    };\n    Slider.prototype.writeValue = function (value) {\n        if (this.range)\n            this.values = value || [0, 0];\n        else\n            this.value = value || 0;\n        this.updateHandleValue();\n    };\n    Slider.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Slider.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Slider.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Object.defineProperty(Slider.prototype, \"rangeStartLeft\", {\n        get: function () {\n            return this.isVertical() ? 'auto' : this.handleValues[0] + '%';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Slider.prototype, \"rangeStartBottom\", {\n        get: function () {\n            return this.isVertical() ? this.handleValues[0] + '%' : 'auto';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Slider.prototype, \"rangeEndLeft\", {\n        get: function () {\n            return this.isVertical() ? 'auto' : this.handleValues[1] + '%';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Slider.prototype, \"rangeEndBottom\", {\n        get: function () {\n            return this.isVertical() ? this.handleValues[1] + '%' : 'auto';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Slider.prototype.isVertical = function () {\n        return this.orientation === 'vertical';\n    };\n    Slider.prototype.updateDomData = function () {\n        var rect = this.el.nativeElement.children[0].getBoundingClientRect();\n        this.initX = rect.left + this.domHandler.getWindowScrollLeft();\n        this.initY = rect.top + this.domHandler.getWindowScrollTop();\n        this.barWidth = this.el.nativeElement.children[0].offsetWidth;\n        this.barHeight = this.el.nativeElement.children[0].offsetHeight;\n    };\n    Slider.prototype.calculateHandleValue = function (event) {\n        if (this.orientation === 'horizontal')\n            return ((event.pageX - this.initX) * 100) / (this.barWidth);\n        else\n            return (((this.initY + this.barHeight) - event.pageY) * 100) / (this.barHeight);\n    };\n    Slider.prototype.updateHandleValue = function () {\n        if (this.range) {\n            this.handleValues[0] = (this.values[0] < this.min ? 0 : this.values[0] - this.min) * 100 / (this.max - this.min);\n            this.handleValues[1] = (this.values[1] > this.max ? 100 : this.values[1] - this.min) * 100 / (this.max - this.min);\n        }\n        else {\n            if (this.value < this.min)\n                this.handleValue = 0;\n            else if (this.value > this.max)\n                this.handleValue = 100;\n            else\n                this.handleValue = (this.value - this.min) * 100 / (this.max - this.min);\n        }\n    };\n    Slider.prototype.updateValue = function (val, event) {\n        if (this.range) {\n            var value = val;\n            if (this.handleIndex == 0) {\n                if (value < this.min) {\n                    value = this.min;\n                    this.handleValues[0] = 0;\n                }\n                else if (value > this.values[1]) {\n                    value = this.values[1];\n                    this.handleValues[0] = this.handleValues[1];\n                }\n            }\n            else {\n                if (value > this.max) {\n                    value = this.max;\n                    this.handleValues[1] = 100;\n                }\n                else if (value < this.values[0]) {\n                    value = this.values[0];\n                    this.handleValues[1] = this.handleValues[0];\n                }\n            }\n            this.values[this.handleIndex] = Math.floor(value);\n            this.onModelChange(this.values);\n            this.onChange.emit({ event: event, values: this.values });\n        }\n        else {\n            if (val < this.min) {\n                val = this.min;\n                this.handleValue = 0;\n            }\n            else if (val > this.max) {\n                val = this.max;\n                this.handleValue = 100;\n            }\n            this.value = Math.floor(val);\n            this.onModelChange(this.value);\n            this.onChange.emit({ event: event, value: this.value });\n        }\n    };\n    Slider.prototype.getValueFromHandle = function (handleValue) {\n        return (this.max - this.min) * (handleValue / 100) + this.min;\n    };\n    Slider.prototype.ngOnDestroy = function () {\n        this.unbindDragListeners();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Slider.prototype, \"animate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Slider.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Slider.prototype, \"min\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Slider.prototype, \"max\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Slider.prototype, \"orientation\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Slider.prototype, \"step\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Slider.prototype, \"range\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Slider.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Slider.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Slider.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Slider.prototype, \"onSlideEnd\", void 0);\n    Slider = __decorate([\n        core_1.Component({\n            selector: 'p-slider',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [ngClass]=\\\"{'ui-slider ui-widget ui-widget-content ui-corner-all':true,'ui-state-disabled':disabled,\\n            'ui-slider-horizontal':orientation == 'horizontal','ui-slider-vertical':orientation == 'vertical','ui-slider-animate':animate}\\\"\\n            (click)=\\\"onBarClick($event)\\\">\\n            <span *ngIf=\\\"range && orientation == 'horizontal'\\\" class=\\\"ui-slider-range ui-widget-header ui-corner-all\\\" [ngStyle]=\\\"{'left':handleValues[0] + '%',width: (handleValues[1] - handleValues[0] + '%')}\\\"></span>\\n            <span *ngIf=\\\"range && orientation == 'vertical'\\\" class=\\\"ui-slider-range ui-widget-header ui-corner-all\\\" [ngStyle]=\\\"{'bottom':handleValues[0] + '%',height: (handleValues[1] - handleValues[0] + '%')}\\\"></span>\\n            <span *ngIf=\\\"!range && orientation=='vertical'\\\" class=\\\"ui-slider-range ui-slider-range-min ui-widget-header ui-corner-all\\\" [ngStyle]=\\\"{'height': handleValue + '%'}\\\"></span>\\n            <span *ngIf=\\\"!range && orientation=='horizontal'\\\" class=\\\"ui-slider-range ui-slider-range-min ui-widget-header ui-corner-all\\\" [ngStyle]=\\\"{'width': handleValue + '%'}\\\"></span>\\n            <span *ngIf=\\\"!range\\\" class=\\\"ui-slider-handle ui-state-default ui-corner-all ui-clickable\\\" (mousedown)=\\\"onMouseDown($event)\\\" (touchstart)=\\\"onTouchStart($event)\\\" (touchmove)=\\\"onTouchMove($event)\\\" (touchend)=\\\"dragging=false\\\"\\n                [style.transition]=\\\"dragging ? 'none': null\\\" [ngStyle]=\\\"{'left': orientation == 'horizontal' ? handleValue + '%' : null,'bottom': orientation == 'vertical' ? handleValue + '%' : null}\\\"></span>\\n            <span *ngIf=\\\"range\\\" (mousedown)=\\\"onMouseDown($event,0)\\\" (touchstart)=\\\"onTouchStart($event,0)\\\" (touchmove)=\\\"onTouchMove($event,0)\\\" (touchend)=\\\"dragging=false\\\" [style.transition]=\\\"dragging ? 'none': null\\\" class=\\\"ui-slider-handle ui-state-default ui-corner-all ui-clickable\\\" \\n                [ngStyle]=\\\"{'left': rangeStartLeft, 'bottom': rangeStartBottom}\\\" [ngClass]=\\\"{'ui-slider-handle-active':handleIndex==0}\\\"></span>\\n            <span *ngIf=\\\"range\\\" (mousedown)=\\\"onMouseDown($event,1)\\\" (touchstart)=\\\"onTouchStart($event,1)\\\" (touchmove)=\\\"onTouchMove($event,1)\\\" (touchend)=\\\"dragging=false\\\" [style.transition]=\\\"dragging ? 'none': null\\\" class=\\\"ui-slider-handle ui-state-default ui-corner-all ui-clickable\\\" \\n                [ngStyle]=\\\"{'left': rangeEndLeft, 'bottom': rangeEndBottom}\\\" [ngClass]=\\\"{'ui-slider-handle-active':handleIndex==1}\\\"></span>\\n        </div>\\n    \",\n            providers: [exports.SLIDER_VALUE_ACCESSOR, domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.NgZone])\n    ], Slider);\n    return Slider;\n}());\nexports.Slider = Slider;\nvar SliderModule = /** @class */ (function () {\n    function SliderModule() {\n    }\n    SliderModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Slider],\n            declarations: [Slider]\n        })\n    ], SliderModule);\n    return SliderModule;\n}());\nexports.SliderModule = SliderModule;\n//# sourceMappingURL=slider.js.map\n\n/***/ }),\n/* 778 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar Sidebar = /** @class */ (function () {\n    function Sidebar(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.position = 'left';\n        this.blockScroll = false;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.modal = true;\n        this.onShow = new core_1.EventEmitter();\n        this.onHide = new core_1.EventEmitter();\n        this.visibleChange = new core_1.EventEmitter();\n    }\n    Sidebar.prototype.ngAfterViewInit = function () {\n        this.initialized = true;\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.containerViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);\n        }\n        if (this.visible) {\n            this.show();\n        }\n    };\n    Object.defineProperty(Sidebar.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (val) {\n            this._visible = val;\n            if (this.initialized && this.containerViewChild && this.containerViewChild.nativeElement) {\n                if (this._visible)\n                    this.show();\n                else {\n                    if (this.preventVisibleChangePropagation)\n                        this.preventVisibleChangePropagation = false;\n                    else\n                        this.hide();\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Sidebar.prototype.ngAfterViewChecked = function () {\n        if (this.executePostDisplayActions) {\n            this.onShow.emit({});\n            this.executePostDisplayActions = false;\n        }\n    };\n    Sidebar.prototype.show = function () {\n        this.executePostDisplayActions = true;\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n        if (this.modal) {\n            this.enableModality();\n        }\n    };\n    Sidebar.prototype.hide = function () {\n        this.onHide.emit({});\n        if (this.modal) {\n            this.disableModality();\n        }\n    };\n    Sidebar.prototype.close = function (event) {\n        this.preventVisibleChangePropagation = true;\n        this.hide();\n        this.visibleChange.emit(false);\n        event.preventDefault();\n    };\n    Sidebar.prototype.enableModality = function () {\n        var _this = this;\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = String(parseInt(this.containerViewChild.nativeElement.style.zIndex) - 1);\n            this.domHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-sidebar-mask');\n            this.maskClickListener = this.renderer.listen(this.mask, 'click', function (event) {\n                _this.close(event);\n            });\n            document.body.appendChild(this.mask);\n            if (this.blockScroll) {\n                this.domHandler.addClass(document.body, 'ui-overflow-hidden');\n            }\n        }\n    };\n    Sidebar.prototype.disableModality = function () {\n        if (this.mask) {\n            this.unbindMaskClickListener();\n            document.body.removeChild(this.mask);\n            if (this.blockScroll) {\n                this.domHandler.removeClass(document.body, 'ui-overflow-hidden');\n            }\n            this.mask = null;\n        }\n    };\n    Sidebar.prototype.unbindMaskClickListener = function () {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n        }\n    };\n    Sidebar.prototype.ngOnDestroy = function () {\n        this.initialized = false;\n        if (this.visible) {\n            this.hide();\n        }\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);\n        }\n        this.unbindMaskClickListener();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Sidebar.prototype, \"position\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Sidebar.prototype, \"fullScreen\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Sidebar.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Sidebar.prototype, \"blockScroll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Sidebar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Sidebar.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Sidebar.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Sidebar.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Sidebar.prototype, \"modal\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Sidebar.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Sidebar.prototype, \"onShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Sidebar.prototype, \"onHide\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Sidebar.prototype, \"visibleChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Sidebar.prototype, \"visible\", null);\n    Sidebar = __decorate([\n        core_1.Component({\n            selector: 'p-sidebar',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-sidebar ui-widget ui-widget-content ui-shadow':true, 'ui-sidebar-active': visible, \\n            'ui-sidebar-left': (position === 'left'), 'ui-sidebar-right': (position === 'right'),\\n            'ui-sidebar-top': (position === 'top'), 'ui-sidebar-bottom': (position === 'bottom'), \\n            'ui-sidebar-full': fullScreen}\\\"\\n            [@panelState]=\\\"visible ? 'visible' : 'hidden'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <a [ngClass]=\\\"{'ui-sidebar-close ui-corner-all':true}\\\" href=\\\"#\\\" role=\\\"button\\\" (click)=\\\"close($event)\\\">\\n                <span class=\\\"fa fa-fw fa-close\\\"></span>\\n            </a>\\n            <ng-content></ng-content>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('300ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('300ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], Sidebar);\n    return Sidebar;\n}());\nexports.Sidebar = Sidebar;\nvar SidebarModule = /** @class */ (function () {\n    function SidebarModule() {\n    }\n    SidebarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Sidebar],\n            declarations: [Sidebar]\n        })\n    ], SidebarModule);\n    return SidebarModule;\n}());\nexports.SidebarModule = SidebarModule;\n//# sourceMappingURL=sidebar.js.map\n\n/***/ }),\n/* 779 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar animations_1 = __webpack_require__(28);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar button_1 = __webpack_require__(37);\nvar router_1 = __webpack_require__(5);\nvar router_2 = __webpack_require__(5);\nvar SplitButton = /** @class */ (function () {\n    function SplitButton(el, domHandler, renderer, router, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.router = router;\n        this.cd = cd;\n        this.iconPos = 'left';\n        this.onClick = new core_1.EventEmitter();\n        this.onDropdownClick = new core_1.EventEmitter();\n        this.menuVisible = false;\n    }\n    SplitButton.prototype.ngAfterViewInit = function () {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlayViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.overlayViewChild.nativeElement, this.appendTo);\n        }\n    };\n    SplitButton.prototype.ngAfterViewChecked = function () {\n        if (this.shown) {\n            this.onShow();\n            this.shown = false;\n        }\n    };\n    SplitButton.prototype.onDefaultButtonClick = function (event) {\n        this.onClick.emit(event);\n    };\n    SplitButton.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        this.menuVisible = false;\n    };\n    SplitButton.prototype.show = function () {\n        this.shown = true;\n        this.menuVisible = !this.menuVisible;\n        this.alignPanel();\n        this.overlayViewChild.nativeElement.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n    };\n    SplitButton.prototype.onShow = function () {\n        this.alignPanel();\n        this.bindDocumentClickListener();\n    };\n    SplitButton.prototype.onDropdownButtonClick = function (event) {\n        this.onDropdownClick.emit(event);\n        this.dropdownClick = true;\n        this.show();\n    };\n    SplitButton.prototype.alignPanel = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.overlayViewChild.nativeElement, this.containerViewChild.nativeElement);\n        else\n            this.domHandler.relativePosition(this.overlayViewChild.nativeElement, this.containerViewChild.nativeElement);\n    };\n    SplitButton.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (_this.dropdownClick) {\n                    _this.dropdownClick = false;\n                }\n                else {\n                    _this.menuVisible = false;\n                    _this.unbindDocumentClickListener();\n                    _this.cd.markForCheck();\n                }\n            });\n        }\n    };\n    SplitButton.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    SplitButton.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], SplitButton.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"icon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"iconPos\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], SplitButton.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], SplitButton.prototype, \"onDropdownClick\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SplitButton.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SplitButton.prototype, \"menuStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"menuStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SplitButton.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SplitButton.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SplitButton.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"dir\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SplitButton.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('defaultbtn'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SplitButton.prototype, \"buttonViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('overlay'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SplitButton.prototype, \"overlayViewChild\", void 0);\n    SplitButton = __decorate([\n        core_1.Component({\n            selector: 'p-splitButton',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-splitbutton ui-buttonset ui-widget':true,'ui-state-disabled':disabled}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <button #defaultbtn type=\\\"button\\\" pButton [icon]=\\\"icon\\\" [iconPos]=\\\"iconPos\\\" [label]=\\\"label\\\" [cornerStyleClass]=\\\"dir === 'rtl' ? 'ui-corner-right': 'ui-corner-left'\\\" (click)=\\\"onDefaultButtonClick($event)\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\">\\n            </button><button type=\\\"button\\\" pButton class=\\\"ui-splitbutton-menubutton\\\" icon=\\\"fa-caret-down\\\" [cornerStyleClass]=\\\"dir === 'rtl' ? 'ui-corner-left': 'ui-corner-right'\\\" (click)=\\\"onDropdownButtonClick($event)\\\" [disabled]=\\\"disabled\\\"></button>\\n            <div #overlay [ngClass]=\\\"'ui-menu ui-menu-dynamic ui-widget ui-widget-content ui-corner-all ui-helper-clearfix ui-shadow'\\\" [style.display]=\\\"menuVisible ? 'block' : 'none'\\\"\\n                    [ngStyle]=\\\"menuStyle\\\" [class]=\\\"menuStyleClass\\\" [@overlayState]=\\\"menuVisible ? 'visible' : 'hidden'\\\">\\n                <ul class=\\\"ui-menu-list ui-helper-reset\\\">\\n                    <ng-template ngFor let-item [ngForOf]=\\\"model\\\">\\n                        <li class=\\\"ui-menuitem ui-widget ui-corner-all\\\" role=\\\"menuitem\\\" *ngIf=\\\"item.visible !== false\\\">\\n                            <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"item.target\\\"\\n                                [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"itemClick($event, item)\\\">\\n                                <span [ngClass]=\\\"'ui-menuitem-icon fa fa-fw'\\\" [class]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span>\\n                                <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                            </a>\\n                            <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\"\\n                                class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"item.target\\\" [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"itemClick($event, item)\\\">\\n                                <span [ngClass]=\\\"'ui-menuitem-icon fa fa-fw'\\\" [class]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span>\\n                                <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                            </a>\\n                        </li>\\n                    </ng-template>\\n                </ul>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('overlayState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, router_1.Router, core_1.ChangeDetectorRef])\n    ], SplitButton);\n    return SplitButton;\n}());\nexports.SplitButton = SplitButton;\nvar SplitButtonModule = /** @class */ (function () {\n    function SplitButtonModule() {\n    }\n    SplitButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule, router_2.RouterModule],\n            exports: [SplitButton, button_1.ButtonModule, router_2.RouterModule],\n            declarations: [SplitButton]\n        })\n    ], SplitButtonModule);\n    return SplitButtonModule;\n}());\nexports.SplitButtonModule = SplitButtonModule;\n//# sourceMappingURL=splitbutton.js.map\n\n/***/ }),\n/* 780 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar router_1 = __webpack_require__(5);\nvar Steps = /** @class */ (function () {\n    function Steps() {\n        this.activeIndex = 0;\n        this.readonly = true;\n        this.activeIndexChange = new core_1.EventEmitter();\n    }\n    Steps.prototype.itemClick = function (event, item, i) {\n        if (this.readonly || item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        this.activeIndexChange.emit(i);\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item,\n                index: i\n            });\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Steps.prototype, \"activeIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Steps.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Steps.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Steps.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Steps.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Steps.prototype, \"activeIndexChange\", void 0);\n    Steps = __decorate([\n        core_1.Component({\n            selector: 'p-steps',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-steps ui-widget ui-helper-clearfix':true,'ui-steps-readonly':readonly}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ul role=\\\"tablist\\\">\\n                <li *ngFor=\\\"let item of model; let i = index\\\" class=\\\"ui-steps-item\\\" #menuitem\\n                    [ngClass]=\\\"{'ui-state-highlight':(i === activeIndex),'ui-state-default':(i !== activeIndex),\\n                        'ui-state-disabled':item.disabled||(i !== activeIndex && readonly)}\\\">\\n                    <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, item, i)\\\" [attr.target]=\\\"item.target\\\" [attr.id]=\\\"item.id\\\">\\n                        <span class=\\\"ui-steps-number\\\">{{i + 1}}</span>\\n                        <span class=\\\"ui-steps-title\\\">{{item.label}}</span>\\n                    </a>\\n                    <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, item, i)\\\" [attr.target]=\\\"item.target\\\" [attr.id]=\\\"item.id\\\">\\n                        <span class=\\\"ui-steps-number\\\">{{i + 1}}</span>\\n                        <span class=\\\"ui-steps-title\\\">{{item.label}}</span>\\n                    </a>\\n                </li>\\n            </ul>\\n        </div>\\n    \"\n        })\n    ], Steps);\n    return Steps;\n}());\nexports.Steps = Steps;\nvar StepsModule = /** @class */ (function () {\n    function StepsModule() {\n    }\n    StepsModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [Steps, router_1.RouterModule],\n            declarations: [Steps]\n        })\n    ], StepsModule);\n    return StepsModule;\n}());\nexports.StepsModule = StepsModule;\n//# sourceMappingURL=steps.js.map\n\n/***/ }),\n/* 781 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar idx = 0;\nvar TabViewNav = /** @class */ (function () {\n    function TabViewNav() {\n        this.orientation = 'top';\n        this.onTabClick = new core_1.EventEmitter();\n        this.onTabCloseClick = new core_1.EventEmitter();\n    }\n    TabViewNav.prototype.getDefaultHeaderClass = function (tab) {\n        var styleClass = 'ui-state-default ui-corner-' + this.orientation;\n        if (tab.headerStyleClass) {\n            styleClass = styleClass + \" \" + tab.headerStyleClass;\n        }\n        return styleClass;\n    };\n    TabViewNav.prototype.clickTab = function (event, tab) {\n        this.onTabClick.emit({\n            originalEvent: event,\n            tab: tab\n        });\n    };\n    TabViewNav.prototype.clickClose = function (event, tab) {\n        this.onTabCloseClick.emit({\n            originalEvent: event,\n            tab: tab\n        });\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TabViewNav.prototype, \"tabs\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabViewNav.prototype, \"orientation\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabViewNav.prototype, \"onTabClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabViewNav.prototype, \"onTabCloseClick\", void 0);\n    TabViewNav = __decorate([\n        core_1.Component({\n            selector: '[p-tabViewNav]',\n            host: {\n                '[class.ui-tabview-nav]': 'true',\n                '[class.ui-helper-reset]': 'true',\n                '[class.ui-helper-clearfix]': 'true',\n                '[class.ui-widget-header]': 'true',\n                '[class.ui-corner-all]': 'true'\n            },\n            template: \"\\n        <ng-template ngFor let-tab [ngForOf]=\\\"tabs\\\">\\n            <li [class]=\\\"getDefaultHeaderClass(tab)\\\" [ngStyle]=\\\"tab.headerStyle\\\" role=\\\"presentation\\\"\\n                [ngClass]=\\\"{'ui-tabview-selected ui-state-active': tab.selected, 'ui-state-disabled': tab.disabled}\\\"\\n                (click)=\\\"clickTab($event,tab)\\\" *ngIf=\\\"!tab.closed\\\">\\n                <a [attr.id]=\\\"tab.id + '-label'\\\" href=\\\"#\\\" role=\\\"tab\\\" [attr.aria-selected]=\\\"tab.selected\\\" [attr.aria-controls]=\\\"tab.id\\\">\\n                    <span class=\\\"ui-tabview-left-icon fa\\\" [ngClass]=\\\"tab.leftIcon\\\" *ngIf=\\\"tab.leftIcon\\\"></span>\\n                    <span class=\\\"ui-tabview-title\\\">{{tab.header}}</span>\\n                    <span class=\\\"ui-tabview-right-icon fa\\\" [ngClass]=\\\"tab.rightIcon\\\" *ngIf=\\\"tab.rightIcon\\\"></span>\\n                </a>\\n                <span *ngIf=\\\"tab.closable\\\" class=\\\"ui-tabview-close fa fa-close\\\" (click)=\\\"clickClose($event,tab)\\\"></span>\\n            </li>\\n        </ng-template>\\n    \",\n        })\n    ], TabViewNav);\n    return TabViewNav;\n}());\nexports.TabViewNav = TabViewNav;\nvar TabPanel = /** @class */ (function () {\n    function TabPanel(viewContainer) {\n        this.viewContainer = viewContainer;\n        this.cache = true;\n        this.id = \"ui-tabpanel-\" + idx++;\n    }\n    TabPanel.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'content':\n                    _this.contentTemplate = item.template;\n                    break;\n                default:\n                    _this.contentTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Object.defineProperty(TabPanel.prototype, \"selected\", {\n        get: function () {\n            return this._selected;\n        },\n        set: function (val) {\n            this._selected = val;\n            this.loaded = true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TabPanel.prototype.ngOnDestroy = function () {\n        this.view = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabPanel.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabPanel.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabPanel.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TabPanel.prototype, \"headerStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabPanel.prototype, \"headerStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabPanel.prototype, \"leftIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabPanel.prototype, \"rightIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabPanel.prototype, \"cache\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], TabPanel.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], TabPanel.prototype, \"selected\", null);\n    TabPanel = __decorate([\n        core_1.Component({\n            selector: 'p-tabPanel',\n            template: \"\\n        <div [attr.id]=\\\"id\\\" class=\\\"ui-tabview-panel ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': !selected}\\\"\\n            role=\\\"tabpanel\\\" [attr.aria-hidden]=\\\"!selected\\\" [attr.aria-labelledby]=\\\"id + '-label'\\\" *ngIf=\\\"!closed\\\">\\n            <ng-content></ng-content>\\n            <ng-container *ngIf=\\\"contentTemplate && (cache ? loaded : selected)\\\">\\n                <ng-container *ngTemplateOutlet=\\\"contentTemplate\\\"></ng-container>\\n            </ng-container>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ViewContainerRef])\n    ], TabPanel);\n    return TabPanel;\n}());\nexports.TabPanel = TabPanel;\nvar TabView = /** @class */ (function () {\n    function TabView(el) {\n        this.el = el;\n        this.orientation = 'top';\n        this.onChange = new core_1.EventEmitter();\n        this.onClose = new core_1.EventEmitter();\n        this.activeIndexChange = new core_1.EventEmitter();\n    }\n    Object.defineProperty(TabView.prototype, \"lazy\", {\n        get: function () {\n            return this._lazy;\n        },\n        set: function (val) {\n            this._lazy = val;\n            console.log('Lazy property of TabView is deprecated, use an ngTemplate inside a TabPanel instead for Lazy Loading');\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TabView.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.initTabs();\n        this.tabPanels.changes.subscribe(function (_) {\n            _this.initTabs();\n        });\n    };\n    TabView.prototype.initTabs = function () {\n        this.tabs = this.tabPanels.toArray();\n        var selectedTab = this.findSelectedTab();\n        if (!selectedTab && this.tabs.length) {\n            if (this.activeIndex != null && this.tabs.length > this.activeIndex)\n                this.tabs[this.activeIndex].selected = true;\n            else\n                this.tabs[0].selected = true;\n        }\n    };\n    TabView.prototype.open = function (event, tab) {\n        if (tab.disabled) {\n            if (event) {\n                event.preventDefault();\n            }\n            return;\n        }\n        if (!tab.selected) {\n            var selectedTab = this.findSelectedTab();\n            if (selectedTab) {\n                selectedTab.selected = false;\n            }\n            tab.selected = true;\n            var selectedTabIndex = this.findTabIndex(tab);\n            this.preventActiveIndexPropagation = true;\n            this.activeIndexChange.emit(selectedTabIndex);\n            this.onChange.emit({ originalEvent: event, index: selectedTabIndex });\n        }\n        if (event) {\n            event.preventDefault();\n        }\n    };\n    TabView.prototype.close = function (event, tab) {\n        var _this = this;\n        if (this.controlClose) {\n            this.onClose.emit({\n                originalEvent: event,\n                index: this.findTabIndex(tab),\n                close: function () {\n                    _this.closeTab(tab);\n                }\n            });\n        }\n        else {\n            this.closeTab(tab);\n            this.onClose.emit({\n                originalEvent: event,\n                index: this.findTabIndex(tab)\n            });\n        }\n        event.stopPropagation();\n    };\n    TabView.prototype.closeTab = function (tab) {\n        if (tab.disabled) {\n            return;\n        }\n        if (tab.selected) {\n            tab.selected = false;\n            for (var i = 0; i < this.tabs.length; i++) {\n                var tabPanel = this.tabs[i];\n                if (!tabPanel.closed && !tab.disabled) {\n                    tabPanel.selected = true;\n                    break;\n                }\n            }\n        }\n        tab.closed = true;\n    };\n    TabView.prototype.findSelectedTab = function () {\n        for (var i = 0; i < this.tabs.length; i++) {\n            if (this.tabs[i].selected) {\n                return this.tabs[i];\n            }\n        }\n        return null;\n    };\n    TabView.prototype.findTabIndex = function (tab) {\n        var index = -1;\n        for (var i = 0; i < this.tabs.length; i++) {\n            if (this.tabs[i] == tab) {\n                index = i;\n                break;\n            }\n        }\n        return index;\n    };\n    TabView.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Object.defineProperty(TabView.prototype, \"activeIndex\", {\n        get: function () {\n            return this._activeIndex;\n        },\n        set: function (val) {\n            this._activeIndex = val;\n            if (this.preventActiveIndexPropagation) {\n                this.preventActiveIndexPropagation = false;\n                return;\n            }\n            if (this.tabs && this.tabs.length && this._activeIndex != null && this.tabs.length > this._activeIndex) {\n                this.findSelectedTab().selected = false;\n                this.tabs[this._activeIndex].selected = true;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabView.prototype, \"orientation\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TabView.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabView.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabView.prototype, \"controlClose\", void 0);\n    __decorate([\n        core_1.ContentChildren(TabPanel),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], TabView.prototype, \"tabPanels\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabView.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabView.prototype, \"onClose\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabView.prototype, \"activeIndexChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], TabView.prototype, \"lazy\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], TabView.prototype, \"activeIndex\", null);\n    TabView = __decorate([\n        core_1.Component({\n            selector: 'p-tabView',\n            template: \"\\n        <div [ngClass]=\\\"'ui-tabview ui-widget ui-widget-content ui-corner-all ui-tabview-' + orientation\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ul p-tabViewNav role=\\\"tablist\\\" *ngIf=\\\"orientation!='bottom'\\\" [tabs]=\\\"tabs\\\" [orientation]=\\\"orientation\\\"\\n                (onTabClick)=\\\"open($event.originalEvent, $event.tab)\\\" (onTabCloseClick)=\\\"close($event.originalEvent, $event.tab)\\\"></ul>\\n            <div class=\\\"ui-tabview-panels\\\">\\n                <ng-content></ng-content>\\n            </div>\\n            <ul p-tabViewNav role=\\\"tablist\\\" *ngIf=\\\"orientation=='bottom'\\\" [tabs]=\\\"tabs\\\" [orientation]=\\\"orientation\\\"\\n                (onTabClick)=\\\"open($event.originalEvent, $event.tab)\\\" (onTabCloseClick)=\\\"close($event.originalEvent, $event.tab)\\\"></ul>\\n        </div>\\n    \",\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], TabView);\n    return TabView;\n}());\nexports.TabView = TabView;\nvar TabViewModule = /** @class */ (function () {\n    function TabViewModule() {\n    }\n    TabViewModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [TabView, TabPanel, TabViewNav, shared_1.SharedModule],\n            declarations: [TabView, TabPanel, TabViewNav]\n        })\n    ], TabViewModule);\n    return TabViewModule;\n}());\nexports.TabViewModule = TabViewModule;\n//# sourceMappingURL=tabview.js.map\n\n/***/ }),\n/* 782 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar router_1 = __webpack_require__(5);\nvar TabMenu = /** @class */ (function () {\n    function TabMenu() {\n    }\n    TabMenu.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        this.activeItem = item;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TabMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TabMenu.prototype, \"activeItem\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabMenu.prototype, \"popup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TabMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabMenu.prototype, \"styleClass\", void 0);\n    TabMenu = __decorate([\n        core_1.Component({\n            selector: 'p-tabMenu',\n            template: \"\\n        <div [ngClass]=\\\"'ui-tabmenu ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ul class=\\\"ui-tabmenu-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\\\" role=\\\"tablist\\\">\\n                <li *ngFor=\\\"let item of model\\\" \\n                    [ngClass]=\\\"{'ui-tabmenuitem ui-state-default ui-corner-top':true,'ui-state-disabled':item.disabled,\\n                        'ui-tabmenuitem-hasicon':item.icon,'ui-state-active':activeItem==item,'ui-helper-hidden': item.visible === false}\\\"\\n                        [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\">\\n                    <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" (click)=\\\"itemClick($event,item)\\\"\\n                        [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\">\\n                        <span class=\\\"ui-menuitem-icon fa\\\" [ngClass]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                    </a>\\n                    <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" (click)=\\\"itemClick($event,item)\\\"\\n                        [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\">\\n                        <span class=\\\"ui-menuitem-icon fa\\\" [ngClass]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                    </a>\\n                </li>\\n            </ul>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        })\n    ], TabMenu);\n    return TabMenu;\n}());\nexports.TabMenu = TabMenu;\nvar TabMenuModule = /** @class */ (function () {\n    function TabMenuModule() {\n    }\n    TabMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [TabMenu, router_1.RouterModule],\n            declarations: [TabMenu]\n        })\n    ], TabMenuModule);\n    return TabMenuModule;\n}());\nexports.TabMenuModule = TabMenuModule;\n//# sourceMappingURL=tabmenu.js.map\n\n/***/ }),\n/* 783 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar forms_1 = __webpack_require__(17);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar terminalservice_1 = __webpack_require__(784);\nvar Terminal = /** @class */ (function () {\n    function Terminal(el, domHandler, terminalService) {\n        var _this = this;\n        this.el = el;\n        this.domHandler = domHandler;\n        this.terminalService = terminalService;\n        this.commands = [];\n        this.subscription = terminalService.responseHandler.subscribe(function (response) {\n            _this.commands[_this.commands.length - 1].response = response;\n            _this.commandProcessed = true;\n        });\n    }\n    Terminal.prototype.ngAfterViewInit = function () {\n        this.container = this.domHandler.find(this.el.nativeElement, '.ui-terminal')[0];\n    };\n    Terminal.prototype.ngAfterViewChecked = function () {\n        if (this.commandProcessed) {\n            this.container.scrollTop = this.container.scrollHeight;\n            this.commandProcessed = false;\n        }\n    };\n    Object.defineProperty(Terminal.prototype, \"response\", {\n        set: function (value) {\n            if (value) {\n                this.commands[this.commands.length - 1].response = value;\n                this.commandProcessed = true;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Terminal.prototype.handleCommand = function (event) {\n        if (event.keyCode == 13) {\n            this.commands.push({ text: this.command });\n            this.terminalService.sendCommand(this.command);\n            this.command = '';\n        }\n    };\n    Terminal.prototype.focus = function (element) {\n        element.focus();\n    };\n    Terminal.prototype.ngOnDestroy = function () {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Terminal.prototype, \"welcomeMessage\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Terminal.prototype, \"prompt\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Terminal.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Terminal.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], Terminal.prototype, \"response\", null);\n    Terminal = __decorate([\n        core_1.Component({\n            selector: 'p-terminal',\n            template: \"\\n        <div [ngClass]=\\\"'ui-terminal ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" (click)=\\\"focus(in)\\\">\\n            <div *ngIf=\\\"welcomeMessage\\\">{{welcomeMessage}}</div>\\n            <div class=\\\"ui-terminal-content\\\">\\n                <div *ngFor=\\\"let command of commands\\\">\\n                    <span>{{prompt}}</span>\\n                    <span class=\\\"ui-terminal-command\\\">{{command.text}}</span>\\n                    <div>{{command.response}}</div>\\n                </div>\\n            </div>\\n            <div>\\n                <span class=\\\"ui-terminal-content-prompt\\\">{{prompt}}</span>\\n                <input #in type=\\\"text\\\" [(ngModel)]=\\\"command\\\" class=\\\"ui-terminal-input\\\" autocomplete=\\\"off\\\" (keydown)=\\\"handleCommand($event)\\\" autofocus>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, terminalservice_1.TerminalService])\n    ], Terminal);\n    return Terminal;\n}());\nexports.Terminal = Terminal;\nvar TerminalModule = /** @class */ (function () {\n    function TerminalModule() {\n    }\n    TerminalModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, forms_1.FormsModule],\n            exports: [Terminal],\n            declarations: [Terminal]\n        })\n    ], TerminalModule);\n    return TerminalModule;\n}());\nexports.TerminalModule = TerminalModule;\n//# sourceMappingURL=terminal.js.map\n\n/***/ }),\n/* 784 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar Subject_1 = __webpack_require__(23);\nvar TerminalService = /** @class */ (function () {\n    function TerminalService() {\n        this.commandSource = new Subject_1.Subject();\n        this.responseSource = new Subject_1.Subject();\n        this.commandHandler = this.commandSource.asObservable();\n        this.responseHandler = this.responseSource.asObservable();\n    }\n    TerminalService.prototype.sendCommand = function (command) {\n        if (command) {\n            this.commandSource.next(command);\n        }\n    };\n    TerminalService.prototype.sendResponse = function (response) {\n        if (response) {\n            this.responseSource.next(response);\n        }\n    };\n    TerminalService = __decorate([\n        core_1.Injectable()\n    ], TerminalService);\n    return TerminalService;\n}());\nexports.TerminalService = TerminalService;\n//# sourceMappingURL=terminalservice.js.map\n\n/***/ }),\n/* 785 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar domhandler_1 = __webpack_require__(9);\nvar router_1 = __webpack_require__(5);\nvar TieredMenuSub = /** @class */ (function () {\n    function TieredMenuSub(domHandler) {\n        this.domHandler = domHandler;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.hideDelay = 250;\n    }\n    TieredMenuSub.prototype.onItemMouseEnter = function (event, item, menuitem) {\n        if (menuitem.disabled) {\n            return;\n        }\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n        this.activeItem = item;\n        var nextElement = item.children[0].nextElementSibling;\n        if (nextElement) {\n            var sublist = nextElement.children[0];\n            if (this.autoZIndex) {\n                sublist.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n            }\n            sublist.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n            sublist.style.top = '0px';\n            sublist.style.left = this.domHandler.getOuterWidth(item.children[0]) + 'px';\n        }\n    };\n    TieredMenuSub.prototype.onItemMouseLeave = function (event) {\n        var _this = this;\n        this.hideTimeout = setTimeout(function () {\n            _this.activeItem = null;\n        }, this.hideDelay);\n    };\n    TieredMenuSub.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return true;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    };\n    TieredMenuSub.prototype.listClick = function (event) {\n        this.activeItem = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TieredMenuSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TieredMenuSub.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TieredMenuSub.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TieredMenuSub.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TieredMenuSub.prototype, \"hideDelay\", void 0);\n    TieredMenuSub = __decorate([\n        core_1.Component({\n            selector: 'p-tieredMenuSub',\n            template: \"\\n        <ul [ngClass]=\\\"{'ui-widget-content ui-corner-all ui-shadow ui-submenu-list': !root}\\\" (click)=\\\"listClick($event)\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"(root ? item : item.items)\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': child.visible === false}\\\">\\n                <li *ngIf=\\\"!child.separator\\\" #listItem [ngClass]=\\\"{'ui-menuitem ui-widget ui-corner-all':true,'ui-menuitem-active':listItem==activeItem,'ui-helper-hidden': child.visible === false}\\\"\\n                    [class]=\\\"child.styleClass\\\" [ngStyle]=\\\"child.style\\\"\\n                    (mouseenter)=\\\"onItemMouseEnter($event, listItem, child)\\\" (mouseleave)=\\\"onItemMouseLeave($event)\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" (click)=\\\"itemClick($event, child)\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" \\n                        [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\" [href]=\\\"child.url||'#'\\\" \\n                        class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" (click)=\\\"itemClick($event, child)\\\">\\n                        \\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                    </a>\\n                    <p-tieredMenuSub class=\\\"ui-submenu\\\" [item]=\\\"child\\\" *ngIf=\\\"child.items\\\" [baseZIndex]=\\\"baseZIndex\\\" [autoZIndex]=\\\"autoZIndex\\\" [hideDelay]=\\\"hideDelay\\\"></p-tieredMenuSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [domhandler_1.DomHandler])\n    ], TieredMenuSub);\n    return TieredMenuSub;\n}());\nexports.TieredMenuSub = TieredMenuSub;\nvar TieredMenu = /** @class */ (function () {\n    function TieredMenu(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.hideDelay = 250;\n    }\n    TieredMenu.prototype.ngAfterViewInit = function () {\n        this.container = this.el.nativeElement.children[0];\n        if (this.popup) {\n            if (this.appendTo) {\n                if (this.appendTo === 'body')\n                    document.body.appendChild(this.container);\n                else\n                    this.domHandler.appendChild(this.container, this.appendTo);\n            }\n        }\n    };\n    TieredMenu.prototype.toggle = function (event) {\n        if (this.container.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n    };\n    TieredMenu.prototype.show = function (event) {\n        this.preventDocumentDefault = true;\n        this.moveOnTop();\n        this.container.style.display = 'block';\n        this.domHandler.absolutePosition(this.container, event.currentTarget);\n        this.domHandler.fadeIn(this.container, 250);\n        this.bindDocumentClickListener();\n    };\n    TieredMenu.prototype.hide = function () {\n        this.container.style.display = 'none';\n        this.unbindDocumentClickListener();\n    };\n    TieredMenu.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.container.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    TieredMenu.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    TieredMenu.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.preventDocumentDefault) {\n                    _this.hide();\n                }\n                _this.preventDocumentDefault = false;\n            });\n        }\n    };\n    TieredMenu.prototype.ngOnDestroy = function () {\n        if (this.popup) {\n            if (this.documentClickListener) {\n                this.unbindDocumentClickListener();\n            }\n            if (this.appendTo) {\n                this.el.nativeElement.appendChild(this.container);\n            }\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TieredMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TieredMenu.prototype, \"popup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TieredMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TieredMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TieredMenu.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TieredMenu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TieredMenu.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TieredMenu.prototype, \"hideDelay\", void 0);\n    TieredMenu = __decorate([\n        core_1.Component({\n            selector: 'p-tieredMenu',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-tieredmenu ui-widget ui-widget-content ui-corner-all':true, 'ui-tieredmenu-dynamic ui-shadow':popup}\\\" \\n            [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\">\\n            <p-tieredMenuSub [item]=\\\"model\\\" root=\\\"root\\\" [baseZIndex]=\\\"baseZIndex\\\" [autoZIndex]=\\\"autoZIndex\\\" [hideDelay]=\\\"hideDelay\\\"></p-tieredMenuSub>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], TieredMenu);\n    return TieredMenu;\n}());\nexports.TieredMenu = TieredMenu;\nvar TieredMenuModule = /** @class */ (function () {\n    function TieredMenuModule() {\n    }\n    TieredMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [TieredMenu, router_1.RouterModule],\n            declarations: [TieredMenu, TieredMenuSub]\n        })\n    ], TieredMenuModule);\n    return TieredMenuModule;\n}());\nexports.TieredMenuModule = TieredMenuModule;\n//# sourceMappingURL=tieredmenu.js.map\n\n/***/ }),\n/* 786 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar forms_1 = __webpack_require__(17);\nexports.TOGGLEBUTTON_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return ToggleButton; }),\n    multi: true\n};\nvar ToggleButton = /** @class */ (function () {\n    function ToggleButton() {\n        this.onLabel = 'Yes';\n        this.offLabel = 'No';\n        this.onChange = new core_1.EventEmitter();\n        this.checked = false;\n        this.focus = false;\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    ToggleButton.prototype.ngAfterViewInit = function () {\n        this.checkbox = this.checkboxViewChild.nativeElement;\n    };\n    ToggleButton.prototype.getIconClass = function () {\n        var baseClass = 'ui-button-icon-left ui-togglebutton-icon fa fa-fw';\n        return baseClass + ' ' + (this.checked ? this.onIcon : this.offIcon);\n    };\n    ToggleButton.prototype.toggle = function (event) {\n        if (!this.disabled) {\n            this.checked = !this.checked;\n            this.onModelChange(this.checked);\n            this.onModelTouched();\n            this.onChange.emit({\n                originalEvent: event,\n                checked: this.checked\n            });\n            this.checkbox.focus();\n        }\n    };\n    ToggleButton.prototype.onFocus = function () {\n        this.focus = true;\n    };\n    ToggleButton.prototype.onBlur = function () {\n        this.focus = false;\n        this.onModelTouched();\n    };\n    ToggleButton.prototype.writeValue = function (value) {\n        this.checked = value;\n    };\n    ToggleButton.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    ToggleButton.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    ToggleButton.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Object.defineProperty(ToggleButton.prototype, \"hasOnLabel\", {\n        get: function () {\n            return this.onLabel && this.onLabel.length > 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ToggleButton.prototype, \"hasOffLabel\", {\n        get: function () {\n            return this.onLabel && this.onLabel.length > 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"onLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"offLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"onIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"offIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ToggleButton.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ToggleButton.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], ToggleButton.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], ToggleButton.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.ViewChild('checkbox'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ToggleButton.prototype, \"checkboxViewChild\", void 0);\n    ToggleButton = __decorate([\n        core_1.Component({\n            selector: 'p-toggleButton',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-button ui-togglebutton ui-widget ui-state-default ui-corner-all': true, 'ui-button-text-only': (!onIcon&&!offIcon), \\n                'ui-button-text-icon-left': (onIcon&&offIcon&&hasOnLabel&&hasOffLabel), 'ui-button-icon-only': (onIcon&&offIcon&&!hasOnLabel&&!hasOffLabel),\\n                'ui-state-active': checked,'ui-state-focus':focus,'ui-state-disabled':disabled}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" \\n                (click)=\\\"toggle($event)\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #checkbox type=\\\"checkbox\\\" [attr.id]=\\\"inputId\\\" [checked]=\\\"checked\\\" (focus)=\\\"onFocus()\\\" (blur)=\\\"onBlur()\\\" [attr.tabindex]=\\\"tabindex\\\">\\n            </div>\\n            <span *ngIf=\\\"onIcon||offIcon\\\" [class]=\\\"getIconClass()\\\"></span>\\n            <span class=\\\"ui-button-text ui-unselectable-text\\\">{{checked ? hasOnLabel ? onLabel : 'ui-btn' : hasOffLabel ? offLabel : 'ui-btn'}}</span>\\n        </div>\\n    \",\n            providers: [exports.TOGGLEBUTTON_VALUE_ACCESSOR]\n        })\n    ], ToggleButton);\n    return ToggleButton;\n}());\nexports.ToggleButton = ToggleButton;\nvar ToggleButtonModule = /** @class */ (function () {\n    function ToggleButtonModule() {\n    }\n    ToggleButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ToggleButton],\n            declarations: [ToggleButton]\n        })\n    ], ToggleButtonModule);\n    return ToggleButtonModule;\n}());\nexports.ToggleButtonModule = ToggleButtonModule;\n//# sourceMappingURL=togglebutton.js.map\n\n/***/ }),\n/* 787 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar Toolbar = /** @class */ (function () {\n    function Toolbar(el) {\n        this.el = el;\n    }\n    Toolbar.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Toolbar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Toolbar.prototype, \"styleClass\", void 0);\n    Toolbar = __decorate([\n        core_1.Component({\n            selector: 'p-toolbar',\n            template: \"\\n        <div [ngClass]=\\\"'ui-toolbar ui-widget ui-widget-header ui-corner-all ui-helper-clearfix'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ng-content></ng-content>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], Toolbar);\n    return Toolbar;\n}());\nexports.Toolbar = Toolbar;\nvar ToolbarModule = /** @class */ (function () {\n    function ToolbarModule() {\n    }\n    ToolbarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Toolbar],\n            declarations: [Toolbar]\n        })\n    ], ToolbarModule);\n    return ToolbarModule;\n}());\nexports.ToolbarModule = ToolbarModule;\n//# sourceMappingURL=toolbar.js.map\n\n/***/ }),\n/* 788 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar core_2 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar shared_2 = __webpack_require__(15);\nvar treedragdropservice_1 = __webpack_require__(230);\nvar UITreeNode = /** @class */ (function () {\n    function UITreeNode(tree) {\n        this.tree = tree;\n    }\n    UITreeNode_1 = UITreeNode;\n    UITreeNode.prototype.ngOnInit = function () {\n        this.node.parent = this.parentNode;\n    };\n    UITreeNode.prototype.getIcon = function () {\n        var icon;\n        if (this.node.icon)\n            icon = this.node.icon;\n        else\n            icon = this.node.expanded && this.node.children && this.node.children.length ? this.node.expandedIcon : this.node.collapsedIcon;\n        return UITreeNode_1.ICON_CLASS + ' ' + icon;\n    };\n    UITreeNode.prototype.isLeaf = function () {\n        return this.node.leaf == false ? false : !(this.node.children && this.node.children.length);\n    };\n    UITreeNode.prototype.toggle = function (event) {\n        if (this.node.expanded)\n            this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });\n        else\n            this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });\n        this.node.expanded = !this.node.expanded;\n    };\n    UITreeNode.prototype.onNodeClick = function (event) {\n        this.tree.onNodeClick(event, this.node);\n    };\n    UITreeNode.prototype.onNodeTouchEnd = function () {\n        this.tree.onNodeTouchEnd();\n    };\n    UITreeNode.prototype.onNodeRightClick = function (event) {\n        this.tree.onNodeRightClick(event, this.node);\n    };\n    UITreeNode.prototype.isSelected = function () {\n        return this.tree.isSelected(this.node);\n    };\n    UITreeNode.prototype.onDropPoint = function (event, position) {\n        event.preventDefault();\n        var dragNode = this.tree.dragNode;\n        var dragNodeIndex = this.tree.dragNodeIndex;\n        var dragNodeScope = this.tree.dragNodeScope;\n        var isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? (position === 1 || dragNodeIndex !== this.index - 1) : true;\n        if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {\n            var newNodeList = this.node.parent ? this.node.parent.children : this.tree.value;\n            this.tree.dragNodeSubNodes.splice(dragNodeIndex, 1);\n            var dropIndex = this.index;\n            if (position < 0) {\n                dropIndex = (this.tree.dragNodeSubNodes === newNodeList) ? ((this.tree.dragNodeIndex > this.index) ? this.index : this.index - 1) : this.index;\n                newNodeList.splice(dropIndex, 0, dragNode);\n            }\n            else {\n                dropIndex = newNodeList.length;\n                newNodeList.push(dragNode);\n            }\n            this.tree.dragDropService.stopDrag({\n                node: dragNode,\n                subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n                index: dragNodeIndex\n            });\n            this.tree.onNodeDrop.emit({\n                originalEvent: event,\n                dragNode: dragNode,\n                dropNode: this.node,\n                dropIndex: dropIndex\n            });\n        }\n        this.draghoverPrev = false;\n        this.draghoverNext = false;\n    };\n    UITreeNode.prototype.onDropPointDragOver = function (event) {\n        event.dataTransfer.dropEffect = 'move';\n        event.preventDefault();\n    };\n    UITreeNode.prototype.onDropPointDragEnter = function (event, position) {\n        if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {\n            if (position < 0)\n                this.draghoverPrev = true;\n            else\n                this.draghoverNext = true;\n        }\n    };\n    UITreeNode.prototype.onDropPointDragLeave = function (event) {\n        this.draghoverPrev = false;\n        this.draghoverNext = false;\n    };\n    UITreeNode.prototype.onDragStart = function (event) {\n        if (this.tree.draggableNodes && this.node.draggable !== false) {\n            event.dataTransfer.setData(\"text\", \"data\");\n            this.tree.dragDropService.startDrag({\n                tree: this,\n                node: this.node,\n                subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n                index: this.index,\n                scope: this.tree.draggableScope\n            });\n        }\n        else {\n            event.preventDefault();\n        }\n    };\n    UITreeNode.prototype.onDragStop = function (event) {\n        this.tree.dragDropService.stopDrag({\n            node: this.node,\n            subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n            index: this.index\n        });\n    };\n    UITreeNode.prototype.onDropNodeDragOver = function (event) {\n        event.dataTransfer.dropEffect = 'move';\n        if (this.tree.droppableNodes) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    };\n    UITreeNode.prototype.onDropNode = function (event) {\n        if (this.tree.droppableNodes && this.node.droppable !== false) {\n            event.preventDefault();\n            event.stopPropagation();\n            var dragNode = this.tree.dragNode;\n            if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {\n                var dragNodeIndex = this.tree.dragNodeIndex;\n                this.tree.dragNodeSubNodes.splice(dragNodeIndex, 1);\n                if (this.node.children)\n                    this.node.children.push(dragNode);\n                else\n                    this.node.children = [dragNode];\n                this.tree.dragDropService.stopDrag({\n                    node: dragNode,\n                    subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n                    index: this.tree.dragNodeIndex\n                });\n                this.tree.onNodeDrop.emit({\n                    originalEvent: event,\n                    dragNode: dragNode,\n                    dropNode: this.node,\n                    index: this.index\n                });\n            }\n        }\n        this.draghoverNode = false;\n    };\n    UITreeNode.prototype.onDropNodeDragEnter = function (event) {\n        if (this.tree.droppableNodes && this.node.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {\n            this.draghoverNode = true;\n        }\n    };\n    UITreeNode.prototype.onDropNodeDragLeave = function (event) {\n        if (this.tree.droppableNodes) {\n            var rect = event.currentTarget.getBoundingClientRect();\n            if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {\n                this.draghoverNode = false;\n            }\n        }\n    };\n    UITreeNode.ICON_CLASS = 'ui-treenode-icon fa fa-fw';\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UITreeNode.prototype, \"node\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UITreeNode.prototype, \"parentNode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], UITreeNode.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], UITreeNode.prototype, \"index\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], UITreeNode.prototype, \"firstChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], UITreeNode.prototype, \"lastChild\", void 0);\n    UITreeNode = UITreeNode_1 = __decorate([\n        core_1.Component({\n            selector: 'p-treeNode',\n            template: \"\\n        <ng-template [ngIf]=\\\"node\\\">\\n            <li *ngIf=\\\"tree.droppableNodes\\\" class=\\\"ui-treenode-droppoint\\\" [ngClass]=\\\"{'ui-treenode-droppoint-active ui-state-highlight':draghoverPrev}\\\"\\n            (drop)=\\\"onDropPoint($event,-1)\\\" (dragover)=\\\"onDropPointDragOver($event)\\\" (dragenter)=\\\"onDropPointDragEnter($event,-1)\\\" (dragleave)=\\\"onDropPointDragLeave($event)\\\"></li>\\n            <li *ngIf=\\\"!tree.horizontal\\\" [ngClass]=\\\"['ui-treenode',node.styleClass||'', isLeaf() ? 'ui-treenode-leaf': '']\\\">\\n                <div class=\\\"ui-treenode-content\\\" (click)=\\\"onNodeClick($event)\\\" (contextmenu)=\\\"onNodeRightClick($event)\\\" (touchend)=\\\"onNodeTouchEnd()\\\"\\n                    (drop)=\\\"onDropNode($event)\\\" (dragover)=\\\"onDropNodeDragOver($event)\\\" (dragenter)=\\\"onDropNodeDragEnter($event)\\\" (dragleave)=\\\"onDropNodeDragLeave($event)\\\"\\n                    [ngClass]=\\\"{'ui-treenode-selectable':tree.selectionMode && node.selectable !== false,'ui-treenode-dragover':draghoverNode, 'ui-treenode-content-selected':isSelected()}\\\" [draggable]=\\\"tree.draggableNodes\\\" (dragstart)=\\\"onDragStart($event)\\\" (dragend)=\\\"onDragStop($event)\\\">\\n                    <span class=\\\"ui-tree-toggler  fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!node.expanded,'fa-caret-down':node.expanded}\\\"\\n                            (click)=\\\"toggle($event)\\\"></span\\n                    ><div class=\\\"ui-chkbox\\\" *ngIf=\\\"tree.selectionMode == 'checkbox'\\\"><div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\">\\n                        <span class=\\\"ui-chkbox-icon ui-clickable fa\\\" \\n                            [ngClass]=\\\"{'fa-check':isSelected(),'fa-minus':node.partialSelected}\\\"></span></div></div\\n                    ><span [class]=\\\"getIcon()\\\" *ngIf=\\\"node.icon||node.expandedIcon||node.collapsedIcon\\\"></span\\n                    ><span class=\\\"ui-treenode-label ui-corner-all\\\" \\n                        [ngClass]=\\\"{'ui-state-highlight':isSelected()}\\\">\\n                            <span *ngIf=\\\"!tree.getTemplateForNode(node)\\\">{{node.label}}</span>\\n                            <span *ngIf=\\\"tree.getTemplateForNode(node)\\\">\\n                                <ng-container *ngTemplateOutlet=\\\"tree.getTemplateForNode(node); context: {$implicit: node}\\\"></ng-container>\\n                            </span>\\n                    </span>\\n                </div>\\n                <ul class=\\\"ui-treenode-children\\\" style=\\\"display: none;\\\" *ngIf=\\\"node.children && node.expanded\\\" [style.display]=\\\"node.expanded ? 'block' : 'none'\\\">\\n                    <p-treeNode *ngFor=\\\"let childNode of node.children;let firstChild=first;let lastChild=last; let index=index\\\" [node]=\\\"childNode\\\" [parentNode]=\\\"node\\\"\\n                        [firstChild]=\\\"firstChild\\\" [lastChild]=\\\"lastChild\\\" [index]=\\\"index\\\"></p-treeNode>\\n                </ul>\\n            </li>\\n            <li *ngIf=\\\"tree.droppableNodes&&lastChild\\\" class=\\\"ui-treenode-droppoint\\\" [ngClass]=\\\"{'ui-treenode-droppoint-active ui-state-highlight':draghoverNext}\\\"\\n            (drop)=\\\"onDropPoint($event,1)\\\" (dragover)=\\\"onDropPointDragOver($event)\\\" (dragenter)=\\\"onDropPointDragEnter($event,1)\\\" (dragleave)=\\\"onDropPointDragLeave($event)\\\"></li>\\n            <table *ngIf=\\\"tree.horizontal\\\" [class]=\\\"node.styleClass\\\">\\n                <tbody>\\n                    <tr>\\n                        <td class=\\\"ui-treenode-connector\\\" *ngIf=\\\"!root\\\">\\n                            <table class=\\\"ui-treenode-connector-table\\\">\\n                                <tbody>\\n                                    <tr>\\n                                        <td [ngClass]=\\\"{'ui-treenode-connector-line':!firstChild}\\\"></td>\\n                                    </tr>\\n                                    <tr>\\n                                        <td [ngClass]=\\\"{'ui-treenode-connector-line':!lastChild}\\\"></td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </td>\\n                        <td class=\\\"ui-treenode\\\" [ngClass]=\\\"{'ui-treenode-collapsed':!node.expanded}\\\">\\n                            <div class=\\\"ui-treenode-content ui-state-default ui-corner-all\\\" \\n                                [ngClass]=\\\"{'ui-treenode-selectable':tree.selectionMode,'ui-state-highlight':isSelected()}\\\" (click)=\\\"onNodeClick($event)\\\" (contextmenu)=\\\"onNodeRightClick($event)\\\"\\n                                (touchend)=\\\"onNodeTouchEnd()\\\">\\n                                <span class=\\\"ui-tree-toggler fa fa-fw\\\" [ngClass]=\\\"{'fa-plus':!node.expanded,'fa-minus':node.expanded}\\\" *ngIf=\\\"!isLeaf()\\\"\\n                                        (click)=\\\"toggle($event)\\\"></span\\n                                ><span [class]=\\\"getIcon()\\\" *ngIf=\\\"node.icon||node.expandedIcon||node.collapsedIcon\\\"></span\\n                                ><span class=\\\"ui-treenode-label ui-corner-all\\\">\\n                                        <span *ngIf=\\\"!tree.getTemplateForNode(node)\\\">{{node.label}}</span>\\n                                        <span *ngIf=\\\"tree.getTemplateForNode(node)\\\">\\n                                        <ng-container *ngTemplateOutlet=\\\"tree.getTemplateForNode(node); context: {$implicit: node}\\\"></ng-container>\\n                                        </span>\\n                                </span>\\n                            </div>\\n                        </td>\\n                        <td class=\\\"ui-treenode-children-container\\\" *ngIf=\\\"node.children && node.expanded\\\" [style.display]=\\\"node.expanded ? 'table-cell' : 'none'\\\">\\n                            <div class=\\\"ui-treenode-children\\\">\\n                                <p-treeNode *ngFor=\\\"let childNode of node.children;let firstChild=first;let lastChild=last;\\\" [node]=\\\"childNode\\\" \\n                                        [firstChild]=\\\"firstChild\\\" [lastChild]=\\\"lastChild\\\"></p-treeNode>\\n                            </div>\\n                        </td>\\n                    </tr>\\n                </tbody>\\n            </table>\\n        </ng-template>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return Tree; }))),\n        __metadata(\"design:paramtypes\", [Tree])\n    ], UITreeNode);\n    return UITreeNode;\n    var UITreeNode_1;\n}());\nexports.UITreeNode = UITreeNode;\nvar Tree = /** @class */ (function () {\n    function Tree(el, dragDropService) {\n        this.el = el;\n        this.dragDropService = dragDropService;\n        this.selectionChange = new core_1.EventEmitter();\n        this.onNodeSelect = new core_1.EventEmitter();\n        this.onNodeUnselect = new core_1.EventEmitter();\n        this.onNodeExpand = new core_1.EventEmitter();\n        this.onNodeCollapse = new core_1.EventEmitter();\n        this.onNodeContextMenuSelect = new core_1.EventEmitter();\n        this.onNodeDrop = new core_1.EventEmitter();\n        this.layout = 'vertical';\n        this.metaKeySelection = true;\n        this.propagateSelectionUp = true;\n        this.propagateSelectionDown = true;\n        this.loadingIcon = 'fa-circle-o-notch';\n        this.emptyMessage = 'No records found';\n    }\n    Tree.prototype.ngOnInit = function () {\n        var _this = this;\n        if (this.droppableNodes) {\n            this.dragStartSubscription = this.dragDropService.dragStart$.subscribe(function (event) {\n                _this.dragNodeTree = event.tree;\n                _this.dragNode = event.node;\n                _this.dragNodeSubNodes = event.subNodes;\n                _this.dragNodeIndex = event.index;\n                _this.dragNodeScope = event.scope;\n            });\n            this.dragStopSubscription = this.dragDropService.dragStop$.subscribe(function (event) {\n                _this.dragNodeTree = null;\n                _this.dragNode = null;\n                _this.dragNodeSubNodes = null;\n                _this.dragNodeIndex = null;\n                _this.dragNodeScope = null;\n                _this.dragHover = false;\n            });\n        }\n    };\n    Object.defineProperty(Tree.prototype, \"horizontal\", {\n        get: function () {\n            return this.layout == 'horizontal';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Tree.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        if (this.templates.length) {\n            this.templateMap = {};\n        }\n        this.templates.forEach(function (item) {\n            _this.templateMap[item.name] = item.template;\n        });\n    };\n    Tree.prototype.onNodeClick = function (event, node) {\n        var eventTarget = event.target;\n        if (eventTarget.className && eventTarget.className.indexOf('ui-tree-toggler') === 0) {\n            return;\n        }\n        else if (this.selectionMode) {\n            if (node.selectable === false) {\n                return;\n            }\n            var index_1 = this.findIndexInSelection(node);\n            var selected = (index_1 >= 0);\n            if (this.isCheckboxSelectionMode()) {\n                if (selected) {\n                    if (this.propagateSelectionDown)\n                        this.propagateDown(node, false);\n                    else\n                        this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                    if (this.propagateSelectionUp && node.parent) {\n                        this.propagateUp(node.parent, false);\n                    }\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                }\n                else {\n                    if (this.propagateSelectionDown)\n                        this.propagateDown(node, true);\n                    else\n                        this.selection = (this.selection || []).concat([node]);\n                    if (this.propagateSelectionUp && node.parent) {\n                        this.propagateUp(node.parent, true);\n                    }\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            }\n            else {\n                var metaSelection = this.nodeTouched ? false : this.metaKeySelection;\n                if (metaSelection) {\n                    var metaKey = (event.metaKey || event.ctrlKey);\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(null);\n                        }\n                        else {\n                            this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                            this.selectionChange.emit(this.selection);\n                        }\n                        this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                    }\n                    else {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(node);\n                        }\n                        else if (this.isMultipleSelectionMode()) {\n                            this.selection = (!metaKey) ? [] : this.selection || [];\n                            this.selection = this.selection.concat([node]);\n                            this.selectionChange.emit(this.selection);\n                        }\n                        this.onNodeSelect.emit({ originalEvent: event, node: node });\n                    }\n                }\n                else {\n                    if (this.isSingleSelectionMode()) {\n                        if (selected) {\n                            this.selection = null;\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        }\n                        else {\n                            this.selection = node;\n                            this.onNodeSelect.emit({ originalEvent: event, node: node });\n                        }\n                    }\n                    else {\n                        if (selected) {\n                            this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        }\n                        else {\n                            this.selection = (this.selection || []).concat([node]);\n                            this.onNodeSelect.emit({ originalEvent: event, node: node });\n                        }\n                    }\n                    this.selectionChange.emit(this.selection);\n                }\n            }\n        }\n        this.nodeTouched = false;\n    };\n    Tree.prototype.onNodeTouchEnd = function () {\n        this.nodeTouched = true;\n    };\n    Tree.prototype.onNodeRightClick = function (event, node) {\n        if (this.contextMenu) {\n            var eventTarget = event.target;\n            if (eventTarget.className && eventTarget.className.indexOf('ui-tree-toggler') === 0) {\n                return;\n            }\n            else {\n                var index = this.findIndexInSelection(node);\n                var selected = (index >= 0);\n                if (!selected) {\n                    if (this.isSingleSelectionMode())\n                        this.selectionChange.emit(node);\n                    else\n                        this.selectionChange.emit([node]);\n                }\n                this.contextMenu.show(event);\n                this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });\n            }\n        }\n    };\n    Tree.prototype.findIndexInSelection = function (node) {\n        var index = -1;\n        if (this.selectionMode && this.selection) {\n            if (this.isSingleSelectionMode()) {\n                index = (this.selection == node) ? 0 : -1;\n            }\n            else {\n                for (var i = 0; i < this.selection.length; i++) {\n                    if (this.selection[i] == node) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n        return index;\n    };\n    Tree.prototype.propagateUp = function (node, select) {\n        if (node.children && node.children.length) {\n            var selectedCount = 0;\n            var childPartialSelected = false;\n            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                if (this.isSelected(child)) {\n                    selectedCount++;\n                }\n                else if (child.partialSelected) {\n                    childPartialSelected = true;\n                }\n            }\n            if (select && selectedCount == node.children.length) {\n                this.selection = (this.selection || []).concat([node]);\n                node.partialSelected = false;\n            }\n            else {\n                if (!select) {\n                    var index_2 = this.findIndexInSelection(node);\n                    if (index_2 >= 0) {\n                        this.selection = this.selection.filter(function (val, i) { return i != index_2; });\n                    }\n                }\n                if (childPartialSelected || selectedCount > 0 && selectedCount != node.children.length)\n                    node.partialSelected = true;\n                else\n                    node.partialSelected = false;\n            }\n        }\n        var parent = node.parent;\n        if (parent) {\n            this.propagateUp(parent, select);\n        }\n    };\n    Tree.prototype.propagateDown = function (node, select) {\n        var index = this.findIndexInSelection(node);\n        if (select && index == -1) {\n            this.selection = (this.selection || []).concat([node]);\n        }\n        else if (!select && index > -1) {\n            this.selection = this.selection.filter(function (val, i) { return i != index; });\n        }\n        node.partialSelected = false;\n        if (node.children && node.children.length) {\n            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                this.propagateDown(child, select);\n            }\n        }\n    };\n    Tree.prototype.isSelected = function (node) {\n        return this.findIndexInSelection(node) != -1;\n    };\n    Tree.prototype.isSingleSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'single';\n    };\n    Tree.prototype.isMultipleSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'multiple';\n    };\n    Tree.prototype.isCheckboxSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'checkbox';\n    };\n    Tree.prototype.getTemplateForNode = function (node) {\n        if (this.templateMap)\n            return node.type ? this.templateMap[node.type] : this.templateMap['default'];\n        else\n            return null;\n    };\n    Tree.prototype.onDragOver = function (event) {\n        if (this.droppableNodes && (!this.value || this.value.length === 0)) {\n            event.dataTransfer.dropEffect = 'move';\n            event.preventDefault();\n        }\n    };\n    Tree.prototype.onDrop = function (event) {\n        if (this.droppableNodes && (!this.value || this.value.length === 0)) {\n            event.preventDefault();\n            var dragNode = this.dragNode;\n            if (this.allowDrop(dragNode, null, this.dragNodeScope)) {\n                var dragNodeIndex = this.dragNodeIndex;\n                this.dragNodeSubNodes.splice(dragNodeIndex, 1);\n                this.value = this.value || [];\n                this.value.push(dragNode);\n                this.dragDropService.stopDrag({\n                    node: dragNode\n                });\n            }\n        }\n    };\n    Tree.prototype.onDragEnter = function (event) {\n        if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {\n            this.dragHover = true;\n        }\n    };\n    Tree.prototype.onDragLeave = function (event) {\n        if (this.droppableNodes) {\n            var rect = event.currentTarget.getBoundingClientRect();\n            if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {\n                this.dragHover = false;\n            }\n        }\n    };\n    Tree.prototype.allowDrop = function (dragNode, dropNode, dragNodeScope) {\n        if (!dragNode) {\n            //prevent random html elements to be dragged\n            return false;\n        }\n        else if (this.isValidDragScope(dragNodeScope)) {\n            var allow = true;\n            if (dropNode) {\n                if (dragNode === dropNode) {\n                    allow = false;\n                }\n                else {\n                    var parent_1 = dropNode.parent;\n                    while (parent_1 != null) {\n                        if (parent_1 === dragNode) {\n                            allow = false;\n                            break;\n                        }\n                        parent_1 = parent_1.parent;\n                    }\n                }\n            }\n            return allow;\n        }\n        else {\n            return false;\n        }\n    };\n    Tree.prototype.isValidDragScope = function (dragScope) {\n        var dropScope = this.droppableScope;\n        if (dropScope) {\n            if (typeof dropScope === 'string') {\n                if (typeof dragScope === 'string')\n                    return dropScope === dragScope;\n                else if (dragScope instanceof Array)\n                    return dragScope.indexOf(dropScope) != -1;\n            }\n            else if (dropScope instanceof Array) {\n                if (typeof dragScope === 'string') {\n                    return dropScope.indexOf(dragScope) != -1;\n                }\n                else if (dragScope instanceof Array) {\n                    for (var _i = 0, dropScope_1 = dropScope; _i < dropScope_1.length; _i++) {\n                        var s = dropScope_1[_i];\n                        for (var _a = 0, dragScope_1 = dragScope; _a < dragScope_1.length; _a++) {\n                            var ds = dragScope_1[_a];\n                            if (s === ds) {\n                                return true;\n                            }\n                        }\n                    }\n                }\n            }\n            return false;\n        }\n        else {\n            return true;\n        }\n    };\n    Tree.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Tree.prototype.ngOnDestroy = function () {\n        if (this.dragStartSubscription) {\n            this.dragStartSubscription.unsubscribe();\n        }\n        if (this.dragStopSubscription) {\n            this.dragStopSubscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Tree.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"selection\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"selectionChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeUnselect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeExpand\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeCollapse\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeContextMenuSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeDrop\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"contextMenu\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"layout\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"draggableScope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"droppableScope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"draggableNodes\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"droppableNodes\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"propagateSelectionUp\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"propagateSelectionDown\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"loading\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"loadingIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Tree.prototype, \"templates\", void 0);\n    Tree = __decorate([\n        core_1.Component({\n            selector: 'p-tree',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-tree ui-widget ui-widget-content ui-corner-all':true,'ui-tree-selectable':selectionMode,'ui-treenode-dragover':dragHover,'ui-tree-loading': loading}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"!horizontal\\\"\\n            (drop)=\\\"onDrop($event)\\\" (dragover)=\\\"onDragOver($event)\\\" (dragenter)=\\\"onDragEnter($event)\\\" (dragleave)=\\\"onDragLeave($event)\\\">\\n            <div class=\\\"ui-tree-loading-mask ui-widget-overlay\\\" *ngIf=\\\"loading\\\"></div>\\n            <div class=\\\"ui-tree-loading-content\\\" *ngIf=\\\"loading\\\">\\n                <i [class]=\\\"'fa fa-spin fa-2x ' + loadingIcon\\\"></i>\\n            </div>\\n            <ul class=\\\"ui-tree-container\\\" *ngIf=\\\"value\\\">\\n                <p-treeNode *ngFor=\\\"let node of value;let firstChild=first;let lastChild=last; let index=index\\\" [node]=\\\"node\\\" \\n                [firstChild]=\\\"firstChild\\\" [lastChild]=\\\"lastChild\\\" [index]=\\\"index\\\"></p-treeNode>\\n            </ul>\\n            <div class=\\\"ui-tree-empty-message\\\" *ngIf=\\\"!loading && !value\\\">{{emptyMessage}}</div>\\n        </div>\\n        <div [ngClass]=\\\"{'ui-tree ui-tree-horizontal ui-widget ui-widget-content ui-corner-all':true,'ui-tree-selectable':selectionMode}\\\"  [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"horizontal\\\">\\n            <div class=\\\"ui-tree-loading ui-widget-overlay\\\" *ngIf=\\\"loading\\\"></div>\\n            <div class=\\\"ui-tree-loading-content\\\" *ngIf=\\\"loading\\\">\\n                <i [class]=\\\"'fa fa-spin fa-2x ' + loadingIcon\\\"></i>\\n            </div>\\n            <table *ngIf=\\\"value&&value[0]\\\">\\n                <p-treeNode [node]=\\\"value[0]\\\" [root]=\\\"true\\\"></p-treeNode>\\n            </table>\\n            <div class=\\\"ui-tree-empty-message\\\" *ngIf=\\\"!loading && !value\\\">{{emptyMessage}}</div>\\n        </div>\\n    \"\n        }),\n        __param(1, core_2.Optional()),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, treedragdropservice_1.TreeDragDropService])\n    ], Tree);\n    return Tree;\n}());\nexports.Tree = Tree;\nvar TreeModule = /** @class */ (function () {\n    function TreeModule() {\n    }\n    TreeModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Tree, shared_1.SharedModule],\n            declarations: [Tree, UITreeNode]\n        })\n    ], TreeModule);\n    return TreeModule;\n}());\nexports.TreeModule = TreeModule;\n//# sourceMappingURL=tree.js.map\n\n/***/ }),\n/* 789 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar shared_1 = __webpack_require__(15);\nvar shared_2 = __webpack_require__(15);\nvar domhandler_1 = __webpack_require__(9);\nvar UITreeRow = /** @class */ (function () {\n    function UITreeRow(treeTable) {\n        this.treeTable = treeTable;\n        this.level = 0;\n        this.labelExpand = \"Expand\";\n        this.labelCollapse = \"Collapse\";\n    }\n    UITreeRow.prototype.ngOnInit = function () {\n        this.node.parent = this.parentNode;\n    };\n    UITreeRow.prototype.toggle = function (event) {\n        if (this.node.expanded)\n            this.treeTable.onNodeCollapse.emit({ originalEvent: event, node: this.node });\n        else\n            this.treeTable.onNodeExpand.emit({ originalEvent: event, node: this.node });\n        this.node.expanded = !this.node.expanded;\n        event.preventDefault();\n    };\n    UITreeRow.prototype.isLeaf = function () {\n        return this.node.leaf == false ? false : !(this.node.children && this.node.children.length);\n    };\n    UITreeRow.prototype.isSelected = function () {\n        return this.treeTable.isSelected(this.node);\n    };\n    UITreeRow.prototype.onRowClick = function (event) {\n        this.treeTable.onRowClick(event, this.node);\n    };\n    UITreeRow.prototype.onRowRightClick = function (event) {\n        this.treeTable.onRowRightClick(event, this.node);\n    };\n    UITreeRow.prototype.rowDblClick = function (event) {\n        this.treeTable.onRowDblclick.emit({ originalEvent: event, node: this.node });\n    };\n    UITreeRow.prototype.onRowTouchEnd = function () {\n        this.treeTable.onRowTouchEnd();\n    };\n    UITreeRow.prototype.resolveFieldData = function (data, field) {\n        if (data && field) {\n            if (field.indexOf('.') == -1) {\n                return data[field];\n            }\n            else {\n                var fields = field.split('.');\n                var value = data;\n                for (var i = 0, len = fields.length; i < len; ++i) {\n                    value = value[fields[i]];\n                }\n                return value;\n            }\n        }\n        else {\n            return null;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UITreeRow.prototype, \"node\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UITreeRow.prototype, \"parentNode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], UITreeRow.prototype, \"level\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UITreeRow.prototype, \"labelExpand\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UITreeRow.prototype, \"labelCollapse\", void 0);\n    UITreeRow = __decorate([\n        core_1.Component({\n            selector: '[pTreeRow]',\n            template: \"\\n        <div [class]=\\\"node.styleClass\\\" [ngClass]=\\\"{'ui-treetable-row': true, 'ui-state-highlight':isSelected(),'ui-treetable-row-selectable':treeTable.selectionMode && node.selectable !== false}\\\">\\n            <td *ngFor=\\\"let col of treeTable.columns; let i=index\\\" [ngStyle]=\\\"col.bodyStyle||col.style\\\" [class]=\\\"col.bodyStyleClass||col.styleClass\\\" (click)=\\\"onRowClick($event)\\\" (dblclick)=\\\"rowDblClick($event)\\\" (touchend)=\\\"onRowTouchEnd()\\\" (contextmenu)=\\\"onRowRightClick($event)\\\">\\n                <a href=\\\"#\\\" *ngIf=\\\"i == treeTable.toggleColumnIndex\\\" class=\\\"ui-treetable-toggler fa fa-fw ui-clickable\\\" [ngClass]=\\\"node.expanded ? treeTable.expandedIcon : treeTable.collapsedIcon\\\"\\n                    [ngStyle]=\\\"{'margin-left':level*16 + 'px','visibility': isLeaf() ? 'hidden' : 'visible'}\\\"\\n                    (click)=\\\"toggle($event)\\\"\\n                    [title]=\\\"node.expanded ? labelCollapse : labelExpand\\\">\\n                </a>\\n                <div class=\\\"ui-chkbox ui-treetable-checkbox\\\" *ngIf=\\\"treeTable.selectionMode == 'checkbox' && i==0\\\"><div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\">\\n                    <span class=\\\"ui-chkbox-icon ui-clickable fa\\\" \\n                        [ngClass]=\\\"{'fa-check':isSelected(),'fa-minus':node.partialSelected}\\\"></span></div></div\\n                ><span *ngIf=\\\"!col.template\\\">{{resolveFieldData(node.data,col.field)}}</span>\\n                <ng-container *ngTemplateOutlet=\\\"col.template; context: {$implicit: col, rowData: node}\\\"></ng-container>\\n            </td>\\n        </div>\\n        <div *ngIf=\\\"node.children && node.expanded\\\" class=\\\"ui-treetable-row\\\" style=\\\"display:table-row\\\">\\n            <td [attr.colspan]=\\\"treeTable.columns.length\\\" class=\\\"ui-treetable-child-table-container\\\">\\n                <table [class]=\\\"treeTable.tableStyleClass\\\" [ngStyle]=\\\"treeTable.tableStyle\\\">\\n                    <tbody pTreeRow *ngFor=\\\"let childNode of node.children\\\" [node]=\\\"childNode\\\" [level]=\\\"level+1\\\" [labelExpand]=\\\"labelExpand\\\" [labelCollapse]=\\\"labelCollapse\\\" [parentNode]=\\\"node\\\"></tbody>\\n                </table>\\n            </td>\\n        </div>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return TreeTable; }))),\n        __metadata(\"design:paramtypes\", [TreeTable])\n    ], UITreeRow);\n    return UITreeRow;\n}());\nexports.UITreeRow = UITreeRow;\nvar TreeTable = /** @class */ (function () {\n    function TreeTable(el, domHandler, changeDetector, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.changeDetector = changeDetector;\n        this.renderer = renderer;\n        this.labelExpand = \"Expand\";\n        this.labelCollapse = \"Collapse\";\n        this.metaKeySelection = true;\n        this.toggleColumnIndex = 0;\n        this.collapsedIcon = \"fa-caret-right\";\n        this.expandedIcon = \"fa-caret-down\";\n        this.onRowDblclick = new core_1.EventEmitter();\n        this.selectionChange = new core_1.EventEmitter();\n        this.onNodeSelect = new core_1.EventEmitter();\n        this.onNodeUnselect = new core_1.EventEmitter();\n        this.onNodeExpand = new core_1.EventEmitter();\n        this.onNodeCollapse = new core_1.EventEmitter();\n        this.onContextMenuSelect = new core_1.EventEmitter();\n    }\n    TreeTable.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.initColumns();\n        this.columnsSubscription = this.cols.changes.subscribe(function (_) {\n            _this.initColumns();\n            _this.changeDetector.markForCheck();\n        });\n    };\n    TreeTable.prototype.initColumns = function () {\n        this.columns = this.cols.toArray();\n    };\n    TreeTable.prototype.onRowClick = function (event, node) {\n        var eventTarget = event.target;\n        if (eventTarget.className && eventTarget.className.indexOf('ui-treetable-toggler') === 0) {\n            return;\n        }\n        else if (this.selectionMode) {\n            if (node.selectable === false) {\n                return;\n            }\n            var metaSelection = this.rowTouched ? false : this.metaKeySelection;\n            var index_1 = this.findIndexInSelection(node);\n            var selected = (index_1 >= 0);\n            if (this.isCheckboxSelectionMode()) {\n                if (selected) {\n                    this.propagateSelectionDown(node, false);\n                    if (node.parent) {\n                        this.propagateSelectionUp(node.parent, false);\n                    }\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                }\n                else {\n                    this.propagateSelectionDown(node, true);\n                    if (node.parent) {\n                        this.propagateSelectionUp(node.parent, true);\n                    }\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            }\n            else {\n                if (metaSelection) {\n                    var metaKey = (event.metaKey || event.ctrlKey);\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(null);\n                        }\n                        else {\n                            this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                            this.selectionChange.emit(this.selection);\n                        }\n                        this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                    }\n                    else {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(node);\n                        }\n                        else if (this.isMultipleSelectionMode()) {\n                            this.selection = (!metaKey) ? [] : this.selection || [];\n                            this.selection = this.selection.concat([node]);\n                            this.selectionChange.emit(this.selection);\n                        }\n                        this.onNodeSelect.emit({ originalEvent: event, node: node });\n                    }\n                }\n                else {\n                    if (this.isSingleSelectionMode()) {\n                        if (selected) {\n                            this.selection = null;\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        }\n                        else {\n                            this.selection = node;\n                            this.onNodeSelect.emit({ originalEvent: event, node: node });\n                        }\n                    }\n                    else {\n                        if (selected) {\n                            this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        }\n                        else {\n                            this.selection = (this.selection || []).concat([node]);\n                            this.onNodeSelect.emit({ originalEvent: event, node: node });\n                        }\n                    }\n                    this.selectionChange.emit(this.selection);\n                }\n            }\n        }\n        this.rowTouched = false;\n    };\n    TreeTable.prototype.onRowTouchEnd = function () {\n        this.rowTouched = true;\n    };\n    TreeTable.prototype.onRowRightClick = function (event, node) {\n        if (this.contextMenu) {\n            var index = this.findIndexInSelection(node);\n            var selected = (index >= 0);\n            if (!selected) {\n                if (this.isSingleSelectionMode()) {\n                    this.selection = node;\n                }\n                else if (this.isMultipleSelectionMode()) {\n                    this.selection = [node];\n                    this.selectionChange.emit(this.selection);\n                }\n                this.selectionChange.emit(this.selection);\n            }\n            this.contextMenu.show(event);\n            this.onContextMenuSelect.emit({ originalEvent: event, node: node });\n        }\n    };\n    TreeTable.prototype.findIndexInSelection = function (node) {\n        var index = -1;\n        if (this.selectionMode && this.selection) {\n            if (this.isSingleSelectionMode()) {\n                index = (this.selection == node) ? 0 : -1;\n            }\n            else {\n                for (var i = 0; i < this.selection.length; i++) {\n                    if (this.selection[i] == node) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n        return index;\n    };\n    TreeTable.prototype.propagateSelectionUp = function (node, select) {\n        if (node.children && node.children.length) {\n            var selectedCount = 0;\n            var childPartialSelected = false;\n            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                if (this.isSelected(child)) {\n                    selectedCount++;\n                }\n                else if (child.partialSelected) {\n                    childPartialSelected = true;\n                }\n            }\n            if (select && selectedCount == node.children.length) {\n                this.selection = (this.selection || []).concat([node]);\n                node.partialSelected = false;\n            }\n            else {\n                if (!select) {\n                    var index_2 = this.findIndexInSelection(node);\n                    if (index_2 >= 0) {\n                        this.selection = this.selection.filter(function (val, i) { return i != index_2; });\n                    }\n                }\n                if (childPartialSelected || selectedCount > 0 && selectedCount != node.children.length)\n                    node.partialSelected = true;\n                else\n                    node.partialSelected = false;\n            }\n        }\n        var parent = node.parent;\n        if (parent) {\n            this.propagateSelectionUp(parent, select);\n        }\n    };\n    TreeTable.prototype.propagateSelectionDown = function (node, select) {\n        var index = this.findIndexInSelection(node);\n        if (select && index == -1) {\n            this.selection = (this.selection || []).concat([node]);\n        }\n        else if (!select && index > -1) {\n            this.selection = this.selection.filter(function (val, i) { return i != index; });\n        }\n        node.partialSelected = false;\n        if (node.children && node.children.length) {\n            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                this.propagateSelectionDown(child, select);\n            }\n        }\n    };\n    TreeTable.prototype.isSelected = function (node) {\n        return this.findIndexInSelection(node) != -1;\n    };\n    TreeTable.prototype.isSingleSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'single';\n    };\n    TreeTable.prototype.isMultipleSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'multiple';\n    };\n    TreeTable.prototype.isCheckboxSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'checkbox';\n    };\n    TreeTable.prototype.hasFooter = function () {\n        if (this.columns) {\n            var columnsArr = this.cols.toArray();\n            for (var i = 0; i < columnsArr.length; i++) {\n                if (columnsArr[i].footer) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TreeTable.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TreeTable.prototype, \"selection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TreeTable.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"labelExpand\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"labelCollapse\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TreeTable.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TreeTable.prototype, \"contextMenu\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TreeTable.prototype, \"toggleColumnIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TreeTable.prototype, \"tableStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"tableStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"collapsedIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"expandedIcon\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onRowDblclick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"selectionChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onNodeSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onNodeUnselect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onNodeExpand\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onNodeCollapse\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onContextMenuSelect\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", shared_1.Header)\n    ], TreeTable.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", shared_1.Footer)\n    ], TreeTable.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.Column),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], TreeTable.prototype, \"cols\", void 0);\n    __decorate([\n        core_1.ViewChild('tbl'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], TreeTable.prototype, \"tableViewChild\", void 0);\n    TreeTable = __decorate([\n        core_1.Component({\n            selector: 'p-treeTable',\n            template: \"\\n        <div [ngClass]=\\\"'ui-treetable ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-treetable-header ui-widget-header\\\" *ngIf=\\\"header\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-treetable-tablewrapper\\\">\\n                <table #tbl class=\\\"ui-widget-content\\\" [class]=\\\"tableStyleClass\\\" [ngStyle]=\\\"tableStyle\\\">\\n                    <thead>\\n                        <tr class=\\\"ui-state-default\\\">\\n                            <th #headerCell *ngFor=\\\"let col of columns; let lastCol=last \\\"  [ngStyle]=\\\"col.headerStyle||col.style\\\" [class]=\\\"col.headerStyleClass||col.styleClass\\\" \\n                                [ngClass]=\\\"'ui-state-default ui-unselectable-text'\\\">\\n                                <span class=\\\"ui-column-title\\\" *ngIf=\\\"!col.headerTemplate\\\">{{col.header}}</span>\\n                                <span class=\\\"ui-column-title\\\" *ngIf=\\\"col.headerTemplate\\\">\\n                                    <ng-container *ngTemplateOutlet=\\\"col.headerTemplate; context: {$implicit: col}\\\"></ng-container>\\n                                </span>\\n                            </th>\\n                        </tr>\\n                    </thead>\\n                    <tfoot *ngIf=\\\"hasFooter()\\\">\\n                        <tr>\\n                            <td *ngFor=\\\"let col of columns\\\" [ngStyle]=\\\"col.footerStyle||col.style\\\" [class]=\\\"col.footerStyleClass||col.styleClass\\\" [ngClass]=\\\"{'ui-state-default':true}\\\">\\n                                <span class=\\\"ui-column-footer\\\" *ngIf=\\\"!col.footerTemplate\\\">{{col.footer}}</span>\\n                                <span class=\\\"ui-column-footer\\\" *ngIf=\\\"col.footerTemplate\\\">\\n                                    <ng-container *ngTemplateOutlet=\\\"col.headerTemplate; context: {$implicit: col}\\\"></ng-container>\\n                                </span>\\n                            </td>\\n                        </tr>\\n                    </tfoot>\\n                    <tbody pTreeRow *ngFor=\\\"let node of value\\\" class=\\\"ui-treetable-data ui-widget-content\\\" [node]=\\\"node\\\" [level]=\\\"0\\\" [labelExpand]=\\\"labelExpand\\\" [labelCollapse]=\\\"labelCollapse\\\"></tbody>\\n                </table>\\n            </div>\\n            \\n            <div class=\\\"ui-treetable-footer ui-widget-header\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.ChangeDetectorRef, core_1.Renderer2])\n    ], TreeTable);\n    return TreeTable;\n}());\nexports.TreeTable = TreeTable;\nvar TreeTableModule = /** @class */ (function () {\n    function TreeTableModule() {\n    }\n    TreeTableModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [TreeTable, shared_2.SharedModule],\n            declarations: [TreeTable, UITreeRow]\n        })\n    ], TreeTableModule);\n    return TreeTableModule;\n}());\nexports.TreeTableModule = TreeTableModule;\n//# sourceMappingURL=treetable.js.map\n\n/***/ }),\n/* 790 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar common_1 = __webpack_require__(3);\nvar forms_1 = __webpack_require__(17);\nexports.TRISTATECHECKBOX_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return TriStateCheckbox; }),\n    multi: true\n};\nvar TriStateCheckbox = /** @class */ (function () {\n    function TriStateCheckbox(cd) {\n        this.cd = cd;\n        this.onChange = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    TriStateCheckbox.prototype.onClick = function (event, input) {\n        if (!this.disabled) {\n            this.toggle(event);\n            this.focus = true;\n            input.focus();\n        }\n    };\n    TriStateCheckbox.prototype.onKeydown = function (event) {\n        if (event.keyCode == 32) {\n            event.preventDefault();\n        }\n    };\n    TriStateCheckbox.prototype.onKeyup = function (event) {\n        if (event.keyCode == 32) {\n            this.toggle(event);\n            event.preventDefault();\n        }\n    };\n    TriStateCheckbox.prototype.toggle = function (event) {\n        if (this.value == null || this.value == undefined)\n            this.value = true;\n        else if (this.value == true)\n            this.value = false;\n        else if (this.value == false)\n            this.value = null;\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    TriStateCheckbox.prototype.onFocus = function () {\n        this.focus = true;\n    };\n    TriStateCheckbox.prototype.onBlur = function () {\n        this.focus = false;\n        this.onModelTouched();\n    };\n    TriStateCheckbox.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    TriStateCheckbox.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    TriStateCheckbox.prototype.writeValue = function (value) {\n        this.value = value;\n        this.cd.markForCheck();\n    };\n    TriStateCheckbox.prototype.setDisabledState = function (disabled) {\n        this.disabled = disabled;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TriStateCheckbox.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TriStateCheckbox.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TriStateCheckbox.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TriStateCheckbox.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TriStateCheckbox.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TriStateCheckbox.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TriStateCheckbox.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TriStateCheckbox.prototype, \"onChange\", void 0);\n    TriStateCheckbox = __decorate([\n        core_1.Component({\n            selector: 'p-triStateCheckbox',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-chkbox ui-tristatechkbox ui-widget'\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #input type=\\\"text\\\" [attr.id]=\\\"inputId\\\" [name]=\\\"name\\\" [attr.tabindex]=\\\"tabindex\\\" readonly [disabled]=\\\"disabled\\\" (keyup)=\\\"onKeyup($event)\\\" (keydown)=\\\"onKeydown($event)\\\" (focus)=\\\"onFocus()\\\" (blur)=\\\"onBlur()\\\">\\n            </div>\\n            <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" (click)=\\\"onClick($event,input)\\\"\\n                [ngClass]=\\\"{'ui-state-active':value!=null,'ui-state-disabled':disabled,'ui-state-focus':focus}\\\">\\n                <span class=\\\"ui-chkbox-icon fa ui-clickable\\\" [ngClass]=\\\"{'fa-check':value==true,'fa-close':value==false}\\\"></span>\\n            </div>\\n        </div>\\n        <label class=\\\"ui-chkbox-label\\\" (click)=\\\"onClick($event,input)\\\"\\n               [ngClass]=\\\"{'ui-label-active':value!=null, 'ui-label-disabled':disabled, 'ui-label-focus':focus}\\\"\\n               *ngIf=\\\"label\\\" [attr.for]=\\\"inputId\\\">{{label}}</label>\\n    \",\n            providers: [exports.TRISTATECHECKBOX_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ChangeDetectorRef])\n    ], TriStateCheckbox);\n    return TriStateCheckbox;\n}());\nexports.TriStateCheckbox = TriStateCheckbox;\nvar TriStateCheckboxModule = /** @class */ (function () {\n    function TriStateCheckboxModule() {\n    }\n    TriStateCheckboxModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [TriStateCheckbox],\n            declarations: [TriStateCheckbox]\n        })\n    ], TriStateCheckboxModule);\n    return TriStateCheckboxModule;\n}());\nexports.TriStateCheckboxModule = TriStateCheckboxModule;\n//# sourceMappingURL=tristatecheckbox.js.map\n\n/***/ }),\n/* 791 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* Shorthand */\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(238));\n\n/***/ }),\n/* 792 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* Shorthand */\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(234));\n\n/***/ }),\n/* 793 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* Shorthand */\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(241));\n\n/***/ }),\n/* 794 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* Shorthand */\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(242));\n\n/***/ }),\n/* 795 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* Shorthand */\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(232));\n\n/***/ }),\n/* 796 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* Shorthand */\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(239));\n\n/***/ }),\n/* 797 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* Shorthand */\n\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(__webpack_require__(240));\n\n/***/ }),\n/* 798 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar recaptcha_component_1 = __webpack_require__(110);\nexports.RecaptchaComponent = recaptcha_component_1.RecaptchaComponent;\nvar recaptcha_loader_service_1 = __webpack_require__(80);\nexports.RecaptchaLoaderService = recaptcha_loader_service_1.RecaptchaLoaderService;\nexports.RECAPTCHA_LANGUAGE = recaptcha_loader_service_1.RECAPTCHA_LANGUAGE;\nexports.RECAPTCHA_BASE_URL = recaptcha_loader_service_1.RECAPTCHA_BASE_URL;\nexports.RECAPTCHA_NONCE = recaptcha_loader_service_1.RECAPTCHA_NONCE;\nvar recaptcha_module_1 = __webpack_require__(799);\nexports.RecaptchaModule = recaptcha_module_1.RecaptchaModule;\nvar recaptcha_settings_1 = __webpack_require__(244);\nexports.RECAPTCHA_SETTINGS = recaptcha_settings_1.RECAPTCHA_SETTINGS;\nvar recaptcha_v3_module_1 = __webpack_require__(801);\nexports.RecaptchaV3Module = recaptcha_v3_module_1.RecaptchaV3Module;\nvar recaptcha_v3_service_1 = __webpack_require__(245);\nexports.ReCaptchaV3Service = recaptcha_v3_service_1.ReCaptchaV3Service;\nexports.RECAPTCHA_V3_SITE_KEY = recaptcha_v3_service_1.RECAPTCHA_V3_SITE_KEY;\n\n\n/***/ }),\n/* 799 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar recaptcha_common_module_1 = __webpack_require__(800);\nvar recaptcha_loader_service_1 = __webpack_require__(80);\nvar recaptcha_component_1 = __webpack_require__(110);\nvar RecaptchaModule = /** @class */ (function () {\n    function RecaptchaModule() {\n    }\n    // We need this to maintain backwards-compatibility with v4. Removing this will be a breaking change\n    // We need this to maintain backwards-compatibility with v4. Removing this will be a breaking change\n    RecaptchaModule.forRoot = \n    // We need this to maintain backwards-compatibility with v4. Removing this will be a breaking change\n    function () {\n        return RecaptchaModule;\n    };\n    RecaptchaModule.decorators = [\n        { type: core_1.NgModule, args: [{\n                    exports: [\n                        recaptcha_component_1.RecaptchaComponent,\n                    ],\n                    imports: [\n                        recaptcha_common_module_1.RecaptchaCommonModule,\n                    ],\n                    providers: [\n                        recaptcha_loader_service_1.RecaptchaLoaderService,\n                    ],\n                },] },\n    ];\n    return RecaptchaModule;\n}());\nexports.RecaptchaModule = RecaptchaModule;\n\n\n/***/ }),\n/* 800 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar recaptcha_component_1 = __webpack_require__(110);\nvar RecaptchaCommonModule = /** @class */ (function () {\n    function RecaptchaCommonModule() {\n    }\n    RecaptchaCommonModule.decorators = [\n        { type: core_1.NgModule, args: [{\n                    declarations: [\n                        recaptcha_component_1.RecaptchaComponent,\n                    ],\n                    exports: [\n                        recaptcha_component_1.RecaptchaComponent,\n                    ],\n                },] },\n    ];\n    return RecaptchaCommonModule;\n}());\nexports.RecaptchaCommonModule = RecaptchaCommonModule;\n\n\n/***/ }),\n/* 801 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = __webpack_require__(0);\nvar recaptcha_v3_service_1 = __webpack_require__(245);\nvar RecaptchaV3Module = /** @class */ (function () {\n    function RecaptchaV3Module() {\n    }\n    RecaptchaV3Module.decorators = [\n        { type: core_1.NgModule, args: [{\n                    providers: [\n                        recaptcha_v3_service_1.ReCaptchaV3Service,\n                    ],\n                },] },\n    ];\n    return RecaptchaV3Module;\n}());\nexports.RecaptchaV3Module = RecaptchaV3Module;\n\n\n/***/ }),\n/* 802 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _app = __webpack_require__(803);\n\nObject.keys(_app).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _app[key];\n    }\n  });\n});\n\nvar _login = __webpack_require__(250);\n\nObject.keys(_login).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _login[key];\n    }\n  });\n});\n\nvar _header = __webpack_require__(806);\n\nObject.keys(_header).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _header[key];\n    }\n  });\n});\n\nvar _dashboard = __webpack_require__(251);\n\nObject.keys(_dashboard).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _dashboard[key];\n    }\n  });\n});\n\nvar _taskboard = __webpack_require__(252);\n\nObject.keys(_taskboard).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _taskboard[key];\n    }\n  });\n});\n\nvar _tasklist = __webpack_require__(253);\n\nObject.keys(_tasklist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _tasklist[key];\n    }\n  });\n});\n\nvar _task = __webpack_require__(52);\n\nObject.keys(_task).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _task[key];\n    }\n  });\n});\n\nvar _taskview = __webpack_require__(821);\n\nObject.keys(_taskview).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _taskview[key];\n    }\n  });\n});\n\nvar _projectlist = __webpack_require__(386);\n\nObject.keys(_projectlist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _projectlist[key];\n    }\n  });\n});\n\nvar _project = __webpack_require__(83);\n\nObject.keys(_project).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _project[key];\n    }\n  });\n});\n\nvar _projectview = __webpack_require__(827);\n\nObject.keys(_projectview).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _projectview[key];\n    }\n  });\n});\n\nvar _mailbox = __webpack_require__(387);\n\nObject.keys(_mailbox).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _mailbox[key];\n    }\n  });\n});\n\nvar _directory = __webpack_require__(388);\n\nObject.keys(_directory).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _directory[key];\n    }\n  });\n});\n\nvar _daily = __webpack_require__(389);\n\nObject.keys(_daily).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _daily[key];\n    }\n  });\n});\n\nvar _contact = __webpack_require__(390);\n\nObject.keys(_contact).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _contact[key];\n    }\n  });\n});\n\nvar _sprint = __webpack_require__(391);\n\nObject.keys(_sprint).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _sprint[key];\n    }\n  });\n});\n\nvar _sprints = __webpack_require__(392);\n\nObject.keys(_sprints).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _sprints[key];\n    }\n  });\n});\n\nvar _schedulerComponent = __webpack_require__(393);\n\nObject.keys(_schedulerComponent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _schedulerComponent[key];\n    }\n  });\n});\n\nvar _schedulerlistComponent = __webpack_require__(394);\n\nObject.keys(_schedulerlistComponent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _schedulerlistComponent[key];\n    }\n  });\n});\n\nvar _eventslistComponent = __webpack_require__(395);\n\nObject.keys(_eventslistComponent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _eventslistComponent[key];\n    }\n  });\n});\n\nvar _eventsComponent = __webpack_require__(396);\n\nObject.keys(_eventsComponent).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _eventsComponent[key];\n    }\n  });\n});\n\nvar _roles = __webpack_require__(397);\n\nObject.keys(_roles).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _roles[key];\n    }\n  });\n});\n\nvar _rol = __webpack_require__(398);\n\nObject.keys(_rol).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _rol[key];\n    }\n  });\n});\n\nvar _todolist = __webpack_require__(399);\n\nObject.keys(_todolist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _todolist[key];\n    }\n  });\n});\n\nvar _users = __webpack_require__(400);\n\nObject.keys(_users).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _users[key];\n    }\n  });\n});\n\nvar _usershistory = __webpack_require__(401);\n\nObject.keys(_usershistory).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _usershistory[key];\n    }\n  });\n});\n\nvar _parameterlist = __webpack_require__(402);\n\nObject.keys(_parameterlist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _parameterlist[key];\n    }\n  });\n});\n\nvar _parameters = __webpack_require__(403);\n\nObject.keys(_parameters).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _parameters[key];\n    }\n  });\n});\n\nvar _categories = __webpack_require__(404);\n\nObject.keys(_categories).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _categories[key];\n    }\n  });\n});\n\nvar _units = __webpack_require__(405);\n\nObject.keys(_units).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _units[key];\n    }\n  });\n});\n\nvar _notfound = __webpack_require__(406);\n\nObject.keys(_notfound).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _notfound[key];\n    }\n  });\n});\n\nvar _notpermits = __webpack_require__(407);\n\nObject.keys(_notpermits).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _notpermits[key];\n    }\n  });\n});\n\nvar _product = __webpack_require__(408);\n\nObject.keys(_product).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _product[key];\n    }\n  });\n});\n\nvar _productlist = __webpack_require__(409);\n\nObject.keys(_productlist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _productlist[key];\n    }\n  });\n});\n\nvar _typelist = __webpack_require__(410);\n\nObject.keys(_typelist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _typelist[key];\n    }\n  });\n});\n\nvar _code = __webpack_require__(411);\n\nObject.keys(_code).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _code[key];\n    }\n  });\n});\n\nvar _wiki = __webpack_require__(412);\n\nObject.keys(_wiki).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _wiki[key];\n    }\n  });\n});\n\nvar _requests = __webpack_require__(413);\n\nObject.keys(_requests).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _requests[key];\n    }\n  });\n});\n\nvar _approvals = __webpack_require__(414);\n\nObject.keys(_approvals).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _approvals[key];\n    }\n  });\n});\n\nvar _projectboard = __webpack_require__(415);\n\nObject.keys(_projectboard).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _projectboard[key];\n    }\n  });\n});\n\nvar _static = __webpack_require__(416);\n\nObject.keys(_static).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _static[key];\n    }\n  });\n});\n\nvar _burndown = __webpack_require__(417);\n\nObject.keys(_burndown).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _burndown[key];\n    }\n  });\n});\n\nvar _passwordrecovery = __webpack_require__(418);\n\nObject.keys(_passwordrecovery).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _passwordrecovery[key];\n    }\n  });\n});\n\nvar _usersettings = __webpack_require__(419);\n\nObject.keys(_usersettings).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _usersettings[key];\n    }\n  });\n});\n\nvar _preferences = __webpack_require__(420);\n\nObject.keys(_preferences).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _preferences[key];\n    }\n  });\n});\n\nvar _clientsettings = __webpack_require__(421);\n\nObject.keys(_clientsettings).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _clientsettings[key];\n    }\n  });\n});\n\nvar _dailyboard = __webpack_require__(422);\n\nObject.keys(_dailyboard).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _dailyboard[key];\n    }\n  });\n});\n\nvar _reports = __webpack_require__(423);\n\nObject.keys(_reports).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _reports[key];\n    }\n  });\n});\n\nvar _guideburndown = __webpack_require__(424);\n\nObject.keys(_guideburndown).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _guideburndown[key];\n    }\n  });\n});\n\nvar _guideprojectboard = __webpack_require__(425);\n\nObject.keys(_guideprojectboard).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _guideprojectboard[key];\n    }\n  });\n});\n\nvar _userguidelogin = __webpack_require__(426);\n\nObject.keys(_userguidelogin).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _userguidelogin[key];\n    }\n  });\n});\n\nvar _grouplist = __webpack_require__(427);\n\nObject.keys(_grouplist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _grouplist[key];\n    }\n  });\n});\n\nvar _mysprint = __webpack_require__(428);\n\nObject.keys(_mysprint).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _mysprint[key];\n    }\n  });\n});\n\nvar _whiteboard = __webpack_require__(429);\n\nObject.keys(_whiteboard).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _whiteboard[key];\n    }\n  });\n});\n\nvar _externalrequests = __webpack_require__(430);\n\nObject.keys(_externalrequests).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _externalrequests[key];\n    }\n  });\n});\n\nvar _externaltasklist = __webpack_require__(431);\n\nObject.keys(_externaltasklist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _externaltasklist[key];\n    }\n  });\n});\n\nvar _loglist = __webpack_require__(432);\n\nObject.keys(_loglist).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _loglist[key];\n    }\n  });\n});\n\nvar _notifications = __webpack_require__(433);\n\nObject.keys(_notifications).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _notifications[key];\n    }\n  });\n});\n\nvar _documents = __webpack_require__(434);\n\nObject.keys(_documents).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _documents[key];\n    }\n  });\n});\n\nvar _cloud = __webpack_require__(435);\n\nObject.keys(_cloud).forEach(function (key) {\n  if (key === \"default\" || key === \"__esModule\") return;\n  Object.defineProperty(exports, key, {\n    enumerable: true,\n    get: function get() {\n      return _cloud[key];\n    }\n  });\n});\n\n/***/ }),\n/* 803 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AppComponent = undefined;\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _appTemplate = __webpack_require__(804);\n\nvar _appTemplate2 = _interopRequireDefault(_appTemplate);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar AppComponent = exports.AppComponent = (_dec = (0, _core.Component)({\n  selector: 'crm-app',\n  template: _appTemplate2.default\n}), _dec(_class = function AppComponent(author) {\n  _classCallCheck(this, AppComponent);\n\n  this.author = author;\n}) || _class);\n(0, _core.Inject)('AUTHOR')(AppComponent, null, 0);\n\n/***/ }),\n/* 804 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<router-outlet>\\n</router-outlet>\";\n\n/***/ }),\n/* 805 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"fondo\\\" [ngStyle]=\\\"myLoginStyle\\\">\\n  <div class=\\\"col-md-5 col-lg-7\\\">\\n\\n  </div>\\n  <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-5\\\" id=\\\"login-rigth\\\">\\n\\n  </div>\\n  <div style=\\\"bottom: 7%; left: 25%; position: absolute;\\\">\\n    <img src=\\\"img/powered_white.svg\\\" style=\\\"height: 45px;\\\">\\n  </div>\\n  <div id=\\\"login-nx\\\">\\n    <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;\\\">\\n      <img src=\\\"img/{{ mainLogo }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto;max-width: 300px;\\\">\\n    </div>\\n    <p class=\\\"login-box-msg\\\">Sign in to start your session</p>\\n\\n    <form id=\\\"formLogin\\\" (ngSubmit)=\\\"getAuth()\\\">\\n      <div class=\\\"form-group has-feedback\\\" style=\\\"background-color: transparent;border: none;\\\">\\n        <input type=\\\"text\\\" autocomplete=\\\"off\\\" id=\\\"user\\\" name=\\\"user\\\" [(ngModel)]=\\\"log.user\\\" oninput=\\\"javascript:this.value=this.value.toLowerCase();\\\" placeholder=\\\"&#xF007;\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent;\\\" class=\\\"ng-valid ng-dirty ng-touched\\\">\\n      </div>\\n      <div class=\\\"form-group has-feedback\\\" style=\\\"background-color: transparent;border: none;\\\">\\n        <input type=\\\"password\\\" autocomplete=\\\"off\\\" id=\\\"pwd\\\" name=\\\"pwd\\\" [(ngModel)]=\\\"log.pwd\\\" placeholder=\\\"Password\\\"\\n          placeholder=\\\"&#xF023;\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent;\\\" class=\\\"ng-valid ng-dirty ng-touched\\\">\\n      </div>\\n      <div *ngIf=\\\"captcha > '0' || captchaforever == 1\\\" style=\\\"margin-bottom: 26px;\\\">\\n        <re-captcha (resolved)=\\\"resolved($event)\\\" siteKey=\\\"{{sitkey}}\\\"></re-captcha>\\n      </div>\\n      <div class=\\\"row\\\">\\n        <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n          <i *ngIf=\\\"loading\\\" class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n          <span *ngIf=\\\"loading\\\" class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n          <button *ngIf=\\\"!loading\\\" type=\\\"submit\\\" id=\\\"boton_autentico\\\" class=\\\"btn-login\\\" [disabled]=\\\"validate()\\\">\\n            SIGN IN\\n          </button>\\n        </div>\\n      </div>\\n      <div class=\\\"row\\\" style=\\\"padding-top: 20px;text-align:center;\\\">\\n        <div><a id=\\\"forgot-link\\\" href=\\\"{{forgotPassword}}\\\"> Forgot Password?</a></div>\\n      </div>\\n      <div class=\\\"row\\\" style=\\\"padding-top: 5px; text-align:center;\\\">\\n        <p class=\\\"login-box-msg\\\">Version 4.0.1</p>\\n      </div>\\n    </form>\\n  </div>\\n</div>\";\n\n/***/ }),\n/* 806 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.HeaderComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _IntervalObservable = __webpack_require__(101);\n\nvar _login = __webpack_require__(43);\n\nvar _header = __webpack_require__(32);\n\nvar _task = __webpack_require__(19);\n\nvar _pipes = __webpack_require__(14);\n\nvar _headerTemplate = __webpack_require__(816);\n\nvar _headerTemplate2 = _interopRequireDefault(_headerTemplate);\n\nvar _ngxToastr = __webpack_require__(7);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar HeaderComponent = exports.HeaderComponent = (_dec = (0, _core.Component)({\n    selector: \"my-header\",\n    template: _headerTemplate2.default,\n    pipes: [_pipes.TruncatePipe]\n}), _dec(_class = function () {\n    function HeaderComponent(loginService, route, headerService, taskService, toastr) {\n        var _this = this;\n\n        _classCallCheck(this, HeaderComponent);\n\n        this._router = route;\n        this._login = loginService;\n        this._header = headerService;\n        this._tasks = taskService;\n        this.tasks = [];\n        this.notifications = [];\n        this.alive = true;\n        this.parents = [];\n        this.childs = [];\n        this.total_tasks = 0;\n        this.total_comments = 0;\n        this.menu = {};\n        this.activeMenu = [];\n        this.user = {};\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this.getUser();\n        this.getNameUser();\n        this.getNameUserNavBar();\n        this.subscriber = _IntervalObservable.IntervalObservable.create(180000).takeWhile(function (n) {\n            return _this.alive;\n        }) // only fires when component is alive\n        .subscribe(function (n) {\n            if (_this.alive && localStorage.getItem(\"token\")) {\n                _this._login.isLogged().subscribe(function (rx) {\n                    if (rx.data == \"OK\") {\n                        _this.getInfoNotifications();\n                    } else {\n                        _this.alive = false;\n                    }\n                });\n            } else {\n                _this.alive = false;\n            }\n        });\n        this.versionApp = \"Version 4.0.0\";\n        // this.getCheckVersion();\n    }\n\n    _createClass(HeaderComponent, [{\n        key: \"getCheckVersion\",\n        value: function getCheckVersion() {\n            var _this2 = this;\n\n            this._header.getCheckVersion().subscribe(function (res) {\n                if (res.data != _this2.versionApp) {\n                    window.location.reload();\n                }\n            });\n        }\n    }, {\n        key: \"getInfoNotifications\",\n        value: function getInfoNotifications() {\n            var _this3 = this;\n\n            this._header.getDeskNotificatons().subscribe(function (res) {\n                if (res.data.length > 0) {\n                    _this3.notifications = res.data;\n                    for (var i = res.data.length - 1; i >= 0; i--) {\n                        if (_this3.notifications[i].para_category == \"16\") {\n                            _this3.notifyMe(_this3.notifications[i].noti_title, _this3.escapeHtml(_this3.notifications[i].noti_description), _this3.notifications[i].noti_url);\n                        }\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"ngOnInit\",\n        value: function ngOnInit() {\n            this.getMenuByUser();\n            this.getNotifications();\n            if (Notification) {\n                if (Notification.permission !== \"granted\") {\n                    Notification.requestPermission();\n                }\n            }\n        }\n    }, {\n        key: \"clearNotif\",\n        value: function clearNotif() {\n            var _this4 = this;\n\n            this._header.clearNotificatons().subscribe(function (res) {\n                _this4.notifications = [];\n            });\n        }\n    }, {\n        key: \"logOut\",\n        value: function logOut() {\n            this.alive = false;\n            this._login.logOut().subscribe(function (res) {});\n            this._router.navigate([\"/login\"]);\n        }\n    }, {\n        key: \"getUser\",\n        value: function getUser() {\n            var _this5 = this;\n\n            if (localStorage.getItem(\"user\")) {\n                this.user = JSON.parse(localStorage.getItem(\"user\"));\n            }\n            this._header.getUser().subscribe(function (res) {\n                _this5.user = res.data;\n                localStorage.setItem(\"user\", JSON.stringify(_this5.user));\n            });\n        }\n    }, {\n        key: \"getNotifications\",\n        value: function getNotifications() {\n            var _this6 = this;\n\n            this._header.getDeskNotificatons().subscribe(function (res) {\n                _this6.notifications = res.data;\n                for (var i = 0; i < _this6.notifications.length; i++) {\n                    if (_this6.notifications[i].para_type == \"new_task\") {\n                        _this6.total_tasks++;\n                    } else {\n                        _this6.total_comments++;\n                    }\n                }\n            });\n        }\n    }, {\n        key: \"notifyMe\",\n        value: function notifyMe(ntitle, nbody, nurl) {\n            if (!Notification) {\n                alert(\"Desktop notifications not available in your browser. Try Chromium.\");\n                return;\n            }\n            if (Notification.permission !== \"granted\") {\n                Notification.requestPermission();\n            } else {\n                var notification = new Notification(ntitle, {\n                    icon: \"favicon.ico\",\n                    body: nbody,\n                    priority: 2,\n                    requireInteraction: true\n                });\n                notification.onclick = function () {\n                    window.open(nurl);\n                };\n            }\n        }\n    }, {\n        key: \"setNotify\",\n        value: function setNotify(idn, module, tkid) {\n            var _this7 = this;\n\n            this._header.setCatNotification(idn, 18).subscribe(function (res) {\n                _this7.getNotifications();\n                _this7._router.navigate([module, tkid]);\n            });\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            return text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n        }\n    }, {\n        key: \"getMenuByUser\",\n        value: function getMenuByUser() {\n            var _this8 = this;\n\n            this.activeMenu = JSON.parse(localStorage.getItem(\"menu\"));\n            this._header.getMenuByUser().subscribe(function (res) {\n                _this8.activeMenu = res.data;\n                localStorage.setItem(\"menu\", JSON.stringify(_this8.activeMenu));\n            });\n        }\n\n        /**\n         * Display Name User\n         * @returns {string}\n         */\n\n    }, {\n        key: \"getNameUser\",\n        value: function getNameUser() {\n            if (this.user.user_name && this.user.user_lastname) {\n                var names = this.user.user_name;\n                var surnames = this.user.user_lastname;\n                var ellipsis = \"…\";\n                var fullName = names + ' ' + surnames;\n\n                if (fullName.length <= 14) {\n                    return fullName;\n                } else {\n\n                    if (names.length <= 14 && surnames.length <= 14) {\n                        fullName = names + '<br>' + surnames;\n                    }\n\n                    if (names.length <= 14 && surnames.length > 14) {\n                        surnames = surnames.substring(0, 14) + ellipsis;\n                        fullName = names + '<br>' + surnames;\n                    }\n\n                    if (names.length > 14 && surnames.length <= 14) {\n                        var arrayNames = names.split(' ');\n                        var firstName = arrayNames[0];\n                        fullName = firstName + '<br>' + surnames;\n                    }\n\n                    if (names.length > 14 && surnames.length > 14) {\n                        var _arrayNames = names.split(' ');\n                        var _firstName = _arrayNames[0];\n                        surnames = surnames.substring(0, 14) + ellipsis;\n                        fullName = _firstName + '<br>' + surnames;\n                    }\n\n                    return fullName;\n                }\n            } else {\n                return \"\";\n            }\n        }\n    }, {\n        key: \"getNameUserNavBar\",\n        value: function getNameUserNavBar() {\n            if (this.user.user_name && this.user.user_lastname) {\n                var names = this.user.user_name;\n                var surnames = this.user.user_lastname;\n                var ellipsis = \"…\";\n                var fullName = names + ' ' + surnames;\n\n                if (fullName.length <= 14) {\n                    return fullName;\n                } else {\n\n                    if (names.length <= 14 && surnames.length <= 14) {\n                        fullName = names + ' ' + surnames;\n                    }\n\n                    if (names.length <= 14 && surnames.length > 14) {\n                        surnames = surnames.substring(0, 14) + ellipsis;\n                        fullName = names + ' ' + surnames;\n                    }\n\n                    if (names.length > 14 && surnames.length <= 14) {\n                        var arrayNames = names.split(' ');\n                        var firstName = arrayNames[0];\n                        fullName = firstName + ' ' + surnames;\n                    }\n\n                    if (names.length > 14 && surnames.length > 14) {\n                        var _arrayNames2 = names.split(' ');\n                        var _firstName2 = _arrayNames2[0];\n                        surnames = surnames.substring(0, 14) + ellipsis;\n                        fullName = _firstName2 + ' ' + surnames;\n                    }\n\n                    return fullName;\n                }\n            } else {\n                return \"\";\n            }\n        }\n    }, {\n        key: \"alert_closeSesion\",\n        value: function alert_closeSesion() {\n            this.toastr.warning(\"Your session has been closed due to inactivity\");\n        }\n    }]);\n\n    return HeaderComponent;\n}()) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_login.LoginService, _router.Router, _header.HeaderService, _task.TaskService, _ngxToastr.ToastrService], HeaderComponent);\n\n/***/ }),\n/* 807 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.TrimPipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TrimPipe = exports.TrimPipe = (_dec = (0, _core.Pipe)({ name: 'trim' }), _dec(_class = function () {\n  function TrimPipe() {\n    _classCallCheck(this, TrimPipe);\n  }\n\n  _createClass(TrimPipe, [{\n    key: 'transform',\n    value: function transform(value, args) {\n      return value.trim();\n    }\n  }]);\n\n  return TrimPipe;\n}()) || _class);\n\n/***/ }),\n/* 808 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.FilterPipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FilterPipe = exports.FilterPipe = (_dec = (0, _core.Pipe)({ name: 'filter' }), _dec(_class = function () {\n    function FilterPipe() {\n        _classCallCheck(this, FilterPipe);\n    }\n\n    _createClass(FilterPipe, [{\n        key: 'transform',\n        value: function transform(value, args) {\n            var result = [];\n            if (args !== \"\") {\n                for (var item in value) {\n                    var nx = null;\n                    for (var element in value[item]) {\n                        var xx = value[item][element] + \"\";\n                        if (xx && xx.toLowerCase().indexOf(args.toLowerCase()) != -1) {\n                            nx = value[item];\n                        }\n                    }\n                    if (nx) {\n                        result.push(nx);\n                    }\n                }\n                return result;\n            } else {\n                return value;\n            }\n        }\n    }]);\n\n    return FilterPipe;\n}()) || _class);\n\n/***/ }),\n/* 809 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.FilterfieldPipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FilterfieldPipe = exports.FilterfieldPipe = (_dec = (0, _core.Pipe)({ name: 'filterfield' }), _dec(_class = function () {\n\tfunction FilterfieldPipe() {\n\t\t_classCallCheck(this, FilterfieldPipe);\n\t}\n\n\t_createClass(FilterfieldPipe, [{\n\t\tkey: 'transform',\n\t\tvalue: function transform(value, args) {\n\t\t\tvar result = [];\n\t\t\tif (args) {\n\t\t\t\tif (args.text && Array.isArray(args.text) && args.text.length > 0 && !(Array.isArray(args.text) && args.text[0] == \"\")) {\n\t\t\t\t\tfor (var item in value) {\n\t\t\t\t\t\tvar nx = null;\n\t\t\t\t\t\tvar xx = value[item][args.pos] + \"\";\n\t\t\t\t\t\tif (!Array.isArray(args.text)) {\n\t\t\t\t\t\t\tif (xx && args.text.toLowerCase().includes(xx.toLowerCase())) {\n\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t} else if (args.or && args.orfield && Array.isArray(args.or)) {\n\t\t\t\t\t\t\t\tvar j = void 0;\n\t\t\t\t\t\t\t\tvar yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\t\tfor (var _j = 0; _j < args.or.length; _j++) {\n\t\t\t\t\t\t\t\t\tvar el = args.or[_j];\n\t\t\t\t\t\t\t\t\tif (el.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (args.or && args.orfield && !Array.isArray(args.or)) {\n\t\t\t\t\t\t\t\tvar _yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\t\tif (args.or.toLowerCase().includes(_yy.toLowerCase())) {\n\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (args.text.length == 0) {\n\t\t\t\t\t\t\tif (Array.isArray(args.or) && args.or[0]) {\n\t\t\t\t\t\t\t\tvar _j2 = void 0;\n\t\t\t\t\t\t\t\tvar _yy2 = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\t\tfor (var _j3 = 0; _j3 < args.or.length; _j3++) {\n\t\t\t\t\t\t\t\t\tif (xx.toLowerCase().includes(_yy2.toLowerCase())) {\n\t\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (!Array.isArray(args.or)) {\n\t\t\t\t\t\t\t\tvar _yy3 = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\t\tif (args.or && args.or.toLowerCase().includes(_yy3.toLowerCase())) {\n\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar _j4 = void 0;\n\t\t\t\t\t\t\tfor (var _j5 = 0; _j5 < args.text.length; _j5++) {\n\t\t\t\t\t\t\t\tvar _el = args.text[_j5] + \"\";\n\t\t\t\t\t\t\t\tif (_el == xx) {\n\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t} else if (args.or && args.orfield && Array.isArray(args.or) && args.or[0]) {\n\t\t\t\t\t\t\t\t\tvar jx = void 0;\n\t\t\t\t\t\t\t\t\tvar _yy4 = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\t\t\tfor (var _jx = 0; _jx < args.or.length; _jx++) {\n\t\t\t\t\t\t\t\t\t\tif (xx.toLowerCase().includes(_yy4.toLowerCase())) {\n\t\t\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (args.or && args.orfield && !Array.isArray(args.or)) {\n\t\t\t\t\t\t\t\t\tvar _yy5 = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\t\t\tif (args.or.toLowerCase().includes(_yy5.toLowerCase())) {\n\t\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (nx) {\n\t\t\t\t\t\t\tresult.push(nx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t} else if (args.or && args.orfield) {\n\t\t\t\t\tfor (var _item in value) {\n\t\t\t\t\t\tvar _nx = null;\n\t\t\t\t\t\tif (Array.isArray(args.or)) {\n\t\t\t\t\t\t\tvar _j6 = void 0;\n\t\t\t\t\t\t\tvar _yy6 = value[_item][args.orfield] + \"\";\n\t\t\t\t\t\t\tfor (var _j7 = 0; _j7 < args.or.length; _j7++) {\n\t\t\t\t\t\t\t\tvar _el2 = args.or[_j7];\n\t\t\t\t\t\t\t\tif (_el2.toLowerCase().includes(_yy6.toLowerCase())) {\n\t\t\t\t\t\t\t\t\t_nx = value[_item];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!Array.isArray(args.or)) {\n\t\t\t\t\t\t\tvar _yy7 = value[_item][args.orfield] + \"\";\n\t\t\t\t\t\t\tif (args.or.toLowerCase().includes(_yy7.toLowerCase())) {\n\t\t\t\t\t\t\t\t_nx = value[_item];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (_nx) {\n\t\t\t\t\t\t\tresult.push(_nx);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t} else {\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn FilterfieldPipe;\n}()) || _class);\n\n/***/ }),\n/* 810 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.FilterDataPipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar FilterDataPipe = exports.FilterDataPipe = (_dec = (0, _core.Pipe)({ name: 'filterdata' }), _dec(_class = function () {\n    function FilterDataPipe() {\n        _classCallCheck(this, FilterDataPipe);\n    }\n\n    _createClass(FilterDataPipe, [{\n        key: 'transform',\n        value: function transform(items, keys) {\n            var result = [];\n\n            if (items != null) {\n                items = Object.values(items);\n            } else {\n                return result;\n            }\n            if (items && items.length) {\n                var _iteratorNormalCompletion = true;\n                var _didIteratorError = false;\n                var _iteratorError = undefined;\n\n                try {\n                    for (var _iterator = items[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                        var arr = _step.value;\n\n\n                        if (Array.isArray(arr)) {\n                            var _iteratorNormalCompletion2 = true;\n                            var _didIteratorError2 = false;\n                            var _iteratorError2 = undefined;\n\n                            try {\n                                for (var _iterator2 = arr[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                                    var obj = _step2.value;\n\n                                    var seed = JSON.stringify(obj);\n                                    var str = \"'\" + seed + \"'\";\n                                    var matches = seed.match(keys);\n\n                                    if (matches) {\n                                        result.push(obj);\n                                    }\n                                }\n                            } catch (err) {\n                                _didIteratorError2 = true;\n                                _iteratorError2 = err;\n                            } finally {\n                                try {\n                                    if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                                        _iterator2.return();\n                                    }\n                                } finally {\n                                    if (_didIteratorError2) {\n                                        throw _iteratorError2;\n                                    }\n                                }\n                            }\n                        } else {\n                            var seed = JSON.stringify(arr);\n                            var str = \"'\" + seed + \"'\";\n                            var matches = seed.match(keys);\n\n                            if (matches) {\n                                result.push(arr);\n                            }\n                        }\n                    }\n                } catch (err) {\n                    _didIteratorError = true;\n                    _iteratorError = err;\n                } finally {\n                    try {\n                        if (!_iteratorNormalCompletion && _iterator.return) {\n                            _iterator.return();\n                        }\n                    } finally {\n                        if (_didIteratorError) {\n                            throw _iteratorError;\n                        }\n                    }\n                }\n\n                return result;\n            } else {\n                return result;\n            }\n        }\n    }]);\n\n    return FilterDataPipe;\n}()) || _class);\n\n/***/ }),\n/* 811 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\nexports.TruncatePipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar TruncatePipe = exports.TruncatePipe = (_dec = (0, _core.Pipe)({ name: 'truncate' }), _dec(_class = function () {\n\tfunction TruncatePipe() {\n\t\t_classCallCheck(this, TruncatePipe);\n\t}\n\n\t_createClass(TruncatePipe, [{\n\t\tkey: 'transform',\n\t\tvalue: function transform(value, args) {\n\t\t\tvar result = [];\n\t\t\tif (args !== \"\" && value) {\n\t\t\t\tvar limit = args && args[0] ? parseInt(args[0], 10) : args ? parseInt(args, 10) : 10;\n\t\t\t\tvar trail = args && args[1] ? args[1] : '...';\n\t\t\t\treturn value.length > limit ? value.substring(0, limit) + trail : value;\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t}]);\n\n\treturn TruncatePipe;\n}()) || _class);\n\n/***/ }),\n/* 812 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.PaginatePipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar PaginatePipe = exports.PaginatePipe = (_dec = (0, _core.Pipe)({ name: 'paginate' }), _dec(_class = function () {\n    function PaginatePipe() {\n        _classCallCheck(this, PaginatePipe);\n    }\n\n    _createClass(PaginatePipe, [{\n        key: 'transform',\n        value: function transform(value, args) {\n            var result = [];\n            if (value) {\n                if (value.length <= args.limit) {\n                    result = value;\n                } else {\n                    result = value.slice((args.currp - 1) * args.limit, args.limit * args.currp);\n                }\n            }\n            return result;\n        }\n    }]);\n\n    return PaginatePipe;\n}()) || _class);\n\n/***/ }),\n/* 813 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.OrderPipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar OrderPipe = exports.OrderPipe = (_dec = (0, _core.Pipe)({ name: 'order' }), _dec(_class = function () {\n    function OrderPipe() {\n        _classCallCheck(this, OrderPipe);\n    }\n\n    _createClass(OrderPipe, [{\n        key: 'transform',\n        value: function transform(value, args) {\n            if (args.pos !== \"\") {\n                value.sort(function (a, b) {\n                    if (args.desc) {\n\n                        //var date_test = new Date(b[args.pos].replace(/-/g,\"/\"));\n\n                        if (new Date(b[args.pos].replace(/-/g, \"/\")).getDate() && new Date(a[args.pos].replace(/-/g, \"/\")).getDate()) {\n                            var a = new Date(a[args.pos].replace(/-/g, \"/\"));\n                            var b = new Date(b[args.pos].replace(/-/g, \"/\"));\n                            if (b < a) {\n                                return -1;\n                            }\n                            if (b > a) {\n                                return 1;\n                            }\n                        } else if (parseFloat(b[args.pos]) && parseFloat(a[args.pos])) {\n                            if (parseFloat(b[args.pos]) < parseFloat(a[args.pos])) {\n                                return -1;\n                            }\n                            if (parseFloat(b[args.pos]) > parseFloat(a[args.pos])) {\n                                return 1;\n                            }\n                        } else {\n                            if (b[args.pos] < a[args.pos]) {\n                                return -1;\n                            }\n                            if (b[args.pos] > a[args.pos]) {\n                                return 1;\n                            }\n                        }\n                    } else {\n\n                        if (new Date(b[args.pos].replace(/-/g, \"/\")).getDate() && new Date(a[args.pos].replace(/-/g, \"/\")).getDate()) {\n                            var a = new Date(a[args.pos].replace(/-/g, \"/\"));\n                            var b = new Date(b[args.pos].replace(/-/g, \"/\"));\n                            if (a < b) {\n                                return -1;\n                            }\n                            if (a > b) {\n                                return 1;\n                            }\n                        } else if (parseFloat(a[args.pos]) && parseFloat(b[args.pos])) {\n                            if (parseFloat(a[args.pos]) < parseFloat(b[args.pos])) {\n                                return -1;\n                            }\n                            if (parseFloat(a[args.pos]) > parseFloat(b[args.pos])) {\n                                return 1;\n                            }\n                        } else {\n                            if (a[args.pos] < b[args.pos]) {\n                                return -1;\n                            }\n                            if (a[args.pos] > b[args.pos]) {\n                                return 1;\n                            }\n                        }\n                    }\n                    return 0;\n                });\n            }\n            return value;\n        }\n    }]);\n\n    return OrderPipe;\n}()) || _class);\n\n/***/ }),\n/* 814 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SafeHtmlPipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nvar _platformBrowser = __webpack_require__(6);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar SafeHtmlPipe = exports.SafeHtmlPipe = (_dec = (0, _core.Pipe)({ name: 'safeHtml' }), _dec(_class = function () {\n  function SafeHtmlPipe(sanitizer) {\n    _classCallCheck(this, SafeHtmlPipe);\n\n    this._sanitizer = sanitizer;\n  }\n\n  _createClass(SafeHtmlPipe, [{\n    key: 'transform',\n    value: function transform(html) {\n      return this._sanitizer.bypassSecurityTrustHtml(html);\n    }\n  }]);\n\n  return SafeHtmlPipe;\n}()) || _class);\nReflect.defineMetadata('design:paramtypes', [_platformBrowser.DomSanitizer], SafeHtmlPipe);\n\n/***/ }),\n/* 815 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.CalculatePipe = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _class;\n\nvar _core = __webpack_require__(0);\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar CalculatePipe = exports.CalculatePipe = (_dec = (0, _core.Pipe)({ name: 'calculate' }), _dec(_class = function () {\n    function CalculatePipe() {\n        _classCallCheck(this, CalculatePipe);\n    }\n\n    _createClass(CalculatePipe, [{\n        key: 'transform',\n        value: function transform(value, args) {\n            var result = 0;\n            if (args && args.type && args.field) {\n                switch (args.type) {\n                    case \"sum\":\n                        for (var item in value) {\n                            var xx = Number(value[item][args.field]);\n                            result += xx;\n                        }\n                        break;\n                    case \"avg\":\n                        for (var _item in value) {\n                            var _xx = Number(value[_item][args.field]);\n                            result += _xx;\n                        }\n                        break;\n                    default:\n                        return result;\n                }\n                return result;\n            } else {\n                return result;\n            }\n        }\n    }]);\n\n    return CalculatePipe;\n}()) || _class);\n\n/***/ }),\n/* 816 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"skin-blue\\\">\\n    <header class=\\\"main-header\\\">\\n        <a routerLink=\\\"/dashboard\\\" class=\\\"logo\\\">\\n            <img class=\\\"logo-mini\\\" src=\\\"img/logo_menu_min.png\\\" style=\\\"margin-top:5px;\\\">\\n            <img src=\\\"img/logowhite.png\\\" style=\\\"height: 100%; margin-top:20px; padding-bottom: 20px;\\\">\\n        </a>\\n        <button (click)=\\\"alert_closeSesion()\\\" hidden id=\\\"alertCloseSesion\\\">Alert</button>\\n        <nav class=\\\"navbar navbar-static-top\\\">\\n            <a href=\\\"javascript:void(0)\\\" data-toggle=\\\"offcanvas\\\" role=\\\"button\\\">\\n                <img src=\\\"img/menu_icon.svg\\\" style=\\\"width: 28px; margin: 5px; margin-top: 15px;\\\">\\n            </a>\\n            <div class=\\\"navbar-custom-menu\\\">\\n                <ul class=\\\"nav navbar-nav\\\">\\n                    <li class=\\\"dropdown tasks-menu\\\">\\n                        <a href=\\\"\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" style=\\\"height: 33px;margin-top: 9px;background-color: #fff;color: #337ab7;border-radius: 5px;padding: 7px;margin-right: 20px;\\\">\\n                            <i class=\\\"sq sq-taskboard\\\" style=\\\"font-size: 20px;\\\"></i>\\n                            <span *ngIf=\\\"notifications.length > 0\\\" class=\\\"label label-danger\\\" style=\\\"border-radius: 50px;padding: 4px;font-size: 11px;top: -5px;right: -8px;\\\">{{notifications.length}}</span>\\n                        </a>\\n                        <ul class=\\\"dropdown-menu dash_task\\\" style=\\\"border-radius: 5%;border: none;top: 50px;right: 17px;padding-bottom: 30px; max-height: 235px; width: 343px; color: rgb(112,112,112);\\\">\\n                            <li>\\n                                <ul class=\\\"menu\\\" style=\\\"max-height: 221px;\\\">\\n                                    <li style=\\\"text-align: center; border-bottom: 1px solid rgb(234,233,233); height: 30px;\\\">\\n                                        <div style=\\\"font-weight: bold; text-align: center; margin-top: 12px;\\\" *ngIf=\\\"notifications && notifications.length > 0\\\">\\n                                            <div style=\\\"position: relative;transform: translate(-118px, -3px)\\\">\\n                                                <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>\\n                                            </div>\\n                                            <div style=\\\"position: relative;transform: translate(0px, -26px);\\\">\\n                                                You have {{notifications.length}}\\n                                                <a routerLink=\\\"/notifications\\\"><span style=\\\"color:rgb(28,110,198);\\\">notifications</span></a> in tasks\\n                                            </div>\\n                                        </div>\\n                                        <div style=\\\"font-weight: bold; text-align: center; margin-top: 12px;\\\" *ngIf=\\\"notifications && notifications.length == 0\\\">\\n                                            <div style=\\\"position: relative;transform: translate(-129px, -3px)\\\">\\n                                                <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>\\n                                            </div>\\n                                            <div style=\\\"position: relative;transform: translate(0px, -26px);\\\">\\n                                                You don't have\\n                                                <a routerLink=\\\"/notifications\\\"><span style=\\\"color:rgb(28,110,198);\\\">notifications</span></a> in tasks\\n                                            </div>\\n                                        </div>\\n                                    </li>\\n                                    <li *ngFor=\\\"let nt of notifications\\\">\\n                                        <div *ngIf=\\\"nt.para_type == 'comment_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; You have <span style=\\\"color:rgb(28,110,198)\\\"> 1 comment</span> from task\\n                                                    <span style=\\\"color:rgb(28,110,198)\\\">{{\\\" #\\\" + nt.task_id}}</span>\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                        <div *ngIf=\\\"nt.para_type == 'new_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; You have been assigned to task <span style=\\\"color:rgb(28,110,198)\\\">{{\\\" #\\\" + nt.task_id }}</span>\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                        <div *ngIf=\\\"nt.para_type == 'modified_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; Task <span style=\\\"color:rgb(28,110,198)\\\"> {{\\\" #\\\" + nt.task_id}}</span> has been <span style=\\\"color:rgb(28,110,198)\\\"> modified </span>                                                    by {{\\\" \\\" + nt.user | truncate : 8}}\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                        <div *ngIf=\\\"nt.para_type == 'status_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; Task\\n                                                    <span style=\\\"color:rgb(28,110,198)\\\"> {{\\\" #\\\" + nt.task_id}}</span> {{\\\" \\\" + nt.noti_title + \\\" \\\" | truncate : 30}}\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                        <div *ngIf=\\\"nt.para_type == 'extra_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; Task <span style=\\\"color:rgb(28,110,198)\\\"> {{\\\" #\\\" + nt.task_id}}</span> {{\\\" \\\" + nt.noti_title + \\\" \\\" | truncate\\n                                                    : 30}}\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </li>\\n                            <li class=\\\"footer\\\" *ngIf=\\\"notifications.length > 0\\\">\\n                                <a (click)=\\\"clearNotif()\\\">Close all notifications</a>\\n                            </li>\\n                        </ul>\\n                    </li>\\n                    <!-- Notifications: style can be found in dropdown.less\\n                <li class=\\\"dropdown notifications-menu\\\">\\n                  <a href=\\\"#\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                    <i class=\\\"fa fa-bell-o\\\"></i>\\n                    <span *ngIf=\\\"notifications.length > 0\\\" class=\\\"label label-danger\\\">{{notifications.length}}</span>\\n                  </a>\\n                  <ul class=\\\"dropdown-menu\\\">\\n                    <li class=\\\"header\\\">You have {{notifications.length}} notifications</li>\\n                    <li>\\n                      <ul class=\\\"menu\\\">\\n                        <li *ngFor=\\\"let nf of notifications\\\">\\n                          <a href=\\\"javascript:void(0)\\\" (click)=\\\"setNotify(nf.id_notification, nf.noti_iurl)\\\">\\n                            <i class=\\\"{{ nf.noti_label }}\\\"></i>{{nf.noti_title}}\\n                          </a>\\n                        </li>\\n                      </ul>\\n                    </li>\\n                    <li class=\\\"footer\\\"><a href=\\\"#\\\">View all</a></li>\\n                  </ul>\\n                </li> -->\\n                    <li class=\\\"menu-divider\\\" style=\\\"width: 2px;height: 30px;background-color: #dce3e6;top: 20px;left: 10px;position:relative;\\\">\\n                        <div></div>\\n                    </li>\\n                    <li *ngIf=\\\"user\\\" class=\\\"dropdown user user-menu\\\" style=\\\"margin-left: 40px;height: 50px;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" style=\\\"margin-top: 9px;background-color: #fff;color: #337ab7;border-radius: 5px;padding: 7px;margin-right: 20px;height: 36px;width: 38px;\\\">\\n                            <div>\\n                                <i class=\\\"sq sq-working-team\\\" style=\\\"color: #007bd2;font-size: 22px;padding: 2px;\\\"></i>\\n                                <!--<div class=\\\"thumbnail\\\">\\n                  <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                </div>-->\\n                                <!--<span class=\\\"hidden-xs\\\">{{user.user_name + ' ' + user.user_lastname}}</span>-->\\n                            </div>\\n                        </a>\\n                        <ul class=\\\"dropdown-menu session-panel\\\" style=\\\"top: 60px;right: 18px;padding: 0;\\\">\\n                            <!-- User image -->\\n                            <li class=\\\"user-header\\\" style=\\\"background-color:#dce3e6\\\">\\n                                <div>\\n                                    <div class=\\\"thumb-widget\\\" style=\\\"border-color: #007bd2;\\\">\\n                                        <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"img-widget\\\" alt=\\\"User Image\\\">\\n                                    </div>\\n                                    <p style=\\\"color:#5e6365;font-weight:bold;\\\">\\n                                        {{getNameUserNavBar()}}\\n                                        <small>{{ user.grop_name }}</small>\\n                                    </p>\\n                                </div>\\n                            </li>\\n                            <li class=\\\"user-footer\\\">\\n                                <div class=\\\"pull-left\\\">\\n                                </div>\\n                                <div class=\\\"pull-right\\\" style=\\\"width:85%;\\\">\\n                                    <a routerLink=\\\"/usersettings\\\" class=\\\"btn btn-default btn-flat\\\" style=\\\"border-radius: 20px;width: 100px;margin-left: 45px;color: #fff;background-color: #0fb4ff;border: none;font-weight: bolder;\\\">Edit Profile</a>\\n                                </div>\\n                            </li>\\n                        </ul>\\n                    </li>\\n                    <li class=\\\"dropdown tasks-menu\\\" (click)=\\\"logOut()\\\">\\n                        <a href=\\\"\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" style=\\\"font-size: 17px;height: 37px;margin-top: 9px;background-color: #fff;color: #337ab7;border-radius: 5px;padding: 10px;margin-right: 20px;\\\">\\n                            <i class=\\\"fa fa-sign-out\\\" aria-hidden=\\\"true\\\"></i>\\n                        </a>\\n                    </li>\\n                </ul>\\n            </div>\\n        </nav>\\n    </header>\\n    <!-- background: #042656; background: -webkit-linear-gradient(#042656, #176BCB); background: -o-linear-gradient(#042656, #176BCB); background: -moz-linear-gradient(#042656, #176BCB); background: linear-gradient(#042656, #176BCB); -->\\n    <aside class=\\\"main-sidebar\\\" style=\\\"margin-top: 40px; background-color: rgb(222, 232, 233);\\\">\\n        <section class=\\\"sidebar\\\">\\n            <!-- <div class=\\\"superother\\\" style=\\\"z-index: -1;\\\"> -->\\n            <div id=\\\"othernx\\\">\\n                <div id=\\\"neoxtop\\\"></div>\\n            </div>\\n            <!-- </div> -->\\n            <div class=\\\"user-panel\\\">\\n                <div class=\\\"pull-left image\\\">\\n                    <div style=\\\"width: 100%; height: 60px;\\\">\\n                        <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; position: relative; width:70px; height:70px; border-radius: 50%; overflow:hidden; top:-5px;\\\">\\n                            <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"left: 0px; top:0px; \\\">\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"pull-left info\\\" style=\\\"position: relative;\\\">\\n                    <p style=\\\"position: absolute; color:rgb(35,121,205); left: -30px; top:20px;\\\" [innerHTML]=\\\"getNameUser()\\\"></p>\\n                </div>\\n            </div>\\n            <div class=\\\"menu-scroll-sqlx\\\">\\n                <ul class=\\\"sidebar-menu\\\">\\n                    <li *ngFor=\\\"let p of activeMenu\\\" class=\\\"treeview sqlx-menu\\\" routerLinkActive=\\\"active\\\">\\n                        <a href=\\\"javascript:void(0)\\\">\\n                            <i class=\\\"{{ p.modu_classicon }}\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205)\\\"></i>\\n                            <span>{{ p.modu_name }}</span>\\n                            <small *ngIf=\\\"p.modu_isbeta != 0\\\" class=\\\"label pull-right bg-green\\\" style=\\\"margin-right: 20px;\\\">beta</small>\\n                            <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                        </a>\\n                        <ul class=\\\"treeview-menu\\\" *ngIf=\\\"p.childs && p.childs.length > 0\\\" style=\\\"margin-top:-1px;\\\">\\n                            <li *ngFor=\\\"let s of p.childs\\\" class=\\\"sqlx-menu\\\" routerLinkActive #rla=\\\"routerLinkActive\\\">\\n                                <a routerLink=\\\"/{{ s.modu_route | lowercase }}\\\" [ngStyle]=\\\"{'background-color':rla.isActive ? 'rgb(255,255,255)' : 'rgb(210,221,226)'}\\\">\\n                                    <i class=\\\"{{ s.modu_classicon }}\\\" style=\\\"color:rgb(35,121,205)\\\"></i> {{ s.modu_name }}\\n                                    <small *ngIf=\\\"s.modu_isbeta != 0\\\" class=\\\"label pull-right bg-green\\\">beta</small>\\n                                </a>\\n                                <a href=\\\"javascript:void(0)\\\" *ngIf=\\\"s.modu_grandchild == 2\\\">\\n                                    <i class=\\\"{{ s.modu_classicon }}\\\" style=\\\"color:rgb(35,121,205)\\\"></i> {{ s.modu_name }}\\n                                    <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                </a>\\n                                <ul class=\\\"treeview-menu\\\" *ngIf=\\\"s.grandchildrens && s.grandchildrens.length > 0\\\" style=\\\"margin-top:-1px;\\\">\\n                                    <li *ngFor=\\\"let n of s.grandchildrens\\\" class=\\\"sqlx-menu\\\">\\n                                        <a routerLink=\\\"/{{s.modu_route}}\\\" fragment=\\\"{{n.modu_route}}\\\">\\n                                            <i class=\\\"{{ n.modu_classicon }}\\\" style=\\\"color:rgb(35,121,205)\\\"></i> {{ n.modu_name }} </a>\\n                                    </li>\\n                                    <!-- <a routerLink=\\\"/{{s.modu_route}}\\\" (click)=\\\"ngAfterViewInit()\\\" fragment=\\\"{{n.modu_route}}\\\">\\n                    <i class=\\\"{{ n.modu_classicon }}\\\" style=\\\"color:rgb(35,121,205)\\\"></i> {{ n.modu_name }} </a> -->\\n                                </ul>\\n                            </li>\\n                        </ul>\\n\\n                    </li>\\n                </ul>\\n            </div>\\n\\n        </section>\\n        <!-- /.sidebar -->\\n    </aside>\\n</div>\";\n\n/***/ }),\n/* 817 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"dashboard\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section id=\\\"header-dashboard\\\" class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-dashboard\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> DASHBOARD\\n      <small style=\\\"font-size:15px;\\\">Home</small>\\n    </h2>\\n  </section>\\n\\n  <!-- Main content -->\\n  <section id=\\\"content-dashboard\\\" class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-7 no-padding\\\">\\n        <div class=\\\"col-xs-12 col-md-12 col-lg-4 no-padding\\\">\\n          <div class=\\\" picture-task task-pending\\\">\\n            <div class=\\\"box-header border-pending header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"sq sq-pending\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:25px;\\\"> </i> pending\\n              </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-6 counter-pending task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showpend-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('pending')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_pend}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-5\\\">\\n                <div *ngIf=\\\"percentage_pend >0\\\" class=\\\"progress-bar-sqlx\\\" style=\\\"margin:16px 0px 5px 0px;\\\">\\n                  <div class=\\\"info-pending\\\" [ngStyle]=\\\"{ 'width': percentage_pend + '%' }\\\"></div>\\n                </div>\\n                <div *ngIf=\\\"percentage_pend == 0\\\" class=\\\"progress-bar-sqlx\\\" style=\\\"margin:16px 0px 5px 0px;\\\">\\n                  <div class=\\\"info-pending\\\" style=\\\"width:0%;background-color:transparent;\\\"></div>\\n                </div>\\n                <span style=\\\"color: #ffffff; font-weight: bold;\\\">Sprint deadline</span>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <!--PENDING-->\\n        <div class=\\\"col-xs-12  col-md-12 col-lg-4 no-padding\\\">\\n          <div class=\\\"picture-task task-developing\\\">\\n            <div class=\\\"box-header border-developing header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"sq sq-developing\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:25px;\\\"> </i> developing </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-6 counter-developing task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showdev-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('developing')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_deve}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-6\\\" style=\\\"padding:5px;\\\">\\n                <div class=\\\"dashboard-box-radius success c100 p{{percentage_deve_aprox}} small\\\">\\n                  <span style=\\\"color: white;\\\">{{percentage_deve_aprox}}%</span>\\n                  <div class=\\\"slice\\\">\\n                    <div class=\\\"success bar\\\"></div>\\n                    <div class=\\\"success fill\\\"></div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <!--DEVELOPING-->\\n        <div class=\\\"col-xs-12  col-md-12 col-lg-4 no-padding\\\">\\n          <div class=\\\"picture-task task-improving\\\">\\n            <div class=\\\"box-header border-improving header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"sq sq-improving\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:25px;\\\"></i> improving\\n              </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-6 counter-improving task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showimp-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('improving')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_imp}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-6\\\" style=\\\"padding:5px;\\\">\\n                <div class=\\\"dashboard-box-radius warning c100 p{{percentage_impr_aprox}} small\\\">\\n                  <span style=\\\"color: white;\\\">{{percentage_impr_aprox}}%</span>\\n                  <div class=\\\"slice\\\">\\n                    <div class=\\\"warning bar\\\"></div>\\n                    <div class=\\\"warning fill\\\"></div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <!--IMPROVING-->\\n      </div>\\n      <!--CLOSE COL-7-->\\n      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 no-padding\\\">\\n        <div class=\\\"col-xs-12 col-md-12 col-lg-6 no-padding\\\">\\n          <div class=\\\"picture-task task-expiring\\\">\\n            <div class=\\\"box-header border-expiring header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"fa fa-exclamation-circle\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:28px;\\\"> </i> expiring </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-6 counter-expiring task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showexpi-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('expiring')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_expi}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-6\\\" style=\\\"padding:5px;\\\">\\n                <div class=\\\"dashboard-box-radius danger c100 p{{percentage_expi_aprox}} small\\\">\\n                  <span style=\\\"color: white;\\\">{{percentage_expi_aprox}}%</span>\\n                  <div class=\\\"slice\\\">\\n                    <div class=\\\"danger bar\\\"></div>\\n                    <div class=\\\"danger fill\\\"></div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-xs-12 col-md-12 col-lg-6 no-padding\\\">\\n          <div class=\\\"picture-task task-backlog\\\">\\n            <div class=\\\"box-header border-backlog header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"sq sq-backlog\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:25px;\\\"></i> backlog </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-5 counter-backlog task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showback-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('backlog')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_back}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <!--CLOSE COL-5-->\\n    </div>\\n    <!--row principal-->\\n    <div class=\\\"row\\\" style=\\\"margin-top: 10px;\\\">\\n      <div id=\\\"burndown-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6\\\">\\n        <div class=\\\"box box-success burndown-border\\\">\\n          <div class=\\\"box-header with-border border-burndown\\\">\\n            <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 btns-burndown\\\" style=\\\"padding:0;\\\">\\n              <div class=\\\"box-tittle BurnDown\\\" style=\\\"padding-top: 5px;\\\">\\n                <i class=\\\"sq sq-burndown\\\" aria-hidden=\\\"true\\\"></i>\\n                <div class=\\\"burndownsprint\\\">BurnDown</div>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 btns-burndown\\\" style=\\\"padding-left:0;\\\">\\n              <button id=\\\"burndown-dashboard-minus-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-box-tool btn-minus pull-right\\\"\\n                data-widget=\\\"collapse\\\">\\n                <i class=\\\"fa fa-minus\\\"></i>\\n              </button>\\n              <div class=\\\"pull-right\\\" id=\\\"button-work-team\\\" style=\\\"margin-top: 7px;\\\">\\n                <a id=\\\"showburndown-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showburndown()\\\">YOUR WORK TEAM<i\\n                    class=\\\"fa fa-chevron-down\\\" aria-hidden=\\\"true\\\"></i></a>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <p-chart id=\\\"burndowndata-dashboard\\\" type=\\\"line\\\" [data]=\\\"burndownData\\\" (onDataSelect)=\\\"chartClicked($event)\\\"\\n              height=\\\"200\\\"></p-chart>\\n          </div>\\n        </div>\\n      </div>\\n      <div id=\\\"todolist-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6\\\">\\n        <div class=\\\"box box-primary border-todolist\\\">\\n          <div class=\\\"box-header box-list\\\" style=\\\"margin-left: 20px; margin-right: 20px;\\\">\\n            <div class=\\\"pull-left box-todo-list col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <h3 class=\\\"box-title\\\" style=\\\"color:#707070; font-weight: bold; margin-left:10px;\\\">\\n                <i class=\\\"sq sq-todolist\\\" aria-hidden=\\\"true\\\" style=\\\"margin:15px 10px 0px 10px; font-size:30px;\\\"></i>\\n                TO DO LIST </h3>\\n            </div>\\n          </div>\\n          <!-- /.box-header -->\\n          <div id=\\\"content-todolist-dashboard\\\" class=\\\"box-body\\\" style=\\\"height: 393px;\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"panel panel-successl\\\">\\n                  <div class=\\\"panel-bodylist\\\" style=\\\"overflow-y: scroll; width:100%; height:381px;\\\">\\n\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_taskDeveloping_todolist\\\" style=\\\"padding-left: 0px;\\\">\\n                      <div *ngFor=\\\"let task of tasksMySprint\\\">\\n                        <div *ngIf=\\\"task.para_status == '38'\\\">\\n                          <div class=\\\"contenedorInfoLevels_todoList\\\">\\n                            <div class=\\\"infoLevels_todoList\\\" [ngStyle]=\\\"task.tklv_level == '0' ? {'background-color':'#cfcfcf'} : task.tklv_level == '1' ? {'background-color':'#fdd835'} : task.tklv_level == '2' ? {'background-color':'#8bc34a'} : task.tklv_level == '3' ? {'background-color':'#ffa726'} : {'background-color':'#f4511e'} \\\">{{task.tklv_level}}</div>\\n                          </div>\\n                          <div class=\\\"contenedorInfo_tasks_todolist\\\" style=\\\"float: left; width: 90%\\\">\\n                            <span class=\\\"infoTaskId_todolist\\\">{{task.task_id}}</span> - <a class=\\\"infoTaskSubject_todolist\\\"\\n                              (click)=\\\"showModaltk(task.task_id)\\\">{{task.task_subject}}</a>\\n                            <taskview [myTaskId]=\\\"task.task_id\\\"></taskview>\\n                            <small style=\\\" margin: 0px;padding-right: 0px;color: #92cc66; margin-left: 10px;\\\">\\n                              <i class=\\\"fa fa-caret-left\\\"></i>\\n                            </small>\\n                            <small class=\\\"statusTaskShared task-developing\\\" style=\\\"margin-left: -4px; font-size: 12px;\\\">\\n                              <i class=\\\"sq sq-developing\\\"></i> Developing\\n                            </small>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"taskInDeveloping && taskInPending\\\" class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 separator_tasks_todolist\\\"\\n                      style=\\\" width: 96.5%;\\\"></div>\\n\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_taskPending_todolist\\\" style=\\\"padding-left: 0px;\\\">\\n                      <div *ngFor=\\\"let task of tasksMySprint\\\">\\n                        <div *ngIf=\\\"task.para_status == '35' || task.para_status == '36' || task.para_status == '37'\\\">\\n                          <div class=\\\"contenedorInfoLevels_todoList\\\">\\n                            <div class=\\\"infoLevels_todoList\\\" [ngStyle]=\\\"task.tklv_level == '0' ? {'background-color':'#cfcfcf'} : task.tklv_level == '1' ? {'background-color':'#fdd835'} : task.tklv_level == '2' ? {'background-color':'#8bc34a'} : task.tklv_level == '3' ? {'background-color':'#ffa726'} : {'background-color':'#f4511e'} \\\">{{task.tklv_level}}</div>\\n                          </div>\\n                          <div class=\\\"contenedorInfo_tasks_todolist\\\" style=\\\"float: left; width: 90%\\\">\\n                            <span class=\\\"infoTaskId_todolist\\\">{{task.task_id}} - </span><a class=\\\"infoTaskSubject_todolist\\\"\\n                              (click)=\\\"showModaltk(task.task_id)\\\">{{task.task_subject}}</a>\\n                            <taskview [myTaskId]=\\\"task.task_id\\\"></taskview>\\n                            <small style=\\\" margin: 0px;padding-right: 0px;color: #0fb4ff; margin-left: 10px;\\\">\\n                              <i class=\\\"fa fa-caret-left\\\"></i>\\n                            </small>\\n                            <small class=\\\"statusTaskShared task-pending \\\" style=\\\"margin-left: -4px; font-size: 12px;\\\">\\n                              <i class=\\\"sq sq-pending\\\"></i> Pending\\n                            </small>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n\\n                    <div *ngIf=\\\"myMeetings && myMeetings.length > 0  && taskInPending\\\" class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 separator_tasks_todolist\\\"\\n                      style=\\\"width: 96.5%;\\\"></div>\\n\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_taskPending_todolist\\\" style=\\\"padding-left: 0px;\\\">\\n                      <div *ngFor=\\\"let meeting of myMeetings\\\">\\n                        <div class=\\\"contenedorInfoLevels_todoList\\\">\\n                          <div class=\\\"infoLevels_eventsScheduler_todoList\\\">{{meeting.level}}</div>\\n                        </div>\\n                        <div class=\\\"contenedorInfo_tasks_todolist\\\" style=\\\"float: left; width: 90%\\\">\\n                          <span class=\\\"infoEvents_todolist\\\">{{meeting.meet_text}}</span>\\n                          <small style=\\\" margin: 0px;padding-right: 0px;color: rgb(101,164,218); margin-left: 10px;\\\">\\n                            <i class=\\\"fa fa-caret-left\\\"></i>\\n                          </small>\\n                          <small class=\\\"statusTaskShared event_todolist \\\" style=\\\"margin-left: -4px; font-size: 12px;\\\">\\n                            <i class=\\\"sq sq-scrum\\\"></i> Event\\n                          </small>\\n                        </div>\\n                      </div>\\n                    </div>\\n\\n                    <div *ngIf=\\\"mySchedulers && mySchedulers.length > 0\\\" class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 separator_tasks_todolist\\\"\\n                      style=\\\"width: 96.5%;\\\"></div>\\n\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_taskPending_todolist\\\" style=\\\"padding-left: 0px;\\\">\\n                      <div *ngFor=\\\"let scheduler of mySchedulers\\\">\\n                        <div class=\\\"contenedorInfoLevels_todoList\\\">\\n                          <div class=\\\"infoLevels_eventsScheduler_todoList\\\">{{scheduler.level}}</div>\\n                        </div>\\n                        <div class=\\\"contenedorInfo_tasks_todolist\\\" style=\\\"float: left; width: 90%\\\">\\n                          <span class=\\\"infoEvents_todolist\\\">{{scheduler.sche_title}}</span>\\n                          <small style=\\\" margin: 0px;padding-right: 0px;color: rgb(125,224,233); margin-left: 10px;\\\">\\n                            <i class=\\\"fa fa-caret-left\\\"></i>\\n                          </small>\\n                          <small class=\\\"statusTaskShared scheduler_todolist \\\" style=\\\"margin-left: -4px; font-size: 12px;\\\">\\n                            <i class=\\\"sq sq-scheduler\\\"></i> Scheduler\\n                          </small>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <!-- /.box-body -->\\n        </div>\\n      </div>\\n      <!-- /.col -->\\n    </div>\\n    <!-- /.row -->\\n\\n    <div class=\\\"row\\\">\\n      <div id=\\\"notifications-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6 notifications-types\\\">\\n        <div class=\\\"box box-success box-notifications\\\">\\n          <div class=\\\"box-header with-border header-notifications\\\">\\n            <div class=\\\"pull-left col-xs-8 col-sm-8 col-md-8 col-lg-8\\\">\\n              <div class=\\\"pull-left col-xs-1 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"padding-left:0px; text-align:left; font-size: 2em;\\\">\\n                <i class=\\\"sq sq-notifications\\\"></i>\\n              </div>\\n              <div class=\\\"pull-right col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"text-align:left; font-size: 18px; font-weight: bold; margin:-40px 27px;\\\">Notifications\\n                ({{ notifications.length }}) </div>\\n            </div>\\n            <div class=\\\"box-tools pull-right col-xs-4 col-sm-4 col-md-4 col-lg-4\\\" style=\\\"text-align:right;\\\">\\n              <button id=\\\"notifications-minus-dashboard\\\" type=\\\"button\\\" class=\\\"bttn-notifications\\\" data-widget=\\\"collapse\\\">\\n                <i class=\\\"fa fa-minus\\\" style=\\\"font-size:23px;\\\"></i>\\n              </button>\\n              <button id=\\\"notifications-clear-dashboard\\\" type=\\\"button\\\" class=\\\"bttn-notifications\\\" (click)=\\\"clearNotif()\\\">\\n                <i class=\\\"sq sq-delete\\\" style=\\\"font-size:1.4em;\\\"></i>\\n              </button>\\n            </div>\\n            <!--box tools-->\\n          </div>\\n          <!--box header-->\\n\\n          <div class=\\\"box-body chat-notif\\\" style=\\\"width:100%; height: 500px; overflow-y:scroll;\\\">\\n            <div class=\\\"item\\\" *ngFor=\\\"let nt of notifications\\\">\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'new_task'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\" style=\\\"text-decoration: none;\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    <span>{{ nt.noti_title }} </span> task\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                    <span> Task : </span>{{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n                  <div class=\\\"btn-goto-task pull-right\\\">\\n                    <button id=\\\"mdtask-notif-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\"\\n                      (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\">\\n                      <span style=\\\"font-weight: bold;\\\">go to task </span>\\n                    </button>\\n                  </div>\\n                </div>\\n                <!--TASK-->\\n              </div>\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'comment_task'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    <span> {{ nt.noti_title }} </span> task\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n                  <div class=\\\"btn-ViewMore pull-right\\\">\\n                    <button id=\\\"viewTask_commentTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\"\\n                      *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\">\\n                      <span style=\\\"font-weight: bold;\\\">View task</span>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--comments-task-->\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'status_task'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    - Task #{{nt.task_id + \\\" \\\"}}<span> {{ nt.noti_title }} </span>\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n                  <div class=\\\"btn-ViewMore pull-right\\\">\\n                    <button id=\\\"viewTask_statusTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\"\\n                      *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\">\\n                      <span style=\\\"font-weight: bold;\\\">View task</span>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--status-task-->\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'extra_task'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    - Task #{{nt.task_id + \\\" \\\"}}<span> {{ nt.noti_title }} </span>\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n                  <div class=\\\"btn-ViewMore pull-right\\\">\\n                    <button id=\\\"viewTask_extraTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\"\\n                      *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\">\\n                      <span style=\\\"font-weight: bold;\\\">View task</span>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--extra-task-->\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'comment_proj'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    <span>{{ nt.noti_title }} </span> project\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i>\\n                    {{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n\\n                  <div class=\\\"pull-right btn-send-task\\\">\\n                    <button id=\\\"mdproject-notif-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.proj_id\\\"\\n                      (click)=\\\"showProject(nt.proj_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdprojectView\\\" style=\\\"background-color:#47B5FB; border-radius:10px; color:white; font-size: 15px; font-weight: bold;\\\">\\n                      <span>View Project</span>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--comments project-->\\n              <taskview [myTaskId]=\\\"nt.task_id\\\"></taskview>\\n            </div>\\n            <!--.ngfor-->\\n          </div>\\n          <!--box-body-->\\n        </div>\\n        <!--box success-->\\n      </div>\\n\\n      <div id=\\\"calendar-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6 notifications-types\\\">\\n        <div class=\\\"box box-success box-notifications\\\">\\n          <div class=\\\"box-header with-border header-notifications-sq\\\">\\n            <div class=\\\"pull-left col-xs-8 col-sm-8 col-md-8 col-lg-8\\\">\\n              <div class=\\\"pull-left col-xs-1 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"padding-left:0px; text-align:left; font-size: 2em;\\\">\\n                <i class=\\\"sq sq-calendar\\\" style=\\\"font-size: 32px;\\\"></i>\\n              </div>\\n              <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"text-align:left; font-size: 18px; font-weight: bold; margin:-34px 28px;\\\">CALENDAR\\n              </div>\\n            </div>\\n            <div class=\\\"box-tools pull-right col-xs-4 col-sm-4 col-md-4 col-lg-4\\\" style=\\\"text-align:right; top: -2px;\\\">\\n              <button id=\\\"calendar-clear-dashboard\\\" type=\\\"button\\\" class=\\\" dropdown-toggle bttn-notifications\\\"\\n                data-toggle=\\\"dropdown\\\">\\n                <i class=\\\"sq sq-scheduler\\\" style=\\\"font-size:1.4em;\\\"></i>\\n              </button>\\n              <ul class=\\\"dropdown-menu pull-right\\\" role=\\\"menu\\\">\\n                <li>\\n                  <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(1)\\\">Add New Scheduler</a>\\n                </li>\\n                <li class=\\\"divider\\\"></li>\\n                <li>\\n                  <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(0)\\\">Add New Meeting</a>\\n                </li>\\n              </ul>\\n              <button id=\\\"calendar-minus-dashboard\\\" type=\\\"button\\\" class=\\\"bttn-notifications\\\" data-widget=\\\"collapse\\\">\\n                <i class=\\\"fa fa-minus\\\" style=\\\"font-size:23px;\\\"></i>\\n              </button>\\n            </div>\\n            <!--box tools-->\\n          </div>\\n          <!--box header-->\\n\\n          <div id=\\\"calendar-sq\\\" class=\\\"box-body chat-notif calendar-sq\\\" style=\\\"width:100%; padding: 10px!important; background-color: rgb(72,183,248);\\\">\\n            <p-calendar class=\\\"ui-g ui-fluid\\\" [inline]=\\\"true\\\">\\n            </p-calendar>\\n          </div>\\n          <!--box-body-->\\n        </div>\\n        <!--box success-->\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdprojectView\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"project-modal-body\\\">\\n          <div class=\\\"project-modal-panel col-xs-4 col-sm-4 col-md-6 col-lg-6\\\" style=\\\"padding-right: 4px;\\\">\\n            <div class=\\\"project-modal-header\\\">\\n              <button id=\\\"btnX_mdprojectView_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                style=\\\"float: left;\\\">\\n                <span aria-hidden=\\\"true\\\">&times;</span>\\n              </button>\\n              <p class=\\\"project-modal-title\\\"># {{+ project.proj_id + \\\" - \\\" + project.proj_subject }}</p>\\n            </div>\\n            <div id=\\\"mdproject-infoproject-dashboard\\\" class=\\\"project-modal-content\\\">\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>User Applicant</label>\\n                  <p>{{ project.applicant }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>User Creator</label>\\n                  <p>{{ project.creator }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Group</label>\\n                  <p>{{ project.groupname }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Product</label>\\n                  <p>{{ project.prod_name }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Category</label>\\n                  <p>{{ project.category }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-8\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Stakeholders</label>\\n                  <p>{{ project.states }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Share with</label>\\n                  <div>\\n                    <!-- <span *ngFor=\\\"let uss of project.userssh\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px; display: inline-block;\\\">{{uss.user_name + ' ' + uss.user_lastname }}</span> -->\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Description</label>\\n                  <div [innerHTML]=\\\"escapeHtml(project.proj_description)\\\"></div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div id=\\\"messagePanel\\\" class=\\\"col-xs-8 col-sm-8 col-md-6 col-lg-6\\\" style=\\\"max-height: 550px;\\\">\\n            <div style=\\\"position: absolute; bottom: 0px; left: -40px; width: 50px;\\\">\\n              <ul class=\\\"nav\\\">\\n                <li class=\\\"item-proj active\\\">\\n                  <a id=\\\"mdproject-mdtasks-dashboard\\\" data-toggle=\\\"tab\\\" href=\\\"#mdTasks\\\">\\n                    <i class=\\\"fa fa-thumb-tack\\\" aria-hidden=\\\"true\\\"></i>\\n                  </a>\\n                </li>\\n                <li class=\\\"item-proj\\\">\\n                  <a id=\\\"mdproject-mdcomments-dashboard\\\" data-toggle=\\\"tab\\\" href=\\\"#mdComments\\\">\\n                    <i class=\\\"fa fa-comments\\\" aria-hidden=\\\"true\\\"></i>\\n                  </a>\\n                </li>\\n                <li class=\\\"item-proj\\\">\\n                  <a id=\\\"mdproject-mdusers-dashboard\\\" data-toggle=\\\"tab\\\" href=\\\"#mdUsers\\\">\\n                    <i class=\\\"fa fa-users\\\" aria-hidden=\\\"true\\\"></i>\\n                  </a>\\n                </li>\\n              </ul>\\n            </div>\\n            <div class=\\\"tab-content\\\">\\n              <div id=\\\"mdTasks\\\" class=\\\"tab-pane fade in active\\\">\\n                <div class=\\\"simply-title\\\">\\n                  Tasks\\n                </div>\\n                <div class=\\\"box-body\\\" id=\\\"message-box\\\">\\n                  <div class=\\\"task-cell\\\" *ngFor=\\\"let tk of project.tasklist\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                      #{{ tk.task_id + \\\" \\\" + tk.task_subject }}\\n                    </div>\\n                    <div class=\\\"col-md-12\\\" [innerHTML]=\\\"tk.task_description\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                      <b>Request:</b>\\n                      <br />{{ tk.task_date }}</div>\\n                    <div class=\\\"col-md-6\\\">\\n                      <b>Delivery:</b>\\n                      <br />{{ tk.datedelivery ? tk.datedelivery : \\\"Undefined\\\" }}</div>\\n                    <div class=\\\"col-md-6\\\">\\n                      <b>Applicant:</b>\\n                      <br />{{ tk.creator }}</div>\\n                    <div class=\\\"col-md-6\\\">\\n                      <b>Status:</b>\\n                      <br />{{ tk.task_percentage }} %</div>\\n                    <div class=\\\"col-md-12\\\">\\n                      <button id=\\\"viewmore-mdtask-dashboard\\\" data-dismiss=\\\"modal\\\" class=\\\"btn btn-primary pull-right\\\"><a\\n                          [routerLink]=\\\"['/task', tk.task_id]\\\" style=\\\"color:white;\\\">View More</a></button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div id=\\\"mdComments\\\" class=\\\"tab-pane fade\\\">\\n                <div class=\\\"simply-title\\\">\\n                  Comments\\n                </div>\\n                <div class=\\\"box-body chat\\\" id=\\\"chat-box\\\">\\n                  <div class=\\\"item\\\" *ngFor=\\\"let msg of project.messages\\\" style=\\\"padding-top: 10px;\\\">\\n                    <div class=\\\"col-md-2 no-padding\\\">\\n                      <img style=\\\"border: 1px solid; border-radius: 45px; height: 40px; width: 40px;\\\" [src]=\\\"msg.urlimg\\\"\\n                        onError=\\\"this.src='img/logo_menu_min.svg'\\\" alt=\\\"user image\\\" class=\\\"online\\\">\\n                    </div>\\n                    <div class=\\\"col-md-10\\\">\\n                      <a class=\\\"name\\\">{{ msg.creator }}</a>\\n                      <div [innerHTML]=\\\"msg.note_text\\\"></div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div class=\\\"box-footer\\\">\\n                  <div class=\\\"input-group\\\">\\n                    <input id=\\\"note_text-mdComments\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"note.note_text\\\" placeholder=\\\"Type message...\\\">\\n                    <div class=\\\"input-group-btn\\\">\\n                      <button id=\\\"label-mdComments\\\" type=\\\"button\\\" class=\\\"btn btn-{{ project.label }}\\\" (click)=\\\"sendMessage(project.proj_id)\\\">\\n                        <i class=\\\"fa fa-plus\\\"></i>\\n                      </button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div id=\\\"mdUsers\\\" class=\\\"tab-pane fade\\\">\\n                <h3></h3>\\n                <p> </p>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" style=\\\"background: rgb(237,245,247);\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"btnClose_mdprojectView_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdDayView\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" id=\\\"contenedorDayView_mdDayView_dashboard\\\" name=\\\"contenedorDayView_mdDayView_dashboard\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n              class=\\\"sq sq-close\\\" style=\\\"color:white;font-weight: bold;font-size: 20px;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color:white;font-weight: bold;font-size: 18px;text-transform: uppercase;\\\"><i\\n              class=\\\"sq sq-burndown\\\" style=\\\"font-weight: bold;font-size: 33px;\\\"></i> Day Job for {{dayJob}} </h4>\\n        </div>\\n        <div class=\\\"content-comments-users\\\" style=\\\"max-height: 190px;min-height: 75px;overflow: scroll;\\\">\\n          <div class=\\\"box-body\\\" style=\\\"margin-top:10px;\\\" id=\\\"descriptionInfoDayView_dashboard\\\" name=\\\"descriptionInfoDayView_dashboard\\\">\\n            <ul class=\\\"timeline daily-timeline\\\">\\n              <li *ngFor=\\\"let day of dayView\\\" style=\\\"padding-bottom:5px;\\\">\\n                <i class=\\\"fa fa-dot-circle-o\\\" style=\\\"color: rgb(68, 180, 248); font-size: 30px;background-color: transparent;margin-left: -3px; margin-top: -3px;\\\"></i>\\n                <div class=\\\"timeline-item daily-timeline-item\\\">\\n                  <h3 class=\\\"timeline-header timeline-dailyheader\\\">\\n                    <span *ngIf=\\\"day.task_id && day.task_id != null\\\" [ngStyle]=\\\"day.spri_id == null ? { 'color': 'red' } : {}\\\">\\n                      <b>TASK #{{day.task_id}}</b><br>\\n                    </span>\\n\\n                    <b>Points registered:\\n                      {{day.dail_points}}</b>\\n                    <span *ngIf=\\\"day.task_percentage && day.task_percentage != 0\\\" style=\\\"font-weight: bold;margin-left: 263px;\\\">Progress:\\n                      {{day.task_percentage}}%</span>\\n                  </h3>\\n                  <div class=\\\"timeline-body daily-timeline-body\\\" style=\\\"margin-top: -8px;max-height: 45px;overflow: scroll;color:rgb(167, 167, 167); width: 93%;text-align: justify;\\\">\\n                    {{\\\"Comments: \\\" + escapeHtml(day.dail_text)}}\\n                  </div>\\n                </div>\\n              </li>\\n            </ul>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"totalp && totalp > 0\\\" style=\\\"border: none; text-align: center;\\\">\\n          <h4 style=\\\"font-weight: bold;font-size: 14px;\\\"> TOTAL POINTS REGISTERED : {{\\\" \\\" + totalp}} </h4>\\n        </div>\\n        <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n          <button id=\\\"close2-mdDayView-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(141,180,95);\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdNotification\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button id=\\\"btnX_mdNotification_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">{{ noti.noti_title }}</h4>\\n        </div>\\n        <div id=\\\"mdNotification-info-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">User</label>\\n              <p>{{ noti.user }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Date</label>\\n              <p>{{ noti.noti_updated }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Class</label>\\n              <p>{{ noti.class }}</p>\\n            </div>\\n            <div class=\\\"col-xs-12 col-md-12\\\" [innerHTML]=\\\"noti.noti_description\\\">\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"btnClose_mdNotification_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <button id=\\\"openschedule\\\" #openschedule [hidden]=\\\"true\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdSchedule\\\"></button>\\n  <div class=\\\"modal fade\\\" id=\\\"mdSchedule\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button id=\\\"btnX_mdSchedule_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">{{ sh.tittle }}</h4>\\n        </div>\\n        <div id=\\\"mdSchedule-info-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Date</label>\\n              <p>{{ sh.start }}</p>\\n            </div>\\n            <div *ngIf=\\\"sh.end\\\" class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">End</label>\\n              <p>{{ sh.end }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Place</label>\\n              <p>{{ sh.place }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Category</label>\\n              <p>{{ sh.category }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">User</label>\\n              <p>{{ sh.user}}</p>\\n            </div>\\n            <!-- <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Shared with</label>\\n              <p>{{ sh.guests }}</p>\\n            </div> -->\\n            <div class=\\\"col-xs-12 col-md-12\\\">\\n              <label class=\\\"control-label\\\">Description</label>\\n              <div class=\\\"col-xs-12 col-md-12\\\" [innerHTML]=\\\"sh.description\\\">\\n              </div>\\n            </div>\\n\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"btnClose_mdSchedule_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddScheduler\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-workteam\\\">\\n          <button id=\\\"btnX_mdAddScheduler_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color: #ffffff; opacity: 1;\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Schedule</h4>\\n        </div>\\n        <div id=\\\"form-mdAddScheduler-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Start Date</label>\\n                <p-calendar id=\\\"sche_start-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"scheduler.sche_start\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <!-- Start Date -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>End Date</label>\\n                <p-calendar id=\\\"sche_end-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"scheduler.sche_end\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <!-- End Date -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Tittle</label>\\n                <input id=\\\"sche_title-mdAddScheduler-dashboard\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"scheduler.sche_title\\\"\\n                  placeholder=\\\"Scheduler Tittle\\\">\\n              </div>\\n            </div>\\n            <!-- Scheduler Tittle -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>User</label>\\n                <p-dropdown id=\\\"user_id-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                  [(ngModel)]=\\\"scheduler.user_id\\\" placeholder=\\\"Select User\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Scheduler User -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Category</label>\\n                <p-dropdown id=\\\"para_category-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"catsche\\\" [(ngModel)]=\\\"scheduler.para_category\\\" placeholder=\\\"Select Category\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Scheduler Category -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Status</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stssche\\\" [(ngModel)]=\\\"scheduler.para_status\\\"\\n                  placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Scheduler Status -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Place</label>\\n                <p-dropdown id=\\\"para_place-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"plsch\\\" [(ngModel)]=\\\"scheduler.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Scheduler Place -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Description</label>\\n                <p-editor id=\\\"sche_description-mdAddScheduler-dashboard\\\" [(ngModel)]=\\\"scheduler.sche_description\\\"\\n                  [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n              </div>\\n            </div>\\n            <!-- Scheduler Description -->\\n          </div>\\n          <!-- .row -->\\n        </div>\\n        <!-- modal-body -->\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"btnClose_mdAddScheduler_dashboard\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n              data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" id=\\\"savesche-mdAddScheduler-dashboard\\\" type=\\\"button\\\"\\n              class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!scheduler.sche_description || scheduler.sche_description == '' || scheduler.sche_description == 'undefined') || (!scheduler.user_id) || (!scheduler.para_category) || (!scheduler.para_status) || (!scheduler.sche_start != '') || (!scheduler.sche_end != '') || (!scheduler.para_place)\\\"\\n              (click)=\\\"saveScheduler()\\\"><i class=\\\"fa fa-floppy-o\\\"></i> Save\\n            </button>\\n          </div>\\n        </div>\\n        <!-- modal-footer -->\\n      </div>\\n      <!-- modal-content -->\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddMeeting\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-workteam\\\">\\n          <button id=\\\"btnX_mdAddMeeting_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color: #ffffff; opacity: 1;\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Meeting</h4>\\n        </div>\\n        <div id=\\\"form-mdAddMeeting-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Date</label>\\n                <p-calendar id=\\\"datetime-mdAddMeeting-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"meeting.datetime\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showTime]=\\\"true\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Status</label>\\n                <p-dropdown id=\\\"para_status-mdAddMeeting-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stssche\\\"\\n                  [(ngModel)]=\\\"meeting.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Status Place -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Meeting Title</label>\\n                <input id=\\\"meet_text-mdAddMeeting-dashboard\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"meeting.meet_text\\\"\\n                  placeholder=\\\"Meeting Title\\\">\\n              </div>\\n            </div>\\n            <!-- Meeting Tittle -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Place</label>\\n                <p-dropdown id=\\\"para_place-mdAddMeeting-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plsch\\\"\\n                  [(ngModel)]=\\\"meeting.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Share with</label>\\n                <span class=\\\"ui-fluid\\\">\\n                  <p-autoComplete id=\\\"usershared-mdAddMeeting-dashboard\\\" [(ngModel)]=\\\"meeting.usershared\\\" [suggestions]=\\\"usersCRM\\\"\\n                    (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share\\\"\\n                    field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                  </p-autoComplete>\\n                </span>\\n              </div>\\n            </div>\\n          </div>\\n          <!-- .row -->\\n        </div>\\n        <!-- modal-body -->\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"btnClose_mdAddMeeting_dashboard\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n              data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" id=\\\"savemeet-mdAddMeeting-dashboard\\\" type=\\\"button\\\"\\n              class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!meeting.meet_text || meeting.meet_text == '') || (!meeting.para_place) || (!meeting.datetime != '') || (!meeting.para_status)|| (!meeting.usershared || meeting.usershared.length <= 0)\\\"\\n              (click)=\\\"saveMeeting()\\\">\\n              <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n            </button>\\n          </div>\\n        </div>\\n        <!-- modal-footer -->\\n      </div>\\n      <!-- modal-content -->\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdBurndown\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-workteam\\\">\\n          <button id=\\\"btnX_mdBurndown_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color: #ffffff; opacity: 1;\\\" (click)=\\\"doneFilter()\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h3 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">Select work team</h3>\\n        </div>\\n        <!--.modal-header-->\\n        <div id=\\\"search-mdBurndown-dashboard\\\" class=\\\"modal-body\\\" style=\\\"height:100%;\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 search-work-team\\\" style=\\\"padding-right: 3px;\\\">\\n              <div class=\\\"pull left col-xs-11 col-sm-11 col-md-11 col-lg-11 label-input-mainfilter\\\" style=\\\" padding: 0; margin-left: 0;\\\">\\n                <input id=\\\"searchuser-mdBurndown-dashboard\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"Search\\\"\\n                  [(ngModel)]=\\\"searchuser\\\" style=\\\"font-weight: bold; font-size: 17px;\\\">\\n              </div>\\n              <div class=\\\"pull-right col-xs-1 col-sm-1 col-md-1 col-lg-1 search-input-mainfilter\\\" style=\\\"margin: 0; padding: 0;\\\">\\n                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248); font-size: 1.8em;\\\"></i>\\n              </div>\\n            </div>\\n          </div>\\n          <div id=\\\"select-mdBurndown-dashboard\\\" class=\\\"form-group\\\" style=\\\"max-height: 400px;overflow: scroll;\\\">\\n            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n              <thead>\\n                <th id=\\\"selectall-mdBurndown-dashboard\\\" (click)=\\\"selectAllItems()\\\" style=\\\"width: 30px; padding-left: 10px; padding-top: 10px;\\\">\\n                  <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"padding-left: 15px; padding-top: 0; font-size: 1.5em;\\\">\\n                    <i *ngIf=\\\"selectedNodes.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    <i *ngIf=\\\"selectedNodes.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                  </div>\\n                  <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 select-product\\\" style=\\\"color: rgb(130, 145, 152); padding: 6px 0;\\\">\\n                    ALL\\n                  </div>\\n                </th>\\n              </thead>\\n              <tbody>\\n                <tr *ngFor=\\\"let ct of contactsTree\\\">\\n                  <td style=\\\"padding:0 12px 12px 12px; \\\">\\n                    <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"height: auto; padding: 0;\\\">\\n\\n                      <p-checkbox id=\\\"selectparent-mdBurndown-dashboard\\\" name=\\\"product-checkbox\\\" value=\\\"{{ct.data}}\\\"\\n                        label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelectA($event, ct.children, ct.data)\\\"\\n                        (change)=\\\"updateSelectA($event, ct.children, ct.data)\\\"></p-checkbox>\\n\\n                    </div>\\n                    <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align: left; padding: 0;text-transform: uppercase; font-weight: bold; \\\">\\n                      {{ ct.label }}\\n                    </div>\\n                    <div *ngIf=\\\"ct.children.length > 0\\\">\\n                      <div *ngFor=\\\"let ch of ct.children | filter : searchuser\\\" style=\\\"margin-left:20px;\\\">\\n                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\" style=\\\"margin:0;padding:0;height:auto;max-height: 30px;\\\">\\n                          <p-checkbox id=\\\"selectchild-mdBurndown-dashboard\\\" name=\\\"product-checkbox\\\" value=\\\"{{ch.data}}\\\"\\n                            label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelect($event)\\\" (change)=\\\"updateSelect($event)\\\"></p-checkbox>\\n                        </div>\\n                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align:left;height:auto;max-height: 30px; padding:0; font-weight: bold;\\\">\\n                          {{ ch.label }}\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </td>\\n                </tr>\\n              </tbody>\\n            </table>\\n          </div>\\n        </div>\\n        <!--.modal-body-->\\n        <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n          <button id=\\\"btnDone_mdBurndown_dashboard\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\" data-dismiss=\\\"modal\\\"\\n            (click)=\\\"doneFilter()\\\">Done</button>\\n        </div>\\n        <!--.modal-footer-->\\n      </div>\\n      <!--.modal-content-->\\n    </div>\\n    <!--.modal-dialog-->\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddItem\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-roles\\\">\\n        <div class=\\\"modal-header header-event header-role\\\">\\n          <button id=\\\"btnX_mdAddItem_dashboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <img src=\\\"img/close_icon.svg\\\" class=\\\"img-close\\\">\\n          </button>\\n          <h4 class=\\\"modal-title\\\"> Add Tasks </h4>\\n        </div>\\n        <div class=\\\"modal-body scrollable\\\">\\n          <div class=\\\"row\\\">\\n            <div id=\\\"form-mdAddItem-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group scrollable\\\">\\n                <table class=\\\"table table-bordered2 table-hover table-striped table-role\\\">\\n                  <thead style=\\\"border-top: 3px solid #D4D9DB!important;\\\">\\n                    <th id=\\\"selectall-mdAddItem-dashboard\\\" (click)=\\\"selectAll()\\\" style=\\\"width: 30px;border-right: 3px solid #D4D9DB!important;\\\">\\n                      <i *ngIf=\\\"add_items.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                      <i *ngIf=\\\"add_items.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    </th>\\n                    <th style=\\\"width:50px;border-right: 3px solid #D4D9DB!important;\\\"> Task</th>\\n                    <th style=\\\"width:200px;border-right: 3px solid #D4D9DB!important;\\\"> Task Description</th>\\n                    <th style=\\\"width:100px;\\\"> user asigned</th>\\n                  </thead>\\n                  <tbody>\\n                    <tr *ngFor=\\\"let sl of selectList\\\">\\n                      <td style=\\\"border-right: 3px solid #D4D9DB!important;\\\">\\n                        <div class=\\\"ui-g\\\">\\n                          <p-checkbox id=\\\"selecttasks-mdAddItem-dashboard\\\" name=\\\"list-tasks\\\" value=\\\"{{sl.task_id}}\\\"\\n                            label=\\\"\\\" [(ngModel)]=\\\"add_items\\\"></p-checkbox>\\n                        </div>\\n                      </td>\\n                      <td style=\\\"text-align:left; padding-left:5px; border-right: 3px solid #D4D9DB!important;\\\">{{sl.task_id}}</td>\\n                      <td style=\\\"text-align:left; padding-left:5px;border-right: 3px solid #D4D9DB!important;\\\">{{escapeHtml(sl.task_description)}}</td>\\n                      <td style=\\\"text-align:left; padding-left:5px;\\\">{{sl.asigned}}</td>\\n                    </tr>\\n                  </tbody>\\n                </table>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div style=\\\"border-top: 3px solid #D4D9DB!important;margin-left: 14px;width: 95%;\\\">\\n        </div>\\n        <div class=\\\"modal-footer close-footer\\\" style=\\\"margin-top: 10px!important;\\\">\\n          <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n            <button id=\\\"btnClose_mdAddItem_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\"\\n              data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">Close</button>\\n            <button id=\\\"saveitems-mdAddItem-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(164, 203, 91);\\\"\\n              data-dismiss=\\\"modal\\\" [disabled]=\\\"!add_items || add_items <= 0 || add_items == ''\\\" (click)=\\\"addItems(add_items)\\\">Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button id=\\\"btnX_mdAddTask_dashboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n        </div>\\n        <div id=\\\"form-mdAddTask-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Subject</label>\\n                <input id=\\\"task_subject-mdAddTask-dashboard\\\" name=\\\"task_subject-mdAddTask-dashboard\\\" class=\\\"form-control\\\"\\n                  [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"Subject\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"prod_id-mdAddTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                  [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Assign to</label>\\n                <p-dropdown id=\\\"user_asigned-mdAddTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                  [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar id=\\\"task_delivery-mdAddTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Points</label>\\n                <input id=\\\"task_points-mdAddTask-dashboard\\\" type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"task.task_points\\\"\\n                  [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-xs-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Associate a Project</label>\\n                <p-dropdown id=\\\"proj_id-mdAddTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                  [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-xs-12 col-md-6 col-lg-4\\\" style=\\\"height: 58px;\\\">\\n              <label>Options</label>\\n              <div class=\\\"col-xs-12 col-md-12 col-lg-12 \\\" style=\\\"padding-top: 5px;\\\">\\n                <label class=\\\"form-check-label\\\">\\n                  <input type=\\\"checkbox\\\" class=\\\"form-check-input\\\" [(ngModel)]=\\\"task.completed\\\"> Mark as Complete\\n                </label>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Description</label>\\n                <p-editor id=\\\"task_description-mdAddTask-dashboard\\\" [(ngModel)]=\\\"task_description\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n          <ul class=\\\"mailbox-attachments clearfix\\\">\\n            <li *ngFor=\\\"let att of task.attachments\\\">\\n              <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                <span class=\\\"mailbox-attachment-icon\\\">\\n                  <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\">\\n                  <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                </span>\\n              </a>\\n              <div class=\\\"mailbox-attachment-info\\\">\\n                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                  <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                </a>\\n                <span class=\\\"mailbox-attachment-size\\\">\\n                  {{att.size + ' bytes'}}\\n                  <button id=\\\"att-mdAddTask-dashboard\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\">\\n                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                  </button>\\n                </span>\\n              </div>\\n            </li>\\n          </ul>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n              for=\\\"fileUpload_mdAddTask_dashboard\\\" class=\\\"custom-file-upload\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"fileUpload_mdAddTask_dashboard\\\" name=\\\"fileUpload_mdAddTask_dashboard\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChangeT($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"btnClose_mdAddTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n              data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\"\\n              data-dismiss=\\\"modal\\\" id=\\\"btnSave_mdAddTask_dashboard\\\" name=\\\"btnSave_mdAddTask_dashboard\\\" [disabled]=\\\"(!task_description || task_description == '' || task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0) || (!task.task_delivery != '')\\\"\\n              (click)=\\\"saveTask()\\\"> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdproject\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button id=\\\"btnX_mdproject_dashboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Project</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Subject</label>\\n                <input id=\\\"proj_subject-mdproject-dashboard\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"project.proj_subject\\\"\\n                  name=\\\"proj_subject-mdproject-dashboard\\\" placeholder=\\\"Subject\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>User Applicant</label>\\n                <p-dropdown id=\\\"user_applicant-mdproject-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"applicantlbl\\\"\\n                  [(ngModel)]=\\\"project.user_applicant\\\" placeholder=\\\"Select a user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Group</label>\\n                <p-dropdown id=\\\"group_assigned-mdproject-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\"\\n                  [(ngModel)]=\\\"project.group_assigned\\\" placeholder=\\\"Select a group\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"prod_id-mdproject-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                  [(ngModel)]=\\\"project.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Category</label>\\n                <p-dropdown id=\\\"dropdownCategory_mdproject_dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"categories\\\" [(ngModel)]=\\\"project.para_category\\\" placeholder=\\\"Select a Category\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar id=\\\"proj_end-mdproject-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"project.proj_end\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Estimated Points</label>\\n                <input id=\\\"proj_propoints-mdproject-dashboard\\\" type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"project.proj_propoints\\\"\\n                  [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Stake Holders</label>\\n                <span class=\\\"ui-fluid\\\">\\n                  <p-autoComplete id=\\\"users-mdproject-dashboard\\\" [(ngModel)]=\\\"project.users\\\" [disabled]=\\\"usersCRM.length == 0\\\"\\n                    [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                    placeholder=\\\"Stake Holders\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                  </p-autoComplete>\\n                </span>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Description</label>\\n                <p-editor id=\\\"proj_description-mdproject-dashboard\\\" [(ngModel)]=\\\"project.proj_description\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"project.attachments && project.attachments.length > 0\\\">\\n          <ul class=\\\"mailbox-attachments clearfix\\\">\\n            <li *ngFor=\\\"let att of project.attachments\\\">\\n              <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                <span class=\\\"mailbox-attachment-icon\\\">\\n                  <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\">\\n                  <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                </span>\\n              </a>\\n              <div class=\\\"mailbox-attachment-info\\\">\\n                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                  <i class=\\\"fa fa-paperclip\\\"></i>{{ att.pjat_name }}\\n                </a>\\n                <span class=\\\"mailbox-attachment-size\\\">\\n                  {{att.pjat_size + ' bytes'}}\\n                  <button id=\\\"deleteAttachment_mdproject_dashboard\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                    (click)=\\\"deleteAttachment(att)\\\"><i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                </span>\\n              </div>\\n            </li>\\n          </ul>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"save-mdproject-dashboard\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateProj()\\\"\\n              (click)=\\\"saveproject()\\\"><i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n            <button id=\\\"btnClose_mdproject_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n              for=\\\"fileUpload_mdproject_dashboard\\\" class=\\\"custom-file-upload\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"fileUpload_mdproject_dashboard\\\" name=\\\"fileUpload_mdproject_dashboard\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChangeP($event)\\\" />\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal modal-task fade\\\" id=\\\"mdDailyTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n        <div class=\\\"modal-header header-project\\\">\\n          <button id=\\\"btnX_mdDailyTask_dashboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\"></i>\\n            Record progress\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"overflow:scroll; height:507px;\\\">\\n              <h4 *ngIf=\\\"developing && developing.length > 0\\\" class=\\\"modal-title\\\">\\n                Tasks\\n              </h4>\\n              <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                  <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                    <li class=\\\"active\\\">\\n                      <a data-toggle=\\\"tab\\\" href=\\\"#ptsknew\\\" (click)=\\\"setMytask(0);\\\">None</a>\\n                    </li>\\n                  </ul>\\n                  <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                    *ngFor=\\\"let dv of developing\\\">\\n                    <li *ngIf=\\\"dv.task_pointsl > 0\\\" class=\\\"active\\\">\\n                      <a data-toggle=\\\"tab\\\" href=\\\"#ptsk{{dv.task_id}}\\\" (click)=\\\"showInfo(dv);\\\">{{dv.task_id}}</a>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-9 col-sm-10 col-md-10 col-lg-10\\\">\\n              <div class=\\\"tab-content\\\">\\n                <div *ngIf=\\\"mytask && developing && developing.length > 0 && dailynew == -1\\\" id=\\\"ptsk{{mytask.task_id}}\\\"\\n                  class=\\\"tab-pane fade in active\\\">\\n                  <h3>{{mytask.task_subject}}</h3>\\n                  <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Number</label>\\n                      <p>{{mytask.task_id}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Date</label>\\n                      <p>{{mytask.task_date}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Creator</label>\\n                      <p>{{mytask.creator}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Status</label>\\n                      <p>{{ mytask.status_name }}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Assigned to</label>\\n                      <p>{{mytask.asigned}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Delivery Date</label>\\n                      <p>{{mytask.task_delivery}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Points</label>\\n                      <p>{{mytask.task_points}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Points Recorded</label>\\n                      <p>{{mytask.task_pointsd}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Product</label>\\n                      <p>{{mytask.prod_name}}</p>\\n                    </div>\\n                  </div>\\n                  <label class=\\\"control-label\\\">Description</label>\\n                  <div [innerHtml]=\\\"mytask.task_description\\\" style=\\\"overflow: scroll; height: 80px;\\\"></div>\\n                  <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-6 col-md-6\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mcTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"day.dail_date\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                      <span>{{date3|date}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-md-6\\\">\\n                      <div class=\\\"form-group\\\">\\n                        <label>Points</label>\\n                        <input id=\\\"points-mcTask-dashboard\\\" type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"day.dail_points\\\"\\n                          [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points <= 0\\\">Points must be greater than zero</span>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"(parseFloat(mytask.task_pointsd)+parseFloat(day.dail_points) > parseFloat(mytask.task_points))\\\">Points\\n                          selected exceed current task duration.</span>\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"form-group\\\">\\n                    <label>Description</label>\\n                    <textarea id=\\\"text-mcTask-dashboard\\\" style=\\\"resize: vertical;\\\" class=\\\"form-control\\\" rows=\\\"3\\\"\\n                      placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text\\\">{{ \\\"*\\\" + day.dail_date + \\\"*\\\" }}</textarea>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"dailynew == 0\\\" id=\\\"ptsknew\\\" class=\\\"tab-pane fade in active\\\">\\n                  <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mdDaily-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"day.dail_date_2\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Points</label>\\n                      <input id=\\\"points-dashboard\\\" type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"day.dail_points_2\\\"\\n                        [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                      <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points_2 <= 0\\\">Points must be greater than zero</span>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Product</label>\\n                      <p-dropdown id=\\\"prod_id-mdDaily-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                        [(ngModel)]=\\\"day.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Category</label>\\n                      <p-dropdown id=\\\"para_category-mdDaily-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                        [options]=\\\"catdaily\\\" [(ngModel)]=\\\"day.para_category\\\" placeholder=\\\"Select a Category\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Task Refernce</label>\\n                      <p-dropdown id=\\\"task_reference-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblmytasks\\\"\\n                        [(ngModel)]=\\\"day.task_reference\\\" placeholder=\\\"Select a Task\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Description</label>\\n                      <textarea id=\\\"text-mdDaily-dashboard\\\" style=\\\"resize: vertical;\\\" class=\\\"form-control\\\" rows=\\\"3\\\"\\n                        placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text_2\\\"></textarea>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"!mytask && !developing && developing.length == 0\\\" id=\\\"ptsk{{mytask.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                  <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n          <button *ngIf=\\\"day && dailynew != 0\\\" id=\\\"save-mcTask-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" [disabled]=\\\"validateDaily(1)\\\" (click)=\\\"saveDaily(day, mytask.task_id)\\\">Save</button>\\n          <button *ngIf=\\\"day && dailynew == 0\\\" id=\\\"save-mcTask2-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" [disabled]=\\\"validateDaily(2)\\\" (click)=\\\"saveDaily(day, 0)\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdTaskStatus\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button id=\\\"btnX_mdTaskStatus_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            Tasks\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"tab-content\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-12 col-sm-4 col-md-4 inputs-mainfilter\\\" style=\\\"float: right;margin-bottom: 7px;margin-top: -7px;margin-right: 10px;background-color: #fff;\\\">\\n                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                  <div class=\\\"label-input-mainfilter\\\">\\n                    <input type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"\\\"\\n                      [(ngModel)]=\\\"searchtask\\\">\\n                  </div>\\n                  <div class=\\\"search-input-mainfilter\\\" style=\\\"position: absolute; right: 0; top: 2px;\\\">\\n                    <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                  </div>\\n                </div>\\n              </div>\\n              <div style=\\\"width: 100%;\\\">\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <table class=\\\"table table-bordered table-hover table-striped\\\" style=\\\"margin-bottom: 0px;\\\">\\n                    <thead>\\n                      <th style=\\\"text-align: center; width: 10%;\\\">Task</th>\\n                      <th style=\\\"text-align: center; width: 50%;\\\">Task Description</th>\\n                      <th style=\\\"text-align: center; width: 10%;\\\">Points</th>\\n                      <th style=\\\"text-align: center; width: 10%;\\\">Points Recorded</th>\\n                      <th style=\\\"text-align: center; width: 20%;\\\">Assigned</th>\\n                    </thead>\\n                  </table>\\n                </div>\\n              </div>\\n              <div style=\\\"max-height: 400px;overflow: scroll;width: 100%;\\\">\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                    <tbody>\\n                      <tr *ngFor=\\\"let tk of taskbystatus | filter : searchtask\\\">\\n                        <td style=\\\"text-align: center; width: 10%;\\\">{{ escapeHtml(tk.task_id) }}</td>\\n                        <td style=\\\"text-align: center; width: 50%;\\\">{{ escapeHtml(tk.task_subject) }}</td>\\n                        <td style=\\\"text-align: center; width: 10%;\\\">{{ escapeHtml(tk.task_points) }}</td>\\n                        <td style=\\\"text-align: center; width: 10%;\\\">{{ escapeHtml(tk.task_pointsd) }}</td>\\n                        <td style=\\\"text-align: center; width: 20%;\\\">{{ escapeHtml(tk.assigned) }}</td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" id=\\\"btnClose_mdTaskStatus_dashboard\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n            data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal modal-versionctrl fade\\\" id=\\\"mdVersionControl\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\" style=\\\"width: 70%;\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            New updates Version 4.0.1\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"tab-content\\\">\\n            <div class=\\\"row\\\">\\n              <div style=\\\"width: 100%;\\\">\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <h4>Description</h4>\\n                  <div [innerHtml]=\\\"versionControl\\\" style=\\\"overflow: scroll; height: 200px;\\\"></div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div style=\\\"max-height: 400px;overflow: scroll;width: 100%;\\\">\\n            <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n              <table class=\\\"table table-bordered table-hover table-striped\\\">\\n              </table>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-versioncontrol\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!--.modal fade-->\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 818 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"taskboard\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> TASKBOARD\\n            <small style=\\\"font-size:15px;\\\">Main Control</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Taskboard</li>\\n        </ol>\\n    </section>\\n    <div class=\\\"row\\\" style=\\\"height: auto;background: rgb(244,244,244);\\\">\\n        <div class=\\\"col-xs-12 col-sm-12 col-md-2 col-lg-2\\\" style=\\\"padding-top: 9px;\\\">\\n            <div class=\\\"modal-body myteam\\\" style=\\\"height: 45px;width: 100px; margin: 0 auto;\\\">\\n                <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\" *ngIf=\\\"requests && requests.length == 0\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 1px;\\\">\\n                        <div id=\\\"btn-mainfilter\\\" (click)=\\\"showMainFilter(1)\\\">\\n                            <i class=\\\"fa fa-filter\\\" aria-hidden=\\\"true\\\" style=\\\"color: #fff;padding-top: 8px;padding-left: 9px;display:inline-block!important;\\\"></i>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"requests && requests.length > 0\\\" class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding: 1px;\\\">\\n                        <div id=\\\"btn-search\\\" (click)=\\\"showReqTask()\\\" style=\\\"background: rgb(36,122,205)\\\">\\n                            <i class=\\\"sq sq-requests\\\" aria-hidden=\\\"true\\\" style=\\\"color: #fff;padding-top: 8px;padding-left: 9px;display:inline-block!important;\\\"></i>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding: 1px;\\\">\\n                        <div id=\\\"btn-mainfilter\\\" (click)=\\\"showMainFilter(1)\\\">\\n                            <i class=\\\"fa fa-filter\\\" aria-hidden=\\\"true\\\" style=\\\"color: #fff;padding-top: 8px;padding-left: 9px;display:inline-block!important;\\\"></i>\\n                        </div>\\n                    </div>\\n\\n                </div>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"lblgroups && lblgroups.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5\\\" style=\\\"text-align: center;\\\">\\n            <div class=\\\"box-header with-border select-group\\\" style=\\\"padding-bottom: 0px;\\\">\\n                <div class=\\\"btn btn-sm\\\" style=\\\"color:rgb(35,121,205);\\\">\\n                    <span style=\\\"font-size: 14px;font-weight: bold;padding-right: 0px;padding-left: 0px;\\\">Group</span>\\n                </div>\\n                <p-dropdown id=\\\"ddwnr_taskboard\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                    [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\" [(ngModel)]=\\\"myteam.grop_id\\\" placeholder=\\\"Select a group\\\"\\n                    filter=\\\"filter\\\" (onChange)=\\\"updateTeam(myteam.grop_id)\\\"></p-dropdown>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"sprintslist && sprintslist.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5\\\" style=\\\"text-align: center;\\\">\\n            <div class=\\\"box-header with-border select-group\\\" style=\\\"padding-bottom: 0px;\\\">\\n                <div class=\\\"btn btn-sm\\\" style=\\\"color:rgb(35,121,205);\\\">\\n                    <span style=\\\"font-size: 14px;font-weight: bold;padding-right: 0px;padding-left: 0px;\\\">Sprint</span>\\n                </div>\\n                <p-dropdown id=\\\"ddwnr_taskboard2\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                    [autoWidth]=\\\"false\\\" [options]=\\\"sprintslist\\\" [(ngModel)]=\\\"mysprint.spri_id\\\" placeholder=\\\"Select a Sprint\\\"\\n                    filter=\\\"filter\\\" (onChange)=\\\"updateSprint()\\\"></p-dropdown>\\n            </div>\\n        </div>\\n        <div class=\\\"row col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-right: 20%; margin-left: 20%; padding:4px;\\\">\\n            <div class=\\\"modal-content-sprint team\\\" *ngIf=\\\"team && team.length > 0\\\" class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8\\\">\\n                <div class=\\\"modal-body myteam\\\" style=\\\"padding: 4px;\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                        <div class=\\\"nav-tabs-custom-spr\\\" style=\\\"overflow-x: scroll;\\\">\\n                            <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                <li *ngFor=\\\"let tm of team; let i = index\\\" [ngClass]=\\\"{ 'active': tm.usersel}\\\">\\n                                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"teamInfo(tm.grop_id, tm.user_name, tm.user_lastname, tm.role_name,[tm.user_id],tm.user_id)\\\"\\n                                        style=\\\"color: #839195; text-decoration: none;\\\">\\n                                        <div *ngIf=\\\"tm.user_id != 0\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.user_name +' '+ tm.user_lastname}}\\\"\\n                                            class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;background: transparent;\\\"\\n                                            [ngStyle]=\\\"{ 'border-color': tm.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                                            <img [src]=\\\"tm.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" style=\\\"padding: 0px; width:39px;height:39px;border-radius: 50%;\\\"\\n                                                class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                        </div>\\n                                        <div *ngIf=\\\"tm.user_id == 0\\\" class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;\\\"\\n                                            [ngStyle]=\\\"{ 'background': tm.role_color}\\\">\\n                                            <i class=\\\"sq sq-scrum user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 30px;\\\"></i>\\n                                        </div>\\n                                    </a>\\n                                </li>\\n                            </ul>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-md-12\\\" style=\\\"padding-left: 20px;\\\">\\n                            <h5 id=\\\"team-name\\\" class=\\\"team-label\\\" style=\\\"margin-bottom:0;\\\"></h5>\\n                            <h6 id=\\\"team-profile\\\" class=\\\"team-label\\\" style=\\\"margin:0;\\\"></h6>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!-- Main content -->\\n    <section class=\\\"content\\\" style=\\\"min-height:100%; position:relative;padding: 0px 15px 0px 15px;\\\">\\n        <div class=\\\"row\\\">\\n            <div *ngIf=\\\"spinner == true\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height:100%;\\\">\\n                <div class=\\\"sk-fading-circle\\\" *ngIf=\\\"tasks.length == 0\\\">\\n                    <div class=\\\"sk-circle1 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle2 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle3 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle4 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle5 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle6 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle7 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle8 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle9 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle10 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle11 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle12 sk-circle\\\"></div>\\n                </div>\\n            </div>\\n            <div *ngIf=\\\"spinner == false \\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-right:-30px;margin-left:0px;\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"table-responsive\\\" style=\\\"padding-bottom:30px;max-height:none!important;\\\">\\n                            <div style=\\\"margin-bottom:15px; width:100%; height:1050; padding:5px;\\\">\\n                                <!--PENDING-->\\n                                <div class=\\\"table-column-pending pull-left\\\">\\n                                    <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                            <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                                <h3 class=\\\"box-title\\\">\\n                                                    <i class=\\\"sq sq-pending\\\"></i> PENDING</h3>\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                                {{ round(sumx(pending | filterfield : { pos: posProduct, text:\\n                                                selectedProduct } | filterfield : { pos : 'proj_id', text :\\n                                                selectedprojects } | filterfield : { pos : posState, text :\\n                                                selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' },\\n                                                \\\"36\\\"),2) }} pts\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div id=\\\"pending\\\" class=\\\"table-body_taskboard pull-left box-solid pending\\\"\\n                                        pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '36')\\\" style=\\\"width:100%;height:90%;\\\">\\n                                        <div *ngFor=\\\"let pd of pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' };\\\">\\n                                            <div class=\\\"box taskboard-tile taskboard-tile-{{pd.label}} box-solid pending table-element\\\"\\n                                                id=\\\"tk{{pd.task_id}}\\\" style=\\\"list-style-type: none;\\\" pDraggable=\\\"tb\\\"\\n                                                (onDragStart)=\\\"dragStart($event, pd, '36')\\\">\\n                                                <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{pd.labelbackground}} taskboard-box-radius-{{pd.label}}\\\">\\n                                                    <div class=\\\"c100 p{{pd.percentage}} xsmall\\\">\\n                                                        <span (click)=\\\"showModalTimeLine(pd)\\\" class=\\\"percentage-{{pd.label}}\\\"\\n                                                            style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{pd.percentage}}%</span>\\n                                                        <div class=\\\"slice\\\">\\n                                                            <div class=\\\"{{pd.label}} bar\\\"></div>\\n                                                            <div class=\\\"{{pd.label}} fill\\\"></div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span (click)=\\\"showModal(pd)\\\" style=\\\"cursor: pointer;\\\">\\n                                                            <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{pd.task_id }}\\n                                                        </span>\\n                                                        <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{round(pd.task_pointsd,\\n                                                            2) + \\\"/\\\" + round(pd.task_points, 2) }}</span>\\n                                                    </h3>\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span *ngIf=\\\"pd.proj_id != null\\\">\\n                                                            <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{pd.proj_id}}\\n                                                        </span>\\n                                                    </h3>\\n                                                    <div class=\\\"box-tools pull-right\\\">\\n                                                        <div class=\\\"btn-group\\\">\\n                                                            <button id=\\\"settings-backlog-taskboard2\\\" type=\\\"button\\\"\\n                                                                class=\\\"btn btn-xs task-btn-default dropdown-toggle\\\"\\n                                                                data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\"\\n                                                                aria-expanded=\\\"false\\\" style=\\\"background-color:transparent;\\\">\\n                                                                <i class=\\\"sq sq-setup\\\"></i>\\n                                                            </button>\\n                                                            <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"showtags-taskboard2\\\"\\n                                                                        style=\\\"color:#333\\\" (click)=\\\"showTags(pd)\\\">\\n                                                                        <i class=\\\"fa fa-plus\\\"></i> Add a tag</a>\\n                                                                </li>\\n                                                                <li role=\\\"separator\\\" class=\\\"divider\\\"></li>\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"sendbackdv-taskboard2\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"sendBack(pd)\\\"\\n                                                                        data-toggle=\\\"modal\\\" data-target=\\\"#mdBack\\\">\\n                                                                        <i class=\\\"sq sq-backlog\\\"></i> Move to Backlog</a>\\n                                                                </li>\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"todevelopimp-taskboard2\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"changeStatus(pd, 38)\\\">\\n                                                                        <i class=\\\"sq sq-developing\\\"></i> Move to\\n                                                                        Developing</a>\\n                                                                </li>\\n                                                                <li *ngIf=\\\"pd.task_pointsd == 0\\\">\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"tosprint-taskboard-pending\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"showEditSprint(pd)\\\"\\n                                                                        data-toggle=\\\"modal\\\" data-target=\\\"#mdSprints\\\">\\n                                                                        <i class=\\\"sq sq-sprints\\\"></i> Add or Delete\\n                                                                        from\\n                                                                        Sprint</a>\\n                                                                </li>\\n                                                            </ul>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(pd.proj_id) }\\\"\\n                                                    style=\\\"height:1975x;float:left;min-width: 80%;\\\">\\n                                                    <div class=\\\"row infotask\\\">\\n\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                            [innerHTML]=\\\"pd.task_subject\\\"></div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"height:20px!important;\\\">Delivery date:{{\\\"\\n                                                                \\\"+pd.delivery}}\\n                                                            </div>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Label\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                        <div *ngIf=\\\"pd.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                            [ngStyle]=\\\"{background:pd.tags[0].color}\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{pd.tags[0].custom_desc}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <i class=\\\"{{pd.tags[0].icon}}\\\"></i>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                                <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Work\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                        <div *ngFor=\\\"let ft of pd.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <span class=\\\"span-img-taskboard\\\">\\n                                                                                <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                    class=\\\"user-image img-taskboard-user\\\"\\n                                                                                    alt=\\\"User Image\\\">\\n                                                                            </span>\\n\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"pd.task_id\\\"></taskview>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <!-- END PENDING-->\\n                                <!--DEVELOPING-->\\n                                <div class=\\\"table-column-developing pull-left\\\">\\n                                    <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                            <h3 class=\\\"box-title\\\">\\n                                                <i class=\\\"sq sq-developing\\\"></i> DEVELOPING</h3>\\n                                            <div class=\\\"pull-right\\\" style=\\\"right:75px; top:10px;text-align:right;color:#FFFFFF;font-weight:bold;\\\">\\n                                                {{ sumx(developing | filterfield : { pos : 'proj_id', text :\\n                                                selectedprojects } | filterfield : { pos : posState, text :\\n                                                selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } |\\n                                                filterfield : { pos: posProduct, text: selectedProduct }, \\\"38\\\") }} pts\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"table-column-devtest pull-left\\\" style=\\\"border-right: 2px solid rgb(221, 221, 221);height: 93%;\\\">\\n                                        <div id=\\\"developing\\\" class=\\\"table-body_taskboard pull-left box-solid developing\\\"\\n                                            pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '38')\\\" style=\\\"width:100%;height:97%;\\\">\\n                                            <div *ngFor=\\\"let dv of developing | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct }\\\">\\n                                                <div class=\\\"box taskboard-tile taskboard-tile-{{dv.label}} box-solid developing table-element\\\"\\n                                                    pDraggable=\\\"tb\\\" (onDragStart)=\\\"dragStart($event, dv, '38')\\\" id=\\\"tk{{dv.task_id}}\\\"\\n                                                    style=\\\"list-style-type: none;\\\">\\n                                                    <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{dv.labelbackground}} taskboard-box-radius-{{dv.label}}\\\">\\n                                                        <div class=\\\"c100 p{{dv.percentage}} xsmall\\\">\\n                                                            <span (click)=\\\"showModalTimeLine(dv)\\\" class=\\\"percentage-{{dv.label}}\\\"\\n                                                                style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{dv.percentage}}%</span>\\n                                                            <div class=\\\"slice\\\">\\n                                                                <div class=\\\"{{dv.label}} bar\\\"></div>\\n                                                                <div class=\\\"{{dv.label}} fill\\\"></div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                        <h3 class=\\\"box-title\\\">\\n                                                            <span (click)=\\\"showModal(dv)\\\" style=\\\"cursor: pointer;\\\">\\n                                                                <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                                {{dv.task_id }}\\n                                                            </span>\\n                                                            <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{\\n                                                                round(dv.task_pointsd, 2) + \\\"/\\\" + round(dv.task_points,\\n                                                                2) }}</span>\\n                                                        </h3>\\n                                                        <h3 class=\\\"box-title\\\">\\n                                                            <span *ngIf=\\\"dv.proj_id != null\\\">\\n                                                                <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                                {{dv.proj_id}}\\n                                                            </span>\\n                                                        </h3>\\n                                                        <div class=\\\"box-tools pull-right\\\">\\n                                                            <div class=\\\"btn-group\\\">\\n                                                                <button id=\\\"settings-developing-taskboard\\\" type=\\\"button\\\"\\n                                                                    class=\\\"btn btn-xs task-btn-{{dv.label}} dropdown-toggle\\\"\\n                                                                    data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\"\\n                                                                    aria-expanded=\\\"false\\\" style=\\\"background-color:transparent;\\\">\\n                                                                    <i class=\\\"sq sq-setup\\\"></i>\\n                                                                </button>\\n                                                                <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"adjusttime-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"setTime(dv)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mdExtraT\\\">\\n                                                                            <i class=\\\"sq sq-adjust-duration\\\"></i>\\n                                                                            Adjust\\n                                                                            Duration</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"showtags2-taskboard\\\"\\n                                                                            style=\\\"color:#333\\\" (click)=\\\"showTags(dv)\\\">\\n                                                                            <i class=\\\"fa fa-plus\\\"></i> Add a tag</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"recordp-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"setTask(dv)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mcTask\\\">\\n                                                                            <i class=\\\"sq sq-record-progress\\\"></i>\\n                                                                            Record\\n                                                                            Progress</a>\\n                                                                    </li>\\n                                                                    <li role=\\\"separator\\\" class=\\\"divider\\\"></li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"tocompletedv-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"changeStatus(dv, 40)\\\">\\n                                                                            <i class=\\\"sq sq-completed\\\"></i> Move to\\n                                                                            Complete</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"topendingdv-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"changeStatus(dv, 36)\\\">\\n                                                                            <i class=\\\"sq sq-pending\\\"></i> Move to\\n                                                                            Pending</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"toimprovingcp-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"showCpImp(dv)\\\">\\n                                                                            <i class=\\\"sq sq-improving\\\"></i> Move to\\n                                                                            Improving</a>\\n                                                                    </li>\\n                                                                    <li *ngIf=\\\"dv.task_pointsd == 0\\\">\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"tosprint2-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"showEditSprint(dv)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mdSprints\\\">\\n                                                                            <i class=\\\"sq sq-sprints\\\"></i> Add or Delete\\n                                                                            from\\n                                                                            Sprint</a>\\n                                                                    </li>\\n                                                                    <li role=\\\"separator\\\" class=\\\"divider\\\"></li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"sendbackdv-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"sendBack(dv)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mdBack\\\">\\n                                                                            <i class=\\\"sq sq-backlog\\\"></i> Move to\\n                                                                            Backlog</a>\\n                                                                    </li>\\n                                                                </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(dv.proj_id) }\\\"\\n                                                        style=\\\"height:1975x;float:left;min-width: 80%;\\\">\\n                                                        <div class=\\\"row infotask\\\">\\n\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                                [innerHTML]=\\\"dv.task_subject\\\"></div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                    style=\\\"height:20px!important;\\\">Delivery\\n                                                                    date:{{\\\" \\\"+dv.delivery}}\\n                                                                </div>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                    style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                    <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                            style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                            Label\\n                                                                        </div>\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                            <div *ngIf=\\\"dv.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                                [ngStyle]=\\\"{background:dv.tags[0].color}\\\"\\n                                                                                aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                                pTooltip=\\\"{{dv.tags[0].custom_desc}}\\\"\\n                                                                                data-container=\\\"body\\\">\\n                                                                                <i class=\\\"{{dv.tags[0].icon}}\\\"></i>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                    <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                            style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                            Work\\n                                                                        </div>\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                            <div *ngFor=\\\"let ft of dv.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                                aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                                pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                                data-container=\\\"body\\\">\\n                                                                                <span class=\\\"span-img-taskboard\\\">\\n                                                                                    <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                        class=\\\"user-image img-taskboard-user\\\"\\n                                                                                        alt=\\\"User Image\\\">\\n                                                                                </span>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <taskview [myTaskId]=\\\"dv.task_id\\\"></taskview>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <!--END DEVELOPING-->\\n                                    <!-- COMPLETE-->\\n                                    <div class=\\\"table-column-devtest pull-left\\\">\\n                                        <div id=\\\"complete\\\" class=\\\"table-body_taskboard pull-left box-solid complete\\\"\\n                                            pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '40')\\\" style=\\\"width:100%;height:98%;\\\">\\n                                            <div *ngFor=\\\"let cp of complete | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct }; \\\">\\n                                                <div class=\\\"box taskboard-tile taskboard-tile-{{cp.label}} box-solid complete table-element\\\"\\n                                                    pDraggable=\\\"tb\\\" (onDragStart)=\\\"dragStart($event, cp, '40')\\\"\\n                                                    [dragDirective]='40' (releaseDrop)=\\\"releaseDrop(40, cp)\\\" id=\\\"tk{{cp.task_id}}\\\"\\n                                                    style=\\\"list-style-type: none;\\\">\\n                                                    <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{cp.labelbackground}} taskboard-box-radius-{{cp.label}}\\\">\\n                                                        <div class=\\\"c100 p{{cp.percentage}} xsmall\\\">\\n                                                            <span (click)=\\\"showModalTimeLine(cp)\\\" class=\\\"percentage-{{cp.label}}\\\"\\n                                                                style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{cp.percentage}}%</span>\\n                                                            <div class=\\\"slice\\\">\\n                                                                <div class=\\\"{{cp.label}} bar\\\"></div>\\n                                                                <div class=\\\"{{cp.label}} fill\\\"></div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                        <h3 class=\\\"box-title\\\">\\n                                                            <span (click)=\\\"showModal(cp)\\\" style=\\\"cursor: pointer;\\\">\\n                                                                <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                                {{cp.task_id }}\\n                                                            </span>\\n                                                            <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{\\n                                                                round(cp.task_pointsd, 2) + \\\"/\\\" + round(cp.task_points,\\n                                                                2)}}</span>\\n                                                        </h3>\\n                                                        <h3 class=\\\"box-title\\\" *ngIf=\\\"cp.proj_id != null\\\">\\n                                                            <span>\\n                                                                <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                                {{cp.proj_id}}\\n                                                            </span>\\n                                                        </h3>\\n                                                        <div class=\\\"box-tools pull-right\\\">\\n                                                            <div class=\\\"btn-group\\\">\\n                                                                <button id=\\\"settings-complete-taskboard\\\" type=\\\"button\\\"\\n                                                                    class=\\\"btn btn-xs task-btn-{{cp.label}} dropdown-toggle\\\"\\n                                                                    data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\"\\n                                                                    aria-expanded=\\\"false\\\" style=\\\"background-color:transparent;\\\">\\n                                                                    <i class=\\\"sq sq-setup\\\"></i>\\n                                                                </button>\\n                                                                <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"toimprovingcp-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"showCpImp(cp)\\\">\\n                                                                            <i class=\\\"sq sq-improving\\\"></i> Move to\\n                                                                            Improving</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"addtagcp-taskboard\\\"\\n                                                                            style=\\\"color:#333\\\" (click)=\\\"showTags(cp)\\\">\\n                                                                            <i class=\\\"fa fa-plus\\\"></i> Add a tag</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"closetaskcp-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" *ngIf=\\\"cp.canclose == 1\\\"\\n                                                                            (click)=\\\"closeTask(cp)\\\">\\n                                                                            <i class=\\\"fa fa-check\\\"></i> Close task </a>\\n                                                                    </li>\\n                                                                    <!-- <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"tosprint-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"showEditSprint(cp)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mdSprints\\\">\\n                                                                            <i class=\\\"sq sq-sprints\\\"></i> Add or Delete\\n                                                                            from\\n                                                                            Sprint</a>\\n                                                                    </li> -->\\n                                                                </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(cp.proj_id) }\\\"\\n                                                        style=\\\"height:175px;float:left;min-width: 80%;\\\">\\n                                                        <div class=\\\"row infotask\\\">\\n\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                                [innerHTML]=\\\"cp.task_subject\\\"></div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                    style=\\\"height:20px!important;\\\">Delivery date:{{\\\"\\n                                                                    \\\"+cp.delivery}}\\n                                                                </div>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                    style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                    <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                            style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                            Label\\n                                                                        </div>\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                            <div *ngIf=\\\"cp.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                                [ngStyle]=\\\"{background:cp.tags[0].color}\\\"\\n                                                                                aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                                pTooltip=\\\"{{cp.tags[0].custom_desc}}\\\"\\n                                                                                data-container=\\\"body\\\">\\n                                                                                <i class=\\\"{{cp.tags[0].icon}}\\\"></i>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                    <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                            style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                            Work\\n                                                                        </div>\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                            <div *ngFor=\\\"let ft of cp.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                                aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                                pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                                data-container=\\\"body\\\">\\n                                                                                <span class=\\\"span-img-taskboard\\\">\\n                                                                                    <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                        class=\\\"user-image img-taskboard-user\\\"\\n                                                                                        alt=\\\"User Image\\\">\\n                                                                                </span>\\n\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <taskview [myTaskId]=\\\"cp.task_id\\\"></taskview>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <!-- END COMPLETE-->\\n                                </div>\\n                                <!--IMPROVING-->\\n                                <div class=\\\"table-column pull-left\\\">\\n                                    <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 6px 10px;\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                            <h3 class=\\\"box-title\\\">\\n                                                <i class=\\\"sq sq-improving\\\"></i> IMPROVING</h3>\\n                                            <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                                <span *ngIf=\\\"(improving | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct }).length > 0\\\"\\n                                                    class=\\\"label label-red notif-tk-imp\\\">{{ (improving | filterfield :\\n                                                    { pos : 'proj_id', text : selectedprojects } | filterfield : { pos\\n                                                    : posState, text : selectedUsers, or : byme ? myUsers : [], orfield\\n                                                    : 'user_creator' } | filterfield : { pos: posProduct, text:\\n                                                    selectedProduct }).length }}</span> <i class=\\\"sq sq-taskboard\\\"\\n                                                    style=\\\"font-size: 22px;\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div id=\\\"improving\\\" class=\\\"table-body_taskboard pull-left box-solid improving\\\"\\n                                        pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '41')\\\" style=\\\"width:100%;height:90%;\\\">\\n                                        <div *ngFor=\\\"let imp of improving | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct }; \\\">\\n                                            <div class=\\\"box taskboard-tile taskboard-tile-{{imp.label}} box-solid improving  table-element\\\"\\n                                                pDraggable=\\\"tb\\\" (onDragStart)=\\\"dragStart($event, imp, '41')\\\" id=\\\"tk{{imp.task_id}}\\\"\\n                                                style=\\\"list-style-type: none;\\\">\\n                                                <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{imp.labelbackground}} taskboard-box-radius-{{imp.label}}\\\">\\n                                                    <div class=\\\"c100 p{{imp.percentage}} xsmall\\\">\\n                                                        <span (click)=\\\"showModalTimeLine(imp)\\\" class=\\\"percentage-{{imp.label}}\\\"\\n                                                            style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{imp.percentage}}%</span>\\n                                                        <div class=\\\"slice\\\">\\n                                                            <div class=\\\"{{imp.label}} bar\\\"></div>\\n                                                            <div class=\\\"{{imp.label}} fill\\\"></div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span (click)=\\\"showModal(imp)\\\" style=\\\"cursor: pointer;\\\">\\n                                                            <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{imp.task_id }}\\n                                                        </span>\\n                                                        <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{\\n                                                            round(imp.task_pointsd, 2) + \\\"/\\\" + round(imp.task_points,\\n                                                            2)}}</span>\\n                                                    </h3>\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span *ngIf=\\\"imp.proj_id != null\\\">\\n                                                            <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{imp.proj_id}}\\n                                                        </span>\\n                                                    </h3>\\n                                                    <div class=\\\"box-tools pull-right\\\">\\n                                                        <div class=\\\"btn-group\\\">\\n                                                            <button id=\\\"settings-improving-taskboard\\\" type=\\\"button\\\"\\n                                                                class=\\\"btn btn-xs task-btn-{{imp.label}} dropdown-toggle\\\"\\n                                                                data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\"\\n                                                                aria-expanded=\\\"false\\\" style=\\\"background-color:transparent;\\\">\\n                                                                <i class=\\\"sq sq-setup\\\"></i>\\n                                                            </button>\\n                                                            <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\" style=\\\"width: 1060%;left: -657%;\\\">\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"todevelopimp-taskboard\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"changeStatus(imp, 38)\\\">\\n                                                                        <i class=\\\"sq sq-developing\\\"></i> Move to\\n                                                                        Developing</a>\\n                                                                </li>\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"addtagimp-taskboard\\\"\\n                                                                        style=\\\"color:#333\\\" (click)=\\\"showTags(imp)\\\">\\n                                                                        <i class=\\\"fa fa-plus\\\"></i> Add a tag</a>\\n                                                                </li>\\n                                                                <!-- <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"tosprint3-taskboard\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"showEditSprint(imp)\\\"\\n                                                                        data-toggle=\\\"modal\\\" data-target=\\\"#mdSprints\\\">\\n                                                                        <i class=\\\"sq sq-sprints\\\"></i> Add or Delete\\n                                                                        from\\n                                                                        Sprint</a>\\n                                                                </li> -->\\n                                                            </ul>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(imp.proj_id) }\\\"\\n                                                    style=\\\"height:175px;float:left;min-width: 80%;\\\">\\n                                                    <div class=\\\"row infotask\\\">\\n\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                            [innerHTML]=\\\"imp.task_subject\\\"></div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"height:20px!important;\\\">Delivery date:{{\\\"\\n                                                                \\\"+imp.delivery}}\\n                                                            </div>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Label\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                        <div *ngIf=\\\"imp.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                            [ngStyle]=\\\"{background:imp.tags[0].color}\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{imp.tags[0].custom_desc}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <i class=\\\"{{imp.tags[0].icon}}\\\"></i>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                                <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Work\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                        <div *ngFor=\\\"let ft of imp.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <span class=\\\"span-img-taskboard\\\">\\n                                                                                <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                    class=\\\"user-image img-taskboard-user\\\"\\n                                                                                    alt=\\\"User Image\\\">\\n                                                                            </span>\\n\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"imp.task_id\\\"></taskview>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <!-- END IMPROVING-->\\n                                <!-- COMPLETE-->\\n                                <div class=\\\"table-column pull-left\\\">\\n                                    <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                            <h3 class=\\\"box-title\\\">\\n                                                <i class=\\\"sq sq-completed\\\"></i> COMPLETED</h3>\\n                                            <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                                {{ round(sumx(close | filterfield : { pos : 'proj_id', text :\\n                                                selectedprojects } | filterfield : { pos : posState, text :\\n                                                selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } |\\n                                                filterfield : { pos: posProduct, text: selectedProduct }, \\\"42\\\"), 2) }}\\n                                                pts\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div id=\\\"closed\\\" class=\\\"table-body_taskboard pull-left box-solid complete\\\"\\n                                        pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '42')\\\" style=\\\"width:100%;height:90%;\\\">\\n                                        <div *ngFor=\\\"let cl of close | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct };\\\">\\n                                            <div class=\\\"box taskboard-tile taskboard-tile-{{cl.label}} box-solid complete table-element taskboard-tile-cl\\\"\\n                                                pDraggable=\\\"tb\\\" (onDragStart)=\\\"dragStart($event, cl, '42')\\\"\\n                                                [dragDirective]='42' (releaseDrop)=\\\"releaseDrop(42, cl)\\\" id=\\\"tk{{cl.task_id}}\\\"\\n                                                style=\\\"list-style-type: none;\\\">\\n                                                <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{cl.labelbackground}} taskboard-box-radius-{{cl.label}}\\\">\\n                                                    <div class=\\\"c100 p{{cl.percentage}} xsmall\\\">\\n                                                        <span (click)=\\\"showModalTimeLine(cl)\\\" class=\\\"percentage-{{cl.label}}\\\"\\n                                                            style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{cl.percentage}}%</span>\\n                                                        <div class=\\\"slice\\\">\\n                                                            <div class=\\\"{{cl.label}} bar\\\"></div>\\n                                                            <div class=\\\"{{cl.label}} fill\\\"></div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span (click)=\\\"showModal(cl)\\\" style=\\\"cursor: pointer;\\\">\\n                                                            <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{cl.task_id }}\\n                                                        </span>\\n                                                        <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{\\n                                                            round(cl.task_pointsd, 2) + \\\"/\\\" + round(cl.task_points,\\n                                                            2)}}</span>\\n                                                    </h3>\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span *ngIf=\\\"cl.proj_id != null\\\">\\n                                                            <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{cl.proj_id}}\\n                                                        </span>\\n                                                    </h3>\\n                                                </div>\\n                                                <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(cl.proj_id) }\\\"\\n                                                    style=\\\"height:1975x;float:left;min-width: 80%;\\\">\\n                                                    <div class=\\\"row infotask\\\">\\n\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                            [innerHTML]=\\\"cl.task_subject\\\"></div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"height:20px!important;\\\">Delivery date:{{\\\"\\n                                                                \\\"+cl.delivery}}\\n                                                            </div>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Label\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                        <div *ngIf=\\\"cl.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                            [ngStyle]=\\\"{background:cl.tags[0].color}\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{cl.tags[0].custom_desc}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <i class=\\\"{{cl.tags[0].icon}}\\\"></i>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                                <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Work\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                        <div *ngFor=\\\"let ft of cl.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <span class=\\\"span-img-taskboard\\\">\\n                                                                                <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                    class=\\\"user-image img-taskboard-user\\\"\\n                                                                                    alt=\\\"User Image\\\">\\n                                                                            </span>\\n\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"cl.task_id\\\"></taskview>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <!-- END COMPLETE-->\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n    <div class=\\\"modal modal-task fade\\\" id=\\\"mdTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button id=\\\"close-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <div style=\\\"overflow-y: scroll;max-height: 25px;\\\">\\n                        <h4 class=\\\"modal-title\\\">\\n                            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" \\\" + mdT.task_id + \\\" - \\\" +\\n                            mdT.task_subject}}\\n                        </h4>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\">\\n                            <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                                <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                                        <li class=\\\"active\\\">\\n                                            <a id=\\\"info-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#ptsk{{mdT.task_id}}\\\">Info</a>\\n                                        </li>\\n                                        <li>\\n                                            <a id=\\\"proj-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#ptk{{mdT.task_id}}\\\">Project\\n                                                related</a>\\n                                        </li>\\n                                        <li>\\n                                            <a id=\\\"adj-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#taskAdjusted\\\">Adjustments</a>\\n                                        </li>\\n                                        <li>\\n                                            <a id=\\\"timeline-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#taskTimeline\\\">Timeline</a>\\n                                        </li>\\n                                        <li>\\n                                            <a data-toggle=\\\"tab\\\" href=\\\"#taskForm\\\">Form</a>\\n                                        </li>\\n                                        <li>\\n                                            <a data-toggle=\\\"tab\\\" href=\\\"#taskSprint\\\">Sprint related</a>\\n                                        </li>\\n                                        <li *ngIf=\\\"mdT.para_status == '50'\\\">\\n                                            <a data-toggle=\\\"tab\\\" href=\\\"#taskRejected\\\" style=\\\"color: red;\\\"> <i class=\\\"fa fa-exclamation-circle\\\"\\n                                                    aria-hidden=\\\"true\\\"></i> Rejected Reason</a>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"min-height: 390px;\\\">\\n                            <div class=\\\"tab-content\\\">\\n                                <div id=\\\"ptsk{{mdT.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                                    <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"mdT.task_description\\\"\\n                                                style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Status</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.status_name }}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_date}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Creator</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.creator}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Assigned to</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.asigned}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_delivery}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Points Assigned</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_points}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Points Recorded</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_pointsd}}</p>\\n                                        </div>\\n                                        <div *ngIf=\\\"mdT.project\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                                        </div>\\n                                    </div>\\n                                    <div id=\\\"mdTComments\\\" class=\\\"box-footer box-comments\\\" style=\\\"max-height: 130px; overflow-y:scroll; background-color:rgb(238, 242, 244);padding-top: 0px;\\\">\\n                                        <div class=\\\"content-comments-users\\\" style=\\\"max-height:130px; font-size: 14px;\\\">\\n                                            <ul class=\\\"timeline comment-timeline-tk\\\">\\n                                                <li *ngIf=\\\"mdT.comments!=null && mdT.comments.length == 0\\\">\\n\\n                                                </li>\\n                                                <li *ngFor=\\\"let cpm of mdT.comments\\\" style=\\\"margin-top:5px;\\\">\\n                                                    <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 25px;width: 25px;\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\"\\n                                                            style=\\\"color:#FFF; font-size: 20px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <span class=\\\"time\\\">\\n                                                            {{cpm.note_date}}</span>\\n                                                        <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:rgb(130, 145, 152);font-size: 14px;\\\">\\n                                                            <b>{{cpm.creator + \\\" \\\"}}</b> Commented\\n                                                        </h3>\\n                                                        <div class=\\\"timeline-body\\\" style=\\\"overflow-y: scroll; background-color: transparent; max-height:200px; padding-bottom: 1px;\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div class=\\\"col-xs-12 col-md-12\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                    <div class=\\\"col-xs-12 col-md-12 comment-user\\\" style=\\\"background-color:rgb(238, 242, 244); padding-left: 1px; padding-right: 0px;\\\">\\n                                                                        <p class=\\\"comment-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                            <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\"\\n                                                                                style=\\\"color:rgb(68, 180, 248); font-size: 16px;\\\"></i>\\n                                                                            {{escapeHtml(cpm.note_text)}}</p>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer\\\">\\n                                        <button id=\\\"comment-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n                                            data-toggle=\\\"collapse\\\" data-target=\\\"#collapse1\\\" style=\\\"color:white;background-color:rgb(36, 122, 205);width: 160px!important;\\\">\\n                                            <div class=\\\"pull-left\\\">\\n                                                <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:white;background-color:rgb(36, 122, 205);font-size: 16px;\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\">\\n                                                Leave a Comment\\n                                            </div>\\n                                        </button>\\n                                        <div id=\\\"collapse1\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin-top: 10px;\\\">\\n                                            <textarea class=\\\"textarea-comments\\\" id=\\\"text-mdTask-taskboard\\\" [(ngModel)]=\\\"note.note_text\\\"\\n                                                style=\\\"resize: vertical; width: 100%; height: 80px;border: 2px solid rgb(238,242,244);outline: 0px none transparent;\\\"></textarea>\\n                                            <div class=\\\"pull-right\\\">\\n                                                <button id=\\\"publishcomm-mdTask-taskboard\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n                                                    style=\\\"background-color:rgb(51, 141, 197);\\\" type=\\\"button\\\" (click)=\\\"noteAdd(mdT.task_id, 1)\\\"\\n                                                    [disabled]=\\\"note.text == ''\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#collapse1\\\">Publish\\n                                                </button>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer\\\" *ngIf=\\\"note.attachments && note.attachments.length > 0\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of note.attachments\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                    <div class=\\\"box-footer\\\" *ngIf=\\\"mdT.attachments && mdT.attachments.length > 0\\\">\\n                                        <label>Attachments ({{mdT.total_attachments}})</label>\\n                                        <ul style=\\\"list-style-type:none;height:220px;overflow:scroll;width:100%;position:relative;padding-left:0px;\\\">\\n                                            <li *ngFor=\\\"let att of mdT.attachments\\\" style=\\\"width:200px;margin:5px;height:225px;\\\"\\n                                                class=\\\"pull-left\\\">\\n                                                <a id=\\\"att-mdTask-taskboard\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\">\\n                                                        <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a id=\\\"attclip-mdTask-taskboard\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\"\\n                                                        class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"fa fa-paperclip\\\"></i>{{ att.tsat_alias }}</a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.tsat_size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"ptk{{mdT.task_id}}\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                    <div *ngIf=\\\"mdT.project && mdT.project.length > 0\\\" class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Project Name</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_subject }}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                {{escapeHtml(sanitizeHtml(mdT.project.proj_description))}}\\n                                            </p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Project Number</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_id}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_start}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Project Creator</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.creator}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.applicant}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_end}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Progress</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_percentage +\\n                                                \\\"%\\\"}}</p>\\n                                        </div>\\n                                    </div>\\n                                    <div *ngIf=\\\"!mdT.project\\\" class=\\\"row\\\">\\n\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskAdjusted\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                    <div *ngIf=\\\"mdT.total_adjusted && mdT.total_adjusted.length > 0 \\\" class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding-bottom: 10px;\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Task Adjusted</label>\\n                                        </div>\\n                                        <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\"\\n                                            style=\\\"max-height:273px; font-size: 14px;\\\">\\n                                            <ul class=\\\"timeline comment-timeline-tk\\\">\\n                                                <li *ngFor=\\\"let adj of mdT.total_adjusted\\\" style=\\\"margin-top:5px;\\\">\\n                                                    <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 30px;width: 30px;\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\"\\n                                                            style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;\\\">\\n                                                            <b>{{adj.header}}</b>\\n                                                        </h3>\\n                                                        <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div>\\n                                                                    <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                        <span>{{adj.points}}</span> on {{adj.date}} /\\n                                                                        <span>{{adj.delivery}}</span>\\n                                                                        <br> Reason for adjustment : {{adj.reason}}\\n                                                                    </label>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                    <div *ngIf=\\\"!mdT.total_adjusted || mdT.total_adjusted.length == 0\\\" class=\\\"row\\\">\\n\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskTimeline\\\" class=\\\"tab-pane fade\\\">\\n                                    <div *ngIf=\\\"!mdT.timeline\\\" class=\\\"row\\\">\\n                                    </div>\\n                                    <div *ngIf=\\\"mdT.timeline\\\" class=\\\"row\\\">\\n                                        <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\"\\n                                            style=\\\"font-size: 14px;\\\">\\n                                            <ul class=\\\"timeline comment-daily-timeline\\\">\\n                                                <li *ngFor=\\\"let adj of mdT.timeline\\\" style=\\\"margin-top:5px;\\\">\\n                                                    <div class=\\\"icon-team-daily-table\\\" style=\\\"position: absolute;margin-left: 0px; height: 10px;width: 10px;\\\">\\n                                                        <i class=\\\"fa fa-dot-circle-o user-icon-daily\\\" aria-hidden=\\\"true\\\"\\n                                                            style=\\\"color:#0FB4FF;; font-size: 22px;position: absolute!important;top: 4px;left: -8px;\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 20px; height: 30px;width: 30px;\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\"\\n                                                            style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <label class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;margin-left: 14px; margin-top: 2px;\\\">\\n                                                            <b>{{adj.creator}}</b>\\n                                                            <span style=\\\"font-weight: normal;\\\">{{\\\" \\\" + adj.tittle}}</span>\\n                                                        </label>\\n                                                        <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div>\\n                                                                    <div class=\\\"pull-left col-xs-1 col-md-1 col-lg-1 \\\">\\n                                                                        <i class=\\\"{{adj.label}}\\\" [ngStyle]=\\\"adj.type == 'note' ? { 'font-size': '24px' } : adj.type == 'daily' ? { 'font-size': '28px' } : {}\\\"\\n                                                                            style=\\\"color:#0FB4FF\\\"></i>\\n\\n                                                                    </div>\\n                                                                    <div *ngIf=\\\"adj.type == 'note'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                        <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                            {{escapeHtml(adj.description)}}\\n                                                                            <span>\\n                                                                                <br> Date: {{adj.date}}</span>\\n                                                                        </label>\\n                                                                    </div>\\n                                                                    <div *ngIf=\\\"adj.type == 'daily'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                        <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                            <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                            <br> {{adj.date}}\\n                                                                            <br> Description:\\n                                                                            {{escapeHtml(adj.description)}}\\n                                                                            <span *ngIf=\\\"adj.date != ''\\\" style=\\\"font-weight: bold;\\\">\\n                                                                                <br> {{adj.points}} </span>\\n                                                                        </label>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskForm\\\" class=\\\"tab-pane fade\\\">\\n                                    <div *ngIf=\\\"!mdT.form\\\" class=\\\"row\\\">\\n\\n                                    </div>\\n                                    <div *ngIf=\\\"mdT.form && mdT.form.length > 0\\\" class=\\\"row\\\">\\n                                        <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\"\\n                                            style=\\\"height: 407px;font-size: 14px;\\\">\\n                                            <div style=\\\"text-align: left;\\\">\\n                                                <span style=\\\"color:rgb(130,145,152);font-weight: bold;\\\">Category:\\n                                                    {{mdT.form[0].cate_desc}}</span>\\n                                            </div>\\n                                            <table style=\\\"text-align: center;width: 100%;\\\">\\n                                                <tbody style=\\\"width: 100%;\\\">\\n                                                    <tr *ngFor=\\\"let fr of mdT.form\\\" style=\\\"height: 50px;\\\">\\n                                                        <td style=\\\"width: 40%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                                            <div style=\\\"color:rgb(130,145,152);border-radius: 15px; height: 30px; border: 2px solid rgb(238,242,244); width: 100%; margin-bottom: 3px;height: 30px;overflow-y: scroll;padding-top: 4px;\\\">\\n                                                                {{fr.form_field}}\\n                                                            </div>\\n                                                        </td>\\n                                                        <td style=\\\"width: 60%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                                            <div style=\\\"color:rgb(130,145,152); border-radius: 15px;height: 30px; border: 2px solid rgb(238,242,244); width: 100%; margin-bottom: 3px;height: 30px;overflow-y: scroll;padding-top: 4px;\\\">\\n                                                                {{fr.form_data}}\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskSprint\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                    <div *ngIf=\\\"mdT.sprint && mdT.sprint.spri_id\\\" class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\"> Number</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_id}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Date start</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_init}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Date end</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_end}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.grop_name}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Total points</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_points}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_description}}</p>\\n                                        </div>\\n                                    </div>\\n                                    <div *ngIf=\\\"!mdT.sprint\\\" class=\\\"row\\\">\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskRejected\\\" class=\\\"tab-pane fade\\\">\\n                                    <div *ngIf=\\\"!mdT.rejected\\\" class=\\\"row\\\">\\n                                        No reason\\n                                    </div>\\n                                    <div *ngIf=\\\"mdT.rejected\\\" class=\\\"row\\\">\\n                                        <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                            <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                                <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                                <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"mdT.rejected.retk_description\\\"\\n                                                    style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                                </div>\\n                                            </div>\\n                                            <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                                <label class=\\\"control-label label-sqlx\\\">Rejected by</label>\\n                                                <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.rejected.rejectedby }}</p>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div id=\\\"collapse-file\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin:20px 0;\\\">\\n                        <p-fileUpload #form1 name=\\\"fileUpload-Tasks\\\" (onSelect)=\\\"onChangeTask($event,'new')\\\" multiple=\\\"multiple\\\"\\n                            maxFileSize=\\\"8388608\\\" [showUploadButton]=\\\"false\\\" (onRemove)=\\\"onChangeTask($event,'delete')\\\"></p-fileUpload>\\n                        <button id=\\\"save-mdTask-taskboard\\\" class=\\\"btn btn-primary btn-sm\\\" type=\\\"button\\\" (click)=\\\"onUploadAttachment(mdT.task_id, form)\\\"\\n                            (click)=\\\"form1.clear()\\\" [disabled]=\\\"!taskattch.attachments || taskattch.attachments.length==0\\\"\\n                            data-toggle=\\\"collapse\\\" data-target=\\\"#collapse-file\\\">Save\\n                        </button>\\n                    </div>\\n                    <button id=\\\"close2-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                        style=\\\"background-color: rgb(128, 186, 84);\\\">Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mcTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button id=\\\"close-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\" (click)=\\\"closeDaily()\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"font-weight: bold;\\\"><i class=\\\"sq sq-record-progress\\\" aria-hidden=\\\"true\\\"\\n                            style=\\\"font-weight: bold;\\\"></i> &nbsp;&nbsp;\\n                        Record progress</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <ul class=\\\"nav nav-tabs\\\">\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"task-mcTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#cptsk{{mcT.task_id}}\\\">Task {{\\\"#\\\" +\\n                                mcT.task_id}}</a>\\n                        </li>\\n                        <li *ngIf=\\\"mcT.project\\\">\\n                            <a id=\\\"proj-mcTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#cptk{{mcT.task_id}}\\\">Project {{\\\"#\\\" +\\n                                mcT.project.proj_id}}</a>\\n                        </li>\\n                    </ul>\\n                    <div class=\\\"tab-content\\\" style=\\\"color: #829198;\\\">\\n                        <div id=\\\"cptsk{{mcT.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;max-height: 31px;overflow: scroll;margin-bottom: 5px;margin-top: 3px;\\\">\\n                                <h4>{{mcT.task_subject}}</h4>\\n                            </div>\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Number</label>\\n                                    <p>{{mcT.task_id}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Date</label>\\n                                    <p>{{mcT.task_date}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Creator</label>\\n                                    <p>{{mcT.creator}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Status</label>\\n                                    <p>{{ mcT.status_name }}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Assigned to</label>\\n                                    <p>{{mcT.asigned}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Delivery Date</label>\\n                                    <p>{{mcT.task_delivery}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Points</label>\\n                                    <p>{{mcT.task_points}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Points Recorded</label>\\n                                    <p>{{mcT.task_pointsd}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Product</label>\\n                                    <p>{{mcT.prod_name}}</p>\\n                                </div>\\n                                <div *ngIf=\\\"mcT.unit_id && mcT.unit_id > 0\\\" class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Units Assigned</label>\\n                                    <p>{{mcT.unit_points}}</p>\\n                                </div>\\n                                <div *ngIf=\\\"mcT.unit_id && mcT.unit_id > 0\\\" class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Units Recorded</label>\\n                                    <p>{{mcT.unit_pointsd}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 15px;padding-right: 15px;\\\">\\n                                    <label class=\\\"control-label\\\">Description</label>\\n                                    <div [innerHtml]=\\\"mcT.task_description\\\" style=\\\"max-height: 60px;overflow: scroll;\\\"></div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"mcT.project\\\" id=\\\"cptk{{mcT.task_id}}\\\" class=\\\"tab-pane fade\\\">\\n                            <h3>{{mcT.project.proj_subject}}</h3>\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Number</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.proj_id}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Date</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.proj_start}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Creator</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.creator}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Applicant</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.applicant}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Status</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.tkst_name}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Subject</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.proj_subject}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Group</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.groupname}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Product</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.prod_name}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">End</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.proj_end ? 'Not Defined'\\n                                        : mcT.project.proj_end}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                    <span *ngFor=\\\"let uss of mcT.project.userssh\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px;\\\">{{uss.user_name}}</span>\\n                                </div>\\n                            </div>\\n                            <div [innerHtml]=\\\"escapeHtml(sanitizeHtml(mcT.project.proj_description))\\\"></div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"color: #829198;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <label>Date</label>\\n                            <p-calendar id=\\\"dail_date-mcTask-taskboard\\\" name=\\\"dail_date-mcTask-taskboard\\\" class=\\\"ui-g ui-fluid\\\"\\n                                icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"\\n                                view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [minDate]=\\\"minDateDaily\\\" [maxDate]=\\\"maxDateDaily\\\"\\n                                [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            <span>{{date3|date}}</span>\\n                            <span class=\\\"has-error\\\" *ngIf=\\\"compareDate(mcT.spri_init) === -1 || compareDate(mcT.spri_end) === 1\\\">Date out of sprint range.</span>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" name=\\\"points-mcTask-taskboard\\\" id=\\\"points-mcTask-taskboard\\\" step=\\\"0.01\\\"\\n                                    min=\\\"0\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"day.dail_points\\\">\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points <= 0\\\">Points must be greater than zero</span>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"(parseFloat(mcT.task_pointsd)+parseFloat(day.dail_points) > parseFloat(mcT.task_points))\\\">Points\\n                                    selected exceed current task duration.</span>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"mcT.unit_id && mcT.unit_id != 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">  \\n                                <div class=\\\"form-group\\\">\\n                                    <div class=\\\"performance-container\\\">\\n                                        <div class=\\\"performance performance-text\\\">\\n                                                <label>Performance Indicator</label>\\n                                        </div>\\n                                        <div class=\\\"spinner-squadlinx performance\\\">\\n                                            <input type=\\\"number\\\" id=\\\"units_newDaily\\\" name=\\\"units_newDaily\\\" class=\\\"input_number_squadlinx\\\"\\n                                                [(ngModel)]=\\\"day.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\" style=\\\"margin-bottom: 6px;\\\"> \\n                                        </div>\\n                                        <div class=\\\"dropdownSqlx\\\">\\n                                            <p-dropdown [disabled]=\\\"true\\\" id=\\\"dropdownUnits_newDaily\\\" name=\\\"dropdownUnits_newDaily\\\" class=\\\"ui-g ui-fluid\\\"\\n                                                dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"day.unit_id\\\"\\n                                                placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                        </div>  \\n                                    </div> \\n                                    <span class=\\\"has-error\\\" *ngIf=\\\"day.unit_points <= 0\\\">\\n                                        Performance Indicator must be greater than zero</span>\\n                                </div>                          \\n                            </div>\\n                    </div>\\n                    <div class=\\\"form-group editor-squadlinx\\\">\\n                        <label>Description</label>\\n                        <p-editor id=\\\"p_editor_description_taskboard\\\" name=\\\"p_editor_description_taskboard\\\" [(ngModel)]=\\\"day.dail_text\\\"\\n                            [style]=\\\"{'height':'100px'}\\\">\\n                            <p-header>\\n                                <span class=\\\"ql-formats\\\">\\n                                    <span class=\\\"ql-header\\\">\\n                                        <select class=\\\"ql-header\\\">\\n                                            <option value=\\\"1\\\">Heading</option>\\n                                            <option value=\\\"2\\\">Subheading</option>\\n                                            <option selected>Normal</option>\\n                                        </select>\\n                                    </span>\\n\\n                                    <span class=\\\"ql-font\\\">\\n                                        <select class=\\\"ql-font\\\">\\n                                            <option selected>Sans Serif</option>\\n                                            <option value=\\\"serif\\\">Serif</option>\\n                                            <option value=\\\"monospace\\\">Monospace</option>\\n                                        </select>\\n                                    </span>\\n                                </span>\\n\\n                                <span class=\\\"ql-formats\\\">\\n                                    <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                    <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                    <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                </span>\\n\\n                                <span class=\\\"ql-formats\\\">\\n                                    <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                    <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                    <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                        <select class=\\\"ql-align\\\">\\n                                            <option selected></option>\\n                                            <option value=\\\"center\\\"></option>\\n                                            <option value=\\\"right\\\"></option>\\n                                            <option value=\\\"justify\\\"></option>\\n                                        </select>\\n                                    </span>\\n                                </span>\\n                            </p-header>\\n                        </p-editor>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\"\\n                        (click)=\\\"closeDaily()\\\" style=\\\"background-color: rgb(15, 188, 255);\\\">Close\\n                    </button>\\n                    <button id=\\\"save-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveDaily(day, mcT.task_id)\\\" style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"validateDaily()\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"taskMdfy\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button id=\\\"close-taskMdfy-taskboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">Task #{{mdT.task_id}}</h4>\\n                    <input id=\\\"task_id-taskMdfy-taskboard\\\" [(ngModel)]=\\\"mdT.task_id\\\" hidden=\\\"true\\\">\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <!-- <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">               -->\\n                        <label>Subject</label>\\n                        <textarea id=\\\"subject-taskMdfy-taskboard\\\" style=\\\"resize: vertical;\\\" class=\\\"form-control\\\" rows=\\\"1\\\"\\n                            [(ngModel)]=\\\"mdT.task_subject\\\"></textarea>\\n                        <!-- </div> -->\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <!-- <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\"> -->\\n                        <label>Product</label>\\n                        <p-dropdown id=\\\"prod_id-taskMdfy-taskboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                            [(ngModel)]=\\\"mdT.prod_id\\\" filter=\\\"filter\\\"></p-dropdown>\\n                        <!-- </div> -->\\n                    </div>\\n                    <div *ngIf=\\\"parseFloat(mdT.task_pointsd)== 0\\\" class=\\\"form-group\\\">\\n                        <!-- <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\"> -->\\n                        <label>Assign to</label>\\n                        <p-dropdown id=\\\"user_asigned-taskMdfy-taskboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                            [options]=\\\"userslbl\\\" [(ngModel)]=\\\"mdT.user_asigned\\\" filter=\\\"filter\\\"></p-dropdown>\\n                        <!-- </div> -->\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <!-- <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\"> -->\\n                        <label>Description</label>\\n                        <p-editor id=\\\"descr-taskMdfy-taskboard\\\" [(ngModel)]=\\\"mdT.task_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                            <p-header>\\n                                <span class=\\\"ql-formats\\\">\\n                                    <span class=\\\"ql-header\\\">\\n                                        <select class=\\\"ql-header\\\">\\n                                            <option value=\\\"1\\\">Heading</option>\\n                                            <option value=\\\"2\\\">Subheading</option>\\n                                            <option selected>Normal</option>\\n                                        </select>\\n                                    </span>\\n\\n                                    <span class=\\\"ql-font\\\">\\n                                        <select class=\\\"ql-font\\\">\\n                                            <option selected>Sans Serif</option>\\n                                            <option value=\\\"serif\\\">Serif</option>\\n                                            <option value=\\\"monospace\\\">Monospace</option>\\n                                        </select>\\n                                    </span>\\n                                </span>\\n\\n                                <span class=\\\"ql-formats\\\">\\n                                    <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                    <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                    <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                </span>\\n\\n                                <span class=\\\"ql-formats\\\">\\n                                    <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                    <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                    <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                        <select class=\\\"ql-align\\\">\\n                                            <option selected></option>\\n                                            <option value=\\\"center\\\"></option>\\n                                            <option value=\\\"right\\\"></option>\\n                                            <option value=\\\"justify\\\"></option>\\n                                        </select>\\n                                    </span>\\n                                </span>\\n                            </p-header>\\n                        </p-editor>\\n                        <!-- </div> -->\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-taskMdfy-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">\\n                        Close\\n                    </button>\\n                    <button id=\\\"save-taskMdfy-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\"\\n                        [disabled]=\\\"(!mdT.task_subject || mdT.task_subject == '') || (!mdT.user_asigned) || ((mdT.task_delivery && mdT.task_delivery != '' && mdT.task_delivery != 'null') && (!mdT.user_asigned == 0 || !mdT.user_asigned == null) && (!mdT.task_points || mdT.task_points == 0 || mdT.task_points == '' || mdT.task_points == 'null'))\\\"\\n                        (click)=\\\"editTask()\\\">\\n                        <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdExtraT\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button id=\\\"close-mdExtraT-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"font-weight: bold;\\\"><i class=\\\"sq sq-adjust-duration\\\" aria-hidden=\\\"true\\\"\\n                            style=\\\"font-weight: bold;\\\"></i> &nbsp;&nbsp;\\n                        Adjust duration</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"color: #829198;\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-top: -24px;\\\">\\n                        <div id=\\\"infotask-mdExtraT\\\" class=\\\"col-lg-12 col-md-12 col-sm-12 col-xs-12\\\" style=\\\"max-height: 308px;overflow: scroll;margin-top: 6px;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;max-height: 31px;overflow: scroll;margin-bottom: 5px;margin-top: 3px;\\\">\\n                                <h4>{{task.task_subject}}</h4>\\n                            </div>\\n\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Number</label>\\n                                    <p>{{task.task_id}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Date</label>\\n                                    <p>{{task.task_date}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Creator</label>\\n                                    <p>{{task.creator}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Assigned to</label>\\n                                    <p>{{task.asigned}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Delivery Date</label>\\n                                    <p>{{task.task_delivery}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Points</label>\\n                                    <p>{{task.task_points}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Points Recorded</label>\\n                                    <p>{{task.task_pointsd}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Product</label>\\n                                    <p>{{task.prod_name}}</p>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;\\\">\\n                                <label class=\\\"control-label\\\">Description</label>\\n                                <div [innerHtml]=\\\"task.task_description\\\" style=\\\"max-height: 60px;overflow: scroll;\\\"></div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-lg-11 col-md-11 col-sm-11 col-xs-11\\\" style=\\\"border-bottom: 1px solid lightgray; margin-left: 12px;width: 95%; margin-bottom: 10px;margin-top: 4px;\\\">\\n\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <label>New Delivery Date</label>\\n                            <p-calendar id=\\\"delivery-mdExtraT-taskboard\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\"\\n                                [(ngModel)]=\\\"extra.delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"\\n                                [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            <span>{{date3|date}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Add/Remove Points</label>\\n                                <input type=\\\"number\\\" step=\\\"0.01\\\" id=\\\"points-taskMdfy-taskboard\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"extra.points\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"form-group textarea-squadlinx\\\">\\n                        <label>Description</label>\\n                        <textarea id=\\\"description-mdExtraT-taskboard\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\"\\n                            rows=\\\"3\\\" placeholder=\\\"Reason for adjustment...\\\" [(ngModel)]=\\\"extra.text\\\"></textarea>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-mdExtraT-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\"\\n                        style=\\\"background-color: rgb(15, 188, 255);\\\">Close\\n                    </button>\\n                    <button id=\\\"save-mdExtraT-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\"\\n                        [disabled]=\\\"(!extra.text || extra.text == '' || extra.text == 'undefined')\\\" (click)=\\\"saveExtra()\\\"\\n                        style=\\\"background-color: rgb(128, 186, 84);\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"task_tag\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\" style=\\\"width:350px;\\\">\\n            <div class=\\\"modal-content tags_task_sqlx\\\">\\n                <div class=\\\"modal-header description-modal-tags\\\">\\n                    <button id=\\\"close-task_tag-taskboard\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">Tag for Task#{{task.task_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"height:482px;\\\">\\n                    <ul class=\\\"nav nav-tabs\\\">\\n                        <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                            <a id=\\\"setpagetag-mdAddTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#my-tags\\\" (click)=\\\"setPage(1)\\\">My\\n                                tags</a>\\n                        </li>\\n                        <li [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                            <a id=\\\"createag-mdAddTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#create-tag\\\" (click)=\\\"setPage(2)\\\">New\\n                                tag</a>\\n                        </li>\\n                        <li [ngClass]=\\\"{'active':tagMenu == 3}\\\">\\n                            <a id=\\\"deletetag-mdAddTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#delete-tag\\\" (click)=\\\"setPage(3)\\\">Remove\\n                                tag</a>\\n                        </li>\\n                    </ul>\\n                    <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"my-tags\\\" class=\\\"col-md-12\\\" style=\\\"height:350px;margin-top:10px;\\\">\\n                        <div *ngIf=\\\"tagSubmenu == 0\\\">\\n                            <div *ngIf=\\\"mytags.length > 0\\\" style=\\\"text-align:center;\\\">Select one of the custom tags to\\n                                save it in the task</div>\\n                            <div class=\\\"col-md-12 row no-padding\\\" style=\\\"height:265px;overflow-x:hidden; overflow-y:scroll;margin-left:3%;\\\">\\n                                <div *ngIf=\\\"mytags.length == 0\\\">You don't have any customized tags yet.</div>\\n                                <div *ngFor=\\\"let mtag of mytags\\\" class=\\\"pull-left\\\">\\n                                    <div class=\\\"preview-tag-medium\\\" [ngStyle]=\\\"{background:mtag.color}\\\" (click)=\\\"chooseTagOption(mtag,4)\\\"\\n                                        [ngClass]=\\\"{'chosen-option':chosenTag && chosenTag.tag_id==mtag.tag_id}\\\">\\n                                        <i class=\\\"{{mtag.icon}}\\\" style=\\\"font-size:3em; color:#ffffff;\\\" aria-hidden=\\\"true\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"{{mtag.description}}\\\" data-container=\\\"body\\\"></i>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-md-12 row\\\" style=\\\"margin-top:60px;margin-left:30%\\\">\\n                            <button id=\\\"settag-task_tag-taskboard\\\" class=\\\"button_settag_sqlx\\\" tooltipPosition=\\\"top\\\"\\n                                pTooltip=\\\"Save Tag\\\" (click)=\\\"setTag()\\\">Save</button>\\n                        </div>\\n                    </div>\\n                    <div *ngIf=\\\"tagSubmenu > 0\\\" class=\\\"col-md-12 row\\\" style=\\\"margin:15px 0px 0px 0px;\\\">\\n                        <button id=\\\"prev-task_tag-taskboard\\\" [disabled]=\\\"tagSubmenu == 1\\\" style=\\\"border-radius:15px;\\\"\\n                            class=\\\"pull-left button_prevtag_sqlx\\\" (click)=\\\"slidePage('prev')\\\">Prev\\n                        </button>\\n                        <button id=\\\"next-task_tag-taskboard\\\" [disabled]=\\\"tagSubmenu == 3\\\" style=\\\"border-radius:15px;\\\"\\n                            class=\\\"pull-right button_nexttag_sqlx\\\" (click)=\\\"slidePage('next')\\\">Next\\n                        </button>\\n                    </div>\\n                    <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"create-tag\\\" class=\\\"col-md-12\\\" style=\\\"height:336px;margin-top:10px;overflow:scroll;\\\">\\n                        <div *ngIf=\\\"tagSubmenu == 1\\\" class=\\\"container-tag\\\" id=\\\"tag-pattern\\\">\\n                            <div *ngFor=\\\"let pt of patterns\\\" class=\\\"menu-tiles pull-left\\\" (click)=\\\"chooseTagOption(pt,1)\\\"\\n                                [ngClass]=\\\"{'chosen-option':chosenTag && chosenTag.pattern==pt}\\\">\\n                                <i class=\\\"{{pt}}\\\"></i>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagSubmenu == 2\\\" class=\\\"container-tag\\\" id=\\\"tag-color\\\">\\n                            <div *ngFor=\\\"let cl of colorpalette\\\" class=\\\"menu-brick pull-left\\\" [ngStyle]=\\\"{background : cl}\\\"\\n                                [ngStyle]=\\\"{ 'box-shadow': '0px 0px 2px 1px' + cl }\\\" (click)=\\\"chooseTagOption(cl,2)\\\"\\n                                [ngClass]=\\\"{'chosen-option':chosenTag && chosenTag.color==cl}\\\"></div>\\n                        </div>\\n                        <div *ngIf=\\\"tagSubmenu == 3\\\" class=\\\"container-tag\\\" id=\\\"tag-name\\\" style=\\\"margin-top:20px;\\\">\\n                            <div class=\\\"preview-tag-large\\\" [ngStyle]=\\\"{background:chosenTag.color}\\\">\\n                                <i class=\\\"{{chosenTag.pattern}}\\\" style=\\\"font-size:5em;color:#ffffff;\\\" aria-hidden=\\\"true\\\"\\n                                    tooltipPosition=\\\"top\\\" pTooltip=\\\"{{chosenTag.name}}\\\" data-container=\\\"body\\\"></i>\\n                            </div>\\n                            <div class=\\\"col-md-12 row\\\" style=\\\"margin-top:80px;margin-left:0px;\\\">\\n                                <textarea id=\\\"tagname-task_tag-taskboard\\\" style=\\\"resize: vertical;\\\" class=\\\"form-control\\\"\\n                                    rows=\\\"1\\\" [(ngModel)]=\\\"chosenTag.name\\\" (keypress)=\\\"chooseTagOption(chosenTag.name,3)\\\"></textarea>\\n                                <label style=\\\"margin-top:5px;margin-bottom:20px;font-size:11px;color:#9e9e9e;\\\">The\\n                                    description you choose will be saved with your custom tags.</label>\\n                                <button id=\\\"save-task_tag-taskboard\\\" style=\\\"margin-left:30%;\\\" tooltipPosition=\\\"top\\\"\\n                                    pTooltip=\\\"Save New Tag\\\" class=\\\"button_savesettag_sqlx\\\" [disabled]=\\\"!chosenTag.name || chosenTag.name == '' || !chosenTag.color || chosenTag.color == '' || !chosenTag.pattern || chosenTag.pattern == ''\\\"\\n                                    (click)=\\\"saveNewTag(chosenTag)\\\">Save\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div *ngIf=\\\"tagSubmenu > 0\\\" class=\\\"col-md-12 row\\\" style=\\\"padding-left:45%;\\\">\\n                        <div class=\\\"pull-left\\\" [ngClass]=\\\"{'dot-selected': tagSubmenu == 1}\\\" style=\\\"border:1px solid #b9b9b9; width:10px;height:10px;border-radius:10px;background:#f5f5f5;margin:5px;\\\"></div>\\n                        <div class=\\\"pull-left\\\" [ngClass]=\\\"{'dot-selected': tagSubmenu == 2}\\\" style=\\\"border:1px solid #b9b9b9; width:10px;height:10px;border-radius:10px;background:#f5f5f5;margin:5px;\\\"></div>\\n                        <div class=\\\"pull-left\\\" [ngClass]=\\\"{'dot-selected': tagSubmenu == 3}\\\" style=\\\"border:1px solid #b9b9b9; width:10px;height:10px;border-radius:10px;background:#f5f5f5;margin:5px;\\\"></div>\\n                    </div>\\n                    <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"delete-tag\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div *ngIf=\\\"tagSubmenu==0\\\">\\n                            <div *ngIf=\\\"tagbytask.tag_id != undefined\\\" style=\\\" margin-top: 9px;text-align:center;\\\">Press\\n                                the delete button if you want to remove the tag added to the task</div>\\n                            <div class=\\\"col-md-12 row no-padding\\\" style=\\\"height:400px;margin-left:3%;\\\">\\n                                <div *ngIf=\\\"tagbytask.tag_id == undefined\\\" style=\\\" margin-top: 9px;\\\">You do not have a\\n                                    tag added to the task</div>\\n\\n                                <div class=\\\"row\\\" style=\\\"height: 24px\\\">\\n                                    <div class=\\\" div_tagtask_sqlx\\\" [ngStyle]=\\\"{background: tagbytask.tag_color}\\\">\\n                                        <i class=\\\"{{tagbytask.tag_icon}}\\\" style=\\\"font-size:3em;color:#ffffff;\\\"\\n                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tagbytask.tag_description}}\\\"\\n                                            data-container=\\\"body\\\"></i>\\n                                    </div>\\n                                    <div class=\\\"row\\\" style=\\\"margin-top:230px;margin-left:34%;\\\">\\n                                        <button id=\\\"deletetag-task_tag-taskboard\\\" class=\\\"button_deletetag_sqlx\\\" (click)=\\\"deleteTagsByTask(tagbytask.task_id,tagbytask.tag_id)\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Tag\\\">\\n                                            <i class=\\\"sq sq-eliminar\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </div>\\n\\n\\n\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdMainFilter\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"width: 900px!important;\\\">\\n            <div class=\\\"modal-content modal-mainfilter\\\">\\n                <div class=\\\"modal-header header-event header-role\\\">\\n                    <button id=\\\"close-mdMainFilter-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-filter\\\"></i> Main Filter </h4>\\n                </div>\\n                <div class=\\\"modal-body scrollable md-roles\\\" style=\\\"height: 400px;\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-top: 10px;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 inputs-mainfilter\\\">\\n                                        <div class=\\\"row\\\">\\n                                            <div class=\\\"pull-left col-md-10 label-input-mainfilter\\\">\\n                                                <input id=\\\"file-upload-mdMainFilter\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\"\\n                                                    placeholder=\\\"Search a product\\\" [(ngModel)]=\\\"searchproduct\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right col-md-1 search-input-mainfilter\\\">\\n                                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 inputs-mainfilter\\\">\\n                                        <div class=\\\"row\\\">\\n                                            <div class=\\\"pull-left col-md-10 label-input-mainfilter\\\">\\n                                                <input id=\\\"searchproj-mdMainFilter-taskboard\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\"\\n                                                    placeholder=\\\"Search a project\\\" [(ngModel)]=\\\"searchproject\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right col-md-1 search-input-mainfilter\\\">\\n                                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 inputs-mainfilter\\\">\\n                                        <div class=\\\"row\\\">\\n                                            <div class=\\\"pull-left col-md-10 label-input-mainfilter\\\">\\n                                                <input id=\\\"searchuser-mdMainFilter-taskboard\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\"\\n                                                    placeholder=\\\"Search a user\\\" [(ngModel)]=\\\"searchuser\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right col-md-1 search-input-mainfilter\\\">\\n                                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div style=\\\"height:10px;\\\">\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-4 col-md-4 content-results-mainfilter\\\">\\n                                        <div class=\\\"form-group\\\" style=\\\"max-height: 280px;overflow: scroll;\\\">\\n                                            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n                                                <thead>\\n                                                    <th style=\\\"width:95px;\\\" (click)=\\\"selectAllItems(1)\\\" style=\\\"width: 30px;\\\">\\n                                                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                            style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                            <i *ngIf=\\\"selectedProduct.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                                            <i *ngIf=\\\"selectedProduct.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                            style=\\\"text-align:left;height:auto;color:rgb(130, 145, 152);font-size: 14px;\\\">\\n                                                            ALL\\n                                                        </div>\\n                                                    </th>\\n                                                </thead>\\n                                                <tbody>\\n                                                    <tr *ngFor=\\\"let pr of products | filter : searchproduct\\\">\\n                                                        <td style=\\\"padding:0px;margin:0px;\\\">\\n                                                            <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                                style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:25px;\\\">\\n                                                                <p-checkbox id=\\\"prod-mdMainFilter-taskboard\\\" name=\\\"product-checkbox\\\"\\n                                                                    value=\\\"{{pr.value}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedProduct\\\"></p-checkbox>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                                style=\\\"text-align:left;height:25px;\\\">\\n                                                                {{ pr.label }}\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-4 col-md-4 content-results-mainfilter\\\">\\n                                        <div *ngIf=\\\"filter_projects == 0\\\" class=\\\"form-group\\\" style=\\\"max-height: 280px;overflow: scroll;\\\">\\n                                            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n                                                <thead>\\n                                                    <th style=\\\"width:95px;\\\" (click)=\\\"selectAllItems(2)\\\" style=\\\"width: 30px;\\\">\\n                                                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                            style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                            <i *ngIf=\\\"selectedprojects.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                                            <i *ngIf=\\\"selectedprojects.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                            style=\\\"text-align:left;height:auto;border-bottom: 1px solid rgb(229, 229, 229);font-size: 14px;color:rgb(130, 145, 152);\\\">\\n                                                            ALL\\n                                                        </div>\\n                                                    </th>\\n                                                </thead>\\n                                                <tbody>\\n                                                    <tr *ngFor=\\\"let mp of myProjects | filter : searchproject\\\">\\n                                                        <td style=\\\"padding:0px;margin:0px;\\\">\\n                                                            <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                                style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                                <p-checkbox id=\\\"proj-mdMainFilter-taskboard\\\" name=\\\"product-checkbox\\\"\\n                                                                    value=\\\"{{mp.value}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedprojects\\\"></p-checkbox>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                                style=\\\"text-align:left;height:auto;border-bottom: 1px solid rgb(229, 229, 229);;\\\">\\n                                                                {{ mp.label }}\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-4 col-md-4 content-results-mainfilter\\\">\\n                                        <div class=\\\"form-group\\\" style=\\\"max-height: 280px;overflow: scroll;\\\">\\n                                            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n                                                <thead>\\n                                                    <th style=\\\"width:95px;\\\" (click)=\\\"selectAllItems(3)\\\" style=\\\"width: 30px;\\\">\\n                                                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                            style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                            <i *ngIf=\\\"selectedNodes.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                                            <i *ngIf=\\\"selectedNodes.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                            style=\\\"text-align:left;height:auto;font-size: 14px;color:rgb(130, 145, 152);\\\">\\n                                                            ALL\\n                                                        </div>\\n                                                    </th>\\n                                                </thead>\\n                                                <tbody>\\n                                                    <tr *ngFor=\\\"let ct of contactsTree\\\">\\n                                                        <td style=\\\"padding:0px;margin:0px;\\\">\\n                                                            <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                                style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                                <!-- <p-checkbox name=\\\"product-checkbox\\\" value=\\\"{{ct.data}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"selectAllChildrens(ct.children, ct.data)\\\"></p-checkbox> -->\\n                                                                <p-checkbox id=\\\"group-mdMainFilter-taskboard\\\" name=\\\"product-checkbox\\\"\\n                                                                    value=\\\"{{ct.data}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\"\\n                                                                    (click)=\\\"updateSelectA($event, ct.children, ct.data)\\\"\\n                                                                    (change)=\\\"updateSelectA($event, ct.children, ct.data)\\\"></p-checkbox>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                                style=\\\"text-align:left;height:auto;text-transform:uppercase;\\\">\\n                                                                {{ ct.label }}\\n                                                            </div>\\n                                                            <div *ngIf=\\\"ct.children.length > 0\\\">\\n                                                                <div *ngFor=\\\"let ch of ct.children | filter : searchuser\\\"\\n                                                                    style=\\\"margin-left:20px;\\\">\\n                                                                    <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                                        style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;    max-height: 30px;\\\">\\n                                                                        <p-checkbox id=\\\"user-mdMainFilter-taskboard\\\"\\n                                                                            name=\\\"product-checkbox\\\" value=\\\"{{ch.data}}\\\"\\n                                                                            label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\"\\n                                                                            (click)=\\\"updateSelect($event)\\\" (change)=\\\"updateSelect($event)\\\"></p-checkbox>\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                                        style=\\\"text-align:left;height:auto;max-height: 30px;\\\">\\n                                                                        {{ ch.label }}\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer close-footer\\\">\\n                    <div class=\\\"footer-mainfilter-line\\\">\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"pull-left\\\" style=\\\"margin-left: 40px;\\\">\\n                            <button id=\\\"clear-mdMainFilter-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(164, 203, 91);padding-right: 20px;\\\"\\n                                (click)=\\\"clearFilter()\\\">Clear\\n                            </button>\\n                        </div>\\n                        <div class=\\\"pull-right\\\" style=\\\"margin-right: 40px;\\\">\\n                            <button id=\\\"done-mdMainFilter-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(15, 188, 255);\\\"\\n                                data-dismiss=\\\"modal\\\">Done\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdSprints\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"width: 900px!important;\\\">\\n            <div class=\\\"modal-content modal-mainfilter\\\">\\n                <div class=\\\"modal-header header-event header-role\\\">\\n                    <button id=\\\"close-mdSprints-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\" (click)=\\\"doneMdSprint()\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-sprints\\\"></i> Sprints </h4>\\n                </div>\\n                <div class=\\\"modal-body scrollable md-roles\\\" style=\\\"height: 250px;\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-top: 10px;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"row\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div style=\\\"height:10px;\\\">\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12 content-results-mdsprints\\\">\\n                                        <div class=\\\"form-group\\\" style=\\\"max-height: 280px;overflow: scroll;\\\">\\n                                            <table class=\\\"table table-bordered-sqlx table-hover table-striped table-projects\\\"\\n                                                style=\\\"border:none!important; max-height:100px;\\\">\\n                                                <thead style=\\\"text-align: center;\\\">\\n                                                    <th></th>\\n                                                    <th style=\\\"text-align: center;\\\">Number</th>\\n                                                    <th style=\\\"text-align: center;\\\">Initial Date</th>\\n                                                    <th style=\\\"text-align: center;\\\">End Date</th>\\n                                                    <th style=\\\"text-align: center;\\\">Description</th>\\n                                                </thead>\\n                                                <tbody>\\n                                                    <tr *ngFor=\\\"let spgr of mysprintsgroup\\\">\\n                                                        <td>\\n                                                            <p-checkbox id=\\\"spr-mdSprints-taskboard\\\" name=\\\"spr-checkbox\\\"\\n                                                                value=\\\"{{spgr.spri_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"sprintselected\\\"\\n                                                                (click)=\\\"showSelected($event, spgr.spri_id)\\\"></p-checkbox>\\n                                                        </td>\\n                                                        <td>{{ spgr.spri_id }}</td>\\n                                                        <td>{{ spgr.spri_init }}</td>\\n                                                        <td>{{ spgr.spri_end }}</td>\\n                                                        <td>{{ spgr.spri_description }}</td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer close-footer\\\">\\n                    <div class=\\\"footer-mainfilter-line\\\">\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"pull-left\\\" style=\\\"margin-left: 40px;\\\">\\n                        </div>\\n                        <div class=\\\"pull-right\\\" style=\\\"margin-right: 40px;\\\">\\n                            <button id=\\\"save-mdSprints-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(128, 186, 84);\\\"\\n                                data-dismiss=\\\"modal\\\" (click)=\\\"saveChanges()\\\">Save\\n                            </button>\\n                            <button id=\\\"done-mdSprints-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(15, 188, 255);\\\"\\n                                data-dismiss=\\\"modal\\\" (click)=\\\"doneMdSprint()\\\">Close\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdCpImp\\\" role=\\\"dialog\\\" data-backdrop=\\\"static\\\" data-keyboard=\\\"false\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content modal-cpimp\\\">\\n                <div class=\\\"modal-header header-event header-role\\\">\\n                    <button id=\\\"close-mdCpImp-taskboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                        style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-improving\\\"></i> Move to Improving</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group textarea-squadlinx\\\" style=\\\"color: #829198;\\\">\\n                        <label>Reason for improving</label>\\n                        <textarea id=\\\"description-mdCpImp-taskboard\\\" style=\\\"resize: inherit;\\\" class=\\\"txt-sqlx form-control\\\"\\n                            rows=\\\"3\\\" placeholder=\\\"Description\\\" [(ngModel)]=\\\"cpimptask.retk_description\\\"></textarea>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-mdCpImp-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(68, 180, 248);\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                    <button id=\\\"save-mdCpImp-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(126, 188, 77);\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"(!cpimptask.retk_description || cpimptask.retk_description == '' || cpimptask.retk_description == 'undefined')\\\"\\n                        (click)=\\\"cpimpTask()\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal modal-task fade\\\" id=\\\"mdRequestTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" (click)=\\\"reloadTaskboard()\\\" aria-label=\\\"Close\\\"\\n                        style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\"></i>\\n                        Request to Task\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3 col-sm-3 col-md-2 col-lg-2\\\">\\n                            <h4 *ngIf=\\\"requests && requests.length > 0\\\" class=\\\"modal-title\\\" style=\\\"color: #829198; font-weight: bolder;\\\">\\n                                Requests\\n                            </h4>\\n                            <div style=\\\"display: flow-root;overflow:scroll; height:520px;\\\">\\n                                <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                                        *ngFor=\\\"let rq of requests\\\">\\n                                        <li class=\\\"active\\\">\\n                                            <a data-toggle=\\\"tab\\\" href=\\\"#ptsk{{rq.task_id}}\\\" (click)=\\\"showInfo(rq);\\\">{{rq.task_id}}</a>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-9 col-sm-9 col-md-10 col-lg-10\\\" style=\\\"color: #829198;\\\">\\n                            <div class=\\\"tab-content\\\">\\n                                <div *ngIf=\\\"myrequest && requests && requests.length > 0\\\" id=\\\"ptsk{{myrequest.task_id}}\\\"\\n                                    class=\\\"tab-pane fade in active\\\">\\n                                    <div style=\\\"height: 70px; overflow: scroll;\\\">\\n                                        <h4>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>\\n                                    </div>\\n                                    <div class=\\\"row request-task\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                            <div class=\\\"form-group input-squadlinx\\\">\\n                                                <label>Subject</label>\\n                                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\"\\n                                                    placeholder=\\\"Subject\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Delivery Date</label>\\n                                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"\\n                                                    [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                                <label>Associate to Project</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"task.proj_id\\\"\\n                                                    placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                                <label>Assigned to</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"task.user_asigned\\\"\\n                                                    placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                                <label>Product</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"task.prod_id\\\"\\n                                                    placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                                <label>Associate to Sprint</label>\\n                                                <p-dropdown id=\\\"ddwnr_4\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                    [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\"\\n                                                    placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                                <label>Points</label>\\n                                                <input type=\\\"number\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"task.task_points\\\"\\n                                                    step=\\\"0.01\\\" min=\\\"0.01\\\">\\n                                            </div>\\n                                        </div>\\n                                        <!-- <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\"\\n                                             *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                                            <label>Atachments ({{task.attachments.length}}) </label>\\n                                            <div class=\\\"form-group\\\" style=\\\"height: 50px;overflow: scroll;\\\">\\n                                                <ul style=\\\"height: 50px;overflow: scroll;padding: 0px;\\\">\\n                                                    <li *ngFor=\\\"let att of task.attachments\\\" style=\\\"list-style:none;\\\">\\n                                                        <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" style=\\\"color:black;\\\"><i\\n                                                                class=\\\"sq sq-attach-files\\\"\\n                                                                style=\\\"color:rgb(28, 110, 198);font-size: 14px;outline: none;\\\"></i>{{\\n                                                            att.tsat_alias }}</a>\\n                                                    </li>\\n                                                </ul>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                            <div class=\\\"form-group editor-squadlinx\\\">\\n                                                <label>Description</label>\\n                                                <p-editor [(ngModel)]=\\\"task.task_description2\\\"\\n                                                          [style]=\\\"{'height':'100px'}\\\">\\n                                                    <p-header>\\n                                                      <span class=\\\"ql-formats\\\">\\n                                                           <span class=\\\"ql-header\\\">\\n                                                              <select class=\\\"ql-header\\\">\\n                                                                <option value=\\\"1\\\">Heading</option>\\n                                                                <option value=\\\"2\\\">Subheading</option>\\n                                                                <option selected>Normal</option>\\n                                                              </select>\\n                                                           </span>\\n\\n                                                            <span class=\\\"ql-font\\\">\\n                                                              <select class=\\\"ql-font\\\">\\n                                                                <option selected>Sans Serif</option>\\n                                                                <option value=\\\"serif\\\">Serif</option>\\n                                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                                              </select>\\n                                                            </span>\\n                                                      </span>\\n\\n                                                        <span class=\\\"ql-formats\\\">\\n                                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                                        </span>\\n\\n                                                        <span class=\\\"ql-formats\\\">\\n                                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                            <select class=\\\"ql-align\\\">\\n                                                               <option selected></option>\\n                                                               <option value=\\\"center\\\"></option>\\n                                                               <option value=\\\"right\\\"></option>\\n                                                               <option value=\\\"justify\\\"></option>\\n                                                             </select>\\n                                                          </span>\\n                                                        </span>\\n                                                    </p-header>\\n                                                </p-editor>\\n                                            </div>\\n                                        </div> -->\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12>\\\">\\n                                            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                                                <li [ngClass]=\\\"{'active':tagMenux == 1}\\\">\\n                                                    <a id=\\\"a_descriptionTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\"\\n                                                        (click)=\\\"setPagex(1)\\\">Description</a>\\n                                                </li>\\n                                                <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenux == 3}\\\">\\n                                                    <a id=\\\"a_attachmentsTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\"\\n                                                        (click)=\\\"setPagex(3)\\\">Attachments <span>({{task.attachments.length}})</span></a>\\n                                                </li>\\n                                            </ul>\\n                                            <div *ngIf=\\\"tagMenux == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                                    <p-editor id=\\\"p-editorDescription_editTask\\\" name=\\\"p-editorDescription_editTask\\\"\\n                                                        [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                                        <p-header>\\n                                                            <span class=\\\"ql-formats\\\">\\n                                                                <span class=\\\"ql-header\\\">\\n                                                                    <select class=\\\"ql-header\\\">\\n                                                                        <option value=\\\"1\\\">Heading</option>\\n                                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                                        <option selected>Normal</option>\\n                                                                    </select>\\n                                                                </span>\\n\\n                                                                <span class=\\\"ql-font\\\">\\n                                                                    <select class=\\\"ql-font\\\">\\n                                                                        <option selected>Sans Serif</option>\\n                                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                                    </select>\\n                                                                </span>\\n                                                            </span>\\n\\n                                                            <span class=\\\"ql-formats\\\">\\n                                                                <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                                <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                                <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                                            </span>\\n\\n                                                            <span class=\\\"ql-formats\\\">\\n                                                                <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\"\\n                                                                    type=\\\"button\\\"></button>\\n                                                                <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\"\\n                                                                    value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                                <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                                    <select class=\\\"ql-align\\\">\\n                                                                        <option selected></option>\\n                                                                        <option value=\\\"center\\\"></option>\\n                                                                        <option value=\\\"right\\\"></option>\\n                                                                        <option value=\\\"justify\\\"></option>\\n                                                                    </select>\\n                                                                </span>\\n                                                            </span>\\n                                                        </p-header>\\n                                                    </p-editor>\\n                                                </div>\\n                                            </div>\\n\\n                                            <div *ngIf=\\\"tagMenux == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_editTask\\\"\\n                                                    name=\\\"contenedorAttachmentsTask_editTask\\\">\\n                                                    <div class=\\\"div_associatedAttachments\\\">\\n                                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                                            <li *ngFor=\\\"let att of task.attachments\\\">\\n                                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\">\\n                                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                                        <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                    </span>\\n                                                                </a>\\n                                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                                        <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" +\\n                                                                        att.tsat_alias }}\\n                                                                    </a>\\n                                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                                        {{att.size + ' bytes'}}\\n                                                                        <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                                            (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                                                                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                                        </button>\\n                                                                    </span>\\n                                                                </div>\\n                                                            </li>\\n                                                        </ul>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div *ngIf=\\\"!myrequest && !requests && requests.length == 0\\\" id=\\\"ptsk{{myrequest.task_id}}\\\"\\n                                    class=\\\"tab-pane fade in active\\\">\\n                                    <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"reloadTaskboard()\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close\\n                    </button>\\n                    <button id=\\\"save-reqtask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\"\\n                        [disabled]=\\\"(!task.task_description2 || task.task_description2 == '' || task.task_description2 == 'undefined') || (!task.prod_id) || (!task.spri_id) || (!task.task_points || task.task_points <= 0)|| (!task.user_asigned) || (!task.task_subject || task.task_subject == '' || task.task_subject == 'undefined')\\\"\\n                        (click)=\\\"saveTask()\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</section>\";\n\n/***/ }),\n/* 819 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"tasks\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> TASKS\\n            <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Tasks</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"a_1\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a id=\\\"a_2\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Create\\\">\\n                                <button id=\\\"buttonCreateTask_taskList\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                    (click)=\\\"addTask()\\\" style=\\\"padding: 1px 4px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-create-new-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                <button id=\\\"buttonCloseTask_taskList\\\" [disabled]=\\\"seltasks.length == 0 || statusdelete.length > 0\\\" (click)=\\\"closeTask(null)\\\"\\n                                    type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 1px 4px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-close-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <button id=\\\"buttonDeleteTask_taskList\\\" [disabled]=\\\"seltasks.length == 0 || statusdelete.length > 0\\\" (click)=\\\"deleteTask(null)\\\"\\n                                    type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-eliminar\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                                <button id=\\\"buttonReopenTask_taskList\\\" [disabled]=\\\"seltasks.length == 0 || statusdelete.length > 0\\\" (click)=\\\"openTask(null)\\\"\\n                                    type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-reopen-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <button id=\\\"buttonReloadTask_taskList\\\" type=\\\"button\\\" (click)=\\\"searchTask()\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                    style=\\\"padding: 5px 5px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <button type=\\\"button\\\" (click)=\\\"showFilter()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Filter\\\">\\n                                <i class=\\\"fa fa-filter\\\" style=\\\"color:rgb(27, 110, 198); font-size: 22px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input id=\\\"search_task\\\" name=\\\"search_task\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\"\\n                                            class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                        <!-- <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i> -->\\n                                        <button id=\\\"reloadTasks_taskList\\\" type=\\\"button\\\" (click)=\\\"searchTask()\\\" class=\\\"btn btn-sm\\\"\\n                                            style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-1 col-sm-1 col-md-1 col-lg-1\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" (click)=\\\"exportExcel()\\\">\\n                                    <i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i>\\n                                </button>\\n                            </div>\\n                            \\n                        </div>\\n                    </div>\\n                    <!-- end - botones y search -->\\n\\n                    <!--new filter type task-->\\n                    <div class=\\\"row\\\" *ngIf=\\\"typeRol != '1' && typeRol != '2'\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right:0;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5  container_btnTypeTask\\\">\\n                                <ul class=\\\"col-xs-12 nav nav-option-task\\\" style=\\\"display: inline-flex !important;\\\">\\n                                    <li class=\\\"active\\\">\\n                                        <a id=\\\"type_taskall\\\" href=\\\"#tab_taskall\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('allme')\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"All tasks related with me\\\">\\n                                            <i class=\\\"sq sq-all-shared-tasks\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskbyme\\\" href=\\\"#tab_taskbyme\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('byme')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks created by me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-by-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_tasktome\\\" href=\\\"#tab_tasktome\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('tome')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks assigned to me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-to-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskshared\\\" href=\\\"#tab_taskshared\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('sharedtome')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks shared to me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-with-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--end new filter type task-->\\n\\n                    <!--new filter type task Cabeza de equipo-->\\n                    <div class=\\\"row\\\" *ngIf=\\\"typeRol != '1' && typeRol == '2'\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right:0; padding-left: 15px;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 container_btnTypeTask\\\">\\n                                <ul class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 nav nav-option-task\\\" style=\\\"display: inline-flex !important;\\\">\\n\\n                                    <li>\\n                                        <a id=\\\"type_taskall_headDep\\\" href=\\\"#tab_taskall\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('allme')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"All tasks related with me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-all-shared-tasks\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskbyme_headDep\\\" href=\\\"#tab_taskbyme\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('byme')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks created by me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-by-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_tasktome_headDep\\\" href=\\\"#tab_tasktome\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('tome')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks assigned to me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-to-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskshared_headDep\\\" href=\\\"#tab_taskshared\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('sharedtome')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks shared to me\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-with-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n\\n                                    <span style=\\\"border-right: 3px solid rgb(227, 237, 241);margin-right: 14px;\\\"></span>\\n\\n                                    <li class=\\\"active\\\">\\n                                        <a id=\\\"type_taskallTeam_headDep\\\" href=\\\"#tab_task_allmytean\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('allmyteam')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"All tasks related with my team\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-all-shared-tasks\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskbyTeam_headDep\\\" href=\\\"#tab_task_bymyteam\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('bymyteam')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks created by my team\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-by-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskmyTeam_headDep\\\" href=\\\"#tab_task_tomyteam\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('tomyteam')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks assigned to my team\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-to-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskSharedTeam_headDep\\\" href=\\\"#tab_task_sharedtomyteam\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('sharedtomyteam')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks shared to my team\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-with-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--. new filter type task Cabeza de equipo-->\\n\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"allStatesTask_taskList\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\"\\n                                style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"statesTask_taskList\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\"\\n                                style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n\\n                <div *ngIf=\\\"filter\\\" class=\\\"box-header with-border filter-options\\\">\\n                    <div class=\\\"col-xs-10 col-sm-11 col-md-11 col-lg-11\\\">\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Subject</label>\\n                            <li *ngIf=\\\"mytaskcopy.description\\\">\\n                                {{mytask.description}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.description\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date initial</label>\\n                            <li *ngIf=\\\"mytask.date_ini\\\">\\n                                {{formatDate(mytask.date_ini)}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytask.date_ini\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date end</label>\\n                            <li *ngIf=\\\"mytask.date_end\\\">\\n                                {{formatDate(mytask.date_end)}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytask.date_end\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Task_ids</label>\\n                            <li *ngFor=\\\"let tk of mytaskcopy.task_ids\\\">\\n                                {{tk}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.task_ids\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Assigned to</label>\\n                            <li *ngFor=\\\"let assig of mytaskcopy.assigned\\\">\\n                                {{ assig.user_lastname + \\\", \\\" + assig.user_name }}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.assigned || mytaskcopy.assigned.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Creator(s)</label>\\n                            <li *ngFor=\\\"let ur of mytaskcopy.creators\\\">\\n                                {{ ur.user_lastname + \\\", \\\" + ur.user_name }}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.creators || mytaskcopy.creators.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Product(s)</label>\\n                            <li *ngFor=\\\"let pr of mytaskcopy.products\\\">\\n                                {{pr.prod_name}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.products || mytaskcopy.products.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Project(s)</label>\\n                            <li *ngFor=\\\"let pj of mytaskcopy.projects\\\">\\n                                {{pj.proj_subject}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.projects || mytaskcopy.projects.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"text-align: right;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"closeFilter()\\\" class=\\\"pull-rigth\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:#0ba8da; font-weight: bolder;\\\"></i>\\n                        </a>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && tasks.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"tasks.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th id=\\\"th_1\\\" style=\\\"width: 5%; text-align:center;border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <!-- <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                            <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i> -->\\n                                        </th> <!---TODO: Deleted (click)=\\\"selectAll()\\\" because it has no functionality-->\\n                                        <th style=\\\"width: 70%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <thead>\\n                                                    <tr>\\n                                                        <th id=\\\"orderDate_taskList\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('task_date')\\\">Date\\n                                                            <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"orderNumber_taskList\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('task_id')\\\">Number\\n                                                            <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"orderCreated_taskList\\\" style=\\\"text-align: center; width: 22.5%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('user_creator')\\\">Created by\\n                                                            <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"orderAssigned_taskList\\\" style=\\\"text-align: center; width: 22.5%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('user_asigned')\\\">Assigned to\\n                                                            <span [hidden]=\\\"posOrder !== 'user_asigned'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"orderProject_taskList\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('proj_id')\\\">Project Related\\n                                                            <span [hidden]=\\\"posOrder !== 'proj_id'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                    </tr>\\n                                                </thead>\\n                                            </table>\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Progress\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 15%;color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Actions\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let tk of tasks\\\" [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\" style=\\\"text-align: center; vertical-align: middle;\\\">\\n                                                <p-checkbox id=\\\"listask_taskList\\\" name=\\\"listask_taskList\\\" value=\\\"{{tk.task_id}}\\\"\\n                                                    label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\" (onChange)=\\\"verifyStatus(tk.task_id)\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'text-align': 'center', 'background': 'rgb(227, 237, 241)'  } : { 'text-align': 'center'}\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td style=\\\"width: 20%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.task_date) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.task_id) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 22.5%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.creator) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 22.5%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.asigned) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\" *ngIf=\\\"tk.proj_id != null\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.proj_id) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\" *ngIf=\\\"tk.proj_id == null\\\">\\n                                                        -\\n                                                    </td>\\n                                                </tr>\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td colspan=\\\"6\\\">\\n                                                        <div class=\\\"descriptionTasks description-fixed-squadlinx\\\"\\n                                                            [ngStyle]=\\\"tk.para_status == 42 ? {'border-top': '2px solid white'} : { 'border-top': '2px solid rgb(227,237,241)'} \\\">\\n                                                            <span [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)', 'font-weight': 'bold' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' , 'font-weight': 'bold'} : {'color': 'rgb(79, 93, 100)', 'font-weight': 'bold'}\\\">Description:</span>\\n                                                        </div>\\n                                                        <div class=\\\"descriptionTasks\\\">\\n                                                            <p class=\\\"box-task-description\\\"[ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                                [innerHTML]=\\\"tk.task_description\\\"></p>\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </table>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'text-align': 'center', 'padding-left': '4px;','background': 'rgb(227, 237, 241)'  } : { 'padding-left': '4px;','text-align': 'center'}\\\">\\n                                            <span [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tk.task_percentage}}%</span>\\n                                            <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%;\\\">\\n                                                <div class=\\\"success-tasks\\\" [ngStyle]=\\\"tk.para_status == 43 ? { 'background': 'rgb(237, 59, 89)', 'width': tk.task_percentage + '%' } : tk.para_status == 42 ? { 'background': 'rgb(79, 93, 100)' , 'width': tk.task_percentage + '%' } : tk.shared_with == 'shared' ? { 'background': 'rgb(23, 140, 201)' , 'width': tk.task_percentage + '%' } : {'background': 'rgb(68, 180, 248)' , 'width': tk.task_percentage + '%' }\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white','background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <span class=\\\"tool-tip\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Quick view\\\">\\n                                                    <button id=\\\"buttonActionQuickView_taskList\\\" type=\\\"button\\\" (click)=\\\"showModaltk(tk.task_id)\\\"\\n                                                        class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-search\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                    <button id=\\\"buttonActionEdit_taskList\\\" *ngIf=\\\"tk.para_status != 43 && tk.shared_with == 'not_shared' \\\"\\n                                                        type=\\\"button\\\" (click)=\\\"showEditModal(tk)\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-quickedit\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Open\\\">\\n                                                    <button id=\\\"buttonActionOpen_taskList\\\" *ngIf=\\\"tk.para_status == 42 && tk.para_status != 43 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"openTask(tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"fa fa-undo\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                                    <button id=\\\"buttonActionClose_taskList\\\" *ngIf=\\\"tk.para_status != 42 && tk.para_status != 43 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"closeTask(tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"fa fa-times-circle-o\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <button id=\\\"buttonActionDelete_taskList\\\" *ngIf=\\\"tk.para_status != 43 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"deleteTask(tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reject\\\">\\n                                                    <button id=\\\"buttonActionReject_taskList\\\" *ngIf=\\\"tk.para_status != 42 && tk.para_status != 43 && tk.para_status != 50 && tk.task_pointsd ==0 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"showReject(tk)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-backcalendar\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Backlog\\\">\\n                                                    <button id=\\\"buttonActionBacklog_taskList\\\" *ngIf=\\\"tk.para_status != 42 && tk.para_status != 43 && tk.para_status != 50 && tk.para_status != 44 && tk.task_pointsd ==0 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"showBacklog(tk)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-backlog\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Duplicate\\\">\\n                                                    <button id=\\\"buttonActionDuplicate_taskList\\\" *ngIf=\\\"tk.shared_with == 'not_shared'\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" (click)=\\\"showDuplicateTaskModal(tk.task_id)\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-statustasks\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"tk.task_id\\\"></taskview>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"goTo(0)\\\">\\n                                            <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"setCurPage(0)\\\">\\n                                            <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\"\\n                                        [(ngModel)]=\\\"currentpage\\\" (change)=\\\"searchTask()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    \\n    <div class=\\\"modal fade\\\" id=\\\"mdTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header modal-header-info\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" +\\n                        task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Subject</label>\\n                        <p>{{ task.task_subject }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Product</label>\\n                        <p>{{ task.prod_name }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Assigned to</label>\\n                        <p>{{ task.asigned }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Description</label>\\n                        <div [innerHTML]=\\\"task.task_description\\\"></div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                </span>\\n                            </a>\\n                            <div class=\\\"mailbox-attachment-info\\\">\\n                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                </span>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" id=\\\"buttonClose_mdTask\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <!--Modal   Task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"subject_newTask\\\" name=\\\"subject_newTask\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"Subject\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropwonProduct_NewTask\\\" name=\\\"dropwonProduct_NewTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"dropdownAssign_NewTask\\\" name=\\\"dropdownAssign_NewTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssign_NewTask\\\" name=\\\"dropdownAssign_NewTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_newTask\\\" name=\\\"dropdownProject_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"dropdownSprint_newTask\\\" name=\\\"dropdownSprint_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                    [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_newTask\\\" name=\\\"dropdownLevel_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"points_newTask\\\" name=\\\"points_newTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_newTask\\\" name=\\\"autcompleteShareWith_newTask\\\"\\n                                        class=\\\"autocompleteSqlx shareWith_taskUsers\\\" [(ngModel)]=\\\"task.usersShared\\\"\\n                                        [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n\\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_newTask\\\" name=\\\"units_newTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">                                      \\n                                        \\n                                    </div>                                    \\n\\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_newTask\\\" name=\\\"dropdownUnits_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\"\\n                                            [(ngModel)]=\\\"task.unit_id\\\" ></p-dropdown>\\n                                    </div>\\n                                    \\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_task\\\" [ngClass]=\\\"{'active':tagMenuNew == 1}\\\">\\n                                <a id=\\\"a_descriptionTask_newTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_newTask\\\" (click)=\\\"setPageNewTask(1)\\\">Description</a>\\n                            </li>\\n                            <li id=\\\"li_attachments_task\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuNew == 2}\\\">\\n                                <a id=\\\"a_attachmentsTask_newTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_newTask\\\" (click)=\\\"setPageNewTask(2)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                            <li id=\\\"li_criteria_task\\\" *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuNew == 3}\\\">\\n                                <a id=\\\"editTask-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_newtask\\\" (click)=\\\"setPageNewTask(3)\\\">Criteria\\n                                </a>\\n                            </li>\\n\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuNew == 1\\\" id=\\\"description_newTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_newTask\\\" name=\\\"divContenedor_description_newTask\\\"\\n                                style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editorDescription_newTask\\\" name=\\\"editorDescription_newTask\\\" [(ngModel)]=\\\"task.task_description2\\\"\\n                                    [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenuNew == 2 && task.attachments && task.attachments.length > 0\\\" id=\\\"attachments_newTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div id=\\\"divAttachments_newTask\\\" name=\\\"divAttachments_newTask\\\" class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                            </span>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <i class=\\\"sq sq-attach-files\\\"></i>{{ att.name }}\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button id=\\\"button_1\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachment(att)\\\">\\n                                                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuNew == 3 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_newtask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask ; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldForm(i)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Criteria\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                            for=\\\"fileUpload_newTask\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_newTask\\\" name=\\\"fileUpload_newTask\\\" type=\\\"file\\\" style=\\\"display: none;\\\"\\n                            accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            (change)=\\\"onChange($event)\\\" />\\n\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                            <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_newTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                            data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"buttonSave_newTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateTask()\\\" (click)=\\\"saveTask()\\\">\\n                            Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--. modal new task-->\\n\\n    <!--modal edit task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" +\\n                        task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input id=\\\"inputSubject_editTask\\\" name=\\\"inputSubject_editTask\\\" class=\\\"form-control sqlx-input\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropdownProduct_editTask\\\" name=\\\"dropdownProduct_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assigned to</label>\\n                                <p-dropdown id=\\\"dropdownAssigned_editTask\\\" name=\\\"dropdownAssigned_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssigned_editTask\\\" name=\\\"dropdownAssigned_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_editTask\\\" name=\\\"dropdownProject_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"dropdownSprint_editTask\\\" name=\\\"dropdownSprint_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                    [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\" [readonly]=\\\"task.task_pointsd > 0\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_editTask\\\" name=\\\"dropdownLevel_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDelivery_editTask\\\" name=\\\"calendarDelivery_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"inputPoints_editTask\\\" name=\\\"inputPoints_editTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_editTask\\\" name=\\\"autcompleteShareWith_editTask\\\"\\n                                        class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"task.usersShared\\\" [suggestions]=\\\"usersShareWith\\\"\\n                                        (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                        placeholder=\\\"Share with\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n\\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_editTask\\\" name=\\\"units_editTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">\\n                                    </div>\\n\\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_editTask\\\" name=\\\"dropdownUnits_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\"\\n                                            [(ngModel)]=\\\"task.unit_id\\\" placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\" id=\\\"li_description_editTask\\\">\\n                                <a id=\\\"a_descriptionTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\" id=\\\"li_asocciateForm_editTask\\\">\\n                                <a id=\\\"a_asocciateFormTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate\\n                                    Form</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\"\\n                                id=\\\"li_attachments_editTask\\\">\\n                                <a id=\\\"a_attachmentsTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\" (click)=\\\"setPage(3)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                            <li *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 4}\\\"\\n                                id=\\\"li_criteria_editTask\\\">\\n                                <a id=\\\"editTask-tasklist4\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_task\\\" (click)=\\\"setPage(4)\\\">Criteria\\n                                </a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"p-editorDescription_editTask\\\" name=\\\"p-editorDescription_editTask\\\"\\n                                    [(ngModel)]=\\\"task.task_description_e\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"contenedorFormTask_editTask\\\" name=\\\"contenedorFormTask_editTask\\\">\\n                                <div class=\\\"div_table_associateFom_editTask\\\">\\n                                    <table class=\\\"table_associateFom_editTask\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 60px;\\\">\\n                                                <td class=\\\"td_formfield_editTask\\\">\\n                                                    <div class=\\\"div_formfield_editTask\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td class=\\\"td_formdata_editTask\\\">\\n                                                    <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                    <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_editTask\\\"\\n                                name=\\\"contenedorAttachmentsTask_editTask\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                                                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenu == 4 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_task\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldForm_editTask(i)\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label id=\\\"labelCustomUpload_editTask\\\" style=\\\"border: 1px solid #ccc; font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                            for=\\\"fileUpload_editTask\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_editTask\\\" name=\\\"fileUpload_editTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\"><i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add\\n                            Criteria</button>\\n                    </div>\\n\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_editTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                            data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"buttonSave_editTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateEditTask()\\\" (click)=\\\"saveTask()\\\">Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--. modal edit task-->\\n\\n    <!--modal duplicate task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdDuplicateTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"subject_duplicateTask\\\" name=\\\"subject_duplicateTask\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropwonProduct_duplicateTask\\\" name=\\\"dropwonProduct_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_duplicateTask\\\" name=\\\"dropdownProject_duplicateTask\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"dropdownSprint_duplicateTask\\\" name=\\\"dropdownSprint_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                    [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_duplicateTask\\\" name=\\\"dropdownLevel_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_duplicateTask\\\" name=\\\"calendarDeliveryDate_duplicateTask\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"points_duplicateTask\\\" name=\\\"points_duplicateTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_duplicateTask\\\" name=\\\"autcompleteShareWith_duplicateTask\\\"\\n                                        class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"task.usersShared\\\" [suggestions]=\\\"usersShareWith\\\"\\n                                        (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                        placeholder=\\\"Share with\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n                        \\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_duplicateTask\\\" name=\\\"units_duplicateTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">\\n                                    </div>\\n                        \\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_duplicateTask\\\" name=\\\"dropdownUnits_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"task.unit_id\\\"\\n                                            placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                    </div>                    \\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_duplicateTask\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 1}\\\">\\n                                <a id=\\\"a_descriptionTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 2}\\\">\\n                                <a id=\\\"a_asocciateFormTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#associateForm_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(2)\\\">Associate\\n                                    Form</a>\\n                            </li>\\n                            <li id=\\\"li_criteria_duplicateTask\\\" *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuDupliTk == 3}\\\">\\n                                <a id=\\\"a_criteriaTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(3)\\\">Criteria </a>\\n                            </li>\\n                            <li id=\\\"li_attachments_duplicateTask\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuDupliTk == 4}\\\">\\n                                <a id=\\\"a_attachmentsTask_duplicateTaskk\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(4)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuDupliTk == 1\\\" id=\\\"description_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_duplicateTask\\\" name=\\\"divContenedor_description_duplicateTask\\\"\\n                                style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editorDescription_duplicateTask\\\" name=\\\"editorDescription_duplicateTask\\\"\\n                                    [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 2\\\" id=\\\"associateForm_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"contenedorFormTask_duplicateTask\\\" name=\\\"contenedorFormTask_duplicateTask\\\">\\n                                <div class=\\\"div_table_associateFom_editTask\\\">\\n                                    <table class=\\\"table_associateFom_editTask\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 60px;\\\">\\n                                                <td class=\\\"td_formfield_editTask\\\">\\n                                                    <div class=\\\"div_formfield_editTask\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td class=\\\"td_formdata_editTask\\\">\\n                                                    <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                    <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 3 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_duplicateTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask ; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldForm_duplicateTask(i)\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 4\\\" id=\\\"attachments_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_duplicateTask\\\"\\n                                name=\\\"contenedorAttachmentsTask_duplicateTask\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachment_duplicateTask(att)\\\">\\n                                                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                            for=\\\"fileUpload_duplicateTask\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_duplicateTask\\\" name=\\\"fileUpload_duplicateTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                            <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_duplicateTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                            data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"buttonSave_duplicateTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateDuplicateTask()\\\" (click)=\\\"saveDuplicateTask()\\\">\\n                            Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--. modal duplicate task-->\\n\\n    <!--modal search task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdSearchTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Main filter</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Description</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"description_taskfilter\\\" name=\\\"description_taskfilter\\\"\\n                                    [(ngModel)]=\\\"mytask.description\\\" placeholder=\\\"type a keyword\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-chips\\\">\\n                                <label>Task id(s)</label>\\n                                <p-chips class=\\\"chipsSqlx\\\" [(ngModel)]=\\\"mytask.task_ids\\\" placeholder=\\\"Ex.17,19-22 enter\\\"></p-chips>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Assigned to</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.assigned\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Assigned to\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Creator(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.creators\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Product(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.products\\\"\\n                                        [suggestions]=\\\"productsa\\\" (completeMethod)=\\\"filterMultiple($event, 1)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Products(s)\\\" field=\\\"prod_name\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Project(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.projects\\\"\\n                                        [suggestions]=\\\"myProjectsx\\\" (completeMethod)=\\\"filterMultiple($event, 3)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Project(s)\\\" field=\\\"proj_subject\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date initial</label>\\n                                <p-calendar id=\\\"calendarDateInit_taskfilter\\\" name=\\\"calendarDateInit_taskfilter\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mytask.date_ini\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date end</label>\\n                                <p-calendar id=\\\"calendarDateEnd_taskfilter\\\" name=\\\"calendarDateEnd_taskfilter\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mytask.date_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonSearch_taskfilter\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"filterTask()\\\">\\n                            Search\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--modal rejectar tasks-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdReject\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content modal-rejectRequest\\\">\\n                <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n                    <button id=\\\"close-mdRj-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Reject task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label class=\\\"label_reasonReject_slqx\\\">Reason for rejection</label>\\n                        <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\"\\n                            placeholder=\\\"Description ...\\\" [(ngModel)]=\\\"rjtask.task_description\\\"></textarea>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                    <button id=\\\"save-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"(!rjtask.task_description || rjtask.task_description == '' || rjtask.task_description == 'undefined')\\\"\\n                        (click)=\\\"rejectTask()\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--. modal rejectar tasks-->\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 820 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> TASKS #{{ task.task_id }}\\n            <!-- <small style=\\\"font-size:15px; font-weight: bold;\\\"> > Task #{{ task.task_id }}</small> -->\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li><a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            <li><a routerLink=\\\"/tasks\\\">\\n                    Tasks</a></li>\\n            <li class=\\\"active\\\">Task #{{ task.task_id }}</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box box-desc-project\\\">\\n                    <div class=\\\"modal-header header-task\\\">\\n                        <div style=\\\"float: left; overflow-y: scroll;max-height: 29px;\\\">\\n                            <label class=\\\"label-box-title\\\">{{task.task_subject}}</label>\\n                        </div>\\n                        <div class=\\\"pull-right\\\">\\n                            <button type=\\\"button\\\" (click)=\\\"showEditModal()\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                <i class=\\\"sq sq-quickedit\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                            <button *ngIf=\\\"task.para_status != 3 && task.para_status != 5\\\" type=\\\"button\\\" (click)=\\\"closeTask()\\\"\\n                                class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\" data-container=\\\"body\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                <i class=\\\"fa fa-times-circle-o\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                            <button *ngIf=\\\"task.para_status == 3 \\\" (click)=\\\"openTask(task.proj_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                                <i class=\\\"fa fa-undo\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                            <button *ngIf=\\\"task.para_status != 5\\\" (click)=\\\"deleteTask(task.proj_id)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\" data-container=\\\"body\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <i class=\\\"sq sq-trash\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                            <button id=\\\"buttonActionDuplicate_taskList\\\" (click)=\\\"showDuplicateTaskModal(task.task_id)\\\"\\n                                type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Duplicate\\\">\\n                                <i class=\\\"sq sq-statustasks\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"box-body box-project\\\">\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Task Number:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_id}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Creation Date:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_date}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Task Status:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{\\n                                task.status_name }}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Task Creator:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.creator}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Delivery Date:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_delivery}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Progress:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_percentage}}%</span>\\n                            <div *ngIf=\\\"task.task_percentage >0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                                <div class=\\\"success-sqlx col-xs-12 col-md-4\\\" [ngStyle]=\\\"{ 'width': task.task_percentage + '%' }\\\">\\n                                </div>\\n                            </div>\\n                            <div *ngIf=\\\"task.task_percentage == 0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                                <div class=\\\"success-sqlx col-xs-12 col-md-4\\\" style=\\\"width:0%;background-color:transparent;\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Assigned to:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.asigned}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px!important;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Assigned\\n                                Points:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_points}}</span>\\n                        </div>\\n                        <div *ngIf=\\\"task.spri_id\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px!important;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Sprint number:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.spri_id}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 row\\\" style=\\\"padding: 0px; width: 100%;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-8\\\">\\n                                <label class=\\\"control-label col-xs-6 col-md-5 label-sqlx\\\">Description</label>\\n                                <div class=\\\"col-xs-12 col-md-12 iframe-desc-proj\\\" style=\\\"padding-top:10px;margin-left:10px;\\\">\\n                                    <span class=\\\"iframe-desc-proj\\\"> {{escapeHtml(task.task_description)}}</span>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                                <label class=\\\"control-label col-xs-6 col-md-5 label-sqlx\\\">Attachments</label>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right: 0px;\\\">\\n                                    <div class=\\\"pull-left col-xs-2 col-sm-2 col-md-2 col-lg-2 iframe-desc-proj\\\" style=\\\"border-bottom-right-radius: 0px;border-top-right-radius: 0px;\\\">\\n                                        <div *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                                            <div style=\\\"text-align: center;vertical-align: middle;transform: translate(-7px, 34px); font-size:20px;color:#4F5D64; font-weight: bold;\\\">\\n                                                {{task.attachments.length}}\\n                                            </div>\\n                                            <div style=\\\"text-align: center;vertical-align: middle;transform: translate(12px, 9px);\\\">\\n                                                <i class=\\\"sq sq-attach-files\\\" style=\\\"color:rgb(28, 110, 198);font-size: 23px!important;outline: none;\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"pull-right col-xs-10 col-sm-10 col-md-10 col-lg-10 iframe-desc-proj\\\"\\n                                        style=\\\"border-bottom-left-radius: 0px;border-top-left-radius: 0px;padding-right: 0px;border-left: 2px solid white;\\\">\\n                                        <div *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                                            <table class=\\\"list-att-task\\\" style=\\\"width: 100%;\\\">\\n\\n                                                <body style=\\\"background-color: rgb(237, 246, 248);color: rgb(167, 167, 167);width: 100%;\\\">\\n                                                    <tr *ngFor=\\\"let att of task.attachments\\\" style=\\\"width: 100%;\\\">\\n                                                        <td style=\\\"width: 70%;padding: 0px;\\\">\\n                                                            {{ att.tsat_alias }}\\n                                                        </td>\\n                                                        <td style=\\\"width: 30%;padding: 0px;\\\">\\n                                                            <div class=\\\"btn-group\\\">\\n                                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\"><i class=\\\"sq sq-download\\\"\\n                                                                            style=\\\"color:rgb(28, 110, 198);font-size: 11px;outline: none;\\\"></i></a>\\n                                                                </button>\\n                                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\"><i class=\\\"sq sq-view\\\"\\n                                                                            style=\\\"color:rgb(28, 110, 198);font-size: 11px;outline: none;\\\"></i></a>\\n                                                                </button>\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </body>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-sm-12 col-lg-6 comments-project\\\" style=\\\"margin-left: 31px;margin-bottom: 20px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;\\\">\\n                            <div class=pull-left style=\\\"padding:2px; margin:2px;\\\">\\n                                <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 23px!important\\\"></i>\\n                            </div>\\n                            <div class=\\\"pull-rigth\\\" style=\\\"padding:2px; margin:2px;margin-top: 6px;\\\">\\n                                <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold;\\\">COMMENTS</span>\\n                            </div>\\n                            <div style=\\\"background-color:gray; width:90%;margin-left:10px;\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"content-comments-users scrollable\\\" style=\\\"max-height:273px;\\\">\\n                            <ul class=\\\"timeline comment-timeline\\\">\\n                                <li *ngFor=\\\"let dt of detail; let i=index;\\\" style=\\\"margin-top:5px;\\\">\\n                                    <div class=\\\"border-imguser\\\">\\n                                        <img [src]=\\\"dt.urlimagen\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"img-usersqlx\\\">\\n                                    </div>\\n\\n                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                        <span class=\\\"time\\\">\\n                                            {{dt.note_date}}</span>\\n                                        <h3 class=\\\"timeline-header comment-timeline-header\\\">\\n                                            <b>{{dt.creator}}</b>\\n                                            <!-- {{\\\" \\\" + dt.title + \\\" \\\"}} -->\\n                                            commented on a\\n                                            <b>task</b>\\n                                        </h3>\\n                                        <div class=\\\"timeline-body\\\" style=\\\"overflow-y: scroll; max-height:200px; padding-bottom: 1px;\\\">\\n                                            <div class=\\\"box-body\\\">\\n                                                <div class=\\\"col-xs-12 col-md-12\\\">\\n                                                    <div class=\\\"col-xs-12 col-md-12 comment-user\\\" style=\\\"padding-top:10px;margin-left:10px;\\\">\\n                                                        <p class=\\\"comment-user\\\"> {{escapeHtml(dt.note_text)}}</p>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"dt.childs.length > 0\\\">\\n                                                        <div *ngFor=\\\"let chn of dt.childs\\\" class=\\\"col-xs-12 col-md-12 reply-user\\\"\\n                                                            style=\\\"padding-top:10px;margin-left:10px; padding-top:0px;\\\">\\n                                                            <div class=\\\"pull-right reply-comment\\\">\\n                                                                <h3 class=\\\"reply-user\\\">\\n                                                                    <b>{{chn.creator}}</b>\\n                                                                    <!-- {{\\\" \\\" + chn.title + \\\" \\\"}} -->\\n                                                                    commented on a\\n                                                                    <b>task</b>\\n                                                                </h3>\\n                                                                <p class=\\\"reply-user\\\"> {{escapeHtml(chn.note_text)}}</p>\\n                                                            </div>\\n                                                            <div style=\\\"background-color:rgb(237, 246, 248); height:6px; position: relative;\\\">\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div id=\\\"reply-user\\\" class=\\\"row\\\">\\n                                                        <div class=\\\"col-md-11 reply-note\\\" *ngIf=\\\"!dt.active\\\"\\n                                                            style=\\\"text-align: right;\\\">\\n                                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showNoteReply(i)\\\">\\n                                                                <p class=\\\"reply-the-comment\\\" style=\\\"color:rgb(167, 167, 167)!important;padding-top: 7px;display: inline-block;text-align: right;\\\">Reply\\n                                                                    the comment</p>\\n                                                            </a>\\n                                                        </div>\\n                                                        <div class=\\\"col-md-11\\\" *ngIf=\\\"dt.active\\\">\\n                                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"createNoteReply(dt.note_id)\\\">\\n                                                                <div class=\\\"col-md-12\\\" style=\\\"background-color: rgb(237, 246, 248); height: 24px;margin-left:10px;margin-top:6px;\\\">\\n                                                                    <input type=\\\"text\\\" class=\\\"col-md-12 imput-comments\\\"\\n                                                                        style=\\\"background-color: rgb(237, 246, 248);height: 24px;margin-top: 5px;margin-bottom: 2px;margin-left: 12px; width: 100%;\\\"\\n                                                                        [(ngModel)]=\\\"notereply.note_data\\\" placeholder=\\\"Type Comment\\\">\\n                                                                </div>\\n                                                            </a>\\n                                                        </div>\\n                                                        <div class=\\\"pull-right col-md-1\\\">\\n                                                            <button type=\\\"submit\\\" (click)=\\\"saveNoteReply(dt.note_id, dt)\\\"\\n                                                                style=\\\"outline: none;background-color:transparent; border:none; margin-top: 3px;\\\">\\n                                                                <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;outline: none;\\\"></i></button>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </li>\\n                            </ul>\\n                        </div>\\n                        <div class=\\\"modal-footer clearfix footer-comments-users\\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"pull-left col-md-11\\\">\\n                                    <div class=\\\"pull-left col-md-12\\\" style=\\\"background-color:white; height: 24px;\\\">\\n                                        <input type=\\\"text\\\" class=\\\"pull-left col-md-12 imput-comments\\\" [(ngModel)]=\\\"note.note_text\\\"\\n                                            placeholder=\\\"New Comment\\\">\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"pull-right col-md-1\\\">\\n                                    <button type=\\\"submit\\\" (click)=\\\"saveNote()\\\" style=\\\"background-color:transparent; border:none;\\\">\\n                                        <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i></button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-sm-12 col-lg-6 comments-project\\\" style=\\\"margin-left: 31px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;\\\">\\n                            <div class=pull-left style=\\\"padding:2px; margin:2px;\\\">\\n                                <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 23px!important\\\"></i>\\n                            </div>\\n                            <div class=\\\"pull-rigth\\\" style=\\\"padding:2px; margin:2px; margin-top: 6px;\\\">\\n                                <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold;\\\">DAILY</span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"content-comments-users scrollable\\\" style=\\\"max-height:320px;\\\">\\n                            <div class=\\\"box-body\\\" style=\\\"margin-top:10px;\\\">\\n                                <ul class=\\\"timeline daily-timeline\\\">\\n                                    <li *ngFor=\\\"let dtd of detail_daily\\\" style=\\\"padding-bottom:5px;\\\">\\n                                        <i class=\\\"fa fa-dot-circle-o\\\" style=\\\"color: rgb(68, 180, 248); font-size: 30px;background-color: transparent;margin-left: -3px; margin-top: -3px;\\\"></i>\\n                                        <div class=\\\"timeline-item daily-timeline-item\\\">\\n                                            <span class=\\\"date-sqlx\\\">{{dtd.date}}</span>\\n                                            <h3 class=\\\"timeline-header timeline-dailyheader\\\">\\n                                                <b>{{dtd.title + \\\": \\\"}}\\n                                                    {{dtd.points}}</b>\\n                                            </h3>\\n                                            <div class=\\\"timeline-body daily-timeline-body\\\" style=\\\"color:rgb(167, 167, 167);\\\">\\n                                                {{\\\"Comments: \\\" + escapeHtml(dtd.description)}}\\n                                            </div>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <!--Modal Edit Task-->\\n        <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                    role=\\\"document\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n\\n                <div class=\\\"modal-content-params\\\">\\n                    <div class=\\\"modal-header modal-header-info-params\\\">\\n                        <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                        </button>\\n                        <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + myTask.task_id + \\\" - \\\" +\\n                            myTask.task_subject}}\\n                        </h4>\\n                    </div>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group input-squadlinx\\\">\\n                                    <label>Subject</label>\\n                                    <input id=\\\"inputSubject_editTask\\\" name=\\\"inputSubject_editTask\\\" class=\\\"form-control sqlx-input\\\"\\n                                        [(ngModel)]=\\\"myTask.task_subject\\\" placeholder=\\\"\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Product</label>\\n                                    <p-dropdown id=\\\"dropdownProduct_editTask\\\" name=\\\"dropdownProduct_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                        [(ngModel)]=\\\"myTask.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Assigned to</label>\\n                                    <p-dropdown id=\\\"dropdownAssigned_editTask\\\" name=\\\"dropdownAssigned_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                        [(ngModel)]=\\\"myTask.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Associate to Project</label>\\n                                    <p-dropdown id=\\\"dropdownProject_editTask\\\" name=\\\"dropdownProject_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                        [(ngModel)]=\\\"myTask.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Associate to Sprint</label>\\n                                    <p-dropdown id=\\\"dropdownSprint_editTask\\\" name=\\\"dropdownSprint_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                        [(ngModel)]=\\\"myTask.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Delivery Date</label>\\n                                    <p-calendar id=\\\"calendarDelivery_editTask\\\" name=\\\"calendarDelivery_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myTask.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                        [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                        [monthNavigator]=\\\"true\\\"></p-calendar>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group spinner-squadlinx\\\">\\n                                    <label>Points</label>\\n                                    <input type=\\\"number\\\" id=\\\"inputPoints_editTask\\\" name=\\\"inputPoints_editTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                        [(ngModel)]=\\\"myTask.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Share with</label>\\n                                    <span class=\\\"ui-fluid\\\">\\n                                        <p-autoComplete id=\\\"autcompleteShareWith_editTask\\\" name=\\\"autcompleteShareWith_editTask\\\"\\n                                            class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myTask.usersShared\\\" [suggestions]=\\\"usersShareWith\\\"\\n                                            (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\"\\n                                            [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n\\n                                        </p-autoComplete>\\n                                    </span>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                                <li [ngClass]=\\\"{'active':tagMenu == 1}\\\" id=\\\"li_description_editTask_task\\\">\\n                                    <a id=\\\"a_descriptionTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\"\\n                                        (click)=\\\"setPage(1)\\\">Description</a>\\n                                </li>\\n                                <li *ngIf=\\\"myTask.form && myTask.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\"\\n                                    id=\\\"li_form_editTask_task\\\">\\n                                    <a id=\\\"a_asocciateFormTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\"\\n                                        (click)=\\\"setPage(2)\\\">Associate\\n                                        Form</a>\\n                                </li>\\n                                <li *ngIf=\\\"myTask.attachments && myTask.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\"\\n                                    id=\\\"li_attachments_editTask_task\\\">\\n                                    <a id=\\\"a_attachmentsTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\"\\n                                        (click)=\\\"setPage(3)\\\">Attachments <span>({{myTask.attachments.length}})</span></a>\\n                                </li>\\n                                <li *ngIf=\\\"myTask.criteriaTask && myTask.criteriaTask.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 4}\\\"\\n                                    id=\\\"li_criteria_editTask_task\\\">\\n                                    <a id=\\\"editTask-tasklist4\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_task\\\" (click)=\\\"setPage(4)\\\">Criteria\\n                                    </a>\\n                                </li>\\n                            </ul>\\n                            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                    <p-editor id=\\\"p-editorDescription_editTask\\\" name=\\\"p-editorDescription_editTask\\\"\\n                                        [(ngModel)]=\\\"myTask.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                        <p-header>\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <span class=\\\"ql-header\\\">\\n                                                    <select class=\\\"ql-header\\\">\\n                                                        <option value=\\\"1\\\">Heading</option>\\n                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                        <option selected>Normal</option>\\n                                                    </select>\\n                                                </span>\\n\\n                                                <span class=\\\"ql-font\\\">\\n                                                    <select class=\\\"ql-font\\\">\\n                                                        <option selected>Sans Serif</option>\\n                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                    <select class=\\\"ql-align\\\">\\n                                                        <option selected></option>\\n                                                        <option value=\\\"center\\\"></option>\\n                                                        <option value=\\\"right\\\"></option>\\n                                                        <option value=\\\"justify\\\"></option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n                                        </p-header>\\n                                    </p-editor>\\n                                </div>\\n                            </div>\\n                            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"contenedorFormTask_editTask\\\" name=\\\"contenedorFormTask_editTask\\\">\\n                                    <div class=\\\"div_table_associateFom_editTask\\\">\\n                                        <table class=\\\"table_associateFom_editTask\\\">\\n                                            <tbody style=\\\"width: 100%;\\\">\\n                                                <tr *ngFor=\\\"let fr of myTask.form\\\" style=\\\"height: 60px;\\\">\\n                                                    <td class=\\\"td_formfield_editTask\\\">\\n                                                        <div class=\\\"div_formfield_editTask\\\">\\n                                                            {{fr.form_field}}\\n                                                        </div>\\n                                                    </td>\\n                                                    <td class=\\\"td_formdata_editTask\\\">\\n                                                        <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                            {{fr.form_data}}\\n                                                        </div>\\n                                                        <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_editTask\\\"\\n                                    name=\\\"contenedorAttachmentsTask_editTask\\\">\\n                                    <div class=\\\"div_associatedAttachments\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of myTask.attachments\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                    </a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                        <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                            (click)=\\\"deleteAttachmentTask_editTask(myTask, att)\\\">\\n                                                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                        </button>\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                            <div *ngIf=\\\"tagMenu == 4 && myTask.criteriaTask && myTask.criteriaTask.length > 0\\\" id=\\\"criteria_task\\\"\\n                                class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <thead>\\n                                            <tr>\\n                                                <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                                <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                                <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let tkcr of myTask.criteriaTask; let i=index;\\\">\\n                                                <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                    <label>{{tkcr.tkcr_num}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                                </td>\\n                                                <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                    <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        type=\\\"button\\\" (click)=\\\"deleteFieldForm_editTask(i)\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tfoot>\\n                                            <tr>\\n                                                <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                        pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(myTask.task_id )\\\"><i\\n                                                            class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                                </td>\\n                                            </tr>\\n                                        </tfoot>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-left\\\">\\n                            <label id=\\\"labelCustomUpload_editTask\\\" style=\\\"border: 1px solid #ccc; font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                                for=\\\"fileUpload_editTask\\\" class=\\\"custom-file-upload\\\">\\n                                <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                            </label>\\n                            <input id=\\\"fileUpload_editTask\\\" name=\\\"fileUpload_editTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                style=\\\"display: none;\\\" (change)=\\\"onChangeNewTask($event)\\\" />\\n\\n                            <button *ngIf=\\\"myTask.criteriaTask && myTask.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\"><i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add\\n                                Criteria</button>\\n                        </div>\\n\\n                        <div class=\\\"pull-right\\\">\\n                            <button id=\\\"buttonClose_editTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                                data-dismiss=\\\"modal\\\">Close\\n                            </button>\\n                            <button id=\\\"buttonSave_editTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                                class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"(!myTask.task_description || myTask.task_description == '' || myTask.task_description == 'undefined') || (!myTask.prod_id) || (!myTask.task_points || myTask.task_points <= 0)\\\"\\n                                (click)=\\\"saveNewTask()\\\">Save\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- . Modal Edit Task-->\\n\\n        <!--Modal Duplicate Task-->\\n        <div class=\\\"modal fade\\\" id=\\\"mdDuplicateTask\\\" role=\\\"dialog\\\">\\n            <!--Modal New Task-->\\n            <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                    role=\\\"document\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div class=\\\"modal-content-params\\\">\\n                    <div class=\\\"modal-header modal-header-info-params\\\">\\n                        <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                        </button>\\n                        <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                    </div>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group input-squadlinx\\\">\\n                                    <label>Subject</label>\\n                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"subject_duplicateTask\\\" name=\\\"subject_duplicateTask\\\"\\n                                        [(ngModel)]=\\\"myTask.task_subject\\\" placeholder=\\\"\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Product</label>\\n                                    <p-dropdown id=\\\"dropwonProduct_duplicateTask\\\" name=\\\"dropwonProduct_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                        [options]=\\\"products\\\" [(ngModel)]=\\\"myTask.prod_id\\\" placeholder=\\\"Select a Product\\\"\\n                                        filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Assign to</label>\\n                                    <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                        [options]=\\\"userslbl\\\" [(ngModel)]=\\\"myTask.user_asigned\\\" placeholder=\\\"Select user\\\"\\n                                        filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Associate a Project</label>\\n                                    <p-dropdown id=\\\"dropdownProject_duplicateTask\\\" name=\\\"dropdownProject_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                        [options]=\\\"myProjects\\\" [(ngModel)]=\\\"myTask.proj_id\\\" placeholder=\\\"Select a Project\\\"\\n                                        filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Associate to Sprint</label>\\n                                    <p-dropdown id=\\\"dropdownSprint_duplicateTask\\\" name=\\\"dropdownSprint_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                        [options]=\\\"mysprints\\\" [(ngModel)]=\\\"myTask.spri_id\\\" placeholder=\\\"Select a Sprint\\\"\\n                                        filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Delivery Date</label>\\n                                    <p-calendar id=\\\"calendarDeliveryDate_duplicateTask\\\" name=\\\"calendarDeliveryDate_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myTask.task_delivery\\\"\\n                                        dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                        yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group spinner-squadlinx\\\">\\n                                    <label>Points</label>\\n                                    <input type=\\\"number\\\" id=\\\"points_duplicateTask\\\" name=\\\"points_duplicateTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                        [(ngModel)]=\\\"myTask.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-7 col-lg-7\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Share with</label>\\n                                    <span class=\\\"ui-fluid\\\">\\n                                        <p-autoComplete id=\\\"autcompleteShareWith_duplicateTask\\\" name=\\\"autcompleteShareWith_duplicateTask\\\"\\n                                            class=\\\"autocompleteSqlx shareWith_taskUsers\\\" [(ngModel)]=\\\"myTask.usersShared\\\"\\n                                            [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                            styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                            [multiple]=\\\"true\\\">\\n\\n                                        </p-autoComplete>\\n                                    </span>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-5 col-lg-5\\\" style=\\\"height: 58px;\\\">\\n                                <label>Options</label>\\n                                <div class=\\\"col-xs-12 col-md-12 col-lg-12 \\\" style=\\\"padding-top: 5px;\\\">\\n                                    <label class=\\\"form-check-label\\\">\\n                                        <input id=\\\"checkComplete_duplicateTask\\\" name=\\\"checkComplete_duplicateTask\\\" type=\\\"checkbox\\\"\\n                                            class=\\\"form-check-input\\\" [(ngModel)]=\\\"myTask.completed\\\">\\n                                        Mark as Complete\\n                                    </label>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                                <li id=\\\"li_description_duplicateTask\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 1}\\\">\\n                                    <a id=\\\"a_descriptionTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_duplicateTask\\\"\\n                                        (click)=\\\"setPageDupliTk(1)\\\">Description</a>\\n                                </li>\\n                                <li *ngIf=\\\"myTask.form && myTask.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 2}\\\"\\n                                    id=\\\"li_form_duplicateTask_task\\\">\\n                                    <a id=\\\"a_asocciateFormTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#associateForm_duplicateTask\\\"\\n                                        (click)=\\\"setPageDupliTk(2)\\\">Associate\\n                                        Form</a>\\n                                </li>\\n                                <li id=\\\"li_criteria_duplicateTask\\\" *ngIf=\\\"myTask.criteriaTask && myTask.criteriaTask.length > 0\\\"\\n                                    [ngClass]=\\\"{'active':tagMenuDupliTk == 3}\\\">\\n                                    <a id=\\\"a_criteriaTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_duplicateTask\\\"\\n                                        (click)=\\\"setPageDupliTk(3)\\\">Criteria </a>\\n                                </li>\\n                                <li id=\\\"li_attachments_duplicateTask\\\" *ngIf=\\\"myTask.attachments && myTask.attachments.length > 0\\\"\\n                                    [ngClass]=\\\"{'active':tagMenuDupliTk == 4}\\\">\\n                                    <a id=\\\"a_attachmentsTask_duplicateTaskk\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_duplicateTask\\\"\\n                                        (click)=\\\"setPageDupliTk(4)\\\">Attachments\\n                                        <span>({{myTask.attachments.length}})</span></a>\\n                                </li>\\n                            </ul>\\n                            <div *ngIf=\\\"tagMenuDupliTk == 1\\\" id=\\\"description_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_duplicateTask\\\"\\n                                    name=\\\"divContenedor_description_duplicateTask\\\" style=\\\"margin-top:5px;\\\">\\n                                    <p-editor id=\\\"editorDescription_duplicateTask\\\" name=\\\"editorDescription_duplicateTask\\\"\\n                                        [(ngModel)]=\\\"myTask.task_description_d\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                        <p-header>\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <span class=\\\"ql-header\\\">\\n                                                    <select class=\\\"ql-header\\\">\\n                                                        <option value=\\\"1\\\">Heading</option>\\n                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                        <option selected>Normal</option>\\n                                                    </select>\\n                                                </span>\\n\\n                                                <span class=\\\"ql-font\\\">\\n                                                    <select class=\\\"ql-font\\\">\\n                                                        <option selected>Sans Serif</option>\\n                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                    <select class=\\\"ql-align\\\">\\n                                                        <option selected></option>\\n                                                        <option value=\\\"center\\\"></option>\\n                                                        <option value=\\\"right\\\"></option>\\n                                                        <option value=\\\"justify\\\"></option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n                                        </p-header>\\n                                    </p-editor>\\n                                </div>\\n                            </div>\\n\\n                            <div *ngIf=\\\"tagMenuDupliTk == 2\\\" id=\\\"associateForm_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"contenedorFormTask_duplicateTask\\\"\\n                                    name=\\\"contenedorFormTask_duplicateTask\\\">\\n                                    <div class=\\\"div_table_associateFom_editTask\\\">\\n                                        <table class=\\\"table_associateFom_editTask\\\">\\n                                            <tbody style=\\\"width: 100%;\\\">\\n                                                <tr *ngFor=\\\"let fr of myTask.form\\\" style=\\\"height: 60px;\\\">\\n                                                    <td class=\\\"td_formfield_editTask\\\">\\n                                                        <div class=\\\"div_formfield_editTask\\\">\\n                                                            {{fr.form_field}}\\n                                                        </div>\\n                                                    </td>\\n                                                    <td class=\\\"td_formdata_editTask\\\">\\n                                                        <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                            {{fr.form_data}}\\n                                                        </div>\\n                                                        <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                            <div *ngIf=\\\"tagMenuDupliTk == 3 && myTask.criteriaTask && myTask.criteriaTask.length > 0\\\"\\n                                id=\\\"criteria_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <thead>\\n                                            <tr>\\n                                                <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                                <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                                <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let tkcr of myTask.criteriaTask ; let i=index;\\\">\\n                                                <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                    <label>{{tkcr.tkcr_num}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                                </td>\\n                                                <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                    <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        type=\\\"button\\\" (click)=\\\"deleteFieldForm_duplicateTask(i)\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tfoot>\\n                                            <tr>\\n                                                <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                        pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(myTask.task_id )\\\"><i\\n                                                            class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                                </td>\\n                                            </tr>\\n                                        </tfoot>\\n                                    </table>\\n                                </div>\\n                            </div>\\n\\n                            <div *ngIf=\\\"tagMenuDupliTk == 4\\\" id=\\\"attachments_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_duplicateTask\\\"\\n                                    name=\\\"contenedorAttachmentsTask_duplicateTask\\\">\\n                                    <div class=\\\"div_associatedAttachments\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of myTask.attachments\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                    </a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                        <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                            (click)=\\\"deleteAttachment_duplicateTask(att)\\\">\\n                                                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                        </button>\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                        </div>\\n                    </div>\\n\\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-left\\\">\\n                            <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                                for=\\\"fileUpload_duplicateTask\\\" class=\\\"custom-file-upload\\\">\\n                                <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                            </label>\\n                            <input id=\\\"fileUpload_duplicateTask\\\" name=\\\"fileUpload_duplicateTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                style=\\\"display: none;\\\" (change)=\\\"onChangeDupliTk($event)\\\" />\\n                            <button *ngIf=\\\"myTask.criteriaTask && myTask.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                                <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                            </button>\\n                        </div>\\n                        <div class=\\\"pull-right\\\">\\n                            <button id=\\\"buttonClose_duplicateTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                                data-dismiss=\\\"modal\\\">Close\\n                            </button>\\n                            <button id=\\\"buttonSave_duplicateTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                                class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateDuplicateTask()\\\" (click)=\\\"saveDuplicateTask()\\\">\\n                                Save\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- . Modal Duplicate Task-->\\n\\n    </section>\\n</section>\";\n\n/***/ }),\n/* 821 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($, jQuery) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.TaskViewComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _dec2, _dec3, _class, _desc, _value, _class2, _descriptor, _descriptor2;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _task = __webpack_require__(19);\n\nvar _note = __webpack_require__(24);\n\nvar _sprint = __webpack_require__(26);\n\nvar _users = __webpack_require__(20);\n\nvar _externalrequest = __webpack_require__(48);\n\nvar _pipes = __webpack_require__(14);\n\nvar _taskviewTemplate = __webpack_require__(822);\n\nvar _taskviewTemplate2 = _interopRequireDefault(_taskviewTemplate);\n\nvar _IfObservable = __webpack_require__(100);\n\nvar _fullcalendar = __webpack_require__(823);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _initDefineProp(target, property, descriptor, context) {\n    if (!descriptor) return;\n    Object.defineProperty(target, property, {\n        enumerable: descriptor.enumerable,\n        configurable: descriptor.configurable,\n        writable: descriptor.writable,\n        value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n    });\n}\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n    var desc = {};\n    Object['ke' + 'ys'](descriptor).forEach(function (key) {\n        desc[key] = descriptor[key];\n    });\n    desc.enumerable = !!desc.enumerable;\n    desc.configurable = !!desc.configurable;\n\n    if ('value' in desc || desc.initializer) {\n        desc.writable = true;\n    }\n\n    desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n        return decorator(target, property, desc) || desc;\n    }, desc);\n\n    if (context && desc.initializer !== void 0) {\n        desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n        desc.initializer = undefined;\n    }\n\n    if (desc.initializer === void 0) {\n        Object['define' + 'Property'](target, property, desc);\n        desc = null;\n    }\n\n    return desc;\n}\n\nfunction _initializerWarningHelper(descriptor, context) {\n    throw new Error('Decorating class property failed. Please ensure that transform-class-properties is enabled.');\n}\n\nvar TaskViewComponent = exports.TaskViewComponent = (_dec = (0, _core.Component)({\n    selector: \"taskview\",\n    template: _taskviewTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec2 = (0, _core.Input)(), _dec3 = (0, _core.Input)(), _dec(_class = (_class2 = function () {\n    function TaskViewComponent(title, route, sanitizer, toastr, taskService, ProjectService, noteService, sprintService, externalRequestService, userService, confirmationService) {\n        _classCallCheck(this, TaskViewComponent);\n\n        _initDefineProp(this, \"myTaskId\", _descriptor, this);\n\n        _initDefineProp(this, \"myDbName\", _descriptor2, this);\n\n        this._title = title;\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._tasks = taskService;\n        this._user = userService;\n        this._sanitizer = sanitizer;\n        this._projects = ProjectService;\n        this._notes = noteService;\n        this.confirm = confirmationService;\n        this._sprint = sprintService;\n        this._externalrequest = externalRequestService;\n        this.isLoading = false;\n        this.search = \"\";\n        if (localStorage.getItem(\"tasksearch\")) {\n            this.search = localStorage.getItem(\"tasksearch\");\n        }\n        this.notemd = { note_text: \"\" };\n        this.mdT = {\n            project: {},\n            userSharedTask: [],\n            comments: [],\n            timeline: [],\n            attachments: [],\n            form: [],\n            sprint: {},\n            total_adjusted: [],\n            total_attachments: 0\n        };\n        this.taskJoin = {};\n        this.taskCriteria = [];\n        this.join = {};\n        this.commentsTaskJoin = {\n            comments: []\n        };\n        this.idtk = [];\n        this.note = { attachments: [], note_text: \"\" };\n        this.taskattch = { attachments: [] };\n        this.mysprints = [];\n        this.tasks = [];\n        this.cont = 0;\n        this.clientGroup = '';\n        this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem(\"title\")) {\n            this.stTitle = localStorage.getItem(\"title\");\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Tasks ::.\");\n        this.tasktag = false;\n    }\n\n    _createClass(TaskViewComponent, [{\n        key: \"ngOnInit\",\n        value: function ngOnInit() {\n            this.getExternal();\n        }\n    }, {\n        key: \"getExternal\",\n        value: function getExternal() {\n            var _this = this;\n\n            this._user.getExternalList().subscribe(function (res) {\n                var objClientes = res.data[0];\n                _this.clientGroup = objClientes.usex_dbname;\n            });\n        }\n    }, {\n        key: \"showModaltk\",\n        value: function showModaltk() {\n            var _this2 = this;\n\n            var idtk = this.myTaskId;\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.note = { attachments: [] };\n            this.mdT.attachments = [];\n            this.mdT.userSharedTask = [];\n            this.mdT.timeline = [];\n            this.mdT.form = [];\n            this.mdT.sprint = {};\n            this.mdT.total_adjusted = [];\n            this.mdT.total_attachments = 0;\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getTask(this.myTaskId, this.myDbName).subscribe(function (res) {\n                    _this2.mdT = res.data;\n                    _this2.getProject(_this2.mdT.proj_id);\n                    _this2.getComments(_this2.myTaskId);\n                    _this2.getAttachments(_this2.myTaskId);\n                    _this2.getAdjusted(_this2.myTaskId);\n                    _this2.getTimeline(_this2.myTaskId);\n                    _this2.getForm(_this2.myTaskId);\n                    _this2.getRejected(_this2.myTaskId);\n                    if (_this2.mdT.spri_id) {\n                        _this2.getSprint(_this2.mdT.spri_id);\n                    }\n                    _this2.getTag();\n                    $(\"#mdTaskView-\" + _this2.myTaskId).modal(\"show\");\n                });\n            } else {\n                this._tasks.getTask(this.myTaskId).subscribe(function (res) {\n                    _this2.mdT = res.data;\n                    _this2.mdT.userSharedTask = res.data.usersShared;\n                    _this2.getProject(_this2.mdT.proj_id);\n                    _this2.getComments(_this2.myTaskId);\n                    _this2.getAttachments(_this2.myTaskId);\n                    _this2.getAdjusted(_this2.myTaskId);\n                    _this2.getTimeline(_this2.myTaskId);\n                    _this2.getForm(_this2.myTaskId);\n                    _this2.getRejected(_this2.myTaskId);\n                    _this2.getJoin(_this2.myTaskId);\n                    _this2.getInfoCriteriaTask(_this2.myTaskId);\n                    if (_this2.mdT.spri_id) {\n                        _this2.getSprint(_this2.mdT.spri_id);\n                    }\n                    _this2.getTag();\n                    $(\"#mdTaskView-\" + _this2.myTaskId).modal(\"show\");\n                });\n            }\n        }\n    }, {\n        key: \"getProject\",\n        value: function getProject(projid) {\n            var _this3 = this;\n\n            this.mdT.project = [];\n            if (projid) {\n                if (this.myDbName && this.myDbName != '') {\n                    this._externalrequest.getProjectInfo(projid, this.myDbName).subscribe(function (res) {\n                        _this3.mdT.project = res.data;\n                        if (_this3.mdT.project.proj_description) {\n                            _this3.mdT.project.proj_description = _this3.sanitizeHtml(res.data.proj_description);\n                        }\n                    });\n                } else {\n                    this._projects.getprojectInfo(projid).subscribe(function (res) {\n                        _this3.mdT.project = res.data;\n                        if (_this3.mdT.project.proj_description) {\n                            _this3.mdT.project.proj_description = _this3.sanitizeHtml(res.data.proj_description);\n                        }\n                    });\n                }\n            }\n        }\n    }, {\n        key: \"getForm\",\n        value: function getForm(task) {\n            var _this4 = this;\n\n            this.mdT.form = [];\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getTaskFields(task, this.myDbName).subscribe(function (res) {\n                    _this4.mdT.form = res.data;\n                });\n            } else {\n                this._tasks.getTaskFields(task).subscribe(function (res) {\n                    _this4.mdT.form = res.data;\n                });\n            }\n        }\n    }, {\n        key: \"getSprint\",\n        value: function getSprint(idsprint) {\n            var _this5 = this;\n\n            this.mdT.sprint = [];\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getSprint(idsprint, this.myDbName).subscribe(function (res) {\n                    _this5.mdT.sprint = res.data;\n                });\n            } else {\n                this._sprint.getSprint(idsprint).subscribe(function (res) {\n                    _this5.mdT.sprint = res.data;\n                });\n            }\n        }\n    }, {\n        key: \"getComments\",\n        value: function getComments(tk) {\n            var _this6 = this;\n\n            this.isLoading = true;\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getComments(tk, this.myDbName).subscribe(function (res) {\n                    _this6.mdT.comments = res.data;\n                    var elem = document.getElementById(\"mdTComments\");\n                    var elem2 = document.getElementById(\"taskComments\");\n                    if (elem && elem2) {\n                        elem.scrollTop = elem.scrollHeight;\n                        elem2.scrollTop = elem2.scrollHeight;\n                    }\n                    _this6.isLoading = false;\n                    return res.data;\n                });\n            } else {\n                this._tasks.getComments(tk).subscribe(function (res) {\n                    _this6.mdT.comments = res.data;\n                    var elem = document.getElementById(\"mdTComments\");\n                    var elem2 = document.getElementById(\"taskComments\");\n                    if (elem && elem2) {\n                        elem.scrollTop = elem.scrollHeight;\n                        elem2.scrollTop = elem2.scrollHeight;\n                    }\n                    _this6.isLoading = false;\n                    return res.data;\n                });\n            }\n            this.note.note_text = \"\";\n            this.note = { attachments: [] };\n        }\n    }, {\n        key: \"validateComments\",\n        value: function validateComments() {\n            return !this.note.note_text || this.note.note_text.trim() == \"\" || !this.note.note_text == \"undefined\";\n        }\n    }, {\n        key: \"noteAdd\",\n        value: function noteAdd(idtask, type) {\n            var _this7 = this;\n\n            this.note.task_id = idtask;\n            if (this.note.note_text || this.note.note_text != \"undefined\" || this.note.note_text != \"\") {\n                this.note.note_text = this.note.note_text;\n                this.isLoading = true;\n                if (this.myDbName && this.myDbName != '') {\n                    this.note.dbname = this.myDbName;\n                    this._externalrequest.putNote(this.note).subscribe(function (data) {\n                        _this7.isLoading = false;\n                        if (data.data != null) {\n                            _this7.getComments(idtask);\n                            _this7.getTimeline(idtask);\n                        } else {\n                            _this7.toastr.warning(\"\", data.message);\n                            $(\".textarea-comments\").val(\"\");\n                        }\n                    });\n                } else {\n                    this.note.client = this.clientGroup;\n                    this._notes.putNote(this.note).subscribe(function (data) {\n                        _this7.note.user_creator = _this7.mdT.user_creator;\n                        _this7.isLoading = false;\n                        if (data.data != null) {\n                            _this7.getComments(idtask);\n                            _this7.getTimeline(idtask);\n                        } else {\n                            _this7.toastr.warning(\"\", data.message);\n                            $(\".textarea-comments\").val(\"\");\n                        }\n                    });\n                }\n                this.note = { attachments: [] };\n            }\n        }\n    }, {\n        key: \"getAttachments\",\n        value: function getAttachments(taskid) {\n            var _this8 = this;\n\n            this.mdT.attachments = [];\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getAttachments(taskid, this.myDbName).subscribe(function (res) {\n                    _this8.mdT.attachments = res.data;\n                    for (var i = 0; i < _this8.mdT.attachments.length; i++) {\n                        if (i == 0) {\n                            _this8.mdT.total_attachments = 1;\n                        } else {\n                            _this8.mdT.total_attachments++;\n                        }\n                    }\n                });\n            } else {\n                this._tasks.getAttachments(taskid).subscribe(function (res) {\n                    _this8.mdT.attachments = res.data;\n                    for (var i = 0; i < _this8.mdT.attachments.length; i++) {\n                        if (i == 0) {\n                            _this8.mdT.total_attachments = 1;\n                        } else {\n                            _this8.mdT.total_attachments++;\n                        }\n                    }\n                });\n            }\n        }\n    }, {\n        key: \"getAdjusted\",\n        value: function getAdjusted(task) {\n            var _this9 = this;\n\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getAdjusted(task, this.myDbName).subscribe(function (res) {\n                    _this9.total_adjusted = [];\n                    var _iteratorNormalCompletion = true;\n                    var _didIteratorError = false;\n                    var _iteratorError = undefined;\n\n                    try {\n                        for (var _iterator = res.data[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n                            var c = _step.value;\n\n                            var message = \"\";\n                            var header = \"\";\n                            var points = \"\";\n                            header = c.user_name + \" \" + c.user_lastname;\n                            if (c.taex_points > 0) {\n                                points = \"Added \" + Math.abs(c.taex_points) + \" points\";\n                            } else if (c.taex_points < 0) {\n                                points = \"Removed \" + Math.abs(c.taex_points) + \" points\";\n                            } else {\n                                points = \"0 Points added or removed.\";\n                            }\n                            var delivery = \" Delivery date : \" + c.taex_delivery;\n                            _this9.total_adjusted.push({\n                                header: header,\n                                message: message,\n                                points: points,\n                                delivery: delivery,\n                                date: c.taex_updated,\n                                reason: c.taex_description,\n                                urlimagen: c.urlimagen\n                            });\n                        }\n                    } catch (err) {\n                        _didIteratorError = true;\n                        _iteratorError = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion && _iterator.return) {\n                                _iterator.return();\n                            }\n                        } finally {\n                            if (_didIteratorError) {\n                                throw _iteratorError;\n                            }\n                        }\n                    }\n\n                    _this9.mdT.total_adjusted = _this9.total_adjusted;\n                });\n            } else {\n                this._tasks.getAdjusted(task).subscribe(function (res) {\n                    _this9.total_adjusted = [];\n                    var _iteratorNormalCompletion2 = true;\n                    var _didIteratorError2 = false;\n                    var _iteratorError2 = undefined;\n\n                    try {\n                        for (var _iterator2 = res.data[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n                            var c = _step2.value;\n\n                            var message = \"\";\n                            var header = \"\";\n                            var points = \"\";\n                            header = c.user_name + \" \" + c.user_lastname;\n                            if (c.taex_points > 0) {\n                                points = \"Added \" + Math.abs(c.taex_points) + \" points\";\n                            } else if (c.taex_points < 0) {\n                                points = \"Removed \" + Math.abs(c.taex_points) + \" points\";\n                            } else {\n                                points = \"0 Points added or removed.\";\n                            }\n                            var delivery = \" Delivery date : \" + c.taex_delivery;\n                            _this9.total_adjusted.push({\n                                header: header,\n                                message: message,\n                                points: points,\n                                delivery: delivery,\n                                date: c.taex_updated,\n                                reason: c.taex_description,\n                                urlimagen: c.urlimagen\n                            });\n                        }\n                    } catch (err) {\n                        _didIteratorError2 = true;\n                        _iteratorError2 = err;\n                    } finally {\n                        try {\n                            if (!_iteratorNormalCompletion2 && _iterator2.return) {\n                                _iterator2.return();\n                            }\n                        } finally {\n                            if (_didIteratorError2) {\n                                throw _iteratorError2;\n                            }\n                        }\n                    }\n\n                    _this9.mdT.total_adjusted = _this9.total_adjusted;\n                });\n            }\n        }\n    }, {\n        key: \"getTimeline\",\n        value: function getTimeline(task) {\n            var _this10 = this;\n\n            this.mdT.timeline = [];\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getTimelinetk(task, this.myDbName).subscribe(function (res) {\n                    _this10.mdT.timeline = res.data;\n                });\n            } else {\n                this._tasks.getTimelinetk(task).subscribe(function (res) {\n                    _this10.mdT.timeline = res.data;\n                });\n            }\n        }\n    }, {\n        key: \"getRejected\",\n        value: function getRejected(task) {\n            var _this11 = this;\n\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getRejected(task, this.myDbName).subscribe(function (res) {\n                    _this11.mdT.rejected = res.data;\n                });\n            } else {\n                this._tasks.getRejected(task).subscribe(function (res) {\n                    _this11.mdT.rejected = res.data;\n                });\n            }\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            var temporal = document.createElement(\"div\");\n            temporal.innerHTML = text;\n            var text = temporal.textContent || temporal.innerText || \"\";\n\n            return text;\n        }\n    }, {\n        key: \"sanitizeHtml\",\n        value: function sanitizeHtml(text) {\n            if (text) {\n                var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n                if (!base64test.exec(text)) {\n                    // text = this.decode64(text);\n                }\n                text = this._sanitizer.bypassSecurityTrustHtml(text);\n                if (text.changingThisBreaksApplicationSecurity) {\n                    text = text.changingThisBreaksApplicationSecurity;\n                }\n                return text;\n            } else {\n                return \"\";\n            }\n        }\n    }, {\n        key: \"getTag\",\n        value: function getTag() {\n            var _this12 = this;\n\n            this.tagbytask = {};\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getTagsByTask(this.myTaskId, this.myDbName).subscribe(function (res) {\n                    if (res) {\n                        _this12.tagbytask = res.data;\n                        _this12.tasktag = true;\n                    }\n                });\n            } else {\n                this._tasks.getTagsByTask(this.myTaskId).subscribe(function (res) {\n                    if (res) {\n                        _this12.tagbytask = res.data;\n                        _this12.tasktag = true;\n                    }\n                });\n            }\n        }\n    }, {\n        key: \"onChangeNT\",\n        value: function onChangeNT(event) {\n            var files = event.srcElement.files;\n            if (!this.note.attachments) {\n                this.note.attachments = [];\n            }\n            if (files[0].size / 1024 / 1024 > 40) {\n                this.toastr.error(\"File size exceeds 40 MB\");\n            } else {\n                this.note.attachments.push(files[0]);\n            }\n        }\n    }, {\n        key: \"downloadFile\",\n        value: function downloadFile(item, event) {\n            var file = item;\n            var filename = item.name;\n            var blob = new Blob([file]);\n            var url = URL.createObjectURL(blob);\n\n            var element = event.srcElement;\n            $(element).attr({ 'download': filename, 'href': url });\n        }\n    }, {\n        key: \"addClassModal\",\n        value: function addClassModal() {\n            $('#file-upload' + this.myTaskId).focus();\n            $('div#primerdiv' + this.myTaskId).removeClass('content_modal_taskView');\n            $('div#primerdiv' + this.myTaskId).addClass('content_modal_taskView_adjusted');\n            $('div#segundoDiv' + this.myTaskId).removeClass('body_modal_taskView');\n            $('div#segundoDiv' + this.myTaskId).addClass('body_modal_taskView_adjusted');\n        }\n    }, {\n        key: \"removeClassModal\",\n        value: function removeClassModal() {\n            $('div#primerdiv' + this.myTaskId).removeClass('content_modal_taskView_adjusted');\n            $('div#primerdiv' + this.myTaskId).addClass('content_modal_taskView');\n            $('div#segundoDiv' + this.myTaskId).removeClass('body_modal_taskView_adjusted');\n            $('div#segundoDiv' + this.myTaskId).addClass('body_modal_taskView');\n        }\n    }, {\n        key: \"getJoin\",\n        value: function getJoin(task_id) {\n            var _this13 = this;\n\n            this.taskJoin = {};\n            this._tasks.getJoin(task_id).subscribe(function (res) {\n                _this13.join = res.data;\n                if (!jQuery.isEmptyObject(res.data)) {\n                    _this13._tasks.getTask(res.data.task_child).subscribe(function (res) {\n                        if (res.data) {\n                            _this13.taskJoin = res.data;\n                            _this13._tasks.getComments(_this13.taskJoin.task_id).subscribe(function (res) {\n                                _this13.commentsTaskJoin.comments = res.data ? res.data : [];\n                            });\n                        }\n                    });\n                }\n            });\n        }\n    }, {\n        key: \"getInfoCriteriaTask\",\n        value: function getInfoCriteriaTask(task_id) {\n            var _this14 = this;\n\n            this.taskCriteria = [];\n            this._tasks.getInfoTaskCriteria(task_id).subscribe(function (res) {\n\n                _this14.taskCriteria = res.data.data;\n            });\n        }\n    }]);\n\n    return TaskViewComponent;\n}(), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, \"myTaskId\", [_dec2], {\n    enumerable: true,\n    initializer: function initializer() {\n        return this.myTaskId;\n    }\n}), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, \"myDbName\", [_dec3], {\n    enumerable: true,\n    initializer: function initializer() {\n        return this.myDbName;\n    }\n})), _class2)) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _task.TaskService, _project.ProjectService, _note.NoteService, _sprint.SprintService, _externalrequest.ExternalRequestService, _users.UsersService, _primeng.ConfirmationService], TaskViewComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4), __webpack_require__(4)))\n\n/***/ }),\n/* 822 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<button type=\\\"button\\\" [attr.id]=\\\"'myTask'+myTaskId\\\" (click)=\\\"showModaltk()\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n    style=\\\"display:none;\\\">\\n</button>\\n<div class=\\\"modal modal-task fade\\\" [attr.id]=\\\"'mdTaskView-'+myTaskId\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n        <div [attr.id]=\\\"'primerdiv'+myTaskId\\\" class=\\\"modal-content content_modal_taskView\\\">\\n            <div class=\\\"modal-header header-project\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"\\n                    (click)=\\\"removeClassModal()\\\">\\n                    <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <div style=\\\"overflow-y: scroll;max-height: 25px;\\\">\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" \\\" + mdT.task_id + \\\" - \\\" +\\n                        mdT.task_subject}}\\n                    </h4>\\n                </div>\\n            </div>\\n            <div [attr.id]=\\\"'segundoDiv'+myTaskId\\\" class=\\\"modal-body body_modal_taskView\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\">\\n                        <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                            <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                                <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                                    id=\\\"tabsTaskview\\\">\\n                                    <li class=\\\"active\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#ptsk{{mdT.task_id}}\\\">Info</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"taskCriteria && taskCriteria.length != 0\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskCriteria-{{mdT.task_id}}\\\">Criteria</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"mdT.attachments && mdT.attachments.length > 0 \\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskAttachments-{{mdT.task_id}}\\\">Attachments</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"mdT.proj_id\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#ptk{{mdT.task_id}}\\\">Project related</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskAdjusted-{{mdT.task_id}}\\\">Adjustments</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskTimeline-{{mdT.task_id}}\\\">Timeline</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskComment-{{mdT.task_id}}\\\">Comments</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"mdT.form && mdT.form.length > 0 \\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskForm-{{mdT.task_id}}\\\">Form</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskSprint-{{mdT.task_id}}\\\">Sprint related</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"join.task_child != undefined && taskJoin != undefined && taskJoin.length != 0\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskRelated-{{mdT.task_id}}\\\">Task Related</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"mdT.para_status == '50'\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskRejected-{{mdT.task_id}}\\\" style=\\\"color: red;\\\">\\n                                            <i class=\\\"fa fa-exclamation-circle\\\" aria-hidden=\\\"true\\\"></i> Rejected Reason</a>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"min-height: 390px;\\\">\\n                        <div class=\\\"tab-content\\\">\\n                            <div [attr.id]=\\\"'ptsk'+mdT.task_id\\\" class=\\\"tab-pane fade in active\\\">\\n                                <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;text-align: left;\\\">\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Status</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.status_name }}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_date}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creator</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.creator}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.applicant}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Assigned to</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.asigned}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_delivery}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Points Assigned</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_points}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Points Recorded</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_pointsd}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.prod_name}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Level</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.tklv_description}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Units Assigned</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.unit_points}} {{mdT.unit_desc}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Units Recorded</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.unit_pointsd}} {{mdT.unit_desc}}</p>\\n                                    </div>\\n                                    <div *ngIf=\\\"mdT.userSharedTask && mdT.userSharedTask.length > 0\\\" class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                        <label class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 label-sqlx\\\" style=\\\"margin-left: 0px; padding-left: 0px;\\\">Shared\\n                                            with</label>\\n                                        <p class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3 element_p_sqlx\\\" *ngFor=\\\"let usertk of mdT.userSharedTask\\\"\\n                                            style=\\\"color:rgb(130, 145, 152);margin-left: 0px; padding-left: 0px;\\\">{{usertk.completename}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                        <div class=\\\"col-xs-11 col-md-11 col-lg-11\\\" [innerHTML]=\\\"mdT.task_description\\\"\\n                                            style=\\\"max-height: 358px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                        </div>\\n                                        <div *ngIf=\\\"tasktag == true\\\" class=\\\"col-xs-1 col-md-1 col-lg-1\\\">\\n                                            <div class=\\\"preview-tag-small pull-right\\\" [ngStyle]=\\\"{background:tagbytask.tag_color, position:absolute}\\\"\\n                                                aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"{{tagbytask.tag_description}}\\\">\\n                                                <i class=\\\"{{tagbytask.tag_icon}}\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n\\n                            </div>\\n\\n                            <div id=\\\"taskCriteria-{{mdT.task_id}}\\\" class=\\\"  col-xs-12 col-sm-12 col-md-12 col-lg-12 tab-pane fade\\\"\\n                                style=\\\"height: 665px; padding: 0px;\\\">\\n\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx_taskview\\\">\\n                                        <thead>\\n                                            <tr>\\n                                                <th class=\\\"th_columnField_criteriaTask_taskview\\\">Field</th>\\n                                                <th class=\\\"th_columnDescription_criteriaTask_taskview\\\">Description</th>\\n                                            </tr>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:0px; margin-bottom: 0px; max-height: 621px; overflow-y: scroll;\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx_taskview\\\">\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let criteria of taskCriteria;\\\">\\n                                                <td class=\\\"td_columnField_criteriaTask_taskview\\\">\\n                                                    <label>{{criteria.tkcr_num}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnDescription_criteriaTask_taskview\\\">\\n                                                    <label>{{criteria.tkcr_description}}</label>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskAttachments-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div *ngIf=\\\"!mdT.attachments\\\" class=\\\"row\\\">\\n\\n                                </div>\\n                                <div class=\\\"row\\\" *ngIf=\\\"mdT.attachments && mdT.attachments.length > 0\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"height: 407px;font-size: 14px;\\\">\\n                                        <label>Attachments ({{mdT.total_attachments}})</label>\\n                                        <ul class=\\\"ul_taskAttachments_taskview\\\">\\n                                            <li *ngFor=\\\"let att of mdT.attachments\\\" style=\\\"width:200px;margin:5px;height:225px;\\\"\\n                                                class=\\\"pull-left\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                        <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                        <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                        <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                        <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                        <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                        <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                        <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"sq sq-attach-files\\\"></i>{{ att.tsat_alias }}</a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.tsat_size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'ptk'+mdT.task_id\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                <div *ngIf=\\\"mdT.proj_id || mdT.proj_id != 'undefined'\\\" class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4 elements_info_sqlx\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Project Name</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_subject }}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Project Number</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_id}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_start}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Project Creator</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.creator}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.applicant}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_end}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Progress</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_percentage + \\\"%\\\"}}\\n                                        </p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                        <div *ngIf=\\\"mdT.project.proj_description\\\" class=\\\"col-xs-11 col-md-11 col-lg-11\\\"\\n                                            style=\\\"max-height: 358px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <p>\\n                                                {{escapeHtml(sanitizeHtml(mdT.project.proj_description))}}\\n                                            </p>\\n                                        </div>\\n                                    </div>\\n\\n                                </div>\\n                                <div *ngIf=\\\"!mdT.project\\\" class=\\\"row\\\">\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskAdjusted-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                <div *ngIf=\\\"mdT.total_adjusted\\\" class=\\\"row\\\">\\n                                    <div *ngIf=\\\"mdT.total_adjusted.length > 0\\\" class=\\\"col-xs-12 col-md-12 col-lg-12\\\"\\n                                        style=\\\"padding-bottom: 10px;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Task Adjusted</label>\\n                                    </div>\\n                                    <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"max-height:273px; font-size: 14px;\\\">\\n                                        <ul class=\\\"timeline comment-timeline-tk\\\">\\n                                            <li *ngFor=\\\"let adj of mdT.total_adjusted\\\" style=\\\"margin-top:5px;\\\">\\n                                                <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 30px;width: 30px;\\\">\\n                                                    <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\"\\n                                                        style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                                                </div>\\n                                                <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                    <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;\\\">\\n                                                        <b>{{adj.header}}</b>\\n                                                    </h3>\\n                                                    <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                                        <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                            <div>\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span>{{adj.points}}</span> on {{adj.date}} /\\n                                                                    <span>{{adj.delivery}}</span>\\n                                                                    <br> Reason for adjustment : {{adj.reason}}\\n                                                                </label>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                                <div *ngIf=\\\"!mdT.total_adjusted\\\" class=\\\"row\\\">\\n\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskTimeline-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\" style=\\\"\\n                            padding-right: 15px;\\\">\\n                                <div class=\\\"\\n                                content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\n                                div_taskTimeline_taskView\\\">\\n                                    <ul class=\\\"timeline comment-daily-timeline\\\">\\n                                        <li *ngFor=\\\"let adj of mdT.timeline\\\" style=\\\"margin-top:5px;\\\">\\n                                            <div class=\\\"icon-team-daily-table div_iconTeamDailyTable_taskTimeline\\\">\\n                                                <i class=\\\"fa fa-dot-circle-o user-icon-daily iconUser_taskTimeline_taskView\\\"\\n                                                    aria-hidden=\\\"true\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"icon-team-sprint div_iconWorking_taskTimeline\\\">\\n                                                <i class=\\\"sq sq-working-team user-icon-team iconWorking_taskTimeline_taskView\\\"\\n                                                    aria-hidden=\\\"true\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                <label class=\\\"timeline-header comment-timeline-header titleNameUserType_taskTimeline\\\">\\n                                                    <b>{{adj.creator}}</b>\\n                                                    <span style=\\\"font-weight: normal;\\\">{{\\\" \\\" + adj.tittle}}</span>\\n                                                </label>\\n                                                <div class=\\\"timeline-body timelineBody_taskTimeLine_taskView\\\">\\n                                                    <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                        <div>\\n                                                            <div class=\\\"pull-left col-xs-1 col-md-1 col-lg-1 \\\">\\n                                                                <i class=\\\"{{adj.label}}\\\" [ngStyle]=\\\"adj.type == 'note' ? { 'font-size': '24px' } : adj.type == 'daily' ? { 'font-size': '28px' } : adj.type == 'modification' ? {'font-size' : '28px'} : adj.type == 'rejection' ? {'font-size' : '24px'} : {'font-size' : '24px'} \\\"\\n                                                                    style=\\\"color:#0FB4FF\\\"></i>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'note'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Date:</span>\\n                                                                    {{adj.date}}\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Description:</span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                </label>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'daily'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Date:</span>\\n                                                                    {{adj.date}}\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Description:</span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                    <span *ngIf=\\\"adj.date != ''\\\" class=\\\"titleContent_tiemline\\\">\\n                                                                        <br> {{adj.points}} </span>\\n                                                                    <span *ngIf=\\\"adj.date != ''\\\" class=\\\"titleContent_tiemline\\\">\\n                                                                        <br> {{adj.units}} </span>\\n                                                                </label>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'modification'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Date:</span>\\n                                                                    {{adj.date}}\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Description:</span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                </label>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'rejection'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Date:</span>\\n                                                                    {{adj.date}}\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Description:\\n                                                                    </span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                </label>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'improving'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br><span class=\\\"titleContent_tiemline\\\">Description:\\n                                                                    </span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                </label>\\n\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                            <!--taskComment-->\\n                            <div [attr.id]=\\\"'taskComment-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div class=\\\"row\\\" style=\\\" margin-right: 15px;\\\">\\n                                    <div class=\\\"box-footer box-comments comments-squadlinx\\\">\\n                                        <div class=\\\"content-comments-users commentsContents_squadlinx\\\">\\n                                            <ul class=\\\"timeline comment-timeline-tk ul_mdTcomments_sqlx\\\">\\n                                                <li class=\\\"li_mdTcomments_sqlx\\\" *ngFor=\\\"let cpm of mdT.comments\\\">\\n                                                    <div class=\\\"icon-team-sprint div_usuarioComment_sqlx\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team icono_usuarioComment_sqlx\\\"\\n                                                            aria-hidden=\\\"true\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <span class=\\\"time\\\">\\n                                                            {{cpm.note_date}}</span>\\n                                                        <h3 class=\\\"timeline-header comment-timeline-header h3_commented_sqlx\\\">\\n                                                            <b class=\\\"name_creator_comment_sqlx\\\">{{cpm.creator + \\\" \\\"}}</b>\\n                                                            <span class=\\\"text_commented_sqlx\\\">Commented</span>\\n                                                        </h3>\\n                                                        <div class=\\\"timeline-body div_fatherComment_sqlx\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div class=\\\"col-xs-12 col-md-12 div_comentUser_sqlx\\\">\\n                                                                    <div class=\\\"col-xs-12 col-md-12 comment-user divDiv_comentUser_sqlx\\\">\\n                                                                        <p class=\\\"comment-user p_comentUser_sqlx\\\">\\n                                                                            <i class=\\\"sq sq-comments icon_textComment_sqlx\\\"\\n                                                                                aria-hidden=\\\"true\\\"></i>\\n                                                                            <span class=\\\"text_comment_squadlinx\\\">{{escapeHtml(cpm.note_text)}}</span>\\n                                                                        </p>\\n                                                                    </div>\\n                                                                    <div *ngIf=\\\"cpm.childs.length > 0\\\" style=\\\"background-color:rgb(238, 242, 244)\\\">\\n                                                                        <div *ngFor=\\\"let chn of cpm.childs\\\" class=\\\"col-xs-12 col-md-12 reply-user\\\"\\n                                                                            style=\\\"padding-top:10px;margin-left:0px; padding-top:0px;background-color:rgb(238, 242, 244);\\\">\\n                                                                            <div class=\\\"pull-right reply-comment\\\" style=\\\"color:rgb(130, 145, 152); background-color:rgb(238, 242, 244)!important; padding-right:0px;\\\">\\n                                                                                <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                                                    <span style=\\\"color: #999;float: right;font-size: 12px; padding-right: 0px;\\\">\\n                                                                                        {{chn.note_date}}</span>\\n                                                                                    <h3 class=\\\"reply-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                                        <b>{{chn.creator}}</b> replied\\n                                                                                    </h3>\\n                                                                                    <p class=\\\"reply-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                                        <i class=\\\"sq sq-comments\\\"\\n                                                                                            aria-hidden=\\\"true\\\" style=\\\"color:rgb(68, 180, 248); font-size: 16px;\\\"></i>\\n                                                                                        {{escapeHtml(chn.note_text)}}\\n                                                                                    </p>\\n                                                                                </div>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                                <div class=\\\"col-xs-12 col-md-12\\\" *ngIf=\\\"cpm.attachments && cpm.attachments.length > 0\\\">\\n                                                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                                                        <li *ngFor=\\\"let att of cpm.attachments\\\" class=\\\"li_attachmentsComments_sqlx\\\">\\n                                                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                                                <span class=\\\"icon_personalizado_sqlx\\\">\\n                                                                                    <i class=\\\"sq sq-documents-related\\\"\\n                                                                                        *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                </span>\\n                                                                            </a>\\n                                                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"attachment_name_sqlx\\\">{{\\n                                                                                \\\" \\\" + att.ntat_name }}</a>\\n                                                                        </li>\\n                                                                    </ul>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer footer_newsComments_sqlx\\\">\\n                                        <a class=\\\"button_leaveComment_sqlx\\\" data-toggle=\\\"collapse\\\" href=\\\"#collapse-{{myTaskId}}\\\" style=\\\"text-decoration: none;\\\">\\n                                            <i class=\\\"sq sq-comments i_leaveComment_sqlx\\\" aria-hidden=\\\"true\\\"></i>\\n                                            Leave a Comment\\n                                        </a>\\n                                        <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                                            <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                                            <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                                        </div>\\n                                        <div [attr.id]=\\\"'collapse-' + myTaskId\\\" class=\\\"panel-collapse collapse panel_newComment_sqlx\\\">\\n                                            <textarea class=\\\"textarea-comments textarea_comments_squadlinx\\\"\\n                                                style=\\\"max-height: 130px;\\\"[(ngModel)]=\\\"note.note_text\\\"></textarea> \\n                                                \\n                                            <div class=\\\"pull-right\\\">\\n                                                <button class=\\\"btn btn-sm btn-sqlx button_publishComment_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"noteAdd(mdT.task_id, 1)\\\" [disabled]=\\\"validateComments()\\\"\\n                                                    data-toggle=\\\"collapse\\\" [attr.data-target]=\\\"'#collapse' + mdT.task_id\\\">Publish\\n                                                </button>\\n                                            </div> \\n                                            <div class=\\\"pull-left\\\">\\n                                                <label [attr.for]=\\\"'file-upload' + mdT.task_id\\\" class=\\\"custom-file-upload\\\"\\n                                                    (click)=\\\"addClassModal()\\\">\\n                                                    <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                                                </label>\\n                                                <input style=\\\"display: none;\\\" [attr.id]=\\\"'file-upload' + mdT.task_id\\\"\\n                                                    type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                                    (change)=\\\"onChangeNT($event)\\\" />\\n                                            </div> \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer\\\" *ngIf=\\\"note.attachments && note.attachments.length > 0\\\"\\n                                        style=\\\"overflow: scroll; max-height: 165px;\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of note.attachments\\\" class=\\\"li_attachmentsComments_newAttachent_sqlx\\\">\\n                                                <a (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <span class=\\\"iconPersonalizado_newAttachment_sqlx\\\">\\n                                                        <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                        <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.name }}\\n                                                    </a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--end taskComment-->\\n                            <div [attr.id]=\\\"'taskForm-'+ mdT.task_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div *ngIf=\\\"!mdT.form\\\" class=\\\"row\\\">\\n\\n                                </div>\\n                                <div *ngIf=\\\"mdT.form && mdT.form.length > 0\\\" class=\\\"row\\\">\\n                                    <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"height: 407px;font-size: 14px;\\\">\\n                                        <div style=\\\"text-align: left;\\\">\\n                                            <span style=\\\"color:rgb(130,145,152);font-weight: bold;\\\">Category:\\n                                                {{mdT.form[0].cate_desc}}</span>\\n                                        </div>\\n                                        <table style=\\\"text-align: center;width: 100%;\\\">\\n                                            <tbody style=\\\"width: 100%;\\\">\\n                                                <tr *ngFor=\\\"let fr of mdT.form\\\" style=\\\"height: 60px;\\\">\\n                                                    <td class=\\\"td_formfield_taskview\\\">\\n                                                        <div class=\\\"div_formfield_taskview\\\">\\n                                                            {{fr.form_field}}\\n                                                        </div>\\n                                                    </td>\\n                                                    <td class=\\\"td_formdata_taskview\\\">\\n                                                        <div class=\\\"div_formdata_taskview\\\" *ngIf=\\\"fr.form_data\\\">\\n                                                            {{fr.form_data}}\\n                                                        </div>\\n                                                        <div class=\\\"div_formdata_taskview2\\\" *ngIf=\\\"fr.form_data == 0\\\">\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div id=\\\"taskRelated-{{mdT.task_id}}\\\" class=\\\"  col-xs-12 col-sm-12 col-md-12 col-lg-12 tab-pane fade\\\"\\n                                style=\\\"height: 490px; padding: 0px;\\\">\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 row column_inform_taskRelated\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_titleTaskRelated_sqlx modal-header modal-header-info-params\\\">\\n                                        <p class=\\\"title_taskRelated_sqlx\\\">{{taskJoin.task_id}} -\\n                                            {{escapeHtml(taskJoin.task_description)}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 modal-body contenedor_allInformationTaskRelated\\\">\\n                                        <div class=\\\" col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Creator</label>\\n                                            <p class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.creator}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Creation\\n                                                Date</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.task_date}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Assigned\\n                                                to</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.asigned}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Delivery\\n                                                Date</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.task_delivery}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Points\\n                                                Assigned</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.task_points}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Points\\n                                                Recorded</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.task_pointsd}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Product</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.prod_name}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Progress\\n                                                <span class=\\\"span_numeProgress_informationTask\\\">{{taskJoin.task_percentage}}%</span></label>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                <div *ngIf=\\\"taskJoin.task_percentage > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 progress-taskRelated-sqlx\\\">\\n                                                    <div class=\\\"info_barraProgress_taskRelated\\\" [ngStyle]=\\\"{ 'width': taskJoin.task_percentage  + '%' }\\\"></div>\\n                                                </div>\\n                                                <div *ngIf=\\\"taskJoin.task_percentage== 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 progress-taskRelated-sqlx\\\">\\n                                                    <div class=\\\"info_barraProgress_ifcero_taskRelated\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 row column_comments_taskRelated\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_titleCommentsTaskRelated_sqlx modal-header modal-header-info-params\\\">\\n                                        <p class=\\\"title_commentsOfTaskRelated_sqlx\\\">Comments</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 box-footer box-comments comments_sectioOfTaskRelate_squadlinx comments_askRelated_Sqlx\\\">\\n                                        <ul class=\\\"timeline comment-timeline-tk ul_commentsSectionTaskRelated_sqlx\\\">\\n                                            <li class=\\\"li_commentsTaskRelated_sqlx \\\" *ngFor=\\\"let comment of commentsTaskJoin.comments\\\">\\n                                                <div class=\\\"icon-team-sprint div_usuarioComment_sqlx\\\">\\n                                                    <i class=\\\"sq sq-working-team user-icon-team icono_usuarioComment_sqlx\\\"\\n                                                        aria-hidden=\\\"true\\\"></i>\\n                                                </div>\\n                                                <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                    <h3 class=\\\"timeline-header comment-timeline-header h3_commented_sqlx\\\">\\n                                                        <b class=\\\"name_creator_comment_sqlx\\\">{{comment.creator + \\\" \\\"}}</b>\\n                                                        <span class=\\\"text_commented_sqlx\\\">Commented</span>\\n                                                    </h3>\\n                                                    <div class=\\\"timeline-body div_fatherCommentTaskRelated_sqlx\\\">\\n                                                        <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_comentUser_sqlx\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 comment-user divDiv_comentUser_sqlx\\\">\\n                                                                    <p class=\\\"comment-user p_comentUser_sqlx\\\">\\n                                                                        <i class=\\\"sq sq-comments icon_textComment_sqlx\\\"\\n                                                                            aria-hidden=\\\"true\\\"></i>\\n                                                                        <span class=\\\"text_commentTaskRelated_squadlinx\\\">{{escapeHtml(comment.note_text)}}</span>\\n                                                                    </p>\\n                                                                </div>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 divContenedorAttachments_commentsTaskRelated\\\"\\n                                                                *ngIf=\\\"comment.attachments && comment.attachments.length > 0\\\">\\n                                                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                                                    <li *ngFor=\\\"let att of comment.attachments\\\" class=\\\"li_attachmentsCommentsTaskRelated_sqlx\\\">\\n                                                                        <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                                            <span class=\\\"icon_personalizado_taskRelated_sqlx \\\">\\n                                                                                <i class=\\\"sq sq-documents-related\\\"\\n                                                                                    *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                                                <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                            </span>\\n                                                                        </a>\\n                                                                        <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"attachment_name_taskRelated_sqlx\\\">{{\\n                                                                            \\\" \\\" + att.ntat_name }}</a>\\n                                                                    </li>\\n                                                                </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskSprint-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                <div *ngIf=\\\"mdT.sprint && mdT.sprint.spri_id != 0\\\" class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\"> Number</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_id}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Date start</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_init}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Date end</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_end}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.grop_name}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Total points</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_points}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_description}}</p>\\n                                    </div>\\n                                </div>\\n                                <div *ngIf=\\\"!mdT.sprint\\\" class=\\\"row\\\">\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskRejected-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div *ngIf=\\\"!mdT.rejected\\\" class=\\\"row\\\">\\n                                    No reason\\n                                </div>\\n                                <div *ngIf=\\\"mdT.rejected\\\" class=\\\"row\\\">\\n                                    <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"mdT.rejected.retk_description\\\"\\n                                                style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Rejected by</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.rejected.rejectedby }}</p>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n\\n                <!-- ***** -->\\n\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n                <div [attr.id]=\\\"'collapse-file-'+mdT.task_id\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin:20px 0;\\\">\\n                    <p-fileUpload #form1 name=\\\"fileUpload-Tasks\\\" (onSelect)=\\\"onChangeTask($event,'new')\\\" multiple=\\\"multiple\\\"\\n                        maxFileSize=\\\"8388608\\\" [showUploadButton]=\\\"false\\\" (onRemove)=\\\"onChangeTask($event,'delete')\\\"></p-fileUpload>\\n                    <button class=\\\"btn btn-primary btn-sm\\\" type=\\\"button\\\" (click)=\\\"onUploadAttachment(mdT.task_id, form)\\\"\\n                        (click)=\\\"form1.clear()\\\" [disabled]=\\\"!taskattch.attachments || taskattch.attachments.length==0\\\"\\n                        data-toggle=\\\"collapse\\\" [attr.data-target]=\\\"'#collapse-file-'+ mdT.task_id\\\">Save\\n                    </button>\\n                </div>\\n                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\"\\n                    (click)=\\\"removeClassModal()\\\">Close\\n                </button>\\n            </div>\\n        </div>\\n    </div>\\n</div>\";\n\n/***/ }),\n/* 823 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*!\n * FullCalendar v3.10.2\n * Docs & License: https://fullcalendar.io/\n * (c) 2019 Adam Shaw\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(true)\n\t\tmodule.exports = factory(__webpack_require__(2), __webpack_require__(4));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"moment\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FullCalendar\"] = factory(require(\"moment\"), require(\"jquery\"));\n\telse\n\t\troot[\"FullCalendar\"] = factory(root[\"moment\"], root[\"jQuery\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 256);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports) {\n\n/*\r\nderived from:\r\nhttps://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js\r\n\nonly include the helpers we need, to keep down filesize\r\n*/\r\nvar extendStatics = Object.setPrototypeOf ||\r\n    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n    function (d, b) { for (var p in b)\r\n        if (b.hasOwnProperty(p))\r\n            d[p] = b[p]; };\r\nexports.__extends = function (d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\n/* FullCalendar-specific DOM Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\r\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\r\nfunction compensateScroll(rowEls, scrollbarWidths) {\r\n    if (scrollbarWidths.left) {\r\n        rowEls.css({\r\n            'border-left-width': 1,\r\n            'margin-left': scrollbarWidths.left - 1\r\n        });\r\n    }\r\n    if (scrollbarWidths.right) {\r\n        rowEls.css({\r\n            'border-right-width': 1,\r\n            'margin-right': scrollbarWidths.right - 1\r\n        });\r\n    }\r\n}\r\nexports.compensateScroll = compensateScroll;\r\n// Undoes compensateScroll and restores all borders/margins\r\nfunction uncompensateScroll(rowEls) {\r\n    rowEls.css({\r\n        'margin-left': '',\r\n        'margin-right': '',\r\n        'border-left-width': '',\r\n        'border-right-width': ''\r\n    });\r\n}\r\nexports.uncompensateScroll = uncompensateScroll;\r\n// Make the mouse cursor express that an event is not allowed in the current area\r\nfunction disableCursor() {\r\n    $('body').addClass('fc-not-allowed');\r\n}\r\nexports.disableCursor = disableCursor;\r\n// Returns the mouse cursor to its original look\r\nfunction enableCursor() {\r\n    $('body').removeClass('fc-not-allowed');\r\n}\r\nexports.enableCursor = enableCursor;\r\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\r\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\r\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\r\n// reduces the available height.\r\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\r\n    // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\r\n    // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\r\n    var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\r\n    var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\r\n    var flexEls = []; // elements that are allowed to expand. array of DOM nodes\r\n    var flexOffsets = []; // amount of vertical space it takes up\r\n    var flexHeights = []; // actual css height\r\n    var usedHeight = 0;\r\n    undistributeHeight(els); // give all elements their natural height\r\n    // find elements that are below the recommended height (expandable).\r\n    // important to query for heights in a single first pass (to avoid reflow oscillation).\r\n    els.each(function (i, el) {\r\n        var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\r\n        var naturalOffset = $(el).outerHeight(true);\r\n        if (naturalOffset < minOffset) {\r\n            flexEls.push(el);\r\n            flexOffsets.push(naturalOffset);\r\n            flexHeights.push($(el).height());\r\n        }\r\n        else {\r\n            // this element stretches past recommended height (non-expandable). mark the space as occupied.\r\n            usedHeight += naturalOffset;\r\n        }\r\n    });\r\n    // readjust the recommended height to only consider the height available to non-maxed-out rows.\r\n    if (shouldRedistribute) {\r\n        availableHeight -= usedHeight;\r\n        minOffset1 = Math.floor(availableHeight / flexEls.length);\r\n        minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\r\n    }\r\n    // assign heights to all expandable elements\r\n    $(flexEls).each(function (i, el) {\r\n        var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\r\n        var naturalOffset = flexOffsets[i];\r\n        var naturalHeight = flexHeights[i];\r\n        var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\r\n        if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\r\n            $(el).height(newHeight);\r\n        }\r\n    });\r\n}\r\nexports.distributeHeight = distributeHeight;\r\n// Undoes distrubuteHeight, restoring all els to their natural height\r\nfunction undistributeHeight(els) {\r\n    els.height('');\r\n}\r\nexports.undistributeHeight = undistributeHeight;\r\n// Given `els`, a jQuery set of <td> cells, find the cell with the largest natural width and set the widths of all the\r\n// cells to be that width.\r\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\r\nfunction matchCellWidths(els) {\r\n    var maxInnerWidth = 0;\r\n    els.find('> *').each(function (i, innerEl) {\r\n        var innerWidth = $(innerEl).outerWidth();\r\n        if (innerWidth > maxInnerWidth) {\r\n            maxInnerWidth = innerWidth;\r\n        }\r\n    });\r\n    maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\r\n    els.width(maxInnerWidth);\r\n    return maxInnerWidth;\r\n}\r\nexports.matchCellWidths = matchCellWidths;\r\n// Given one element that resides inside another,\r\n// Subtracts the height of the inner element from the outer element.\r\nfunction subtractInnerElHeight(outerEl, innerEl) {\r\n    var both = outerEl.add(innerEl);\r\n    var diff;\r\n    // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\r\n    both.css({\r\n        position: 'relative',\r\n        left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\r\n    });\r\n    diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\r\n    both.css({ position: '', left: '' }); // undo hack\r\n    return diff;\r\n}\r\nexports.subtractInnerElHeight = subtractInnerElHeight;\r\n/* Element Geom Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\r\nfunction getScrollParent(el) {\r\n    var position = el.css('position');\r\n    var scrollParent = el.parents().filter(function () {\r\n        var parent = $(this);\r\n        return (/(auto|scroll)/).test(parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x'));\r\n    }).eq(0);\r\n    return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\r\n}\r\nexports.getScrollParent = getScrollParent;\r\n// Queries the outer bounding area of a jQuery element.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getOuterRect(el, origin) {\r\n    var offset = el.offset();\r\n    var left = offset.left - (origin ? origin.left : 0);\r\n    var top = offset.top - (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el.outerWidth(),\r\n        top: top,\r\n        bottom: top + el.outerHeight()\r\n    };\r\n}\r\nexports.getOuterRect = getOuterRect;\r\n// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\n// WARNING: given element can't have borders\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getClientRect(el, origin) {\r\n    var offset = el.offset();\r\n    var scrollbarWidths = getScrollbarWidths(el);\r\n    var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\r\n    var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el[0].clientWidth,\r\n        top: top,\r\n        bottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\r\n    };\r\n}\r\nexports.getClientRect = getClientRect;\r\n// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getContentRect(el, origin) {\r\n    var offset = el.offset(); // just outside of border, margin not included\r\n    var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -\r\n        (origin ? origin.left : 0);\r\n    var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -\r\n        (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el.width(),\r\n        top: top,\r\n        bottom: top + el.height()\r\n    };\r\n}\r\nexports.getContentRect = getContentRect;\r\n// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\r\n// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getScrollbarWidths(el) {\r\n    var leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\r\n    var bottomWidth = el[0].offsetHeight - el[0].clientHeight;\r\n    var widths;\r\n    leftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\r\n    bottomWidth = sanitizeScrollbarWidth(bottomWidth);\r\n    widths = { left: 0, right: 0, top: 0, bottom: bottomWidth };\r\n    if (getIsLeftRtlScrollbars() && el.css('direction') === 'rtl') { // is the scrollbar on the left side?\r\n        widths.left = leftRightWidth;\r\n    }\r\n    else {\r\n        widths.right = leftRightWidth;\r\n    }\r\n    return widths;\r\n}\r\nexports.getScrollbarWidths = getScrollbarWidths;\r\n// The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\r\n// retina displays, rounding, and IE11. Massage them into a usable value.\r\nfunction sanitizeScrollbarWidth(width) {\r\n    width = Math.max(0, width); // no negatives\r\n    width = Math.round(width);\r\n    return width;\r\n}\r\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\r\nvar _isLeftRtlScrollbars = null;\r\nfunction getIsLeftRtlScrollbars() {\r\n    if (_isLeftRtlScrollbars === null) {\r\n        _isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\r\n    }\r\n    return _isLeftRtlScrollbars;\r\n}\r\nfunction computeIsLeftRtlScrollbars() {\r\n    var el = $('<div><div></div></div>')\r\n        .css({\r\n        position: 'absolute',\r\n        top: -1000,\r\n        left: 0,\r\n        border: 0,\r\n        padding: 0,\r\n        overflow: 'scroll',\r\n        direction: 'rtl'\r\n    })\r\n        .appendTo('body');\r\n    var innerEl = el.children();\r\n    var res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\r\n    el.remove();\r\n    return res;\r\n}\r\n// Retrieves a jQuery element's computed CSS value as a floating-point number.\r\n// If the queried value is non-numeric (ex: IE can return \"medium\" for border width), will just return zero.\r\nfunction getCssFloat(el, prop) {\r\n    return parseFloat(el.css(prop)) || 0;\r\n}\r\n/* Mouse / Touch Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\r\nfunction isPrimaryMouseButton(ev) {\r\n    return ev.which === 1 && !ev.ctrlKey;\r\n}\r\nexports.isPrimaryMouseButton = isPrimaryMouseButton;\r\nfunction getEvX(ev) {\r\n    var touches = ev.originalEvent.touches;\r\n    // on mobile FF, pageX for touch events is present, but incorrect,\r\n    // so, look at touch coordinates first.\r\n    if (touches && touches.length) {\r\n        return touches[0].pageX;\r\n    }\r\n    return ev.pageX;\r\n}\r\nexports.getEvX = getEvX;\r\nfunction getEvY(ev) {\r\n    var touches = ev.originalEvent.touches;\r\n    // on mobile FF, pageX for touch events is present, but incorrect,\r\n    // so, look at touch coordinates first.\r\n    if (touches && touches.length) {\r\n        return touches[0].pageY;\r\n    }\r\n    return ev.pageY;\r\n}\r\nexports.getEvY = getEvY;\r\nfunction getEvIsTouch(ev) {\r\n    return /^touch/.test(ev.type);\r\n}\r\nexports.getEvIsTouch = getEvIsTouch;\r\nfunction preventSelection(el) {\r\n    el.addClass('fc-unselectable')\r\n        .on('selectstart', preventDefault);\r\n}\r\nexports.preventSelection = preventSelection;\r\nfunction allowSelection(el) {\r\n    el.removeClass('fc-unselectable')\r\n        .off('selectstart', preventDefault);\r\n}\r\nexports.allowSelection = allowSelection;\r\n// Stops a mouse/touch event from doing it's native browser action\r\nfunction preventDefault(ev) {\r\n    ev.preventDefault();\r\n}\r\nexports.preventDefault = preventDefault;\r\n/* General Geometry Utils\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\r\nfunction intersectRects(rect1, rect2) {\r\n    var res = {\r\n        left: Math.max(rect1.left, rect2.left),\r\n        right: Math.min(rect1.right, rect2.right),\r\n        top: Math.max(rect1.top, rect2.top),\r\n        bottom: Math.min(rect1.bottom, rect2.bottom)\r\n    };\r\n    if (res.left < res.right && res.top < res.bottom) {\r\n        return res;\r\n    }\r\n    return false;\r\n}\r\nexports.intersectRects = intersectRects;\r\n// Returns a new point that will have been moved to reside within the given rectangle\r\nfunction constrainPoint(point, rect) {\r\n    return {\r\n        left: Math.min(Math.max(point.left, rect.left), rect.right),\r\n        top: Math.min(Math.max(point.top, rect.top), rect.bottom)\r\n    };\r\n}\r\nexports.constrainPoint = constrainPoint;\r\n// Returns a point that is the center of the given rectangle\r\nfunction getRectCenter(rect) {\r\n    return {\r\n        left: (rect.left + rect.right) / 2,\r\n        top: (rect.top + rect.bottom) / 2\r\n    };\r\n}\r\nexports.getRectCenter = getRectCenter;\r\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\r\nfunction diffPoints(point1, point2) {\r\n    return {\r\n        left: point1.left - point2.left,\r\n        top: point1.top - point2.top\r\n    };\r\n}\r\nexports.diffPoints = diffPoints;\r\n/* Object Ordering by Field\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction parseFieldSpecs(input) {\r\n    var specs = [];\r\n    var tokens = [];\r\n    var i;\r\n    var token;\r\n    if (typeof input === 'string') {\r\n        tokens = input.split(/\\s*,\\s*/);\r\n    }\r\n    else if (typeof input === 'function') {\r\n        tokens = [input];\r\n    }\r\n    else if ($.isArray(input)) {\r\n        tokens = input;\r\n    }\r\n    for (i = 0; i < tokens.length; i++) {\r\n        token = tokens[i];\r\n        if (typeof token === 'string') {\r\n            specs.push(token.charAt(0) === '-' ?\r\n                { field: token.substring(1), order: -1 } :\r\n                { field: token, order: 1 });\r\n        }\r\n        else if (typeof token === 'function') {\r\n            specs.push({ func: token });\r\n        }\r\n    }\r\n    return specs;\r\n}\r\nexports.parseFieldSpecs = parseFieldSpecs;\r\nfunction compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback, obj2fallback) {\r\n    var i;\r\n    var cmp;\r\n    for (i = 0; i < fieldSpecs.length; i++) {\r\n        cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback);\r\n        if (cmp) {\r\n            return cmp;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\nexports.compareByFieldSpecs = compareByFieldSpecs;\r\nfunction compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {\r\n    if (fieldSpec.func) {\r\n        return fieldSpec.func(obj1, obj2);\r\n    }\r\n    var val1 = obj1[fieldSpec.field];\r\n    var val2 = obj2[fieldSpec.field];\r\n    if (val1 == null && obj1fallback) {\r\n        val1 = obj1fallback[fieldSpec.field];\r\n    }\r\n    if (val2 == null && obj2fallback) {\r\n        val2 = obj2fallback[fieldSpec.field];\r\n    }\r\n    return flexibleCompare(val1, val2) * (fieldSpec.order || 1);\r\n}\r\nexports.compareByFieldSpec = compareByFieldSpec;\r\nfunction flexibleCompare(a, b) {\r\n    if (!a && !b) {\r\n        return 0;\r\n    }\r\n    if (b == null) {\r\n        return -1;\r\n    }\r\n    if (a == null) {\r\n        return 1;\r\n    }\r\n    if ($.type(a) === 'string' || $.type(b) === 'string') {\r\n        return String(a).localeCompare(String(b));\r\n    }\r\n    return a - b;\r\n}\r\nexports.flexibleCompare = flexibleCompare;\r\n/* Date Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nexports.dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\r\nexports.unitsDesc = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; // descending\r\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\r\n// Moments will have their timezones normalized.\r\nfunction diffDayTime(a, b) {\r\n    return moment.duration({\r\n        days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\r\n        ms: a.time() - b.time() // time-of-day from day start. disregards timezone\r\n    });\r\n}\r\nexports.diffDayTime = diffDayTime;\r\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\r\nfunction diffDay(a, b) {\r\n    return moment.duration({\r\n        days: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\r\n    });\r\n}\r\nexports.diffDay = diffDay;\r\n// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\r\nfunction diffByUnit(a, b, unit) {\r\n    return moment.duration(Math.round(a.diff(b, unit, true)), // returnFloat=true\r\n    unit);\r\n}\r\nexports.diffByUnit = diffByUnit;\r\n// Computes the unit name of the largest whole-unit period of time.\r\n// For example, 48 hours will be \"days\" whereas 49 hours will be \"hours\".\r\n// Accepts start/end, a range object, or an original duration object.\r\nfunction computeGreatestUnit(start, end) {\r\n    var i;\r\n    var unit;\r\n    var val;\r\n    for (i = 0; i < exports.unitsDesc.length; i++) {\r\n        unit = exports.unitsDesc[i];\r\n        val = computeRangeAs(unit, start, end);\r\n        if (val >= 1 && isInt(val)) {\r\n            break;\r\n        }\r\n    }\r\n    return unit; // will be \"milliseconds\" if nothing else matches\r\n}\r\nexports.computeGreatestUnit = computeGreatestUnit;\r\n// like computeGreatestUnit, but has special abilities to interpret the source input for clues\r\nfunction computeDurationGreatestUnit(duration, durationInput) {\r\n    var unit = computeGreatestUnit(duration);\r\n    // prevent days:7 from being interpreted as a week\r\n    if (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {\r\n        unit = 'day';\r\n    }\r\n    return unit;\r\n}\r\nexports.computeDurationGreatestUnit = computeDurationGreatestUnit;\r\n// Computes the number of units (like \"hours\") in the given range.\r\n// Range can be a {start,end} object, separate start/end args, or a Duration.\r\n// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\r\n// of month-diffing logic (which tends to vary from version to version).\r\nfunction computeRangeAs(unit, start, end) {\r\n    if (end != null) { // given start, end\r\n        return end.diff(start, unit, true);\r\n    }\r\n    else if (moment.isDuration(start)) { // given duration\r\n        return start.as(unit);\r\n    }\r\n    else { // given { start, end } range object\r\n        return start.end.diff(start.start, unit, true);\r\n    }\r\n}\r\n// Intelligently divides a range (specified by a start/end params) by a duration\r\nfunction divideRangeByDuration(start, end, dur) {\r\n    var months;\r\n    if (durationHasTime(dur)) {\r\n        return (end - start) / dur;\r\n    }\r\n    months = dur.asMonths();\r\n    if (Math.abs(months) >= 1 && isInt(months)) {\r\n        return end.diff(start, 'months', true) / months;\r\n    }\r\n    return end.diff(start, 'days', true) / dur.asDays();\r\n}\r\nexports.divideRangeByDuration = divideRangeByDuration;\r\n// Intelligently divides one duration by another\r\nfunction divideDurationByDuration(dur1, dur2) {\r\n    var months1;\r\n    var months2;\r\n    if (durationHasTime(dur1) || durationHasTime(dur2)) {\r\n        return dur1 / dur2;\r\n    }\r\n    months1 = dur1.asMonths();\r\n    months2 = dur2.asMonths();\r\n    if (Math.abs(months1) >= 1 && isInt(months1) &&\r\n        Math.abs(months2) >= 1 && isInt(months2)) {\r\n        return months1 / months2;\r\n    }\r\n    return dur1.asDays() / dur2.asDays();\r\n}\r\nexports.divideDurationByDuration = divideDurationByDuration;\r\n// Intelligently multiplies a duration by a number\r\nfunction multiplyDuration(dur, n) {\r\n    var months;\r\n    if (durationHasTime(dur)) {\r\n        return moment.duration(dur * n);\r\n    }\r\n    months = dur.asMonths();\r\n    if (Math.abs(months) >= 1 && isInt(months)) {\r\n        return moment.duration({ months: months * n });\r\n    }\r\n    return moment.duration({ days: dur.asDays() * n });\r\n}\r\nexports.multiplyDuration = multiplyDuration;\r\n// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\r\nfunction durationHasTime(dur) {\r\n    return Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\r\n}\r\nexports.durationHasTime = durationHasTime;\r\nfunction isNativeDate(input) {\r\n    return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\r\n}\r\nexports.isNativeDate = isNativeDate;\r\n// Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\r\nfunction isTimeString(str) {\r\n    return typeof str === 'string' &&\r\n        /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\r\n}\r\nexports.isTimeString = isTimeString;\r\n/* Logging and Debug\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction log() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var console = window.console;\r\n    if (console && console.log) {\r\n        return console.log.apply(console, args);\r\n    }\r\n}\r\nexports.log = log;\r\nfunction warn() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var console = window.console;\r\n    if (console && console.warn) {\r\n        return console.warn.apply(console, args);\r\n    }\r\n    else {\r\n        return log.apply(null, args);\r\n    }\r\n}\r\nexports.warn = warn;\r\n/* General Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar hasOwnPropMethod = {}.hasOwnProperty;\r\n// Merges an array of objects into a single object.\r\n// The second argument allows for an array of property names who's object values will be merged together.\r\nfunction mergeProps(propObjs, complexProps) {\r\n    var dest = {};\r\n    var i;\r\n    var name;\r\n    var complexObjs;\r\n    var j;\r\n    var val;\r\n    var props;\r\n    if (complexProps) {\r\n        for (i = 0; i < complexProps.length; i++) {\r\n            name = complexProps[i];\r\n            complexObjs = [];\r\n            // collect the trailing object values, stopping when a non-object is discovered\r\n            for (j = propObjs.length - 1; j >= 0; j--) {\r\n                val = propObjs[j][name];\r\n                if (typeof val === 'object') {\r\n                    complexObjs.unshift(val);\r\n                }\r\n                else if (val !== undefined) {\r\n                    dest[name] = val; // if there were no objects, this value will be used\r\n                    break;\r\n                }\r\n            }\r\n            // if the trailing values were objects, use the merged value\r\n            if (complexObjs.length) {\r\n                dest[name] = mergeProps(complexObjs);\r\n            }\r\n        }\r\n    }\r\n    // copy values into the destination, going from last to first\r\n    for (i = propObjs.length - 1; i >= 0; i--) {\r\n        props = propObjs[i];\r\n        for (name in props) {\r\n            if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\r\n                dest[name] = props[name];\r\n            }\r\n        }\r\n    }\r\n    return dest;\r\n}\r\nexports.mergeProps = mergeProps;\r\nfunction copyOwnProps(src, dest) {\r\n    for (var name_1 in src) {\r\n        if (hasOwnProp(src, name_1)) {\r\n            dest[name_1] = src[name_1];\r\n        }\r\n    }\r\n}\r\nexports.copyOwnProps = copyOwnProps;\r\nfunction hasOwnProp(obj, name) {\r\n    return hasOwnPropMethod.call(obj, name);\r\n}\r\nexports.hasOwnProp = hasOwnProp;\r\nfunction applyAll(functions, thisObj, args) {\r\n    if ($.isFunction(functions)) {\r\n        functions = [functions];\r\n    }\r\n    if (functions) {\r\n        var i = void 0;\r\n        var ret = void 0;\r\n        for (i = 0; i < functions.length; i++) {\r\n            ret = functions[i].apply(thisObj, args) || ret;\r\n        }\r\n        return ret;\r\n    }\r\n}\r\nexports.applyAll = applyAll;\r\nfunction removeMatching(array, testFunc) {\r\n    var removeCnt = 0;\r\n    var i = 0;\r\n    while (i < array.length) {\r\n        if (testFunc(array[i])) { // truthy value means *remove*\r\n            array.splice(i, 1);\r\n            removeCnt++;\r\n        }\r\n        else {\r\n            i++;\r\n        }\r\n    }\r\n    return removeCnt;\r\n}\r\nexports.removeMatching = removeMatching;\r\nfunction removeExact(array, exactVal) {\r\n    var removeCnt = 0;\r\n    var i = 0;\r\n    while (i < array.length) {\r\n        if (array[i] === exactVal) {\r\n            array.splice(i, 1);\r\n            removeCnt++;\r\n        }\r\n        else {\r\n            i++;\r\n        }\r\n    }\r\n    return removeCnt;\r\n}\r\nexports.removeExact = removeExact;\r\nfunction isArraysEqual(a0, a1) {\r\n    var len = a0.length;\r\n    var i;\r\n    if (len == null || len !== a1.length) { // not array? or not same length?\r\n        return false;\r\n    }\r\n    for (i = 0; i < len; i++) {\r\n        if (a0[i] !== a1[i]) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nexports.isArraysEqual = isArraysEqual;\r\nfunction firstDefined() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    for (var i = 0; i < args.length; i++) {\r\n        if (args[i] !== undefined) {\r\n            return args[i];\r\n        }\r\n    }\r\n}\r\nexports.firstDefined = firstDefined;\r\nfunction htmlEscape(s) {\r\n    return (s + '').replace(/&/g, '&amp;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;')\r\n        .replace(/'/g, '&#039;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/\\n/g, '<br>');\r\n}\r\nexports.htmlEscape = htmlEscape;\r\nfunction stripHtmlEntities(text) {\r\n    return text.replace(/&.*?;/g, '');\r\n}\r\nexports.stripHtmlEntities = stripHtmlEntities;\r\n// Given a hash of CSS properties, returns a string of CSS.\r\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\r\nfunction cssToStr(cssProps) {\r\n    var statements = [];\r\n    $.each(cssProps, function (name, val) {\r\n        if (val != null) {\r\n            statements.push(name + ':' + val);\r\n        }\r\n    });\r\n    return statements.join(';');\r\n}\r\nexports.cssToStr = cssToStr;\r\n// Given an object hash of HTML attribute names to values,\r\n// generates a string that can be injected between < > in HTML\r\nfunction attrsToStr(attrs) {\r\n    var parts = [];\r\n    $.each(attrs, function (name, val) {\r\n        if (val != null) {\r\n            parts.push(name + '=\"' + htmlEscape(val) + '\"');\r\n        }\r\n    });\r\n    return parts.join(' ');\r\n}\r\nexports.attrsToStr = attrsToStr;\r\nfunction capitaliseFirstLetter(str) {\r\n    return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\nexports.capitaliseFirstLetter = capitaliseFirstLetter;\r\nfunction compareNumbers(a, b) {\r\n    return a - b;\r\n}\r\nexports.compareNumbers = compareNumbers;\r\nfunction isInt(n) {\r\n    return n % 1 === 0;\r\n}\r\nexports.isInt = isInt;\r\n// Returns a method bound to the given object context.\r\n// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\r\n// different contexts as identical when binding/unbinding events.\r\nfunction proxy(obj, methodName) {\r\n    var method = obj[methodName];\r\n    return function () {\r\n        return method.apply(obj, arguments);\r\n    };\r\n}\r\nexports.proxy = proxy;\r\n// Returns a function, that, as long as it continues to be invoked, will not\r\n// be triggered. The function will be called after it stops being called for\r\n// N milliseconds. If `immediate` is passed, trigger the function on the\r\n// leading edge, instead of the trailing.\r\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\r\nfunction debounce(func, wait, immediate) {\r\n    if (immediate === void 0) { immediate = false; }\r\n    var timeout;\r\n    var args;\r\n    var context;\r\n    var timestamp;\r\n    var result;\r\n    var later = function () {\r\n        var last = +new Date() - timestamp;\r\n        if (last < wait) {\r\n            timeout = setTimeout(later, wait - last);\r\n        }\r\n        else {\r\n            timeout = null;\r\n            if (!immediate) {\r\n                result = func.apply(context, args);\r\n                context = args = null;\r\n            }\r\n        }\r\n    };\r\n    return function () {\r\n        context = this;\r\n        args = arguments;\r\n        timestamp = +new Date();\r\n        var callNow = immediate && !timeout;\r\n        if (!timeout) {\r\n            timeout = setTimeout(later, wait);\r\n        }\r\n        if (callNow) {\r\n            result = func.apply(context, args);\r\n            context = args = null;\r\n        }\r\n        return result;\r\n    };\r\n}\r\nexports.debounce = debounce;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange = /** @class */ (function () {\r\n    function UnzonedRange(startInput, endInput) {\r\n        // TODO: move these into footprint.\r\n        // Especially, doesn't make sense for null startMs/endMs.\r\n        this.isStart = true;\r\n        this.isEnd = true;\r\n        if (moment.isMoment(startInput)) {\r\n            startInput = startInput.clone().stripZone();\r\n        }\r\n        if (moment.isMoment(endInput)) {\r\n            endInput = endInput.clone().stripZone();\r\n        }\r\n        if (startInput) {\r\n            this.startMs = startInput.valueOf();\r\n        }\r\n        if (endInput) {\r\n            this.endMs = endInput.valueOf();\r\n        }\r\n    }\r\n    /*\r\n    SIDEEFFECT: will mutate eventRanges.\r\n    Will return a new array result.\r\n    Only works for non-open-ended ranges.\r\n    */\r\n    UnzonedRange.invertRanges = function (ranges, constraintRange) {\r\n        var invertedRanges = [];\r\n        var startMs = constraintRange.startMs; // the end of the previous range. the start of the new range\r\n        var i;\r\n        var dateRange;\r\n        // ranges need to be in order. required for our date-walking algorithm\r\n        ranges.sort(compareUnzonedRanges);\r\n        for (i = 0; i < ranges.length; i++) {\r\n            dateRange = ranges[i];\r\n            // add the span of time before the event (if there is any)\r\n            if (dateRange.startMs > startMs) { // compare millisecond time (skip any ambig logic)\r\n                invertedRanges.push(new UnzonedRange(startMs, dateRange.startMs));\r\n            }\r\n            if (dateRange.endMs > startMs) {\r\n                startMs = dateRange.endMs;\r\n            }\r\n        }\r\n        // add the span of time after the last event (if there is any)\r\n        if (startMs < constraintRange.endMs) { // compare millisecond time (skip any ambig logic)\r\n            invertedRanges.push(new UnzonedRange(startMs, constraintRange.endMs));\r\n        }\r\n        return invertedRanges;\r\n    };\r\n    UnzonedRange.prototype.intersect = function (otherRange) {\r\n        var startMs = this.startMs;\r\n        var endMs = this.endMs;\r\n        var newRange = null;\r\n        if (otherRange.startMs != null) {\r\n            if (startMs == null) {\r\n                startMs = otherRange.startMs;\r\n            }\r\n            else {\r\n                startMs = Math.max(startMs, otherRange.startMs);\r\n            }\r\n        }\r\n        if (otherRange.endMs != null) {\r\n            if (endMs == null) {\r\n                endMs = otherRange.endMs;\r\n            }\r\n            else {\r\n                endMs = Math.min(endMs, otherRange.endMs);\r\n            }\r\n        }\r\n        if (startMs == null || endMs == null || startMs < endMs) {\r\n            newRange = new UnzonedRange(startMs, endMs);\r\n            newRange.isStart = this.isStart && startMs === this.startMs;\r\n            newRange.isEnd = this.isEnd && endMs === this.endMs;\r\n        }\r\n        return newRange;\r\n    };\r\n    UnzonedRange.prototype.intersectsWith = function (otherRange) {\r\n        return (this.endMs == null || otherRange.startMs == null || this.endMs > otherRange.startMs) &&\r\n            (this.startMs == null || otherRange.endMs == null || this.startMs < otherRange.endMs);\r\n    };\r\n    UnzonedRange.prototype.containsRange = function (innerRange) {\r\n        return (this.startMs == null || (innerRange.startMs != null && innerRange.startMs >= this.startMs)) &&\r\n            (this.endMs == null || (innerRange.endMs != null && innerRange.endMs <= this.endMs));\r\n    };\r\n    // `date` can be a moment, a Date, or a millisecond time.\r\n    UnzonedRange.prototype.containsDate = function (date) {\r\n        var ms = date.valueOf();\r\n        return (this.startMs == null || ms >= this.startMs) &&\r\n            (this.endMs == null || ms < this.endMs);\r\n    };\r\n    // If the given date is not within the given range, move it inside.\r\n    // (If it's past the end, make it one millisecond before the end).\r\n    // `date` can be a moment, a Date, or a millisecond time.\r\n    // Returns a MS-time.\r\n    UnzonedRange.prototype.constrainDate = function (date) {\r\n        var ms = date.valueOf();\r\n        if (this.startMs != null && ms < this.startMs) {\r\n            ms = this.startMs;\r\n        }\r\n        if (this.endMs != null && ms >= this.endMs) {\r\n            ms = this.endMs - 1;\r\n        }\r\n        return ms;\r\n    };\r\n    UnzonedRange.prototype.equals = function (otherRange) {\r\n        return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;\r\n    };\r\n    UnzonedRange.prototype.clone = function () {\r\n        var range = new UnzonedRange(this.startMs, this.endMs);\r\n        range.isStart = this.isStart;\r\n        range.isEnd = this.isEnd;\r\n        return range;\r\n    };\r\n    // Returns an ambig-zoned moment from startMs.\r\n    // BEWARE: returned moment is not localized.\r\n    // Formatting and start-of-week will be default.\r\n    UnzonedRange.prototype.getStart = function () {\r\n        if (this.startMs != null) {\r\n            return moment_ext_1.default.utc(this.startMs).stripZone();\r\n        }\r\n        return null;\r\n    };\r\n    // Returns an ambig-zoned moment from startMs.\r\n    // BEWARE: returned moment is not localized.\r\n    // Formatting and start-of-week will be default.\r\n    UnzonedRange.prototype.getEnd = function () {\r\n        if (this.endMs != null) {\r\n            return moment_ext_1.default.utc(this.endMs).stripZone();\r\n        }\r\n        return null;\r\n    };\r\n    UnzonedRange.prototype.as = function (unit) {\r\n        return moment.utc(this.endMs).diff(moment.utc(this.startMs), unit, true);\r\n    };\r\n    return UnzonedRange;\r\n}());\r\nexports.default = UnzonedRange;\r\n/*\r\nOnly works for non-open-ended ranges.\r\n*/\r\nfunction compareUnzonedRanges(range1, range2) {\r\n    return range1.startMs - range2.startMs; // earlier ranges go first\r\n}\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventSource, _super);\r\n    // can we do away with calendar? at least for the abstract?\r\n    // useful for buildEventDef\r\n    function EventSource(calendar) {\r\n        var _this = _super.call(this) || this;\r\n        _this.calendar = calendar;\r\n        _this.className = [];\r\n        _this.uid = String(EventSource.uuid++);\r\n        return _this;\r\n    }\r\n    /*\r\n    rawInput can be any data type!\r\n    */\r\n    EventSource.parse = function (rawInput, calendar) {\r\n        var source = new this(calendar);\r\n        if (typeof rawInput === 'object') {\r\n            if (source.applyProps(rawInput)) {\r\n                return source;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    EventSource.normalizeId = function (id) {\r\n        if (id) {\r\n            return String(id);\r\n        }\r\n        return null;\r\n    };\r\n    EventSource.prototype.fetch = function (start, end, timezone) {\r\n        // subclasses must implement. must return a promise.\r\n    };\r\n    EventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n        // optional for subclasses to implement\r\n    };\r\n    EventSource.prototype.removeAllEventDefs = function () {\r\n        // optional for subclasses to implement\r\n    };\r\n    /*\r\n    For compairing/matching\r\n    */\r\n    EventSource.prototype.getPrimitive = function (otherSource) {\r\n        // subclasses must implement\r\n    };\r\n    EventSource.prototype.parseEventDefs = function (rawEventDefs) {\r\n        var i;\r\n        var eventDef;\r\n        var eventDefs = [];\r\n        for (i = 0; i < rawEventDefs.length; i++) {\r\n            eventDef = this.parseEventDef(rawEventDefs[i]);\r\n            if (eventDef) {\r\n                eventDefs.push(eventDef);\r\n            }\r\n        }\r\n        return eventDefs;\r\n    };\r\n    EventSource.prototype.parseEventDef = function (rawInput) {\r\n        var calendarTransform = this.calendar.opt('eventDataTransform');\r\n        var sourceTransform = this.eventDataTransform;\r\n        if (calendarTransform) {\r\n            rawInput = calendarTransform(rawInput, this.calendar);\r\n        }\r\n        if (sourceTransform) {\r\n            rawInput = sourceTransform(rawInput, this.calendar);\r\n        }\r\n        return EventDefParser_1.default.parse(rawInput, this);\r\n    };\r\n    EventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        if (rawProps.id != null) {\r\n            this.id = EventSource.normalizeId(rawProps.id);\r\n        }\r\n        // TODO: converge with EventDef\r\n        if ($.isArray(rawProps.className)) {\r\n            this.className = rawProps.className;\r\n        }\r\n        else if (typeof rawProps.className === 'string') {\r\n            this.className = rawProps.className.split(/\\s+/);\r\n        }\r\n        return true;\r\n    };\r\n    EventSource.uuid = 0;\r\n    EventSource.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n    EventSource.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n    return EventSource;\r\n}(Class_1.default));\r\nexports.default = EventSource;\r\nParsableModelMixin_1.default.mixInto(EventSource);\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nEventSource.defineStandardProps({\r\n    // manually process...\r\n    id: false,\r\n    className: false,\r\n    // automatically transfer...\r\n    color: true,\r\n    backgroundColor: true,\r\n    borderColor: true,\r\n    textColor: true,\r\n    editable: true,\r\n    startEditable: true,\r\n    durationEditable: true,\r\n    rendering: true,\r\n    overlap: true,\r\n    constraint: true,\r\n    allDayDefault: true,\r\n    eventDataTransform: true\r\n});\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUtility methods for easily listening to events on another object,\r\nand more importantly, easily unlistening from them.\r\n\nUSAGE:\r\n  import { default as ListenerMixin, ListenerInterface } from './ListenerMixin'\r\nin class:\r\n  listenTo: ListenerInterface['listenTo']\r\n  stopListeningTo: ListenerInterface['stopListeningTo']\r\nafter class:\r\n  ListenerMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar guid = 0;\r\nvar ListenerMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListenerMixin, _super);\r\n    function ListenerMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\r\n    The `callback` will be called with the `this` context of the object that .listenTo is being called on.\r\n    Can be called:\r\n      .listenTo(other, eventName, callback)\r\n    OR\r\n      .listenTo(other, {\r\n        eventName1: callback1,\r\n        eventName2: callback2\r\n      })\r\n    */\r\n    ListenerMixin.prototype.listenTo = function (other, arg, callback) {\r\n        if (typeof arg === 'object') { // given dictionary of callbacks\r\n            for (var eventName in arg) {\r\n                if (arg.hasOwnProperty(eventName)) {\r\n                    this.listenTo(other, eventName, arg[eventName]);\r\n                }\r\n            }\r\n        }\r\n        else if (typeof arg === 'string') {\r\n            other.on(arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\r\n            $.proxy(callback, this) // always use `this` context\r\n            // the usually-undesired jQuery guid behavior doesn't matter,\r\n            // because we always unbind via namespace\r\n            );\r\n        }\r\n    };\r\n    /*\r\n    Causes the current object to stop listening to events on the `other` object.\r\n    `eventName` is optional. If omitted, will stop listening to ALL events on `other`.\r\n    */\r\n    ListenerMixin.prototype.stopListeningTo = function (other, eventName) {\r\n        other.off((eventName || '') + '.' + this.getListenerNamespace());\r\n    };\r\n    /*\r\n    Returns a string, unique to this object, to be used for event namespacing\r\n    */\r\n    ListenerMixin.prototype.getListenerNamespace = function () {\r\n        if (this.listenerId == null) {\r\n            this.listenerId = guid++;\r\n        }\r\n        return '_listener' + this.listenerId;\r\n    };\r\n    return ListenerMixin;\r\n}(Mixin_1.default));\r\nexports.default = ListenerMixin;\r\n\n\n/***/ }),\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar SingleEventDef = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SingleEventDef, _super);\r\n    function SingleEventDef() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    Will receive start/end params, but will be ignored.\r\n    */\r\n    SingleEventDef.prototype.buildInstances = function () {\r\n        return [this.buildInstance()];\r\n    };\r\n    SingleEventDef.prototype.buildInstance = function () {\r\n        return new EventInstance_1.default(this, // definition\r\n        this.dateProfile);\r\n    };\r\n    SingleEventDef.prototype.isAllDay = function () {\r\n        return this.dateProfile.isAllDay();\r\n    };\r\n    SingleEventDef.prototype.clone = function () {\r\n        var def = _super.prototype.clone.call(this);\r\n        def.dateProfile = this.dateProfile;\r\n        return def;\r\n    };\r\n    SingleEventDef.prototype.rezone = function () {\r\n        var calendar = this.source.calendar;\r\n        var dateProfile = this.dateProfile;\r\n        this.dateProfile = new EventDateProfile_1.default(calendar.moment(dateProfile.start), dateProfile.end ? calendar.moment(dateProfile.end) : null, calendar);\r\n    };\r\n    /*\r\n    NOTE: if super-method fails, should still attempt to apply\r\n    */\r\n    SingleEventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        var dateProfile = EventDateProfile_1.default.parse(rawProps, this.source); // returns null on failure\r\n        if (dateProfile) {\r\n            this.dateProfile = dateProfile;\r\n            // make sure `date` shows up in the legacy event objects as-is\r\n            if (rawProps.date != null) {\r\n                this.miscProps.date = rawProps.date;\r\n            }\r\n            return superSuccess;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    };\r\n    return SingleEventDef;\r\n}(EventDef_1.default));\r\nexports.default = SingleEventDef;\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nSingleEventDef.defineStandardProps({\r\n    start: false,\r\n    date: false,\r\n    end: false,\r\n    allDay: false\r\n});\r\n\n\n/***/ }),\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\r\nvar ambigTimeOrZoneRegex = /^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\r\nvar newMomentProto = moment.fn; // where we will attach our new methods\r\nexports.newMomentProto = newMomentProto;\r\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\r\nexports.oldMomentProto = oldMomentProto;\r\n// tell momentjs to transfer these properties upon clone\r\nvar momentProperties = moment.momentProperties;\r\nmomentProperties.push('_fullCalendar');\r\nmomentProperties.push('_ambigTime');\r\nmomentProperties.push('_ambigZone');\r\n/*\r\nCall this if you want Moment's original format method to be used\r\n*/\r\nfunction oldMomentFormat(mom, formatStr) {\r\n    return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\r\n}\r\nexports.oldMomentFormat = oldMomentFormat;\r\n// Creating\r\n// -------------------------------------------------------------------------------------------------\r\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\r\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\r\n// it will function as a clone (and retain the zone of the moment). Anything else will\r\n// result in a moment in the local zone.\r\nvar momentExt = function () {\r\n    return makeMoment(arguments);\r\n};\r\nexports.default = momentExt;\r\n// Sames as momentExt, but forces the resulting moment to be in the UTC timezone.\r\nmomentExt.utc = function () {\r\n    var mom = makeMoment(arguments, true);\r\n    // Force it into UTC because makeMoment doesn't guarantee it\r\n    // (if given a pre-existing moment for example)\r\n    if (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\r\n        mom.utc();\r\n    }\r\n    return mom;\r\n};\r\n// Same as momentExt, but when given an ISO8601 string, the timezone offset is preserved.\r\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\r\nmomentExt.parseZone = function () {\r\n    return makeMoment(arguments, true, true);\r\n};\r\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\r\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\r\n// Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\r\n//    parseAsUTC - if there is no zone information, should we parse the input in UTC?\r\n//    parseZone - if there is zone information, should we force the zone of the moment?\r\nfunction makeMoment(args, parseAsUTC, parseZone) {\r\n    if (parseAsUTC === void 0) { parseAsUTC = false; }\r\n    if (parseZone === void 0) { parseZone = false; }\r\n    var input = args[0];\r\n    var isSingleString = args.length === 1 && typeof input === 'string';\r\n    var isAmbigTime;\r\n    var isAmbigZone;\r\n    var ambigMatch;\r\n    var mom;\r\n    if (moment.isMoment(input) || util_1.isNativeDate(input) || input === undefined) {\r\n        mom = moment.apply(null, args);\r\n    }\r\n    else { // \"parsing\" is required\r\n        isAmbigTime = false;\r\n        isAmbigZone = false;\r\n        if (isSingleString) {\r\n            if (ambigDateOfMonthRegex.test(input)) {\r\n                // accept strings like '2014-05', but convert to the first of the month\r\n                input += '-01';\r\n                args = [input]; // for when we pass it on to moment's constructor\r\n                isAmbigTime = true;\r\n                isAmbigZone = true;\r\n            }\r\n            else if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\r\n                isAmbigTime = !ambigMatch[5]; // no time part?\r\n                isAmbigZone = true;\r\n            }\r\n        }\r\n        else if ($.isArray(input)) {\r\n            // arrays have no timezone information, so assume ambiguous zone\r\n            isAmbigZone = true;\r\n        }\r\n        // otherwise, probably a string with a format\r\n        if (parseAsUTC || isAmbigTime) {\r\n            mom = moment.utc.apply(moment, args);\r\n        }\r\n        else {\r\n            mom = moment.apply(null, args);\r\n        }\r\n        if (isAmbigTime) {\r\n            mom._ambigTime = true;\r\n            mom._ambigZone = true; // ambiguous time always means ambiguous zone\r\n        }\r\n        else if (parseZone) { // let's record the inputted zone somehow\r\n            if (isAmbigZone) {\r\n                mom._ambigZone = true;\r\n            }\r\n            else if (isSingleString) {\r\n                mom.utcOffset(input); // if not a valid zone, will assign UTC\r\n            }\r\n        }\r\n    }\r\n    mom._fullCalendar = true; // flag for extended functionality\r\n    return mom;\r\n}\r\n// Week Number\r\n// -------------------------------------------------------------------------------------------------\r\n// Returns the week number, considering the locale's custom week number calcuation\r\n// `weeks` is an alias for `week`\r\nnewMomentProto.week = newMomentProto.weeks = function (input) {\r\n    var weekCalc = this._locale._fullCalendar_weekCalc;\r\n    if (input == null && typeof weekCalc === 'function') { // custom function only works for getter\r\n        return weekCalc(this);\r\n    }\r\n    else if (weekCalc === 'ISO') {\r\n        return oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\r\n    }\r\n    return oldMomentProto.week.apply(this, arguments); // local getter/setter\r\n};\r\n// Time-of-day\r\n// -------------------------------------------------------------------------------------------------\r\n// GETTER\r\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\r\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\r\n//\r\n// SETTER\r\n// You can supply a Duration, a Moment, or a Duration-like argument.\r\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\r\nnewMomentProto.time = function (time) {\r\n    // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\r\n    // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\r\n    if (!this._fullCalendar) {\r\n        return oldMomentProto.time.apply(this, arguments);\r\n    }\r\n    if (time == null) { // getter\r\n        return moment.duration({\r\n            hours: this.hours(),\r\n            minutes: this.minutes(),\r\n            seconds: this.seconds(),\r\n            milliseconds: this.milliseconds()\r\n        });\r\n    }\r\n    else { // setter\r\n        this._ambigTime = false; // mark that the moment now has a time\r\n        if (!moment.isDuration(time) && !moment.isMoment(time)) {\r\n            time = moment.duration(time);\r\n        }\r\n        // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\r\n        // Only for Duration times, not Moment times.\r\n        var dayHours = 0;\r\n        if (moment.isDuration(time)) {\r\n            dayHours = Math.floor(time.asDays()) * 24;\r\n        }\r\n        // We need to set the individual fields.\r\n        // Can't use startOf('day') then add duration. In case of DST at start of day.\r\n        return this.hours(dayHours + time.hours())\r\n            .minutes(time.minutes())\r\n            .seconds(time.seconds())\r\n            .milliseconds(time.milliseconds());\r\n    }\r\n};\r\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\r\n// but preserving its YMD. A moment with a stripped time will display no time\r\n// nor timezone offset when .format() is called.\r\nnewMomentProto.stripTime = function () {\r\n    if (!this._ambigTime) {\r\n        this.utc(true); // keepLocalTime=true (for keeping *date* value)\r\n        // set time to zero\r\n        this.set({\r\n            hours: 0,\r\n            minutes: 0,\r\n            seconds: 0,\r\n            ms: 0\r\n        });\r\n        // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n        // which clears all ambig flags.\r\n        this._ambigTime = true;\r\n        this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\r\n    }\r\n    return this; // for chaining\r\n};\r\n// Returns if the moment has a non-ambiguous time (boolean)\r\nnewMomentProto.hasTime = function () {\r\n    return !this._ambigTime;\r\n};\r\n// Timezone\r\n// -------------------------------------------------------------------------------------------------\r\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\r\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\r\n// timezone offset when .format() is called.\r\nnewMomentProto.stripZone = function () {\r\n    var wasAmbigTime;\r\n    if (!this._ambigZone) {\r\n        wasAmbigTime = this._ambigTime;\r\n        this.utc(true); // keepLocalTime=true (for keeping date and time values)\r\n        // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\r\n        this._ambigTime = wasAmbigTime || false;\r\n        // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n        // which clears the ambig flags.\r\n        this._ambigZone = true;\r\n    }\r\n    return this; // for chaining\r\n};\r\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\r\nnewMomentProto.hasZone = function () {\r\n    return !this._ambigZone;\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.local = function (keepLocalTime) {\r\n    // for when converting from ambiguously-zoned to local,\r\n    // keep the time values when converting from UTC -> local\r\n    oldMomentProto.local.call(this, this._ambigZone || keepLocalTime);\r\n    // ensure non-ambiguous\r\n    // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\r\n    this._ambigTime = false;\r\n    this._ambigZone = false;\r\n    return this; // for chaining\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.utc = function (keepLocalTime) {\r\n    oldMomentProto.utc.call(this, keepLocalTime);\r\n    // ensure non-ambiguous\r\n    // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\r\n    this._ambigTime = false;\r\n    this._ambigZone = false;\r\n    return this;\r\n};\r\n// implicitly marks a zone (will probably get called upon .utc() and .local())\r\nnewMomentProto.utcOffset = function (tzo) {\r\n    if (tzo != null) { // setter\r\n        // these assignments needs to happen before the original zone method is called.\r\n        // I forget why, something to do with a browser crash.\r\n        this._ambigTime = false;\r\n        this._ambigZone = false;\r\n    }\r\n    return oldMomentProto.utcOffset.apply(this, arguments);\r\n};\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar ComponentFootprint = /** @class */ (function () {\r\n    function ComponentFootprint(unzonedRange, isAllDay) {\r\n        this.isAllDay = false; // component can choose to ignore this\r\n        this.unzonedRange = unzonedRange;\r\n        this.isAllDay = isAllDay;\r\n    }\r\n    /*\r\n    Only works for non-open-ended ranges.\r\n    */\r\n    ComponentFootprint.prototype.toLegacy = function (calendar) {\r\n        return {\r\n            start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),\r\n            end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)\r\n        };\r\n    };\r\n    return ComponentFootprint;\r\n}());\r\nexports.default = ComponentFootprint;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n  import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\r\nin class:\r\n  on: EmitterInterface['on']\r\n  one: EmitterInterface['one']\r\n  off: EmitterInterface['off']\r\n  trigger: EmitterInterface['trigger']\r\n  triggerWith: EmitterInterface['triggerWith']\r\n  hasHandlers: EmitterInterface['hasHandlers']\r\nafter class:\r\n  EmitterMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar EmitterMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EmitterMixin, _super);\r\n    function EmitterMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // jQuery-ification via $(this) allows a non-DOM object to have\r\n    // the same event handling capabilities (including namespaces).\r\n    EmitterMixin.prototype.on = function (types, handler) {\r\n        $(this).on(types, this._prepareIntercept(handler));\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.one = function (types, handler) {\r\n        $(this).one(types, this._prepareIntercept(handler));\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype._prepareIntercept = function (handler) {\r\n        // handlers are always called with an \"event\" object as their first param.\r\n        // sneak the `this` context and arguments into the extra parameter object\r\n        // and forward them on to the original handler.\r\n        var intercept = function (ev, extra) {\r\n            return handler.apply(extra.context || this, extra.args || []);\r\n        };\r\n        // mimick jQuery's internal \"proxy\" system (risky, I know)\r\n        // causing all functions with the same .guid to appear to be the same.\r\n        // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\r\n        // this is needed for calling .off with the original non-intercept handler.\r\n        if (!handler.guid) {\r\n            handler.guid = $.guid++;\r\n        }\r\n        intercept.guid = handler.guid;\r\n        return intercept;\r\n    };\r\n    EmitterMixin.prototype.off = function (types, handler) {\r\n        $(this).off(types, handler);\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.trigger = function (types) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        // pass in \"extra\" info to the intercept\r\n        $(this).triggerHandler(types, { args: args });\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.triggerWith = function (types, context, args) {\r\n        // `triggerHandler` is less reliant on the DOM compared to `trigger`.\r\n        // pass in \"extra\" info to the intercept.\r\n        $(this).triggerHandler(types, { context: context, args: args });\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.hasHandlers = function (type) {\r\n        var hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/\r\n        return hash && hash[type] && hash[type].length > 0;\r\n    };\r\n    return EmitterMixin;\r\n}(Mixin_1.default));\r\nexports.default = EmitterMixin;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Interaction = /** @class */ (function () {\r\n    function Interaction(component) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n    }\r\n    Interaction.prototype.opt = function (name) {\r\n        return this.view.opt(name);\r\n    };\r\n    Interaction.prototype.end = function () {\r\n        // subclasses can implement\r\n    };\r\n    return Interaction;\r\n}());\r\nexports.default = Interaction;\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Mixin = /** @class */ (function () {\r\n    function Mixin() {\r\n    }\r\n    Mixin.mixInto = function (destClass) {\r\n        var _this = this;\r\n        Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n            if (!destClass.prototype[name]) { // if destination class doesn't already define it\r\n                destClass.prototype[name] = _this.prototype[name];\r\n            }\r\n        });\r\n    };\r\n    /*\r\n    will override existing methods\r\n    TODO: remove! not used anymore\r\n    */\r\n    Mixin.mixOver = function (destClass) {\r\n        var _this = this;\r\n        Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n            destClass.prototype[name] = _this.prototype[name];\r\n        });\r\n    };\r\n    return Mixin;\r\n}());\r\nexports.default = Mixin;\r\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar EventDateProfile = /** @class */ (function () {\r\n    function EventDateProfile(start, end, calendar) {\r\n        this.start = start;\r\n        this.end = end || null;\r\n        this.unzonedRange = this.buildUnzonedRange(calendar);\r\n    }\r\n    /*\r\n    Needs an EventSource object\r\n    */\r\n    EventDateProfile.parse = function (rawProps, source) {\r\n        var startInput = rawProps.start || rawProps.date;\r\n        var endInput = rawProps.end;\r\n        if (!startInput) {\r\n            return false;\r\n        }\r\n        var calendar = source.calendar;\r\n        var start = calendar.moment(startInput);\r\n        var end = endInput ? calendar.moment(endInput) : null;\r\n        var forcedAllDay = rawProps.allDay;\r\n        var forceEventDuration = calendar.opt('forceEventDuration');\r\n        if (!start.isValid()) {\r\n            return false;\r\n        }\r\n        if (forcedAllDay == null) {\r\n            forcedAllDay = source.allDayDefault;\r\n            if (forcedAllDay == null) {\r\n                forcedAllDay = calendar.opt('allDayDefault');\r\n            }\r\n        }\r\n        if (forcedAllDay === true) {\r\n            start.stripTime();\r\n            if (end) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        else if (forcedAllDay === false) {\r\n            if (!start.hasTime()) {\r\n                start.time(0);\r\n            }\r\n            if (end && !end.hasTime()) {\r\n                end.time(0);\r\n            }\r\n        }\r\n        if (end && (!end.isValid() || !end.isAfter(start))) {\r\n            end = null;\r\n        }\r\n        if (!end && forceEventDuration) {\r\n            end = calendar.getDefaultEventEnd(!start.hasTime(), start);\r\n        }\r\n        return new EventDateProfile(start, end, calendar);\r\n    };\r\n    EventDateProfile.isStandardProp = function (propName) {\r\n        return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay';\r\n    };\r\n    EventDateProfile.prototype.isAllDay = function () {\r\n        return !(this.start.hasTime() || (this.end && this.end.hasTime()));\r\n    };\r\n    /*\r\n    Needs a Calendar object\r\n    */\r\n    EventDateProfile.prototype.buildUnzonedRange = function (calendar) {\r\n        var startMs = this.start.clone().stripZone().valueOf();\r\n        var endMs = this.getEnd(calendar).stripZone().valueOf();\r\n        return new UnzonedRange_1.default(startMs, endMs);\r\n    };\r\n    /*\r\n    Needs a Calendar object\r\n    */\r\n    EventDateProfile.prototype.getEnd = function (calendar) {\r\n        return this.end ?\r\n            this.end.clone() :\r\n            // derive the end from the start and allDay. compute allDay if necessary\r\n            calendar.getDefaultEventEnd(this.isAllDay(), this.start);\r\n    };\r\n    return EventDateProfile;\r\n}());\r\nexports.default = EventDateProfile;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar DragListener_1 = __webpack_require__(59);\r\n/* Tracks mouse movements over a component and raises events about which hit the mouse is over.\r\n------------------------------------------------------------------------------------------------------------------------\r\noptions:\r\n- subjectEl\r\n- subjectCenter\r\n*/\r\nvar HitDragListener = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HitDragListener, _super);\r\n    function HitDragListener(component, options) {\r\n        var _this = _super.call(this, options) || this;\r\n        _this.component = component;\r\n        return _this;\r\n    }\r\n    // Called when drag listening starts (but a real drag has not necessarily began).\r\n    // ev might be undefined if dragging was started manually.\r\n    HitDragListener.prototype.handleInteractionStart = function (ev) {\r\n        var subjectEl = this.subjectEl;\r\n        var subjectRect;\r\n        var origPoint;\r\n        var point;\r\n        this.component.hitsNeeded();\r\n        this.computeScrollBounds(); // for autoscroll\r\n        if (ev) {\r\n            origPoint = { left: util_1.getEvX(ev), top: util_1.getEvY(ev) };\r\n            point = origPoint;\r\n            // constrain the point to bounds of the element being dragged\r\n            if (subjectEl) {\r\n                subjectRect = util_1.getOuterRect(subjectEl); // used for centering as well\r\n                point = util_1.constrainPoint(point, subjectRect);\r\n            }\r\n            this.origHit = this.queryHit(point.left, point.top);\r\n            // treat the center of the subject as the collision point?\r\n            if (subjectEl && this.options.subjectCenter) {\r\n                // only consider the area the subject overlaps the hit. best for large subjects.\r\n                // TODO: skip this if hit didn't supply left/right/top/bottom\r\n                if (this.origHit) {\r\n                    subjectRect = util_1.intersectRects(this.origHit, subjectRect) ||\r\n                        subjectRect; // in case there is no intersection\r\n                }\r\n                point = util_1.getRectCenter(subjectRect);\r\n            }\r\n            this.coordAdjust = util_1.diffPoints(point, origPoint); // point - origPoint\r\n        }\r\n        else {\r\n            this.origHit = null;\r\n            this.coordAdjust = null;\r\n        }\r\n        // call the super-method. do it after origHit has been computed\r\n        _super.prototype.handleInteractionStart.call(this, ev);\r\n    };\r\n    // Called when the actual drag has started\r\n    HitDragListener.prototype.handleDragStart = function (ev) {\r\n        var hit;\r\n        _super.prototype.handleDragStart.call(this, ev);\r\n        // might be different from this.origHit if the min-distance is large\r\n        hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n        // report the initial hit the mouse is over\r\n        // especially important if no min-distance and drag starts immediately\r\n        if (hit) {\r\n            this.handleHitOver(hit);\r\n        }\r\n    };\r\n    // Called when the drag moves\r\n    HitDragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n        var hit;\r\n        _super.prototype.handleDrag.call(this, dx, dy, ev);\r\n        hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n        if (!isHitsEqual(hit, this.hit)) { // a different hit than before?\r\n            if (this.hit) {\r\n                this.handleHitOut();\r\n            }\r\n            if (hit) {\r\n                this.handleHitOver(hit);\r\n            }\r\n        }\r\n    };\r\n    // Called when dragging has been stopped\r\n    HitDragListener.prototype.handleDragEnd = function (ev) {\r\n        this.handleHitDone();\r\n        _super.prototype.handleDragEnd.call(this, ev);\r\n    };\r\n    // Called when a the mouse has just moved over a new hit\r\n    HitDragListener.prototype.handleHitOver = function (hit) {\r\n        var isOrig = isHitsEqual(hit, this.origHit);\r\n        this.hit = hit;\r\n        this.trigger('hitOver', this.hit, isOrig, this.origHit);\r\n    };\r\n    // Called when the mouse has just moved out of a hit\r\n    HitDragListener.prototype.handleHitOut = function () {\r\n        if (this.hit) {\r\n            this.trigger('hitOut', this.hit);\r\n            this.handleHitDone();\r\n            this.hit = null;\r\n        }\r\n    };\r\n    // Called after a hitOut. Also called before a dragStop\r\n    HitDragListener.prototype.handleHitDone = function () {\r\n        if (this.hit) {\r\n            this.trigger('hitDone', this.hit);\r\n        }\r\n    };\r\n    // Called when the interaction ends, whether there was a real drag or not\r\n    HitDragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n        _super.prototype.handleInteractionEnd.call(this, ev, isCancelled);\r\n        this.origHit = null;\r\n        this.hit = null;\r\n        this.component.hitsNotNeeded();\r\n    };\r\n    // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n    HitDragListener.prototype.handleScrollEnd = function () {\r\n        _super.prototype.handleScrollEnd.call(this);\r\n        // hits' absolute positions will be in new places after a user's scroll.\r\n        // HACK for recomputing.\r\n        if (this.isDragging) {\r\n            this.component.releaseHits();\r\n            this.component.prepareHits();\r\n        }\r\n    };\r\n    // Gets the hit underneath the coordinates for the given mouse event\r\n    HitDragListener.prototype.queryHit = function (left, top) {\r\n        if (this.coordAdjust) {\r\n            left += this.coordAdjust.left;\r\n            top += this.coordAdjust.top;\r\n        }\r\n        return this.component.queryHit(left, top);\r\n    };\r\n    return HitDragListener;\r\n}(DragListener_1.default));\r\nexports.default = HitDragListener;\r\n// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\r\n// Two null values will be considered equal, as two \"out of the component\" states are the same.\r\nfunction isHitsEqual(hit0, hit1) {\r\n    if (!hit0 && !hit1) {\r\n        return true;\r\n    }\r\n    if (hit0 && hit1) {\r\n        return hit0.component === hit1.component &&\r\n            isHitPropsWithin(hit0, hit1) &&\r\n            isHitPropsWithin(hit1, hit0); // ensures all props are identical\r\n    }\r\n    return false;\r\n}\r\n// Returns true if all of subHit's non-standard properties are within superHit\r\nfunction isHitPropsWithin(subHit, superHit) {\r\n    for (var propName in subHit) {\r\n        if (!/^(component|left|right|top|bottom)$/.test(propName)) {\r\n            if (subHit[propName] !== superHit[propName]) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.version = '3.10.2';\r\n// When introducing internal API incompatibilities (where fullcalendar plugins would break),\r\n// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\r\n// and the below integer should be incremented.\r\nexports.internalApiVersion = 12;\r\nvar util_1 = __webpack_require__(4);\r\nexports.applyAll = util_1.applyAll;\r\nexports.debounce = util_1.debounce;\r\nexports.isInt = util_1.isInt;\r\nexports.htmlEscape = util_1.htmlEscape;\r\nexports.cssToStr = util_1.cssToStr;\r\nexports.proxy = util_1.proxy;\r\nexports.capitaliseFirstLetter = util_1.capitaliseFirstLetter;\r\nexports.getOuterRect = util_1.getOuterRect;\r\nexports.getClientRect = util_1.getClientRect;\r\nexports.getContentRect = util_1.getContentRect;\r\nexports.getScrollbarWidths = util_1.getScrollbarWidths;\r\nexports.preventDefault = util_1.preventDefault;\r\nexports.parseFieldSpecs = util_1.parseFieldSpecs;\r\nexports.compareByFieldSpecs = util_1.compareByFieldSpecs;\r\nexports.compareByFieldSpec = util_1.compareByFieldSpec;\r\nexports.flexibleCompare = util_1.flexibleCompare;\r\nexports.computeGreatestUnit = util_1.computeGreatestUnit;\r\nexports.divideRangeByDuration = util_1.divideRangeByDuration;\r\nexports.divideDurationByDuration = util_1.divideDurationByDuration;\r\nexports.multiplyDuration = util_1.multiplyDuration;\r\nexports.durationHasTime = util_1.durationHasTime;\r\nexports.log = util_1.log;\r\nexports.warn = util_1.warn;\r\nexports.removeExact = util_1.removeExact;\r\nexports.intersectRects = util_1.intersectRects;\r\nexports.allowSelection = util_1.allowSelection;\r\nexports.attrsToStr = util_1.attrsToStr;\r\nexports.compareNumbers = util_1.compareNumbers;\r\nexports.compensateScroll = util_1.compensateScroll;\r\nexports.computeDurationGreatestUnit = util_1.computeDurationGreatestUnit;\r\nexports.constrainPoint = util_1.constrainPoint;\r\nexports.copyOwnProps = util_1.copyOwnProps;\r\nexports.diffByUnit = util_1.diffByUnit;\r\nexports.diffDay = util_1.diffDay;\r\nexports.diffDayTime = util_1.diffDayTime;\r\nexports.diffPoints = util_1.diffPoints;\r\nexports.disableCursor = util_1.disableCursor;\r\nexports.distributeHeight = util_1.distributeHeight;\r\nexports.enableCursor = util_1.enableCursor;\r\nexports.firstDefined = util_1.firstDefined;\r\nexports.getEvIsTouch = util_1.getEvIsTouch;\r\nexports.getEvX = util_1.getEvX;\r\nexports.getEvY = util_1.getEvY;\r\nexports.getRectCenter = util_1.getRectCenter;\r\nexports.getScrollParent = util_1.getScrollParent;\r\nexports.hasOwnProp = util_1.hasOwnProp;\r\nexports.isArraysEqual = util_1.isArraysEqual;\r\nexports.isNativeDate = util_1.isNativeDate;\r\nexports.isPrimaryMouseButton = util_1.isPrimaryMouseButton;\r\nexports.isTimeString = util_1.isTimeString;\r\nexports.matchCellWidths = util_1.matchCellWidths;\r\nexports.mergeProps = util_1.mergeProps;\r\nexports.preventSelection = util_1.preventSelection;\r\nexports.removeMatching = util_1.removeMatching;\r\nexports.stripHtmlEntities = util_1.stripHtmlEntities;\r\nexports.subtractInnerElHeight = util_1.subtractInnerElHeight;\r\nexports.uncompensateScroll = util_1.uncompensateScroll;\r\nexports.undistributeHeight = util_1.undistributeHeight;\r\nexports.dayIDs = util_1.dayIDs;\r\nexports.unitsDesc = util_1.unitsDesc;\r\nvar date_formatting_1 = __webpack_require__(49);\r\nexports.formatDate = date_formatting_1.formatDate;\r\nexports.formatRange = date_formatting_1.formatRange;\r\nexports.queryMostGranularFormatUnit = date_formatting_1.queryMostGranularFormatUnit;\r\nvar locale_1 = __webpack_require__(32);\r\nexports.datepickerLocale = locale_1.datepickerLocale;\r\nexports.locale = locale_1.locale;\r\nexports.getMomentLocaleData = locale_1.getMomentLocaleData;\r\nexports.populateInstanceComputableOptions = locale_1.populateInstanceComputableOptions;\r\nvar util_2 = __webpack_require__(19);\r\nexports.eventDefsToEventInstances = util_2.eventDefsToEventInstances;\r\nexports.eventFootprintToComponentFootprint = util_2.eventFootprintToComponentFootprint;\r\nexports.eventInstanceToEventRange = util_2.eventInstanceToEventRange;\r\nexports.eventInstanceToUnzonedRange = util_2.eventInstanceToUnzonedRange;\r\nexports.eventRangeToEventFootprint = util_2.eventRangeToEventFootprint;\r\nvar moment_ext_1 = __webpack_require__(11);\r\nexports.moment = moment_ext_1.default;\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nexports.EmitterMixin = EmitterMixin_1.default;\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexports.ListenerMixin = ListenerMixin_1.default;\r\nvar Model_1 = __webpack_require__(51);\r\nexports.Model = Model_1.default;\r\nvar Constraints_1 = __webpack_require__(217);\r\nexports.Constraints = Constraints_1.default;\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nexports.DateProfileGenerator = DateProfileGenerator_1.default;\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nexports.UnzonedRange = UnzonedRange_1.default;\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nexports.ComponentFootprint = ComponentFootprint_1.default;\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nexports.BusinessHourGenerator = BusinessHourGenerator_1.default;\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nexports.EventPeriod = EventPeriod_1.default;\r\nvar EventManager_1 = __webpack_require__(220);\r\nexports.EventManager = EventManager_1.default;\r\nvar EventDef_1 = __webpack_require__(37);\r\nexports.EventDef = EventDef_1.default;\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nexports.EventDefMutation = EventDefMutation_1.default;\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nexports.EventDefParser = EventDefParser_1.default;\r\nvar EventInstance_1 = __webpack_require__(53);\r\nexports.EventInstance = EventInstance_1.default;\r\nvar EventRange_1 = __webpack_require__(50);\r\nexports.EventRange = EventRange_1.default;\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.RecurringEventDef = RecurringEventDef_1.default;\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nexports.SingleEventDef = SingleEventDef_1.default;\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nexports.EventDefDateMutation = EventDefDateMutation_1.default;\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nexports.EventDateProfile = EventDateProfile_1.default;\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nexports.EventSourceParser = EventSourceParser_1.default;\r\nvar EventSource_1 = __webpack_require__(6);\r\nexports.EventSource = EventSource_1.default;\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nexports.defineThemeSystem = ThemeRegistry_1.defineThemeSystem;\r\nexports.getThemeSystemClass = ThemeRegistry_1.getThemeSystemClass;\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nexports.EventInstanceGroup = EventInstanceGroup_1.default;\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nexports.ArrayEventSource = ArrayEventSource_1.default;\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nexports.FuncEventSource = FuncEventSource_1.default;\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nexports.JsonFeedEventSource = JsonFeedEventSource_1.default;\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nexports.EventFootprint = EventFootprint_1.default;\r\nvar Class_1 = __webpack_require__(35);\r\nexports.Class = Class_1.default;\r\nvar Mixin_1 = __webpack_require__(15);\r\nexports.Mixin = Mixin_1.default;\r\nvar CoordCache_1 = __webpack_require__(58);\r\nexports.CoordCache = CoordCache_1.default;\r\nvar Iterator_1 = __webpack_require__(225);\r\nexports.Iterator = Iterator_1.default;\r\nvar DragListener_1 = __webpack_require__(59);\r\nexports.DragListener = DragListener_1.default;\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nexports.HitDragListener = HitDragListener_1.default;\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nexports.MouseFollower = MouseFollower_1.default;\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nexports.ParsableModelMixin = ParsableModelMixin_1.default;\r\nvar Popover_1 = __webpack_require__(227);\r\nexports.Popover = Popover_1.default;\r\nvar Promise_1 = __webpack_require__(21);\r\nexports.Promise = Promise_1.default;\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nexports.TaskQueue = TaskQueue_1.default;\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nexports.RenderQueue = RenderQueue_1.default;\r\nvar Scroller_1 = __webpack_require__(41);\r\nexports.Scroller = Scroller_1.default;\r\nvar Theme_1 = __webpack_require__(22);\r\nexports.Theme = Theme_1.default;\r\nvar Component_1 = __webpack_require__(230);\r\nexports.Component = Component_1.default;\r\nvar DateComponent_1 = __webpack_require__(231);\r\nexports.DateComponent = DateComponent_1.default;\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nexports.InteractiveDateComponent = InteractiveDateComponent_1.default;\r\nvar Calendar_1 = __webpack_require__(232);\r\nexports.Calendar = Calendar_1.default;\r\nvar View_1 = __webpack_require__(43);\r\nexports.View = View_1.default;\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nexports.defineView = ViewRegistry_1.defineView;\r\nexports.getViewConfig = ViewRegistry_1.getViewConfig;\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nexports.DayTableMixin = DayTableMixin_1.default;\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nexports.BusinessHourRenderer = BusinessHourRenderer_1.default;\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nexports.EventRenderer = EventRenderer_1.default;\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nexports.FillRenderer = FillRenderer_1.default;\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nexports.HelperRenderer = HelperRenderer_1.default;\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nexports.ExternalDropping = ExternalDropping_1.default;\r\nvar EventResizing_1 = __webpack_require__(234);\r\nexports.EventResizing = EventResizing_1.default;\r\nvar EventPointing_1 = __webpack_require__(64);\r\nexports.EventPointing = EventPointing_1.default;\r\nvar EventDragging_1 = __webpack_require__(235);\r\nexports.EventDragging = EventDragging_1.default;\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nexports.DateSelecting = DateSelecting_1.default;\r\nvar DateClicking_1 = __webpack_require__(237);\r\nexports.DateClicking = DateClicking_1.default;\r\nvar Interaction_1 = __webpack_require__(14);\r\nexports.Interaction = Interaction_1.default;\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nexports.StandardInteractionsMixin = StandardInteractionsMixin_1.default;\r\nvar AgendaView_1 = __webpack_require__(238);\r\nexports.AgendaView = AgendaView_1.default;\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nexports.TimeGrid = TimeGrid_1.default;\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nexports.TimeGridEventRenderer = TimeGridEventRenderer_1.default;\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\nexports.TimeGridFillRenderer = TimeGridFillRenderer_1.default;\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nexports.TimeGridHelperRenderer = TimeGridHelperRenderer_1.default;\r\nvar DayGrid_1 = __webpack_require__(66);\r\nexports.DayGrid = DayGrid_1.default;\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nexports.DayGridEventRenderer = DayGridEventRenderer_1.default;\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\nexports.DayGridFillRenderer = DayGridFillRenderer_1.default;\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nexports.DayGridHelperRenderer = DayGridHelperRenderer_1.default;\r\nvar BasicView_1 = __webpack_require__(67);\r\nexports.BasicView = BasicView_1.default;\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nexports.BasicViewDateProfileGenerator = BasicViewDateProfileGenerator_1.default;\r\nvar MonthView_1 = __webpack_require__(246);\r\nexports.MonthView = MonthView_1.default;\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\nexports.MonthViewDateProfileGenerator = MonthViewDateProfileGenerator_1.default;\r\nvar ListView_1 = __webpack_require__(248);\r\nexports.ListView = ListView_1.default;\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\nexports.ListEventPointing = ListEventPointing_1.default;\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nexports.ListEventRenderer = ListEventRenderer_1.default;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange_1 = __webpack_require__(50);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nfunction eventDefsToEventInstances(eventDefs, unzonedRange) {\r\n    var eventInstances = [];\r\n    var i;\r\n    for (i = 0; i < eventDefs.length; i++) {\r\n        eventInstances.push.apply(eventInstances, // append\r\n        eventDefs[i].buildInstances(unzonedRange));\r\n    }\r\n    return eventInstances;\r\n}\r\nexports.eventDefsToEventInstances = eventDefsToEventInstances;\r\nfunction eventInstanceToEventRange(eventInstance) {\r\n    return new EventRange_1.default(eventInstance.dateProfile.unzonedRange, eventInstance.def, eventInstance);\r\n}\r\nexports.eventInstanceToEventRange = eventInstanceToEventRange;\r\nfunction eventRangeToEventFootprint(eventRange) {\r\n    return new EventFootprint_1.default(new ComponentFootprint_1.default(eventRange.unzonedRange, eventRange.eventDef.isAllDay()), eventRange.eventDef, eventRange.eventInstance // might not exist\r\n    );\r\n}\r\nexports.eventRangeToEventFootprint = eventRangeToEventFootprint;\r\nfunction eventInstanceToUnzonedRange(eventInstance) {\r\n    return eventInstance.dateProfile.unzonedRange;\r\n}\r\nexports.eventInstanceToUnzonedRange = eventInstanceToUnzonedRange;\r\nfunction eventFootprintToComponentFootprint(eventFootprint) {\r\n    return eventFootprint.componentFootprint;\r\n}\r\nexports.eventFootprintToComponentFootprint = eventFootprintToComponentFootprint;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventRange_1 = __webpack_require__(50);\r\n/*\r\nIt's expected that there will be at least one EventInstance,\r\nOR that an explicitEventDef is assigned.\r\n*/\r\nvar EventInstanceGroup = /** @class */ (function () {\r\n    function EventInstanceGroup(eventInstances) {\r\n        this.eventInstances = eventInstances || [];\r\n    }\r\n    EventInstanceGroup.prototype.getAllEventRanges = function (constraintRange) {\r\n        if (constraintRange) {\r\n            return this.sliceNormalRenderRanges(constraintRange);\r\n        }\r\n        else {\r\n            return this.eventInstances.map(util_1.eventInstanceToEventRange);\r\n        }\r\n    };\r\n    EventInstanceGroup.prototype.sliceRenderRanges = function (constraintRange) {\r\n        if (this.isInverse()) {\r\n            return this.sliceInverseRenderRanges(constraintRange);\r\n        }\r\n        else {\r\n            return this.sliceNormalRenderRanges(constraintRange);\r\n        }\r\n    };\r\n    EventInstanceGroup.prototype.sliceNormalRenderRanges = function (constraintRange) {\r\n        var eventInstances = this.eventInstances;\r\n        var i;\r\n        var eventInstance;\r\n        var slicedRange;\r\n        var slicedEventRanges = [];\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            eventInstance = eventInstances[i];\r\n            slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);\r\n            if (slicedRange) {\r\n                slicedEventRanges.push(new EventRange_1.default(slicedRange, eventInstance.def, eventInstance));\r\n            }\r\n        }\r\n        return slicedEventRanges;\r\n    };\r\n    EventInstanceGroup.prototype.sliceInverseRenderRanges = function (constraintRange) {\r\n        var unzonedRanges = this.eventInstances.map(util_1.eventInstanceToUnzonedRange);\r\n        var ownerDef = this.getEventDef();\r\n        unzonedRanges = UnzonedRange_1.default.invertRanges(unzonedRanges, constraintRange);\r\n        return unzonedRanges.map(function (unzonedRange) {\r\n            return new EventRange_1.default(unzonedRange, ownerDef); // don't give an EventInstance\r\n        });\r\n    };\r\n    EventInstanceGroup.prototype.isInverse = function () {\r\n        return this.getEventDef().hasInverseRendering();\r\n    };\r\n    EventInstanceGroup.prototype.getEventDef = function () {\r\n        return this.explicitEventDef || this.eventInstances[0].def;\r\n    };\r\n    return EventInstanceGroup;\r\n}());\r\nexports.default = EventInstanceGroup;\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar PromiseStub = {\r\n    construct: function (executor) {\r\n        var deferred = $.Deferred();\r\n        var promise = deferred.promise();\r\n        if (typeof executor === 'function') {\r\n            executor(function (val) {\r\n                deferred.resolve(val);\r\n                attachImmediatelyResolvingThen(promise, val);\r\n            }, function () {\r\n                deferred.reject();\r\n                attachImmediatelyRejectingThen(promise);\r\n            });\r\n        }\r\n        return promise;\r\n    },\r\n    resolve: function (val) {\r\n        var deferred = $.Deferred().resolve(val);\r\n        var promise = deferred.promise();\r\n        attachImmediatelyResolvingThen(promise, val);\r\n        return promise;\r\n    },\r\n    reject: function () {\r\n        var deferred = $.Deferred().reject();\r\n        var promise = deferred.promise();\r\n        attachImmediatelyRejectingThen(promise);\r\n        return promise;\r\n    }\r\n};\r\nexports.default = PromiseStub;\r\nfunction attachImmediatelyResolvingThen(promise, val) {\r\n    promise.then = function (onResolve) {\r\n        if (typeof onResolve === 'function') {\r\n            return PromiseStub.resolve(onResolve(val));\r\n        }\r\n        return promise;\r\n    };\r\n}\r\nfunction attachImmediatelyRejectingThen(promise) {\r\n    promise.then = function (onResolve, onReject) {\r\n        if (typeof onReject === 'function') {\r\n            onReject();\r\n        }\r\n        return promise;\r\n    };\r\n}\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar Theme = /** @class */ (function () {\r\n    function Theme(optionsManager) {\r\n        this.optionsManager = optionsManager;\r\n        this.processIconOverride();\r\n    }\r\n    Theme.prototype.processIconOverride = function () {\r\n        if (this.iconOverrideOption) {\r\n            this.setIconOverride(this.optionsManager.get(this.iconOverrideOption));\r\n        }\r\n    };\r\n    Theme.prototype.setIconOverride = function (iconOverrideHash) {\r\n        var iconClassesCopy;\r\n        var buttonName;\r\n        if ($.isPlainObject(iconOverrideHash)) {\r\n            iconClassesCopy = $.extend({}, this.iconClasses);\r\n            for (buttonName in iconOverrideHash) {\r\n                iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\r\n            }\r\n            this.iconClasses = iconClassesCopy;\r\n        }\r\n        else if (iconOverrideHash === false) {\r\n            this.iconClasses = {};\r\n        }\r\n    };\r\n    Theme.prototype.applyIconOverridePrefix = function (className) {\r\n        var prefix = this.iconOverridePrefix;\r\n        if (prefix && className.indexOf(prefix) !== 0) { // if not already present\r\n            className = prefix + className;\r\n        }\r\n        return className;\r\n    };\r\n    Theme.prototype.getClass = function (key) {\r\n        return this.classes[key] || '';\r\n    };\r\n    Theme.prototype.getIconClass = function (buttonName) {\r\n        var className = this.iconClasses[buttonName];\r\n        if (className) {\r\n            return this.baseIconClass + ' ' + className;\r\n        }\r\n        return '';\r\n    };\r\n    Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\r\n        var className;\r\n        if (this.iconOverrideCustomButtonOption) {\r\n            className = customButtonProps[this.iconOverrideCustomButtonOption];\r\n            if (className) {\r\n                return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\r\n            }\r\n        }\r\n        return '';\r\n    };\r\n    return Theme;\r\n}());\r\nexports.default = Theme;\r\nTheme.prototype.classes = {};\r\nTheme.prototype.iconClasses = {};\r\nTheme.prototype.baseIconClass = '';\r\nTheme.prototype.iconOverridePrefix = '';\r\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexportHooks.touchMouseIgnoreWait = 500;\r\nvar globalEmitter = null;\r\nvar neededCount = 0;\r\n/*\r\nListens to document and window-level user-interaction events, like touch events and mouse events,\r\nand fires these events as-is to whoever is observing a GlobalEmitter.\r\nBest when used as a singleton via GlobalEmitter.get()\r\n\nNormalizes mouse/touch events. For examples:\r\n- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\r\n- compensates for various buggy scenarios where a touchend does not fire\r\n*/\r\nvar GlobalEmitter = /** @class */ (function () {\r\n    function GlobalEmitter() {\r\n        this.isTouching = false;\r\n        this.mouseIgnoreDepth = 0;\r\n    }\r\n    // gets the singleton\r\n    GlobalEmitter.get = function () {\r\n        if (!globalEmitter) {\r\n            globalEmitter = new GlobalEmitter();\r\n            globalEmitter.bind();\r\n        }\r\n        return globalEmitter;\r\n    };\r\n    // called when an object knows it will need a GlobalEmitter in the near future.\r\n    GlobalEmitter.needed = function () {\r\n        GlobalEmitter.get(); // ensures globalEmitter\r\n        neededCount++;\r\n    };\r\n    // called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\r\n    GlobalEmitter.unneeded = function () {\r\n        neededCount--;\r\n        if (!neededCount) { // nobody else needs it\r\n            globalEmitter.unbind();\r\n            globalEmitter = null;\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.bind = function () {\r\n        var _this = this;\r\n        this.listenTo($(document), {\r\n            touchstart: this.handleTouchStart,\r\n            touchcancel: this.handleTouchCancel,\r\n            touchend: this.handleTouchEnd,\r\n            mousedown: this.handleMouseDown,\r\n            mousemove: this.handleMouseMove,\r\n            mouseup: this.handleMouseUp,\r\n            click: this.handleClick,\r\n            selectstart: this.handleSelectStart,\r\n            contextmenu: this.handleContextMenu\r\n        });\r\n        // because we need to call preventDefault\r\n        // because https://www.chromestatus.com/features/5093566007214080\r\n        // TODO: investigate performance because this is a global handler\r\n        window.addEventListener('touchmove', this.handleTouchMoveProxy = function (ev) {\r\n            _this.handleTouchMove($.Event(ev));\r\n        }, { passive: false } // allows preventDefault()\r\n        );\r\n        // attach a handler to get called when ANY scroll action happens on the page.\r\n        // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\r\n        // http://stackoverflow.com/a/32954565/96342\r\n        window.addEventListener('scroll', this.handleScrollProxy = function (ev) {\r\n            _this.handleScroll($.Event(ev));\r\n        }, true // useCapture\r\n        );\r\n    };\r\n    GlobalEmitter.prototype.unbind = function () {\r\n        this.stopListeningTo($(document));\r\n        window.removeEventListener('touchmove', this.handleTouchMoveProxy, { passive: false } // use same options as addEventListener\r\n        );\r\n        window.removeEventListener('scroll', this.handleScrollProxy, true // useCapture\r\n        );\r\n    };\r\n    // Touch Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleTouchStart = function (ev) {\r\n        // if a previous touch interaction never ended with a touchend, then implicitly end it,\r\n        // but since a new touch interaction is about to begin, don't start the mouse ignore period.\r\n        this.stopTouch(ev, true); // skipMouseIgnore=true\r\n        this.isTouching = true;\r\n        this.trigger('touchstart', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleTouchMove = function (ev) {\r\n        if (this.isTouching) {\r\n            this.trigger('touchmove', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleTouchCancel = function (ev) {\r\n        if (this.isTouching) {\r\n            this.trigger('touchcancel', ev);\r\n            // Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\r\n            // If touchend fires later, it won't have any effect b/c isTouching will be false.\r\n            this.stopTouch(ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleTouchEnd = function (ev) {\r\n        this.stopTouch(ev);\r\n    };\r\n    // Mouse Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleMouseDown = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mousedown', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleMouseMove = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mousemove', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleMouseUp = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mouseup', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleClick = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('click', ev);\r\n        }\r\n    };\r\n    // Misc Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleSelectStart = function (ev) {\r\n        this.trigger('selectstart', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleContextMenu = function (ev) {\r\n        this.trigger('contextmenu', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleScroll = function (ev) {\r\n        this.trigger('scroll', ev);\r\n    };\r\n    // Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.stopTouch = function (ev, skipMouseIgnore) {\r\n        if (skipMouseIgnore === void 0) { skipMouseIgnore = false; }\r\n        if (this.isTouching) {\r\n            this.isTouching = false;\r\n            this.trigger('touchend', ev);\r\n            if (!skipMouseIgnore) {\r\n                this.startTouchMouseIgnore();\r\n            }\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.startTouchMouseIgnore = function () {\r\n        var _this = this;\r\n        var wait = exportHooks.touchMouseIgnoreWait;\r\n        if (wait) {\r\n            this.mouseIgnoreDepth++;\r\n            setTimeout(function () {\r\n                _this.mouseIgnoreDepth--;\r\n            }, wait);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.shouldIgnoreMouse = function () {\r\n        return this.isTouching || Boolean(this.mouseIgnoreDepth);\r\n    };\r\n    return GlobalEmitter;\r\n}());\r\nexports.default = GlobalEmitter;\r\nListenerMixin_1.default.mixInto(GlobalEmitter);\r\nEmitterMixin_1.default.mixInto(GlobalEmitter);\r\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar exportHooks = __webpack_require__(18);\r\nexports.viewHash = {};\r\nexportHooks.views = exports.viewHash;\r\nfunction defineView(viewName, viewConfig) {\r\n    exports.viewHash[viewName] = viewConfig;\r\n}\r\nexports.defineView = defineView;\r\nfunction getViewConfig(viewName) {\r\n    return exports.viewHash[viewName];\r\n}\r\nexports.getViewConfig = getViewConfig;\r\n\n\n/***/ }),\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar options_1 = __webpack_require__(33);\r\nvar util_1 = __webpack_require__(4);\r\nexports.localeOptionHash = {};\r\nexportHooks.locales = exports.localeOptionHash;\r\n// NOTE: can't guarantee any of these computations will run because not every locale has datepicker\r\n// configs, so make sure there are English fallbacks for these in the defaults file.\r\nvar dpComputableOptions = {\r\n    buttonText: function (dpOptions) {\r\n        return {\r\n            // the translations sometimes wrongly contain HTML entities\r\n            prev: util_1.stripHtmlEntities(dpOptions.prevText),\r\n            next: util_1.stripHtmlEntities(dpOptions.nextText),\r\n            today: util_1.stripHtmlEntities(dpOptions.currentText)\r\n        };\r\n    },\r\n    // Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\r\n    monthYearFormat: function (dpOptions) {\r\n        return dpOptions.showMonthAfterYear ?\r\n            'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\r\n            'MMMM YYYY[' + dpOptions.yearSuffix + ']';\r\n    }\r\n};\r\nvar momComputableOptions = {\r\n    // Produces format strings like \"ddd M/D\" -> \"Fri 9/15\"\r\n    dayOfMonthFormat: function (momOptions, fcOptions) {\r\n        var format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\r\n        // strip the year off the edge, as well as other misc non-whitespace chars\r\n        format = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\r\n        if (fcOptions.isRTL) {\r\n            format += ' ddd'; // for RTL, add day-of-week to end\r\n        }\r\n        else {\r\n            format = 'ddd ' + format; // for LTR, add day-of-week to beginning\r\n        }\r\n        return format;\r\n    },\r\n    // Produces format strings like \"h:mma\" -> \"6:00pm\"\r\n    mediumTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h(:mm)a\" -> \"6pm\" / \"6:30pm\"\r\n    smallTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '(:mm)')\r\n            .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h(:mm)t\" -> \"6p\" / \"6:30p\"\r\n    extraSmallTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '(:mm)')\r\n            .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"ha\" / \"H\" -> \"6pm\" / \"18\"\r\n    hourFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '')\r\n            .replace(/(\\Wmm)$/, '') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h:mm\" -> \"6:30\" (with no AM/PM)\r\n    noMeridiemTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(/\\s*a$/i, ''); // remove trailing AM/PM\r\n    }\r\n};\r\n// options that should be computed off live calendar options (considers override options)\r\n// TODO: best place for this? related to locale?\r\n// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\r\nvar instanceComputableOptions = {\r\n    // Produces format strings for results like \"Mo 16\"\r\n    smallDayDateFormat: function (options) {\r\n        return options.isRTL ?\r\n            'D dd' :\r\n            'dd D';\r\n    },\r\n    // Produces format strings for results like \"Wk 5\"\r\n    weekFormat: function (options) {\r\n        return options.isRTL ?\r\n            'w[ ' + options.weekNumberTitle + ']' :\r\n            '[' + options.weekNumberTitle + ' ]w';\r\n    },\r\n    // Produces format strings for results like \"Wk5\"\r\n    smallWeekFormat: function (options) {\r\n        return options.isRTL ?\r\n            'w[' + options.weekNumberTitle + ']' :\r\n            '[' + options.weekNumberTitle + ']w';\r\n    }\r\n};\r\n// TODO: make these computable properties in optionsManager\r\nfunction populateInstanceComputableOptions(options) {\r\n    $.each(instanceComputableOptions, function (name, func) {\r\n        if (options[name] == null) {\r\n            options[name] = func(options);\r\n        }\r\n    });\r\n}\r\nexports.populateInstanceComputableOptions = populateInstanceComputableOptions;\r\n// Initialize jQuery UI datepicker translations while using some of the translations\r\n// Will set this as the default locales for datepicker.\r\nfunction datepickerLocale(localeCode, dpLocaleCode, dpOptions) {\r\n    // get the FullCalendar internal option hash for this locale. create if necessary\r\n    var fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n    // transfer some simple options from datepicker to fc\r\n    fcOptions.isRTL = dpOptions.isRTL;\r\n    fcOptions.weekNumberTitle = dpOptions.weekHeader;\r\n    // compute some more complex options from datepicker\r\n    $.each(dpComputableOptions, function (name, func) {\r\n        fcOptions[name] = func(dpOptions);\r\n    });\r\n    var jqDatePicker = $.datepicker;\r\n    // is jQuery UI Datepicker is on the page?\r\n    if (jqDatePicker) {\r\n        // Register the locale data.\r\n        // FullCalendar and MomentJS use locale codes like \"pt-br\" but Datepicker\r\n        // does it like \"pt-BR\" or if it doesn't have the locale, maybe just \"pt\".\r\n        // Make an alias so the locale can be referenced either way.\r\n        jqDatePicker.regional[dpLocaleCode] =\r\n            jqDatePicker.regional[localeCode] = // alias\r\n                dpOptions;\r\n        // Alias 'en' to the default locale data. Do this every time.\r\n        jqDatePicker.regional.en = jqDatePicker.regional[''];\r\n        // Set as Datepicker's global defaults.\r\n        jqDatePicker.setDefaults(dpOptions);\r\n    }\r\n}\r\nexports.datepickerLocale = datepickerLocale;\r\n// Sets FullCalendar-specific translations. Will set the locales as the global default.\r\nfunction locale(localeCode, newFcOptions) {\r\n    var fcOptions;\r\n    var momOptions;\r\n    // get the FullCalendar internal option hash for this locale. create if necessary\r\n    fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n    // provided new options for this locales? merge them in\r\n    if (newFcOptions) {\r\n        fcOptions = exports.localeOptionHash[localeCode] = options_1.mergeOptions([fcOptions, newFcOptions]);\r\n    }\r\n    // compute locale options that weren't defined.\r\n    // always do this. newFcOptions can be undefined when initializing from i18n file,\r\n    // so no way to tell if this is an initialization or a default-setting.\r\n    momOptions = getMomentLocaleData(localeCode); // will fall back to en\r\n    $.each(momComputableOptions, function (name, func) {\r\n        if (fcOptions[name] == null) {\r\n            fcOptions[name] = (func)(momOptions, fcOptions);\r\n        }\r\n    });\r\n    // set it as the default locale for FullCalendar\r\n    options_1.globalDefaults.locale = localeCode;\r\n}\r\nexports.locale = locale;\r\n// Returns moment's internal locale data. If doesn't exist, returns English.\r\nfunction getMomentLocaleData(localeCode) {\r\n    return moment.localeData(localeCode) || moment.localeData('en');\r\n}\r\nexports.getMomentLocaleData = getMomentLocaleData;\r\n// Initialize English by forcing computation of moment-derived options.\r\n// Also, sets it as the default.\r\nlocale('en', options_1.englishDefaults);\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nexports.globalDefaults = {\r\n    titleRangeSeparator: ' \\u2013 ',\r\n    monthYearFormat: 'MMMM YYYY',\r\n    defaultTimedEventDuration: '02:00:00',\r\n    defaultAllDayEventDuration: { days: 1 },\r\n    forceEventDuration: false,\r\n    nextDayThreshold: '09:00:00',\r\n    // display\r\n    columnHeader: true,\r\n    defaultView: 'month',\r\n    aspectRatio: 1.35,\r\n    header: {\r\n        left: 'title',\r\n        center: '',\r\n        right: 'today prev,next'\r\n    },\r\n    weekends: true,\r\n    weekNumbers: false,\r\n    weekNumberTitle: 'W',\r\n    weekNumberCalculation: 'local',\r\n    // editable: false,\r\n    // nowIndicator: false,\r\n    scrollTime: '06:00:00',\r\n    minTime: '00:00:00',\r\n    maxTime: '24:00:00',\r\n    showNonCurrentDates: true,\r\n    // event ajax\r\n    lazyFetching: true,\r\n    startParam: 'start',\r\n    endParam: 'end',\r\n    timezoneParam: 'timezone',\r\n    timezone: false,\r\n    // allDayDefault: undefined,\r\n    // locale\r\n    locale: null,\r\n    isRTL: false,\r\n    buttonText: {\r\n        prev: 'prev',\r\n        next: 'next',\r\n        prevYear: 'prev year',\r\n        nextYear: 'next year',\r\n        year: 'year',\r\n        today: 'today',\r\n        month: 'month',\r\n        week: 'week',\r\n        day: 'day'\r\n    },\r\n    // buttonIcons: null,\r\n    allDayText: 'all-day',\r\n    // allows setting a min-height to the event segment to prevent short events overlapping each other\r\n    agendaEventMinHeight: 0,\r\n    // jquery-ui theming\r\n    theme: false,\r\n    // themeButtonIcons: null,\r\n    // eventResizableFromStart: false,\r\n    dragOpacity: .75,\r\n    dragRevertDuration: 500,\r\n    dragScroll: true,\r\n    // selectable: false,\r\n    unselectAuto: true,\r\n    // selectMinDistance: 0,\r\n    dropAccept: '*',\r\n    eventOrder: 'title',\r\n    // eventRenderWait: null,\r\n    eventLimit: false,\r\n    eventLimitText: 'more',\r\n    eventLimitClick: 'popover',\r\n    dayPopoverFormat: 'LL',\r\n    handleWindowResize: true,\r\n    windowResizeDelay: 100,\r\n    longPressDelay: 1000\r\n};\r\nexports.englishDefaults = {\r\n    dayPopoverFormat: 'dddd, MMMM D'\r\n};\r\nexports.rtlDefaults = {\r\n    header: {\r\n        left: 'next,prev today',\r\n        center: '',\r\n        right: 'title'\r\n    },\r\n    buttonIcons: {\r\n        prev: 'right-single-arrow',\r\n        next: 'left-single-arrow',\r\n        prevYear: 'right-double-arrow',\r\n        nextYear: 'left-double-arrow'\r\n    },\r\n    themeButtonIcons: {\r\n        prev: 'circle-triangle-e',\r\n        next: 'circle-triangle-w',\r\n        nextYear: 'seek-prev',\r\n        prevYear: 'seek-next'\r\n    }\r\n};\r\nvar complexOptions = [\r\n    'header',\r\n    'footer',\r\n    'buttonText',\r\n    'buttonIcons',\r\n    'themeButtonIcons'\r\n];\r\n// Merges an array of option objects into a single object\r\nfunction mergeOptions(optionObjs) {\r\n    return util_1.mergeProps(optionObjs, complexOptions);\r\n}\r\nexports.mergeOptions = mergeOptions;\r\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventFootprint = /** @class */ (function () {\r\n    function EventFootprint(componentFootprint, eventDef, eventInstance) {\r\n        this.componentFootprint = componentFootprint;\r\n        this.eventDef = eventDef;\r\n        if (eventInstance) {\r\n            this.eventInstance = eventInstance;\r\n        }\r\n    }\r\n    EventFootprint.prototype.getEventLegacy = function () {\r\n        return (this.eventInstance || this.eventDef).toLegacy();\r\n    };\r\n    return EventFootprint;\r\n}());\r\nexports.default = EventFootprint;\r\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\n// Class that all other classes will inherit from\r\nvar Class = /** @class */ (function () {\r\n    function Class() {\r\n    }\r\n    // Called on a class to create a subclass.\r\n    // LIMITATION: cannot provide a constructor!\r\n    Class.extend = function (members) {\r\n        var SubClass = /** @class */ (function (_super) {\r\n            tslib_1.__extends(SubClass, _super);\r\n            function SubClass() {\r\n                return _super !== null && _super.apply(this, arguments) || this;\r\n            }\r\n            return SubClass;\r\n        }(this));\r\n        util_1.copyOwnProps(members, SubClass.prototype);\r\n        return SubClass;\r\n    };\r\n    // Adds new member variables/methods to the class's prototype.\r\n    // Can be called with another class, or a plain object hash containing new members.\r\n    Class.mixin = function (members) {\r\n        util_1.copyOwnProps(members, this.prototype);\r\n    };\r\n    return Class;\r\n}());\r\nexports.default = Class;\r\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.default = {\r\n    parse: function (eventInput, source) {\r\n        if (util_1.isTimeString(eventInput.start) || moment.isDuration(eventInput.start) ||\r\n            util_1.isTimeString(eventInput.end) || moment.isDuration(eventInput.end)) {\r\n            return RecurringEventDef_1.default.parse(eventInput, source);\r\n        }\r\n        else {\r\n            return SingleEventDef_1.default.parse(eventInput, source);\r\n        }\r\n    }\r\n};\r\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar EventDef = /** @class */ (function () {\r\n    function EventDef(source) {\r\n        this.source = source;\r\n        this.className = [];\r\n        this.miscProps = {};\r\n    }\r\n    EventDef.parse = function (rawInput, source) {\r\n        var def = new this(source);\r\n        if (def.applyProps(rawInput)) {\r\n            return def;\r\n        }\r\n        return false;\r\n    };\r\n    EventDef.normalizeId = function (id) {\r\n        return String(id);\r\n    };\r\n    EventDef.generateId = function () {\r\n        return '_fc' + (EventDef.uuid++);\r\n    };\r\n    EventDef.prototype.clone = function () {\r\n        var copy = new this.constructor(this.source);\r\n        copy.id = this.id;\r\n        copy.rawId = this.rawId;\r\n        copy.uid = this.uid; // not really unique anymore :(\r\n        EventDef.copyVerbatimStandardProps(this, copy);\r\n        copy.className = this.className.slice(); // copy\r\n        copy.miscProps = $.extend({}, this.miscProps);\r\n        return copy;\r\n    };\r\n    EventDef.prototype.hasInverseRendering = function () {\r\n        return this.getRendering() === 'inverse-background';\r\n    };\r\n    EventDef.prototype.hasBgRendering = function () {\r\n        var rendering = this.getRendering();\r\n        return rendering === 'inverse-background' || rendering === 'background';\r\n    };\r\n    EventDef.prototype.getRendering = function () {\r\n        if (this.rendering != null) {\r\n            return this.rendering;\r\n        }\r\n        return this.source.rendering;\r\n    };\r\n    EventDef.prototype.getConstraint = function () {\r\n        if (this.constraint != null) {\r\n            return this.constraint;\r\n        }\r\n        if (this.source.constraint != null) {\r\n            return this.source.constraint;\r\n        }\r\n        return this.source.calendar.opt('eventConstraint'); // what about View option?\r\n    };\r\n    EventDef.prototype.getOverlap = function () {\r\n        if (this.overlap != null) {\r\n            return this.overlap;\r\n        }\r\n        if (this.source.overlap != null) {\r\n            return this.source.overlap;\r\n        }\r\n        return this.source.calendar.opt('eventOverlap'); // what about View option?\r\n    };\r\n    EventDef.prototype.isStartExplicitlyEditable = function () {\r\n        if (this.startEditable != null) {\r\n            return this.startEditable;\r\n        }\r\n        return this.source.startEditable;\r\n    };\r\n    EventDef.prototype.isDurationExplicitlyEditable = function () {\r\n        if (this.durationEditable != null) {\r\n            return this.durationEditable;\r\n        }\r\n        return this.source.durationEditable;\r\n    };\r\n    EventDef.prototype.isExplicitlyEditable = function () {\r\n        if (this.editable != null) {\r\n            return this.editable;\r\n        }\r\n        return this.source.editable;\r\n    };\r\n    EventDef.prototype.toLegacy = function () {\r\n        var obj = $.extend({}, this.miscProps);\r\n        obj._id = this.uid;\r\n        obj.source = this.source;\r\n        obj.className = this.className.slice(); // copy\r\n        obj.allDay = this.isAllDay();\r\n        if (this.rawId != null) {\r\n            obj.id = this.rawId;\r\n        }\r\n        EventDef.copyVerbatimStandardProps(this, obj);\r\n        return obj;\r\n    };\r\n    EventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n        if (rawProps.id != null) {\r\n            this.id = EventDef.normalizeId((this.rawId = rawProps.id));\r\n        }\r\n        else {\r\n            this.id = EventDef.generateId();\r\n        }\r\n        if (rawProps._id != null) { // accept this prop, even tho somewhat internal\r\n            this.uid = String(rawProps._id);\r\n        }\r\n        else {\r\n            this.uid = EventDef.generateId();\r\n        }\r\n        // TODO: converge with EventSource\r\n        if ($.isArray(rawProps.className)) {\r\n            this.className = rawProps.className;\r\n        }\r\n        if (typeof rawProps.className === 'string') {\r\n            this.className = rawProps.className.split(/\\s+/);\r\n        }\r\n        return true;\r\n    };\r\n    EventDef.prototype.applyMiscProps = function (rawProps) {\r\n        $.extend(this.miscProps, rawProps);\r\n    };\r\n    EventDef.uuid = 0;\r\n    EventDef.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n    EventDef.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n    return EventDef;\r\n}());\r\nexports.default = EventDef;\r\nParsableModelMixin_1.default.mixInto(EventDef);\r\nEventDef.defineStandardProps({\r\n    // not automatically assigned (`false`)\r\n    _id: false,\r\n    id: false,\r\n    className: false,\r\n    source: false,\r\n    // automatically assigned (`true`)\r\n    title: true,\r\n    url: true,\r\n    rendering: true,\r\n    constraint: true,\r\n    overlap: true,\r\n    editable: true,\r\n    startEditable: true,\r\n    durationEditable: true,\r\n    color: true,\r\n    backgroundColor: true,\r\n    borderColor: true,\r\n    textColor: true\r\n});\r\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.default = {\r\n    sourceClasses: [],\r\n    registerClass: function (EventSourceClass) {\r\n        this.sourceClasses.unshift(EventSourceClass); // give highest priority\r\n    },\r\n    parse: function (rawInput, calendar) {\r\n        var sourceClasses = this.sourceClasses;\r\n        var i;\r\n        var eventSource;\r\n        for (i = 0; i < sourceClasses.length; i++) {\r\n            eventSource = sourceClasses[i].parse(rawInput, calendar);\r\n            if (eventSource) {\r\n                return eventSource;\r\n            }\r\n        }\r\n    }\r\n};\r\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation = /** @class */ (function () {\r\n    function EventDefMutation() {\r\n    }\r\n    EventDefMutation.createFromRawProps = function (eventInstance, rawProps, largeUnit) {\r\n        var eventDef = eventInstance.def;\r\n        var dateProps = {};\r\n        var standardProps = {};\r\n        var miscProps = {};\r\n        var verbatimStandardProps = {};\r\n        var eventDefId = null;\r\n        var className = null;\r\n        var propName;\r\n        var dateProfile;\r\n        var dateMutation;\r\n        var defMutation;\r\n        for (propName in rawProps) {\r\n            if (EventDateProfile_1.default.isStandardProp(propName)) {\r\n                dateProps[propName] = rawProps[propName];\r\n            }\r\n            else if (eventDef.isStandardProp(propName)) {\r\n                standardProps[propName] = rawProps[propName];\r\n            }\r\n            else if (eventDef.miscProps[propName] !== rawProps[propName]) { // only if changed\r\n                miscProps[propName] = rawProps[propName];\r\n            }\r\n        }\r\n        dateProfile = EventDateProfile_1.default.parse(dateProps, eventDef.source);\r\n        if (dateProfile) { // no failure?\r\n            dateMutation = EventDefDateMutation_1.default.createFromDiff(eventInstance.dateProfile, dateProfile, largeUnit);\r\n        }\r\n        if (standardProps.id !== eventDef.id) {\r\n            eventDefId = standardProps.id; // only apply if there's a change\r\n        }\r\n        if (!util_1.isArraysEqual(standardProps.className, eventDef.className)) {\r\n            className = standardProps.className; // only apply if there's a change\r\n        }\r\n        EventDef_1.default.copyVerbatimStandardProps(standardProps, // src\r\n        verbatimStandardProps // dest\r\n        );\r\n        defMutation = new EventDefMutation();\r\n        defMutation.eventDefId = eventDefId;\r\n        defMutation.className = className;\r\n        defMutation.verbatimStandardProps = verbatimStandardProps;\r\n        defMutation.miscProps = miscProps;\r\n        if (dateMutation) {\r\n            defMutation.dateMutation = dateMutation;\r\n        }\r\n        return defMutation;\r\n    };\r\n    /*\r\n    eventDef assumed to be a SingleEventDef.\r\n    returns an undo function.\r\n    */\r\n    EventDefMutation.prototype.mutateSingle = function (eventDef) {\r\n        var origDateProfile;\r\n        if (this.dateMutation) {\r\n            origDateProfile = eventDef.dateProfile;\r\n            eventDef.dateProfile = this.dateMutation.buildNewDateProfile(origDateProfile, eventDef.source.calendar);\r\n        }\r\n        // can't undo\r\n        // TODO: more DRY with EventDef::applyManualStandardProps\r\n        if (this.eventDefId != null) {\r\n            eventDef.id = EventDef_1.default.normalizeId((eventDef.rawId = this.eventDefId));\r\n        }\r\n        // can't undo\r\n        // TODO: more DRY with EventDef::applyManualStandardProps\r\n        if (this.className) {\r\n            eventDef.className = this.className;\r\n        }\r\n        // can't undo\r\n        if (this.verbatimStandardProps) {\r\n            SingleEventDef_1.default.copyVerbatimStandardProps(this.verbatimStandardProps, // src\r\n            eventDef // dest\r\n            );\r\n        }\r\n        // can't undo\r\n        if (this.miscProps) {\r\n            eventDef.applyMiscProps(this.miscProps);\r\n        }\r\n        if (origDateProfile) {\r\n            return function () {\r\n                eventDef.dateProfile = origDateProfile;\r\n            };\r\n        }\r\n        else {\r\n            return function () { };\r\n        }\r\n    };\r\n    EventDefMutation.prototype.setDateMutation = function (dateMutation) {\r\n        if (dateMutation && !dateMutation.isEmpty()) {\r\n            this.dateMutation = dateMutation;\r\n        }\r\n        else {\r\n            this.dateMutation = null;\r\n        }\r\n    };\r\n    EventDefMutation.prototype.isEmpty = function () {\r\n        return !this.dateMutation;\r\n    };\r\n    return EventDefMutation;\r\n}());\r\nexports.default = EventDefMutation;\r\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDefDateMutation = /** @class */ (function () {\r\n    function EventDefDateMutation() {\r\n        this.clearEnd = false;\r\n        this.forceTimed = false;\r\n        this.forceAllDay = false;\r\n    }\r\n    EventDefDateMutation.createFromDiff = function (dateProfile0, dateProfile1, largeUnit) {\r\n        var clearEnd = dateProfile0.end && !dateProfile1.end;\r\n        var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();\r\n        var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();\r\n        var dateDelta;\r\n        var endDiff;\r\n        var endDelta;\r\n        var mutation;\r\n        // subtracts the dates in the appropriate way, returning a duration\r\n        function subtractDates(date1, date0) {\r\n            if (largeUnit) {\r\n                return util_1.diffByUnit(date1, date0, largeUnit); // poorly named\r\n            }\r\n            else if (dateProfile1.isAllDay()) {\r\n                return util_1.diffDay(date1, date0); // poorly named\r\n            }\r\n            else {\r\n                return util_1.diffDayTime(date1, date0); // poorly named\r\n            }\r\n        }\r\n        dateDelta = subtractDates(dateProfile1.start, dateProfile0.start);\r\n        if (dateProfile1.end) {\r\n            // use unzonedRanges because dateProfile0.end might be null\r\n            endDiff = subtractDates(dateProfile1.unzonedRange.getEnd(), dateProfile0.unzonedRange.getEnd());\r\n            endDelta = endDiff.subtract(dateDelta);\r\n        }\r\n        mutation = new EventDefDateMutation();\r\n        mutation.clearEnd = clearEnd;\r\n        mutation.forceTimed = forceTimed;\r\n        mutation.forceAllDay = forceAllDay;\r\n        mutation.setDateDelta(dateDelta);\r\n        mutation.setEndDelta(endDelta);\r\n        return mutation;\r\n    };\r\n    /*\r\n    returns an undo function.\r\n    */\r\n    EventDefDateMutation.prototype.buildNewDateProfile = function (eventDateProfile, calendar) {\r\n        var start = eventDateProfile.start.clone();\r\n        var end = null;\r\n        var shouldRezone = false;\r\n        if (eventDateProfile.end && !this.clearEnd) {\r\n            end = eventDateProfile.end.clone();\r\n        }\r\n        else if (this.endDelta && !end) {\r\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n        }\r\n        if (this.forceTimed) {\r\n            shouldRezone = true;\r\n            if (!start.hasTime()) {\r\n                start.time(0);\r\n            }\r\n            if (end && !end.hasTime()) {\r\n                end.time(0);\r\n            }\r\n        }\r\n        else if (this.forceAllDay) {\r\n            if (start.hasTime()) {\r\n                start.stripTime();\r\n            }\r\n            if (end && end.hasTime()) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        if (this.dateDelta) {\r\n            shouldRezone = true;\r\n            start.add(this.dateDelta);\r\n            if (end) {\r\n                end.add(this.dateDelta);\r\n            }\r\n        }\r\n        // do this before adding startDelta to start, so we can work off of start\r\n        if (this.endDelta) {\r\n            shouldRezone = true;\r\n            end.add(this.endDelta);\r\n        }\r\n        if (this.startDelta) {\r\n            shouldRezone = true;\r\n            start.add(this.startDelta);\r\n        }\r\n        if (shouldRezone) {\r\n            start = calendar.applyTimezone(start);\r\n            if (end) {\r\n                end = calendar.applyTimezone(end);\r\n            }\r\n        }\r\n        // TODO: okay to access calendar option?\r\n        if (!end && calendar.opt('forceEventDuration')) {\r\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n        }\r\n        return new EventDateProfile_1.default(start, end, calendar);\r\n    };\r\n    EventDefDateMutation.prototype.setDateDelta = function (dateDelta) {\r\n        if (dateDelta && dateDelta.valueOf()) {\r\n            this.dateDelta = dateDelta;\r\n        }\r\n        else {\r\n            this.dateDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.setStartDelta = function (startDelta) {\r\n        if (startDelta && startDelta.valueOf()) {\r\n            this.startDelta = startDelta;\r\n        }\r\n        else {\r\n            this.startDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.setEndDelta = function (endDelta) {\r\n        if (endDelta && endDelta.valueOf()) {\r\n            this.endDelta = endDelta;\r\n        }\r\n        else {\r\n            this.endDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.isEmpty = function () {\r\n        return !this.clearEnd && !this.forceTimed && !this.forceAllDay &&\r\n            !this.dateDelta && !this.startDelta && !this.endDelta;\r\n    };\r\n    return EventDefDateMutation;\r\n}());\r\nexports.default = EventDefDateMutation;\r\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Class_1 = __webpack_require__(35);\r\n/*\r\nEmbodies a div that has potential scrollbars\r\n*/\r\nvar Scroller = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Scroller, _super);\r\n    function Scroller(options) {\r\n        var _this = _super.call(this) || this;\r\n        options = options || {};\r\n        _this.overflowX = options.overflowX || options.overflow || 'auto';\r\n        _this.overflowY = options.overflowY || options.overflow || 'auto';\r\n        return _this;\r\n    }\r\n    Scroller.prototype.render = function () {\r\n        this.el = this.renderEl();\r\n        this.applyOverflow();\r\n    };\r\n    Scroller.prototype.renderEl = function () {\r\n        return (this.scrollEl = $('<div class=\"fc-scroller\"></div>'));\r\n    };\r\n    // sets to natural height, unlocks overflow\r\n    Scroller.prototype.clear = function () {\r\n        this.setHeight('auto');\r\n        this.applyOverflow();\r\n    };\r\n    Scroller.prototype.destroy = function () {\r\n        this.el.remove();\r\n    };\r\n    // Overflow\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Scroller.prototype.applyOverflow = function () {\r\n        this.scrollEl.css({\r\n            'overflow-x': this.overflowX,\r\n            'overflow-y': this.overflowY\r\n        });\r\n    };\r\n    // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\r\n    // Useful for preserving scrollbar widths regardless of future resizes.\r\n    // Can pass in scrollbarWidths for optimization.\r\n    Scroller.prototype.lockOverflow = function (scrollbarWidths) {\r\n        var overflowX = this.overflowX;\r\n        var overflowY = this.overflowY;\r\n        scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\r\n        if (overflowX === 'auto') {\r\n            overflowX = (scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\r\n                // OR scrolling pane with massless scrollbars?\r\n                this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth\r\n            // subtract 1 because of IE off-by-one issue\r\n            ) ? 'scroll' : 'hidden';\r\n        }\r\n        if (overflowY === 'auto') {\r\n            overflowY = (scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\r\n                // OR scrolling pane with massless scrollbars?\r\n                this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight\r\n            // subtract 1 because of IE off-by-one issue\r\n            ) ? 'scroll' : 'hidden';\r\n        }\r\n        this.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });\r\n    };\r\n    // Getters / Setters\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Scroller.prototype.setHeight = function (height) {\r\n        this.scrollEl.height(height);\r\n    };\r\n    Scroller.prototype.getScrollTop = function () {\r\n        return this.scrollEl.scrollTop();\r\n    };\r\n    Scroller.prototype.setScrollTop = function (top) {\r\n        this.scrollEl.scrollTop(top);\r\n    };\r\n    Scroller.prototype.getClientWidth = function () {\r\n        return this.scrollEl[0].clientWidth;\r\n    };\r\n    Scroller.prototype.getClientHeight = function () {\r\n        return this.scrollEl[0].clientHeight;\r\n    };\r\n    Scroller.prototype.getScrollbarWidths = function () {\r\n        return util_1.getScrollbarWidths(this.scrollEl);\r\n    };\r\n    return Scroller;\r\n}(Class_1.default));\r\nexports.default = Scroller;\r\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar DateComponent_1 = __webpack_require__(231);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar InteractiveDateComponent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(InteractiveDateComponent, _super);\r\n    function InteractiveDateComponent(_view, _options) {\r\n        var _this = _super.call(this, _view, _options) || this;\r\n        // self-config, overridable by subclasses\r\n        _this.segSelector = '.fc-event-container > *'; // what constitutes an event element?\r\n        if (_this.dateSelectingClass) {\r\n            _this.dateClicking = new _this.dateClickingClass(_this);\r\n        }\r\n        if (_this.dateSelectingClass) {\r\n            _this.dateSelecting = new _this.dateSelectingClass(_this);\r\n        }\r\n        if (_this.eventPointingClass) {\r\n            _this.eventPointing = new _this.eventPointingClass(_this);\r\n        }\r\n        if (_this.eventDraggingClass && _this.eventPointing) {\r\n            _this.eventDragging = new _this.eventDraggingClass(_this, _this.eventPointing);\r\n        }\r\n        if (_this.eventResizingClass && _this.eventPointing) {\r\n            _this.eventResizing = new _this.eventResizingClass(_this, _this.eventPointing);\r\n        }\r\n        if (_this.externalDroppingClass) {\r\n            _this.externalDropping = new _this.externalDroppingClass(_this);\r\n        }\r\n        return _this;\r\n    }\r\n    // Sets the container element that the view should render inside of, does global DOM-related initializations,\r\n    // and renders all the non-date-related content inside.\r\n    InteractiveDateComponent.prototype.setElement = function (el) {\r\n        _super.prototype.setElement.call(this, el);\r\n        if (this.dateClicking) {\r\n            this.dateClicking.bindToEl(el);\r\n        }\r\n        if (this.dateSelecting) {\r\n            this.dateSelecting.bindToEl(el);\r\n        }\r\n        this.bindAllSegHandlersToEl(el);\r\n    };\r\n    InteractiveDateComponent.prototype.removeElement = function () {\r\n        this.endInteractions();\r\n        _super.prototype.removeElement.call(this);\r\n    };\r\n    InteractiveDateComponent.prototype.executeEventUnrender = function () {\r\n        this.endInteractions();\r\n        _super.prototype.executeEventUnrender.call(this);\r\n    };\r\n    InteractiveDateComponent.prototype.bindGlobalHandlers = function () {\r\n        _super.prototype.bindGlobalHandlers.call(this);\r\n        if (this.externalDropping) {\r\n            this.externalDropping.bindToDocument();\r\n        }\r\n    };\r\n    InteractiveDateComponent.prototype.unbindGlobalHandlers = function () {\r\n        _super.prototype.unbindGlobalHandlers.call(this);\r\n        if (this.externalDropping) {\r\n            this.externalDropping.unbindFromDocument();\r\n        }\r\n    };\r\n    InteractiveDateComponent.prototype.bindDateHandlerToEl = function (el, name, handler) {\r\n        var _this = this;\r\n        // attach a handler to the grid's root element.\r\n        // jQuery will take care of unregistering them when removeElement gets called.\r\n        this.el.on(name, function (ev) {\r\n            if (!$(ev.target).is(_this.segSelector + ':not(.fc-helper),' + // directly on an event element\r\n                _this.segSelector + ':not(.fc-helper) *,' + // within an event element\r\n                '.fc-more,' + // a \"more..\" link\r\n                'a[data-goto]' // a clickable nav link\r\n            )) {\r\n                return handler.call(_this, ev);\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.bindAllSegHandlersToEl = function (el) {\r\n        [\r\n            this.eventPointing,\r\n            this.eventDragging,\r\n            this.eventResizing\r\n        ].forEach(function (eventInteraction) {\r\n            if (eventInteraction) {\r\n                eventInteraction.bindToEl(el);\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.bindSegHandlerToEl = function (el, name, handler) {\r\n        var _this = this;\r\n        el.on(name, this.segSelector, function (ev) {\r\n            var segEl = $(ev.currentTarget);\r\n            if (!segEl.is('.fc-helper')) {\r\n                var seg = segEl.data('fc-seg'); // grab segment data. put there by View::renderEventsPayload\r\n                if (seg && !_this.shouldIgnoreEventPointing()) {\r\n                    return handler.call(_this, seg, ev); // context will be the Grid\r\n                }\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreMouse = function () {\r\n        // HACK\r\n        // This will still work even though bindDateHandlerToEl doesn't use GlobalEmitter.\r\n        return GlobalEmitter_1.default.get().shouldIgnoreMouse();\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreTouch = function () {\r\n        var view = this._getView();\r\n        // On iOS (and Android?) when a new selection is initiated overtop another selection,\r\n        // the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\r\n        // HACK: simply don't allow this to happen.\r\n        // ALSO: prevent selection when an *event* is already raised.\r\n        return view.isSelected || view.selectedEvent;\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreEventPointing = function () {\r\n        // only call the handlers if there is not a drag/resize in progress\r\n        return (this.eventDragging && this.eventDragging.isDragging) ||\r\n            (this.eventResizing && this.eventResizing.isResizing);\r\n    };\r\n    InteractiveDateComponent.prototype.canStartSelection = function (seg, ev) {\r\n        return util_1.getEvIsTouch(ev) &&\r\n            !this.canStartResize(seg, ev) &&\r\n            (this.isEventDefDraggable(seg.footprint.eventDef) ||\r\n                this.isEventDefResizable(seg.footprint.eventDef));\r\n    };\r\n    InteractiveDateComponent.prototype.canStartDrag = function (seg, ev) {\r\n        return !this.canStartResize(seg, ev) &&\r\n            this.isEventDefDraggable(seg.footprint.eventDef);\r\n    };\r\n    InteractiveDateComponent.prototype.canStartResize = function (seg, ev) {\r\n        var view = this._getView();\r\n        var eventDef = seg.footprint.eventDef;\r\n        return (!util_1.getEvIsTouch(ev) || view.isEventDefSelected(eventDef)) &&\r\n            this.isEventDefResizable(eventDef) &&\r\n            $(ev.target).is('.fc-resizer');\r\n    };\r\n    // Kills all in-progress dragging.\r\n    // Useful for when public API methods that result in re-rendering are invoked during a drag.\r\n    // Also useful for when touch devices misbehave and don't fire their touchend.\r\n    InteractiveDateComponent.prototype.endInteractions = function () {\r\n        [\r\n            this.dateClicking,\r\n            this.dateSelecting,\r\n            this.eventPointing,\r\n            this.eventDragging,\r\n            this.eventResizing\r\n        ].forEach(function (interaction) {\r\n            if (interaction) {\r\n                interaction.end();\r\n            }\r\n        });\r\n    };\r\n    // Event Drag-n-Drop\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Computes if the given event is allowed to be dragged by the user\r\n    InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {\r\n        return this.isEventDefStartEditable(eventDef);\r\n    };\r\n    InteractiveDateComponent.prototype.isEventDefStartEditable = function (eventDef) {\r\n        var isEditable = eventDef.isStartExplicitlyEditable();\r\n        if (isEditable == null) {\r\n            isEditable = this.opt('eventStartEditable');\r\n            if (isEditable == null) {\r\n                isEditable = this.isEventDefGenerallyEditable(eventDef);\r\n            }\r\n        }\r\n        return isEditable;\r\n    };\r\n    InteractiveDateComponent.prototype.isEventDefGenerallyEditable = function (eventDef) {\r\n        var isEditable = eventDef.isExplicitlyEditable();\r\n        if (isEditable == null) {\r\n            isEditable = this.opt('editable');\r\n        }\r\n        return isEditable;\r\n    };\r\n    // Event Resizing\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Computes if the given event is allowed to be resized from its starting edge\r\n    InteractiveDateComponent.prototype.isEventDefResizableFromStart = function (eventDef) {\r\n        return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);\r\n    };\r\n    // Computes if the given event is allowed to be resized from its ending edge\r\n    InteractiveDateComponent.prototype.isEventDefResizableFromEnd = function (eventDef) {\r\n        return this.isEventDefResizable(eventDef);\r\n    };\r\n    // Computes if the given event is allowed to be resized by the user at all\r\n    InteractiveDateComponent.prototype.isEventDefResizable = function (eventDef) {\r\n        var isResizable = eventDef.isDurationExplicitlyEditable();\r\n        if (isResizable == null) {\r\n            isResizable = this.opt('eventDurationEditable');\r\n            if (isResizable == null) {\r\n                isResizable = this.isEventDefGenerallyEditable(eventDef);\r\n            }\r\n        }\r\n        return isResizable;\r\n    };\r\n    // Event Mutation / Constraints\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Diffs the two dates, returning a duration, based on granularity of the grid\r\n    // TODO: port isTimeScale into this system?\r\n    InteractiveDateComponent.prototype.diffDates = function (a, b) {\r\n        if (this.largeUnit) {\r\n            return util_1.diffByUnit(a, b, this.largeUnit);\r\n        }\r\n        else {\r\n            return util_1.diffDayTime(a, b);\r\n        }\r\n    };\r\n    // is it allowed, in relation to the view's validRange?\r\n    // NOTE: very similar to isExternalInstanceGroupAllowed\r\n    InteractiveDateComponent.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var view = this._getView();\r\n        var dateProfile = this.dateProfile;\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            // TODO: just use getAllEventRanges directly\r\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n                return false;\r\n            }\r\n        }\r\n        return view.calendar.constraints.isEventInstanceGroupAllowed(eventInstanceGroup);\r\n    };\r\n    // NOTE: very similar to isEventInstanceGroupAllowed\r\n    // when it's a completely anonymous external drag, no event.\r\n    InteractiveDateComponent.prototype.isExternalInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var view = this._getView();\r\n        var dateProfile = this.dateProfile;\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n                return false;\r\n            }\r\n        }\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            // treat it as a selection\r\n            // TODO: pass in eventInstanceGroup instead\r\n            //  because we don't want calendar's constraint system to depend on a component's\r\n            //  determination of footprints.\r\n            if (!view.calendar.constraints.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    return InteractiveDateComponent;\r\n}(DateComponent_1.default));\r\nexports.default = InteractiveDateComponent;\r\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/* An abstract class from which other views inherit from\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar View = /** @class */ (function (_super) {\r\n    tslib_1.__extends(View, _super);\r\n    function View(calendar, viewSpec) {\r\n        var _this = _super.call(this, null, viewSpec.options) || this;\r\n        _this.batchRenderDepth = 0;\r\n        _this.isSelected = false; // boolean whether a range of time is user-selected or not\r\n        _this.calendar = calendar;\r\n        _this.viewSpec = viewSpec;\r\n        // shortcuts\r\n        _this.type = viewSpec.type;\r\n        // .name is deprecated\r\n        _this.name = _this.type;\r\n        _this.initRenderQueue();\r\n        _this.initHiddenDays();\r\n        _this.dateProfileGenerator = new _this.dateProfileGeneratorClass(_this);\r\n        _this.bindBaseRenderHandlers();\r\n        _this.eventOrderSpecs = util_1.parseFieldSpecs(_this.opt('eventOrder'));\r\n        // legacy\r\n        if (_this['initialize']) {\r\n            _this['initialize']();\r\n        }\r\n        return _this;\r\n    }\r\n    View.prototype._getView = function () {\r\n        return this;\r\n    };\r\n    // Retrieves an option with the given name\r\n    View.prototype.opt = function (name) {\r\n        return this.options[name];\r\n    };\r\n    /* Render Queue\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.initRenderQueue = function () {\r\n        this.renderQueue = new RenderQueue_1.default({\r\n            event: this.opt('eventRenderWait')\r\n        });\r\n        this.renderQueue.on('start', this.onRenderQueueStart.bind(this));\r\n        this.renderQueue.on('stop', this.onRenderQueueStop.bind(this));\r\n        this.on('before:change', this.startBatchRender);\r\n        this.on('change', this.stopBatchRender);\r\n    };\r\n    View.prototype.onRenderQueueStart = function () {\r\n        this.calendar.freezeContentHeight();\r\n        this.addScroll(this.queryScroll());\r\n    };\r\n    View.prototype.onRenderQueueStop = function () {\r\n        if (this.calendar.updateViewSize()) { // success?\r\n            this.popScroll();\r\n        }\r\n        this.calendar.thawContentHeight();\r\n    };\r\n    View.prototype.startBatchRender = function () {\r\n        if (!(this.batchRenderDepth++)) {\r\n            this.renderQueue.pause();\r\n        }\r\n    };\r\n    View.prototype.stopBatchRender = function () {\r\n        if (!(--this.batchRenderDepth)) {\r\n            this.renderQueue.resume();\r\n        }\r\n    };\r\n    View.prototype.requestRender = function (func, namespace, actionType) {\r\n        this.renderQueue.queue(func, namespace, actionType);\r\n    };\r\n    // given func will auto-bind to `this`\r\n    View.prototype.whenSizeUpdated = function (func) {\r\n        if (this.renderQueue.isRunning) {\r\n            this.renderQueue.one('stop', func.bind(this));\r\n        }\r\n        else {\r\n            func.call(this);\r\n        }\r\n    };\r\n    /* Title and Date Formatting\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes what the title at the top of the calendar should be for this view\r\n    View.prototype.computeTitle = function (dateProfile) {\r\n        var unzonedRange;\r\n        // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\r\n        if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\r\n            unzonedRange = dateProfile.currentUnzonedRange;\r\n        }\r\n        else { // for day units or smaller, use the actual day range\r\n            unzonedRange = dateProfile.activeUnzonedRange;\r\n        }\r\n        return this.formatRange({\r\n            start: this.calendar.msToMoment(unzonedRange.startMs, dateProfile.isRangeAllDay),\r\n            end: this.calendar.msToMoment(unzonedRange.endMs, dateProfile.isRangeAllDay)\r\n        }, dateProfile.isRangeAllDay, this.opt('titleFormat') || this.computeTitleFormat(dateProfile), this.opt('titleRangeSeparator'));\r\n    };\r\n    // Generates the format string that should be used to generate the title for the current date range.\r\n    // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\r\n    View.prototype.computeTitleFormat = function (dateProfile) {\r\n        var currentRangeUnit = dateProfile.currentRangeUnit;\r\n        if (currentRangeUnit === 'year') {\r\n            return 'YYYY';\r\n        }\r\n        else if (currentRangeUnit === 'month') {\r\n            return this.opt('monthYearFormat'); // like \"September 2014\"\r\n        }\r\n        else if (dateProfile.currentUnzonedRange.as('days') > 1) {\r\n            return 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\r\n        }\r\n        else {\r\n            return 'LL'; // one day. longer, like \"September 9 2014\"\r\n        }\r\n    };\r\n    // Date Setting/Unsetting\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.setDate = function (date) {\r\n        var currentDateProfile = this.get('dateProfile');\r\n        var newDateProfile = this.dateProfileGenerator.build(date, undefined, true); // forceToValid=true\r\n        if (!currentDateProfile ||\r\n            !currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)) {\r\n            this.set('dateProfile', newDateProfile);\r\n        }\r\n    };\r\n    View.prototype.unsetDate = function () {\r\n        this.unset('dateProfile');\r\n    };\r\n    // Event Data\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.fetchInitialEvents = function (dateProfile) {\r\n        var calendar = this.calendar;\r\n        var forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;\r\n        return calendar.requestEvents(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay));\r\n    };\r\n    View.prototype.bindEventChanges = function () {\r\n        this.listenTo(this.calendar, 'eventsReset', this.resetEvents); // TODO: make this a real event\r\n    };\r\n    View.prototype.unbindEventChanges = function () {\r\n        this.stopListeningTo(this.calendar, 'eventsReset');\r\n    };\r\n    View.prototype.setEvents = function (eventsPayload) {\r\n        this.set('currentEvents', eventsPayload);\r\n        this.set('hasEvents', true);\r\n    };\r\n    View.prototype.unsetEvents = function () {\r\n        this.unset('currentEvents');\r\n        this.unset('hasEvents');\r\n    };\r\n    View.prototype.resetEvents = function (eventsPayload) {\r\n        this.startBatchRender();\r\n        this.unsetEvents();\r\n        this.setEvents(eventsPayload);\r\n        this.stopBatchRender();\r\n    };\r\n    // Date High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestDateRender = function (dateProfile) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeDateRender(dateProfile);\r\n        }, 'date', 'init');\r\n    };\r\n    View.prototype.requestDateUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeDateUnrender();\r\n        }, 'date', 'destroy');\r\n    };\r\n    // if dateProfile not specified, uses current\r\n    View.prototype.executeDateRender = function (dateProfile) {\r\n        _super.prototype.executeDateRender.call(this, dateProfile);\r\n        if (this['render']) {\r\n            this['render'](); // TODO: deprecate\r\n        }\r\n        this.trigger('datesRendered');\r\n        this.addScroll({ isDateInit: true });\r\n        this.startNowIndicator(); // shouldn't render yet because updateSize will be called soon\r\n    };\r\n    View.prototype.executeDateUnrender = function () {\r\n        this.unselect();\r\n        this.stopNowIndicator();\r\n        this.trigger('before:datesUnrendered');\r\n        if (this['destroy']) {\r\n            this['destroy'](); // TODO: deprecate\r\n        }\r\n        _super.prototype.executeDateUnrender.call(this);\r\n    };\r\n    // \"Base\" rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.bindBaseRenderHandlers = function () {\r\n        var _this = this;\r\n        this.on('datesRendered', function () {\r\n            _this.whenSizeUpdated(_this.triggerViewRender);\r\n        });\r\n        this.on('before:datesUnrendered', function () {\r\n            _this.triggerViewDestroy();\r\n        });\r\n    };\r\n    View.prototype.triggerViewRender = function () {\r\n        this.publiclyTrigger('viewRender', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    View.prototype.triggerViewDestroy = function () {\r\n        this.publiclyTrigger('viewDestroy', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    // Event High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestEventsRender = function (eventsPayload) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeEventRender(eventsPayload);\r\n            _this.whenSizeUpdated(_this.triggerAfterEventsRendered);\r\n        }, 'event', 'init');\r\n    };\r\n    View.prototype.requestEventsUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.triggerBeforeEventsDestroyed();\r\n            _this.executeEventUnrender();\r\n        }, 'event', 'destroy');\r\n    };\r\n    // Business Hour High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestBusinessHoursRender = function (businessHourGenerator) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.renderBusinessHours(businessHourGenerator);\r\n        }, 'businessHours', 'init');\r\n    };\r\n    View.prototype.requestBusinessHoursUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.unrenderBusinessHours();\r\n        }, 'businessHours', 'destroy');\r\n    };\r\n    // Misc view rendering utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Binds DOM handlers to elements that reside outside the view container, such as the document\r\n    View.prototype.bindGlobalHandlers = function () {\r\n        _super.prototype.bindGlobalHandlers.call(this);\r\n        this.listenTo(GlobalEmitter_1.default.get(), {\r\n            touchstart: this.processUnselect,\r\n            mousedown: this.handleDocumentMousedown\r\n        });\r\n    };\r\n    // Unbinds DOM handlers from elements that reside outside the view container\r\n    View.prototype.unbindGlobalHandlers = function () {\r\n        _super.prototype.unbindGlobalHandlers.call(this);\r\n        this.stopListeningTo(GlobalEmitter_1.default.get());\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Immediately render the current time indicator and begins re-rendering it at an interval,\r\n    // which is defined by this.getNowIndicatorUnit().\r\n    // TODO: somehow do this for the current whole day's background too\r\n    View.prototype.startNowIndicator = function () {\r\n        var _this = this;\r\n        var unit;\r\n        var update;\r\n        var delay; // ms wait value\r\n        if (this.opt('nowIndicator')) {\r\n            unit = this.getNowIndicatorUnit();\r\n            if (unit) {\r\n                update = util_1.proxy(this, 'updateNowIndicator'); // bind to `this`\r\n                this.initialNowDate = this.calendar.getNow();\r\n                this.initialNowQueriedMs = new Date().valueOf();\r\n                // wait until the beginning of the next interval\r\n                delay = this.initialNowDate.clone().startOf(unit).add(1, unit).valueOf() - this.initialNowDate.valueOf();\r\n                this.nowIndicatorTimeoutID = setTimeout(function () {\r\n                    _this.nowIndicatorTimeoutID = null;\r\n                    update();\r\n                    delay = +moment.duration(1, unit);\r\n                    delay = Math.max(100, delay); // prevent too frequent\r\n                    _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\r\n                }, delay);\r\n            }\r\n            // rendering will be initiated in updateSize\r\n        }\r\n    };\r\n    // rerenders the now indicator, computing the new current time from the amount of time that has passed\r\n    // since the initial getNow call.\r\n    View.prototype.updateNowIndicator = function () {\r\n        if (this.isDatesRendered &&\r\n            this.initialNowDate // activated before?\r\n        ) {\r\n            this.unrenderNowIndicator(); // won't unrender if unnecessary\r\n            this.renderNowIndicator(this.initialNowDate.clone().add(new Date().valueOf() - this.initialNowQueriedMs) // add ms\r\n            );\r\n            this.isNowIndicatorRendered = true;\r\n        }\r\n    };\r\n    // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\r\n    // Won't cause side effects if indicator isn't rendered.\r\n    View.prototype.stopNowIndicator = function () {\r\n        if (this.isNowIndicatorRendered) {\r\n            if (this.nowIndicatorTimeoutID) {\r\n                clearTimeout(this.nowIndicatorTimeoutID);\r\n                this.nowIndicatorTimeoutID = null;\r\n            }\r\n            if (this.nowIndicatorIntervalID) {\r\n                clearInterval(this.nowIndicatorIntervalID);\r\n                this.nowIndicatorIntervalID = null;\r\n            }\r\n            this.unrenderNowIndicator();\r\n            this.isNowIndicatorRendered = false;\r\n        }\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        if (this['setHeight']) { // for legacy API\r\n            this['setHeight'](totalHeight, isAuto);\r\n        }\r\n        else {\r\n            _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        }\r\n        this.updateNowIndicator();\r\n    };\r\n    /* Scroller\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.addScroll = function (scroll) {\r\n        var queuedScroll = this.queuedScroll || (this.queuedScroll = {});\r\n        $.extend(queuedScroll, scroll);\r\n    };\r\n    View.prototype.popScroll = function () {\r\n        this.applyQueuedScroll();\r\n        this.queuedScroll = null;\r\n    };\r\n    View.prototype.applyQueuedScroll = function () {\r\n        if (this.queuedScroll) {\r\n            this.applyScroll(this.queuedScroll);\r\n        }\r\n    };\r\n    View.prototype.queryScroll = function () {\r\n        var scroll = {};\r\n        if (this.isDatesRendered) {\r\n            $.extend(scroll, this.queryDateScroll());\r\n        }\r\n        return scroll;\r\n    };\r\n    View.prototype.applyScroll = function (scroll) {\r\n        if (scroll.isDateInit && this.isDatesRendered) {\r\n            $.extend(scroll, this.computeInitialDateScroll());\r\n        }\r\n        if (this.isDatesRendered) {\r\n            this.applyDateScroll(scroll);\r\n        }\r\n    };\r\n    View.prototype.computeInitialDateScroll = function () {\r\n        return {}; // subclasses must implement\r\n    };\r\n    View.prototype.queryDateScroll = function () {\r\n        return {}; // subclasses must implement\r\n    };\r\n    View.prototype.applyDateScroll = function (scroll) {\r\n        // subclasses must implement\r\n    };\r\n    /* Event Drag-n-Drop\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.reportEventDrop = function (eventInstance, eventMutation, el, ev) {\r\n        var eventManager = this.calendar.eventManager;\r\n        var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n        var dateMutation = eventMutation.dateMutation;\r\n        // update the EventInstance, for handlers\r\n        if (dateMutation) {\r\n            eventInstance.dateProfile = dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n        }\r\n        this.triggerEventDrop(eventInstance, \r\n        // a drop doesn't necessarily mean a date mutation (ex: resource change)\r\n        (dateMutation && dateMutation.dateDelta) || moment.duration(), undoFunc, el, ev);\r\n    };\r\n    // Triggers event-drop handlers that have subscribed via the API\r\n    View.prototype.triggerEventDrop = function (eventInstance, dateDelta, undoFunc, el, ev) {\r\n        this.publiclyTrigger('eventDrop', {\r\n            context: el[0],\r\n            args: [\r\n                eventInstance.toLegacy(),\r\n                dateDelta,\r\n                undoFunc,\r\n                ev,\r\n                {},\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    /* External Element Drag-n-Drop\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\r\n    // `meta` is the parsed data that has been embedded into the dragging event.\r\n    // `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\r\n    View.prototype.reportExternalDrop = function (singleEventDef, isEvent, isSticky, el, ev, ui) {\r\n        if (isEvent) {\r\n            this.calendar.eventManager.addEventDef(singleEventDef, isSticky);\r\n        }\r\n        this.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);\r\n    };\r\n    // Triggers external-drop handlers that have subscribed via the API\r\n    View.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {\r\n        // trigger 'drop' regardless of whether element represents an event\r\n        this.publiclyTrigger('drop', {\r\n            context: el[0],\r\n            args: [\r\n                singleEventDef.dateProfile.start.clone(),\r\n                ev,\r\n                ui,\r\n                this\r\n            ]\r\n        });\r\n        if (isEvent) {\r\n            // signal an external event landed\r\n            this.publiclyTrigger('eventReceive', {\r\n                context: this,\r\n                args: [\r\n                    singleEventDef.buildInstance().toLegacy(),\r\n                    this\r\n                ]\r\n            });\r\n        }\r\n    };\r\n    /* Event Resizing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Must be called when an event in the view has been resized to a new length\r\n    View.prototype.reportEventResize = function (eventInstance, eventMutation, el, ev) {\r\n        var eventManager = this.calendar.eventManager;\r\n        var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n        // update the EventInstance, for handlers\r\n        eventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n        var resizeDelta = eventMutation.dateMutation.endDelta || eventMutation.dateMutation.startDelta;\r\n        this.triggerEventResize(eventInstance, resizeDelta, undoFunc, el, ev);\r\n    };\r\n    // Triggers event-resize handlers that have subscribed via the API\r\n    View.prototype.triggerEventResize = function (eventInstance, resizeDelta, undoFunc, el, ev) {\r\n        this.publiclyTrigger('eventResize', {\r\n            context: el[0],\r\n            args: [\r\n                eventInstance.toLegacy(),\r\n                resizeDelta,\r\n                undoFunc,\r\n                ev,\r\n                {},\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    /* Selection (time range)\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Selects a date span on the view. `start` and `end` are both Moments.\r\n    // `ev` is the native mouse event that begin the interaction.\r\n    View.prototype.select = function (footprint, ev) {\r\n        this.unselect(ev);\r\n        this.renderSelectionFootprint(footprint);\r\n        this.reportSelection(footprint, ev);\r\n    };\r\n    View.prototype.renderSelectionFootprint = function (footprint) {\r\n        if (this['renderSelection']) { // legacy method in custom view classes\r\n            this['renderSelection'](footprint.toLegacy(this.calendar));\r\n        }\r\n        else {\r\n            _super.prototype.renderSelectionFootprint.call(this, footprint);\r\n        }\r\n    };\r\n    // Called when a new selection is made. Updates internal state and triggers handlers.\r\n    View.prototype.reportSelection = function (footprint, ev) {\r\n        this.isSelected = true;\r\n        this.triggerSelect(footprint, ev);\r\n    };\r\n    // Triggers handlers to 'select'\r\n    View.prototype.triggerSelect = function (footprint, ev) {\r\n        var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n        this.publiclyTrigger('select', {\r\n            context: this,\r\n            args: [\r\n                dateProfile.start,\r\n                dateProfile.end,\r\n                ev,\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    // Undoes a selection. updates in the internal state and triggers handlers.\r\n    // `ev` is the native mouse event that began the interaction.\r\n    View.prototype.unselect = function (ev) {\r\n        if (this.isSelected) {\r\n            this.isSelected = false;\r\n            if (this['destroySelection']) {\r\n                this['destroySelection'](); // TODO: deprecate\r\n            }\r\n            this.unrenderSelection();\r\n            this.publiclyTrigger('unselect', {\r\n                context: this,\r\n                args: [ev, this]\r\n            });\r\n        }\r\n    };\r\n    /* Event Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.selectEventInstance = function (eventInstance) {\r\n        if (!this.selectedEventInstance ||\r\n            this.selectedEventInstance !== eventInstance) {\r\n            this.unselectEventInstance();\r\n            this.getEventSegs().forEach(function (seg) {\r\n                if (seg.footprint.eventInstance === eventInstance &&\r\n                    seg.el // necessary?\r\n                ) {\r\n                    seg.el.addClass('fc-selected');\r\n                }\r\n            });\r\n            this.selectedEventInstance = eventInstance;\r\n        }\r\n    };\r\n    View.prototype.unselectEventInstance = function () {\r\n        if (this.selectedEventInstance) {\r\n            this.getEventSegs().forEach(function (seg) {\r\n                if (seg.el) { // necessary?\r\n                    seg.el.removeClass('fc-selected');\r\n                }\r\n            });\r\n            this.selectedEventInstance = null;\r\n        }\r\n    };\r\n    View.prototype.isEventDefSelected = function (eventDef) {\r\n        // event references might change on refetchEvents(), while selectedEventInstance doesn't,\r\n        // so compare IDs\r\n        return this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;\r\n    };\r\n    /* Mouse / Touch Unselecting (time range & event unselection)\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // TODO: move consistently to down/start or up/end?\r\n    // TODO: don't kill previous selection if touch scrolling\r\n    View.prototype.handleDocumentMousedown = function (ev) {\r\n        if (util_1.isPrimaryMouseButton(ev)) {\r\n            this.processUnselect(ev);\r\n        }\r\n    };\r\n    View.prototype.processUnselect = function (ev) {\r\n        this.processRangeUnselect(ev);\r\n        this.processEventUnselect(ev);\r\n    };\r\n    View.prototype.processRangeUnselect = function (ev) {\r\n        var ignore;\r\n        // is there a time-range selection?\r\n        if (this.isSelected && this.opt('unselectAuto')) {\r\n            // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\r\n            ignore = this.opt('unselectCancel');\r\n            if (!ignore || !$(ev.target).closest(ignore).length) {\r\n                this.unselect(ev);\r\n            }\r\n        }\r\n    };\r\n    View.prototype.processEventUnselect = function (ev) {\r\n        if (this.selectedEventInstance) {\r\n            if (!$(ev.target).closest('.fc-selected').length) {\r\n                this.unselectEventInstance();\r\n            }\r\n        }\r\n    };\r\n    /* Triggers\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.triggerBaseRendered = function () {\r\n        this.publiclyTrigger('viewRender', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    View.prototype.triggerBaseUnrendered = function () {\r\n        this.publiclyTrigger('viewDestroy', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    // Triggers handlers to 'dayClick'\r\n    // Span has start/end of the clicked area. Only the start is useful.\r\n    View.prototype.triggerDayClick = function (footprint, dayEl, ev) {\r\n        var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n        this.publiclyTrigger('dayClick', {\r\n            context: dayEl,\r\n            args: [dateProfile.start, ev, this]\r\n        });\r\n    };\r\n    /* Date Utils\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // For DateComponent::getDayClasses\r\n    View.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n        return false;\r\n    };\r\n    // Arguments after name will be forwarded to a hypothetical function value\r\n    // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\r\n    // Always clone your objects if you fear mutation.\r\n    View.prototype.getUnzonedRangeOption = function (name) {\r\n        var val = this.opt(name);\r\n        if (typeof val === 'function') {\r\n            val = val.apply(null, Array.prototype.slice.call(arguments, 1));\r\n        }\r\n        if (val) {\r\n            return this.calendar.parseUnzonedRange(val);\r\n        }\r\n    };\r\n    /* Hidden Days\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Initializes internal variables related to calculating hidden days-of-week\r\n    View.prototype.initHiddenDays = function () {\r\n        var hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\r\n        var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\r\n        var dayCnt = 0;\r\n        var i;\r\n        if (this.opt('weekends') === false) {\r\n            hiddenDays.push(0, 6); // 0=sunday, 6=saturday\r\n        }\r\n        for (i = 0; i < 7; i++) {\r\n            if (!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)) {\r\n                dayCnt++;\r\n            }\r\n        }\r\n        if (!dayCnt) {\r\n            throw new Error('invalid hiddenDays'); // all days were hidden? bad.\r\n        }\r\n        this.isHiddenDayHash = isHiddenDayHash;\r\n    };\r\n    // Remove days from the beginning and end of the range that are computed as hidden.\r\n    // If the whole range is trimmed off, returns null\r\n    View.prototype.trimHiddenDays = function (inputUnzonedRange) {\r\n        var start = inputUnzonedRange.getStart();\r\n        var end = inputUnzonedRange.getEnd();\r\n        if (start) {\r\n            start = this.skipHiddenDays(start);\r\n        }\r\n        if (end) {\r\n            end = this.skipHiddenDays(end, -1, true);\r\n        }\r\n        if (start === null || end === null || start < end) {\r\n            return new UnzonedRange_1.default(start, end);\r\n        }\r\n        return null;\r\n    };\r\n    // Is the current day hidden?\r\n    // `day` is a day-of-week index (0-6), or a Moment\r\n    View.prototype.isHiddenDay = function (day) {\r\n        if (moment.isMoment(day)) {\r\n            day = day.day();\r\n        }\r\n        return this.isHiddenDayHash[day];\r\n    };\r\n    // Incrementing the current day until it is no longer a hidden day, returning a copy.\r\n    // DOES NOT CONSIDER validUnzonedRange!\r\n    // If the initial value of `date` is not a hidden day, don't do anything.\r\n    // Pass `isExclusive` as `true` if you are dealing with an end date.\r\n    // `inc` defaults to `1` (increment one day forward each time)\r\n    View.prototype.skipHiddenDays = function (date, inc, isExclusive) {\r\n        if (inc === void 0) { inc = 1; }\r\n        if (isExclusive === void 0) { isExclusive = false; }\r\n        var out = date.clone();\r\n        while (this.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]) {\r\n            out.add(inc, 'days');\r\n        }\r\n        return out;\r\n    };\r\n    return View;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = View;\r\nView.prototype.usesMinMaxTime = false;\r\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator_1.default;\r\nView.watch('displayingDates', ['isInDom', 'dateProfile'], function (deps) {\r\n    this.requestDateRender(deps.dateProfile);\r\n}, function () {\r\n    this.requestDateUnrender();\r\n});\r\nView.watch('displayingBusinessHours', ['displayingDates', 'businessHourGenerator'], function (deps) {\r\n    this.requestBusinessHoursRender(deps.businessHourGenerator);\r\n}, function () {\r\n    this.requestBusinessHoursUnrender();\r\n});\r\nView.watch('initialEvents', ['dateProfile'], function (deps) {\r\n    return this.fetchInitialEvents(deps.dateProfile);\r\n});\r\nView.watch('bindingEvents', ['initialEvents'], function (deps) {\r\n    this.setEvents(deps.initialEvents);\r\n    this.bindEventChanges();\r\n}, function () {\r\n    this.unbindEventChanges();\r\n    this.unsetEvents();\r\n});\r\nView.watch('displayingEvents', ['displayingDates', 'hasEvents'], function () {\r\n    this.requestEventsRender(this.get('currentEvents'));\r\n}, function () {\r\n    this.requestEventsUnrender();\r\n});\r\nView.watch('title', ['dateProfile'], function (deps) {\r\n    return (this.title = this.computeTitle(deps.dateProfile)); // assign to View for legacy reasons\r\n});\r\nView.watch('legacyDateProps', ['dateProfile'], function (deps) {\r\n    var calendar = this.calendar;\r\n    var dateProfile = deps.dateProfile;\r\n    // DEPRECATED, but we need to keep it updated...\r\n    this.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n    this.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n    this.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n    this.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n});\r\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer = /** @class */ (function () {\r\n    function EventRenderer(component, fillRenderer) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n        this.fillRenderer = fillRenderer;\r\n    }\r\n    EventRenderer.prototype.opt = function (name) {\r\n        return this.view.opt(name);\r\n    };\r\n    // Updates values that rely on options and also relate to range\r\n    EventRenderer.prototype.rangeUpdated = function () {\r\n        var displayEventTime;\r\n        var displayEventEnd;\r\n        this.eventTimeFormat =\r\n            this.opt('eventTimeFormat') ||\r\n                this.opt('timeFormat') || // deprecated\r\n                this.computeEventTimeFormat();\r\n        displayEventTime = this.opt('displayEventTime');\r\n        if (displayEventTime == null) {\r\n            displayEventTime = this.computeDisplayEventTime(); // might be based off of range\r\n        }\r\n        displayEventEnd = this.opt('displayEventEnd');\r\n        if (displayEventEnd == null) {\r\n            displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\r\n        }\r\n        this.displayEventTime = displayEventTime;\r\n        this.displayEventEnd = displayEventEnd;\r\n    };\r\n    EventRenderer.prototype.render = function (eventsPayload) {\r\n        var dateProfile = this.component._getDateProfile();\r\n        var eventDefId;\r\n        var instanceGroup;\r\n        var eventRanges;\r\n        var bgRanges = [];\r\n        var fgRanges = [];\r\n        for (eventDefId in eventsPayload) {\r\n            instanceGroup = eventsPayload[eventDefId];\r\n            eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);\r\n            if (instanceGroup.getEventDef().hasBgRendering()) {\r\n                bgRanges.push.apply(bgRanges, eventRanges);\r\n            }\r\n            else {\r\n                fgRanges.push.apply(fgRanges, eventRanges);\r\n            }\r\n        }\r\n        this.renderBgRanges(bgRanges);\r\n        this.renderFgRanges(fgRanges);\r\n    };\r\n    EventRenderer.prototype.unrender = function () {\r\n        this.unrenderBgRanges();\r\n        this.unrenderFgRanges();\r\n    };\r\n    EventRenderer.prototype.renderFgRanges = function (eventRanges) {\r\n        var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        // render an `.el` on each seg\r\n        // returns a subset of the segs. segs that were actually rendered\r\n        segs = this.renderFgSegEls(segs);\r\n        if (this.renderFgSegs(segs) !== false) { // no failure?\r\n            this.fgSegs = segs;\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderFgRanges = function () {\r\n        this.unrenderFgSegs(this.fgSegs || []);\r\n        this.fgSegs = null;\r\n    };\r\n    EventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n        var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        if (this.renderBgSegs(segs) !== false) { // no failure?\r\n            this.bgSegs = segs;\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderBgRanges = function () {\r\n        this.unrenderBgSegs();\r\n        this.bgSegs = null;\r\n    };\r\n    EventRenderer.prototype.getSegs = function () {\r\n        return (this.bgSegs || []).concat(this.fgSegs || []);\r\n    };\r\n    // Renders foreground event segments onto the grid\r\n    EventRenderer.prototype.renderFgSegs = function (segs) {\r\n        // subclasses must implement\r\n        // segs already has rendered els, and has been filtered.\r\n        return false; // signal failure if not implemented\r\n    };\r\n    // Unrenders all currently rendered foreground segments\r\n    EventRenderer.prototype.unrenderFgSegs = function (segs) {\r\n        // subclasses must implement\r\n    };\r\n    EventRenderer.prototype.renderBgSegs = function (segs) {\r\n        var _this = this;\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderSegs('bgEvent', segs, {\r\n                getClasses: function (seg) {\r\n                    return _this.getBgClasses(seg.footprint.eventDef);\r\n                },\r\n                getCss: function (seg) {\r\n                    return {\r\n                        'background-color': _this.getBgColor(seg.footprint.eventDef)\r\n                    };\r\n                },\r\n                filterEl: function (seg, el) {\r\n                    return _this.filterEventRenderEl(seg.footprint, el);\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            return false; // signal failure if no fillRenderer\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderBgSegs = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('bgEvent');\r\n        }\r\n    };\r\n    // Renders and assigns an `el` property for each foreground event segment.\r\n    // Only returns segments that successfully rendered.\r\n    EventRenderer.prototype.renderFgSegEls = function (segs, disableResizing) {\r\n        var _this = this;\r\n        if (disableResizing === void 0) { disableResizing = false; }\r\n        var hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender');\r\n        var html = '';\r\n        var renderedSegs = [];\r\n        var i;\r\n        if (segs.length) { // don't build an empty html string\r\n            // build a large concatenation of event segment HTML\r\n            for (i = 0; i < segs.length; i++) {\r\n                this.beforeFgSegHtml(segs[i]);\r\n                html += this.fgSegHtml(segs[i], disableResizing);\r\n            }\r\n            // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n            // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\r\n            $(html).each(function (i, node) {\r\n                var seg = segs[i];\r\n                var el = $(node);\r\n                if (hasEventRenderHandlers) { // optimization\r\n                    el = _this.filterEventRenderEl(seg.footprint, el);\r\n                }\r\n                if (el) {\r\n                    el.data('fc-seg', seg); // used by handlers\r\n                    seg.el = el;\r\n                    renderedSegs.push(seg);\r\n                }\r\n            });\r\n        }\r\n        return renderedSegs;\r\n    };\r\n    EventRenderer.prototype.beforeFgSegHtml = function (seg) {\r\n    };\r\n    // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\r\n    EventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        // subclasses should implement\r\n    };\r\n    // Generic utility for generating the HTML classNames for an event segment's element\r\n    EventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable) {\r\n        var classes = [\r\n            'fc-event',\r\n            seg.isStart ? 'fc-start' : 'fc-not-start',\r\n            seg.isEnd ? 'fc-end' : 'fc-not-end'\r\n        ].concat(this.getClasses(seg.footprint.eventDef));\r\n        if (isDraggable) {\r\n            classes.push('fc-draggable');\r\n        }\r\n        if (isResizable) {\r\n            classes.push('fc-resizable');\r\n        }\r\n        // event is currently selected? attach a className.\r\n        if (this.view.isEventDefSelected(seg.footprint.eventDef)) {\r\n            classes.push('fc-selected');\r\n        }\r\n        return classes;\r\n    };\r\n    // Given an event and the default element used for rendering, returns the element that should actually be used.\r\n    // Basically runs events and elements through the eventRender hook.\r\n    EventRenderer.prototype.filterEventRenderEl = function (eventFootprint, el) {\r\n        var legacy = eventFootprint.getEventLegacy();\r\n        var custom = this.view.publiclyTrigger('eventRender', {\r\n            context: legacy,\r\n            args: [legacy, el, this.view]\r\n        });\r\n        if (custom === false) { // means don't render at all\r\n            el = null;\r\n        }\r\n        else if (custom && custom !== true) {\r\n            el = $(custom);\r\n        }\r\n        return el;\r\n    };\r\n    // Compute the text that should be displayed on an event's element.\r\n    // `range` can be the Event object itself, or something range-like, with at least a `start`.\r\n    // If event times are disabled, or the event has no time, will return a blank string.\r\n    // If not specified, formatStr will default to the eventTimeFormat setting,\r\n    // and displayEnd will default to the displayEventEnd setting.\r\n    EventRenderer.prototype.getTimeText = function (eventFootprint, formatStr, displayEnd) {\r\n        return this._getTimeText(eventFootprint.eventInstance.dateProfile.start, eventFootprint.eventInstance.dateProfile.end, eventFootprint.componentFootprint.isAllDay, formatStr, displayEnd);\r\n    };\r\n    EventRenderer.prototype._getTimeText = function (start, end, isAllDay, formatStr, displayEnd) {\r\n        if (formatStr == null) {\r\n            formatStr = this.eventTimeFormat;\r\n        }\r\n        if (displayEnd == null) {\r\n            displayEnd = this.displayEventEnd;\r\n        }\r\n        if (this.displayEventTime && !isAllDay) {\r\n            if (displayEnd && end) {\r\n                return this.view.formatRange({ start: start, end: end }, false, // allDay\r\n                formatStr);\r\n            }\r\n            else {\r\n                return start.format(formatStr);\r\n            }\r\n        }\r\n        return '';\r\n    };\r\n    EventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('smallTimeFormat');\r\n    };\r\n    EventRenderer.prototype.computeDisplayEventTime = function () {\r\n        return true;\r\n    };\r\n    EventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return true;\r\n    };\r\n    EventRenderer.prototype.getBgClasses = function (eventDef) {\r\n        var classNames = this.getClasses(eventDef);\r\n        classNames.push('fc-bgevent');\r\n        return classNames;\r\n    };\r\n    EventRenderer.prototype.getClasses = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var classNames = [];\r\n        for (i = 0; i < objs.length; i++) {\r\n            classNames.push.apply(// append\r\n            classNames, objs[i].eventClassName || objs[i].className || []);\r\n        }\r\n        return classNames;\r\n    };\r\n    // Utility for generating event skin-related CSS properties\r\n    EventRenderer.prototype.getSkinCss = function (eventDef) {\r\n        return {\r\n            'background-color': this.getBgColor(eventDef),\r\n            'border-color': this.getBorderColor(eventDef),\r\n            color: this.getTextColor(eventDef)\r\n        };\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getBgColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventBackgroundColor || objs[i].eventColor ||\r\n                objs[i].backgroundColor || objs[i].color;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventBackgroundColor') || this.opt('eventColor');\r\n        }\r\n        return val;\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getBorderColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventBorderColor || objs[i].eventColor ||\r\n                objs[i].borderColor || objs[i].color;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventBorderColor') || this.opt('eventColor');\r\n        }\r\n        return val;\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getTextColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventTextColor ||\r\n                objs[i].textColor;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventTextColor');\r\n        }\r\n        return val;\r\n    };\r\n    EventRenderer.prototype.getStylingObjs = function (eventDef) {\r\n        var objs = this.getFallbackStylingObjs(eventDef);\r\n        objs.unshift(eventDef);\r\n        return objs;\r\n    };\r\n    EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {\r\n        return [eventDef.source];\r\n    };\r\n    EventRenderer.prototype.sortEventSegs = function (segs) {\r\n        segs.sort(util_1.proxy(this, 'compareEventSegs'));\r\n    };\r\n    // A cmp function for determining which segments should take visual priority\r\n    EventRenderer.prototype.compareEventSegs = function (seg1, seg2) {\r\n        var f1 = seg1.footprint;\r\n        var f2 = seg2.footprint;\r\n        var cf1 = f1.componentFootprint;\r\n        var cf2 = f2.componentFootprint;\r\n        var r1 = cf1.unzonedRange;\r\n        var r2 = cf2.unzonedRange;\r\n        return r1.startMs - r2.startMs || // earlier events go first\r\n            (r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first\r\n            cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)\r\n            util_1.compareByFieldSpecs(f1.eventDef, f2.eventDef, this.view.eventOrderSpecs, f1.eventDef.miscProps, f2.eventDef.miscProps);\r\n    };\r\n    return EventRenderer;\r\n}());\r\nexports.default = EventRenderer;\r\n\n\n/***/ }),\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment_ext_1 = __webpack_require__(11);\r\n// Plugin\r\n// -------------------------------------------------------------------------------------------------\r\nmoment_ext_1.newMomentProto.format = function () {\r\n    if (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\r\n        return formatDate(this, arguments[0]); // our extended formatting\r\n    }\r\n    if (this._ambigTime) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n    }\r\n    if (this._ambigZone) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n    }\r\n    if (this._fullCalendar) { // enhanced non-ambig moment?\r\n        // moment.format() doesn't ensure english, but we want to.\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this));\r\n    }\r\n    return moment_ext_1.oldMomentProto.format.apply(this, arguments);\r\n};\r\nmoment_ext_1.newMomentProto.toISOString = function () {\r\n    if (this._ambigTime) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n    }\r\n    if (this._ambigZone) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n    }\r\n    if (this._fullCalendar) { // enhanced non-ambig moment?\r\n        // depending on browser, moment might not output english. ensure english.\r\n        // https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\r\n        return moment_ext_1.oldMomentProto.toISOString.apply(englishMoment(this), arguments);\r\n    }\r\n    return moment_ext_1.oldMomentProto.toISOString.apply(this, arguments);\r\n};\r\nfunction englishMoment(mom) {\r\n    if (mom.locale() !== 'en') {\r\n        return mom.clone().locale('en');\r\n    }\r\n    return mom;\r\n}\r\n// Config\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nInserted between chunks in the fake (\"intermediate\") formatting string.\r\nImportant that it passes as whitespace (\\s) because moment often identifies non-standalone months\r\nvia a regexp with an \\s.\r\n*/\r\nvar PART_SEPARATOR = '\\u000b'; // vertical tab\r\n/*\r\nInserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\r\nbut rather, a \"special\" token that has custom rendering (see specialTokens map).\r\n*/\r\nvar SPECIAL_TOKEN_MARKER = '\\u001f'; // information separator 1\r\n/*\r\nInserted at the beginning and end of a span of text that must have non-zero numeric characters.\r\nHandling of these markers is done in a post-processing step at the very end of text rendering.\r\n*/\r\nvar MAYBE_MARKER = '\\u001e'; // information separator 2\r\nvar MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\r\n/*\r\nAddition formatting tokens we want recognized\r\n*/\r\nvar specialTokens = {\r\n    t: function (date) {\r\n        return moment_ext_1.oldMomentFormat(date, 'a').charAt(0);\r\n    },\r\n    T: function (date) {\r\n        return moment_ext_1.oldMomentFormat(date, 'A').charAt(0);\r\n    }\r\n};\r\n/*\r\nThe first characters of formatting tokens for units that are 1 day or larger.\r\n`value` is for ranking relative size (lower means bigger).\r\n`unit` is a normalized unit, used for comparing moments.\r\n*/\r\nvar largeTokenMap = {\r\n    Y: { value: 1, unit: 'year' },\r\n    M: { value: 2, unit: 'month' },\r\n    W: { value: 3, unit: 'week' },\r\n    w: { value: 3, unit: 'week' },\r\n    D: { value: 4, unit: 'day' },\r\n    d: { value: 4, unit: 'day' } // day of week\r\n};\r\n// Single Date Formatting\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats `date` with a Moment formatting string, but allow our non-zero areas and special token\r\n*/\r\nfunction formatDate(date, formatStr) {\r\n    return renderFakeFormatString(getParsedFormatString(formatStr).fakeFormatString, date);\r\n}\r\nexports.formatDate = formatDate;\r\n// Date Range Formatting\r\n// -------------------------------------------------------------------------------------------------\r\n// TODO: make it work with timezone offset\r\n/*\r\nUsing a formatting string meant for a single date, generate a range string, like\r\n\"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\r\nIf the dates are the same as far as the format string is concerned, just return a single\r\nrendering of one date, without any separator.\r\n*/\r\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\r\n    var localeData;\r\n    date1 = moment_ext_1.default.parseZone(date1);\r\n    date2 = moment_ext_1.default.parseZone(date2);\r\n    localeData = date1.localeData();\r\n    // Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\".\r\n    // BTW, this is not important for `formatDate` because it is impossible to put custom tokens\r\n    // or non-zero areas in Moment's localized format strings.\r\n    formatStr = localeData.longDateFormat(formatStr) || formatStr;\r\n    return renderParsedFormat(getParsedFormatString(formatStr), date1, date2, separator || ' - ', isRTL);\r\n}\r\nexports.formatRange = formatRange;\r\n/*\r\nRenders a range with an already-parsed format string.\r\n*/\r\nfunction renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\r\n    var sameUnits = parsedFormat.sameUnits;\r\n    var unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\r\n    var unzonedDate2 = date2.clone().stripZone(); // \"\r\n    var renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\r\n    var renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\r\n    var leftI;\r\n    var leftStr = '';\r\n    var rightI;\r\n    var rightStr = '';\r\n    var middleI;\r\n    var middleStr1 = '';\r\n    var middleStr2 = '';\r\n    var middleStr = '';\r\n    // Start at the leftmost side of the formatting string and continue until you hit a token\r\n    // that is not the same between dates.\r\n    for (leftI = 0; leftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI])); leftI++) {\r\n        leftStr += renderedParts1[leftI];\r\n    }\r\n    // Similarly, start at the rightmost side of the formatting string and move left\r\n    for (rightI = sameUnits.length - 1; rightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI])); rightI--) {\r\n        // If current chunk is on the boundary of unique date-content, and is a special-case\r\n        // date-formatting postfix character, then don't consume it. Consider it unique date-content.\r\n        // TODO: make configurable\r\n        if (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\r\n            break;\r\n        }\r\n        rightStr = renderedParts1[rightI] + rightStr;\r\n    }\r\n    // The area in the middle is different for both of the dates.\r\n    // Collect them distinctly so we can jam them together later.\r\n    for (middleI = leftI; middleI <= rightI; middleI++) {\r\n        middleStr1 += renderedParts1[middleI];\r\n        middleStr2 += renderedParts2[middleI];\r\n    }\r\n    if (middleStr1 || middleStr2) {\r\n        if (isRTL) {\r\n            middleStr = middleStr2 + separator + middleStr1;\r\n        }\r\n        else {\r\n            middleStr = middleStr1 + separator + middleStr2;\r\n        }\r\n    }\r\n    return processMaybeMarkers(leftStr + middleStr + rightStr);\r\n}\r\n// Format String Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nvar parsedFormatStrCache = {};\r\n/*\r\nReturns a parsed format string, leveraging a cache.\r\n*/\r\nfunction getParsedFormatString(formatStr) {\r\n    return parsedFormatStrCache[formatStr] ||\r\n        (parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\r\n}\r\n/*\r\nParses a format string into the following:\r\n- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\r\n- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \"day\"),\r\n  that indicates how similar a range's start & end must be in order to share the same formatted text.\r\n  If not a token, then the value is null.\r\n  Always a flat array (not nested liked \"chunks\").\r\n*/\r\nfunction parseFormatString(formatStr) {\r\n    var chunks = chunkFormatString(formatStr);\r\n    return {\r\n        fakeFormatString: buildFakeFormatString(chunks),\r\n        sameUnits: buildSameUnits(chunks)\r\n    };\r\n}\r\n/*\r\nBreak the formatting string into an array of chunks.\r\nA 'maybe' chunk will have nested chunks.\r\n*/\r\nfunction chunkFormatString(formatStr) {\r\n    var chunks = [];\r\n    var match;\r\n    // TODO: more descrimination\r\n    // \\4 is a backreference to the first character of a multi-character set.\r\n    var chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\r\n    while ((match = chunker.exec(formatStr))) {\r\n        if (match[1]) { // a literal string inside [ ... ]\r\n            chunks.push.apply(chunks, // append\r\n            splitStringLiteral(match[1]));\r\n        }\r\n        else if (match[2]) { // non-zero formatting inside ( ... )\r\n            chunks.push({ maybe: chunkFormatString(match[2]) });\r\n        }\r\n        else if (match[3]) { // a formatting token\r\n            chunks.push({ token: match[3] });\r\n        }\r\n        else if (match[5]) { // an unenclosed literal string\r\n            chunks.push.apply(chunks, // append\r\n            splitStringLiteral(match[5]));\r\n        }\r\n    }\r\n    return chunks;\r\n}\r\n/*\r\nPotentially splits a literal-text string into multiple parts. For special cases.\r\n*/\r\nfunction splitStringLiteral(s) {\r\n    if (s === '. ') {\r\n        return ['.', ' ']; // for locales with periods bound to the end of each year/month/date\r\n    }\r\n    else {\r\n        return [s];\r\n    }\r\n}\r\n/*\r\nGiven chunks parsed from a real format string, generate a fake (aka \"intermediate\") format string with special control\r\ncharacters that will eventually be given to moment for formatting, and then post-processed.\r\n*/\r\nfunction buildFakeFormatString(chunks) {\r\n    var parts = [];\r\n    var i;\r\n    var chunk;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (typeof chunk === 'string') {\r\n            parts.push('[' + chunk + ']');\r\n        }\r\n        else if (chunk.token) {\r\n            if (chunk.token in specialTokens) {\r\n                parts.push(SPECIAL_TOKEN_MARKER + // useful during post-processing\r\n                    '[' + chunk.token + ']' // preserve as literal text\r\n                );\r\n            }\r\n            else {\r\n                parts.push(chunk.token); // unprotected text implies a format string\r\n            }\r\n        }\r\n        else if (chunk.maybe) {\r\n            parts.push(MAYBE_MARKER + // useful during post-processing\r\n                buildFakeFormatString(chunk.maybe) +\r\n                MAYBE_MARKER);\r\n        }\r\n    }\r\n    return parts.join(PART_SEPARATOR);\r\n}\r\n/*\r\nGiven parsed chunks from a real formatting string, generates an array of unit strings (like \"day\") that indicate\r\nin which regard two dates must be similar in order to share range formatting text.\r\nThe `chunks` can be nested (because of \"maybe\" chunks), however, the returned array will be flat.\r\n*/\r\nfunction buildSameUnits(chunks) {\r\n    var units = [];\r\n    var i;\r\n    var chunk;\r\n    var tokenInfo;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (chunk.token) {\r\n            tokenInfo = largeTokenMap[chunk.token.charAt(0)];\r\n            units.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\r\n        }\r\n        else if (chunk.maybe) {\r\n            units.push.apply(units, // append\r\n            buildSameUnits(chunk.maybe));\r\n        }\r\n        else {\r\n            units.push(null);\r\n        }\r\n    }\r\n    return units;\r\n}\r\n// Rendering to text\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats a date with a fake format string, post-processes the control characters, then returns.\r\n*/\r\nfunction renderFakeFormatString(fakeFormatString, date) {\r\n    return processMaybeMarkers(renderFakeFormatStringParts(fakeFormatString, date).join(''));\r\n}\r\n/*\r\nFormats a date into parts that will have been post-processed, EXCEPT for the \"maybe\" markers.\r\n*/\r\nfunction renderFakeFormatStringParts(fakeFormatString, date) {\r\n    var parts = [];\r\n    var fakeRender = moment_ext_1.oldMomentFormat(date, fakeFormatString);\r\n    var fakeParts = fakeRender.split(PART_SEPARATOR);\r\n    var i;\r\n    var fakePart;\r\n    for (i = 0; i < fakeParts.length; i++) {\r\n        fakePart = fakeParts[i];\r\n        if (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\r\n            parts.push(\r\n            // the literal string IS the token's name.\r\n            // call special token's registered function.\r\n            specialTokens[fakePart.substring(1)](date));\r\n        }\r\n        else {\r\n            parts.push(fakePart);\r\n        }\r\n    }\r\n    return parts;\r\n}\r\n/*\r\nAccepts an almost-finally-formatted string and processes the \"maybe\" control characters, returning a new string.\r\n*/\r\nfunction processMaybeMarkers(s) {\r\n    return s.replace(MAYBE_REGEXP, function (m0, m1) {\r\n        if (m1.match(/[1-9]/)) { // any non-zero numeric characters?\r\n            return m1;\r\n        }\r\n        else {\r\n            return '';\r\n        }\r\n    });\r\n}\r\n// Misc Utils\r\n// -------------------------------------------------------------------------------------------------\r\n/*\r\nReturns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\r\n*/\r\nfunction queryMostGranularFormatUnit(formatStr) {\r\n    var chunks = chunkFormatString(formatStr);\r\n    var i;\r\n    var chunk;\r\n    var candidate;\r\n    var best;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (chunk.token) {\r\n            candidate = largeTokenMap[chunk.token.charAt(0)];\r\n            if (candidate) {\r\n                if (!best || candidate.value > best.value) {\r\n                    best = candidate;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (best) {\r\n        return best.unit;\r\n    }\r\n    return null;\r\n}\r\nexports.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\r\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange = /** @class */ (function () {\r\n    function EventRange(unzonedRange, eventDef, eventInstance) {\r\n        this.unzonedRange = unzonedRange;\r\n        this.eventDef = eventDef;\r\n        if (eventInstance) {\r\n            this.eventInstance = eventInstance;\r\n        }\r\n    }\r\n    return EventRange;\r\n}());\r\nexports.default = EventRange;\r\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Model = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Model, _super);\r\n    function Model() {\r\n        var _this = _super.call(this) || this;\r\n        _this._watchers = {};\r\n        _this._props = {};\r\n        _this.applyGlobalWatchers();\r\n        _this.constructed();\r\n        return _this;\r\n    }\r\n    Model.watch = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        // subclasses should make a masked-copy of the superclass's map\r\n        // TODO: write test\r\n        if (!this.prototype.hasOwnProperty('_globalWatchArgs')) {\r\n            this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs);\r\n        }\r\n        this.prototype._globalWatchArgs[name] = args;\r\n    };\r\n    Model.prototype.constructed = function () {\r\n        // useful for monkeypatching. TODO: BaseClass?\r\n    };\r\n    Model.prototype.applyGlobalWatchers = function () {\r\n        var map = this._globalWatchArgs;\r\n        var name;\r\n        for (name in map) {\r\n            this.watch.apply(this, [name].concat(map[name]));\r\n        }\r\n    };\r\n    Model.prototype.has = function (name) {\r\n        return name in this._props;\r\n    };\r\n    Model.prototype.get = function (name) {\r\n        if (name === undefined) {\r\n            return this._props;\r\n        }\r\n        return this._props[name];\r\n    };\r\n    Model.prototype.set = function (name, val) {\r\n        var newProps;\r\n        if (typeof name === 'string') {\r\n            newProps = {};\r\n            newProps[name] = val === undefined ? null : val;\r\n        }\r\n        else {\r\n            newProps = name;\r\n        }\r\n        this.setProps(newProps);\r\n    };\r\n    Model.prototype.reset = function (newProps) {\r\n        var oldProps = this._props;\r\n        var changeset = {}; // will have undefined's to signal unsets\r\n        var name;\r\n        for (name in oldProps) {\r\n            changeset[name] = undefined;\r\n        }\r\n        for (name in newProps) {\r\n            changeset[name] = newProps[name];\r\n        }\r\n        this.setProps(changeset);\r\n    };\r\n    Model.prototype.unset = function (name) {\r\n        var newProps = {};\r\n        var names;\r\n        var i;\r\n        if (typeof name === 'string') {\r\n            names = [name];\r\n        }\r\n        else {\r\n            names = name;\r\n        }\r\n        for (i = 0; i < names.length; i++) {\r\n            newProps[names[i]] = undefined;\r\n        }\r\n        this.setProps(newProps);\r\n    };\r\n    Model.prototype.setProps = function (newProps) {\r\n        var changedProps = {};\r\n        var changedCnt = 0;\r\n        var name;\r\n        var val;\r\n        for (name in newProps) {\r\n            val = newProps[name];\r\n            // a change in value?\r\n            // if an object, don't check equality, because might have been mutated internally.\r\n            // TODO: eventually enforce immutability.\r\n            if (typeof val === 'object' ||\r\n                val !== this._props[name]) {\r\n                changedProps[name] = val;\r\n                changedCnt++;\r\n            }\r\n        }\r\n        if (changedCnt) {\r\n            this.trigger('before:batchChange', changedProps);\r\n            for (name in changedProps) {\r\n                val = changedProps[name];\r\n                this.trigger('before:change', name, val);\r\n                this.trigger('before:change:' + name, val);\r\n            }\r\n            for (name in changedProps) {\r\n                val = changedProps[name];\r\n                if (val === undefined) {\r\n                    delete this._props[name];\r\n                }\r\n                else {\r\n                    this._props[name] = val;\r\n                }\r\n                this.trigger('change:' + name, val);\r\n                this.trigger('change', name, val);\r\n            }\r\n            this.trigger('batchChange', changedProps);\r\n        }\r\n    };\r\n    Model.prototype.watch = function (name, depList, startFunc, stopFunc) {\r\n        var _this = this;\r\n        this.unwatch(name);\r\n        this._watchers[name] = this._watchDeps(depList, function (deps) {\r\n            var res = startFunc.call(_this, deps);\r\n            if (res && res.then) {\r\n                _this.unset(name); // put in an unset state while resolving\r\n                res.then(function (val) {\r\n                    _this.set(name, val);\r\n                });\r\n            }\r\n            else {\r\n                _this.set(name, res);\r\n            }\r\n        }, function (deps) {\r\n            _this.unset(name);\r\n            if (stopFunc) {\r\n                stopFunc.call(_this, deps);\r\n            }\r\n        });\r\n    };\r\n    Model.prototype.unwatch = function (name) {\r\n        var watcher = this._watchers[name];\r\n        if (watcher) {\r\n            delete this._watchers[name];\r\n            watcher.teardown();\r\n        }\r\n    };\r\n    Model.prototype._watchDeps = function (depList, startFunc, stopFunc) {\r\n        var _this = this;\r\n        var queuedChangeCnt = 0;\r\n        var depCnt = depList.length;\r\n        var satisfyCnt = 0;\r\n        var values = {}; // what's passed as the `deps` arguments\r\n        var bindTuples = []; // array of [ eventName, handlerFunc ] arrays\r\n        var isCallingStop = false;\r\n        var onBeforeDepChange = function (depName, val, isOptional) {\r\n            queuedChangeCnt++;\r\n            if (queuedChangeCnt === 1) { // first change to cause a \"stop\" ?\r\n                if (satisfyCnt === depCnt) { // all deps previously satisfied?\r\n                    isCallingStop = true;\r\n                    stopFunc(values);\r\n                    isCallingStop = false;\r\n                }\r\n            }\r\n        };\r\n        var onDepChange = function (depName, val, isOptional) {\r\n            if (val === undefined) { // unsetting a value?\r\n                // required dependency that was previously set?\r\n                if (!isOptional && values[depName] !== undefined) {\r\n                    satisfyCnt--;\r\n                }\r\n                delete values[depName];\r\n            }\r\n            else { // setting a value?\r\n                // required dependency that was previously unset?\r\n                if (!isOptional && values[depName] === undefined) {\r\n                    satisfyCnt++;\r\n                }\r\n                values[depName] = val;\r\n            }\r\n            queuedChangeCnt--;\r\n            if (!queuedChangeCnt) { // last change to cause a \"start\"?\r\n                // now finally satisfied or satisfied all along?\r\n                if (satisfyCnt === depCnt) {\r\n                    // if the stopFunc initiated another value change, ignore it.\r\n                    // it will be processed by another change event anyway.\r\n                    if (!isCallingStop) {\r\n                        startFunc(values);\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        // intercept for .on() that remembers handlers\r\n        var bind = function (eventName, handler) {\r\n            _this.on(eventName, handler);\r\n            bindTuples.push([eventName, handler]);\r\n        };\r\n        // listen to dependency changes\r\n        depList.forEach(function (depName) {\r\n            var isOptional = false;\r\n            if (depName.charAt(0) === '?') { // TODO: more DRY\r\n                depName = depName.substring(1);\r\n                isOptional = true;\r\n            }\r\n            bind('before:change:' + depName, function (val) {\r\n                onBeforeDepChange(depName, val, isOptional);\r\n            });\r\n            bind('change:' + depName, function (val) {\r\n                onDepChange(depName, val, isOptional);\r\n            });\r\n        });\r\n        // process current dependency values\r\n        depList.forEach(function (depName) {\r\n            var isOptional = false;\r\n            if (depName.charAt(0) === '?') { // TODO: more DRY\r\n                depName = depName.substring(1);\r\n                isOptional = true;\r\n            }\r\n            if (_this.has(depName)) {\r\n                values[depName] = _this.get(depName);\r\n                satisfyCnt++;\r\n            }\r\n            else if (isOptional) {\r\n                satisfyCnt++;\r\n            }\r\n        });\r\n        // initially satisfied\r\n        if (satisfyCnt === depCnt) {\r\n            startFunc(values);\r\n        }\r\n        return {\r\n            teardown: function () {\r\n                // remove all handlers\r\n                for (var i = 0; i < bindTuples.length; i++) {\r\n                    _this.off(bindTuples[i][0], bindTuples[i][1]);\r\n                }\r\n                bindTuples = null;\r\n                // was satisfied, so call stopFunc\r\n                if (satisfyCnt === depCnt) {\r\n                    stopFunc();\r\n                }\r\n            },\r\n            flash: function () {\r\n                if (satisfyCnt === depCnt) {\r\n                    stopFunc();\r\n                    startFunc(values);\r\n                }\r\n            }\r\n        };\r\n    };\r\n    Model.prototype.flash = function (name) {\r\n        var watcher = this._watchers[name];\r\n        if (watcher) {\r\n            watcher.flash();\r\n        }\r\n    };\r\n    return Model;\r\n}(Class_1.default));\r\nexports.default = Model;\r\nModel.prototype._globalWatchArgs = {}; // mutation protection in Model.watch\r\nEmitterMixin_1.default.mixInto(Model);\r\nListenerMixin_1.default.mixInto(Model);\r\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n  import { default as ParsableModelMixin, ParsableModelInterface } from './ParsableModelMixin'\r\nin class:\r\n  applyProps: ParsableModelInterface['applyProps']\r\n  applyManualStandardProps: ParsableModelInterface['applyManualStandardProps']\r\n  applyMiscProps: ParsableModelInterface['applyMiscProps']\r\n  isStandardProp: ParsableModelInterface['isStandardProp']\r\n  static defineStandardProps = ParsableModelMixin.defineStandardProps\r\n  static copyVerbatimStandardProps = ParsableModelMixin.copyVerbatimStandardProps\r\nafter class:\r\n  ParsableModelMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar ParsableModelMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ParsableModelMixin, _super);\r\n    function ParsableModelMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ParsableModelMixin.defineStandardProps = function (propDefs) {\r\n        var proto = this.prototype;\r\n        if (!proto.hasOwnProperty('standardPropMap')) {\r\n            proto.standardPropMap = Object.create(proto.standardPropMap);\r\n        }\r\n        util_1.copyOwnProps(propDefs, proto.standardPropMap);\r\n    };\r\n    ParsableModelMixin.copyVerbatimStandardProps = function (src, dest) {\r\n        var map = this.prototype.standardPropMap;\r\n        var propName;\r\n        for (propName in map) {\r\n            if (src[propName] != null && // in the src object?\r\n                map[propName] === true // false means \"copy verbatim\"\r\n            ) {\r\n                dest[propName] = src[propName];\r\n            }\r\n        }\r\n    };\r\n    /*\r\n    Returns true/false for success.\r\n    Meant to be only called ONCE, at object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyProps = function (rawProps) {\r\n        var standardPropMap = this.standardPropMap;\r\n        var manualProps = {};\r\n        var miscProps = {};\r\n        var propName;\r\n        for (propName in rawProps) {\r\n            if (standardPropMap[propName] === true) { // copy verbatim\r\n                this[propName] = rawProps[propName];\r\n            }\r\n            else if (standardPropMap[propName] === false) {\r\n                manualProps[propName] = rawProps[propName];\r\n            }\r\n            else {\r\n                miscProps[propName] = rawProps[propName];\r\n            }\r\n        }\r\n        this.applyMiscProps(miscProps);\r\n        return this.applyManualStandardProps(manualProps);\r\n    };\r\n    /*\r\n    If subclasses override, they must call this supermethod and return the boolean response.\r\n    Meant to be only called ONCE, at object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyManualStandardProps = function (rawProps) {\r\n        return true;\r\n    };\r\n    /*\r\n    Can be called even after initial object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyMiscProps = function (rawProps) {\r\n        // subclasses can implement\r\n    };\r\n    /*\r\n    TODO: why is this a method when defineStandardProps is static\r\n    */\r\n    ParsableModelMixin.prototype.isStandardProp = function (propName) {\r\n        return propName in this.standardPropMap;\r\n    };\r\n    return ParsableModelMixin;\r\n}(Mixin_1.default));\r\nexports.default = ParsableModelMixin;\r\nParsableModelMixin.prototype.standardPropMap = {}; // will be cloned by defineStandardProps\r\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventInstance = /** @class */ (function () {\r\n    function EventInstance(def, dateProfile) {\r\n        this.def = def;\r\n        this.dateProfile = dateProfile;\r\n    }\r\n    EventInstance.prototype.toLegacy = function () {\r\n        var dateProfile = this.dateProfile;\r\n        var obj = this.def.toLegacy();\r\n        obj.start = dateProfile.start.clone();\r\n        obj.end = dateProfile.end ? dateProfile.end.clone() : null;\r\n        return obj;\r\n    };\r\n    return EventInstance;\r\n}());\r\nexports.default = EventInstance;\r\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar RecurringEventDef = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RecurringEventDef, _super);\r\n    function RecurringEventDef() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RecurringEventDef.prototype.isAllDay = function () {\r\n        return !this.startTime && !this.endTime;\r\n    };\r\n    RecurringEventDef.prototype.buildInstances = function (unzonedRange) {\r\n        var calendar = this.source.calendar;\r\n        var unzonedDate = unzonedRange.getStart();\r\n        var unzonedEnd = unzonedRange.getEnd();\r\n        var zonedDayStart;\r\n        var instanceStart;\r\n        var instanceEnd;\r\n        var instances = [];\r\n        while (unzonedDate.isBefore(unzonedEnd)) {\r\n            // if everyday, or this particular day-of-week\r\n            if (!this.dowHash || this.dowHash[unzonedDate.day()]) {\r\n                zonedDayStart = calendar.applyTimezone(unzonedDate);\r\n                instanceStart = zonedDayStart.clone();\r\n                instanceEnd = null;\r\n                if (this.startTime) {\r\n                    instanceStart.time(this.startTime);\r\n                }\r\n                else {\r\n                    instanceStart.stripTime();\r\n                }\r\n                if (this.endTime) {\r\n                    instanceEnd = zonedDayStart.clone().time(this.endTime);\r\n                }\r\n                instances.push(new EventInstance_1.default(this, // definition\r\n                new EventDateProfile_1.default(instanceStart, instanceEnd, calendar)));\r\n            }\r\n            unzonedDate.add(1, 'days');\r\n        }\r\n        return instances;\r\n    };\r\n    RecurringEventDef.prototype.setDow = function (dowNumbers) {\r\n        if (!this.dowHash) {\r\n            this.dowHash = {};\r\n        }\r\n        for (var i = 0; i < dowNumbers.length; i++) {\r\n            this.dowHash[dowNumbers[i]] = true;\r\n        }\r\n    };\r\n    RecurringEventDef.prototype.clone = function () {\r\n        var def = _super.prototype.clone.call(this);\r\n        if (def.startTime) {\r\n            def.startTime = moment.duration(this.startTime);\r\n        }\r\n        if (def.endTime) {\r\n            def.endTime = moment.duration(this.endTime);\r\n        }\r\n        if (this.dowHash) {\r\n            def.dowHash = $.extend({}, this.dowHash);\r\n        }\r\n        return def;\r\n    };\r\n    return RecurringEventDef;\r\n}(EventDef_1.default));\r\nexports.default = RecurringEventDef;\r\n/*\r\nHACK to work with TypeScript mixins\r\nNOTE: if super-method fails, should still attempt to apply\r\n*/\r\nRecurringEventDef.prototype.applyProps = function (rawProps) {\r\n    var superSuccess = EventDef_1.default.prototype.applyProps.call(this, rawProps);\r\n    if (rawProps.start) {\r\n        this.startTime = moment.duration(rawProps.start);\r\n    }\r\n    if (rawProps.end) {\r\n        this.endTime = moment.duration(rawProps.end);\r\n    }\r\n    if (rawProps.dow) {\r\n        this.setDow(rawProps.dow);\r\n    }\r\n    return superSuccess;\r\n};\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nRecurringEventDef.defineStandardProps({\r\n    start: false,\r\n    end: false,\r\n    dow: false\r\n});\r\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator = /** @class */ (function () {\r\n    function DateProfileGenerator(_view) {\r\n        this._view = _view;\r\n    }\r\n    DateProfileGenerator.prototype.opt = function (name) {\r\n        return this._view.opt(name);\r\n    };\r\n    DateProfileGenerator.prototype.trimHiddenDays = function (unzonedRange) {\r\n        return this._view.trimHiddenDays(unzonedRange);\r\n    };\r\n    DateProfileGenerator.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n        return this._view.calendar.msToUtcMoment(ms, forceAllDay);\r\n    };\r\n    /* Date Range Computation\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\r\n    DateProfileGenerator.prototype.buildPrev = function (currentDateProfile) {\r\n        var prevDate = currentDateProfile.date.clone()\r\n            .startOf(currentDateProfile.currentRangeUnit)\r\n            .subtract(currentDateProfile.dateIncrement);\r\n        return this.build(prevDate, -1);\r\n    };\r\n    // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\r\n    DateProfileGenerator.prototype.buildNext = function (currentDateProfile) {\r\n        var nextDate = currentDateProfile.date.clone()\r\n            .startOf(currentDateProfile.currentRangeUnit)\r\n            .add(currentDateProfile.dateIncrement);\r\n        return this.build(nextDate, 1);\r\n    };\r\n    // Builds a structure holding dates/ranges for rendering around the given date.\r\n    // Optional direction param indicates whether the date is being incremented/decremented\r\n    // from its previous value. decremented = -1, incremented = 1 (default).\r\n    DateProfileGenerator.prototype.build = function (date, direction, forceToValid) {\r\n        if (forceToValid === void 0) { forceToValid = false; }\r\n        var isDateAllDay = !date.hasTime();\r\n        var validUnzonedRange;\r\n        var minTime = null;\r\n        var maxTime = null;\r\n        var currentInfo;\r\n        var isRangeAllDay;\r\n        var renderUnzonedRange;\r\n        var activeUnzonedRange;\r\n        var isValid;\r\n        validUnzonedRange = this.buildValidRange();\r\n        validUnzonedRange = this.trimHiddenDays(validUnzonedRange);\r\n        if (forceToValid) {\r\n            date = this.msToUtcMoment(validUnzonedRange.constrainDate(date), // returns MS\r\n            isDateAllDay);\r\n        }\r\n        currentInfo = this.buildCurrentRangeInfo(date, direction);\r\n        isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\r\n        renderUnzonedRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.unzonedRange), currentInfo.unit, isRangeAllDay);\r\n        renderUnzonedRange = this.trimHiddenDays(renderUnzonedRange);\r\n        activeUnzonedRange = renderUnzonedRange.clone();\r\n        if (!this.opt('showNonCurrentDates')) {\r\n            activeUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);\r\n        }\r\n        minTime = moment.duration(this.opt('minTime'));\r\n        maxTime = moment.duration(this.opt('maxTime'));\r\n        activeUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);\r\n        activeUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange); // might return null\r\n        if (activeUnzonedRange) {\r\n            date = this.msToUtcMoment(activeUnzonedRange.constrainDate(date), // returns MS\r\n            isDateAllDay);\r\n        }\r\n        // it's invalid if the originally requested date is not contained,\r\n        // or if the range is completely outside of the valid range.\r\n        isValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);\r\n        return {\r\n            // constraint for where prev/next operations can go and where events can be dragged/resized to.\r\n            // an object with optional start and end properties.\r\n            validUnzonedRange: validUnzonedRange,\r\n            // range the view is formally responsible for.\r\n            // for example, a month view might have 1st-31st, excluding padded dates\r\n            currentUnzonedRange: currentInfo.unzonedRange,\r\n            // name of largest unit being displayed, like \"month\" or \"week\"\r\n            currentRangeUnit: currentInfo.unit,\r\n            isRangeAllDay: isRangeAllDay,\r\n            // dates that display events and accept drag-n-drop\r\n            // will be `null` if no dates accept events\r\n            activeUnzonedRange: activeUnzonedRange,\r\n            // date range with a rendered skeleton\r\n            // includes not-active days that need some sort of DOM\r\n            renderUnzonedRange: renderUnzonedRange,\r\n            // Duration object that denotes the first visible time of any given day\r\n            minTime: minTime,\r\n            // Duration object that denotes the exclusive visible end time of any given day\r\n            maxTime: maxTime,\r\n            isValid: isValid,\r\n            date: date,\r\n            // how far the current date will move for a prev/next operation\r\n            dateIncrement: this.buildDateIncrement(currentInfo.duration)\r\n            // pass a fallback (might be null) ^\r\n        };\r\n    };\r\n    // Builds an object with optional start/end properties.\r\n    // Indicates the minimum/maximum dates to display.\r\n    // not responsible for trimming hidden days.\r\n    DateProfileGenerator.prototype.buildValidRange = function () {\r\n        return this._view.getUnzonedRangeOption('validRange', this._view.calendar.getNow()) ||\r\n            new UnzonedRange_1.default(); // completely open-ended\r\n    };\r\n    // Builds a structure with info about the \"current\" range, the range that is\r\n    // highlighted as being the current month for example.\r\n    // See build() for a description of `direction`.\r\n    // Guaranteed to have `range` and `unit` properties. `duration` is optional.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\r\n        var viewSpec = this._view.viewSpec;\r\n        var duration = null;\r\n        var unit = null;\r\n        var unzonedRange = null;\r\n        var dayCount;\r\n        if (viewSpec.duration) {\r\n            duration = viewSpec.duration;\r\n            unit = viewSpec.durationUnit;\r\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n        }\r\n        else if ((dayCount = this.opt('dayCount'))) {\r\n            unit = 'day';\r\n            unzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);\r\n        }\r\n        else if ((unzonedRange = this.buildCustomVisibleRange(date))) {\r\n            unit = util_1.computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());\r\n        }\r\n        else {\r\n            duration = this.getFallbackDuration();\r\n            unit = util_1.computeGreatestUnit(duration);\r\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n        }\r\n        return { duration: duration, unit: unit, unzonedRange: unzonedRange };\r\n    };\r\n    DateProfileGenerator.prototype.getFallbackDuration = function () {\r\n        return moment.duration({ days: 1 });\r\n    };\r\n    // Returns a new activeUnzonedRange to have time values (un-ambiguate)\r\n    // minTime or maxTime causes the range to expand.\r\n    DateProfileGenerator.prototype.adjustActiveRange = function (unzonedRange, minTime, maxTime) {\r\n        var start = unzonedRange.getStart();\r\n        var end = unzonedRange.getEnd();\r\n        if (this._view.usesMinMaxTime) {\r\n            if (minTime < 0) {\r\n                start.time(0).add(minTime);\r\n            }\r\n            if (maxTime > 24 * 60 * 60 * 1000) { // beyond 24 hours?\r\n                end.time(maxTime - (24 * 60 * 60 * 1000));\r\n            }\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Builds the \"current\" range when it is specified as an explicit duration.\r\n    // `unit` is the already-computed computeGreatestUnit value of duration.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\r\n        var alignment = this.opt('dateAlignment');\r\n        var dateIncrementInput;\r\n        var dateIncrementDuration;\r\n        var start;\r\n        var end;\r\n        var res;\r\n        // compute what the alignment should be\r\n        if (!alignment) {\r\n            dateIncrementInput = this.opt('dateIncrement');\r\n            if (dateIncrementInput) {\r\n                dateIncrementDuration = moment.duration(dateIncrementInput);\r\n                // use the smaller of the two units\r\n                if (dateIncrementDuration < duration) {\r\n                    alignment = util_1.computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\r\n                }\r\n                else {\r\n                    alignment = unit;\r\n                }\r\n            }\r\n            else {\r\n                alignment = unit;\r\n            }\r\n        }\r\n        // if the view displays a single day or smaller\r\n        if (duration.as('days') <= 1) {\r\n            if (this._view.isHiddenDay(start)) {\r\n                start = this._view.skipHiddenDays(start, direction);\r\n                start.startOf('day');\r\n            }\r\n        }\r\n        function computeRes() {\r\n            start = date.clone().startOf(alignment);\r\n            end = start.clone().add(duration);\r\n            res = new UnzonedRange_1.default(start, end);\r\n        }\r\n        computeRes();\r\n        // if range is completely enveloped by hidden days, go past the hidden days\r\n        if (!this.trimHiddenDays(res)) {\r\n            date = this._view.skipHiddenDays(date, direction);\r\n            computeRes();\r\n        }\r\n        return res;\r\n    };\r\n    // Builds the \"current\" range when a dayCount is specified.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\r\n        var customAlignment = this.opt('dateAlignment');\r\n        var runningCount = 0;\r\n        var start;\r\n        var end;\r\n        if (customAlignment || direction !== -1) {\r\n            start = date.clone();\r\n            if (customAlignment) {\r\n                start.startOf(customAlignment);\r\n            }\r\n            start.startOf('day');\r\n            start = this._view.skipHiddenDays(start);\r\n            end = start.clone();\r\n            do {\r\n                end.add(1, 'day');\r\n                if (!this._view.isHiddenDay(end)) {\r\n                    runningCount++;\r\n                }\r\n            } while (runningCount < dayCount);\r\n        }\r\n        else {\r\n            end = date.clone().startOf('day').add(1, 'day');\r\n            end = this._view.skipHiddenDays(end, -1, true);\r\n            start = end.clone();\r\n            do {\r\n                start.add(-1, 'day');\r\n                if (!this._view.isHiddenDay(start)) {\r\n                    runningCount++;\r\n                }\r\n            } while (runningCount < dayCount);\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Builds a normalized range object for the \"visible\" range,\r\n    // which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\r\n        var visibleUnzonedRange = this._view.getUnzonedRangeOption('visibleRange', this._view.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations\r\n        );\r\n        if (visibleUnzonedRange && (visibleUnzonedRange.startMs == null || visibleUnzonedRange.endMs == null)) {\r\n            return null;\r\n        }\r\n        return visibleUnzonedRange;\r\n    };\r\n    // Computes the range that will represent the element/cells for *rendering*,\r\n    // but which may have voided days/times.\r\n    // not responsible for trimming hidden days.\r\n    DateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        return currentUnzonedRange.clone();\r\n    };\r\n    // Compute the duration value that should be added/substracted to the current date\r\n    // when a prev/next operation happens.\r\n    DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\r\n        var dateIncrementInput = this.opt('dateIncrement');\r\n        var customAlignment;\r\n        if (dateIncrementInput) {\r\n            return moment.duration(dateIncrementInput);\r\n        }\r\n        else if ((customAlignment = this.opt('dateAlignment'))) {\r\n            return moment.duration(1, customAlignment);\r\n        }\r\n        else if (fallback) {\r\n            return fallback;\r\n        }\r\n        else {\r\n            return moment.duration({ days: 1 });\r\n        }\r\n    };\r\n    return DateProfileGenerator;\r\n}());\r\nexports.default = DateProfileGenerator;\r\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar ArrayEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ArrayEventSource, _super);\r\n    function ArrayEventSource(calendar) {\r\n        var _this = _super.call(this, calendar) || this;\r\n        _this.eventDefs = []; // for if setRawEventDefs is never called\r\n        return _this;\r\n    }\r\n    ArrayEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if ($.isArray(rawInput.events)) { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if ($.isArray(rawInput)) { // short form\r\n            rawProps = { events: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    ArrayEventSource.prototype.setRawEventDefs = function (rawEventDefs) {\r\n        this.rawEventDefs = rawEventDefs;\r\n        this.eventDefs = this.parseEventDefs(rawEventDefs);\r\n    };\r\n    ArrayEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var eventDefs = this.eventDefs;\r\n        var i;\r\n        if (this.currentTimezone != null &&\r\n            this.currentTimezone !== timezone) {\r\n            for (i = 0; i < eventDefs.length; i++) {\r\n                if (eventDefs[i] instanceof SingleEventDef_1.default) {\r\n                    eventDefs[i].rezone();\r\n                }\r\n            }\r\n        }\r\n        this.currentTimezone = timezone;\r\n        return Promise_1.default.resolve(eventDefs);\r\n    };\r\n    ArrayEventSource.prototype.addEventDef = function (eventDef) {\r\n        this.eventDefs.push(eventDef);\r\n    };\r\n    /*\r\n    eventDefId already normalized to a string\r\n    */\r\n    ArrayEventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n        return util_1.removeMatching(this.eventDefs, function (eventDef) {\r\n            return eventDef.id === eventDefId;\r\n        });\r\n    };\r\n    ArrayEventSource.prototype.removeAllEventDefs = function () {\r\n        this.eventDefs = [];\r\n    };\r\n    ArrayEventSource.prototype.getPrimitive = function () {\r\n        return this.rawEventDefs;\r\n    };\r\n    ArrayEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        this.setRawEventDefs(rawProps.events);\r\n        return superSuccess;\r\n    };\r\n    return ArrayEventSource;\r\n}(EventSource_1.default));\r\nexports.default = ArrayEventSource;\r\nArrayEventSource.defineStandardProps({\r\n    events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar themeClassHash = {};\r\nfunction defineThemeSystem(themeName, themeClass) {\r\n    themeClassHash[themeName] = themeClass;\r\n}\r\nexports.defineThemeSystem = defineThemeSystem;\r\nfunction getThemeSystemClass(themeSetting) {\r\n    if (!themeSetting) {\r\n        return StandardTheme_1.default;\r\n    }\r\n    else if (themeSetting === true) {\r\n        return JqueryUiTheme_1.default;\r\n    }\r\n    else {\r\n        return themeClassHash[themeSetting];\r\n    }\r\n}\r\nexports.getThemeSystemClass = getThemeSystemClass;\r\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/*\r\nA cache for the left/right/top/bottom/width/height values for one or more elements.\r\nWorks with both offset (from topleft document) and position (from offsetParent).\r\n\noptions:\r\n- els\r\n- isHorizontal\r\n- isVertical\r\n*/\r\nvar CoordCache = /** @class */ (function () {\r\n    function CoordCache(options) {\r\n        this.isHorizontal = false; // whether to query for left/right/width\r\n        this.isVertical = false; // whether to query for top/bottom/height\r\n        this.els = $(options.els);\r\n        this.isHorizontal = options.isHorizontal;\r\n        this.isVertical = options.isVertical;\r\n        this.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\r\n    }\r\n    // Queries the els for coordinates and stores them.\r\n    // Call this method before using and of the get* methods below.\r\n    CoordCache.prototype.build = function () {\r\n        var offsetParentEl = this.forcedOffsetParentEl;\r\n        if (!offsetParentEl && this.els.length > 0) {\r\n            offsetParentEl = this.els.eq(0).offsetParent();\r\n        }\r\n        this.origin = offsetParentEl ?\r\n            offsetParentEl.offset() :\r\n            null;\r\n        this.boundingRect = this.queryBoundingRect();\r\n        if (this.isHorizontal) {\r\n            this.buildElHorizontals();\r\n        }\r\n        if (this.isVertical) {\r\n            this.buildElVerticals();\r\n        }\r\n    };\r\n    // Destroys all internal data about coordinates, freeing memory\r\n    CoordCache.prototype.clear = function () {\r\n        this.origin = null;\r\n        this.boundingRect = null;\r\n        this.lefts = null;\r\n        this.rights = null;\r\n        this.tops = null;\r\n        this.bottoms = null;\r\n    };\r\n    // When called, if coord caches aren't built, builds them\r\n    CoordCache.prototype.ensureBuilt = function () {\r\n        if (!this.origin) {\r\n            this.build();\r\n        }\r\n    };\r\n    // Populates the left/right internal coordinate arrays\r\n    CoordCache.prototype.buildElHorizontals = function () {\r\n        var lefts = [];\r\n        var rights = [];\r\n        this.els.each(function (i, node) {\r\n            var el = $(node);\r\n            var left = el.offset().left;\r\n            var width = el.outerWidth();\r\n            lefts.push(left);\r\n            rights.push(left + width);\r\n        });\r\n        this.lefts = lefts;\r\n        this.rights = rights;\r\n    };\r\n    // Populates the top/bottom internal coordinate arrays\r\n    CoordCache.prototype.buildElVerticals = function () {\r\n        var tops = [];\r\n        var bottoms = [];\r\n        this.els.each(function (i, node) {\r\n            var el = $(node);\r\n            var top = el.offset().top;\r\n            var height = el.outerHeight();\r\n            tops.push(top);\r\n            bottoms.push(top + height);\r\n        });\r\n        this.tops = tops;\r\n        this.bottoms = bottoms;\r\n    };\r\n    // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\r\n    // If no intersection is made, returns undefined.\r\n    CoordCache.prototype.getHorizontalIndex = function (leftOffset) {\r\n        this.ensureBuilt();\r\n        var lefts = this.lefts;\r\n        var rights = this.rights;\r\n        var len = lefts.length;\r\n        var i;\r\n        for (i = 0; i < len; i++) {\r\n            if (leftOffset >= lefts[i] && leftOffset < rights[i]) {\r\n                return i;\r\n            }\r\n        }\r\n    };\r\n    // Given a top offset (from document top), returns the index of the el that it vertically intersects.\r\n    // If no intersection is made, returns undefined.\r\n    CoordCache.prototype.getVerticalIndex = function (topOffset) {\r\n        this.ensureBuilt();\r\n        var tops = this.tops;\r\n        var bottoms = this.bottoms;\r\n        var len = tops.length;\r\n        var i;\r\n        for (i = 0; i < len; i++) {\r\n            if (topOffset >= tops[i] && topOffset < bottoms[i]) {\r\n                return i;\r\n            }\r\n        }\r\n    };\r\n    // Gets the left offset (from document left) of the element at the given index\r\n    CoordCache.prototype.getLeftOffset = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.lefts[leftIndex];\r\n    };\r\n    // Gets the left position (from offsetParent left) of the element at the given index\r\n    CoordCache.prototype.getLeftPosition = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.lefts[leftIndex] - this.origin.left;\r\n    };\r\n    // Gets the right offset (from document left) of the element at the given index.\r\n    // This value is NOT relative to the document's right edge, like the CSS concept of \"right\" would be.\r\n    CoordCache.prototype.getRightOffset = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex];\r\n    };\r\n    // Gets the right position (from offsetParent left) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's right edge, like the CSS concept of \"right\" would be.\r\n    CoordCache.prototype.getRightPosition = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex] - this.origin.left;\r\n    };\r\n    // Gets the width of the element at the given index\r\n    CoordCache.prototype.getWidth = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex] - this.lefts[leftIndex];\r\n    };\r\n    // Gets the top offset (from document top) of the element at the given index\r\n    CoordCache.prototype.getTopOffset = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.tops[topIndex];\r\n    };\r\n    // Gets the top position (from offsetParent top) of the element at the given position\r\n    CoordCache.prototype.getTopPosition = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.tops[topIndex] - this.origin.top;\r\n    };\r\n    // Gets the bottom offset (from the document top) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n    CoordCache.prototype.getBottomOffset = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex];\r\n    };\r\n    // Gets the bottom position (from the offsetParent top) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n    CoordCache.prototype.getBottomPosition = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex] - this.origin.top;\r\n    };\r\n    // Gets the height of the element at the given index\r\n    CoordCache.prototype.getHeight = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex] - this.tops[topIndex];\r\n    };\r\n    // Bounding Rect\r\n    // TODO: decouple this from CoordCache\r\n    // Compute and return what the elements' bounding rectangle is, from the user's perspective.\r\n    // Right now, only returns a rectangle if constrained by an overflow:scroll element.\r\n    // Returns null if there are no elements\r\n    CoordCache.prototype.queryBoundingRect = function () {\r\n        var scrollParentEl;\r\n        if (this.els.length > 0) {\r\n            scrollParentEl = util_1.getScrollParent(this.els.eq(0));\r\n            if (!scrollParentEl.is(document) &&\r\n                !scrollParentEl.is('html,body') // don't consider these bounding rects. solves issue 3615\r\n            ) {\r\n                return util_1.getClientRect(scrollParentEl);\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    CoordCache.prototype.isPointInBounds = function (leftOffset, topOffset) {\r\n        return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\r\n    };\r\n    CoordCache.prototype.isLeftInBounds = function (leftOffset) {\r\n        return !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);\r\n    };\r\n    CoordCache.prototype.isTopInBounds = function (topOffset) {\r\n        return !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);\r\n    };\r\n    return CoordCache;\r\n}());\r\nexports.default = CoordCache;\r\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\n/* Tracks a drag's mouse movement, firing various handlers\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// TODO: use Emitter\r\nvar DragListener = /** @class */ (function () {\r\n    function DragListener(options) {\r\n        this.isInteracting = false;\r\n        this.isDistanceSurpassed = false;\r\n        this.isDelayEnded = false;\r\n        this.isDragging = false;\r\n        this.isTouch = false;\r\n        this.isGeneric = false; // initiated by 'dragstart' (jqui)\r\n        this.shouldCancelTouchScroll = true;\r\n        this.scrollAlwaysKills = false;\r\n        this.isAutoScroll = false;\r\n        // defaults\r\n        this.scrollSensitivity = 30; // pixels from edge for scrolling to start\r\n        this.scrollSpeed = 200; // pixels per second, at maximum speed\r\n        this.scrollIntervalMs = 50; // millisecond wait between scroll increment\r\n        this.options = options || {};\r\n    }\r\n    // Interaction (high-level)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.startInteraction = function (ev, extraOptions) {\r\n        if (extraOptions === void 0) { extraOptions = {}; }\r\n        if (ev.type === 'mousedown') {\r\n            if (GlobalEmitter_1.default.get().shouldIgnoreMouse()) {\r\n                return;\r\n            }\r\n            else if (!util_1.isPrimaryMouseButton(ev)) {\r\n                return;\r\n            }\r\n            else {\r\n                ev.preventDefault(); // prevents native selection in most browsers\r\n            }\r\n        }\r\n        if (!this.isInteracting) {\r\n            // process options\r\n            this.delay = util_1.firstDefined(extraOptions.delay, this.options.delay, 0);\r\n            this.minDistance = util_1.firstDefined(extraOptions.distance, this.options.distance, 0);\r\n            this.subjectEl = this.options.subjectEl;\r\n            util_1.preventSelection($('body'));\r\n            this.isInteracting = true;\r\n            this.isTouch = util_1.getEvIsTouch(ev);\r\n            this.isGeneric = ev.type === 'dragstart';\r\n            this.isDelayEnded = false;\r\n            this.isDistanceSurpassed = false;\r\n            this.originX = util_1.getEvX(ev);\r\n            this.originY = util_1.getEvY(ev);\r\n            this.scrollEl = util_1.getScrollParent($(ev.target));\r\n            this.bindHandlers();\r\n            this.initAutoScroll();\r\n            this.handleInteractionStart(ev);\r\n            this.startDelay(ev);\r\n            if (!this.minDistance) {\r\n                this.handleDistanceSurpassed(ev);\r\n            }\r\n        }\r\n    };\r\n    DragListener.prototype.handleInteractionStart = function (ev) {\r\n        this.trigger('interactionStart', ev);\r\n    };\r\n    DragListener.prototype.endInteraction = function (ev, isCancelled) {\r\n        if (this.isInteracting) {\r\n            this.endDrag(ev);\r\n            if (this.delayTimeoutId) {\r\n                clearTimeout(this.delayTimeoutId);\r\n                this.delayTimeoutId = null;\r\n            }\r\n            this.destroyAutoScroll();\r\n            this.unbindHandlers();\r\n            this.isInteracting = false;\r\n            this.handleInteractionEnd(ev, isCancelled);\r\n            util_1.allowSelection($('body'));\r\n        }\r\n    };\r\n    DragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n        this.trigger('interactionEnd', ev, isCancelled || false);\r\n    };\r\n    // Binding To DOM\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.bindHandlers = function () {\r\n        // some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\r\n        // so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\r\n        var globalEmitter = GlobalEmitter_1.default.get();\r\n        if (this.isGeneric) {\r\n            this.listenTo($(document), {\r\n                drag: this.handleMove,\r\n                dragstop: this.endInteraction\r\n            });\r\n        }\r\n        else if (this.isTouch) {\r\n            this.listenTo(globalEmitter, {\r\n                touchmove: this.handleTouchMove,\r\n                touchend: this.endInteraction,\r\n                scroll: this.handleTouchScroll\r\n            });\r\n        }\r\n        else {\r\n            this.listenTo(globalEmitter, {\r\n                mousemove: this.handleMouseMove,\r\n                mouseup: this.endInteraction\r\n            });\r\n        }\r\n        this.listenTo(globalEmitter, {\r\n            selectstart: util_1.preventDefault,\r\n            contextmenu: util_1.preventDefault // long taps would open menu on Chrome dev tools\r\n        });\r\n    };\r\n    DragListener.prototype.unbindHandlers = function () {\r\n        this.stopListeningTo(GlobalEmitter_1.default.get());\r\n        this.stopListeningTo($(document)); // for isGeneric\r\n    };\r\n    // Drag (high-level)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // extraOptions ignored if drag already started\r\n    DragListener.prototype.startDrag = function (ev, extraOptions) {\r\n        this.startInteraction(ev, extraOptions); // ensure interaction began\r\n        if (!this.isDragging) {\r\n            this.isDragging = true;\r\n            this.handleDragStart(ev);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDragStart = function (ev) {\r\n        this.trigger('dragStart', ev);\r\n    };\r\n    DragListener.prototype.handleMove = function (ev) {\r\n        var dx = util_1.getEvX(ev) - this.originX;\r\n        var dy = util_1.getEvY(ev) - this.originY;\r\n        var minDistance = this.minDistance;\r\n        var distanceSq; // current distance from the origin, squared\r\n        if (!this.isDistanceSurpassed) {\r\n            distanceSq = dx * dx + dy * dy;\r\n            if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\r\n                this.handleDistanceSurpassed(ev);\r\n            }\r\n        }\r\n        if (this.isDragging) {\r\n            this.handleDrag(dx, dy, ev);\r\n        }\r\n    };\r\n    // Called while the mouse is being moved and when we know a legitimate drag is taking place\r\n    DragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n        this.trigger('drag', dx, dy, ev);\r\n        this.updateAutoScroll(ev); // will possibly cause scrolling\r\n    };\r\n    DragListener.prototype.endDrag = function (ev) {\r\n        if (this.isDragging) {\r\n            this.isDragging = false;\r\n            this.handleDragEnd(ev);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDragEnd = function (ev) {\r\n        this.trigger('dragEnd', ev);\r\n    };\r\n    // Delay\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.startDelay = function (initialEv) {\r\n        var _this = this;\r\n        if (this.delay) {\r\n            this.delayTimeoutId = setTimeout(function () {\r\n                _this.handleDelayEnd(initialEv);\r\n            }, this.delay);\r\n        }\r\n        else {\r\n            this.handleDelayEnd(initialEv);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDelayEnd = function (initialEv) {\r\n        this.isDelayEnded = true;\r\n        if (this.isDistanceSurpassed) {\r\n            this.startDrag(initialEv);\r\n        }\r\n    };\r\n    // Distance\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleDistanceSurpassed = function (ev) {\r\n        this.isDistanceSurpassed = true;\r\n        if (this.isDelayEnded) {\r\n            this.startDrag(ev);\r\n        }\r\n    };\r\n    // Mouse / Touch\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleTouchMove = function (ev) {\r\n        // prevent inertia and touchmove-scrolling while dragging\r\n        if (this.isDragging && this.shouldCancelTouchScroll) {\r\n            ev.preventDefault();\r\n        }\r\n        this.handleMove(ev);\r\n    };\r\n    DragListener.prototype.handleMouseMove = function (ev) {\r\n        this.handleMove(ev);\r\n    };\r\n    // Scrolling (unrelated to auto-scroll)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleTouchScroll = function (ev) {\r\n        // if the drag is being initiated by touch, but a scroll happens before\r\n        // the drag-initiating delay is over, cancel the drag\r\n        if (!this.isDragging || this.scrollAlwaysKills) {\r\n            this.endInteraction(ev, true); // isCancelled=true\r\n        }\r\n    };\r\n    // Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Triggers a callback. Calls a function in the option hash of the same name.\r\n    // Arguments beyond the first `name` are forwarded on.\r\n    DragListener.prototype.trigger = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        if (this.options[name]) {\r\n            this.options[name].apply(this, args);\r\n        }\r\n        // makes _methods callable by event name. TODO: kill this\r\n        if (this['_' + name]) {\r\n            this['_' + name].apply(this, args);\r\n        }\r\n    };\r\n    // Auto-scroll\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.initAutoScroll = function () {\r\n        var scrollEl = this.scrollEl;\r\n        this.isAutoScroll =\r\n            this.options.scroll &&\r\n                scrollEl &&\r\n                !scrollEl.is(window) &&\r\n                !scrollEl.is(document);\r\n        if (this.isAutoScroll) {\r\n            // debounce makes sure rapid calls don't happen\r\n            this.listenTo(scrollEl, 'scroll', util_1.debounce(this.handleDebouncedScroll, 100));\r\n        }\r\n    };\r\n    DragListener.prototype.destroyAutoScroll = function () {\r\n        this.endAutoScroll(); // kill any animation loop\r\n        // remove the scroll handler if there is a scrollEl\r\n        if (this.isAutoScroll) {\r\n            this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\r\n        }\r\n    };\r\n    // Computes and stores the bounding rectangle of scrollEl\r\n    DragListener.prototype.computeScrollBounds = function () {\r\n        if (this.isAutoScroll) {\r\n            this.scrollBounds = util_1.getOuterRect(this.scrollEl);\r\n            // TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\r\n        }\r\n    };\r\n    // Called when the dragging is in progress and scrolling should be updated\r\n    DragListener.prototype.updateAutoScroll = function (ev) {\r\n        var sensitivity = this.scrollSensitivity;\r\n        var bounds = this.scrollBounds;\r\n        var topCloseness;\r\n        var bottomCloseness;\r\n        var leftCloseness;\r\n        var rightCloseness;\r\n        var topVel = 0;\r\n        var leftVel = 0;\r\n        if (bounds) { // only scroll if scrollEl exists\r\n            // compute closeness to edges. valid range is from 0.0 - 1.0\r\n            topCloseness = (sensitivity - (util_1.getEvY(ev) - bounds.top)) / sensitivity;\r\n            bottomCloseness = (sensitivity - (bounds.bottom - util_1.getEvY(ev))) / sensitivity;\r\n            leftCloseness = (sensitivity - (util_1.getEvX(ev) - bounds.left)) / sensitivity;\r\n            rightCloseness = (sensitivity - (bounds.right - util_1.getEvX(ev))) / sensitivity;\r\n            // translate vertical closeness into velocity.\r\n            // mouse must be completely in bounds for velocity to happen.\r\n            if (topCloseness >= 0 && topCloseness <= 1) {\r\n                topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\r\n            }\r\n            else if (bottomCloseness >= 0 && bottomCloseness <= 1) {\r\n                topVel = bottomCloseness * this.scrollSpeed;\r\n            }\r\n            // translate horizontal closeness into velocity\r\n            if (leftCloseness >= 0 && leftCloseness <= 1) {\r\n                leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\r\n            }\r\n            else if (rightCloseness >= 0 && rightCloseness <= 1) {\r\n                leftVel = rightCloseness * this.scrollSpeed;\r\n            }\r\n        }\r\n        this.setScrollVel(topVel, leftVel);\r\n    };\r\n    // Sets the speed-of-scrolling for the scrollEl\r\n    DragListener.prototype.setScrollVel = function (topVel, leftVel) {\r\n        this.scrollTopVel = topVel;\r\n        this.scrollLeftVel = leftVel;\r\n        this.constrainScrollVel(); // massages into realistic values\r\n        // if there is non-zero velocity, and an animation loop hasn't already started, then START\r\n        if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\r\n            this.scrollIntervalId = setInterval(util_1.proxy(this, 'scrollIntervalFunc'), // scope to `this`\r\n            this.scrollIntervalMs);\r\n        }\r\n    };\r\n    // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\r\n    DragListener.prototype.constrainScrollVel = function () {\r\n        var el = this.scrollEl;\r\n        if (this.scrollTopVel < 0) { // scrolling up?\r\n            if (el.scrollTop() <= 0) { // already scrolled all the way up?\r\n                this.scrollTopVel = 0;\r\n            }\r\n        }\r\n        else if (this.scrollTopVel > 0) { // scrolling down?\r\n            if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\r\n                this.scrollTopVel = 0;\r\n            }\r\n        }\r\n        if (this.scrollLeftVel < 0) { // scrolling left?\r\n            if (el.scrollLeft() <= 0) { // already scrolled all the left?\r\n                this.scrollLeftVel = 0;\r\n            }\r\n        }\r\n        else if (this.scrollLeftVel > 0) { // scrolling right?\r\n            if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\r\n                this.scrollLeftVel = 0;\r\n            }\r\n        }\r\n    };\r\n    // This function gets called during every iteration of the scrolling animation loop\r\n    DragListener.prototype.scrollIntervalFunc = function () {\r\n        var el = this.scrollEl;\r\n        var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\r\n        // change the value of scrollEl's scroll\r\n        if (this.scrollTopVel) {\r\n            el.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\r\n        }\r\n        if (this.scrollLeftVel) {\r\n            el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\r\n        }\r\n        this.constrainScrollVel(); // since the scroll values changed, recompute the velocities\r\n        // if scrolled all the way, which causes the vels to be zero, stop the animation loop\r\n        if (!this.scrollTopVel && !this.scrollLeftVel) {\r\n            this.endAutoScroll();\r\n        }\r\n    };\r\n    // Kills any existing scrolling animation loop\r\n    DragListener.prototype.endAutoScroll = function () {\r\n        if (this.scrollIntervalId) {\r\n            clearInterval(this.scrollIntervalId);\r\n            this.scrollIntervalId = null;\r\n            this.handleScrollEnd();\r\n        }\r\n    };\r\n    // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\r\n    DragListener.prototype.handleDebouncedScroll = function () {\r\n        // recompute all coordinates, but *only* if this is *not* part of our scrolling animation\r\n        if (!this.scrollIntervalId) {\r\n            this.handleScrollEnd();\r\n        }\r\n    };\r\n    DragListener.prototype.handleScrollEnd = function () {\r\n        // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n    };\r\n    return DragListener;\r\n}());\r\nexports.default = DragListener;\r\nListenerMixin_1.default.mixInto(DragListener);\r\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\n/*\r\nA set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\r\nPrerequisite: the object being mixed into needs to be a *Grid*\r\n*/\r\nvar DayTableMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayTableMixin, _super);\r\n    function DayTableMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Populates internal variables used for date calculation and rendering\r\n    DayTableMixin.prototype.updateDayTable = function () {\r\n        var t = this;\r\n        var view = t.view;\r\n        var calendar = view.calendar;\r\n        var date = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.startMs, true);\r\n        var end = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.endMs, true);\r\n        var dayIndex = -1;\r\n        var dayIndices = [];\r\n        var dayDates = [];\r\n        var daysPerRow;\r\n        var firstDay;\r\n        var rowCnt;\r\n        while (date.isBefore(end)) { // loop each day from start to end\r\n            if (view.isHiddenDay(date)) {\r\n                dayIndices.push(dayIndex + 0.5); // mark that it's between indices\r\n            }\r\n            else {\r\n                dayIndex++;\r\n                dayIndices.push(dayIndex);\r\n                dayDates.push(date.clone());\r\n            }\r\n            date.add(1, 'days');\r\n        }\r\n        if (this.breakOnWeeks) {\r\n            // count columns until the day-of-week repeats\r\n            firstDay = dayDates[0].day();\r\n            for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\r\n                if (dayDates[daysPerRow].day() === firstDay) {\r\n                    break;\r\n                }\r\n            }\r\n            rowCnt = Math.ceil(dayDates.length / daysPerRow);\r\n        }\r\n        else {\r\n            rowCnt = 1;\r\n            daysPerRow = dayDates.length;\r\n        }\r\n        this.dayDates = dayDates;\r\n        this.dayIndices = dayIndices;\r\n        this.daysPerRow = daysPerRow;\r\n        this.rowCnt = rowCnt;\r\n        this.updateDayTableCols();\r\n    };\r\n    // Computes and assigned the colCnt property and updates any options that may be computed from it\r\n    DayTableMixin.prototype.updateDayTableCols = function () {\r\n        this.colCnt = this.computeColCnt();\r\n        this.colHeadFormat =\r\n            this.opt('columnHeaderFormat') ||\r\n                this.opt('columnFormat') || // deprecated\r\n                this.computeColHeadFormat();\r\n    };\r\n    // Determines how many columns there should be in the table\r\n    DayTableMixin.prototype.computeColCnt = function () {\r\n        return this.daysPerRow;\r\n    };\r\n    // Computes the ambiguously-timed moment for the given cell\r\n    DayTableMixin.prototype.getCellDate = function (row, col) {\r\n        return this.dayDates[this.getCellDayIndex(row, col)].clone();\r\n    };\r\n    // Computes the ambiguously-timed date range for the given cell\r\n    DayTableMixin.prototype.getCellRange = function (row, col) {\r\n        var start = this.getCellDate(row, col);\r\n        var end = start.clone().add(1, 'days');\r\n        return { start: start, end: end };\r\n    };\r\n    // Returns the number of day cells, chronologically, from the first of the grid (0-based)\r\n    DayTableMixin.prototype.getCellDayIndex = function (row, col) {\r\n        return row * this.daysPerRow + this.getColDayIndex(col);\r\n    };\r\n    // Returns the numner of day cells, chronologically, from the first cell in *any given row*\r\n    DayTableMixin.prototype.getColDayIndex = function (col) {\r\n        if (this.isRTL) {\r\n            return this.colCnt - 1 - col;\r\n        }\r\n        else {\r\n            return col;\r\n        }\r\n    };\r\n    // Given a date, returns its chronolocial cell-index from the first cell of the grid.\r\n    // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\r\n    // If before the first offset, returns a negative number.\r\n    // If after the last offset, returns an offset past the last cell offset.\r\n    // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\r\n    DayTableMixin.prototype.getDateDayIndex = function (date) {\r\n        var dayIndices = this.dayIndices;\r\n        var dayOffset = date.diff(this.dayDates[0], 'days');\r\n        if (dayOffset < 0) {\r\n            return dayIndices[0] - 1;\r\n        }\r\n        else if (dayOffset >= dayIndices.length) {\r\n            return dayIndices[dayIndices.length - 1] + 1;\r\n        }\r\n        else {\r\n            return dayIndices[dayOffset];\r\n        }\r\n    };\r\n    /* Options\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes a default column header formatting string if `colFormat` is not explicitly defined\r\n    DayTableMixin.prototype.computeColHeadFormat = function () {\r\n        // if more than one week row, or if there are a lot of columns with not much space,\r\n        // put just the day numbers will be in each cell\r\n        if (this.rowCnt > 1 || this.colCnt > 10) {\r\n            return 'ddd'; // \"Sat\"\r\n        }\r\n        else if (this.colCnt > 1) {\r\n            return this.opt('dayOfMonthFormat'); // \"Sat 12/10\"\r\n        }\r\n        else {\r\n            return 'dddd'; // \"Saturday\"\r\n        }\r\n    };\r\n    /* Slicing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Slices up a date range into a segment for every week-row it intersects with\r\n    DayTableMixin.prototype.sliceRangeByRow = function (unzonedRange) {\r\n        var daysPerRow = this.daysPerRow;\r\n        var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n        var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n        var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n        var segs = [];\r\n        var row;\r\n        var rowFirst;\r\n        var rowLast; // inclusive day-index range for current row\r\n        var segFirst;\r\n        var segLast; // inclusive day-index range for segment\r\n        for (row = 0; row < this.rowCnt; row++) {\r\n            rowFirst = row * daysPerRow;\r\n            rowLast = rowFirst + daysPerRow - 1;\r\n            // intersect segment's offset range with the row's\r\n            segFirst = Math.max(rangeFirst, rowFirst);\r\n            segLast = Math.min(rangeLast, rowLast);\r\n            // deal with in-between indices\r\n            segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n            segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n            if (segFirst <= segLast) { // was there any intersection with the current row?\r\n                segs.push({\r\n                    row: row,\r\n                    // normalize to start of row\r\n                    firstRowDayIndex: segFirst - rowFirst,\r\n                    lastRowDayIndex: segLast - rowFirst,\r\n                    // must be matching integers to be the segment's start/end\r\n                    isStart: segFirst === rangeFirst,\r\n                    isEnd: segLast === rangeLast\r\n                });\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    // Slices up a date range into a segment for every day-cell it intersects with.\r\n    // TODO: make more DRY with sliceRangeByRow somehow.\r\n    DayTableMixin.prototype.sliceRangeByDay = function (unzonedRange) {\r\n        var daysPerRow = this.daysPerRow;\r\n        var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n        var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n        var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n        var segs = [];\r\n        var row;\r\n        var rowFirst;\r\n        var rowLast; // inclusive day-index range for current row\r\n        var i;\r\n        var segFirst;\r\n        var segLast; // inclusive day-index range for segment\r\n        for (row = 0; row < this.rowCnt; row++) {\r\n            rowFirst = row * daysPerRow;\r\n            rowLast = rowFirst + daysPerRow - 1;\r\n            for (i = rowFirst; i <= rowLast; i++) {\r\n                // intersect segment's offset range with the row's\r\n                segFirst = Math.max(rangeFirst, i);\r\n                segLast = Math.min(rangeLast, i);\r\n                // deal with in-between indices\r\n                segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n                segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n                if (segFirst <= segLast) { // was there any intersection with the current row?\r\n                    segs.push({\r\n                        row: row,\r\n                        // normalize to start of row\r\n                        firstRowDayIndex: segFirst - rowFirst,\r\n                        lastRowDayIndex: segLast - rowFirst,\r\n                        // must be matching integers to be the segment's start/end\r\n                        isStart: segFirst === rangeFirst,\r\n                        isEnd: segLast === rangeLast\r\n                    });\r\n                }\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Header Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderHeadHtml = function () {\r\n        var theme = this.view.calendar.theme;\r\n        return '' +\r\n            '<div class=\"fc-row ' + theme.getClass('headerRow') + '\">' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            '<thead>' +\r\n            this.renderHeadTrHtml() +\r\n            '</thead>' +\r\n            '</table>' +\r\n            '</div>';\r\n    };\r\n    DayTableMixin.prototype.renderHeadIntroHtml = function () {\r\n        return this.renderIntroHtml(); // fall back to generic\r\n    };\r\n    DayTableMixin.prototype.renderHeadTrHtml = function () {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderHeadIntroHtml()) +\r\n            this.renderHeadDateCellsHtml() +\r\n            (this.isRTL ? this.renderHeadIntroHtml() : '') +\r\n            '</tr>';\r\n    };\r\n    DayTableMixin.prototype.renderHeadDateCellsHtml = function () {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(0, col);\r\n            htmls.push(this.renderHeadDateCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    // TODO: when internalApiVersion, accept an object for HTML attributes\r\n    // (colspan should be no different)\r\n    DayTableMixin.prototype.renderHeadDateCellHtml = function (date, colspan, otherAttrs) {\r\n        var t = this;\r\n        var view = t.view;\r\n        var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var classNames = [\r\n            'fc-day-header',\r\n            view.calendar.theme.getClass('widgetHeader')\r\n        ];\r\n        var innerHtml;\r\n        if (typeof t.opt('columnHeaderHtml') === 'function') {\r\n            innerHtml = t.opt('columnHeaderHtml')(date);\r\n        }\r\n        else if (typeof t.opt('columnHeaderText') === 'function') {\r\n            innerHtml = util_1.htmlEscape(t.opt('columnHeaderText')(date));\r\n        }\r\n        else {\r\n            innerHtml = util_1.htmlEscape(date.format(t.colHeadFormat));\r\n        }\r\n        // if only one row of days, the classNames on the header can represent the specific days beneath\r\n        if (t.rowCnt === 1) {\r\n            classNames = classNames.concat(\r\n            // includes the day-of-week class\r\n            // noThemeHighlight=true (don't highlight the header)\r\n            t.getDayClasses(date, true));\r\n        }\r\n        else {\r\n            classNames.push('fc-' + util_1.dayIDs[date.day()]); // only add the day-of-week class\r\n        }\r\n        return '' +\r\n            '<th class=\"' + classNames.join(' ') + '\"' +\r\n            ((isDateValid && t.rowCnt) === 1 ?\r\n                ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' :\r\n                '') +\r\n            (colspan > 1 ?\r\n                ' colspan=\"' + colspan + '\"' :\r\n                '') +\r\n            (otherAttrs ?\r\n                ' ' + otherAttrs :\r\n                '') +\r\n            '>' +\r\n            (isDateValid ?\r\n                // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\r\n                view.buildGotoAnchorHtml({ date: date, forceOff: t.rowCnt > 1 || t.colCnt === 1 }, innerHtml) :\r\n                // if not valid, display text, but no link\r\n                innerHtml) +\r\n            '</th>';\r\n    };\r\n    /* Background Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderBgTrHtml = function (row) {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderBgIntroHtml(row)) +\r\n            this.renderBgCellsHtml(row) +\r\n            (this.isRTL ? this.renderBgIntroHtml(row) : '') +\r\n            '</tr>';\r\n    };\r\n    DayTableMixin.prototype.renderBgIntroHtml = function (row) {\r\n        return this.renderIntroHtml(); // fall back to generic\r\n    };\r\n    DayTableMixin.prototype.renderBgCellsHtml = function (row) {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(row, col);\r\n            htmls.push(this.renderBgCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    DayTableMixin.prototype.renderBgCellHtml = function (date, otherAttrs) {\r\n        var t = this;\r\n        var view = t.view;\r\n        var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var classes = t.getDayClasses(date);\r\n        classes.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));\r\n        return '<td class=\"' + classes.join(' ') + '\"' +\r\n            (isDateValid ?\r\n                ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' : // if date has a time, won't format it\r\n                '') +\r\n            (otherAttrs ?\r\n                ' ' + otherAttrs :\r\n                '') +\r\n            '></td>';\r\n    };\r\n    /* Generic\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderIntroHtml = function () {\r\n        // Generates the default HTML intro for any row. User classes should override\r\n    };\r\n    // TODO: a generic method for dealing with <tr>, RTL, intro\r\n    // when increment internalApiVersion\r\n    // wrapTr (scheduler)\r\n    /* Utils\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Applies the generic \"intro\" and \"outro\" HTML to the given cells.\r\n    // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\r\n    DayTableMixin.prototype.bookendCells = function (trEl) {\r\n        var introHtml = this.renderIntroHtml();\r\n        if (introHtml) {\r\n            if (this.isRTL) {\r\n                trEl.append(introHtml);\r\n            }\r\n            else {\r\n                trEl.prepend(introHtml);\r\n            }\r\n        }\r\n    };\r\n    return DayTableMixin;\r\n}(Mixin_1.default));\r\nexports.default = DayTableMixin;\r\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar BusinessHourRenderer = /** @class */ (function () {\r\n    /*\r\n    component implements:\r\n      - eventRangesToEventFootprints\r\n      - eventFootprintsToSegs\r\n    */\r\n    function BusinessHourRenderer(component, fillRenderer) {\r\n        this.component = component;\r\n        this.fillRenderer = fillRenderer;\r\n    }\r\n    BusinessHourRenderer.prototype.render = function (businessHourGenerator) {\r\n        var component = this.component;\r\n        var unzonedRange = component._getDateProfile().activeUnzonedRange;\r\n        var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(component.hasAllDayBusinessHours, unzonedRange);\r\n        var eventFootprints = eventInstanceGroup ?\r\n            component.eventRangesToEventFootprints(eventInstanceGroup.sliceRenderRanges(unzonedRange)) :\r\n            [];\r\n        this.renderEventFootprints(eventFootprints);\r\n    };\r\n    BusinessHourRenderer.prototype.renderEventFootprints = function (eventFootprints) {\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        this.renderSegs(segs);\r\n        this.segs = segs;\r\n    };\r\n    BusinessHourRenderer.prototype.renderSegs = function (segs) {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderSegs('businessHours', segs, {\r\n                getClasses: function (seg) {\r\n                    return ['fc-nonbusiness', 'fc-bgevent'];\r\n                }\r\n            });\r\n        }\r\n    };\r\n    BusinessHourRenderer.prototype.unrender = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('businessHours');\r\n        }\r\n        this.segs = null;\r\n    };\r\n    BusinessHourRenderer.prototype.getSegs = function () {\r\n        return this.segs || [];\r\n    };\r\n    return BusinessHourRenderer;\r\n}());\r\nexports.default = BusinessHourRenderer;\r\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar FillRenderer = /** @class */ (function () {\r\n    function FillRenderer(component) {\r\n        this.fillSegTag = 'div';\r\n        this.component = component;\r\n        this.elsByFill = {};\r\n    }\r\n    FillRenderer.prototype.renderFootprint = function (type, componentFootprint, props) {\r\n        this.renderSegs(type, this.component.componentFootprintToSegs(componentFootprint), props);\r\n    };\r\n    FillRenderer.prototype.renderSegs = function (type, segs, props) {\r\n        var els;\r\n        segs = this.buildSegEls(type, segs, props); // assignes `.el` to each seg. returns successfully rendered segs\r\n        els = this.attachSegEls(type, segs);\r\n        if (els) {\r\n            this.reportEls(type, els);\r\n        }\r\n        return segs;\r\n    };\r\n    // Unrenders a specific type of fill that is currently rendered on the grid\r\n    FillRenderer.prototype.unrender = function (type) {\r\n        var el = this.elsByFill[type];\r\n        if (el) {\r\n            el.remove();\r\n            delete this.elsByFill[type];\r\n        }\r\n    };\r\n    // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\r\n    // Only returns segments that successfully rendered.\r\n    FillRenderer.prototype.buildSegEls = function (type, segs, props) {\r\n        var _this = this;\r\n        var html = '';\r\n        var renderedSegs = [];\r\n        var i;\r\n        if (segs.length) {\r\n            // build a large concatenation of segment HTML\r\n            for (i = 0; i < segs.length; i++) {\r\n                html += this.buildSegHtml(type, segs[i], props);\r\n            }\r\n            // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n            // Then, compute the 'el' for each segment.\r\n            $(html).each(function (i, node) {\r\n                var seg = segs[i];\r\n                var el = $(node);\r\n                // allow custom filter methods per-type\r\n                if (props.filterEl) {\r\n                    el = props.filterEl(seg, el);\r\n                }\r\n                if (el) { // custom filters did not cancel the render\r\n                    el = $(el); // allow custom filter to return raw DOM node\r\n                    // correct element type? (would be bad if a non-TD were inserted into a table for example)\r\n                    if (el.is(_this.fillSegTag)) {\r\n                        seg.el = el;\r\n                        renderedSegs.push(seg);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n        return renderedSegs;\r\n    };\r\n    // Builds the HTML needed for one fill segment. Generic enough to work with different types.\r\n    FillRenderer.prototype.buildSegHtml = function (type, seg, props) {\r\n        // custom hooks per-type\r\n        var classes = props.getClasses ? props.getClasses(seg) : [];\r\n        var css = util_1.cssToStr(props.getCss ? props.getCss(seg) : {});\r\n        return '<' + this.fillSegTag +\r\n            (classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') +\r\n            (css ? ' style=\"' + css + '\"' : '') +\r\n            '></' + this.fillSegTag + '>';\r\n    };\r\n    // Should return wrapping DOM structure\r\n    FillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        // subclasses must implement\r\n    };\r\n    FillRenderer.prototype.reportEls = function (type, nodes) {\r\n        if (this.elsByFill[type]) {\r\n            this.elsByFill[type] = this.elsByFill[type].add(nodes);\r\n        }\r\n        else {\r\n            this.elsByFill[type] = $(nodes);\r\n        }\r\n    };\r\n    return FillRenderer;\r\n}());\r\nexports.default = FillRenderer;\r\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar HelperRenderer = /** @class */ (function () {\r\n    function HelperRenderer(component, eventRenderer) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n        this.eventRenderer = eventRenderer;\r\n    }\r\n    HelperRenderer.prototype.renderComponentFootprint = function (componentFootprint) {\r\n        this.renderEventFootprints([\r\n            this.fabricateEventFootprint(componentFootprint)\r\n        ]);\r\n    };\r\n    HelperRenderer.prototype.renderEventDraggingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n        this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-dragging', isTouch ? null : this.view.opt('dragOpacity'));\r\n    };\r\n    HelperRenderer.prototype.renderEventResizingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n        this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-resizing');\r\n    };\r\n    HelperRenderer.prototype.renderEventFootprints = function (eventFootprints, sourceSeg, extraClassNames, opacity) {\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        var classNames = 'fc-helper ' + (extraClassNames || '');\r\n        var i;\r\n        // assigns each seg's el and returns a subset of segs that were rendered\r\n        segs = this.eventRenderer.renderFgSegEls(segs);\r\n        for (i = 0; i < segs.length; i++) {\r\n            segs[i].el.addClass(classNames);\r\n        }\r\n        if (opacity != null) {\r\n            for (i = 0; i < segs.length; i++) {\r\n                segs[i].el.css('opacity', opacity);\r\n            }\r\n        }\r\n        this.helperEls = this.renderSegs(segs, sourceSeg);\r\n    };\r\n    /*\r\n    Must return all mock event elements\r\n    */\r\n    HelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        // Subclasses must implement\r\n    };\r\n    HelperRenderer.prototype.unrender = function () {\r\n        if (this.helperEls) {\r\n            this.helperEls.remove();\r\n            this.helperEls = null;\r\n        }\r\n    };\r\n    HelperRenderer.prototype.fabricateEventFootprint = function (componentFootprint) {\r\n        var calendar = this.view.calendar;\r\n        var eventDateProfile = calendar.footprintToDateProfile(componentFootprint);\r\n        var dummyEvent = new SingleEventDef_1.default(new EventSource_1.default(calendar));\r\n        var dummyInstance;\r\n        dummyEvent.dateProfile = eventDateProfile;\r\n        dummyInstance = dummyEvent.buildInstance();\r\n        return new EventFootprint_1.default(componentFootprint, dummyEvent, dummyInstance);\r\n    };\r\n    return HelperRenderer;\r\n}());\r\nexports.default = HelperRenderer;\r\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventPointing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventPointing, _super);\r\n    function EventPointing() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    component must implement:\r\n      - publiclyTrigger\r\n    */\r\n    EventPointing.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'click', this.handleClick.bind(this));\r\n        component.bindSegHandlerToEl(el, 'mouseenter', this.handleMouseover.bind(this));\r\n        component.bindSegHandlerToEl(el, 'mouseleave', this.handleMouseout.bind(this));\r\n    };\r\n    EventPointing.prototype.handleClick = function (seg, ev) {\r\n        var res = this.component.publiclyTrigger('eventClick', {\r\n            context: seg.el[0],\r\n            args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n        });\r\n        if (res === false) {\r\n            ev.preventDefault();\r\n        }\r\n    };\r\n    // Updates internal state and triggers handlers for when an event element is moused over\r\n    EventPointing.prototype.handleMouseover = function (seg, ev) {\r\n        if (!GlobalEmitter_1.default.get().shouldIgnoreMouse() &&\r\n            !this.mousedOverSeg) {\r\n            this.mousedOverSeg = seg;\r\n            // TODO: move to EventSelecting's responsibility\r\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n                seg.el.addClass('fc-allow-mouse-resize');\r\n            }\r\n            this.component.publiclyTrigger('eventMouseover', {\r\n                context: seg.el[0],\r\n                args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n            });\r\n        }\r\n    };\r\n    // Updates internal state and triggers handlers for when an event element is moused out.\r\n    // Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\r\n    EventPointing.prototype.handleMouseout = function (seg, ev) {\r\n        if (this.mousedOverSeg) {\r\n            this.mousedOverSeg = null;\r\n            // TODO: move to EventSelecting's responsibility\r\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n                seg.el.removeClass('fc-allow-mouse-resize');\r\n            }\r\n            this.component.publiclyTrigger('eventMouseout', {\r\n                context: seg.el[0],\r\n                args: [\r\n                    seg.footprint.getEventLegacy(),\r\n                    ev || {},\r\n                    this.view\r\n                ]\r\n            });\r\n        }\r\n    };\r\n    EventPointing.prototype.end = function () {\r\n        if (this.mousedOverSeg) {\r\n            this.handleMouseout(this.mousedOverSeg);\r\n        }\r\n    };\r\n    return EventPointing;\r\n}(Interaction_1.default));\r\nexports.default = EventPointing;\r\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar DateClicking_1 = __webpack_require__(237);\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar EventDragging_1 = __webpack_require__(235);\r\nvar EventResizing_1 = __webpack_require__(234);\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nvar StandardInteractionsMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(StandardInteractionsMixin, _super);\r\n    function StandardInteractionsMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return StandardInteractionsMixin;\r\n}(Mixin_1.default));\r\nexports.default = StandardInteractionsMixin;\r\nStandardInteractionsMixin.prototype.dateClickingClass = DateClicking_1.default;\r\nStandardInteractionsMixin.prototype.dateSelectingClass = DateSelecting_1.default;\r\nStandardInteractionsMixin.prototype.eventPointingClass = EventPointing_1.default;\r\nStandardInteractionsMixin.prototype.eventDraggingClass = EventDragging_1.default;\r\nStandardInteractionsMixin.prototype.eventResizingClass = EventResizing_1.default;\r\nStandardInteractionsMixin.prototype.externalDroppingClass = ExternalDropping_1.default;\r\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar Popover_1 = __webpack_require__(227);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\n/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGrid = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGrid, _super);\r\n    function DayGrid(view) {\r\n        var _this = _super.call(this, view) || this;\r\n        _this.cellWeekNumbersVisible = false; // display week numbers in day cell?\r\n        _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\r\n        // isRigid determines whether the individual rows should ignore the contents and be a constant height.\r\n        // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\r\n        _this.isRigid = false;\r\n        _this.hasAllDayBusinessHours = true;\r\n        return _this;\r\n    }\r\n    // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n    DayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (this.isRTL) {\r\n                seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\r\n                seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\r\n            }\r\n            else {\r\n                seg.leftCol = seg.firstRowDayIndex;\r\n                seg.rightCol = seg.lastRowDayIndex;\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Date Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.renderDates = function (dateProfile) {\r\n        this.dateProfile = dateProfile;\r\n        this.updateDayTable();\r\n        this.renderGrid();\r\n    };\r\n    DayGrid.prototype.unrenderDates = function () {\r\n        this.removeSegPopover();\r\n    };\r\n    // Renders the rows and columns into the component's `this.el`, which should already be assigned.\r\n    DayGrid.prototype.renderGrid = function () {\r\n        var view = this.view;\r\n        var rowCnt = this.rowCnt;\r\n        var colCnt = this.colCnt;\r\n        var html = '';\r\n        var row;\r\n        var col;\r\n        if (this.headContainerEl) {\r\n            this.headContainerEl.html(this.renderHeadHtml());\r\n        }\r\n        for (row = 0; row < rowCnt; row++) {\r\n            html += this.renderDayRowHtml(row, this.isRigid);\r\n        }\r\n        this.el.html(html);\r\n        this.rowEls = this.el.find('.fc-row');\r\n        this.cellEls = this.el.find('.fc-day, .fc-disabled-day');\r\n        this.rowCoordCache = new CoordCache_1.default({\r\n            els: this.rowEls,\r\n            isVertical: true\r\n        });\r\n        this.colCoordCache = new CoordCache_1.default({\r\n            els: this.cellEls.slice(0, this.colCnt),\r\n            isHorizontal: true\r\n        });\r\n        // trigger dayRender with each cell's element\r\n        for (row = 0; row < rowCnt; row++) {\r\n            for (col = 0; col < colCnt; col++) {\r\n                this.publiclyTrigger('dayRender', {\r\n                    context: view,\r\n                    args: [\r\n                        this.getCellDate(row, col),\r\n                        this.getCellEl(row, col),\r\n                        view\r\n                    ]\r\n                });\r\n            }\r\n        }\r\n    };\r\n    // Generates the HTML for a single row, which is a div that wraps a table.\r\n    // `row` is the row number.\r\n    DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\r\n        var theme = this.view.calendar.theme;\r\n        var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\r\n        if (isRigid) {\r\n            classes.push('fc-rigid');\r\n        }\r\n        return '' +\r\n            '<div class=\"' + classes.join(' ') + '\">' +\r\n            '<div class=\"fc-bg\">' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderBgTrHtml(row) +\r\n            '</table>' +\r\n            '</div>' +\r\n            '<div class=\"fc-content-skeleton\">' +\r\n            '<table>' +\r\n            (this.getIsNumbersVisible() ?\r\n                '<thead>' +\r\n                    this.renderNumberTrHtml(row) +\r\n                    '</thead>' :\r\n                '') +\r\n            '</table>' +\r\n            '</div>' +\r\n            '</div>';\r\n    };\r\n    DayGrid.prototype.getIsNumbersVisible = function () {\r\n        return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible;\r\n    };\r\n    DayGrid.prototype.getIsDayNumbersVisible = function () {\r\n        return this.rowCnt > 1;\r\n    };\r\n    /* Grid Number Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.renderNumberTrHtml = function (row) {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderNumberIntroHtml(row)) +\r\n            this.renderNumberCellsHtml(row) +\r\n            (this.isRTL ? this.renderNumberIntroHtml(row) : '') +\r\n            '</tr>';\r\n    };\r\n    DayGrid.prototype.renderNumberIntroHtml = function (row) {\r\n        return this.renderIntroHtml();\r\n    };\r\n    DayGrid.prototype.renderNumberCellsHtml = function (row) {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(row, col);\r\n            htmls.push(this.renderNumberCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    // Generates the HTML for the <td>s of the \"number\" row in the DayGrid's content skeleton.\r\n    // The number row will only exist if either day numbers or week numbers are turned on.\r\n    DayGrid.prototype.renderNumberCellHtml = function (date) {\r\n        var view = this.view;\r\n        var html = '';\r\n        var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\r\n        var classes;\r\n        var weekCalcFirstDoW;\r\n        if (!isDayNumberVisible && !this.cellWeekNumbersVisible) {\r\n            // no numbers in day cell (week number must be along the side)\r\n            return '<td></td>'; //  will create an empty space above events :(\r\n        }\r\n        classes = this.getDayClasses(date);\r\n        classes.unshift('fc-day-top');\r\n        if (this.cellWeekNumbersVisible) {\r\n            // To determine the day of week number change under ISO, we cannot\r\n            // rely on moment.js methods such as firstDayOfWeek() or weekday(),\r\n            // because they rely on the locale's dow (possibly overridden by\r\n            // our firstDay option), which may not be Monday. We cannot change\r\n            // dow, because that would affect the calendar start day as well.\r\n            if (date._locale._fullCalendar_weekCalc === 'ISO') {\r\n                weekCalcFirstDoW = 1; // Monday by ISO 8601 definition\r\n            }\r\n            else {\r\n                weekCalcFirstDoW = date._locale.firstDayOfWeek();\r\n            }\r\n        }\r\n        html += '<td class=\"' + classes.join(' ') + '\"' +\r\n            (isDateValid ?\r\n                ' data-date=\"' + date.format() + '\"' :\r\n                '') +\r\n            '>';\r\n        if (this.cellWeekNumbersVisible && (date.day() === weekCalcFirstDoW)) {\r\n            html += view.buildGotoAnchorHtml({ date: date, type: 'week' }, { 'class': 'fc-week-number' }, date.format('w') // inner HTML\r\n            );\r\n        }\r\n        if (isDayNumberVisible) {\r\n            html += view.buildGotoAnchorHtml(date, { 'class': 'fc-day-number' }, date.format('D') // inner HTML\r\n            );\r\n        }\r\n        html += '</td>';\r\n        return html;\r\n    };\r\n    /* Hit System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.prepareHits = function () {\r\n        this.colCoordCache.build();\r\n        this.rowCoordCache.build();\r\n        this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\r\n    };\r\n    DayGrid.prototype.releaseHits = function () {\r\n        this.colCoordCache.clear();\r\n        this.rowCoordCache.clear();\r\n    };\r\n    DayGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n        if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\r\n            var col = this.colCoordCache.getHorizontalIndex(leftOffset);\r\n            var row = this.rowCoordCache.getVerticalIndex(topOffset);\r\n            if (row != null && col != null) {\r\n                return this.getCellHit(row, col);\r\n            }\r\n        }\r\n    };\r\n    DayGrid.prototype.getHitFootprint = function (hit) {\r\n        var range = this.getCellRange(hit.row, hit.col);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(range.start, range.end), true // all-day?\r\n        );\r\n    };\r\n    DayGrid.prototype.getHitEl = function (hit) {\r\n        return this.getCellEl(hit.row, hit.col);\r\n    };\r\n    /* Cell System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // FYI: the first column is the leftmost column, regardless of date\r\n    DayGrid.prototype.getCellHit = function (row, col) {\r\n        return {\r\n            row: row,\r\n            col: col,\r\n            component: this,\r\n            left: this.colCoordCache.getLeftOffset(col),\r\n            right: this.colCoordCache.getRightOffset(col),\r\n            top: this.rowCoordCache.getTopOffset(row),\r\n            bottom: this.rowCoordCache.getBottomOffset(row)\r\n        };\r\n    };\r\n    DayGrid.prototype.getCellEl = function (row, col) {\r\n        return this.cellEls.eq(row * this.colCnt + col);\r\n    };\r\n    /* Event Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Unrenders all events currently rendered on the grid\r\n    DayGrid.prototype.executeEventUnrender = function () {\r\n        this.removeSegPopover(); // removes the \"more..\" events popover\r\n        _super.prototype.executeEventUnrender.call(this);\r\n    };\r\n    // Retrieves all rendered segment objects currently rendered on the grid\r\n    DayGrid.prototype.getOwnEventSegs = function () {\r\n        // append the segments from the \"more...\" popover\r\n        return _super.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || []);\r\n    };\r\n    /* Event Drag Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event or external element being dragged.\r\n    // `eventLocation` has zoned start and end (optional)\r\n    DayGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            this.renderHighlight(eventFootprints[i].componentFootprint);\r\n        }\r\n        // render drags from OTHER components as helpers\r\n        if (eventFootprints.length && seg && seg.component !== this) {\r\n            this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n            return true; // signal helpers rendered\r\n        }\r\n    };\r\n    // Unrenders any visual indication of a hovering event\r\n    DayGrid.prototype.unrenderDrag = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Event Resize Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being resized\r\n    DayGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            this.renderHighlight(eventFootprints[i].componentFootprint);\r\n        }\r\n        this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n    };\r\n    // Unrenders a visual indication of an event being resized\r\n    DayGrid.prototype.unrenderEventResize = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* More+ Link Popover\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.removeSegPopover = function () {\r\n        if (this.segPopover) {\r\n            this.segPopover.hide(); // in handler, will call segPopover's removeElement\r\n        }\r\n    };\r\n    // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\r\n    // `levelLimit` can be false (don't limit), a number, or true (should be computed).\r\n    DayGrid.prototype.limitRows = function (levelLimit) {\r\n        var rowStructs = this.eventRenderer.rowStructs || [];\r\n        var row; // row #\r\n        var rowLevelLimit;\r\n        for (row = 0; row < rowStructs.length; row++) {\r\n            this.unlimitRow(row);\r\n            if (!levelLimit) {\r\n                rowLevelLimit = false;\r\n            }\r\n            else if (typeof levelLimit === 'number') {\r\n                rowLevelLimit = levelLimit;\r\n            }\r\n            else {\r\n                rowLevelLimit = this.computeRowLevelLimit(row);\r\n            }\r\n            if (rowLevelLimit !== false) {\r\n                this.limitRow(row, rowLevelLimit);\r\n            }\r\n        }\r\n    };\r\n    // Computes the number of levels a row will accomodate without going outside its bounds.\r\n    // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\r\n    // `row` is the row number.\r\n    DayGrid.prototype.computeRowLevelLimit = function (row) {\r\n        var rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\r\n        var rowHeight = rowEl.height(); // TODO: cache somehow?\r\n        var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children();\r\n        var i;\r\n        var trEl;\r\n        var trHeight;\r\n        function iterInnerHeights(i, childNode) {\r\n            trHeight = Math.max(trHeight, $(childNode).outerHeight());\r\n        }\r\n        // Reveal one level <tr> at a time and stop when we find one out of bounds\r\n        for (i = 0; i < trEls.length; i++) {\r\n            trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\r\n            // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\r\n            // so instead, find the tallest inner content element.\r\n            trHeight = 0;\r\n            trEl.find('> td > :first-child').each(iterInnerHeights);\r\n            if (trEl.position().top + trHeight > rowHeight) {\r\n                return i;\r\n            }\r\n        }\r\n        return false; // should not limit at all\r\n    };\r\n    // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\r\n    // `row` is the row number.\r\n    // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\r\n    DayGrid.prototype.limitRow = function (row, levelLimit) {\r\n        var _this = this;\r\n        var rowStruct = this.eventRenderer.rowStructs[row];\r\n        var moreNodes = []; // array of \"more\" <a> links and <td> DOM nodes\r\n        var col = 0; // col #, left-to-right (not chronologically)\r\n        var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\r\n        var cellMatrix; // a matrix (by level, then column) of all <td> jQuery elements in the row\r\n        var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes\r\n        var i;\r\n        var seg;\r\n        var segsBelow; // array of segment objects below `seg` in the current `col`\r\n        var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\r\n        var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\r\n        var td;\r\n        var rowspan;\r\n        var segMoreNodes; // array of \"more\" <td> cells that will stand-in for the current seg's cell\r\n        var j;\r\n        var moreTd;\r\n        var moreWrap;\r\n        var moreLink;\r\n        // Iterates through empty level cells and places \"more\" links inside if need be\r\n        var emptyCellsUntil = function (endCol) {\r\n            while (col < endCol) {\r\n                segsBelow = _this.getCellSegs(row, col, levelLimit);\r\n                if (segsBelow.length) {\r\n                    td = cellMatrix[levelLimit - 1][col];\r\n                    moreLink = _this.renderMoreLink(row, col, segsBelow);\r\n                    moreWrap = $('<div>').append(moreLink);\r\n                    td.append(moreWrap);\r\n                    moreNodes.push(moreWrap[0]);\r\n                }\r\n                col++;\r\n            }\r\n        };\r\n        if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\r\n            levelSegs = rowStruct.segLevels[levelLimit - 1];\r\n            cellMatrix = rowStruct.cellMatrix;\r\n            limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level <tr> elements past the limit\r\n                .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\r\n            // iterate though segments in the last allowable level\r\n            for (i = 0; i < levelSegs.length; i++) {\r\n                seg = levelSegs[i];\r\n                emptyCellsUntil(seg.leftCol); // process empty cells before the segment\r\n                // determine *all* segments below `seg` that occupy the same columns\r\n                colSegsBelow = [];\r\n                totalSegsBelow = 0;\r\n                while (col <= seg.rightCol) {\r\n                    segsBelow = this.getCellSegs(row, col, levelLimit);\r\n                    colSegsBelow.push(segsBelow);\r\n                    totalSegsBelow += segsBelow.length;\r\n                    col++;\r\n                }\r\n                if (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\r\n                    td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\r\n                    rowspan = td.attr('rowspan') || 1;\r\n                    segMoreNodes = [];\r\n                    // make a replacement <td> for each column the segment occupies. will be one for each colspan\r\n                    for (j = 0; j < colSegsBelow.length; j++) {\r\n                        moreTd = $('<td class=\"fc-more-cell\">').attr('rowspan', rowspan);\r\n                        segsBelow = colSegsBelow[j];\r\n                        moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\r\n                        );\r\n                        moreWrap = $('<div>').append(moreLink);\r\n                        moreTd.append(moreWrap);\r\n                        segMoreNodes.push(moreTd[0]);\r\n                        moreNodes.push(moreTd[0]);\r\n                    }\r\n                    td.addClass('fc-limited').after($(segMoreNodes)); // hide original <td> and inject replacements\r\n                    limitedNodes.push(td[0]);\r\n                }\r\n            }\r\n            emptyCellsUntil(this.colCnt); // finish off the level\r\n            rowStruct.moreEls = $(moreNodes); // for easy undoing later\r\n            rowStruct.limitedEls = $(limitedNodes); // for easy undoing later\r\n        }\r\n    };\r\n    // Reveals all levels and removes all \"more\"-related elements for a grid's row.\r\n    // `row` is a row number.\r\n    DayGrid.prototype.unlimitRow = function (row) {\r\n        var rowStruct = this.eventRenderer.rowStructs[row];\r\n        if (rowStruct.moreEls) {\r\n            rowStruct.moreEls.remove();\r\n            rowStruct.moreEls = null;\r\n        }\r\n        if (rowStruct.limitedEls) {\r\n            rowStruct.limitedEls.removeClass('fc-limited');\r\n            rowStruct.limitedEls = null;\r\n        }\r\n    };\r\n    // Renders an <a> element that represents hidden event element for a cell.\r\n    // Responsible for attaching click handler as well.\r\n    DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        return $('<a class=\"fc-more\">')\r\n            .text(this.getMoreLinkText(hiddenSegs.length))\r\n            .on('click', function (ev) {\r\n            var clickOption = _this.opt('eventLimitClick');\r\n            var date = _this.getCellDate(row, col);\r\n            var moreEl = $(ev.currentTarget);\r\n            var dayEl = _this.getCellEl(row, col);\r\n            var allSegs = _this.getCellSegs(row, col);\r\n            // rescope the segments to be within the cell's date\r\n            var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\r\n            var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\r\n            if (typeof clickOption === 'function') {\r\n                // the returned value can be an atomic option\r\n                clickOption = _this.publiclyTrigger('eventLimitClick', {\r\n                    context: view,\r\n                    args: [\r\n                        {\r\n                            date: date.clone(),\r\n                            dayEl: dayEl,\r\n                            moreEl: moreEl,\r\n                            segs: reslicedAllSegs,\r\n                            hiddenSegs: reslicedHiddenSegs\r\n                        },\r\n                        ev,\r\n                        view\r\n                    ]\r\n                });\r\n            }\r\n            if (clickOption === 'popover') {\r\n                _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\r\n            }\r\n            else if (typeof clickOption === 'string') { // a view name\r\n                view.calendar.zoomTo(date, clickOption);\r\n            }\r\n        });\r\n    };\r\n    // Reveals the popover that displays all events within a cell\r\n    DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        var moreWrap = moreLink.parent(); // the <div> wrapper around the <a>\r\n        var topEl; // the element we want to match the top coordinate of\r\n        var options;\r\n        if (this.rowCnt === 1) {\r\n            topEl = view.el; // will cause the popover to cover any sort of header\r\n        }\r\n        else {\r\n            topEl = this.rowEls.eq(row); // will align with top of row\r\n        }\r\n        options = {\r\n            className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),\r\n            content: this.renderSegPopoverContent(row, col, segs),\r\n            parentEl: view.el,\r\n            top: topEl.offset().top,\r\n            autoHide: true,\r\n            viewportConstrain: this.opt('popoverViewportConstrain'),\r\n            hide: function () {\r\n                // kill everything when the popover is hidden\r\n                // notify events to be removed\r\n                if (_this.popoverSegs) {\r\n                    _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);\r\n                }\r\n                _this.segPopover.removeElement();\r\n                _this.segPopover = null;\r\n                _this.popoverSegs = null;\r\n            }\r\n        };\r\n        // Determine horizontal coordinate.\r\n        // We use the moreWrap instead of the <td> to avoid border confusion.\r\n        if (this.isRTL) {\r\n            options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\r\n        }\r\n        else {\r\n            options.left = moreWrap.offset().left - 1; // -1 to be over cell border\r\n        }\r\n        this.segPopover = new Popover_1.default(options);\r\n        this.segPopover.show();\r\n        // the popover doesn't live within the grid's container element, and thus won't get the event\r\n        // delegated-handlers for free. attach event-related handlers to the popover.\r\n        this.bindAllSegHandlersToEl(this.segPopover.el);\r\n        this.triggerAfterEventSegsRendered(segs);\r\n    };\r\n    // Builds the inner DOM contents of the segment popover\r\n    DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {\r\n        var view = this.view;\r\n        var theme = view.calendar.theme;\r\n        var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));\r\n        var content = $('<div class=\"fc-header ' + theme.getClass('popoverHeader') + '\">' +\r\n            '<span class=\"fc-close ' + theme.getIconClass('close') + '\"></span>' +\r\n            '<span class=\"fc-title\">' +\r\n            util_1.htmlEscape(title) +\r\n            '</span>' +\r\n            '<div class=\"fc-clear\"></div>' +\r\n            '</div>' +\r\n            '<div class=\"fc-body ' + theme.getClass('popoverContent') + '\">' +\r\n            '<div class=\"fc-event-container\"></div>' +\r\n            '</div>');\r\n        var segContainer = content.find('.fc-event-container');\r\n        var i;\r\n        // render each seg's `el` and only return the visible segs\r\n        segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true\r\n        this.popoverSegs = segs;\r\n        for (i = 0; i < segs.length; i++) {\r\n            // because segments in the popover are not part of a grid coordinate system, provide a hint to any\r\n            // grids that want to do drag-n-drop about which cell it came from\r\n            this.hitsNeeded();\r\n            segs[i].hit = this.getCellHit(row, col);\r\n            this.hitsNotNeeded();\r\n            segContainer.append(segs[i].el);\r\n        }\r\n        return content;\r\n    };\r\n    // Given the events within an array of segment objects, reslice them to be in a single day\r\n    DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\r\n        var dayStart = dayDate.clone();\r\n        var dayEnd = dayStart.clone().add(1, 'days');\r\n        var dayRange = new UnzonedRange_1.default(dayStart, dayEnd);\r\n        var newSegs = [];\r\n        var i;\r\n        var seg;\r\n        var slicedRange;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);\r\n            if (slicedRange) {\r\n                newSegs.push($.extend({}, seg, {\r\n                    footprint: new EventFootprint_1.default(new ComponentFootprint_1.default(slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),\r\n                    isStart: seg.isStart && slicedRange.isStart,\r\n                    isEnd: seg.isEnd && slicedRange.isEnd\r\n                }));\r\n            }\r\n        }\r\n        // force an order because eventsToSegs doesn't guarantee one\r\n        // TODO: research if still needed\r\n        this.eventRenderer.sortEventSegs(newSegs);\r\n        return newSegs;\r\n    };\r\n    // Generates the text that should be inside a \"more\" link, given the number of events it represents\r\n    DayGrid.prototype.getMoreLinkText = function (num) {\r\n        var opt = this.opt('eventLimitText');\r\n        if (typeof opt === 'function') {\r\n            return opt(num);\r\n        }\r\n        else {\r\n            return '+' + num + ' ' + opt;\r\n        }\r\n    };\r\n    // Returns segments within a given cell.\r\n    // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\r\n    DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\r\n        var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\r\n        var level = startLevel || 0;\r\n        var segs = [];\r\n        var seg;\r\n        while (level < segMatrix.length) {\r\n            seg = segMatrix[level][col];\r\n            if (seg) {\r\n                segs.push(seg);\r\n            }\r\n            level++;\r\n        }\r\n        return segs;\r\n    };\r\n    return DayGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = DayGrid;\r\nDayGrid.prototype.eventRendererClass = DayGridEventRenderer_1.default;\r\nDayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nDayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1.default;\r\nDayGrid.prototype.fillRendererClass = DayGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(DayGrid);\r\nDayTableMixin_1.default.mixInto(DayGrid);\r\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar DayGrid_1 = __webpack_require__(66);\r\n/* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\r\n// It is responsible for managing width/height.\r\nvar BasicView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BasicView, _super);\r\n    function BasicView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.dayGrid = _this.instantiateDayGrid();\r\n        _this.dayGrid.isRigid = _this.hasRigidRows();\r\n        if (_this.opt('weekNumbers')) {\r\n            if (_this.opt('weekNumbersWithinDays')) {\r\n                _this.dayGrid.cellWeekNumbersVisible = true;\r\n                _this.dayGrid.colWeekNumbersVisible = false;\r\n            }\r\n            else {\r\n                _this.dayGrid.cellWeekNumbersVisible = false;\r\n                _this.dayGrid.colWeekNumbersVisible = true;\r\n            }\r\n        }\r\n        _this.addChild(_this.dayGrid);\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    // Generates the DayGrid object this view needs. Draws from this.dayGridClass\r\n    BasicView.prototype.instantiateDayGrid = function () {\r\n        // generate a subclass on the fly with BasicView-specific behavior\r\n        // TODO: cache this subclass\r\n        var subclass = makeDayGridSubclass(this.dayGridClass);\r\n        return new subclass(this);\r\n    };\r\n    BasicView.prototype.executeDateRender = function (dateProfile) {\r\n        this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);\r\n        _super.prototype.executeDateRender.call(this, dateProfile);\r\n    };\r\n    BasicView.prototype.renderSkeleton = function () {\r\n        var dayGridContainerEl;\r\n        var dayGridEl;\r\n        this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\r\n        this.scroller.render();\r\n        dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\r\n        dayGridEl = $('<div class=\"fc-day-grid\">').appendTo(dayGridContainerEl);\r\n        this.el.find('.fc-body > tr > td').append(dayGridContainerEl);\r\n        this.dayGrid.headContainerEl = this.el.find('.fc-head-container');\r\n        this.dayGrid.setElement(dayGridEl);\r\n    };\r\n    BasicView.prototype.unrenderSkeleton = function () {\r\n        this.dayGrid.removeElement();\r\n        this.scroller.destroy();\r\n    };\r\n    // Builds the HTML skeleton for the view.\r\n    // The day-grid component will render inside of a container defined by this HTML.\r\n    BasicView.prototype.renderSkeletonHtml = function () {\r\n        var theme = this.calendar.theme;\r\n        return '' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            (this.opt('columnHeader') ?\r\n                '<thead class=\"fc-head\">' +\r\n                    '<tr>' +\r\n                    '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\r\n                    '</tr>' +\r\n                    '</thead>' :\r\n                '') +\r\n            '<tbody class=\"fc-body\">' +\r\n            '<tr>' +\r\n            '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' +\r\n            '</tr>' +\r\n            '</tbody>' +\r\n            '</table>';\r\n    };\r\n    // Generates an HTML attribute string for setting the width of the week number column, if it is known\r\n    BasicView.prototype.weekNumberStyleAttr = function () {\r\n        if (this.weekNumberWidth != null) {\r\n            return 'style=\"width:' + this.weekNumberWidth + 'px\"';\r\n        }\r\n        return '';\r\n    };\r\n    // Determines whether each row should have a constant height\r\n    BasicView.prototype.hasRigidRows = function () {\r\n        var eventLimit = this.opt('eventLimit');\r\n        return eventLimit && typeof eventLimit !== 'number';\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Refreshes the horizontal dimensions of the view\r\n    BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        var eventLimit = this.opt('eventLimit');\r\n        var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');\r\n        var scrollerHeight;\r\n        var scrollbarWidths;\r\n        // hack to give the view some height prior to dayGrid's columns being rendered\r\n        // TODO: separate setting height from scroller VS dayGrid.\r\n        if (!this.dayGrid.rowEls) {\r\n            if (!isAuto) {\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            return;\r\n        }\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        if (this.dayGrid.colWeekNumbersVisible) {\r\n            // Make sure all week number cells running down the side have the same width.\r\n            // Record the width for cells created later.\r\n            this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));\r\n        }\r\n        // reset all heights to be natural\r\n        this.scroller.clear();\r\n        util_1.uncompensateScroll(headRowEl);\r\n        this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n        // is the event limit a constant level number?\r\n        if (eventLimit && typeof eventLimit === 'number') {\r\n            this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\r\n        }\r\n        // distribute the height to the rows\r\n        // (totalHeight is a \"recommended\" value if isAuto)\r\n        scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n        this.setGridHeight(scrollerHeight, isAuto);\r\n        // is the event limit dynamically calculated?\r\n        if (eventLimit && typeof eventLimit !== 'number') {\r\n            this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\r\n        }\r\n        if (!isAuto) { // should we force dimensions of the scroll container?\r\n            this.scroller.setHeight(scrollerHeight);\r\n            scrollbarWidths = this.scroller.getScrollbarWidths();\r\n            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n                util_1.compensateScroll(headRowEl, scrollbarWidths);\r\n                // doing the scrollbar compensation might have created text overflow which created more height. redo\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            // guarantees the same scrollbar widths\r\n            this.scroller.lockOverflow(scrollbarWidths);\r\n        }\r\n    };\r\n    // given a desired total height of the view, returns what the height of the scroller should be\r\n    BasicView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    // Sets the height of just the DayGrid component in this view\r\n    BasicView.prototype.setGridHeight = function (height, isAuto) {\r\n        if (isAuto) {\r\n            util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\r\n        }\r\n        else {\r\n            util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\r\n        }\r\n    };\r\n    /* Scroll\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    BasicView.prototype.computeInitialDateScroll = function () {\r\n        return { top: 0 };\r\n    };\r\n    BasicView.prototype.queryDateScroll = function () {\r\n        return { top: this.scroller.getScrollTop() };\r\n    };\r\n    BasicView.prototype.applyDateScroll = function (scroll) {\r\n        if (scroll.top !== undefined) {\r\n            this.scroller.setScrollTop(scroll.top);\r\n        }\r\n    };\r\n    return BasicView;\r\n}(View_1.default));\r\nexports.default = BasicView;\r\nBasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1.default;\r\nBasicView.prototype.dayGridClass = DayGrid_1.default;\r\n// customize the rendering behavior of BasicView's dayGrid\r\nfunction makeDayGridSubclass(SuperClass) {\r\n    return /** @class */ (function (_super) {\r\n        tslib_1.__extends(SubClass, _super);\r\n        function SubClass() {\r\n            var _this = _super !== null && _super.apply(this, arguments) || this;\r\n            _this.colWeekNumbersVisible = false; // display week numbers along the side?\r\n            return _this;\r\n        }\r\n        // Generates the HTML that will go before the day-of week header cells\r\n        SubClass.prototype.renderHeadIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '' +\r\n                    '<th class=\"fc-week-number ' + view.calendar.theme.getClass('widgetHeader') + '\" ' + view.weekNumberStyleAttr() + '>' +\r\n                    '<span>' + // needed for matchCellWidths\r\n                    util_1.htmlEscape(this.opt('weekNumberTitle')) +\r\n                    '</span>' +\r\n                    '</th>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\r\n        SubClass.prototype.renderNumberIntroHtml = function (row) {\r\n            var view = this.view;\r\n            var weekStart = this.getCellDate(row, 0);\r\n            if (this.colWeekNumbersVisible) {\r\n                return '' +\r\n                    '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '>' +\r\n                    view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n                    { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, weekStart.format('w') // inner HTML\r\n                    ) +\r\n                    '</td>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that goes before the day bg cells for each day-row\r\n        SubClass.prototype.renderBgIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '<td class=\"fc-week-number ' + view.calendar.theme.getClass('widgetContent') + '\" ' +\r\n                    view.weekNumberStyleAttr() + '></td>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that goes before every other type of row generated by DayGrid.\r\n        // Affects helper-skeleton and highlight-skeleton rows.\r\n        SubClass.prototype.renderIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '></td>';\r\n            }\r\n            return '';\r\n        };\r\n        SubClass.prototype.getIsNumbersVisible = function () {\r\n            return DayGrid_1.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;\r\n        };\r\n        return SubClass;\r\n    }(SuperClass));\r\n}\r\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar BasicViewDateProfileGenerator = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BasicViewDateProfileGenerator, _super);\r\n    function BasicViewDateProfileGenerator() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Computes the date range that will be rendered.\r\n    BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange\r\n        var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n        var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n        // year and month views should be aligned with weeks. this is already done for week\r\n        if (/^(year|month)$/.test(currentRangeUnit)) {\r\n            start.startOf('week');\r\n            // make end-of-week if not already\r\n            if (end.weekday()) {\r\n                end.add(1, 'week').startOf('week'); // exclusively move backwards\r\n            }\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    return BasicViewDateProfileGenerator;\r\n}(DateProfileGenerator_1.default));\r\nexports.default = BasicViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 69 */,\n/* 70 */,\n/* 71 */,\n/* 72 */,\n/* 73 */,\n/* 74 */,\n/* 75 */,\n/* 76 */,\n/* 77 */,\n/* 78 */,\n/* 79 */,\n/* 80 */,\n/* 81 */,\n/* 82 */,\n/* 83 */,\n/* 84 */,\n/* 85 */,\n/* 86 */,\n/* 87 */,\n/* 88 */,\n/* 89 */,\n/* 90 */,\n/* 91 */,\n/* 92 */,\n/* 93 */,\n/* 94 */,\n/* 95 */,\n/* 96 */,\n/* 97 */,\n/* 98 */,\n/* 99 */,\n/* 100 */,\n/* 101 */,\n/* 102 */,\n/* 103 */,\n/* 104 */,\n/* 105 */,\n/* 106 */,\n/* 107 */,\n/* 108 */,\n/* 109 */,\n/* 110 */,\n/* 111 */,\n/* 112 */,\n/* 113 */,\n/* 114 */,\n/* 115 */,\n/* 116 */,\n/* 117 */,\n/* 118 */,\n/* 119 */,\n/* 120 */,\n/* 121 */,\n/* 122 */,\n/* 123 */,\n/* 124 */,\n/* 125 */,\n/* 126 */,\n/* 127 */,\n/* 128 */,\n/* 129 */,\n/* 130 */,\n/* 131 */,\n/* 132 */,\n/* 133 */,\n/* 134 */,\n/* 135 */,\n/* 136 */,\n/* 137 */,\n/* 138 */,\n/* 139 */,\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */,\n/* 165 */,\n/* 166 */,\n/* 167 */,\n/* 168 */,\n/* 169 */,\n/* 170 */,\n/* 171 */,\n/* 172 */,\n/* 173 */,\n/* 174 */,\n/* 175 */,\n/* 176 */,\n/* 177 */,\n/* 178 */,\n/* 179 */,\n/* 180 */,\n/* 181 */,\n/* 182 */,\n/* 183 */,\n/* 184 */,\n/* 185 */,\n/* 186 */,\n/* 187 */,\n/* 188 */,\n/* 189 */,\n/* 190 */,\n/* 191 */,\n/* 192 */,\n/* 193 */,\n/* 194 */,\n/* 195 */,\n/* 196 */,\n/* 197 */,\n/* 198 */,\n/* 199 */,\n/* 200 */,\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */,\n/* 216 */,\n/* 217 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar util_1 = __webpack_require__(19);\r\nvar Constraints = /** @class */ (function () {\r\n    function Constraints(eventManager, _calendar) {\r\n        this.eventManager = eventManager;\r\n        this._calendar = _calendar;\r\n    }\r\n    Constraints.prototype.opt = function (name) {\r\n        return this._calendar.opt(name);\r\n    };\r\n    /*\r\n    determines if eventInstanceGroup is allowed,\r\n    in relation to other EVENTS and business hours.\r\n    */\r\n    Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var eventDef = eventInstanceGroup.getEventDef();\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        var peerEventInstances = this.getPeerEventInstances(eventDef);\r\n        var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n        var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n        var constraintVal = eventDef.getConstraint();\r\n        var overlapVal = eventDef.getOverlap();\r\n        var eventAllowFunc = this.opt('eventAllow');\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (eventAllowFunc) {\r\n            for (i = 0; i < eventFootprints.length; i++) {\r\n                if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    Constraints.prototype.getPeerEventInstances = function (eventDef) {\r\n        return this.eventManager.getEventInstancesWithoutId(eventDef.id);\r\n    };\r\n    Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n        var peerEventInstances = this.eventManager.getEventInstances();\r\n        var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n        var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n        var selectAllowFunc;\r\n        if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {\r\n            selectAllowFunc = this.opt('selectAllow');\r\n            if (selectAllowFunc) {\r\n                return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional\r\n    ) {\r\n        var constraintFootprints; // ComponentFootprint[]\r\n        var overlapEventFootprints; // EventFootprint[]\r\n        if (constraintVal != null) {\r\n            constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);\r\n            if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {\r\n                return false;\r\n            }\r\n        }\r\n        overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);\r\n        if (overlapVal === false) {\r\n            if (overlapEventFootprints.length) {\r\n                return false;\r\n            }\r\n        }\r\n        else if (typeof overlapVal === 'function') {\r\n            if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (subjectEventInstance) {\r\n            if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    // Constraint\r\n    // ------------------------------------------------------------------------------------------------\r\n    Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {\r\n        var i;\r\n        for (i = 0; i < constraintFootprints.length; i++) {\r\n            if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {\r\n        var eventInstances;\r\n        if (constraintVal === 'businessHours') {\r\n            return this.buildCurrentBusinessFootprints(isAllDay);\r\n        }\r\n        else if (typeof constraintVal === 'object') {\r\n            eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events\r\n            if (!eventInstances) { // invalid input. fallback to parsing footprint directly\r\n                return this.parseFootprints(constraintVal);\r\n            }\r\n            else {\r\n                return this.eventInstancesToFootprints(eventInstances);\r\n            }\r\n        }\r\n        else if (constraintVal != null) { // an ID\r\n            eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);\r\n            return this.eventInstancesToFootprints(eventInstances);\r\n        }\r\n    };\r\n    // returns ComponentFootprint[]\r\n    // uses current view's range\r\n    Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {\r\n        var view = this._calendar.view;\r\n        var businessHourGenerator = view.get('businessHourGenerator');\r\n        var unzonedRange = view.dateProfile.activeUnzonedRange;\r\n        var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);\r\n        if (eventInstanceGroup) {\r\n            return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);\r\n        }\r\n        else {\r\n            return [];\r\n        }\r\n    };\r\n    // conversion util\r\n    Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {\r\n        var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventRanges);\r\n        return eventFootprints.map(util_1.eventFootprintToComponentFootprint);\r\n    };\r\n    // Overlap\r\n    // ------------------------------------------------------------------------------------------------\r\n    Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {\r\n        var overlapEventFootprints = [];\r\n        var i;\r\n        for (i = 0; i < peerEventFootprints.length; i++) {\r\n            if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {\r\n                overlapEventFootprints.push(peerEventFootprints[i]);\r\n            }\r\n        }\r\n        return overlapEventFootprints;\r\n    };\r\n    // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints\r\n    // ------------------------------------------------------------------------------------------------\r\n    // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to\r\n    // constraints whereas the Grid code is related to rendering. Each approach might want to convert\r\n    // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make\r\n    // this more DRY.\r\n    /*\r\n    Returns false on invalid input.\r\n    */\r\n    Constraints.prototype.parseEventDefToInstances = function (eventInput) {\r\n        var eventManager = this.eventManager;\r\n        var eventDef = EventDefParser_1.default.parse(eventInput, new EventSource_1.default(this._calendar));\r\n        if (!eventDef) { // invalid\r\n            return false;\r\n        }\r\n        return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);\r\n    };\r\n    Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n        var i;\r\n        var eventFootprints = [];\r\n        for (i = 0; i < eventRanges.length; i++) {\r\n            eventFootprints.push.apply(// footprints\r\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n        }\r\n        return eventFootprints;\r\n    };\r\n    Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n        return [util_1.eventRangeToEventFootprint(eventRange)];\r\n    };\r\n    /*\r\n    Parses footprints directly.\r\n    Very similar to EventDateProfile::parse :(\r\n    */\r\n    Constraints.prototype.parseFootprints = function (rawInput) {\r\n        var start;\r\n        var end;\r\n        if (rawInput.start) {\r\n            start = this._calendar.moment(rawInput.start);\r\n            if (!start.isValid()) {\r\n                start = null;\r\n            }\r\n        }\r\n        if (rawInput.end) {\r\n            end = this._calendar.moment(rawInput.end);\r\n            if (!end.isValid()) {\r\n                end = null;\r\n            }\r\n        }\r\n        return [\r\n            new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay\r\n            )\r\n        ];\r\n    };\r\n    // Footprint Utils\r\n    // ----------------------------------------------------------------------------------------\r\n    Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {\r\n        return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);\r\n    };\r\n    Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {\r\n        return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);\r\n    };\r\n    return Constraints;\r\n}());\r\nexports.default = Constraints;\r\n// optional subjectEventInstance\r\nfunction isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {\r\n    var i;\r\n    for (i = 0; i < overlapEventFootprints.length; i++) {\r\n        if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {\r\n    var subjectLegacyInstance = subjectEventInstance.toLegacy();\r\n    var i;\r\n    var overlapEventInstance;\r\n    var overlapEventDef;\r\n    var overlapVal;\r\n    for (i = 0; i < overlapEventFootprints.length; i++) {\r\n        overlapEventInstance = overlapEventFootprints[i].eventInstance;\r\n        overlapEventDef = overlapEventInstance.def;\r\n        // don't need to pass in calendar, because don't want to consider global eventOverlap property,\r\n        // because we already considered that earlier in the process.\r\n        overlapVal = overlapEventDef.getOverlap();\r\n        if (overlapVal === false) {\r\n            return false;\r\n        }\r\n        else if (typeof overlapVal === 'function') {\r\n            if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\n\n/***/ }),\n/* 218 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar BUSINESS_HOUR_EVENT_DEFAULTS = {\r\n    start: '09:00',\r\n    end: '17:00',\r\n    dow: [1, 2, 3, 4, 5],\r\n    rendering: 'inverse-background'\r\n    // classNames are defined in businessHoursSegClasses\r\n};\r\nvar BusinessHourGenerator = /** @class */ (function () {\r\n    function BusinessHourGenerator(rawComplexDef, calendar) {\r\n        this.rawComplexDef = rawComplexDef;\r\n        this.calendar = calendar;\r\n    }\r\n    BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {\r\n        var eventDefs = this.buildEventDefs(isAllDay);\r\n        var eventInstanceGroup;\r\n        if (eventDefs.length) {\r\n            eventInstanceGroup = new EventInstanceGroup_1.default(util_1.eventDefsToEventInstances(eventDefs, unzonedRange));\r\n            // so that inverse-background rendering can happen even when no eventRanges in view\r\n            eventInstanceGroup.explicitEventDef = eventDefs[0];\r\n            return eventInstanceGroup;\r\n        }\r\n    };\r\n    BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {\r\n        var rawComplexDef = this.rawComplexDef;\r\n        var rawDefs = [];\r\n        var requireDow = false;\r\n        var i;\r\n        var defs = [];\r\n        if (rawComplexDef === true) {\r\n            rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim\r\n        }\r\n        else if ($.isPlainObject(rawComplexDef)) {\r\n            rawDefs = [rawComplexDef];\r\n        }\r\n        else if ($.isArray(rawComplexDef)) {\r\n            rawDefs = rawComplexDef;\r\n            requireDow = true; // every sub-definition NEEDS a day-of-week\r\n        }\r\n        for (i = 0; i < rawDefs.length; i++) {\r\n            if (!requireDow || rawDefs[i].dow) {\r\n                defs.push(this.buildEventDef(isAllDay, rawDefs[i]));\r\n            }\r\n        }\r\n        return defs;\r\n    };\r\n    BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {\r\n        var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);\r\n        if (isAllDay) {\r\n            fullRawDef.start = null;\r\n            fullRawDef.end = null;\r\n        }\r\n        return RecurringEventDef_1.default.parse(fullRawDef, new EventSource_1.default(this.calendar) // dummy source\r\n        );\r\n    };\r\n    return BusinessHourGenerator;\r\n}());\r\nexports.default = BusinessHourGenerator;\r\n\n\n/***/ }),\n/* 219 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventPeriod = /** @class */ (function () {\r\n    function EventPeriod(start, end, timezone) {\r\n        this.pendingCnt = 0;\r\n        this.freezeDepth = 0;\r\n        this.stuntedReleaseCnt = 0;\r\n        this.releaseCnt = 0;\r\n        this.start = start;\r\n        this.end = end;\r\n        this.timezone = timezone;\r\n        this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone());\r\n        this.requestsByUid = {};\r\n        this.eventDefsByUid = {};\r\n        this.eventDefsById = {};\r\n        this.eventInstanceGroupsById = {};\r\n    }\r\n    EventPeriod.prototype.isWithinRange = function (start, end) {\r\n        // TODO: use a range util function?\r\n        return !start.isBefore(this.start) && !end.isAfter(this.end);\r\n    };\r\n    // Requesting and Purging\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.requestSources = function (sources) {\r\n        this.freeze();\r\n        for (var i = 0; i < sources.length; i++) {\r\n            this.requestSource(sources[i]);\r\n        }\r\n        this.thaw();\r\n    };\r\n    EventPeriod.prototype.requestSource = function (source) {\r\n        var _this = this;\r\n        var request = { source: source, status: 'pending', eventDefs: null };\r\n        this.requestsByUid[source.uid] = request;\r\n        this.pendingCnt += 1;\r\n        source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {\r\n            if (request.status !== 'cancelled') {\r\n                request.status = 'completed';\r\n                request.eventDefs = eventDefs;\r\n                _this.addEventDefs(eventDefs);\r\n                _this.pendingCnt--;\r\n                _this.tryRelease();\r\n            }\r\n        }, function () {\r\n            if (request.status !== 'cancelled') {\r\n                request.status = 'failed';\r\n                _this.pendingCnt--;\r\n                _this.tryRelease();\r\n            }\r\n        });\r\n    };\r\n    EventPeriod.prototype.purgeSource = function (source) {\r\n        var request = this.requestsByUid[source.uid];\r\n        if (request) {\r\n            delete this.requestsByUid[source.uid];\r\n            if (request.status === 'pending') {\r\n                request.status = 'cancelled';\r\n                this.pendingCnt--;\r\n                this.tryRelease();\r\n            }\r\n            else if (request.status === 'completed') {\r\n                request.eventDefs.forEach(this.removeEventDef.bind(this));\r\n            }\r\n        }\r\n    };\r\n    EventPeriod.prototype.purgeAllSources = function () {\r\n        var requestsByUid = this.requestsByUid;\r\n        var uid;\r\n        var request;\r\n        var completedCnt = 0;\r\n        for (uid in requestsByUid) {\r\n            request = requestsByUid[uid];\r\n            if (request.status === 'pending') {\r\n                request.status = 'cancelled';\r\n            }\r\n            else if (request.status === 'completed') {\r\n                completedCnt++;\r\n            }\r\n        }\r\n        this.requestsByUid = {};\r\n        this.pendingCnt = 0;\r\n        if (completedCnt) {\r\n            this.removeAllEventDefs(); // might release\r\n        }\r\n    };\r\n    // Event Definitions\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {\r\n        return this.eventDefsByUid[eventDefUid];\r\n    };\r\n    EventPeriod.prototype.getEventDefsById = function (eventDefId) {\r\n        var a = this.eventDefsById[eventDefId];\r\n        if (a) {\r\n            return a.slice(); // clone\r\n        }\r\n        return [];\r\n    };\r\n    EventPeriod.prototype.addEventDefs = function (eventDefs) {\r\n        for (var i = 0; i < eventDefs.length; i++) {\r\n            this.addEventDef(eventDefs[i]);\r\n        }\r\n    };\r\n    EventPeriod.prototype.addEventDef = function (eventDef) {\r\n        var eventDefsById = this.eventDefsById;\r\n        var eventDefId = eventDef.id;\r\n        var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);\r\n        var eventInstances = eventDef.buildInstances(this.unzonedRange);\r\n        var i;\r\n        eventDefs.push(eventDef);\r\n        this.eventDefsByUid[eventDef.uid] = eventDef;\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            this.addEventInstance(eventInstances[i], eventDefId);\r\n        }\r\n    };\r\n    EventPeriod.prototype.removeEventDefsById = function (eventDefId) {\r\n        var _this = this;\r\n        this.getEventDefsById(eventDefId).forEach(function (eventDef) {\r\n            _this.removeEventDef(eventDef);\r\n        });\r\n    };\r\n    EventPeriod.prototype.removeAllEventDefs = function () {\r\n        var isEmpty = $.isEmptyObject(this.eventDefsByUid);\r\n        this.eventDefsByUid = {};\r\n        this.eventDefsById = {};\r\n        this.eventInstanceGroupsById = {};\r\n        if (!isEmpty) {\r\n            this.tryRelease();\r\n        }\r\n    };\r\n    EventPeriod.prototype.removeEventDef = function (eventDef) {\r\n        var eventDefsById = this.eventDefsById;\r\n        var eventDefs = eventDefsById[eventDef.id];\r\n        delete this.eventDefsByUid[eventDef.uid];\r\n        if (eventDefs) {\r\n            util_1.removeExact(eventDefs, eventDef);\r\n            if (!eventDefs.length) {\r\n                delete eventDefsById[eventDef.id];\r\n            }\r\n            this.removeEventInstancesForDef(eventDef);\r\n        }\r\n    };\r\n    // Event Instances\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.getEventInstances = function () {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstances = [];\r\n        var id;\r\n        for (id in eventInstanceGroupsById) {\r\n            eventInstances.push.apply(eventInstances, // append\r\n            eventInstanceGroupsById[id].eventInstances);\r\n        }\r\n        return eventInstances;\r\n    };\r\n    EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {\r\n        var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];\r\n        if (eventInstanceGroup) {\r\n            return eventInstanceGroup.eventInstances.slice(); // clone\r\n        }\r\n        return [];\r\n    };\r\n    EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var matchingInstances = [];\r\n        var id;\r\n        for (id in eventInstanceGroupsById) {\r\n            if (id !== eventDefId) {\r\n                matchingInstances.push.apply(matchingInstances, // append\r\n                eventInstanceGroupsById[id].eventInstances);\r\n            }\r\n        }\r\n        return matchingInstances;\r\n    };\r\n    EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||\r\n            (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default());\r\n        eventInstanceGroup.eventInstances.push(eventInstance);\r\n        this.tryRelease();\r\n    };\r\n    EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];\r\n        var removeCnt;\r\n        if (eventInstanceGroup) {\r\n            removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {\r\n                return currentEventInstance.def === eventDef;\r\n            });\r\n            if (!eventInstanceGroup.eventInstances.length) {\r\n                delete eventInstanceGroupsById[eventDef.id];\r\n            }\r\n            if (removeCnt) {\r\n                this.tryRelease();\r\n            }\r\n        }\r\n    };\r\n    // Releasing and Freezing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.tryRelease = function () {\r\n        if (!this.pendingCnt) {\r\n            if (!this.freezeDepth) {\r\n                this.release();\r\n            }\r\n            else {\r\n                this.stuntedReleaseCnt++;\r\n            }\r\n        }\r\n    };\r\n    EventPeriod.prototype.release = function () {\r\n        this.releaseCnt++;\r\n        this.trigger('release', this.eventInstanceGroupsById);\r\n    };\r\n    EventPeriod.prototype.whenReleased = function () {\r\n        var _this = this;\r\n        if (this.releaseCnt) {\r\n            return Promise_1.default.resolve(this.eventInstanceGroupsById);\r\n        }\r\n        else {\r\n            return Promise_1.default.construct(function (onResolve) {\r\n                _this.one('release', onResolve);\r\n            });\r\n        }\r\n    };\r\n    EventPeriod.prototype.freeze = function () {\r\n        if (!(this.freezeDepth++)) {\r\n            this.stuntedReleaseCnt = 0;\r\n        }\r\n    };\r\n    EventPeriod.prototype.thaw = function () {\r\n        if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {\r\n            this.release();\r\n        }\r\n    };\r\n    return EventPeriod;\r\n}());\r\nexports.default = EventPeriod;\r\nEmitterMixin_1.default.mixInto(EventPeriod);\r\n\n\n/***/ }),\n/* 220 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar EventManager = /** @class */ (function () {\r\n    function EventManager(calendar) {\r\n        this.calendar = calendar;\r\n        this.stickySource = new ArrayEventSource_1.default(calendar);\r\n        this.otherSources = [];\r\n    }\r\n    EventManager.prototype.requestEvents = function (start, end, timezone, force) {\r\n        if (force ||\r\n            !this.currentPeriod ||\r\n            !this.currentPeriod.isWithinRange(start, end) ||\r\n            timezone !== this.currentPeriod.timezone) {\r\n            this.setPeriod(// will change this.currentPeriod\r\n            new EventPeriod_1.default(start, end, timezone));\r\n        }\r\n        return this.currentPeriod.whenReleased();\r\n    };\r\n    // Source Adding/Removing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.addSource = function (eventSource) {\r\n        this.otherSources.push(eventSource);\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.requestSource(eventSource); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeSource = function (doomedSource) {\r\n        util_1.removeExact(this.otherSources, doomedSource);\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.purgeSource(doomedSource); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeAllSources = function () {\r\n        this.otherSources = [];\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.purgeAllSources(); // might release\r\n        }\r\n    };\r\n    // Source Refetching\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.refetchSource = function (eventSource) {\r\n        var currentPeriod = this.currentPeriod;\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            currentPeriod.purgeSource(eventSource);\r\n            currentPeriod.requestSource(eventSource);\r\n            currentPeriod.thaw();\r\n        }\r\n    };\r\n    EventManager.prototype.refetchAllSources = function () {\r\n        var currentPeriod = this.currentPeriod;\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            currentPeriod.purgeAllSources();\r\n            currentPeriod.requestSources(this.getSources());\r\n            currentPeriod.thaw();\r\n        }\r\n    };\r\n    // Source Querying\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.getSources = function () {\r\n        return [this.stickySource].concat(this.otherSources);\r\n    };\r\n    // like querySources, but accepts multple match criteria (like multiple IDs)\r\n    EventManager.prototype.multiQuerySources = function (matchInputs) {\r\n        // coerce into an array\r\n        if (!matchInputs) {\r\n            matchInputs = [];\r\n        }\r\n        else if (!$.isArray(matchInputs)) {\r\n            matchInputs = [matchInputs];\r\n        }\r\n        var matchingSources = [];\r\n        var i;\r\n        // resolve raw inputs to real event source objects\r\n        for (i = 0; i < matchInputs.length; i++) {\r\n            matchingSources.push.apply(// append\r\n            matchingSources, this.querySources(matchInputs[i]));\r\n        }\r\n        return matchingSources;\r\n    };\r\n    // matchInput can either by a real event source object, an ID, or the function/URL for the source.\r\n    // returns an array of matching source objects.\r\n    EventManager.prototype.querySources = function (matchInput) {\r\n        var sources = this.otherSources;\r\n        var i;\r\n        var source;\r\n        // given a proper event source object\r\n        for (i = 0; i < sources.length; i++) {\r\n            source = sources[i];\r\n            if (source === matchInput) {\r\n                return [source];\r\n            }\r\n        }\r\n        // an ID match\r\n        source = this.getSourceById(EventSource_1.default.normalizeId(matchInput));\r\n        if (source) {\r\n            return [source];\r\n        }\r\n        // parse as an event source\r\n        matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar);\r\n        if (matchInput) {\r\n            return $.grep(sources, function (source) {\r\n                return isSourcesEquivalent(matchInput, source);\r\n            });\r\n        }\r\n    };\r\n    /*\r\n    ID assumed to already be normalized\r\n    */\r\n    EventManager.prototype.getSourceById = function (id) {\r\n        return $.grep(this.otherSources, function (source) {\r\n            return source.id && source.id === id;\r\n        })[0];\r\n    };\r\n    // Event-Period\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.setPeriod = function (eventPeriod) {\r\n        if (this.currentPeriod) {\r\n            this.unbindPeriod(this.currentPeriod);\r\n            this.currentPeriod = null;\r\n        }\r\n        this.currentPeriod = eventPeriod;\r\n        this.bindPeriod(eventPeriod);\r\n        eventPeriod.requestSources(this.getSources());\r\n    };\r\n    EventManager.prototype.bindPeriod = function (eventPeriod) {\r\n        this.listenTo(eventPeriod, 'release', function (eventsPayload) {\r\n            this.trigger('release', eventsPayload);\r\n        });\r\n    };\r\n    EventManager.prototype.unbindPeriod = function (eventPeriod) {\r\n        this.stopListeningTo(eventPeriod);\r\n    };\r\n    // Event Getting/Adding/Removing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.getEventDefByUid = function (uid) {\r\n        if (this.currentPeriod) {\r\n            return this.currentPeriod.getEventDefByUid(uid);\r\n        }\r\n    };\r\n    EventManager.prototype.addEventDef = function (eventDef, isSticky) {\r\n        if (isSticky) {\r\n            this.stickySource.addEventDef(eventDef);\r\n        }\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.addEventDef(eventDef); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeEventDefsById = function (eventId) {\r\n        this.getSources().forEach(function (eventSource) {\r\n            eventSource.removeEventDefsById(eventId);\r\n        });\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.removeEventDefsById(eventId); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeAllEventDefs = function () {\r\n        this.getSources().forEach(function (eventSource) {\r\n            eventSource.removeAllEventDefs();\r\n        });\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.removeAllEventDefs();\r\n        }\r\n    };\r\n    // Event Mutating\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    /*\r\n    Returns an undo function.\r\n    */\r\n    EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {\r\n        var currentPeriod = this.currentPeriod;\r\n        var eventDefs;\r\n        var undoFuncs = [];\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            eventDefs = currentPeriod.getEventDefsById(eventDefId);\r\n            eventDefs.forEach(function (eventDef) {\r\n                // add/remove esp because id might change\r\n                currentPeriod.removeEventDef(eventDef);\r\n                undoFuncs.push(eventDefMutation.mutateSingle(eventDef));\r\n                currentPeriod.addEventDef(eventDef);\r\n            });\r\n            currentPeriod.thaw();\r\n            return function () {\r\n                currentPeriod.freeze();\r\n                for (var i = 0; i < eventDefs.length; i++) {\r\n                    currentPeriod.removeEventDef(eventDefs[i]);\r\n                    undoFuncs[i]();\r\n                    currentPeriod.addEventDef(eventDefs[i]);\r\n                }\r\n                currentPeriod.thaw();\r\n            };\r\n        }\r\n        return function () { };\r\n    };\r\n    /*\r\n    copies and then mutates\r\n    */\r\n    EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {\r\n        var eventDefs = this.getEventDefsById(eventDefId);\r\n        var i;\r\n        var defCopy;\r\n        var allInstances = [];\r\n        for (i = 0; i < eventDefs.length; i++) {\r\n            defCopy = eventDefs[i].clone();\r\n            if (defCopy instanceof SingleEventDef_1.default) {\r\n                eventDefMutation.mutateSingle(defCopy);\r\n                allInstances.push.apply(allInstances, // append\r\n                defCopy.buildInstances());\r\n            }\r\n        }\r\n        return new EventInstanceGroup_1.default(allInstances);\r\n    };\r\n    // Freezing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.freeze = function () {\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.freeze();\r\n        }\r\n    };\r\n    EventManager.prototype.thaw = function () {\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.thaw();\r\n        }\r\n    };\r\n    // methods that simply forward to EventPeriod\r\n    EventManager.prototype.getEventDefsById = function (eventDefId) {\r\n        return this.currentPeriod.getEventDefsById(eventDefId);\r\n    };\r\n    EventManager.prototype.getEventInstances = function () {\r\n        return this.currentPeriod.getEventInstances();\r\n    };\r\n    EventManager.prototype.getEventInstancesWithId = function (eventDefId) {\r\n        return this.currentPeriod.getEventInstancesWithId(eventDefId);\r\n    };\r\n    EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n        return this.currentPeriod.getEventInstancesWithoutId(eventDefId);\r\n    };\r\n    return EventManager;\r\n}());\r\nexports.default = EventManager;\r\nEmitterMixin_1.default.mixInto(EventManager);\r\nListenerMixin_1.default.mixInto(EventManager);\r\nfunction isSourcesEquivalent(source0, source1) {\r\n    return source0.getPrimitive() === source1.getPrimitive();\r\n}\r\n\n\n/***/ }),\n/* 221 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar StandardTheme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(StandardTheme, _super);\r\n    function StandardTheme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return StandardTheme;\r\n}(Theme_1.default));\r\nexports.default = StandardTheme;\r\nStandardTheme.prototype.classes = {\r\n    widget: 'fc-unthemed',\r\n    widgetHeader: 'fc-widget-header',\r\n    widgetContent: 'fc-widget-content',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'fc-button',\r\n    cornerLeft: 'fc-corner-left',\r\n    cornerRight: 'fc-corner-right',\r\n    stateDefault: 'fc-state-default',\r\n    stateActive: 'fc-state-active',\r\n    stateDisabled: 'fc-state-disabled',\r\n    stateHover: 'fc-state-hover',\r\n    stateDown: 'fc-state-down',\r\n    popoverHeader: 'fc-widget-header',\r\n    popoverContent: 'fc-widget-content',\r\n    // day grid\r\n    headerRow: 'fc-widget-header',\r\n    dayRow: 'fc-widget-content',\r\n    // list view\r\n    listView: 'fc-widget-content'\r\n};\r\nStandardTheme.prototype.baseIconClass = 'fc-icon';\r\nStandardTheme.prototype.iconClasses = {\r\n    close: 'fc-icon-x',\r\n    prev: 'fc-icon-left-single-arrow',\r\n    next: 'fc-icon-right-single-arrow',\r\n    prevYear: 'fc-icon-left-double-arrow',\r\n    nextYear: 'fc-icon-right-double-arrow'\r\n};\r\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons';\r\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\r\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\r\n\n\n/***/ }),\n/* 222 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar JqueryUiTheme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JqueryUiTheme, _super);\r\n    function JqueryUiTheme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return JqueryUiTheme;\r\n}(Theme_1.default));\r\nexports.default = JqueryUiTheme;\r\nJqueryUiTheme.prototype.classes = {\r\n    widget: 'ui-widget',\r\n    widgetHeader: 'ui-widget-header',\r\n    widgetContent: 'ui-widget-content',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'ui-button',\r\n    cornerLeft: 'ui-corner-left',\r\n    cornerRight: 'ui-corner-right',\r\n    stateDefault: 'ui-state-default',\r\n    stateActive: 'ui-state-active',\r\n    stateDisabled: 'ui-state-disabled',\r\n    stateHover: 'ui-state-hover',\r\n    stateDown: 'ui-state-down',\r\n    today: 'ui-state-highlight',\r\n    popoverHeader: 'ui-widget-header',\r\n    popoverContent: 'ui-widget-content',\r\n    // day grid\r\n    headerRow: 'ui-widget-header',\r\n    dayRow: 'ui-widget-content',\r\n    // list view\r\n    listView: 'ui-widget-content'\r\n};\r\nJqueryUiTheme.prototype.baseIconClass = 'ui-icon';\r\nJqueryUiTheme.prototype.iconClasses = {\r\n    close: 'ui-icon-closethick',\r\n    prev: 'ui-icon-circle-triangle-w',\r\n    next: 'ui-icon-circle-triangle-e',\r\n    prevYear: 'ui-icon-seek-prev',\r\n    nextYear: 'ui-icon-seek-next'\r\n};\r\nJqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';\r\nJqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';\r\nJqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';\r\n\n\n/***/ }),\n/* 223 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar FuncEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FuncEventSource, _super);\r\n    function FuncEventSource() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    FuncEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if ($.isFunction(rawInput.events)) { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if ($.isFunction(rawInput)) { // short form\r\n            rawProps = { events: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    FuncEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var _this = this;\r\n        this.calendar.pushLoading();\r\n        return Promise_1.default.construct(function (onResolve) {\r\n            _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {\r\n                _this.calendar.popLoading();\r\n                onResolve(_this.parseEventDefs(rawEventDefs));\r\n            });\r\n        });\r\n    };\r\n    FuncEventSource.prototype.getPrimitive = function () {\r\n        return this.func;\r\n    };\r\n    FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        this.func = rawProps.events;\r\n        return superSuccess;\r\n    };\r\n    return FuncEventSource;\r\n}(EventSource_1.default));\r\nexports.default = FuncEventSource;\r\nFuncEventSource.defineStandardProps({\r\n    events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 224 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar JsonFeedEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JsonFeedEventSource, _super);\r\n    function JsonFeedEventSource() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    JsonFeedEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if (typeof rawInput.url === 'string') { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if (typeof rawInput === 'string') { // short form\r\n            rawProps = { url: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var _this = this;\r\n        var ajaxSettings = this.ajaxSettings;\r\n        var onSuccess = ajaxSettings.success;\r\n        var onError = ajaxSettings.error;\r\n        var requestParams = this.buildRequestParams(start, end, timezone);\r\n        // todo: eventually handle the promise's then,\r\n        // don't intercept success/error\r\n        // tho will be a breaking API change\r\n        this.calendar.pushLoading();\r\n        return Promise_1.default.construct(function (onResolve, onReject) {\r\n            $.ajax($.extend({}, // destination\r\n            JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {\r\n                url: _this.url,\r\n                data: requestParams,\r\n                success: function (rawEventDefs, status, xhr) {\r\n                    var callbackRes;\r\n                    _this.calendar.popLoading();\r\n                    if (rawEventDefs) {\r\n                        callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`\r\n                        if ($.isArray(callbackRes)) {\r\n                            rawEventDefs = callbackRes;\r\n                        }\r\n                        onResolve(_this.parseEventDefs(rawEventDefs));\r\n                    }\r\n                    else {\r\n                        onReject();\r\n                    }\r\n                },\r\n                error: function (xhr, statusText, errorThrown) {\r\n                    _this.calendar.popLoading();\r\n                    util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`\r\n                    onReject();\r\n                }\r\n            }));\r\n        });\r\n    };\r\n    JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {\r\n        var calendar = this.calendar;\r\n        var ajaxSettings = this.ajaxSettings;\r\n        var startParam;\r\n        var endParam;\r\n        var timezoneParam;\r\n        var customRequestParams;\r\n        var params = {};\r\n        startParam = this.startParam;\r\n        if (startParam == null) {\r\n            startParam = calendar.opt('startParam');\r\n        }\r\n        endParam = this.endParam;\r\n        if (endParam == null) {\r\n            endParam = calendar.opt('endParam');\r\n        }\r\n        timezoneParam = this.timezoneParam;\r\n        if (timezoneParam == null) {\r\n            timezoneParam = calendar.opt('timezoneParam');\r\n        }\r\n        // retrieve any outbound GET/POST $.ajax data from the options\r\n        if ($.isFunction(ajaxSettings.data)) {\r\n            // supplied as a function that returns a key/value object\r\n            customRequestParams = ajaxSettings.data();\r\n        }\r\n        else {\r\n            // probably supplied as a straight key/value object\r\n            customRequestParams = ajaxSettings.data || {};\r\n        }\r\n        $.extend(params, customRequestParams);\r\n        params[startParam] = start.format();\r\n        params[endParam] = end.format();\r\n        if (timezone && timezone !== 'local') {\r\n            params[timezoneParam] = timezone;\r\n        }\r\n        return params;\r\n    };\r\n    JsonFeedEventSource.prototype.getPrimitive = function () {\r\n        return this.url;\r\n    };\r\n    JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {\r\n        this.ajaxSettings = rawProps;\r\n    };\r\n    JsonFeedEventSource.AJAX_DEFAULTS = {\r\n        dataType: 'json',\r\n        cache: false\r\n    };\r\n    return JsonFeedEventSource;\r\n}(EventSource_1.default));\r\nexports.default = JsonFeedEventSource;\r\nJsonFeedEventSource.defineStandardProps({\r\n    // automatically transfer (true)...\r\n    url: true,\r\n    startParam: true,\r\n    endParam: true,\r\n    timezoneParam: true\r\n});\r\n\n\n/***/ }),\n/* 225 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Iterator = /** @class */ (function () {\r\n    function Iterator(items) {\r\n        this.items = items || [];\r\n    }\r\n    /* Calls a method on every item passing the arguments through */\r\n    Iterator.prototype.proxyCall = function (methodName) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var results = [];\r\n        this.items.forEach(function (item) {\r\n            results.push(item[methodName].apply(item, args));\r\n        });\r\n        return results;\r\n    };\r\n    return Iterator;\r\n}());\r\nexports.default = Iterator;\r\n\n\n/***/ }),\n/* 226 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\n/* Creates a clone of an element and lets it track the mouse as it moves\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MouseFollower = /** @class */ (function () {\r\n    function MouseFollower(sourceEl, options) {\r\n        this.isFollowing = false;\r\n        this.isHidden = false;\r\n        this.isAnimating = false; // doing the revert animation?\r\n        this.options = options = options || {};\r\n        this.sourceEl = sourceEl;\r\n        this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\r\n    }\r\n    // Causes the element to start following the mouse\r\n    MouseFollower.prototype.start = function (ev) {\r\n        if (!this.isFollowing) {\r\n            this.isFollowing = true;\r\n            this.y0 = util_1.getEvY(ev);\r\n            this.x0 = util_1.getEvX(ev);\r\n            this.topDelta = 0;\r\n            this.leftDelta = 0;\r\n            if (!this.isHidden) {\r\n                this.updatePosition();\r\n            }\r\n            if (util_1.getEvIsTouch(ev)) {\r\n                this.listenTo($(document), 'touchmove', this.handleMove);\r\n            }\r\n            else {\r\n                this.listenTo($(document), 'mousemove', this.handleMove);\r\n            }\r\n        }\r\n    };\r\n    // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\r\n    // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\r\n    MouseFollower.prototype.stop = function (shouldRevert, callback) {\r\n        var _this = this;\r\n        var revertDuration = this.options.revertDuration;\r\n        var complete = function () {\r\n            _this.isAnimating = false;\r\n            _this.removeElement();\r\n            _this.top0 = _this.left0 = null; // reset state for future updatePosition calls\r\n            if (callback) {\r\n                callback();\r\n            }\r\n        };\r\n        if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\r\n            this.isFollowing = false;\r\n            this.stopListeningTo($(document));\r\n            if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\r\n                this.isAnimating = true;\r\n                this.el.animate({\r\n                    top: this.top0,\r\n                    left: this.left0\r\n                }, {\r\n                    duration: revertDuration,\r\n                    complete: complete\r\n                });\r\n            }\r\n            else {\r\n                complete();\r\n            }\r\n        }\r\n    };\r\n    // Gets the tracking element. Create it if necessary\r\n    MouseFollower.prototype.getEl = function () {\r\n        var el = this.el;\r\n        if (!el) {\r\n            el = this.el = this.sourceEl.clone()\r\n                .addClass(this.options.additionalClass || '')\r\n                .css({\r\n                position: 'absolute',\r\n                visibility: '',\r\n                display: this.isHidden ? 'none' : '',\r\n                margin: 0,\r\n                right: 'auto',\r\n                bottom: 'auto',\r\n                width: this.sourceEl.width(),\r\n                height: this.sourceEl.height(),\r\n                opacity: this.options.opacity || '',\r\n                zIndex: this.options.zIndex\r\n            });\r\n            // we don't want long taps or any mouse interaction causing selection/menus.\r\n            // would use preventSelection(), but that prevents selectstart, causing problems.\r\n            el.addClass('fc-unselectable');\r\n            el.appendTo(this.parentEl);\r\n        }\r\n        return el;\r\n    };\r\n    // Removes the tracking element if it has already been created\r\n    MouseFollower.prototype.removeElement = function () {\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n    };\r\n    // Update the CSS position of the tracking element\r\n    MouseFollower.prototype.updatePosition = function () {\r\n        var sourceOffset;\r\n        var origin;\r\n        this.getEl(); // ensure this.el\r\n        // make sure origin info was computed\r\n        if (this.top0 == null) {\r\n            sourceOffset = this.sourceEl.offset();\r\n            origin = this.el.offsetParent().offset();\r\n            this.top0 = sourceOffset.top - origin.top;\r\n            this.left0 = sourceOffset.left - origin.left;\r\n        }\r\n        this.el.css({\r\n            top: this.top0 + this.topDelta,\r\n            left: this.left0 + this.leftDelta\r\n        });\r\n    };\r\n    // Gets called when the user moves the mouse\r\n    MouseFollower.prototype.handleMove = function (ev) {\r\n        this.topDelta = util_1.getEvY(ev) - this.y0;\r\n        this.leftDelta = util_1.getEvX(ev) - this.x0;\r\n        if (!this.isHidden) {\r\n            this.updatePosition();\r\n        }\r\n    };\r\n    // Temporarily makes the tracking element invisible. Can be called before following starts\r\n    MouseFollower.prototype.hide = function () {\r\n        if (!this.isHidden) {\r\n            this.isHidden = true;\r\n            if (this.el) {\r\n                this.el.hide();\r\n            }\r\n        }\r\n    };\r\n    // Show the tracking element after it has been temporarily hidden\r\n    MouseFollower.prototype.show = function () {\r\n        if (this.isHidden) {\r\n            this.isHidden = false;\r\n            this.updatePosition();\r\n            this.getEl().show();\r\n        }\r\n    };\r\n    return MouseFollower;\r\n}());\r\nexports.default = MouseFollower;\r\nListenerMixin_1.default.mixInto(MouseFollower);\r\n\n\n/***/ }),\n/* 227 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* A rectangular panel that is absolutely positioned over other content\r\n------------------------------------------------------------------------------------------------------------------------\r\nOptions:\r\n  - className (string)\r\n  - content (HTML string or jQuery element set)\r\n  - parentEl\r\n  - top\r\n  - left\r\n  - right (the x coord of where the right edge should be. not a \"CSS\" right)\r\n  - autoHide (boolean)\r\n  - show (callback)\r\n  - hide (callback)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Popover = /** @class */ (function () {\r\n    function Popover(options) {\r\n        this.isHidden = true;\r\n        this.margin = 10; // the space required between the popover and the edges of the scroll container\r\n        this.options = options || {};\r\n    }\r\n    // Shows the popover on the specified position. Renders it if not already\r\n    Popover.prototype.show = function () {\r\n        if (this.isHidden) {\r\n            if (!this.el) {\r\n                this.render();\r\n            }\r\n            this.el.show();\r\n            this.position();\r\n            this.isHidden = false;\r\n            this.trigger('show');\r\n        }\r\n    };\r\n    // Hides the popover, through CSS, but does not remove it from the DOM\r\n    Popover.prototype.hide = function () {\r\n        if (!this.isHidden) {\r\n            this.el.hide();\r\n            this.isHidden = true;\r\n            this.trigger('hide');\r\n        }\r\n    };\r\n    // Creates `this.el` and renders content inside of it\r\n    Popover.prototype.render = function () {\r\n        var _this = this;\r\n        var options = this.options;\r\n        this.el = $('<div class=\"fc-popover\">')\r\n            .addClass(options.className || '')\r\n            .css({\r\n            // position initially to the top left to avoid creating scrollbars\r\n            top: 0,\r\n            left: 0\r\n        })\r\n            .append(options.content)\r\n            .appendTo(options.parentEl);\r\n        // when a click happens on anything inside with a 'fc-close' className, hide the popover\r\n        this.el.on('click', '.fc-close', function () {\r\n            _this.hide();\r\n        });\r\n        if (options.autoHide) {\r\n            this.listenTo($(document), 'mousedown', this.documentMousedown);\r\n        }\r\n    };\r\n    // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\r\n    Popover.prototype.documentMousedown = function (ev) {\r\n        // only hide the popover if the click happened outside the popover\r\n        if (this.el && !$(ev.target).closest(this.el).length) {\r\n            this.hide();\r\n        }\r\n    };\r\n    // Hides and unregisters any handlers\r\n    Popover.prototype.removeElement = function () {\r\n        this.hide();\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n        this.stopListeningTo($(document), 'mousedown');\r\n    };\r\n    // Positions the popover optimally, using the top/left/right options\r\n    Popover.prototype.position = function () {\r\n        var options = this.options;\r\n        var origin = this.el.offsetParent().offset();\r\n        var width = this.el.outerWidth();\r\n        var height = this.el.outerHeight();\r\n        var windowEl = $(window);\r\n        var viewportEl = util_1.getScrollParent(this.el);\r\n        var viewportTop;\r\n        var viewportLeft;\r\n        var viewportOffset;\r\n        var top; // the \"position\" (not \"offset\") values for the popover\r\n        var left; //\r\n        // compute top and left\r\n        top = options.top || 0;\r\n        if (options.left !== undefined) {\r\n            left = options.left;\r\n        }\r\n        else if (options.right !== undefined) {\r\n            left = options.right - width; // derive the left value from the right value\r\n        }\r\n        else {\r\n            left = 0;\r\n        }\r\n        if (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\r\n            viewportEl = windowEl;\r\n            viewportTop = 0; // the window is always at the top left\r\n            viewportLeft = 0; // (and .offset() won't work if called here)\r\n        }\r\n        else {\r\n            viewportOffset = viewportEl.offset();\r\n            viewportTop = viewportOffset.top;\r\n            viewportLeft = viewportOffset.left;\r\n        }\r\n        // if the window is scrolled, it causes the visible area to be further down\r\n        viewportTop += windowEl.scrollTop();\r\n        viewportLeft += windowEl.scrollLeft();\r\n        // constrain to the view port. if constrained by two edges, give precedence to top/left\r\n        if (options.viewportConstrain !== false) {\r\n            top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\r\n            top = Math.max(top, viewportTop + this.margin);\r\n            left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\r\n            left = Math.max(left, viewportLeft + this.margin);\r\n        }\r\n        this.el.css({\r\n            top: top - origin.top,\r\n            left: left - origin.left\r\n        });\r\n    };\r\n    // Triggers a callback. Calls a function in the option hash of the same name.\r\n    // Arguments beyond the first `name` are forwarded on.\r\n    // TODO: better code reuse for this. Repeat code\r\n    Popover.prototype.trigger = function (name) {\r\n        if (this.options[name]) {\r\n            this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\r\n        }\r\n    };\r\n    return Popover;\r\n}());\r\nexports.default = Popover;\r\nListenerMixin_1.default.mixInto(Popover);\r\n\n\n/***/ }),\n/* 228 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar TaskQueue = /** @class */ (function () {\r\n    function TaskQueue() {\r\n        this.q = [];\r\n        this.isPaused = false;\r\n        this.isRunning = false;\r\n    }\r\n    TaskQueue.prototype.queue = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this.q.push.apply(this.q, args); // append\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.pause = function () {\r\n        this.isPaused = true;\r\n    };\r\n    TaskQueue.prototype.resume = function () {\r\n        this.isPaused = false;\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.getIsIdle = function () {\r\n        return !this.isRunning && !this.isPaused;\r\n    };\r\n    TaskQueue.prototype.tryStart = function () {\r\n        if (!this.isRunning && this.canRunNext()) {\r\n            this.isRunning = true;\r\n            this.trigger('start');\r\n            this.runRemaining();\r\n        }\r\n    };\r\n    TaskQueue.prototype.canRunNext = function () {\r\n        return !this.isPaused && this.q.length;\r\n    };\r\n    TaskQueue.prototype.runRemaining = function () {\r\n        var _this = this;\r\n        var task;\r\n        var res;\r\n        do {\r\n            task = this.q.shift(); // always freshly reference q. might have been reassigned.\r\n            res = this.runTask(task);\r\n            if (res && res.then) {\r\n                res.then(function () {\r\n                    if (_this.canRunNext()) {\r\n                        _this.runRemaining();\r\n                    }\r\n                });\r\n                return; // prevent marking as stopped\r\n            }\r\n        } while (this.canRunNext());\r\n        this.trigger('stop'); // not really a 'stop' ... more of a 'drained'\r\n        this.isRunning = false;\r\n        // if 'stop' handler added more tasks.... TODO: write test for this\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.runTask = function (task) {\r\n        return task(); // task *is* the function, but subclasses can change the format of a task\r\n    };\r\n    return TaskQueue;\r\n}());\r\nexports.default = TaskQueue;\r\nEmitterMixin_1.default.mixInto(TaskQueue);\r\n\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nvar RenderQueue = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RenderQueue, _super);\r\n    function RenderQueue(waitsByNamespace) {\r\n        var _this = _super.call(this) || this;\r\n        _this.waitsByNamespace = waitsByNamespace || {};\r\n        return _this;\r\n    }\r\n    RenderQueue.prototype.queue = function (taskFunc, namespace, type) {\r\n        var task = {\r\n            func: taskFunc,\r\n            namespace: namespace,\r\n            type: type\r\n        };\r\n        var waitMs;\r\n        if (namespace) {\r\n            waitMs = this.waitsByNamespace[namespace];\r\n        }\r\n        if (this.waitNamespace) {\r\n            if (namespace === this.waitNamespace && waitMs != null) {\r\n                this.delayWait(waitMs);\r\n            }\r\n            else {\r\n                this.clearWait();\r\n                this.tryStart();\r\n            }\r\n        }\r\n        if (this.compoundTask(task)) { // appended to queue?\r\n            if (!this.waitNamespace && waitMs != null) {\r\n                this.startWait(namespace, waitMs);\r\n            }\r\n            else {\r\n                this.tryStart();\r\n            }\r\n        }\r\n    };\r\n    RenderQueue.prototype.startWait = function (namespace, waitMs) {\r\n        this.waitNamespace = namespace;\r\n        this.spawnWait(waitMs);\r\n    };\r\n    RenderQueue.prototype.delayWait = function (waitMs) {\r\n        clearTimeout(this.waitId);\r\n        this.spawnWait(waitMs);\r\n    };\r\n    RenderQueue.prototype.spawnWait = function (waitMs) {\r\n        var _this = this;\r\n        this.waitId = setTimeout(function () {\r\n            _this.waitNamespace = null;\r\n            _this.tryStart();\r\n        }, waitMs);\r\n    };\r\n    RenderQueue.prototype.clearWait = function () {\r\n        if (this.waitNamespace) {\r\n            clearTimeout(this.waitId);\r\n            this.waitId = null;\r\n            this.waitNamespace = null;\r\n        }\r\n    };\r\n    RenderQueue.prototype.canRunNext = function () {\r\n        if (!_super.prototype.canRunNext.call(this)) {\r\n            return false;\r\n        }\r\n        // waiting for a certain namespace to stop receiving tasks?\r\n        if (this.waitNamespace) {\r\n            var q = this.q;\r\n            // if there was a different namespace task in the meantime,\r\n            // that forces all previously-waiting tasks to suddenly execute.\r\n            // TODO: find a way to do this in constant time.\r\n            for (var i = 0; i < q.length; i++) {\r\n                if (q[i].namespace !== this.waitNamespace) {\r\n                    return true; // allow execution\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n        return true;\r\n    };\r\n    RenderQueue.prototype.runTask = function (task) {\r\n        task.func();\r\n    };\r\n    RenderQueue.prototype.compoundTask = function (newTask) {\r\n        var q = this.q;\r\n        var shouldAppend = true;\r\n        var i;\r\n        var task;\r\n        if (newTask.namespace && newTask.type === 'destroy') {\r\n            // remove all init/add/remove ops with same namespace, regardless of order\r\n            for (i = q.length - 1; i >= 0; i--) {\r\n                task = q[i];\r\n                if (task.namespace === newTask.namespace) {\r\n                    switch (task.type) {\r\n                        case 'init':\r\n                            shouldAppend = false;\r\n                        // the latest destroy is cancelled out by not doing the init\r\n                        /* falls through */\r\n                        case 'add':\r\n                        /* falls through */\r\n                        case 'remove':\r\n                            q.splice(i, 1); // remove task\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (shouldAppend) {\r\n            q.push(newTask);\r\n        }\r\n        return shouldAppend;\r\n    };\r\n    return RenderQueue;\r\n}(TaskQueue_1.default));\r\nexports.default = RenderQueue;\r\n\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Model_1 = __webpack_require__(51);\r\nvar Component = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Component, _super);\r\n    function Component() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Component.prototype.setElement = function (el) {\r\n        this.el = el;\r\n        this.bindGlobalHandlers();\r\n        this.renderSkeleton();\r\n        this.set('isInDom', true);\r\n    };\r\n    Component.prototype.removeElement = function () {\r\n        this.unset('isInDom');\r\n        this.unrenderSkeleton();\r\n        this.unbindGlobalHandlers();\r\n        this.el.remove();\r\n        // NOTE: don't null-out this.el in case the View was destroyed within an API callback.\r\n        // We don't null-out the View's other jQuery element references upon destroy,\r\n        //  so we shouldn't kill this.el either.\r\n    };\r\n    Component.prototype.bindGlobalHandlers = function () {\r\n        // subclasses can override\r\n    };\r\n    Component.prototype.unbindGlobalHandlers = function () {\r\n        // subclasses can override\r\n    };\r\n    /*\r\n    NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender\r\n    */\r\n    // Renders the basic structure of the view before any content is rendered\r\n    Component.prototype.renderSkeleton = function () {\r\n        // subclasses should implement\r\n    };\r\n    // Unrenders the basic structure of the view\r\n    Component.prototype.unrenderSkeleton = function () {\r\n        // subclasses should implement\r\n    };\r\n    return Component;\r\n}(Model_1.default));\r\nexports.default = Component;\r\n\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar date_formatting_1 = __webpack_require__(49);\r\nvar Component_1 = __webpack_require__(230);\r\nvar util_2 = __webpack_require__(19);\r\nvar DateComponent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateComponent, _super);\r\n    function DateComponent(_view, _options) {\r\n        var _this = _super.call(this) || this;\r\n        _this.isRTL = false; // frequently accessed options\r\n        _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits\r\n        _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?\r\n        _this.isDatesRendered = false;\r\n        // hack to set options prior to the this.opt calls\r\n        if (_view) {\r\n            _this['view'] = _view;\r\n        }\r\n        if (_options) {\r\n            _this['options'] = _options;\r\n        }\r\n        _this.uid = String(DateComponent.guid++);\r\n        _this.childrenByUid = {};\r\n        _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));\r\n        _this.isRTL = _this.opt('isRTL');\r\n        if (_this.fillRendererClass) {\r\n            _this.fillRenderer = new _this.fillRendererClass(_this);\r\n        }\r\n        if (_this.eventRendererClass) { // fillRenderer is optional -----v\r\n            _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);\r\n        }\r\n        if (_this.helperRendererClass && _this.eventRenderer) {\r\n            _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);\r\n        }\r\n        if (_this.businessHourRendererClass && _this.fillRenderer) {\r\n            _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);\r\n        }\r\n        return _this;\r\n    }\r\n    DateComponent.prototype.addChild = function (child) {\r\n        if (!this.childrenByUid[child.uid]) {\r\n            this.childrenByUid[child.uid] = child;\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    DateComponent.prototype.removeChild = function (child) {\r\n        if (this.childrenByUid[child.uid]) {\r\n            delete this.childrenByUid[child.uid];\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    // TODO: only do if isInDom?\r\n    // TODO: make part of Component, along with children/batch-render system?\r\n    DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        this.callChildren('updateSize', arguments);\r\n    };\r\n    // Options\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.opt = function (name) {\r\n        return this._getView().opt(name); // default implementation\r\n    };\r\n    DateComponent.prototype.publiclyTrigger = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var calendar = this._getCalendar();\r\n        return calendar.publiclyTrigger.apply(calendar, args);\r\n    };\r\n    DateComponent.prototype.hasPublicHandlers = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var calendar = this._getCalendar();\r\n        return calendar.hasPublicHandlers.apply(calendar, args);\r\n    };\r\n    // Date\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.executeDateRender = function (dateProfile) {\r\n        this.dateProfile = dateProfile; // for rendering\r\n        this.renderDates(dateProfile);\r\n        this.isDatesRendered = true;\r\n        this.callChildren('executeDateRender', arguments);\r\n    };\r\n    DateComponent.prototype.executeDateUnrender = function () {\r\n        this.callChildren('executeDateUnrender', arguments);\r\n        this.dateProfile = null;\r\n        this.unrenderDates();\r\n        this.isDatesRendered = false;\r\n    };\r\n    // date-cell content only\r\n    DateComponent.prototype.renderDates = function (dateProfile) {\r\n        // subclasses should implement\r\n    };\r\n    // date-cell content only\r\n    DateComponent.prototype.unrenderDates = function () {\r\n        // subclasses should override\r\n    };\r\n    // Now-Indicator\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\r\n    // should be refreshed. If something falsy is returned, no time indicator is rendered at all.\r\n    DateComponent.prototype.getNowIndicatorUnit = function () {\r\n        // subclasses should implement\r\n    };\r\n    // Renders a current time indicator at the given datetime\r\n    DateComponent.prototype.renderNowIndicator = function (date) {\r\n        this.callChildren('renderNowIndicator', arguments);\r\n    };\r\n    // Undoes the rendering actions from renderNowIndicator\r\n    DateComponent.prototype.unrenderNowIndicator = function () {\r\n        this.callChildren('unrenderNowIndicator', arguments);\r\n    };\r\n    // Business Hours\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n        if (this.businessHourRenderer) {\r\n            this.businessHourRenderer.render(businessHourGenerator);\r\n        }\r\n        this.callChildren('renderBusinessHours', arguments);\r\n    };\r\n    // Unrenders previously-rendered business-hours\r\n    DateComponent.prototype.unrenderBusinessHours = function () {\r\n        this.callChildren('unrenderBusinessHours', arguments);\r\n        if (this.businessHourRenderer) {\r\n            this.businessHourRenderer.unrender();\r\n        }\r\n    };\r\n    // Event Displaying\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.executeEventRender = function (eventsPayload) {\r\n        if (this.eventRenderer) {\r\n            this.eventRenderer.rangeUpdated(); // poorly named now\r\n            this.eventRenderer.render(eventsPayload);\r\n        }\r\n        else if (this['renderEvents']) { // legacy\r\n            this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));\r\n        }\r\n        this.callChildren('executeEventRender', arguments);\r\n    };\r\n    DateComponent.prototype.executeEventUnrender = function () {\r\n        this.callChildren('executeEventUnrender', arguments);\r\n        if (this.eventRenderer) {\r\n            this.eventRenderer.unrender();\r\n        }\r\n        else if (this['destroyEvents']) { // legacy\r\n            this['destroyEvents']();\r\n        }\r\n    };\r\n    DateComponent.prototype.getBusinessHourSegs = function () {\r\n        var segs = this.getOwnBusinessHourSegs();\r\n        this.iterChildren(function (child) {\r\n            segs.push.apply(segs, child.getBusinessHourSegs());\r\n        });\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.getOwnBusinessHourSegs = function () {\r\n        if (this.businessHourRenderer) {\r\n            return this.businessHourRenderer.getSegs();\r\n        }\r\n        return [];\r\n    };\r\n    DateComponent.prototype.getEventSegs = function () {\r\n        var segs = this.getOwnEventSegs();\r\n        this.iterChildren(function (child) {\r\n            segs.push.apply(segs, child.getEventSegs());\r\n        });\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.getOwnEventSegs = function () {\r\n        if (this.eventRenderer) {\r\n            return this.eventRenderer.getSegs();\r\n        }\r\n        return [];\r\n    };\r\n    // Event Rendering Triggering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.triggerAfterEventsRendered = function () {\r\n        this.triggerAfterEventSegsRendered(this.getEventSegs());\r\n        this.publiclyTrigger('eventAfterAllRender', {\r\n            context: this,\r\n            args: [this]\r\n        });\r\n    };\r\n    DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {\r\n        var _this = this;\r\n        // an optimization, because getEventLegacy is expensive\r\n        if (this.hasPublicHandlers('eventAfterRender')) {\r\n            segs.forEach(function (seg) {\r\n                var legacy;\r\n                if (seg.el) { // necessary?\r\n                    legacy = seg.footprint.getEventLegacy();\r\n                    _this.publiclyTrigger('eventAfterRender', {\r\n                        context: legacy,\r\n                        args: [legacy, seg.el, _this]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n    DateComponent.prototype.triggerBeforeEventsDestroyed = function () {\r\n        this.triggerBeforeEventSegsDestroyed(this.getEventSegs());\r\n    };\r\n    DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {\r\n        var _this = this;\r\n        if (this.hasPublicHandlers('eventDestroy')) {\r\n            segs.forEach(function (seg) {\r\n                var legacy;\r\n                if (seg.el) { // necessary?\r\n                    legacy = seg.footprint.getEventLegacy();\r\n                    _this.publiclyTrigger('eventDestroy', {\r\n                        context: legacy,\r\n                        args: [legacy, seg.el, _this]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n    // Event Rendering Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Hides all rendered event segments linked to the given event\r\n    // RECURSIVE with subcomponents\r\n    DateComponent.prototype.showEventsWithId = function (eventDefId) {\r\n        this.getEventSegs().forEach(function (seg) {\r\n            if (seg.footprint.eventDef.id === eventDefId &&\r\n                seg.el // necessary?\r\n            ) {\r\n                seg.el.css('visibility', '');\r\n            }\r\n        });\r\n        this.callChildren('showEventsWithId', arguments);\r\n    };\r\n    // Shows all rendered event segments linked to the given event\r\n    // RECURSIVE with subcomponents\r\n    DateComponent.prototype.hideEventsWithId = function (eventDefId) {\r\n        this.getEventSegs().forEach(function (seg) {\r\n            if (seg.footprint.eventDef.id === eventDefId &&\r\n                seg.el // necessary?\r\n            ) {\r\n                seg.el.css('visibility', 'hidden');\r\n            }\r\n        });\r\n        this.callChildren('hideEventsWithId', arguments);\r\n    };\r\n    // Drag-n-Drop Rendering (for both events and external elements)\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of a event or external-element drag over the given drop zone.\r\n    // If an external-element, seg will be `null`.\r\n    // Must return elements used for any mock events.\r\n    DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var renderedHelper = false;\r\n        this.iterChildren(function (child) {\r\n            if (child.renderDrag(eventFootprints, seg, isTouch)) {\r\n                renderedHelper = true;\r\n            }\r\n        });\r\n        return renderedHelper;\r\n    };\r\n    // Unrenders a visual indication of an event or external-element being dragged.\r\n    DateComponent.prototype.unrenderDrag = function () {\r\n        this.callChildren('unrenderDrag', arguments);\r\n    };\r\n    // Event Resizing\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of an event being resized.\r\n    DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        this.callChildren('renderEventResize', arguments);\r\n    };\r\n    // Unrenders a visual indication of an event being resized.\r\n    DateComponent.prototype.unrenderEventResize = function () {\r\n        this.callChildren('unrenderEventResize', arguments);\r\n    };\r\n    // Selection\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of the selection\r\n    // TODO: rename to `renderSelection` after legacy is gone\r\n    DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        this.renderHighlight(componentFootprint);\r\n        this.callChildren('renderSelectionFootprint', arguments);\r\n    };\r\n    // Unrenders a visual indication of selection\r\n    DateComponent.prototype.unrenderSelection = function () {\r\n        this.unrenderHighlight();\r\n        this.callChildren('unrenderSelection', arguments);\r\n    };\r\n    // Highlight\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\r\n    DateComponent.prototype.renderHighlight = function (componentFootprint) {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderFootprint('highlight', componentFootprint, {\r\n                getClasses: function () {\r\n                    return ['fc-highlight'];\r\n                }\r\n            });\r\n        }\r\n        this.callChildren('renderHighlight', arguments);\r\n    };\r\n    // Unrenders the emphasis on a date range\r\n    DateComponent.prototype.unrenderHighlight = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('highlight');\r\n        }\r\n        this.callChildren('unrenderHighlight', arguments);\r\n    };\r\n    // Hit Areas\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // just because all DateComponents support this interface\r\n    // doesn't mean they need to have their own internal coord system. they can defer to sub-components.\r\n    DateComponent.prototype.hitsNeeded = function () {\r\n        if (!(this.hitsNeededDepth++)) {\r\n            this.prepareHits();\r\n        }\r\n        this.callChildren('hitsNeeded', arguments);\r\n    };\r\n    DateComponent.prototype.hitsNotNeeded = function () {\r\n        if (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {\r\n            this.releaseHits();\r\n        }\r\n        this.callChildren('hitsNotNeeded', arguments);\r\n    };\r\n    DateComponent.prototype.prepareHits = function () {\r\n        // subclasses can implement\r\n    };\r\n    DateComponent.prototype.releaseHits = function () {\r\n        // subclasses can implement\r\n    };\r\n    // Given coordinates from the topleft of the document, return data about the date-related area underneath.\r\n    // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\r\n    // Must have a `grid` property, a reference to this current grid. TODO: avoid this\r\n    // The returned object will be processed by getHitFootprint and getHitEl.\r\n    DateComponent.prototype.queryHit = function (leftOffset, topOffset) {\r\n        var childrenByUid = this.childrenByUid;\r\n        var uid;\r\n        var hit;\r\n        for (uid in childrenByUid) {\r\n            hit = childrenByUid[uid].queryHit(leftOffset, topOffset);\r\n            if (hit) {\r\n                break;\r\n            }\r\n        }\r\n        return hit;\r\n    };\r\n    DateComponent.prototype.getSafeHitFootprint = function (hit) {\r\n        var footprint = this.getHitFootprint(hit);\r\n        if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {\r\n            return null;\r\n        }\r\n        return footprint;\r\n    };\r\n    DateComponent.prototype.getHitFootprint = function (hit) {\r\n        // what about being abstract!?\r\n    };\r\n    // Given position-level information about a date-related area within the grid,\r\n    // should return a jQuery element that best represents it. passed to dayClick callback.\r\n    DateComponent.prototype.getHitEl = function (hit) {\r\n        // what about being abstract!?\r\n    };\r\n    /* Converting eventRange -> eventFootprint\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n        var eventFootprints = [];\r\n        var i;\r\n        for (i = 0; i < eventRanges.length; i++) {\r\n            eventFootprints.push.apply(// append\r\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n        }\r\n        return eventFootprints;\r\n    };\r\n    DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n        return [util_2.eventRangeToEventFootprint(eventRange)];\r\n    };\r\n    /* Converting componentFootprint/eventFootprint -> segs\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {\r\n        var segs = [];\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));\r\n        }\r\n        return segs;\r\n    };\r\n    // Given an event's span (unzoned start/end and other misc data), and the event itself,\r\n    // slices into segments and attaches event-derived properties to them.\r\n    // eventSpan - { start, end, isStart, isEnd, otherthings... }\r\n    DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {\r\n        var unzonedRange = eventFootprint.componentFootprint.unzonedRange;\r\n        var segs;\r\n        var i;\r\n        var seg;\r\n        segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (!unzonedRange.isStart) {\r\n                seg.isStart = false;\r\n            }\r\n            if (!unzonedRange.isEnd) {\r\n                seg.isEnd = false;\r\n            }\r\n            seg.footprint = eventFootprint;\r\n            // TODO: rename to seg.eventFootprint\r\n        }\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        return [];\r\n    };\r\n    // Utils\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.callChildren = function (methodName, args) {\r\n        this.iterChildren(function (child) {\r\n            child[methodName].apply(child, args);\r\n        });\r\n    };\r\n    DateComponent.prototype.iterChildren = function (func) {\r\n        var childrenByUid = this.childrenByUid;\r\n        var uid;\r\n        for (uid in childrenByUid) {\r\n            func(childrenByUid[uid]);\r\n        }\r\n    };\r\n    DateComponent.prototype._getCalendar = function () {\r\n        var t = this;\r\n        return t.calendar || t.view.calendar;\r\n    };\r\n    DateComponent.prototype._getView = function () {\r\n        return this.view;\r\n    };\r\n    DateComponent.prototype._getDateProfile = function () {\r\n        return this._getView().get('dateProfile');\r\n    };\r\n    // Generates HTML for an anchor to another view into the calendar.\r\n    // Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.\r\n    // `gotoOptions` can either be a moment input, or an object with the form:\r\n    // { date, type, forceOff }\r\n    // `type` is a view-type like \"day\" or \"week\". default value is \"day\".\r\n    // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\r\n    DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {\r\n        var date;\r\n        var type;\r\n        var forceOff;\r\n        var finalOptions;\r\n        if ($.isPlainObject(gotoOptions)) {\r\n            date = gotoOptions.date;\r\n            type = gotoOptions.type;\r\n            forceOff = gotoOptions.forceOff;\r\n        }\r\n        else {\r\n            date = gotoOptions; // a single moment input\r\n        }\r\n        date = moment_ext_1.default(date); // if a string, parse it\r\n        finalOptions = {\r\n            date: date.format('YYYY-MM-DD'),\r\n            type: type || 'day'\r\n        };\r\n        if (typeof attrs === 'string') {\r\n            innerHtml = attrs;\r\n            attrs = null;\r\n        }\r\n        attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space\r\n        innerHtml = innerHtml || '';\r\n        if (!forceOff && this.opt('navLinks')) {\r\n            return '<a' + attrs +\r\n                ' data-goto=\"' + util_1.htmlEscape(JSON.stringify(finalOptions)) + '\">' +\r\n                innerHtml +\r\n                '</a>';\r\n        }\r\n        else {\r\n            return '<span' + attrs + '>' +\r\n                innerHtml +\r\n                '</span>';\r\n        }\r\n    };\r\n    DateComponent.prototype.getAllDayHtml = function () {\r\n        return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));\r\n    };\r\n    // Computes HTML classNames for a single-day element\r\n    DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {\r\n        var view = this._getView();\r\n        var classes = [];\r\n        var today;\r\n        if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {\r\n            classes.push('fc-disabled-day'); // TODO: jQuery UI theme?\r\n        }\r\n        else {\r\n            classes.push('fc-' + util_1.dayIDs[date.day()]);\r\n            if (view.isDateInOtherMonth(date, this.dateProfile)) { // TODO: use DateComponent subclass somehow\r\n                classes.push('fc-other-month');\r\n            }\r\n            today = view.calendar.getNow();\r\n            if (date.isSame(today, 'day')) {\r\n                classes.push('fc-today');\r\n                if (noThemeHighlight !== true) {\r\n                    classes.push(view.calendar.theme.getClass('today'));\r\n                }\r\n            }\r\n            else if (date < today) {\r\n                classes.push('fc-past');\r\n            }\r\n            else {\r\n                classes.push('fc-future');\r\n            }\r\n        }\r\n        return classes;\r\n    };\r\n    // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\r\n    // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\r\n    // The timezones of the dates within `range` will be respected.\r\n    DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {\r\n        var end = range.end;\r\n        if (isAllDay) {\r\n            end = end.clone().subtract(1); // convert to inclusive. last ms of previous day\r\n        }\r\n        return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);\r\n    };\r\n    // Compute the number of the give units in the \"current\" range.\r\n    // Will return a floating-point number. Won't round.\r\n    DateComponent.prototype.currentRangeAs = function (unit) {\r\n        return this._getDateProfile().currentUnzonedRange.as(unit);\r\n    };\r\n    // Returns the date range of the full days the given range visually appears to occupy.\r\n    // Returns a plain object with start/end, NOT an UnzonedRange!\r\n    DateComponent.prototype.computeDayRange = function (unzonedRange) {\r\n        var calendar = this._getCalendar();\r\n        var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts\r\n        var end = calendar.msToUtcMoment(unzonedRange.endMs);\r\n        var endTimeMS = +end.time(); // # of milliseconds into `endDay`\r\n        var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\r\n        // If the end time is actually inclusively part of the next day and is equal to or\r\n        // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\r\n        // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\r\n        if (endTimeMS && endTimeMS >= this.nextDayThreshold) {\r\n            endDay.add(1, 'days');\r\n        }\r\n        // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\r\n        if (endDay <= startDay) {\r\n            endDay = startDay.clone().add(1, 'days');\r\n        }\r\n        return { start: startDay, end: endDay };\r\n    };\r\n    // Does the given range visually appear to occupy more than one day?\r\n    DateComponent.prototype.isMultiDayRange = function (unzonedRange) {\r\n        var dayRange = this.computeDayRange(unzonedRange);\r\n        return dayRange.end.diff(dayRange.start, 'days') > 1;\r\n    };\r\n    DateComponent.guid = 0; // TODO: better system for this?\r\n    return DateComponent;\r\n}(Component_1.default));\r\nexports.default = DateComponent;\r\n// legacy\r\nfunction convertEventsPayloadToLegacyArray(eventsPayload) {\r\n    var eventDefId;\r\n    var eventInstances;\r\n    var legacyEvents = [];\r\n    var i;\r\n    for (eventDefId in eventsPayload) {\r\n        eventInstances = eventsPayload[eventDefId].eventInstances;\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            legacyEvents.push(eventInstances[i].toLegacy());\r\n        }\r\n    }\r\n    return legacyEvents;\r\n}\r\n\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar Iterator_1 = __webpack_require__(225);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Toolbar_1 = __webpack_require__(257);\r\nvar OptionsManager_1 = __webpack_require__(258);\r\nvar ViewSpecManager_1 = __webpack_require__(259);\r\nvar Constraints_1 = __webpack_require__(217);\r\nvar locale_1 = __webpack_require__(32);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventManager_1 = __webpack_require__(220);\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar Calendar = /** @class */ (function () {\r\n    function Calendar(el, overrides) {\r\n        this.loadingLevel = 0; // number of simultaneous loading tasks\r\n        this.ignoreUpdateViewSize = 0;\r\n        this.freezeContentHeightDepth = 0;\r\n        // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\r\n        // unneeded() is called in destroy.\r\n        GlobalEmitter_1.default.needed();\r\n        this.el = el;\r\n        this.viewsByType = {};\r\n        this.optionsManager = new OptionsManager_1.default(this, overrides);\r\n        this.viewSpecManager = new ViewSpecManager_1.default(this.optionsManager, this);\r\n        this.initMomentInternals(); // needs to happen after options hash initialized\r\n        this.initCurrentDate();\r\n        this.initEventManager();\r\n        this.constraints = new Constraints_1.default(this.eventManager, this);\r\n        this.constructed();\r\n    }\r\n    Calendar.prototype.constructed = function () {\r\n        // useful for monkeypatching. used?\r\n    };\r\n    Calendar.prototype.getView = function () {\r\n        return this.view;\r\n    };\r\n    Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {\r\n        var optHandler = this.opt(name);\r\n        var context;\r\n        var args;\r\n        if ($.isPlainObject(triggerInfo)) {\r\n            context = triggerInfo.context;\r\n            args = triggerInfo.args;\r\n        }\r\n        else if ($.isArray(triggerInfo)) {\r\n            args = triggerInfo;\r\n        }\r\n        if (context == null) {\r\n            context = this.el[0]; // fallback context\r\n        }\r\n        if (!args) {\r\n            args = [];\r\n        }\r\n        this.triggerWith(name, context, args); // Emitter's method\r\n        if (optHandler) {\r\n            return optHandler.apply(context, args);\r\n        }\r\n    };\r\n    Calendar.prototype.hasPublicHandlers = function (name) {\r\n        return this.hasHandlers(name) ||\r\n            this.opt(name); // handler specified in options\r\n    };\r\n    // Options Public API\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // public getter/setter\r\n    Calendar.prototype.option = function (name, value) {\r\n        var newOptionHash;\r\n        if (typeof name === 'string') {\r\n            if (value === undefined) { // getter\r\n                return this.optionsManager.get(name);\r\n            }\r\n            else { // setter for individual option\r\n                newOptionHash = {};\r\n                newOptionHash[name] = value;\r\n                this.optionsManager.add(newOptionHash);\r\n            }\r\n        }\r\n        else if (typeof name === 'object') { // compound setter with object input\r\n            this.optionsManager.add(name);\r\n        }\r\n    };\r\n    // private getter\r\n    Calendar.prototype.opt = function (name) {\r\n        return this.optionsManager.get(name);\r\n    };\r\n    // View\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Given a view name for a custom view or a standard view, creates a ready-to-go View object\r\n    Calendar.prototype.instantiateView = function (viewType) {\r\n        var spec = this.viewSpecManager.getViewSpec(viewType);\r\n        if (!spec) {\r\n            throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\r\n        }\r\n        return new spec['class'](this, spec);\r\n    };\r\n    // Returns a boolean about whether the view is okay to instantiate at some point\r\n    Calendar.prototype.isValidViewType = function (viewType) {\r\n        return Boolean(this.viewSpecManager.getViewSpec(viewType));\r\n    };\r\n    Calendar.prototype.changeView = function (viewName, dateOrRange) {\r\n        if (dateOrRange) {\r\n            if (dateOrRange.start && dateOrRange.end) { // a range\r\n                this.optionsManager.recordOverrides({\r\n                    visibleRange: dateOrRange\r\n                });\r\n            }\r\n            else { // a date\r\n                this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\r\n            }\r\n        }\r\n        this.renderView(viewName);\r\n    };\r\n    // Forces navigation to a view for the given date.\r\n    // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\r\n    Calendar.prototype.zoomTo = function (newDate, viewType) {\r\n        var spec;\r\n        viewType = viewType || 'day'; // day is default zoom\r\n        spec = this.viewSpecManager.getViewSpec(viewType) ||\r\n            this.viewSpecManager.getUnitViewSpec(viewType);\r\n        this.currentDate = newDate.clone();\r\n        this.renderView(spec ? spec.type : null);\r\n    };\r\n    // Current Date\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initCurrentDate = function () {\r\n        var defaultDateInput = this.opt('defaultDate');\r\n        // compute the initial ambig-timezone date\r\n        if (defaultDateInput != null) {\r\n            this.currentDate = this.moment(defaultDateInput).stripZone();\r\n        }\r\n        else {\r\n            this.currentDate = this.getNow(); // getNow already returns unzoned\r\n        }\r\n    };\r\n    Calendar.prototype.prev = function () {\r\n        var view = this.view;\r\n        var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n        if (prevInfo.isValid) {\r\n            this.currentDate = prevInfo.date;\r\n            this.renderView();\r\n        }\r\n    };\r\n    Calendar.prototype.next = function () {\r\n        var view = this.view;\r\n        var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n        if (nextInfo.isValid) {\r\n            this.currentDate = nextInfo.date;\r\n            this.renderView();\r\n        }\r\n    };\r\n    Calendar.prototype.prevYear = function () {\r\n        this.currentDate.add(-1, 'years');\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.nextYear = function () {\r\n        this.currentDate.add(1, 'years');\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.today = function () {\r\n        this.currentDate = this.getNow(); // should deny like prev/next?\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.gotoDate = function (zonedDateInput) {\r\n        this.currentDate = this.moment(zonedDateInput).stripZone();\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.incrementDate = function (delta) {\r\n        this.currentDate.add(moment.duration(delta));\r\n        this.renderView();\r\n    };\r\n    // for external API\r\n    Calendar.prototype.getDate = function () {\r\n        return this.applyTimezone(this.currentDate); // infuse the calendar's timezone\r\n    };\r\n    // Loading Triggering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Should be called when any type of async data fetching begins\r\n    Calendar.prototype.pushLoading = function () {\r\n        if (!(this.loadingLevel++)) {\r\n            this.publiclyTrigger('loading', [true, this.view]);\r\n        }\r\n    };\r\n    // Should be called when any type of async data fetching completes\r\n    Calendar.prototype.popLoading = function () {\r\n        if (!(--this.loadingLevel)) {\r\n            this.publiclyTrigger('loading', [false, this.view]);\r\n        }\r\n    };\r\n    // High-level Rendering\r\n    // -----------------------------------------------------------------------------------\r\n    Calendar.prototype.render = function () {\r\n        if (!this.contentEl) {\r\n            this.initialRender();\r\n        }\r\n        else if (this.elementVisible()) {\r\n            // mainly for the public API\r\n            this.calcSize();\r\n            this.updateViewSize();\r\n        }\r\n    };\r\n    Calendar.prototype.initialRender = function () {\r\n        var _this = this;\r\n        var el = this.el;\r\n        el.addClass('fc');\r\n        // event delegation for nav links\r\n        el.on('click.fc', 'a[data-goto]', function (ev) {\r\n            var anchorEl = $(ev.currentTarget);\r\n            var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\r\n            var date = _this.moment(gotoOptions.date);\r\n            var viewType = gotoOptions.type;\r\n            // property like \"navLinkDayClick\". might be a string or a function\r\n            var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');\r\n            if (typeof customAction === 'function') {\r\n                customAction(date, ev);\r\n            }\r\n            else {\r\n                if (typeof customAction === 'string') {\r\n                    viewType = customAction;\r\n                }\r\n                _this.zoomTo(date, viewType);\r\n            }\r\n        });\r\n        // called immediately, and upon option change\r\n        this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {\r\n            var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);\r\n            var theme = new themeClass(_this.optionsManager);\r\n            var widgetClass = theme.getClass('widget');\r\n            _this.theme = theme;\r\n            if (widgetClass) {\r\n                el.addClass(widgetClass);\r\n            }\r\n        }, function () {\r\n            var widgetClass = _this.theme.getClass('widget');\r\n            _this.theme = null;\r\n            if (widgetClass) {\r\n                el.removeClass(widgetClass);\r\n            }\r\n        });\r\n        this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {\r\n            _this.businessHourGenerator = new BusinessHourGenerator_1.default(deps.businessHours, _this);\r\n            if (_this.view) {\r\n                _this.view.set('businessHourGenerator', _this.businessHourGenerator);\r\n            }\r\n        }, function () {\r\n            _this.businessHourGenerator = null;\r\n        });\r\n        // called immediately, and upon option change.\r\n        // HACK: locale often affects isRTL, so we explicitly listen to that too.\r\n        this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {\r\n            el.toggleClass('fc-ltr', !opts.isRTL);\r\n            el.toggleClass('fc-rtl', opts.isRTL);\r\n        });\r\n        this.contentEl = $(\"<div class='fc-view-container'>\").prependTo(el);\r\n        this.initToolbars();\r\n        this.renderHeader();\r\n        this.renderFooter();\r\n        this.renderView(this.opt('defaultView'));\r\n        if (this.opt('handleWindowResize')) {\r\n            $(window).resize(this.windowResizeProxy = util_1.debounce(// prevents rapid calls\r\n            this.windowResize.bind(this), this.opt('windowResizeDelay')));\r\n        }\r\n    };\r\n    Calendar.prototype.destroy = function () {\r\n        if (this.view) {\r\n            this.clearView();\r\n        }\r\n        this.toolbarsManager.proxyCall('removeElement');\r\n        this.contentEl.remove();\r\n        this.el.removeClass('fc fc-ltr fc-rtl');\r\n        // removes theme-related root className\r\n        this.optionsManager.unwatch('settingTheme');\r\n        this.optionsManager.unwatch('settingBusinessHourGenerator');\r\n        this.el.off('.fc'); // unbind nav link handlers\r\n        if (this.windowResizeProxy) {\r\n            $(window).unbind('resize', this.windowResizeProxy);\r\n            this.windowResizeProxy = null;\r\n        }\r\n        GlobalEmitter_1.default.unneeded();\r\n    };\r\n    Calendar.prototype.elementVisible = function () {\r\n        return this.el.is(':visible');\r\n    };\r\n    // Render Queue\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.bindViewHandlers = function (view) {\r\n        var _this = this;\r\n        view.watch('titleForCalendar', ['title'], function (deps) {\r\n            if (view === _this.view) { // hack\r\n                _this.setToolbarsTitle(deps.title);\r\n            }\r\n        });\r\n        view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {\r\n            if (view === _this.view) { // hack\r\n                _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates\r\n                _this.updateToolbarButtons(deps.dateProfile);\r\n            }\r\n        });\r\n    };\r\n    Calendar.prototype.unbindViewHandlers = function (view) {\r\n        view.unwatch('titleForCalendar');\r\n        view.unwatch('dateProfileForCalendar');\r\n    };\r\n    // View Rendering\r\n    // -----------------------------------------------------------------------------------\r\n    // Renders a view because of a date change, view-type change, or for the first time.\r\n    // If not given a viewType, keep the current view but render different dates.\r\n    // Accepts an optional scroll state to restore to.\r\n    Calendar.prototype.renderView = function (viewType) {\r\n        var oldView = this.view;\r\n        var newView;\r\n        this.freezeContentHeight();\r\n        if (oldView && viewType && oldView.type !== viewType) {\r\n            this.clearView();\r\n        }\r\n        // if viewType changed, or the view was never created, create a fresh view\r\n        if (!this.view && viewType) {\r\n            newView = this.view =\r\n                this.viewsByType[viewType] ||\r\n                    (this.viewsByType[viewType] = this.instantiateView(viewType));\r\n            this.bindViewHandlers(newView);\r\n            newView.startBatchRender(); // so that setElement+setDate rendering are joined\r\n            newView.setElement($(\"<div class='fc-view fc-\" + viewType + \"-view'>\").appendTo(this.contentEl));\r\n            this.toolbarsManager.proxyCall('activateButton', viewType);\r\n        }\r\n        if (this.view) {\r\n            // prevent unnecessary change firing\r\n            if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {\r\n                this.view.set('businessHourGenerator', this.businessHourGenerator);\r\n            }\r\n            this.view.setDate(this.currentDate);\r\n            if (newView) {\r\n                newView.stopBatchRender();\r\n            }\r\n        }\r\n        this.thawContentHeight();\r\n    };\r\n    // Unrenders the current view and reflects this change in the Header.\r\n    // Unregsiters the `view`, but does not remove from viewByType hash.\r\n    Calendar.prototype.clearView = function () {\r\n        var currentView = this.view;\r\n        this.toolbarsManager.proxyCall('deactivateButton', currentView.type);\r\n        this.unbindViewHandlers(currentView);\r\n        currentView.removeElement();\r\n        currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time\r\n        this.view = null;\r\n    };\r\n    // Destroys the view, including the view object. Then, re-instantiates it and renders it.\r\n    // Maintains the same scroll state.\r\n    // TODO: maintain any other user-manipulated state.\r\n    Calendar.prototype.reinitView = function () {\r\n        var oldView = this.view;\r\n        var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll\r\n        this.freezeContentHeight();\r\n        this.clearView();\r\n        this.calcSize();\r\n        this.renderView(oldView.type); // needs the type to freshly render\r\n        this.view.applyScroll(scroll);\r\n        this.thawContentHeight();\r\n    };\r\n    // Resizing\r\n    // -----------------------------------------------------------------------------------\r\n    Calendar.prototype.getSuggestedViewHeight = function () {\r\n        if (this.suggestedViewHeight == null) {\r\n            this.calcSize();\r\n        }\r\n        return this.suggestedViewHeight;\r\n    };\r\n    Calendar.prototype.isHeightAuto = function () {\r\n        return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\r\n    };\r\n    Calendar.prototype.updateViewSize = function (isResize) {\r\n        if (isResize === void 0) { isResize = false; }\r\n        var view = this.view;\r\n        var scroll;\r\n        if (!this.ignoreUpdateViewSize && view) {\r\n            if (isResize) {\r\n                this.calcSize();\r\n                scroll = view.queryScroll();\r\n            }\r\n            this.ignoreUpdateViewSize++;\r\n            view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);\r\n            this.ignoreUpdateViewSize--;\r\n            if (isResize) {\r\n                view.applyScroll(scroll);\r\n            }\r\n            return true; // signal success\r\n        }\r\n    };\r\n    Calendar.prototype.calcSize = function () {\r\n        if (this.elementVisible()) {\r\n            this._calcSize();\r\n        }\r\n    };\r\n    Calendar.prototype._calcSize = function () {\r\n        var contentHeightInput = this.opt('contentHeight');\r\n        var heightInput = this.opt('height');\r\n        if (typeof contentHeightInput === 'number') { // exists and not 'auto'\r\n            this.suggestedViewHeight = contentHeightInput;\r\n        }\r\n        else if (typeof contentHeightInput === 'function') { // exists and is a function\r\n            this.suggestedViewHeight = contentHeightInput();\r\n        }\r\n        else if (typeof heightInput === 'number') { // exists and not 'auto'\r\n            this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\r\n        }\r\n        else if (typeof heightInput === 'function') { // exists and is a function\r\n            this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\r\n        }\r\n        else if (heightInput === 'parent') { // set to height of parent element\r\n            this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\r\n        }\r\n        else {\r\n            this.suggestedViewHeight = Math.round(this.contentEl.width() /\r\n                Math.max(this.opt('aspectRatio'), .5));\r\n        }\r\n    };\r\n    Calendar.prototype.windowResize = function (ev) {\r\n        if (\r\n        // the purpose: so we don't process jqui \"resize\" events that have bubbled up\r\n        // cast to any because .target, which is Element, can't be compared to window for some reason.\r\n        ev.target === window &&\r\n            this.view &&\r\n            this.view.isDatesRendered) {\r\n            if (this.updateViewSize(true)) { // isResize=true, returns true on success\r\n                this.publiclyTrigger('windowResize', [this.view]);\r\n            }\r\n        }\r\n    };\r\n    /* Height \"Freezing\"\r\n    -----------------------------------------------------------------------------*/\r\n    Calendar.prototype.freezeContentHeight = function () {\r\n        if (!(this.freezeContentHeightDepth++)) {\r\n            this.forceFreezeContentHeight();\r\n        }\r\n    };\r\n    Calendar.prototype.forceFreezeContentHeight = function () {\r\n        this.contentEl.css({\r\n            width: '100%',\r\n            height: this.contentEl.height(),\r\n            overflow: 'hidden'\r\n        });\r\n    };\r\n    Calendar.prototype.thawContentHeight = function () {\r\n        this.freezeContentHeightDepth--;\r\n        // always bring back to natural height\r\n        this.contentEl.css({\r\n            width: '',\r\n            height: '',\r\n            overflow: ''\r\n        });\r\n        // but if there are future thaws, re-freeze\r\n        if (this.freezeContentHeightDepth) {\r\n            this.forceFreezeContentHeight();\r\n        }\r\n    };\r\n    // Toolbar\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initToolbars = function () {\r\n        this.header = new Toolbar_1.default(this, this.computeHeaderOptions());\r\n        this.footer = new Toolbar_1.default(this, this.computeFooterOptions());\r\n        this.toolbarsManager = new Iterator_1.default([this.header, this.footer]);\r\n    };\r\n    Calendar.prototype.computeHeaderOptions = function () {\r\n        return {\r\n            extraClasses: 'fc-header-toolbar',\r\n            layout: this.opt('header')\r\n        };\r\n    };\r\n    Calendar.prototype.computeFooterOptions = function () {\r\n        return {\r\n            extraClasses: 'fc-footer-toolbar',\r\n            layout: this.opt('footer')\r\n        };\r\n    };\r\n    // can be called repeatedly and Header will rerender\r\n    Calendar.prototype.renderHeader = function () {\r\n        var header = this.header;\r\n        header.setToolbarOptions(this.computeHeaderOptions());\r\n        header.render();\r\n        if (header.el) {\r\n            this.el.prepend(header.el);\r\n        }\r\n    };\r\n    // can be called repeatedly and Footer will rerender\r\n    Calendar.prototype.renderFooter = function () {\r\n        var footer = this.footer;\r\n        footer.setToolbarOptions(this.computeFooterOptions());\r\n        footer.render();\r\n        if (footer.el) {\r\n            this.el.append(footer.el);\r\n        }\r\n    };\r\n    Calendar.prototype.setToolbarsTitle = function (title) {\r\n        this.toolbarsManager.proxyCall('updateTitle', title);\r\n    };\r\n    Calendar.prototype.updateToolbarButtons = function (dateProfile) {\r\n        var now = this.getNow();\r\n        var view = this.view;\r\n        var todayInfo = view.dateProfileGenerator.build(now);\r\n        var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n        var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n        this.toolbarsManager.proxyCall((todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ?\r\n            'enableButton' :\r\n            'disableButton', 'today');\r\n        this.toolbarsManager.proxyCall(prevInfo.isValid ?\r\n            'enableButton' :\r\n            'disableButton', 'prev');\r\n        this.toolbarsManager.proxyCall(nextInfo.isValid ?\r\n            'enableButton' :\r\n            'disableButton', 'next');\r\n    };\r\n    Calendar.prototype.queryToolbarsHeight = function () {\r\n        return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {\r\n            var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\r\n            return accumulator + toolbarHeight;\r\n        }, 0);\r\n    };\r\n    // Selection\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // this public method receives start/end dates in any format, with any timezone\r\n    Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {\r\n        this.view.select(this.buildSelectFootprint.apply(this, arguments));\r\n    };\r\n    Calendar.prototype.unselect = function () {\r\n        if (this.view) {\r\n            this.view.unselect();\r\n        }\r\n    };\r\n    // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\r\n    Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {\r\n        var start = this.moment(zonedStartInput).stripZone();\r\n        var end;\r\n        if (zonedEndInput) {\r\n            end = this.moment(zonedEndInput).stripZone();\r\n        }\r\n        else if (start.hasTime()) {\r\n            end = start.clone().add(this.defaultTimedEventDuration);\r\n        }\r\n        else {\r\n            end = start.clone().add(this.defaultAllDayEventDuration);\r\n        }\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), !start.hasTime());\r\n    };\r\n    // Date Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initMomentInternals = function () {\r\n        var _this = this;\r\n        this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\r\n        this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));\r\n        // Called immediately, and when any of the options change.\r\n        // Happens before any internal objects rebuild or rerender, because this is very core.\r\n        this.optionsManager.watch('buildingMomentLocale', [\r\n            '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',\r\n            '?firstDay', '?weekNumberCalculation'\r\n        ], function (opts) {\r\n            var weekNumberCalculation = opts.weekNumberCalculation;\r\n            var firstDay = opts.firstDay;\r\n            var _week;\r\n            // normalize\r\n            if (weekNumberCalculation === 'iso') {\r\n                weekNumberCalculation = 'ISO'; // normalize\r\n            }\r\n            var localeData = Object.create(// make a cheap copy\r\n            locale_1.getMomentLocaleData(opts.locale) // will fall back to en\r\n            );\r\n            if (opts.monthNames) {\r\n                localeData._months = opts.monthNames;\r\n            }\r\n            if (opts.monthNamesShort) {\r\n                localeData._monthsShort = opts.monthNamesShort;\r\n            }\r\n            if (opts.dayNames) {\r\n                localeData._weekdays = opts.dayNames;\r\n            }\r\n            if (opts.dayNamesShort) {\r\n                localeData._weekdaysShort = opts.dayNamesShort;\r\n            }\r\n            if (firstDay == null && weekNumberCalculation === 'ISO') {\r\n                firstDay = 1;\r\n            }\r\n            if (firstDay != null) {\r\n                _week = Object.create(localeData._week); // _week: { dow: # }\r\n                _week.dow = firstDay;\r\n                localeData._week = _week;\r\n            }\r\n            if ( // whitelist certain kinds of input\r\n            weekNumberCalculation === 'ISO' ||\r\n                weekNumberCalculation === 'local' ||\r\n                typeof weekNumberCalculation === 'function') {\r\n                localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\r\n            }\r\n            _this.localeData = localeData;\r\n            // If the internal current date object already exists, move to new locale.\r\n            // We do NOT need to do this technique for event dates, because this happens when converting to \"segments\".\r\n            if (_this.currentDate) {\r\n                _this.localizeMoment(_this.currentDate); // sets to localeData\r\n            }\r\n        });\r\n    };\r\n    // Builds a moment using the settings of the current calendar: timezone and locale.\r\n    // Accepts anything the vanilla moment() constructor accepts.\r\n    Calendar.prototype.moment = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var mom;\r\n        if (this.opt('timezone') === 'local') {\r\n            mom = moment_ext_1.default.apply(null, args);\r\n            // Force the moment to be local, because momentExt doesn't guarantee it.\r\n            if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\r\n                mom.local();\r\n            }\r\n        }\r\n        else if (this.opt('timezone') === 'UTC') {\r\n            mom = moment_ext_1.default.utc.apply(null, args); // process as UTC\r\n        }\r\n        else {\r\n            mom = moment_ext_1.default.parseZone.apply(null, args); // let the input decide the zone\r\n        }\r\n        this.localizeMoment(mom); // TODO\r\n        return mom;\r\n    };\r\n    Calendar.prototype.msToMoment = function (ms, forceAllDay) {\r\n        var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n        if (forceAllDay) {\r\n            mom.stripTime();\r\n        }\r\n        else {\r\n            mom = this.applyTimezone(mom); // may or may not apply locale\r\n        }\r\n        this.localizeMoment(mom);\r\n        return mom;\r\n    };\r\n    Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n        var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n        if (forceAllDay) {\r\n            mom.stripTime();\r\n        }\r\n        this.localizeMoment(mom);\r\n        return mom;\r\n    };\r\n    // Updates the given moment's locale settings to the current calendar locale settings.\r\n    Calendar.prototype.localizeMoment = function (mom) {\r\n        mom._locale = this.localeData;\r\n    };\r\n    // Returns a boolean about whether or not the calendar knows how to calculate\r\n    // the timezone offset of arbitrary dates in the current timezone.\r\n    Calendar.prototype.getIsAmbigTimezone = function () {\r\n        return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\r\n    };\r\n    // Returns a copy of the given date in the current timezone. Has no effect on dates without times.\r\n    Calendar.prototype.applyTimezone = function (date) {\r\n        if (!date.hasTime()) {\r\n            return date.clone();\r\n        }\r\n        var zonedDate = this.moment(date.toArray());\r\n        var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();\r\n        var adjustedZonedDate;\r\n        // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\r\n        if (timeAdjust) { // is the time result different than expected?\r\n            adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\r\n            if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) { // does it match perfectly now?\r\n                zonedDate = adjustedZonedDate;\r\n            }\r\n        }\r\n        return zonedDate;\r\n    };\r\n    /*\r\n    Assumes the footprint is non-open-ended.\r\n    */\r\n    Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {\r\n        if (ignoreEnd === void 0) { ignoreEnd = false; }\r\n        var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs);\r\n        var end;\r\n        if (!ignoreEnd) {\r\n            end = moment_ext_1.default.utc(componentFootprint.unzonedRange.endMs);\r\n        }\r\n        if (componentFootprint.isAllDay) {\r\n            start.stripTime();\r\n            if (end) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        else {\r\n            start = this.applyTimezone(start);\r\n            if (end) {\r\n                end = this.applyTimezone(end);\r\n            }\r\n        }\r\n        this.localizeMoment(start);\r\n        if (end) {\r\n            this.localizeMoment(end);\r\n        }\r\n        return new EventDateProfile_1.default(start, end, this);\r\n    };\r\n    // Returns a moment for the current date, as defined by the client's computer or from the `now` option.\r\n    // Will return an moment with an ambiguous timezone.\r\n    Calendar.prototype.getNow = function () {\r\n        var now = this.opt('now');\r\n        if (typeof now === 'function') {\r\n            now = now();\r\n        }\r\n        return this.moment(now).stripZone();\r\n    };\r\n    // Produces a human-readable string for the given duration.\r\n    // Side-effect: changes the locale of the given duration.\r\n    Calendar.prototype.humanizeDuration = function (duration) {\r\n        return duration.locale(this.opt('locale')).humanize();\r\n    };\r\n    // will return `null` if invalid range\r\n    Calendar.prototype.parseUnzonedRange = function (rangeInput) {\r\n        var start = null;\r\n        var end = null;\r\n        if (rangeInput.start) {\r\n            start = this.moment(rangeInput.start).stripZone();\r\n        }\r\n        if (rangeInput.end) {\r\n            end = this.moment(rangeInput.end).stripZone();\r\n        }\r\n        if (!start && !end) {\r\n            return null;\r\n        }\r\n        if (start && end && end.isBefore(start)) {\r\n            return null;\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Event-Date Utilities\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initEventManager = function () {\r\n        var _this = this;\r\n        var eventManager = new EventManager_1.default(this);\r\n        var rawSources = this.opt('eventSources') || [];\r\n        var singleRawSource = this.opt('events');\r\n        this.eventManager = eventManager;\r\n        if (singleRawSource) {\r\n            rawSources.unshift(singleRawSource);\r\n        }\r\n        eventManager.on('release', function (eventsPayload) {\r\n            _this.trigger('eventsReset', eventsPayload);\r\n        });\r\n        eventManager.freeze();\r\n        rawSources.forEach(function (rawSource) {\r\n            var source = EventSourceParser_1.default.parse(rawSource, _this);\r\n            if (source) {\r\n                eventManager.addSource(source);\r\n            }\r\n        });\r\n        eventManager.thaw();\r\n    };\r\n    Calendar.prototype.requestEvents = function (start, end) {\r\n        return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));\r\n    };\r\n    // Get an event's normalized end date. If not present, calculate it from the defaults.\r\n    Calendar.prototype.getEventEnd = function (event) {\r\n        if (event.end) {\r\n            return event.end.clone();\r\n        }\r\n        else {\r\n            return this.getDefaultEventEnd(event.allDay, event.start);\r\n        }\r\n    };\r\n    // Given an event's allDay status and start date, return what its fallback end date should be.\r\n    // TODO: rename to computeDefaultEventEnd\r\n    Calendar.prototype.getDefaultEventEnd = function (allDay, zonedStart) {\r\n        var end = zonedStart.clone();\r\n        if (allDay) {\r\n            end.stripTime().add(this.defaultAllDayEventDuration);\r\n        }\r\n        else {\r\n            end.add(this.defaultTimedEventDuration);\r\n        }\r\n        if (this.getIsAmbigTimezone()) {\r\n            end.stripZone(); // we don't know what the tzo should be\r\n        }\r\n        return end;\r\n    };\r\n    // Public Events API\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.rerenderEvents = function () {\r\n        this.view.flash('displayingEvents');\r\n    };\r\n    Calendar.prototype.refetchEvents = function () {\r\n        this.eventManager.refetchAllSources();\r\n    };\r\n    Calendar.prototype.renderEvents = function (eventInputs, isSticky) {\r\n        this.eventManager.freeze();\r\n        for (var i = 0; i < eventInputs.length; i++) {\r\n            this.renderEvent(eventInputs[i], isSticky);\r\n        }\r\n        this.eventManager.thaw();\r\n    };\r\n    Calendar.prototype.renderEvent = function (eventInput, isSticky) {\r\n        if (isSticky === void 0) { isSticky = false; }\r\n        var eventManager = this.eventManager;\r\n        var eventDef = EventDefParser_1.default.parse(eventInput, eventInput.source || eventManager.stickySource);\r\n        if (eventDef) {\r\n            eventManager.addEventDef(eventDef, isSticky);\r\n        }\r\n    };\r\n    // legacyQuery operates on legacy event instance objects\r\n    Calendar.prototype.removeEvents = function (legacyQuery) {\r\n        var eventManager = this.eventManager;\r\n        var legacyInstances = [];\r\n        var idMap = {};\r\n        var eventDef;\r\n        var i;\r\n        if (legacyQuery == null) { // shortcut for removing all\r\n            eventManager.removeAllEventDefs(); // persist=true\r\n        }\r\n        else {\r\n            eventManager.getEventInstances().forEach(function (eventInstance) {\r\n                legacyInstances.push(eventInstance.toLegacy());\r\n            });\r\n            legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);\r\n            // compute unique IDs\r\n            for (i = 0; i < legacyInstances.length; i++) {\r\n                eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);\r\n                idMap[eventDef.id] = true;\r\n            }\r\n            eventManager.freeze();\r\n            for (i in idMap) { // reuse `i` as an \"id\"\r\n                eventManager.removeEventDefsById(i); // persist=true\r\n            }\r\n            eventManager.thaw();\r\n        }\r\n    };\r\n    // legacyQuery operates on legacy event instance objects\r\n    Calendar.prototype.clientEvents = function (legacyQuery) {\r\n        var legacyEventInstances = [];\r\n        this.eventManager.getEventInstances().forEach(function (eventInstance) {\r\n            legacyEventInstances.push(eventInstance.toLegacy());\r\n        });\r\n        return filterLegacyEventInstances(legacyEventInstances, legacyQuery);\r\n    };\r\n    Calendar.prototype.updateEvents = function (eventPropsArray) {\r\n        this.eventManager.freeze();\r\n        for (var i = 0; i < eventPropsArray.length; i++) {\r\n            this.updateEvent(eventPropsArray[i]);\r\n        }\r\n        this.eventManager.thaw();\r\n    };\r\n    Calendar.prototype.updateEvent = function (eventProps) {\r\n        var eventDef = this.eventManager.getEventDefByUid(eventProps._id);\r\n        var eventInstance;\r\n        var eventDefMutation;\r\n        if (eventDef instanceof SingleEventDef_1.default) {\r\n            eventInstance = eventDef.buildInstance();\r\n            eventDefMutation = EventDefMutation_1.default.createFromRawProps(eventInstance, eventProps, // raw props\r\n            null // largeUnit -- who uses it?\r\n            );\r\n            this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release\r\n        }\r\n    };\r\n    // Public Event Sources API\r\n    // ------------------------------------------------------------------------------------\r\n    Calendar.prototype.getEventSources = function () {\r\n        return this.eventManager.otherSources.slice(); // clone\r\n    };\r\n    Calendar.prototype.getEventSourceById = function (id) {\r\n        return this.eventManager.getSourceById(EventSource_1.default.normalizeId(id));\r\n    };\r\n    Calendar.prototype.addEventSource = function (sourceInput) {\r\n        var source = EventSourceParser_1.default.parse(sourceInput, this);\r\n        if (source) {\r\n            this.eventManager.addSource(source);\r\n        }\r\n    };\r\n    Calendar.prototype.removeEventSources = function (sourceMultiQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources;\r\n        var i;\r\n        if (sourceMultiQuery == null) {\r\n            this.eventManager.removeAllSources();\r\n        }\r\n        else {\r\n            sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n            eventManager.freeze();\r\n            for (i = 0; i < sources.length; i++) {\r\n                eventManager.removeSource(sources[i]);\r\n            }\r\n            eventManager.thaw();\r\n        }\r\n    };\r\n    Calendar.prototype.removeEventSource = function (sourceQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources = eventManager.querySources(sourceQuery);\r\n        var i;\r\n        eventManager.freeze();\r\n        for (i = 0; i < sources.length; i++) {\r\n            eventManager.removeSource(sources[i]);\r\n        }\r\n        eventManager.thaw();\r\n    };\r\n    Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n        var i;\r\n        eventManager.freeze();\r\n        for (i = 0; i < sources.length; i++) {\r\n            eventManager.refetchSource(sources[i]);\r\n        }\r\n        eventManager.thaw();\r\n    };\r\n    // not for internal use. use options module directly instead.\r\n    Calendar.defaults = options_1.globalDefaults;\r\n    Calendar.englishDefaults = options_1.englishDefaults;\r\n    Calendar.rtlDefaults = options_1.rtlDefaults;\r\n    return Calendar;\r\n}());\r\nexports.default = Calendar;\r\nEmitterMixin_1.default.mixInto(Calendar);\r\nListenerMixin_1.default.mixInto(Calendar);\r\nfunction filterLegacyEventInstances(legacyEventInstances, legacyQuery) {\r\n    if (legacyQuery == null) {\r\n        return legacyEventInstances;\r\n    }\r\n    else if ($.isFunction(legacyQuery)) {\r\n        return legacyEventInstances.filter(legacyQuery);\r\n    }\r\n    else { // an event ID\r\n        legacyQuery += ''; // normalize to string\r\n        return legacyEventInstances.filter(function (legacyEventInstance) {\r\n            // soft comparison because id not be normalized to string\r\n            // tslint:disable-next-line\r\n            return legacyEventInstance.id == legacyQuery ||\r\n                legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match\r\n        });\r\n    }\r\n}\r\n\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar ExternalDropping = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ExternalDropping, _super);\r\n    function ExternalDropping() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.isDragging = false; // jqui-dragging an external element? boolean\r\n        return _this;\r\n    }\r\n    /*\r\n    component impements:\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n      - isExternalInstanceGroupAllowed\r\n      - renderDrag\r\n      - unrenderDrag\r\n    */\r\n    ExternalDropping.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    ExternalDropping.prototype.bindToDocument = function () {\r\n        this.listenTo($(document), {\r\n            dragstart: this.handleDragStart,\r\n            sortstart: this.handleDragStart // jqui\r\n        });\r\n    };\r\n    ExternalDropping.prototype.unbindFromDocument = function () {\r\n        this.stopListeningTo($(document));\r\n    };\r\n    // Called when a jQuery UI drag is initiated anywhere in the DOM\r\n    ExternalDropping.prototype.handleDragStart = function (ev, ui) {\r\n        var el;\r\n        var accept;\r\n        if (this.opt('droppable')) { // only listen if this setting is on\r\n            el = $((ui ? ui.item : null) || ev.target);\r\n            // Test that the dragged element passes the dropAccept selector or filter function.\r\n            // FYI, the default is \"*\" (matches all)\r\n            accept = this.opt('dropAccept');\r\n            if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\r\n                if (!this.isDragging) { // prevent double-listening if fired twice\r\n                    this.listenToExternalDrag(el, ev, ui);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    // Called when a jQuery UI drag starts and it needs to be monitored for dropping\r\n    ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\r\n        var singleEventDef; // a null value signals an unsuccessful drag\r\n        // listener that tracks mouse movement over date-associated pixel regions\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n            interactionStart: function () {\r\n                _this.isDragging = true;\r\n            },\r\n            hitOver: function (hit) {\r\n                var isAllowed = true;\r\n                var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid\r\n                var mutatedEventInstanceGroup;\r\n                if (hitFootprint) {\r\n                    singleEventDef = _this.computeExternalDrop(hitFootprint, meta);\r\n                    if (singleEventDef) {\r\n                        mutatedEventInstanceGroup = new EventInstanceGroup_1.default(singleEventDef.buildInstances());\r\n                        isAllowed = meta.eventProps ? // isEvent?\r\n                            component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :\r\n                            component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    singleEventDef = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                if (singleEventDef) {\r\n                    component.renderDrag(// called without a seg parameter\r\n                    component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                singleEventDef = null; // signal unsuccessful\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n                component.unrenderDrag();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                if (singleEventDef) { // element was dropped on a valid hit\r\n                    view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent\r\n                    Boolean(meta.stick), // isSticky\r\n                    el, ev, ui);\r\n                }\r\n                _this.isDragging = false;\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        dragListener.startDrag(ev); // start listening immediately\r\n    };\r\n    // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\r\n    // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\r\n    // Returning a null value signals an invalid drop hit.\r\n    // DOES NOT consider overlap/constraint.\r\n    // Assumes both footprints are non-open-ended.\r\n    ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {\r\n        var calendar = this.view.calendar;\r\n        var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs).stripZone();\r\n        var end;\r\n        var eventDef;\r\n        if (componentFootprint.isAllDay) {\r\n            // if dropped on an all-day span, and element's metadata specified a time, set it\r\n            if (meta.startTime) {\r\n                start.time(meta.startTime);\r\n            }\r\n            else {\r\n                start.stripTime();\r\n            }\r\n        }\r\n        if (meta.duration) {\r\n            end = start.clone().add(meta.duration);\r\n        }\r\n        start = calendar.applyTimezone(start);\r\n        if (end) {\r\n            end = calendar.applyTimezone(end);\r\n        }\r\n        eventDef = SingleEventDef_1.default.parse($.extend({}, meta.eventProps, {\r\n            start: start,\r\n            end: end\r\n        }), new EventSource_1.default(calendar));\r\n        return eventDef;\r\n    };\r\n    return ExternalDropping;\r\n}(Interaction_1.default));\r\nexports.default = ExternalDropping;\r\nListenerMixin_1.default.mixInto(ExternalDropping);\r\n/* External-Dragging-Element Data\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\r\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\r\nexportHooks.dataAttrPrefix = '';\r\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\r\n// to be used for Event Object creation.\r\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\r\nfunction getDraggedElMeta(el) {\r\n    var prefix = exportHooks.dataAttrPrefix;\r\n    var eventProps; // properties for creating the event, not related to date/time\r\n    var startTime; // a Duration\r\n    var duration;\r\n    var stick;\r\n    if (prefix) {\r\n        prefix += '-';\r\n    }\r\n    eventProps = el.data(prefix + 'event') || null;\r\n    if (eventProps) {\r\n        if (typeof eventProps === 'object') {\r\n            eventProps = $.extend({}, eventProps); // make a copy\r\n        }\r\n        else { // something like 1 or true. still signal event creation\r\n            eventProps = {};\r\n        }\r\n        // pluck special-cased date/time properties\r\n        startTime = eventProps.start;\r\n        if (startTime == null) {\r\n            startTime = eventProps.time;\r\n        } // accept 'time' as well\r\n        duration = eventProps.duration;\r\n        stick = eventProps.stick;\r\n        delete eventProps.start;\r\n        delete eventProps.time;\r\n        delete eventProps.duration;\r\n        delete eventProps.stick;\r\n    }\r\n    // fallback to standalone attribute values for each of the date/time properties\r\n    if (startTime == null) {\r\n        startTime = el.data(prefix + 'start');\r\n    }\r\n    if (startTime == null) {\r\n        startTime = el.data(prefix + 'time');\r\n    } // accept 'time' as well\r\n    if (duration == null) {\r\n        duration = el.data(prefix + 'duration');\r\n    }\r\n    if (stick == null) {\r\n        stick = el.data(prefix + 'stick');\r\n    }\r\n    // massage into correct data types\r\n    startTime = startTime != null ? moment.duration(startTime) : null;\r\n    duration = duration != null ? moment.duration(duration) : null;\r\n    stick = Boolean(stick);\r\n    return { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\r\n}\r\n\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventResizing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventResizing, _super);\r\n    /*\r\n    component impements:\r\n      - bindSegHandlerToEl\r\n      - publiclyTrigger\r\n      - diffDates\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n      - getSafeHitFootprint\r\n    */\r\n    function EventResizing(component, eventPointing) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.isResizing = false;\r\n        _this.eventPointing = eventPointing;\r\n        return _this;\r\n    }\r\n    EventResizing.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    EventResizing.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));\r\n        component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n    };\r\n    EventResizing.prototype.handleMouseDown = function (seg, ev) {\r\n        if (this.component.canStartResize(seg, ev)) {\r\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n                .startInteraction(ev, { distance: 5 });\r\n        }\r\n    };\r\n    EventResizing.prototype.handleTouchStart = function (seg, ev) {\r\n        if (this.component.canStartResize(seg, ev)) {\r\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n                .startInteraction(ev);\r\n        }\r\n    };\r\n    // Creates a listener that tracks the user as they resize an event segment.\r\n    // Generic enough to work with any type of Grid.\r\n    EventResizing.prototype.buildDragListener = function (seg, isStart) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var eventManager = calendar.eventManager;\r\n        var el = seg.el;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance;\r\n        var isDragging;\r\n        var resizeMutation; // zoned event date properties. falsy if invalid resize\r\n        // Tracks mouse movement over the *grid's* coordinate map\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            subjectEl: el,\r\n            interactionStart: function () {\r\n                isDragging = false;\r\n            },\r\n            dragStart: function (ev) {\r\n                isDragging = true;\r\n                // ensure a mouseout on the manipulated event has been reported\r\n                _this.eventPointing.handleMouseout(seg, ev);\r\n                _this.segResizeStart(seg, ev);\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var isAllowed = true;\r\n                var origHitFootprint = component.getSafeHitFootprint(origHit);\r\n                var hitFootprint = component.getSafeHitFootprint(hit);\r\n                var mutatedEventInstanceGroup;\r\n                if (origHitFootprint && hitFootprint) {\r\n                    resizeMutation = isStart ?\r\n                        _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :\r\n                        _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);\r\n                    if (resizeMutation) {\r\n                        mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);\r\n                        isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    resizeMutation = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                else if (resizeMutation.isEmpty()) {\r\n                    // no change. (FYI, event dates might have zones)\r\n                    resizeMutation = null;\r\n                }\r\n                if (resizeMutation) {\r\n                    view.hideEventsWithId(seg.footprint.eventDef.id);\r\n                    view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                resizeMutation = null;\r\n            },\r\n            hitDone: function () {\r\n                view.unrenderEventResize(seg);\r\n                view.showEventsWithId(seg.footprint.eventDef.id);\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                if (isDragging) {\r\n                    _this.segResizeStop(seg, ev);\r\n                }\r\n                if (resizeMutation) { // valid date to resize to?\r\n                    // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n                    view.reportEventResize(eventInstance, resizeMutation, el, ev);\r\n                }\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Called before event segment resizing starts\r\n    EventResizing.prototype.segResizeStart = function (seg, ev) {\r\n        this.isResizing = true;\r\n        this.component.publiclyTrigger('eventResizeStart', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Called after event segment resizing stops\r\n    EventResizing.prototype.segResizeStop = function (seg, ev) {\r\n        this.isResizing = false;\r\n        this.component.publiclyTrigger('eventResizeStop', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Returns new date-information for an event segment being resized from its start\r\n    EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n        var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n        var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());\r\n        var dateMutation;\r\n        var eventDefMutation;\r\n        if (origRange.getStart().add(startDelta) < origRange.getEnd()) {\r\n            dateMutation = new EventDefDateMutation_1.default();\r\n            dateMutation.setStartDelta(startDelta);\r\n            eventDefMutation = new EventDefMutation_1.default();\r\n            eventDefMutation.setDateMutation(dateMutation);\r\n            return eventDefMutation;\r\n        }\r\n        return false;\r\n    };\r\n    // Returns new date-information for an event segment being resized from its end\r\n    EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n        var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n        var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());\r\n        var dateMutation;\r\n        var eventDefMutation;\r\n        if (origRange.getEnd().add(endDelta) > origRange.getStart()) {\r\n            dateMutation = new EventDefDateMutation_1.default();\r\n            dateMutation.setEndDelta(endDelta);\r\n            eventDefMutation = new EventDefMutation_1.default();\r\n            eventDefMutation.setDateMutation(dateMutation);\r\n            return eventDefMutation;\r\n        }\r\n        return false;\r\n    };\r\n    return EventResizing;\r\n}(Interaction_1.default));\r\nexports.default = EventResizing;\r\n\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar DragListener_1 = __webpack_require__(59);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventDragging = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventDragging, _super);\r\n    /*\r\n    component implements:\r\n      - bindSegHandlerToEl\r\n      - publiclyTrigger\r\n      - diffDates\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n    */\r\n    function EventDragging(component, eventPointing) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.isDragging = false;\r\n        _this.eventPointing = eventPointing;\r\n        return _this;\r\n    }\r\n    EventDragging.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    EventDragging.prototype.getSelectionDelay = function () {\r\n        var delay = this.opt('eventLongPressDelay');\r\n        if (delay == null) {\r\n            delay = this.opt('longPressDelay'); // fallback\r\n        }\r\n        return delay;\r\n    };\r\n    EventDragging.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));\r\n        component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n    };\r\n    EventDragging.prototype.handleMousedown = function (seg, ev) {\r\n        if (!this.component.shouldIgnoreMouse() &&\r\n            this.component.canStartDrag(seg, ev)) {\r\n            this.buildDragListener(seg).startInteraction(ev, { distance: 5 });\r\n        }\r\n    };\r\n    EventDragging.prototype.handleTouchStart = function (seg, ev) {\r\n        var component = this.component;\r\n        var settings = {\r\n            delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?\r\n                0 : this.getSelectionDelay()\r\n        };\r\n        if (component.canStartDrag(seg, ev)) {\r\n            this.buildDragListener(seg).startInteraction(ev, settings);\r\n        }\r\n        else if (component.canStartSelection(seg, ev)) {\r\n            this.buildSelectListener(seg).startInteraction(ev, settings);\r\n        }\r\n    };\r\n    // seg isn't draggable, but let's use a generic DragListener\r\n    // simply for the delay, so it can be selected.\r\n    // Has side effect of setting/unsetting `dragListener`\r\n    EventDragging.prototype.buildSelectListener = function (seg) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n        if (this.dragListener) {\r\n            return this.dragListener;\r\n        }\r\n        var dragListener = this.dragListener = new DragListener_1.default({\r\n            dragStart: function (ev) {\r\n                if (dragListener.isTouch &&\r\n                    !view.isEventDefSelected(eventDef) &&\r\n                    eventInstance) {\r\n                    // if not previously selected, will fire after a delay. then, select the event\r\n                    view.selectEventInstance(eventInstance);\r\n                }\r\n            },\r\n            interactionEnd: function (ev) {\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Builds a listener that will track user-dragging on an event segment.\r\n    // Generic enough to work with any type of Grid.\r\n    // Has side effect of setting/unsetting `dragListener`\r\n    EventDragging.prototype.buildDragListener = function (seg) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var eventManager = calendar.eventManager;\r\n        var el = seg.el;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n        var isDragging;\r\n        var mouseFollower; // A clone of the original element that will move with the mouse\r\n        var eventDefMutation;\r\n        if (this.dragListener) {\r\n            return this.dragListener;\r\n        }\r\n        // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\r\n        // of the view.\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(view, {\r\n            scroll: this.opt('dragScroll'),\r\n            subjectEl: el,\r\n            subjectCenter: true,\r\n            interactionStart: function (ev) {\r\n                seg.component = component; // for renderDrag\r\n                isDragging = false;\r\n                mouseFollower = new MouseFollower_1.default(seg.el, {\r\n                    additionalClass: 'fc-dragging',\r\n                    parentEl: view.el,\r\n                    opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),\r\n                    revertDuration: _this.opt('dragRevertDuration'),\r\n                    zIndex: 2 // one above the .fc-view\r\n                });\r\n                mouseFollower.hide(); // don't show until we know this is a real drag\r\n                mouseFollower.start(ev);\r\n            },\r\n            dragStart: function (ev) {\r\n                if (dragListener.isTouch &&\r\n                    !view.isEventDefSelected(eventDef) &&\r\n                    eventInstance) {\r\n                    // if not previously selected, will fire after a delay. then, select the event\r\n                    view.selectEventInstance(eventInstance);\r\n                }\r\n                isDragging = true;\r\n                // ensure a mouseout on the manipulated event has been reported\r\n                _this.eventPointing.handleMouseout(seg, ev);\r\n                _this.segDragStart(seg, ev);\r\n                view.hideEventsWithId(seg.footprint.eventDef.id);\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var isAllowed = true;\r\n                var origFootprint;\r\n                var footprint;\r\n                var mutatedEventInstanceGroup;\r\n                // starting hit could be forced (DayGrid.limit)\r\n                if (seg.hit) {\r\n                    origHit = seg.hit;\r\n                }\r\n                // hit might not belong to this grid, so query origin grid\r\n                origFootprint = origHit.component.getSafeHitFootprint(origHit);\r\n                footprint = hit.component.getSafeHitFootprint(hit);\r\n                if (origFootprint && footprint) {\r\n                    eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);\r\n                    if (eventDefMutation) {\r\n                        mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);\r\n                        isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    eventDefMutation = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                // if a valid drop location, have the subclass render a visual indication\r\n                if (eventDefMutation &&\r\n                    view.renderDrag(// truthy if rendered something\r\n                    component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {\r\n                    mouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\r\n                }\r\n                else {\r\n                    mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\r\n                }\r\n                if (isOrig) {\r\n                    // needs to have moved hits to be a valid drop\r\n                    eventDefMutation = null;\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                view.unrenderDrag(seg); // unrender whatever was done in renderDrag\r\n                mouseFollower.show(); // show in case we are moving out of all hits\r\n                eventDefMutation = null;\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                delete seg.component; // prevent side effects\r\n                // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\r\n                mouseFollower.stop(!eventDefMutation, function () {\r\n                    if (isDragging) {\r\n                        view.unrenderDrag(seg);\r\n                        _this.segDragStop(seg, ev);\r\n                    }\r\n                    view.showEventsWithId(seg.footprint.eventDef.id);\r\n                    if (eventDefMutation) {\r\n                        // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n                        view.reportEventDrop(eventInstance, eventDefMutation, el, ev);\r\n                    }\r\n                });\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Called before event segment dragging starts\r\n    EventDragging.prototype.segDragStart = function (seg, ev) {\r\n        this.isDragging = true;\r\n        this.component.publiclyTrigger('eventDragStart', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Called after event segment dragging stops\r\n    EventDragging.prototype.segDragStop = function (seg, ev) {\r\n        this.isDragging = false;\r\n        this.component.publiclyTrigger('eventDragStop', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // DOES NOT consider overlap/constraint\r\n    EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {\r\n        var eventDefMutation = new EventDefMutation_1.default();\r\n        eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));\r\n        return eventDefMutation;\r\n    };\r\n    EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {\r\n        var date0 = startFootprint.unzonedRange.getStart();\r\n        var date1 = endFootprint.unzonedRange.getStart();\r\n        var clearEnd = false;\r\n        var forceTimed = false;\r\n        var forceAllDay = false;\r\n        var dateDelta;\r\n        var dateMutation;\r\n        if (startFootprint.isAllDay !== endFootprint.isAllDay) {\r\n            clearEnd = true;\r\n            if (endFootprint.isAllDay) {\r\n                forceAllDay = true;\r\n                date0.stripTime();\r\n            }\r\n            else {\r\n                forceTimed = true;\r\n            }\r\n        }\r\n        dateDelta = this.component.diffDates(date1, date0);\r\n        dateMutation = new EventDefDateMutation_1.default();\r\n        dateMutation.clearEnd = clearEnd;\r\n        dateMutation.forceTimed = forceTimed;\r\n        dateMutation.forceAllDay = forceAllDay;\r\n        dateMutation.setDateDelta(dateDelta);\r\n        return dateMutation;\r\n    };\r\n    return EventDragging;\r\n}(Interaction_1.default));\r\nexports.default = EventDragging;\r\n\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateSelecting = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateSelecting, _super);\r\n    /*\r\n    component must implement:\r\n      - bindDateHandlerToEl\r\n      - getSafeHitFootprint\r\n      - renderHighlight\r\n      - unrenderHighlight\r\n    */\r\n    function DateSelecting(component) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.dragListener = _this.buildDragListener();\r\n        return _this;\r\n    }\r\n    DateSelecting.prototype.end = function () {\r\n        this.dragListener.endInteraction();\r\n    };\r\n    DateSelecting.prototype.getDelay = function () {\r\n        var delay = this.opt('selectLongPressDelay');\r\n        if (delay == null) {\r\n            delay = this.opt('longPressDelay'); // fallback\r\n        }\r\n        return delay;\r\n    };\r\n    DateSelecting.prototype.bindToEl = function (el) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var dragListener = this.dragListener;\r\n        component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n            if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {\r\n                dragListener.startInteraction(ev, {\r\n                    distance: _this.opt('selectMinDistance')\r\n                });\r\n            }\r\n        });\r\n        component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n            if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {\r\n                dragListener.startInteraction(ev, {\r\n                    delay: _this.getDelay()\r\n                });\r\n            }\r\n        });\r\n        util_1.preventSelection(el);\r\n    };\r\n    // Creates a listener that tracks the user's drag across day elements, for day selecting.\r\n    DateSelecting.prototype.buildDragListener = function () {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var selectionFootprint; // null if invalid selection\r\n        var dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            interactionStart: function () {\r\n                selectionFootprint = null;\r\n            },\r\n            dragStart: function (ev) {\r\n                _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var origHitFootprint;\r\n                var hitFootprint;\r\n                if (origHit) { // click needs to have started on a hit\r\n                    origHitFootprint = component.getSafeHitFootprint(origHit);\r\n                    hitFootprint = component.getSafeHitFootprint(hit);\r\n                    if (origHitFootprint && hitFootprint) {\r\n                        selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);\r\n                    }\r\n                    else {\r\n                        selectionFootprint = null;\r\n                    }\r\n                    if (selectionFootprint) {\r\n                        component.renderSelectionFootprint(selectionFootprint);\r\n                    }\r\n                    else if (selectionFootprint === false) {\r\n                        util_1.disableCursor();\r\n                    }\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                selectionFootprint = null;\r\n                component.unrenderSelection();\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev, isCancelled) {\r\n                if (!isCancelled && selectionFootprint) {\r\n                    // the selection will already have been rendered. just report it\r\n                    _this.view.reportSelection(selectionFootprint, ev);\r\n                }\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Given the first and last date-spans of a selection, returns another date-span object.\r\n    // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().\r\n    // Will return false if the selection is invalid and this should be indicated to the user.\r\n    // Will return null/undefined if a selection invalid but no error should be reported.\r\n    DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {\r\n        var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);\r\n        if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {\r\n            return false;\r\n        }\r\n        return wholeFootprint;\r\n    };\r\n    // Given two spans, must return the combination of the two.\r\n    // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\r\n    // Assumes both footprints are non-open-ended.\r\n    DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {\r\n        var ms = [\r\n            footprint0.unzonedRange.startMs,\r\n            footprint0.unzonedRange.endMs,\r\n            footprint1.unzonedRange.startMs,\r\n            footprint1.unzonedRange.endMs\r\n        ];\r\n        ms.sort(util_1.compareNumbers);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(ms[0], ms[3]), footprint0.isAllDay);\r\n    };\r\n    DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n        return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&\r\n            this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);\r\n    };\r\n    return DateSelecting;\r\n}(Interaction_1.default));\r\nexports.default = DateSelecting;\r\n\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateClicking = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateClicking, _super);\r\n    /*\r\n    component must implement:\r\n      - bindDateHandlerToEl\r\n      - getSafeHitFootprint\r\n      - getHitEl\r\n    */\r\n    function DateClicking(component) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.dragListener = _this.buildDragListener();\r\n        return _this;\r\n    }\r\n    DateClicking.prototype.end = function () {\r\n        this.dragListener.endInteraction();\r\n    };\r\n    DateClicking.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        var dragListener = this.dragListener;\r\n        component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n            if (!component.shouldIgnoreMouse()) {\r\n                dragListener.startInteraction(ev);\r\n            }\r\n        });\r\n        component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n            if (!component.shouldIgnoreTouch()) {\r\n                dragListener.startInteraction(ev);\r\n            }\r\n        });\r\n    };\r\n    // Creates a listener that tracks the user's drag across day elements, for day clicking.\r\n    DateClicking.prototype.buildDragListener = function () {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var dayClickHit; // null if invalid dayClick\r\n        var dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            interactionStart: function () {\r\n                dayClickHit = dragListener.origHit;\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                // if user dragged to another cell at any point, it can no longer be a dayClick\r\n                if (!isOrig) {\r\n                    dayClickHit = null;\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                dayClickHit = null;\r\n            },\r\n            interactionEnd: function (ev, isCancelled) {\r\n                var componentFootprint;\r\n                if (!isCancelled && dayClickHit) {\r\n                    componentFootprint = component.getSafeHitFootprint(dayClickHit);\r\n                    if (componentFootprint) {\r\n                        _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        // because dragListener won't be called with any time delay, \"dragging\" will begin immediately,\r\n        // which will kill any touchmoving/scrolling. Prevent this.\r\n        dragListener.shouldCancelTouchScroll = false;\r\n        dragListener.scrollAlwaysKills = true;\r\n        return dragListener;\r\n    };\r\n    return DateClicking;\r\n}(Interaction_1.default));\r\nexports.default = DateClicking;\r\n\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nvar DayGrid_1 = __webpack_require__(66);\r\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\r\nvar agendaTimeGridMethods;\r\nvar agendaDayGridMethods;\r\n/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\r\n// Responsible for managing width/height.\r\nvar AgendaView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AgendaView, _super);\r\n    function AgendaView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering\r\n        _this.timeGrid = _this.instantiateTimeGrid();\r\n        _this.addChild(_this.timeGrid);\r\n        if (_this.opt('allDaySlot')) { // should we display the \"all-day\" area?\r\n            _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view\r\n            _this.addChild(_this.dayGrid);\r\n        }\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\r\n    AgendaView.prototype.instantiateTimeGrid = function () {\r\n        var timeGrid = new this.timeGridClass(this);\r\n        util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);\r\n        return timeGrid;\r\n    };\r\n    // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\r\n    AgendaView.prototype.instantiateDayGrid = function () {\r\n        var dayGrid = new this.dayGridClass(this);\r\n        util_1.copyOwnProps(agendaDayGridMethods, dayGrid);\r\n        return dayGrid;\r\n    };\r\n    /* Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.renderSkeleton = function () {\r\n        var timeGridWrapEl;\r\n        var timeGridEl;\r\n        this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\r\n        this.scroller.render();\r\n        timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\r\n        timeGridEl = $('<div class=\"fc-time-grid\">').appendTo(timeGridWrapEl);\r\n        this.el.find('.fc-body > tr > td').append(timeGridWrapEl);\r\n        this.timeGrid.headContainerEl = this.el.find('.fc-head-container');\r\n        this.timeGrid.setElement(timeGridEl);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.setElement(this.el.find('.fc-day-grid'));\r\n            // have the day-grid extend it's coordinate area over the <hr> dividing the two grids\r\n            this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\r\n        }\r\n    };\r\n    AgendaView.prototype.unrenderSkeleton = function () {\r\n        this.timeGrid.removeElement();\r\n        if (this.dayGrid) {\r\n            this.dayGrid.removeElement();\r\n        }\r\n        this.scroller.destroy();\r\n    };\r\n    // Builds the HTML skeleton for the view.\r\n    // The day-grid and time-grid components will render inside containers defined by this HTML.\r\n    AgendaView.prototype.renderSkeletonHtml = function () {\r\n        var theme = this.calendar.theme;\r\n        return '' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            (this.opt('columnHeader') ?\r\n                '<thead class=\"fc-head\">' +\r\n                    '<tr>' +\r\n                    '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\r\n                    '</tr>' +\r\n                    '</thead>' :\r\n                '') +\r\n            '<tbody class=\"fc-body\">' +\r\n            '<tr>' +\r\n            '<td class=\"' + theme.getClass('widgetContent') + '\">' +\r\n            (this.dayGrid ?\r\n                '<div class=\"fc-day-grid\"></div>' +\r\n                    '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\"></hr>' :\r\n                '') +\r\n            '</td>' +\r\n            '</tr>' +\r\n            '</tbody>' +\r\n            '</table>';\r\n    };\r\n    // Generates an HTML attribute string for setting the width of the axis, if it is known\r\n    AgendaView.prototype.axisStyleAttr = function () {\r\n        if (this.axisWidth != null) {\r\n            return 'style=\"width:' + this.axisWidth + 'px\"';\r\n        }\r\n        return '';\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.getNowIndicatorUnit = function () {\r\n        return this.timeGrid.getNowIndicatorUnit();\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Adjusts the vertical dimensions of the view to the specified values\r\n    AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        var eventLimit;\r\n        var scrollerHeight;\r\n        var scrollbarWidths;\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        // make all axis cells line up, and record the width so newly created axis cells will have it\r\n        this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis'));\r\n        // hack to give the view some height prior to timeGrid's columns being rendered\r\n        // TODO: separate setting height from scroller VS timeGrid.\r\n        if (!this.timeGrid.colEls) {\r\n            if (!isAuto) {\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            return;\r\n        }\r\n        // set of fake row elements that must compensate when scroller has scrollbars\r\n        var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)');\r\n        // reset all dimensions back to the original state\r\n        this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary\r\n        this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n        util_1.uncompensateScroll(noScrollRowEls);\r\n        // limit number of events in the all-day area\r\n        if (this.dayGrid) {\r\n            this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n            eventLimit = this.opt('eventLimit');\r\n            if (eventLimit && typeof eventLimit !== 'number') {\r\n                eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\r\n            }\r\n            if (eventLimit) {\r\n                this.dayGrid.limitRows(eventLimit);\r\n            }\r\n        }\r\n        if (!isAuto) { // should we force dimensions of the scroll container?\r\n            scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n            this.scroller.setHeight(scrollerHeight);\r\n            scrollbarWidths = this.scroller.getScrollbarWidths();\r\n            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n                // make the all-day and header rows lines up\r\n                util_1.compensateScroll(noScrollRowEls, scrollbarWidths);\r\n                // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\r\n                // and reapply the desired height to the scroller.\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            // guarantees the same scrollbar widths\r\n            this.scroller.lockOverflow(scrollbarWidths);\r\n            // if there's any space below the slats, show the horizontal rule.\r\n            // this won't cause any new overflow, because lockOverflow already called.\r\n            if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\r\n                this.timeGrid.bottomRuleEl.show();\r\n            }\r\n        }\r\n    };\r\n    // given a desired total height of the view, returns what the height of the scroller should be\r\n    AgendaView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    /* Scroll\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes the initial pre-configured scroll state prior to allowing the user to change it\r\n    AgendaView.prototype.computeInitialDateScroll = function () {\r\n        var scrollTime = moment.duration(this.opt('scrollTime'));\r\n        var top = this.timeGrid.computeTimeTop(scrollTime);\r\n        // zoom can give weird floating-point values. rather scroll a little bit further\r\n        top = Math.ceil(top);\r\n        if (top) {\r\n            top++; // to overcome top border that slots beyond the first have. looks better\r\n        }\r\n        return { top: top };\r\n    };\r\n    AgendaView.prototype.queryDateScroll = function () {\r\n        return { top: this.scroller.getScrollTop() };\r\n    };\r\n    AgendaView.prototype.applyDateScroll = function (scroll) {\r\n        if (scroll.top !== undefined) {\r\n            this.scroller.setScrollTop(scroll.top);\r\n        }\r\n    };\r\n    /* Hit Areas\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // forward all hit-related method calls to the grids (dayGrid might not be defined)\r\n    AgendaView.prototype.getHitFootprint = function (hit) {\r\n        // TODO: hit.component is set as a hack to identify where the hit came from\r\n        return hit.component.getHitFootprint(hit);\r\n    };\r\n    AgendaView.prototype.getHitEl = function (hit) {\r\n        // TODO: hit.component is set as a hack to identify where the hit came from\r\n        return hit.component.getHitEl(hit);\r\n    };\r\n    /* Event Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.executeEventRender = function (eventsPayload) {\r\n        var dayEventsPayload = {};\r\n        var timedEventsPayload = {};\r\n        var id;\r\n        var eventInstanceGroup;\r\n        // separate the events into all-day and timed\r\n        for (id in eventsPayload) {\r\n            eventInstanceGroup = eventsPayload[id];\r\n            if (eventInstanceGroup.getEventDef().isAllDay()) {\r\n                dayEventsPayload[id] = eventInstanceGroup;\r\n            }\r\n            else {\r\n                timedEventsPayload[id] = eventInstanceGroup;\r\n            }\r\n        }\r\n        this.timeGrid.executeEventRender(timedEventsPayload);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.executeEventRender(dayEventsPayload);\r\n        }\r\n    };\r\n    /* Dragging/Resizing Routing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n    AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n        var renderedHelper = false;\r\n        renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);\r\n        if (this.dayGrid) {\r\n            renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;\r\n        }\r\n        return renderedHelper;\r\n    };\r\n    AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n        this.timeGrid.renderEventResize(groups.timed, seg, isTouch);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);\r\n        }\r\n    };\r\n    /* Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of a selection\r\n    AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        if (!componentFootprint.isAllDay) {\r\n            this.timeGrid.renderSelectionFootprint(componentFootprint);\r\n        }\r\n        else if (this.dayGrid) {\r\n            this.dayGrid.renderSelectionFootprint(componentFootprint);\r\n        }\r\n    };\r\n    return AgendaView;\r\n}(View_1.default));\r\nexports.default = AgendaView;\r\nAgendaView.prototype.timeGridClass = TimeGrid_1.default;\r\nAgendaView.prototype.dayGridClass = DayGrid_1.default;\r\n// Will customize the rendering behavior of the AgendaView's timeGrid\r\nagendaTimeGridMethods = {\r\n    // Generates the HTML that will go before the day-of week header cells\r\n    renderHeadIntroHtml: function () {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);\r\n        var weekText;\r\n        if (this.opt('weekNumbers')) {\r\n            weekText = weekStart.format(this.opt('smallWeekFormat'));\r\n            return '' +\r\n                '<th class=\"fc-axis fc-week-number ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '>' +\r\n                view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n                { date: weekStart, type: 'week', forceOff: this.colCnt > 1 }, util_1.htmlEscape(weekText) // inner HTML\r\n                ) +\r\n                '</th>';\r\n        }\r\n        else {\r\n            return '<th class=\"fc-axis ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '></th>';\r\n        }\r\n    },\r\n    // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\r\n    renderBgIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '></td>';\r\n    },\r\n    // Generates the HTML that goes before all other types of cells.\r\n    // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n    renderIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\r\n    }\r\n};\r\n// Will customize the rendering behavior of the AgendaView's dayGrid\r\nagendaDayGridMethods = {\r\n    // Generates the HTML that goes before the all-day cells\r\n    renderBgIntroHtml: function () {\r\n        var view = this.view;\r\n        return '' +\r\n            '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' +\r\n            '<span>' + // needed for matchCellWidths\r\n            view.getAllDayHtml() +\r\n            '</span>' +\r\n            '</td>';\r\n    },\r\n    // Generates the HTML that goes before all other types of cells.\r\n    // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n    renderIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\r\n    }\r\n};\r\nfunction groupEventFootprintsByAllDay(eventFootprints) {\r\n    var allDay = [];\r\n    var timed = [];\r\n    var i;\r\n    for (i = 0; i < eventFootprints.length; i++) {\r\n        if (eventFootprints[i].componentFootprint.isAllDay) {\r\n            allDay.push(eventFootprints[i]);\r\n        }\r\n        else {\r\n            timed.push(eventFootprints[i]);\r\n        }\r\n    }\r\n    return { allDay: allDay, timed: timed };\r\n}\r\n\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\n/* A component that renders one or more columns of vertical time slots\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// We mixin DayTable, even though there is only a single row of days\r\n// potential nice values for the slot-duration and interval-duration\r\n// from largest to smallest\r\nvar AGENDA_STOCK_SUB_DURATIONS = [\r\n    { hours: 1 },\r\n    { minutes: 30 },\r\n    { minutes: 15 },\r\n    { seconds: 30 },\r\n    { seconds: 15 }\r\n];\r\nvar TimeGrid = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGrid, _super);\r\n    function TimeGrid(view) {\r\n        var _this = _super.call(this, view) || this;\r\n        _this.processOptions();\r\n        return _this;\r\n    }\r\n    // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n    TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);\r\n        var i;\r\n        for (i = 0; i < segs.length; i++) {\r\n            if (this.isRTL) {\r\n                segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\r\n            }\r\n            else {\r\n                segs[i].col = segs[i].dayIndex;\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Date Handling\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {\r\n        var segs = [];\r\n        var segRange;\r\n        var dayIndex;\r\n        for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\r\n            segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);\r\n            if (segRange) {\r\n                segs.push({\r\n                    startMs: segRange.startMs,\r\n                    endMs: segRange.endMs,\r\n                    isStart: segRange.isStart,\r\n                    isEnd: segRange.isEnd,\r\n                    dayIndex: dayIndex\r\n                });\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Options\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Parses various options into properties of this object\r\n    TimeGrid.prototype.processOptions = function () {\r\n        var slotDuration = this.opt('slotDuration');\r\n        var snapDuration = this.opt('snapDuration');\r\n        var input;\r\n        slotDuration = moment.duration(slotDuration);\r\n        snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\r\n        this.slotDuration = slotDuration;\r\n        this.snapDuration = snapDuration;\r\n        this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\r\n        // might be an array value (for TimelineView).\r\n        // if so, getting the most granular entry (the last one probably).\r\n        input = this.opt('slotLabelFormat');\r\n        if ($.isArray(input)) {\r\n            input = input[input.length - 1];\r\n        }\r\n        this.labelFormat = input ||\r\n            this.opt('smallTimeFormat'); // the computed default\r\n        input = this.opt('slotLabelInterval');\r\n        this.labelInterval = input ?\r\n            moment.duration(input) :\r\n            this.computeLabelInterval(slotDuration);\r\n    };\r\n    // Computes an automatic value for slotLabelInterval\r\n    TimeGrid.prototype.computeLabelInterval = function (slotDuration) {\r\n        var i;\r\n        var labelInterval;\r\n        var slotsPerLabel;\r\n        // find the smallest stock label interval that results in more than one slots-per-label\r\n        for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\r\n            labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\r\n            slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);\r\n            if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {\r\n                return labelInterval;\r\n            }\r\n        }\r\n        return moment.duration(slotDuration); // fall back. clone\r\n    };\r\n    /* Date Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.renderDates = function (dateProfile) {\r\n        this.dateProfile = dateProfile;\r\n        this.updateDayTable();\r\n        this.renderSlats();\r\n        this.renderColumns();\r\n    };\r\n    TimeGrid.prototype.unrenderDates = function () {\r\n        // this.unrenderSlats(); // don't need this because repeated .html() calls clear\r\n        this.unrenderColumns();\r\n    };\r\n    TimeGrid.prototype.renderSkeleton = function () {\r\n        var theme = this.view.calendar.theme;\r\n        this.el.html('<div class=\"fc-bg\"></div>' +\r\n            '<div class=\"fc-slats\"></div>' +\r\n            '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\" style=\"display:none\"></hr>');\r\n        this.bottomRuleEl = this.el.find('hr');\r\n    };\r\n    TimeGrid.prototype.renderSlats = function () {\r\n        var theme = this.view.calendar.theme;\r\n        this.slatContainerEl = this.el.find('> .fc-slats')\r\n            .html(// avoids needing ::unrenderSlats()\r\n        '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderSlatRowHtml() +\r\n            '</table>');\r\n        this.slatEls = this.slatContainerEl.find('tr');\r\n        this.slatCoordCache = new CoordCache_1.default({\r\n            els: this.slatEls,\r\n            isVertical: true\r\n        });\r\n    };\r\n    // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\r\n    TimeGrid.prototype.renderSlatRowHtml = function () {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var theme = calendar.theme;\r\n        var isRTL = this.isRTL;\r\n        var dateProfile = this.dateProfile;\r\n        var html = '';\r\n        var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations\r\n        var slotIterator = moment.duration(0);\r\n        var slotDate; // will be on the view's first day, but we only care about its time\r\n        var isLabeled;\r\n        var axisHtml;\r\n        // Calculate the time for each slot\r\n        while (slotTime < dateProfile.maxTime) {\r\n            slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);\r\n            isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));\r\n            axisHtml =\r\n                '<td class=\"fc-axis fc-time ' + theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' +\r\n                    (isLabeled ?\r\n                        '<span>' + // for matchCellWidths\r\n                            util_1.htmlEscape(slotDate.format(this.labelFormat)) +\r\n                            '</span>' :\r\n                        '') +\r\n                    '</td>';\r\n            html +=\r\n                '<tr data-time=\"' + slotDate.format('HH:mm:ss') + '\"' +\r\n                    (isLabeled ? '' : ' class=\"fc-minor\"') +\r\n                    '>' +\r\n                    (!isRTL ? axisHtml : '') +\r\n                    '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' +\r\n                    (isRTL ? axisHtml : '') +\r\n                    '</tr>';\r\n            slotTime.add(this.slotDuration);\r\n            slotIterator.add(this.slotDuration);\r\n        }\r\n        return html;\r\n    };\r\n    TimeGrid.prototype.renderColumns = function () {\r\n        var dateProfile = this.dateProfile;\r\n        var theme = this.view.calendar.theme;\r\n        this.dayRanges = this.dayDates.map(function (dayDate) {\r\n            return new UnzonedRange_1.default(dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));\r\n        });\r\n        if (this.headContainerEl) {\r\n            this.headContainerEl.html(this.renderHeadHtml());\r\n        }\r\n        this.el.find('> .fc-bg').html('<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderBgTrHtml(0) + // row=0\r\n            '</table>');\r\n        this.colEls = this.el.find('.fc-day, .fc-disabled-day');\r\n        this.colCoordCache = new CoordCache_1.default({\r\n            els: this.colEls,\r\n            isHorizontal: true\r\n        });\r\n        this.renderContentSkeleton();\r\n    };\r\n    TimeGrid.prototype.unrenderColumns = function () {\r\n        this.unrenderContentSkeleton();\r\n    };\r\n    /* Content Skeleton\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders the DOM that the view's content will live in\r\n    TimeGrid.prototype.renderContentSkeleton = function () {\r\n        var cellHtml = '';\r\n        var i;\r\n        var skeletonEl;\r\n        for (i = 0; i < this.colCnt; i++) {\r\n            cellHtml +=\r\n                '<td>' +\r\n                    '<div class=\"fc-content-col\">' +\r\n                    '<div class=\"fc-event-container fc-helper-container\"></div>' +\r\n                    '<div class=\"fc-event-container\"></div>' +\r\n                    '<div class=\"fc-highlight-container\"></div>' +\r\n                    '<div class=\"fc-bgevent-container\"></div>' +\r\n                    '<div class=\"fc-business-container\"></div>' +\r\n                    '</div>' +\r\n                    '</td>';\r\n        }\r\n        skeletonEl = this.contentSkeletonEl = $('<div class=\"fc-content-skeleton\">' +\r\n            '<table>' +\r\n            '<tr>' + cellHtml + '</tr>' +\r\n            '</table>' +\r\n            '</div>');\r\n        this.colContainerEls = skeletonEl.find('.fc-content-col');\r\n        this.helperContainerEls = skeletonEl.find('.fc-helper-container');\r\n        this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\r\n        this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\r\n        this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\r\n        this.businessContainerEls = skeletonEl.find('.fc-business-container');\r\n        this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\r\n        this.el.append(skeletonEl);\r\n    };\r\n    TimeGrid.prototype.unrenderContentSkeleton = function () {\r\n        if (this.contentSkeletonEl) { // defensive :(\r\n            this.contentSkeletonEl.remove();\r\n            this.contentSkeletonEl = null;\r\n            this.colContainerEls = null;\r\n            this.helperContainerEls = null;\r\n            this.fgContainerEls = null;\r\n            this.bgContainerEls = null;\r\n            this.highlightContainerEls = null;\r\n            this.businessContainerEls = null;\r\n        }\r\n    };\r\n    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\r\n    TimeGrid.prototype.groupSegsByCol = function (segs) {\r\n        var segsByCol = [];\r\n        var i;\r\n        for (i = 0; i < this.colCnt; i++) {\r\n            segsByCol.push([]);\r\n        }\r\n        for (i = 0; i < segs.length; i++) {\r\n            segsByCol[segs[i].col].push(segs[i]);\r\n        }\r\n        return segsByCol;\r\n    };\r\n    // Given segments grouped by column, insert the segments' elements into a parallel array of container\r\n    // elements, each living within a column.\r\n    TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {\r\n        var col;\r\n        var segs;\r\n        var i;\r\n        for (col = 0; col < this.colCnt; col++) { // iterate each column grouping\r\n            segs = segsByCol[col];\r\n            for (i = 0; i < segs.length; i++) {\r\n                containerEls.eq(col).append(segs[i].el);\r\n            }\r\n        }\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.getNowIndicatorUnit = function () {\r\n        return 'minute'; // will refresh on the minute\r\n    };\r\n    TimeGrid.prototype.renderNowIndicator = function (date) {\r\n        // HACK: if date columns not ready for some reason (scheduler)\r\n        if (!this.colContainerEls) {\r\n            return;\r\n        }\r\n        // seg system might be overkill, but it handles scenario where line needs to be rendered\r\n        //  more than once because of columns with the same date (resources columns for example)\r\n        var segs = this.componentFootprintToSegs(new ComponentFootprint_1.default(new UnzonedRange_1.default(date, date.valueOf() + 1), // protect against null range\r\n        false // all-day\r\n        ));\r\n        var top = this.computeDateTop(date, date);\r\n        var nodes = [];\r\n        var i;\r\n        // render lines within the columns\r\n        for (i = 0; i < segs.length; i++) {\r\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-line\"></div>')\r\n                .css('top', top)\r\n                .appendTo(this.colContainerEls.eq(segs[i].col))[0]);\r\n        }\r\n        // render an arrow over the axis\r\n        if (segs.length > 0) { // is the current time in view?\r\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-arrow\"></div>')\r\n                .css('top', top)\r\n                .appendTo(this.el.find('.fc-content-skeleton'))[0]);\r\n        }\r\n        this.nowIndicatorEls = $(nodes);\r\n    };\r\n    TimeGrid.prototype.unrenderNowIndicator = function () {\r\n        if (this.nowIndicatorEls) {\r\n            this.nowIndicatorEls.remove();\r\n            this.nowIndicatorEls = null;\r\n        }\r\n    };\r\n    /* Coordinates\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        this.slatCoordCache.build();\r\n        if (isResize) {\r\n            this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));\r\n        }\r\n    };\r\n    TimeGrid.prototype.getTotalSlatHeight = function () {\r\n        return this.slatContainerEl.outerHeight();\r\n    };\r\n    // Computes the top coordinate, relative to the bounds of the grid, of the given date.\r\n    // `ms` can be a millisecond UTC time OR a UTC moment.\r\n    // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\r\n    TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {\r\n        return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));\r\n    };\r\n    // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\r\n    TimeGrid.prototype.computeTimeTop = function (time) {\r\n        var len = this.slatEls.length;\r\n        var dateProfile = this.dateProfile;\r\n        var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered\r\n        var slatIndex;\r\n        var slatRemainder;\r\n        // compute a floating-point number for how many slats should be progressed through.\r\n        // from 0 to number of slats (inclusive)\r\n        // constrained because minTime/maxTime might be customized.\r\n        slatCoverage = Math.max(0, slatCoverage);\r\n        slatCoverage = Math.min(len, slatCoverage);\r\n        // an integer index of the furthest whole slat\r\n        // from 0 to number slats (*exclusive*, so len-1)\r\n        slatIndex = Math.floor(slatCoverage);\r\n        slatIndex = Math.min(slatIndex, len - 1);\r\n        // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\r\n        // could be 1.0 if slatCoverage is covering *all* the slots\r\n        slatRemainder = slatCoverage - slatIndex;\r\n        return this.slatCoordCache.getTopPosition(slatIndex) +\r\n            this.slatCoordCache.getHeight(slatIndex) * slatRemainder;\r\n    };\r\n    // Refreshes the CSS top/bottom coordinates for each segment element.\r\n    // Works when called after initial render, after a window resize/zoom for example.\r\n    TimeGrid.prototype.updateSegVerticals = function (segs) {\r\n        this.computeSegVerticals(segs);\r\n        this.assignSegVerticals(segs);\r\n    };\r\n    // For each segment in an array, computes and assigns its top and bottom properties\r\n    TimeGrid.prototype.computeSegVerticals = function (segs) {\r\n        var eventMinHeight = this.opt('agendaEventMinHeight');\r\n        var i;\r\n        var seg;\r\n        var dayDate;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            dayDate = this.dayDates[seg.dayIndex];\r\n            seg.top = this.computeDateTop(seg.startMs, dayDate);\r\n            seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));\r\n        }\r\n    };\r\n    // Given segments that already have their top/bottom properties computed, applies those values to\r\n    // the segments' elements.\r\n    TimeGrid.prototype.assignSegVerticals = function (segs) {\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            seg.el.css(this.generateSegVerticalCss(seg));\r\n        }\r\n    };\r\n    // Generates an object with CSS properties for the top/bottom coordinates of a segment element\r\n    TimeGrid.prototype.generateSegVerticalCss = function (seg) {\r\n        return {\r\n            top: seg.top,\r\n            bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\r\n        };\r\n    };\r\n    /* Hit System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.prepareHits = function () {\r\n        this.colCoordCache.build();\r\n        this.slatCoordCache.build();\r\n    };\r\n    TimeGrid.prototype.releaseHits = function () {\r\n        this.colCoordCache.clear();\r\n        // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\r\n    };\r\n    TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n        var snapsPerSlot = this.snapsPerSlot;\r\n        var colCoordCache = this.colCoordCache;\r\n        var slatCoordCache = this.slatCoordCache;\r\n        if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\r\n            var colIndex = colCoordCache.getHorizontalIndex(leftOffset);\r\n            var slatIndex = slatCoordCache.getVerticalIndex(topOffset);\r\n            if (colIndex != null && slatIndex != null) {\r\n                var slatTop = slatCoordCache.getTopOffset(slatIndex);\r\n                var slatHeight = slatCoordCache.getHeight(slatIndex);\r\n                var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\r\n                var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\r\n                var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\r\n                var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;\r\n                var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;\r\n                return {\r\n                    col: colIndex,\r\n                    snap: snapIndex,\r\n                    component: this,\r\n                    left: colCoordCache.getLeftOffset(colIndex),\r\n                    right: colCoordCache.getRightOffset(colIndex),\r\n                    top: snapTop,\r\n                    bottom: snapBottom\r\n                };\r\n            }\r\n        }\r\n    };\r\n    TimeGrid.prototype.getHitFootprint = function (hit) {\r\n        var start = this.getCellDate(0, hit.col); // row=0\r\n        var time = this.computeSnapTime(hit.snap); // pass in the snap-index\r\n        var end;\r\n        start.time(time);\r\n        end = start.clone().add(this.snapDuration);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), false // all-day?\r\n        );\r\n    };\r\n    // Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\r\n    TimeGrid.prototype.computeSnapTime = function (snapIndex) {\r\n        return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);\r\n    };\r\n    TimeGrid.prototype.getHitEl = function (hit) {\r\n        return this.colEls.eq(hit.col);\r\n    };\r\n    /* Event Drag Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being dragged over the specified date(s).\r\n    // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n    TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        if (seg) { // if there is event information for this drag, render a helper event\r\n            if (eventFootprints.length) {\r\n                this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n                // signal that a helper has been rendered\r\n                return true;\r\n            }\r\n        }\r\n        else { // otherwise, just render a highlight\r\n            for (i = 0; i < eventFootprints.length; i++) {\r\n                this.renderHighlight(eventFootprints[i].componentFootprint);\r\n            }\r\n        }\r\n    };\r\n    // Unrenders any visual indication of an event being dragged\r\n    TimeGrid.prototype.unrenderDrag = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Event Resize Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being resized\r\n    TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n    };\r\n    // Unrenders any visual indication of an event being resized\r\n    TimeGrid.prototype.unrenderEventResize = function () {\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\r\n    TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\r\n            this.helperRenderer.renderComponentFootprint(componentFootprint);\r\n        }\r\n        else {\r\n            this.renderHighlight(componentFootprint);\r\n        }\r\n    };\r\n    // Unrenders any visual indication of a selection\r\n    TimeGrid.prototype.unrenderSelection = function () {\r\n        this.helperRenderer.unrender();\r\n        this.unrenderHighlight();\r\n    };\r\n    return TimeGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = TimeGrid;\r\nTimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1.default;\r\nTimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nTimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1.default;\r\nTimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(TimeGrid);\r\nDayTableMixin_1.default.mixInto(TimeGrid);\r\n\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/*\r\nOnly handles foreground segs.\r\nDoes not own rendering. Use for low-level util methods by TimeGrid.\r\n*/\r\nvar TimeGridEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridEventRenderer, _super);\r\n    function TimeGridEventRenderer(timeGrid, fillRenderer) {\r\n        var _this = _super.call(this, timeGrid, fillRenderer) || this;\r\n        _this.timeGrid = timeGrid;\r\n        return _this;\r\n    }\r\n    TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);\r\n    };\r\n    // Given an array of foreground segments, render a DOM element for each, computes position,\r\n    // and attaches to the column inner-container elements.\r\n    TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {\r\n        var segsByCol;\r\n        var col;\r\n        segsByCol = this.timeGrid.groupSegsByCol(segs);\r\n        for (col = 0; col < this.timeGrid.colCnt; col++) {\r\n            this.updateFgSegCoords(segsByCol[col]);\r\n        }\r\n        this.timeGrid.attachSegsByCol(segsByCol, containerEls);\r\n    };\r\n    TimeGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n        if (this.fgSegs) { // hack\r\n            this.fgSegs.forEach(function (seg) {\r\n                seg.el.remove();\r\n            });\r\n        }\r\n    };\r\n    // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n    TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\r\n    };\r\n    // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n    TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return true;\r\n    };\r\n    // Renders the HTML for a single event segment's default rendering\r\n    TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var componentFootprint = seg.footprint.componentFootprint;\r\n        var isAllDay = componentFootprint.isAllDay;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var isDraggable = view.isEventDefDraggable(eventDef);\r\n        var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n        var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n        var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n        var timeText;\r\n        var fullTimeText; // more verbose time text. for the print stylesheet\r\n        var startTimeText; // just the start time text\r\n        classes.unshift('fc-time-grid-event', 'fc-v-event');\r\n        // if the event appears to span more than one day...\r\n        if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n            // Don't display time text on segments that run entirely through a day.\r\n            // That would appear as midnight-midnight and would look dumb.\r\n            // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\r\n            if (seg.isStart || seg.isEnd) {\r\n                var zonedStart = calendar.msToMoment(seg.startMs);\r\n                var zonedEnd = calendar.msToMoment(seg.endMs);\r\n                timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);\r\n                fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');\r\n                startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false\r\n            }\r\n        }\r\n        else {\r\n            // Display the normal time text for the *event's* times\r\n            timeText = this.getTimeText(seg.footprint);\r\n            fullTimeText = this.getTimeText(seg.footprint, 'LT');\r\n            startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false\r\n        }\r\n        return '<a class=\"' + classes.join(' ') + '\"' +\r\n            (eventDef.url ?\r\n                ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' :\r\n                '') +\r\n            (skinCss ?\r\n                ' style=\"' + skinCss + '\"' :\r\n                '') +\r\n            '>' +\r\n            '<div class=\"fc-content\">' +\r\n            (timeText ?\r\n                '<div class=\"fc-time\"' +\r\n                    ' data-start=\"' + util_1.htmlEscape(startTimeText) + '\"' +\r\n                    ' data-full=\"' + util_1.htmlEscape(fullTimeText) + '\"' +\r\n                    '>' +\r\n                    '<span>' + util_1.htmlEscape(timeText) + '</span>' +\r\n                    '</div>' :\r\n                '') +\r\n            (eventDef.title ?\r\n                '<div class=\"fc-title\">' +\r\n                    util_1.htmlEscape(eventDef.title) +\r\n                    '</div>' :\r\n                '') +\r\n            '</div>' +\r\n            '<div class=\"fc-bg\"></div>' +\r\n            /* TODO: write CSS for this\r\n            (isResizableFromStart ?\r\n              '<div class=\"fc-resizer fc-start-resizer\"></div>' :\r\n              ''\r\n              ) +\r\n            */\r\n            (isResizableFromEnd ?\r\n                '<div class=\"fc-resizer fc-end-resizer\"></div>' :\r\n                '') +\r\n            '</a>';\r\n    };\r\n    // Given segments that are assumed to all live in the *same column*,\r\n    // compute their verical/horizontal coordinates and assign to their elements.\r\n    TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {\r\n        this.timeGrid.computeSegVerticals(segs); // horizontals relies on this\r\n        this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\r\n        this.timeGrid.assignSegVerticals(segs);\r\n        this.assignFgSegHorizontals(segs);\r\n    };\r\n    // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\r\n    // NOTE: Also reorders the given array by date!\r\n    TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {\r\n        var levels;\r\n        var level0;\r\n        var i;\r\n        this.sortEventSegs(segs); // order by certain criteria\r\n        levels = buildSlotSegLevels(segs);\r\n        computeForwardSlotSegs(levels);\r\n        if ((level0 = levels[0])) {\r\n            for (i = 0; i < level0.length; i++) {\r\n                computeSlotSegPressures(level0[i]);\r\n            }\r\n            for (i = 0; i < level0.length; i++) {\r\n                this.computeFgSegForwardBack(level0[i], 0, 0);\r\n            }\r\n        }\r\n    };\r\n    // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\r\n    // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\r\n    // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\r\n    //\r\n    // The segment might be part of a \"series\", which means consecutive segments with the same pressure\r\n    // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\r\n    // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\r\n    // coordinate of the first segment in the series.\r\n    TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {\r\n        var forwardSegs = seg.forwardSegs;\r\n        var i;\r\n        if (seg.forwardCoord === undefined) { // not already computed\r\n            if (!forwardSegs.length) {\r\n                // if there are no forward segments, this segment should butt up against the edge\r\n                seg.forwardCoord = 1;\r\n            }\r\n            else {\r\n                // sort highest pressure first\r\n                this.sortForwardSegs(forwardSegs);\r\n                // this segment's forwardCoord will be calculated from the backwardCoord of the\r\n                // highest-pressure forward segment.\r\n                this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\r\n                seg.forwardCoord = forwardSegs[0].backwardCoord;\r\n            }\r\n            // calculate the backwardCoord from the forwardCoord. consider the series\r\n            seg.backwardCoord = seg.forwardCoord -\r\n                (seg.forwardCoord - seriesBackwardCoord) / // available width for series\r\n                    (seriesBackwardPressure + 1); // # of segments in the series\r\n            // use this segment's coordinates to computed the coordinates of the less-pressurized\r\n            // forward segments\r\n            for (i = 0; i < forwardSegs.length; i++) {\r\n                this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\r\n            }\r\n        }\r\n    };\r\n    TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {\r\n        forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));\r\n    };\r\n    // A cmp function for determining which forward segment to rely on more when computing coordinates.\r\n    TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {\r\n        // put higher-pressure first\r\n        return seg2.forwardPressure - seg1.forwardPressure ||\r\n            // put segments that are closer to initial edge first (and favor ones with no coords yet)\r\n            (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||\r\n            // do normal sorting...\r\n            this.compareEventSegs(seg1, seg2);\r\n    };\r\n    // Given foreground event segments that have already had their position coordinates computed,\r\n    // assigns position-related CSS values to their elements.\r\n    TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            seg.el.css(this.generateFgSegHorizontalCss(seg));\r\n            // if the event is short that the title will be cut off,\r\n            // attach a className that condenses the title into the time area.\r\n            if (seg.footprint.eventDef.title && seg.bottom - seg.top < 30) {\r\n                seg.el.addClass('fc-short'); // TODO: \"condensed\" is a better name\r\n            }\r\n        }\r\n    };\r\n    // Generates an object with CSS properties/values that should be applied to an event segment element.\r\n    // Contains important positioning-related properties that should be applied to any event element, customized or not.\r\n    TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {\r\n        var shouldOverlap = this.opt('slotEventOverlap');\r\n        var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\r\n        var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\r\n        var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first\r\n        var isRTL = this.timeGrid.isRTL;\r\n        var left; // amount of space from left edge, a fraction of the total width\r\n        var right; // amount of space from right edge, a fraction of the total width\r\n        if (shouldOverlap) {\r\n            // double the width, but don't go beyond the maximum forward coordinate (1.0)\r\n            forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\r\n        }\r\n        if (isRTL) {\r\n            left = 1 - forwardCoord;\r\n            right = backwardCoord;\r\n        }\r\n        else {\r\n            left = backwardCoord;\r\n            right = 1 - forwardCoord;\r\n        }\r\n        props.zIndex = seg.level + 1; // convert from 0-base to 1-based\r\n        props.left = left * 100 + '%';\r\n        props.right = right * 100 + '%';\r\n        if (shouldOverlap && seg.forwardPressure) {\r\n            // add padding to the edge so that forward stacked events don't cover the resizer's icon\r\n            props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\r\n        }\r\n        return props;\r\n    };\r\n    return TimeGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = TimeGridEventRenderer;\r\n// Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\r\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\r\nfunction buildSlotSegLevels(segs) {\r\n    var levels = [];\r\n    var i;\r\n    var seg;\r\n    var j;\r\n    for (i = 0; i < segs.length; i++) {\r\n        seg = segs[i];\r\n        // go through all the levels and stop on the first level where there are no collisions\r\n        for (j = 0; j < levels.length; j++) {\r\n            if (!computeSlotSegCollisions(seg, levels[j]).length) {\r\n                break;\r\n            }\r\n        }\r\n        seg.level = j;\r\n        (levels[j] || (levels[j] = [])).push(seg);\r\n    }\r\n    return levels;\r\n}\r\n// For every segment, figure out the other segments that are in subsequent\r\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\r\nfunction computeForwardSlotSegs(levels) {\r\n    var i;\r\n    var level;\r\n    var j;\r\n    var seg;\r\n    var k;\r\n    for (i = 0; i < levels.length; i++) {\r\n        level = levels[i];\r\n        for (j = 0; j < level.length; j++) {\r\n            seg = level[j];\r\n            seg.forwardSegs = [];\r\n            for (k = i + 1; k < levels.length; k++) {\r\n                computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\r\n            }\r\n        }\r\n    }\r\n}\r\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\r\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\r\nfunction computeSlotSegPressures(seg) {\r\n    var forwardSegs = seg.forwardSegs;\r\n    var forwardPressure = 0;\r\n    var i;\r\n    var forwardSeg;\r\n    if (seg.forwardPressure === undefined) { // not already computed\r\n        for (i = 0; i < forwardSegs.length; i++) {\r\n            forwardSeg = forwardSegs[i];\r\n            // figure out the child's maximum forward path\r\n            computeSlotSegPressures(forwardSeg);\r\n            // either use the existing maximum, or use the child's forward pressure\r\n            // plus one (for the forwardSeg itself)\r\n            forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);\r\n        }\r\n        seg.forwardPressure = forwardPressure;\r\n    }\r\n}\r\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\r\n// Append into an optionally-supplied `results` array and return.\r\nfunction computeSlotSegCollisions(seg, otherSegs, results) {\r\n    if (results === void 0) { results = []; }\r\n    for (var i = 0; i < otherSegs.length; i++) {\r\n        if (isSlotSegCollision(seg, otherSegs[i])) {\r\n            results.push(otherSegs[i]);\r\n        }\r\n    }\r\n    return results;\r\n}\r\n// Do these segments occupy the same vertical space?\r\nfunction isSlotSegCollision(seg1, seg2) {\r\n    return seg1.bottom > seg2.top && seg1.top < seg2.bottom;\r\n}\r\n\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar TimeGridHelperRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridHelperRenderer, _super);\r\n    function TimeGridHelperRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        var helperNodes = [];\r\n        var i;\r\n        var seg;\r\n        var sourceEl;\r\n        // TODO: not good to call eventRenderer this way\r\n        this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls);\r\n        // Try to make the segment that is in the same row as sourceSeg look the same\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (sourceSeg && sourceSeg.col === seg.col) {\r\n                sourceEl = sourceSeg.el;\r\n                seg.el.css({\r\n                    left: sourceEl.css('left'),\r\n                    right: sourceEl.css('right'),\r\n                    'margin-left': sourceEl.css('margin-left'),\r\n                    'margin-right': sourceEl.css('margin-right')\r\n                });\r\n            }\r\n            helperNodes.push(seg.el[0]);\r\n        }\r\n        return $(helperNodes); // must return the elements rendered\r\n    };\r\n    return TimeGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = TimeGridHelperRenderer;\r\n\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar TimeGridFillRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridFillRenderer, _super);\r\n    function TimeGridFillRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        var timeGrid = this.component;\r\n        var containerEls;\r\n        // TODO: more efficient lookup\r\n        if (type === 'bgEvent') {\r\n            containerEls = timeGrid.bgContainerEls;\r\n        }\r\n        else if (type === 'businessHours') {\r\n            containerEls = timeGrid.businessContainerEls;\r\n        }\r\n        else if (type === 'highlight') {\r\n            containerEls = timeGrid.highlightContainerEls;\r\n        }\r\n        timeGrid.updateSegVerticals(segs);\r\n        timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);\r\n        return segs.map(function (seg) {\r\n            return seg.el[0];\r\n        });\r\n    };\r\n    return TimeGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = TimeGridFillRenderer;\r\n\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/* Event-rendering methods for the DayGrid class\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGridEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridEventRenderer, _super);\r\n    function DayGridEventRenderer(dayGrid, fillRenderer) {\r\n        var _this = _super.call(this, dayGrid, fillRenderer) || this;\r\n        _this.dayGrid = dayGrid;\r\n        return _this;\r\n    }\r\n    DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n        // don't render timed background events\r\n        eventRanges = $.grep(eventRanges, function (eventRange) {\r\n            return eventRange.eventDef.isAllDay();\r\n        });\r\n        _super.prototype.renderBgRanges.call(this, eventRanges);\r\n    };\r\n    // Renders the given foreground event segments onto the grid\r\n    DayGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        var rowStructs = this.rowStructs = this.renderSegRows(segs);\r\n        // append to each row's content skeleton\r\n        this.dayGrid.rowEls.each(function (i, rowNode) {\r\n            $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);\r\n        });\r\n    };\r\n    // Unrenders all currently rendered foreground event segments\r\n    DayGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n        var rowStructs = this.rowStructs || [];\r\n        var rowStruct;\r\n        while ((rowStruct = rowStructs.pop())) {\r\n            rowStruct.tbodyEl.remove();\r\n        }\r\n        this.rowStructs = null;\r\n    };\r\n    // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.\r\n    // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\r\n    // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\r\n    DayGridEventRenderer.prototype.renderSegRows = function (segs) {\r\n        var rowStructs = [];\r\n        var segRows;\r\n        var row;\r\n        segRows = this.groupSegRows(segs); // group into nested arrays\r\n        // iterate each row of segment groupings\r\n        for (row = 0; row < segRows.length; row++) {\r\n            rowStructs.push(this.renderSegRow(row, segRows[row]));\r\n        }\r\n        return rowStructs;\r\n    };\r\n    // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains\r\n    // the segments. Returns object with a bunch of internal data about how the render was calculated.\r\n    // NOTE: modifies rowSegs\r\n    DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\r\n        var colCnt = this.dayGrid.colCnt;\r\n        var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\r\n        var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\r\n        var tbody = $('<tbody>');\r\n        var segMatrix = []; // lookup for which segments are rendered into which level+col cells\r\n        var cellMatrix = []; // lookup for all <td> elements of the level+col matrix\r\n        var loneCellMatrix = []; // lookup for <td> elements that only take up a single column\r\n        var i;\r\n        var levelSegs;\r\n        var col;\r\n        var tr;\r\n        var j;\r\n        var seg;\r\n        var td;\r\n        // populates empty cells from the current column (`col`) to `endCol`\r\n        function emptyCellsUntil(endCol) {\r\n            while (col < endCol) {\r\n                // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\r\n                td = (loneCellMatrix[i - 1] || [])[col];\r\n                if (td) {\r\n                    td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);\r\n                }\r\n                else {\r\n                    td = $('<td>');\r\n                    tr.append(td);\r\n                }\r\n                cellMatrix[i][col] = td;\r\n                loneCellMatrix[i][col] = td;\r\n                col++;\r\n            }\r\n        }\r\n        for (i = 0; i < levelCnt; i++) { // iterate through all levels\r\n            levelSegs = segLevels[i];\r\n            col = 0;\r\n            tr = $('<tr>');\r\n            segMatrix.push([]);\r\n            cellMatrix.push([]);\r\n            loneCellMatrix.push([]);\r\n            // levelCnt might be 1 even though there are no actual levels. protect against this.\r\n            // this single empty row is useful for styling.\r\n            if (levelSegs) {\r\n                for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\r\n                    seg = levelSegs[j];\r\n                    emptyCellsUntil(seg.leftCol);\r\n                    // create a container that occupies or more columns. append the event element.\r\n                    td = $('<td class=\"fc-event-container\">').append(seg.el);\r\n                    if (seg.leftCol !== seg.rightCol) {\r\n                        td.attr('colspan', seg.rightCol - seg.leftCol + 1);\r\n                    }\r\n                    else { // a single-column segment\r\n                        loneCellMatrix[i][col] = td;\r\n                    }\r\n                    while (col <= seg.rightCol) {\r\n                        cellMatrix[i][col] = td;\r\n                        segMatrix[i][col] = seg;\r\n                        col++;\r\n                    }\r\n                    tr.append(td);\r\n                }\r\n            }\r\n            emptyCellsUntil(colCnt); // finish off the row\r\n            this.dayGrid.bookendCells(tr);\r\n            tbody.append(tr);\r\n        }\r\n        return {\r\n            row: row,\r\n            tbodyEl: tbody,\r\n            cellMatrix: cellMatrix,\r\n            segMatrix: segMatrix,\r\n            segLevels: segLevels,\r\n            segs: rowSegs\r\n        };\r\n    };\r\n    // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\r\n    // NOTE: modifies segs\r\n    DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\r\n        var levels = [];\r\n        var i;\r\n        var seg;\r\n        var j;\r\n        // Give preference to elements with certain criteria, so they have\r\n        // a chance to be closer to the top.\r\n        this.sortEventSegs(segs);\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\r\n            for (j = 0; j < levels.length; j++) {\r\n                if (!isDaySegCollision(seg, levels[j])) {\r\n                    break;\r\n                }\r\n            }\r\n            // `j` now holds the desired subrow index\r\n            seg.level = j;\r\n            // create new level array if needed and append segment\r\n            (levels[j] || (levels[j] = [])).push(seg);\r\n        }\r\n        // order segments left-to-right. very important if calendar is RTL\r\n        for (j = 0; j < levels.length; j++) {\r\n            levels[j].sort(compareDaySegCols);\r\n        }\r\n        return levels;\r\n    };\r\n    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\r\n    DayGridEventRenderer.prototype.groupSegRows = function (segs) {\r\n        var segRows = [];\r\n        var i;\r\n        for (i = 0; i < this.dayGrid.rowCnt; i++) {\r\n            segRows.push([]);\r\n        }\r\n        for (i = 0; i < segs.length; i++) {\r\n            segRows[segs[i].row].push(segs[i]);\r\n        }\r\n        return segRows;\r\n    };\r\n    // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n    DayGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\r\n    };\r\n    // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n    DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\r\n    };\r\n    // Builds the HTML to be used for the default element for an individual segment\r\n    DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        var view = this.view;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var isAllDay = seg.footprint.componentFootprint.isAllDay;\r\n        var isDraggable = view.isEventDefDraggable(eventDef);\r\n        var isResizableFromStart = !disableResizing && isAllDay &&\r\n            seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n        var isResizableFromEnd = !disableResizing && isAllDay &&\r\n            seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n        var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n        var timeHtml = '';\r\n        var timeText;\r\n        var titleHtml;\r\n        classes.unshift('fc-day-grid-event', 'fc-h-event');\r\n        // Only display a timed events time if it is the starting segment\r\n        if (seg.isStart) {\r\n            timeText = this.getTimeText(seg.footprint);\r\n            if (timeText) {\r\n                timeHtml = '<span class=\"fc-time\">' + util_1.htmlEscape(timeText) + '</span>';\r\n            }\r\n        }\r\n        titleHtml =\r\n            '<span class=\"fc-title\">' +\r\n                (util_1.htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height\r\n                '</span>';\r\n        return '<a class=\"' + classes.join(' ') + '\"' +\r\n            (eventDef.url ?\r\n                ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' :\r\n                '') +\r\n            (skinCss ?\r\n                ' style=\"' + skinCss + '\"' :\r\n                '') +\r\n            '>' +\r\n            '<div class=\"fc-content\">' +\r\n            (this.dayGrid.isRTL ?\r\n                titleHtml + ' ' + timeHtml : // put a natural space in between\r\n                timeHtml + ' ' + titleHtml //\r\n            ) +\r\n            '</div>' +\r\n            (isResizableFromStart ?\r\n                '<div class=\"fc-resizer fc-start-resizer\"></div>' :\r\n                '') +\r\n            (isResizableFromEnd ?\r\n                '<div class=\"fc-resizer fc-end-resizer\"></div>' :\r\n                '') +\r\n            '</a>';\r\n    };\r\n    return DayGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = DayGridEventRenderer;\r\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\r\nfunction isDaySegCollision(seg, otherSegs) {\r\n    var i;\r\n    var otherSeg;\r\n    for (i = 0; i < otherSegs.length; i++) {\r\n        otherSeg = otherSegs[i];\r\n        if (otherSeg.leftCol <= seg.rightCol &&\r\n            otherSeg.rightCol >= seg.leftCol) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n// A cmp function for determining the leftmost event\r\nfunction compareDaySegCols(a, b) {\r\n    return a.leftCol - b.leftCol;\r\n}\r\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar DayGridHelperRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridHelperRenderer, _super);\r\n    function DayGridHelperRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\r\n    DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        var helperNodes = [];\r\n        var rowStructs;\r\n        // TODO: not good to call eventRenderer this way\r\n        rowStructs = this.eventRenderer.renderSegRows(segs);\r\n        // inject each new event skeleton into each associated row\r\n        this.component.rowEls.each(function (row, rowNode) {\r\n            var rowEl = $(rowNode); // the .fc-row\r\n            var skeletonEl = $('<div class=\"fc-helper-skeleton\"><table></table></div>'); // will be absolutely positioned\r\n            var skeletonTopEl;\r\n            var skeletonTop;\r\n            // If there is an original segment, match the top position. Otherwise, put it at the row's top level\r\n            if (sourceSeg && sourceSeg.row === row) {\r\n                skeletonTop = sourceSeg.el.position().top;\r\n            }\r\n            else {\r\n                skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');\r\n                if (!skeletonTopEl.length) { // when no events\r\n                    skeletonTopEl = rowEl.find('.fc-content-skeleton table');\r\n                }\r\n                skeletonTop = skeletonTopEl.position().top;\r\n            }\r\n            skeletonEl.css('top', skeletonTop)\r\n                .find('table')\r\n                .append(rowStructs[row].tbodyEl);\r\n            rowEl.append(skeletonEl);\r\n            helperNodes.push(skeletonEl[0]);\r\n        });\r\n        return $(helperNodes); // must return the elements rendered\r\n    };\r\n    return DayGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = DayGridHelperRenderer;\r\n\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar DayGridFillRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridFillRenderer, _super);\r\n    function DayGridFillRenderer() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.fillSegTag = 'td'; // override the default tag name\r\n        return _this;\r\n    }\r\n    DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        var nodes = [];\r\n        var i;\r\n        var seg;\r\n        var skeletonEl;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            skeletonEl = this.renderFillRow(type, seg);\r\n            this.component.rowEls.eq(seg.row).append(skeletonEl);\r\n            nodes.push(skeletonEl[0]);\r\n        }\r\n        return nodes;\r\n    };\r\n    // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\r\n    DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\r\n        var colCnt = this.component.colCnt;\r\n        var startCol = seg.leftCol;\r\n        var endCol = seg.rightCol + 1;\r\n        var className;\r\n        var skeletonEl;\r\n        var trEl;\r\n        if (type === 'businessHours') {\r\n            className = 'bgevent';\r\n        }\r\n        else {\r\n            className = type.toLowerCase();\r\n        }\r\n        skeletonEl = $('<div class=\"fc-' + className + '-skeleton\">' +\r\n            '<table><tr></tr></table>' +\r\n            '</div>');\r\n        trEl = skeletonEl.find('tr');\r\n        if (startCol > 0) {\r\n            trEl.append(\r\n            // will create (startCol + 1) td's\r\n            new Array(startCol + 1).join('<td></td>'));\r\n        }\r\n        trEl.append(seg.el.attr('colspan', endCol - startCol));\r\n        if (endCol < colCnt) {\r\n            trEl.append(\r\n            // will create (colCnt - endCol) td's\r\n            new Array(colCnt - endCol + 1).join('<td></td>'));\r\n        }\r\n        this.component.bookendCells(trEl);\r\n        return skeletonEl;\r\n    };\r\n    return DayGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = DayGridFillRenderer;\r\n\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\n/* A month view with day cells running in rows (one-per-week) and columns\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MonthView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MonthView, _super);\r\n    function MonthView() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Overrides the default BasicView behavior to have special multi-week auto-height logic\r\n    MonthView.prototype.setGridHeight = function (height, isAuto) {\r\n        // if auto, make the height of each row the height that it would be if there were 6 weeks\r\n        if (isAuto) {\r\n            height *= this.dayGrid.rowCnt / 6;\r\n        }\r\n        util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\r\n    };\r\n    MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n        return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize\r\n    };\r\n    return MonthView;\r\n}(BasicView_1.default));\r\nexports.default = MonthView;\r\nMonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1.default;\r\n\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar MonthViewDateProfileGenerator = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MonthViewDateProfileGenerator, _super);\r\n    function MonthViewDateProfileGenerator() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Computes the date range that will be rendered.\r\n    MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);\r\n        var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n        var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n        var rowCnt;\r\n        // ensure 6 weeks\r\n        if (this.opt('fixedWeekCount')) {\r\n            rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\r\n            end.diff(start, 'weeks', true) // dontRound=true\r\n            );\r\n            end.add(6 - rowCnt, 'weeks');\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    return MonthViewDateProfileGenerator;\r\n}(BasicViewDateProfileGenerator_1.default));\r\nexports.default = MonthViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar View_1 = __webpack_require__(43);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\n/*\r\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\r\n*/\r\nvar ListView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListView, _super);\r\n    function ListView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.segSelector = '.fc-list-item'; // which elements accept event actions\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    ListView.prototype.renderSkeleton = function () {\r\n        this.el.addClass('fc-list-view ' +\r\n            this.calendar.theme.getClass('listView'));\r\n        this.scroller.render();\r\n        this.scroller.el.appendTo(this.el);\r\n        this.contentEl = this.scroller.scrollEl; // shortcut\r\n    };\r\n    ListView.prototype.unrenderSkeleton = function () {\r\n        this.scroller.destroy(); // will remove the Grid too\r\n    };\r\n    ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n        if (!isAuto) {\r\n            this.scroller.setHeight(this.computeScrollerHeight(totalHeight));\r\n        }\r\n    };\r\n    ListView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    ListView.prototype.renderDates = function (dateProfile) {\r\n        var calendar = this.calendar;\r\n        var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);\r\n        var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);\r\n        var dayDates = [];\r\n        var dayRanges = [];\r\n        while (dayStart < viewEnd) {\r\n            dayDates.push(dayStart.clone());\r\n            dayRanges.push(new UnzonedRange_1.default(dayStart, dayStart.clone().add(1, 'day')));\r\n            dayStart.add(1, 'day');\r\n        }\r\n        this.dayDates = dayDates;\r\n        this.dayRanges = dayRanges;\r\n        // all real rendering happens in EventRenderer\r\n    };\r\n    // slices by day\r\n    ListView.prototype.componentFootprintToSegs = function (footprint) {\r\n        var dayRanges = this.dayRanges;\r\n        var dayIndex;\r\n        var segRange;\r\n        var seg;\r\n        var segs = [];\r\n        for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\r\n            segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);\r\n            if (segRange) {\r\n                seg = {\r\n                    startMs: segRange.startMs,\r\n                    endMs: segRange.endMs,\r\n                    isStart: segRange.isStart,\r\n                    isEnd: segRange.isEnd,\r\n                    dayIndex: dayIndex\r\n                };\r\n                segs.push(seg);\r\n                // detect when footprint won't go fully into the next day,\r\n                // and mutate the latest seg to the be the end.\r\n                if (!seg.isEnd && !footprint.isAllDay &&\r\n                    dayIndex + 1 < dayRanges.length &&\r\n                    footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {\r\n                    seg.endMs = footprint.unzonedRange.endMs;\r\n                    seg.isEnd = true;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    ListView.prototype.renderEmptyMessage = function () {\r\n        this.contentEl.html('<div class=\"fc-list-empty-wrap2\">' + // TODO: try less wraps\r\n            '<div class=\"fc-list-empty-wrap1\">' +\r\n            '<div class=\"fc-list-empty\">' +\r\n            util_1.htmlEscape(this.opt('noEventsMessage')) +\r\n            '</div>' +\r\n            '</div>' +\r\n            '</div>');\r\n    };\r\n    // render the event segments in the view\r\n    ListView.prototype.renderSegList = function (allSegs) {\r\n        var segsByDay = this.groupSegsByDay(allSegs); // sparse array\r\n        var dayIndex;\r\n        var daySegs;\r\n        var i;\r\n        var tableEl = $('<table class=\"fc-list-table ' + this.calendar.theme.getClass('tableList') + '\"><tbody></tbody></table>');\r\n        var tbodyEl = tableEl.find('tbody');\r\n        for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\r\n            daySegs = segsByDay[dayIndex];\r\n            if (daySegs) { // sparse array, so might be undefined\r\n                // append a day header\r\n                tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));\r\n                this.eventRenderer.sortEventSegs(daySegs);\r\n                for (i = 0; i < daySegs.length; i++) {\r\n                    tbodyEl.append(daySegs[i].el); // append event row\r\n                }\r\n            }\r\n        }\r\n        this.contentEl.empty().append(tableEl);\r\n    };\r\n    // Returns a sparse array of arrays, segs grouped by their dayIndex\r\n    ListView.prototype.groupSegsByDay = function (segs) {\r\n        var segsByDay = []; // sparse array\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\r\n                .push(seg);\r\n        }\r\n        return segsByDay;\r\n    };\r\n    // generates the HTML for the day headers that live amongst the event rows\r\n    ListView.prototype.dayHeaderHtml = function (dayDate) {\r\n        var mainFormat = this.opt('listDayFormat');\r\n        var altFormat = this.opt('listDayAltFormat');\r\n        return '<tr class=\"fc-list-heading\" data-date=\"' + dayDate.format('YYYY-MM-DD') + '\">' +\r\n            '<td class=\"' + (this.calendar.theme.getClass('tableListHeading') ||\r\n            this.calendar.theme.getClass('widgetHeader')) + '\" colspan=\"3\">' +\r\n            (mainFormat ?\r\n                this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-main' }, util_1.htmlEscape(dayDate.format(mainFormat)) // inner HTML\r\n                ) :\r\n                '') +\r\n            (altFormat ?\r\n                this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-alt' }, util_1.htmlEscape(dayDate.format(altFormat)) // inner HTML\r\n                ) :\r\n                '') +\r\n            '</td>' +\r\n            '</tr>';\r\n    };\r\n    return ListView;\r\n}(View_1.default));\r\nexports.default = ListView;\r\nListView.prototype.eventRendererClass = ListEventRenderer_1.default;\r\nListView.prototype.eventPointingClass = ListEventPointing_1.default;\r\n\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nvar ListEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListEventRenderer, _super);\r\n    function ListEventRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ListEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        if (!segs.length) {\r\n            this.component.renderEmptyMessage();\r\n        }\r\n        else {\r\n            this.component.renderSegList(segs);\r\n        }\r\n    };\r\n    // generates the HTML for a single event row\r\n    ListEventRenderer.prototype.fgSegHtml = function (seg) {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var theme = calendar.theme;\r\n        var eventFootprint = seg.footprint;\r\n        var eventDef = eventFootprint.eventDef;\r\n        var componentFootprint = eventFootprint.componentFootprint;\r\n        var url = eventDef.url;\r\n        var classes = ['fc-list-item'].concat(this.getClasses(eventDef));\r\n        var bgColor = this.getBgColor(eventDef);\r\n        var timeHtml;\r\n        if (componentFootprint.isAllDay) {\r\n            timeHtml = view.getAllDayHtml();\r\n        }\r\n        else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n            if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day\r\n                timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));\r\n            }\r\n            else { // inner segment that lasts the whole day\r\n                timeHtml = view.getAllDayHtml();\r\n            }\r\n        }\r\n        else {\r\n            // Display the normal time text for the *event's* times\r\n            timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));\r\n        }\r\n        if (url) {\r\n            classes.push('fc-has-url');\r\n        }\r\n        return '<tr class=\"' + classes.join(' ') + '\">' +\r\n            (this.displayEventTime ?\r\n                '<td class=\"fc-list-item-time ' + theme.getClass('widgetContent') + '\">' +\r\n                    (timeHtml || '') +\r\n                    '</td>' :\r\n                '') +\r\n            '<td class=\"fc-list-item-marker ' + theme.getClass('widgetContent') + '\">' +\r\n            '<span class=\"fc-event-dot\"' +\r\n            (bgColor ?\r\n                ' style=\"background-color:' + bgColor + '\"' :\r\n                '') +\r\n            '></span>' +\r\n            '</td>' +\r\n            '<td class=\"fc-list-item-title ' + theme.getClass('widgetContent') + '\">' +\r\n            '<a' + (url ? ' href=\"' + util_1.htmlEscape(url) + '\"' : '') + '>' +\r\n            util_1.htmlEscape(eventDef.title || '') +\r\n            '</a>' +\r\n            '</td>' +\r\n            '</tr>';\r\n    };\r\n    // like \"4:00am\"\r\n    ListEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('mediumTimeFormat');\r\n    };\r\n    return ListEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = ListEventRenderer;\r\n\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar ListEventPointing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListEventPointing, _super);\r\n    function ListEventPointing() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // for events with a url, the whole <tr> should be clickable,\r\n    // but it's impossible to wrap with an <a> tag. simulate this.\r\n    ListEventPointing.prototype.handleClick = function (seg, ev) {\r\n        var url;\r\n        _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action\r\n        // not clicking on or within an <a> with an href\r\n        if (!$(ev.target).closest('a[href]').length) {\r\n            url = seg.footprint.eventDef.url;\r\n            if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler\r\n                window.location.href = url; // simulate link click\r\n            }\r\n        }\r\n    };\r\n    return ListEventPointing;\r\n}(EventPointing_1.default));\r\nexports.default = ListEventPointing;\r\n\n\n/***/ }),\n/* 251 */,\n/* 252 */,\n/* 253 */,\n/* 254 */,\n/* 255 */,\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar Calendar_1 = __webpack_require__(232);\r\n// for intentional side-effects\r\n__webpack_require__(11);\r\n__webpack_require__(49);\r\n__webpack_require__(260);\r\n__webpack_require__(261);\r\n__webpack_require__(264);\r\n__webpack_require__(265);\r\n__webpack_require__(266);\r\n__webpack_require__(267);\r\n$.fullCalendar = exportHooks;\r\n$.fn.fullCalendar = function (options) {\r\n    var args = Array.prototype.slice.call(arguments, 1); // for a possible method call\r\n    var res = this; // what this function will return (this jQuery object by default)\r\n    this.each(function (i, _element) {\r\n        var element = $(_element);\r\n        var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\r\n        var singleRes; // the returned value of this single method call\r\n        // a method call\r\n        if (typeof options === 'string') {\r\n            if (options === 'getCalendar') {\r\n                if (!i) { // first element only\r\n                    res = calendar;\r\n                }\r\n            }\r\n            else if (options === 'destroy') { // don't warn if no calendar object\r\n                if (calendar) {\r\n                    calendar.destroy();\r\n                    element.removeData('fullCalendar');\r\n                }\r\n            }\r\n            else if (!calendar) {\r\n                util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');\r\n            }\r\n            else if ($.isFunction(calendar[options])) {\r\n                singleRes = calendar[options].apply(calendar, args);\r\n                if (!i) {\r\n                    res = singleRes; // record the first method call result\r\n                }\r\n                if (options === 'destroy') { // for the destroy method, must remove Calendar object data\r\n                    element.removeData('fullCalendar');\r\n                }\r\n            }\r\n            else {\r\n                util_1.warn(\"'\" + options + \"' is an unknown FullCalendar method.\");\r\n            }\r\n        }\r\n        else if (!calendar) { // don't initialize twice\r\n            calendar = new Calendar_1.default(element, options);\r\n            element.data('fullCalendar', calendar);\r\n            calendar.render();\r\n        }\r\n    });\r\n    return res;\r\n};\r\nmodule.exports = exportHooks;\r\n\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/* Toolbar with buttons and title\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar Toolbar = /** @class */ (function () {\r\n    function Toolbar(calendar, toolbarOptions) {\r\n        this.el = null; // mirrors local `el`\r\n        this.viewsWithButtons = [];\r\n        this.calendar = calendar;\r\n        this.toolbarOptions = toolbarOptions;\r\n    }\r\n    // method to update toolbar-specific options, not calendar-wide options\r\n    Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {\r\n        this.toolbarOptions = newToolbarOptions;\r\n    };\r\n    // can be called repeatedly and will rerender\r\n    Toolbar.prototype.render = function () {\r\n        var sections = this.toolbarOptions.layout;\r\n        var el = this.el;\r\n        if (sections) {\r\n            if (!el) {\r\n                el = this.el = $(\"<div class='fc-toolbar \" + this.toolbarOptions.extraClasses + \"'>\");\r\n            }\r\n            else {\r\n                el.empty();\r\n            }\r\n            el.append(this.renderSection('left'))\r\n                .append(this.renderSection('right'))\r\n                .append(this.renderSection('center'))\r\n                .append('<div class=\"fc-clear\"></div>');\r\n        }\r\n        else {\r\n            this.removeElement();\r\n        }\r\n    };\r\n    Toolbar.prototype.removeElement = function () {\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n    };\r\n    Toolbar.prototype.renderSection = function (position) {\r\n        var _this = this;\r\n        var calendar = this.calendar;\r\n        var theme = calendar.theme;\r\n        var optionsManager = calendar.optionsManager;\r\n        var viewSpecManager = calendar.viewSpecManager;\r\n        var sectionEl = $('<div class=\"fc-' + position + '\">');\r\n        var buttonStr = this.toolbarOptions.layout[position];\r\n        var calendarCustomButtons = optionsManager.get('customButtons') || {};\r\n        var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\r\n        var calendarButtonText = optionsManager.get('buttonText') || {};\r\n        if (buttonStr) {\r\n            $.each(buttonStr.split(' '), function (i, buttonGroupStr) {\r\n                var groupChildren = $();\r\n                var isOnlyButtons = true;\r\n                var groupEl;\r\n                $.each(buttonGroupStr.split(','), function (j, buttonName) {\r\n                    var customButtonProps;\r\n                    var viewSpec;\r\n                    var buttonClick;\r\n                    var buttonIcon; // only one of these will be set\r\n                    var buttonText; // \"\r\n                    var buttonInnerHtml;\r\n                    var buttonClasses;\r\n                    var buttonEl;\r\n                    var buttonAriaAttr;\r\n                    if (buttonName === 'title') {\r\n                        groupChildren = groupChildren.add($('<h2>&nbsp;</h2>')); // we always want it to take up height\r\n                        isOnlyButtons = false;\r\n                    }\r\n                    else {\r\n                        if ((customButtonProps = calendarCustomButtons[buttonName])) {\r\n                            buttonClick = function (ev) {\r\n                                if (customButtonProps.click) {\r\n                                    customButtonProps.click.call(buttonEl[0], ev);\r\n                                }\r\n                            };\r\n                            (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = customButtonProps.text);\r\n                        }\r\n                        else if ((viewSpec = viewSpecManager.getViewSpec(buttonName))) {\r\n                            _this.viewsWithButtons.push(buttonName);\r\n                            buttonClick = function () {\r\n                                calendar.changeView(buttonName);\r\n                            };\r\n                            (buttonText = viewSpec.buttonTextOverride) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = viewSpec.buttonTextDefault);\r\n                        }\r\n                        else if (calendar[buttonName]) { // a calendar method\r\n                            buttonClick = function () {\r\n                                calendar[buttonName]();\r\n                            };\r\n                            (buttonText = calendarButtonTextOverrides[buttonName]) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = calendarButtonText[buttonName]);\r\n                            //            ^ everything else is considered default\r\n                        }\r\n                        if (buttonClick) {\r\n                            buttonClasses = [\r\n                                'fc-' + buttonName + '-button',\r\n                                theme.getClass('button'),\r\n                                theme.getClass('stateDefault')\r\n                            ];\r\n                            if (buttonText) {\r\n                                buttonInnerHtml = util_1.htmlEscape(buttonText);\r\n                                buttonAriaAttr = '';\r\n                            }\r\n                            else if (buttonIcon) {\r\n                                buttonInnerHtml = \"<span class='\" + buttonIcon + \"'></span>\";\r\n                                buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\r\n                            }\r\n                            buttonEl = $(// type=\"button\" so that it doesn't submit a form\r\n                            '<button type=\"button\" class=\"' + buttonClasses.join(' ') + '\"' +\r\n                                buttonAriaAttr +\r\n                                '>' + buttonInnerHtml + '</button>')\r\n                                .click(function (ev) {\r\n                                // don't process clicks for disabled buttons\r\n                                if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n                                    buttonClick(ev);\r\n                                    // after the click action, if the button becomes the \"active\" tab, or disabled,\r\n                                    // it should never have a hover class, so remove it now.\r\n                                    if (buttonEl.hasClass(theme.getClass('stateActive')) ||\r\n                                        buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n                                        buttonEl.removeClass(theme.getClass('stateHover'));\r\n                                    }\r\n                                }\r\n                            })\r\n                                .mousedown(function () {\r\n                                // the *down* effect (mouse pressed in).\r\n                                // only on buttons that are not the \"active\" tab, or disabled\r\n                                buttonEl\r\n                                    .not('.' + theme.getClass('stateActive'))\r\n                                    .not('.' + theme.getClass('stateDisabled'))\r\n                                    .addClass(theme.getClass('stateDown'));\r\n                            })\r\n                                .mouseup(function () {\r\n                                // undo the *down* effect\r\n                                buttonEl.removeClass(theme.getClass('stateDown'));\r\n                            })\r\n                                .hover(function () {\r\n                                // the *hover* effect.\r\n                                // only on buttons that are not the \"active\" tab, or disabled\r\n                                buttonEl\r\n                                    .not('.' + theme.getClass('stateActive'))\r\n                                    .not('.' + theme.getClass('stateDisabled'))\r\n                                    .addClass(theme.getClass('stateHover'));\r\n                            }, function () {\r\n                                // undo the *hover* effect\r\n                                buttonEl\r\n                                    .removeClass(theme.getClass('stateHover'))\r\n                                    .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup\r\n                            });\r\n                            groupChildren = groupChildren.add(buttonEl);\r\n                        }\r\n                    }\r\n                });\r\n                if (isOnlyButtons) {\r\n                    groupChildren\r\n                        .first().addClass(theme.getClass('cornerLeft')).end()\r\n                        .last().addClass(theme.getClass('cornerRight')).end();\r\n                }\r\n                if (groupChildren.length > 1) {\r\n                    groupEl = $('<div>');\r\n                    if (isOnlyButtons) {\r\n                        groupEl.addClass(theme.getClass('buttonGroup'));\r\n                    }\r\n                    groupEl.append(groupChildren);\r\n                    sectionEl.append(groupEl);\r\n                }\r\n                else {\r\n                    sectionEl.append(groupChildren); // 1 or 0 children\r\n                }\r\n            });\r\n        }\r\n        return sectionEl;\r\n    };\r\n    Toolbar.prototype.updateTitle = function (text) {\r\n        if (this.el) {\r\n            this.el.find('h2').text(text);\r\n        }\r\n    };\r\n    Toolbar.prototype.activateButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .addClass(this.calendar.theme.getClass('stateActive'));\r\n        }\r\n    };\r\n    Toolbar.prototype.deactivateButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .removeClass(this.calendar.theme.getClass('stateActive'));\r\n        }\r\n    };\r\n    Toolbar.prototype.disableButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .prop('disabled', true)\r\n                .addClass(this.calendar.theme.getClass('stateDisabled'));\r\n        }\r\n    };\r\n    Toolbar.prototype.enableButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .prop('disabled', false)\r\n                .removeClass(this.calendar.theme.getClass('stateDisabled'));\r\n        }\r\n    };\r\n    Toolbar.prototype.getViewsWithButtons = function () {\r\n        return this.viewsWithButtons;\r\n    };\r\n    return Toolbar;\r\n}());\r\nexports.default = Toolbar;\r\n\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar Model_1 = __webpack_require__(51);\r\nvar OptionsManager = /** @class */ (function (_super) {\r\n    tslib_1.__extends(OptionsManager, _super);\r\n    function OptionsManager(_calendar, overrides) {\r\n        var _this = _super.call(this) || this;\r\n        _this._calendar = _calendar;\r\n        _this.overrides = $.extend({}, overrides); // make a copy\r\n        _this.dynamicOverrides = {};\r\n        _this.compute();\r\n        return _this;\r\n    }\r\n    OptionsManager.prototype.add = function (newOptionHash) {\r\n        var optionCnt = 0;\r\n        var optionName;\r\n        this.recordOverrides(newOptionHash); // will trigger this model's watchers\r\n        for (optionName in newOptionHash) {\r\n            optionCnt++;\r\n        }\r\n        // special-case handling of single option change.\r\n        // if only one option change, `optionName` will be its name.\r\n        if (optionCnt === 1) {\r\n            if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\r\n                this._calendar.updateViewSize(true); // isResize=true\r\n                return;\r\n            }\r\n            else if (optionName === 'defaultDate') {\r\n                return; // can't change date this way. use gotoDate instead\r\n            }\r\n            else if (optionName === 'businessHours') {\r\n                return; // this model already reacts to this\r\n            }\r\n            else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {\r\n                return; // doesn't affect rendering. only interactions.\r\n            }\r\n            else if (optionName === 'timezone') {\r\n                this._calendar.view.flash('initialEvents');\r\n                return;\r\n            }\r\n        }\r\n        // catch-all. rerender the header and footer and rebuild/rerender the current view\r\n        this._calendar.renderHeader();\r\n        this._calendar.renderFooter();\r\n        // even non-current views will be affected by this option change. do before rerender\r\n        // TODO: detangle\r\n        this._calendar.viewsByType = {};\r\n        this._calendar.reinitView();\r\n    };\r\n    // Computes the flattened options hash for the calendar and assigns to `this.options`.\r\n    // Assumes this.overrides and this.dynamicOverrides have already been initialized.\r\n    OptionsManager.prototype.compute = function () {\r\n        var locale;\r\n        var localeDefaults;\r\n        var isRTL;\r\n        var dirDefaults;\r\n        var rawOptions;\r\n        locale = util_1.firstDefined(// explicit locale option given?\r\n        this.dynamicOverrides.locale, this.overrides.locale);\r\n        localeDefaults = locale_1.localeOptionHash[locale];\r\n        if (!localeDefaults) { // explicit locale option not given or invalid?\r\n            locale = options_1.globalDefaults.locale;\r\n            localeDefaults = locale_1.localeOptionHash[locale] || {};\r\n        }\r\n        isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL?\r\n        this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);\r\n        dirDefaults = isRTL ? options_1.rtlDefaults : {};\r\n        this.dirDefaults = dirDefaults;\r\n        this.localeDefaults = localeDefaults;\r\n        rawOptions = options_1.mergeOptions([\r\n            options_1.globalDefaults,\r\n            dirDefaults,\r\n            localeDefaults,\r\n            this.overrides,\r\n            this.dynamicOverrides\r\n        ]);\r\n        locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\r\n        this.reset(rawOptions);\r\n    };\r\n    // stores the new options internally, but does not rerender anything.\r\n    OptionsManager.prototype.recordOverrides = function (newOptionHash) {\r\n        var optionName;\r\n        for (optionName in newOptionHash) {\r\n            this.dynamicOverrides[optionName] = newOptionHash[optionName];\r\n        }\r\n        this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it\r\n        this.compute(); // this.options needs to be recomputed after the dynamic override\r\n    };\r\n    return OptionsManager;\r\n}(Model_1.default));\r\nexports.default = OptionsManager;\r\n\n\n/***/ }),\n/* 259 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar ViewSpecManager = /** @class */ (function () {\r\n    function ViewSpecManager(optionsManager, _calendar) {\r\n        this.optionsManager = optionsManager;\r\n        this._calendar = _calendar;\r\n        this.clearCache();\r\n    }\r\n    ViewSpecManager.prototype.clearCache = function () {\r\n        this.viewSpecCache = {};\r\n    };\r\n    // Gets information about how to create a view. Will use a cache.\r\n    ViewSpecManager.prototype.getViewSpec = function (viewType) {\r\n        var cache = this.viewSpecCache;\r\n        return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\r\n    };\r\n    // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\r\n    // Preference is given to views that have corresponding buttons.\r\n    ViewSpecManager.prototype.getUnitViewSpec = function (unit) {\r\n        var viewTypes;\r\n        var i;\r\n        var spec;\r\n        if ($.inArray(unit, util_1.unitsDesc) !== -1) {\r\n            // put views that have buttons first. there will be duplicates, but oh well\r\n            viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?\r\n            $.each(ViewRegistry_1.viewHash, function (viewType) {\r\n                viewTypes.push(viewType);\r\n            });\r\n            for (i = 0; i < viewTypes.length; i++) {\r\n                spec = this.getViewSpec(viewTypes[i]);\r\n                if (spec) {\r\n                    if (spec.singleUnit === unit) {\r\n                        return spec;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    // Builds an object with information on how to create a given view\r\n    ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {\r\n        var viewOverrides = this.optionsManager.overrides.views || {};\r\n        var specChain = []; // for the view. lowest to highest priority\r\n        var defaultsChain = []; // for the view. lowest to highest priority\r\n        var overridesChain = []; // for the view. lowest to highest priority\r\n        var viewType = requestedViewType;\r\n        var spec; // for the view\r\n        var overrides; // for the view\r\n        var durationInput;\r\n        var duration;\r\n        var unit;\r\n        // iterate from the specific view definition to a more general one until we hit an actual View class\r\n        while (viewType) {\r\n            spec = ViewRegistry_1.viewHash[viewType];\r\n            overrides = viewOverrides[viewType];\r\n            viewType = null; // clear. might repopulate for another iteration\r\n            if (typeof spec === 'function') { // TODO: deprecate\r\n                spec = { 'class': spec };\r\n            }\r\n            if (spec) {\r\n                specChain.unshift(spec);\r\n                defaultsChain.unshift(spec.defaults || {});\r\n                durationInput = durationInput || spec.duration;\r\n                viewType = viewType || spec.type;\r\n            }\r\n            if (overrides) {\r\n                overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\r\n                durationInput = durationInput || overrides.duration;\r\n                viewType = viewType || overrides.type;\r\n            }\r\n        }\r\n        spec = util_1.mergeProps(specChain);\r\n        spec.type = requestedViewType;\r\n        if (!spec['class']) {\r\n            return false;\r\n        }\r\n        // fall back to top-level `duration` option\r\n        durationInput = durationInput ||\r\n            this.optionsManager.dynamicOverrides.duration ||\r\n            this.optionsManager.overrides.duration;\r\n        if (durationInput) {\r\n            duration = moment.duration(durationInput);\r\n            if (duration.valueOf()) { // valid?\r\n                unit = util_1.computeDurationGreatestUnit(duration, durationInput);\r\n                spec.duration = duration;\r\n                spec.durationUnit = unit;\r\n                // view is a single-unit duration, like \"week\" or \"day\"\r\n                // incorporate options for this. lowest priority\r\n                if (duration.as(unit) === 1) {\r\n                    spec.singleUnit = unit;\r\n                    overridesChain.unshift(viewOverrides[unit] || {});\r\n                }\r\n            }\r\n        }\r\n        spec.defaults = options_1.mergeOptions(defaultsChain);\r\n        spec.overrides = options_1.mergeOptions(overridesChain);\r\n        this.buildViewSpecOptions(spec);\r\n        this.buildViewSpecButtonText(spec, requestedViewType);\r\n        return spec;\r\n    };\r\n    // Builds and assigns a view spec's options object from its already-assigned defaults and overrides\r\n    ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {\r\n        var optionsManager = this.optionsManager;\r\n        spec.options = options_1.mergeOptions([\r\n            options_1.globalDefaults,\r\n            spec.defaults,\r\n            optionsManager.dirDefaults,\r\n            optionsManager.localeDefaults,\r\n            optionsManager.overrides,\r\n            spec.overrides,\r\n            optionsManager.dynamicOverrides // dynamically set via setter. highest precedence\r\n        ]);\r\n        locale_1.populateInstanceComputableOptions(spec.options);\r\n    };\r\n    // Computes and assigns a view spec's buttonText-related options\r\n    ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {\r\n        var optionsManager = this.optionsManager;\r\n        // given an options object with a possible `buttonText` hash, lookup the buttonText for the\r\n        // requested view, falling back to a generic unit entry like \"week\" or \"day\"\r\n        function queryButtonText(options) {\r\n            var buttonText = options.buttonText || {};\r\n            return buttonText[requestedViewType] ||\r\n                // view can decide to look up a certain key\r\n                (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||\r\n                // a key like \"month\"\r\n                (spec.singleUnit ? buttonText[spec.singleUnit] : null);\r\n        }\r\n        // highest to lowest priority\r\n        spec.buttonTextOverride =\r\n            queryButtonText(optionsManager.dynamicOverrides) ||\r\n                queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\r\n                spec.overrides.buttonText; // `buttonText` for view-specific options is a string\r\n        // highest to lowest priority. mirrors buildViewSpecOptions\r\n        spec.buttonTextDefault =\r\n            queryButtonText(optionsManager.localeDefaults) ||\r\n                queryButtonText(optionsManager.dirDefaults) ||\r\n                spec.defaults.buttonText || // a single string. from ViewSubclass.defaults\r\n                queryButtonText(options_1.globalDefaults) ||\r\n                (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like \"3 days\"\r\n                requestedViewType; // fall back to given view name\r\n    };\r\n    return ViewSpecManager;\r\n}());\r\nexports.default = ViewSpecManager;\r\n\n\n/***/ }),\n/* 260 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nEventSourceParser_1.default.registerClass(ArrayEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(FuncEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default);\r\n\n\n/***/ }),\n/* 261 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar Bootstrap3Theme_1 = __webpack_require__(262);\r\nvar Bootstrap4Theme_1 = __webpack_require__(263);\r\nThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default);\r\n\n\n/***/ }),\n/* 262 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap3Theme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bootstrap3Theme, _super);\r\n    function Bootstrap3Theme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Bootstrap3Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap3Theme;\r\nBootstrap3Theme.prototype.classes = {\r\n    widget: 'fc-bootstrap3',\r\n    tableGrid: 'table-bordered',\r\n    tableList: 'table',\r\n    tableListHeading: 'active',\r\n    buttonGroup: 'btn-group',\r\n    button: 'btn btn-default',\r\n    stateActive: 'active',\r\n    stateDisabled: 'disabled',\r\n    today: 'alert alert-info',\r\n    popover: 'panel panel-default',\r\n    popoverHeader: 'panel-heading',\r\n    popoverContent: 'panel-body',\r\n    // day grid\r\n    // for left/right border color when border is inset from edges (all-day in agenda view)\r\n    // avoid `panel` class b/c don't want margins/radius. only border color.\r\n    headerRow: 'panel-default',\r\n    dayRow: 'panel-default',\r\n    // list view\r\n    listView: 'panel panel-default'\r\n};\r\nBootstrap3Theme.prototype.baseIconClass = 'glyphicon';\r\nBootstrap3Theme.prototype.iconClasses = {\r\n    close: 'glyphicon-remove',\r\n    prev: 'glyphicon-chevron-left',\r\n    next: 'glyphicon-chevron-right',\r\n    prevYear: 'glyphicon-backward',\r\n    nextYear: 'glyphicon-forward'\r\n};\r\nBootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';\r\nBootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';\r\nBootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';\r\n\n\n/***/ }),\n/* 263 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap4Theme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bootstrap4Theme, _super);\r\n    function Bootstrap4Theme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Bootstrap4Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap4Theme;\r\nBootstrap4Theme.prototype.classes = {\r\n    widget: 'fc-bootstrap4',\r\n    tableGrid: 'table-bordered',\r\n    tableList: 'table',\r\n    tableListHeading: 'table-active',\r\n    buttonGroup: 'btn-group',\r\n    button: 'btn btn-primary',\r\n    stateActive: 'active',\r\n    stateDisabled: 'disabled',\r\n    today: 'alert alert-info',\r\n    popover: 'card card-primary',\r\n    popoverHeader: 'card-header',\r\n    popoverContent: 'card-body',\r\n    // day grid\r\n    // for left/right border color when border is inset from edges (all-day in agenda view)\r\n    // avoid `table` class b/c don't want margins/padding/structure. only border color.\r\n    headerRow: 'table-bordered',\r\n    dayRow: 'table-bordered',\r\n    // list view\r\n    listView: 'card card-primary'\r\n};\r\nBootstrap4Theme.prototype.baseIconClass = 'fa';\r\nBootstrap4Theme.prototype.iconClasses = {\r\n    close: 'fa-times',\r\n    prev: 'fa-chevron-left',\r\n    next: 'fa-chevron-right',\r\n    prevYear: 'fa-angle-double-left',\r\n    nextYear: 'fa-angle-double-right'\r\n};\r\nBootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverridePrefix = 'fa-';\r\n\n\n/***/ }),\n/* 264 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthView_1 = __webpack_require__(246);\r\nViewRegistry_1.defineView('basic', {\r\n    'class': BasicView_1.default\r\n});\r\nViewRegistry_1.defineView('basicDay', {\r\n    type: 'basic',\r\n    duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('basicWeek', {\r\n    type: 'basic',\r\n    duration: { weeks: 1 }\r\n});\r\nViewRegistry_1.defineView('month', {\r\n    'class': MonthView_1.default,\r\n    duration: { months: 1 },\r\n    defaults: {\r\n        fixedWeekCount: true\r\n    }\r\n});\r\n\n\n/***/ }),\n/* 265 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar AgendaView_1 = __webpack_require__(238);\r\nViewRegistry_1.defineView('agenda', {\r\n    'class': AgendaView_1.default,\r\n    defaults: {\r\n        allDaySlot: true,\r\n        slotDuration: '00:30:00',\r\n        slotEventOverlap: true // a bad name. confused with overlap/constraint system\r\n    }\r\n});\r\nViewRegistry_1.defineView('agendaDay', {\r\n    type: 'agenda',\r\n    duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('agendaWeek', {\r\n    type: 'agenda',\r\n    duration: { weeks: 1 }\r\n});\r\n\n\n/***/ }),\n/* 266 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar ListView_1 = __webpack_require__(248);\r\nViewRegistry_1.defineView('list', {\r\n    'class': ListView_1.default,\r\n    buttonTextKey: 'list',\r\n    defaults: {\r\n        buttonText: 'list',\r\n        listDayFormat: 'LL',\r\n        noEventsMessage: 'No events to display'\r\n    }\r\n});\r\nViewRegistry_1.defineView('listDay', {\r\n    type: 'list',\r\n    duration: { days: 1 },\r\n    defaults: {\r\n        listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\r\n    }\r\n});\r\nViewRegistry_1.defineView('listWeek', {\r\n    type: 'list',\r\n    duration: { weeks: 1 },\r\n    defaults: {\r\n        listDayFormat: 'dddd',\r\n        listDayAltFormat: 'LL'\r\n    }\r\n});\r\nViewRegistry_1.defineView('listMonth', {\r\n    type: 'list',\r\n    duration: { month: 1 },\r\n    defaults: {\r\n        listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n    }\r\n});\r\nViewRegistry_1.defineView('listYear', {\r\n    type: 'list',\r\n    duration: { year: 1 },\r\n    defaults: {\r\n        listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n    }\r\n});\r\n\n\n/***/ }),\n/* 267 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\n\n/***/ })\n/******/ ]);\n});\n\n/***/ }),\n/* 824 */,\n/* 825 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> PROJECTS\\n            <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Projects</li>\\n        </ol>\\n    </section>\\n    <!-- Main content -->\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"addproject()\\\" style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create\\\">\\n                                <i class=\\\"sq sq-create-new-project\\\" style=\\\"color:rgb(27, 110, 198); font-size: 32px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selprojects.length == 0 || statusdelete.length > 0\\\" (click)=\\\"closeproject(null)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                <i class=\\\"sq sq-delete-project\\\" style=\\\"color:rgb(27, 110, 198); font-size: 32px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selprojects.length == 0 || statusdelete.length > 0\\\" (click)=\\\"deleteproject(null)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <i class=\\\"sq sq-eliminar\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selprojects.length == 0 || statusdelete.length > 0\\\" (click)=\\\"openproject(null)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                                <i class=\\\"sq sq-reopen-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" (click)=\\\"showFilter()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Filter\\\">\\n                                <i class=\\\"fa fa-filter\\\" style=\\\"color:rgb(27, 110, 198); font-size: 22px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input id=\\\"search_proj\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\"\\n                                            class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"searchProject()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\" style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div *ngIf=\\\"filter\\\" class=\\\"box-header with-border filter-options\\\">\\n                    <div class=\\\"col-xs-10 col-sm-11 col-md-11 col-lg-11\\\">\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Subject</label>\\n                            <li *ngIf=\\\"myprojcopy.description\\\">\\n                                {{myproj.description}}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.description\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date initial</label>\\n                            <li *ngIf=\\\"myproj.date_ini\\\">\\n                                {{formatDate(myproj.date_ini)}}\\n                            </li>\\n                            <li *ngIf=\\\"!myproj.date_ini\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date end</label>\\n                            <li *ngIf=\\\"myproj.date_end\\\">\\n                                {{formatDate(myproj.date_end)}}\\n                            </li>\\n                            <li *ngIf=\\\"!myproj.date_end\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Project_ids</label>\\n                            <li *ngFor=\\\"let pj of myprojcopy.proj_ids\\\">\\n                                {{pj}}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.proj_ids\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Product(s)</label>\\n                            <li *ngFor=\\\"let pr of myprojcopy.products\\\">\\n                                {{pr.prod_name}}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.products || myprojcopy.products.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Applicant(s)</label>\\n                            <li *ngFor=\\\"let app of myprojcopy.applicants\\\">\\n                                {{ app.user_lastname + \\\", \\\" + app.user_name }}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.applicants || myprojcopy.applicants.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Creator(s)</label>\\n                            <li *ngFor=\\\"let ur of myprojcopy.creators\\\">\\n                                {{ ur.user_lastname + \\\", \\\" + ur.user_name }}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.creators || myprojcopy.creators.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"text-align: right;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"closeFilter()\\\" class=\\\"pull-rigth\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:#0ba8da; font-weight: bolder;\\\"></i>\\n                        </a>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && projects.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"projects.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: 3px solid white;width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\">\\n                                <thead>\\n                                    <th (click)=\\\"selectAll()\\\" style=\\\"text-align:center;width: 50px;border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <i *ngIf=\\\"selprojects.length && selprojects.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                        <i *ngIf=\\\"selprojects.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('proj_start')\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Start Date\\n                                        <span [hidden]=\\\"posOrder !== 'proj_start'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('proj_id')\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Number\\n                                        <span [hidden]=\\\"posOrder !== 'proj_id'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('user_creator')\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Creator\\n                                        <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('user_applicant')\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Applicant\\n                                        <span [hidden]=\\\"posOrder !== 'user_applicant'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th style=\\\"width: 300px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Subject\\n                                    </th>\\n                                    <th *ngIf=\\\"textState.indexOf('Closed') >= 0\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Closed by\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('proj_percentage')\\\" style=\\\"width: 60px; text-align: center;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        %\\n                                        <span [hidden]=\\\"posOrder !== 'proj_percentage'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th style=\\\"width: 150px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Actions\\n                                    </th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let tk of projects\\\" [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"listproject\\\" name=\\\"listproject\\\" value=\\\"{{tk.proj_id}}\\\"\\n                                                    label=\\\"\\\" [(ngModel)]=\\\"selprojects\\\" (onChange)=\\\"verifyStatus()\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.proj_start) }}</a>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.proj_id) }}</a>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.creator) }}</a>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.applicant) }}</a>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.proj_subject)\\n                                                }}</a>\\n                                        </td>\\n                                        <td *ngIf=\\\"textState.indexOf('Closed') >= 0\\\" [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ tk.closer }}</a>\\n                                        </td>\\n                                        <td *ngIf=\\\"tk.iscomplete == 1\\\" [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <span [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(237, 59, 89)'}\\\"\\n                                                class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tk.proj_percentage_diff}}%</span>\\n                                            <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%;\\\">\\n                                                <div class=\\\"success-tasks\\\" [ngStyle]=\\\"tk.para_status == 5 ? { 'background': 'rgb(237, 59, 89)', 'width': tk.proj_percentage + '%' } : tk.para_status == 3 ? { 'background': 'rgb(237, 59, 89)' , 'width': tk.proj_percentage + '%' } :{'background': 'rgb(237, 59, 89)' , 'width': tk.proj_percentage + '%' }\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td *ngIf=\\\"tk.iscomplete == 0\\\" [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <span [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tk.proj_percentage}}%</span>\\n                                            <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%;\\\">\\n                                                <div class=\\\"success-tasks\\\" [ngStyle]=\\\"tk.para_status == 5 ? { 'background': 'rgb(237, 59, 89)', 'width': tk.proj_percentage + '%' } : tk.para_status == 3 ? { 'background': 'rgb(79, 93, 100)' , 'width': tk.proj_percentage + '%' } :{'background': 'rgb(68, 180, 248)' , 'width': tk.proj_percentage + '%' }\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <div class=\\\"row\\\">\\n                                                    <button type=\\\"button\\\" (click)=\\\"showModalProject(tk.proj_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                                        style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                                                        pTooltip=\\\"Quick view\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-search\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"tk.para_status != 5\\\" type=\\\"button\\\" (click)=\\\"showEditModal(tk)\\\"\\n                                                        class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                                        data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-quickedit\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"tk.para_status == 3 \\\" (click)=\\\"openproject(tk.proj_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                                        data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"fa fa-undo\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"tk.para_status != 3 && tk.para_status != 5\\\" (click)=\\\"closeproject(tk.proj_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                                        data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"fa fa-times-circle-o\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"tk.para_status != 5\\\" (click)=\\\"deleteproject(tk.proj_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                                        data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </div>\\n                                            </div>\\n                                            <projectview [myProjectId]=\\\"tk.proj_id\\\"></projectview>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"goTo(0)\\\">\\n                                            <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"setCurPage(0)\\\">\\n                                            <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\"\\n                                        [(ngModel)]=\\\"currentpage\\\" (change)=\\\"searchProject()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </section>\\n\\n    <!--modal add project-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdproject\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params\\\"\\n                style=\\\"text-align: center;text-align: center; position: absolute; z-index: 10; background-color: rgba(121,121,121,0.54); height: 100%;    margin-top: 0px ;display: flex;justify-content: center;  align-items: center;\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div class=\\\"modal-content-params\\\">\\n                <div *ngIf=\\\"project.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + project.proj_id + \\\" - \\\" +\\n                        project.proj_subject}}</h4>\\n                </div>\\n                <div *ngIf=\\\"!project.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>&nbsp;&nbsp; New project</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"project.proj_subject\\\" name=\\\"project_subject\\\"\\n                                    placeholder=\\\"Subject\\\">\\n                            </div>\\n                        </div>\\n                        <!--.subject-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User Applicant</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"applicantlbl\\\" [(ngModel)]=\\\"project.user_applicant\\\" placeholder=\\\"Select a user\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!--.user applicant-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User Creator</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"applicantlbl\\\" [(ngModel)]=\\\"project.user_creator\\\" placeholder=\\\"Select a user\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!--.user creator-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"lblgroups\\\" [(ngModel)]=\\\"project.group_assigned\\\" placeholder=\\\"Select a group\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!--.group-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"products\\\" [(ngModel)]=\\\"project.prod_id\\\" placeholder=\\\"Select a Product\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!--.product-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"project.proj_end\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!--.delivery date-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Estimated Points</label>\\n                                <input type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"project.proj_propoints\\\"\\n                                    [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <!--.estimates points-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"project.userssh\\\"\\n                                        [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--.share with-->\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                                <a id=\\\"editProject-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_project\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"project.attachments && project.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                                <a id=\\\"editProject-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_project\\\" (click)=\\\"setPage(2)\\\">Attachments\\n                                    <span>({{project.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor [(ngModel)]=\\\"project.proj_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                            <!--.description-->\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"attachments_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of project.attachments\\\">\\n                                            <a id=\\\"href-attp-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\"\\n                                                class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type && (att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/')\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a id=\\\"href-attp2-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\"\\n                                                    class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.pjat_name}}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button *ngIf=\\\"project.proj_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentProject(project,att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"!project.proj_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachment(att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button type=\\\"submit\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" \\n                            [disabled]=\\\"validateProj()\\\" (click)=\\\"saveproject()\\\" style=\\\"padding: 5px 12px;\\\"> Save\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-left\\\">\\n                        <label for=\\\"file-upload\\\" class=\\\"custom-file-upload custom-upload-form-projectlist\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--.modal add project-->\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdSearchProject\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Main filter</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"description_projectfilter\\\" name=\\\"description_projectfilter\\\"\\n                                    [(ngModel)]=\\\"myproj.description\\\" placeholder=\\\"type a keyword\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-chips\\\">\\n                                <label>Project id(s)</label>\\n                                <p-chips class=\\\"chipsSqlx\\\" [(ngModel)]=\\\"myproj.proj_ids\\\" placeholder=\\\"Ex.17,19-22 enter\\\"></p-chips>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Product(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myproj.products\\\"\\n                                        [suggestions]=\\\"productsa\\\" (completeMethod)=\\\"filterMultiple($event, 1)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Products(s)\\\" field=\\\"prod_name\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Creator</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myproj.creators\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Applicant</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myproj.applicants\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date initial</label>\\n                                <p-calendar id=\\\"calendarDateInit_projectfilter\\\" name=\\\"calendarDateInit_projectfilter\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myproj.date_ini\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date end</label>\\n                                <p-calendar id=\\\"calendarDateEnd_projectfilter\\\" name=\\\"calendarDateEnd_projectfilter\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myproj.date_end\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonSearch_projectfilter\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"filterProject()\\\">\\n                            Search\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 826 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h2>\\n      Project #{{ project.proj_id }}\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a [routerLink]=\\\"['/dashboard']\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li>\\n        <a [routerLink]=\\\"['/projects']\\\">Projects</a>\\n      </li>\\n      <li class=\\\"active\\\">Project #{{ project.proj_id }}</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-desc-project\\\">\\n          <div class=\\\"modal-header header-project\\\" [ngStyle]=\\\"project.para_status == 5 ? {'background-color': 'red'} : project.para_status == 3 ? {'background-color': 'gray'} : {}\\\">\\n            <div style=\\\"float: left; overflow-y: scroll;max-height: 29px;\\\">\\n              <label class=\\\"label-box-title\\\">{{project.proj_subject}} {{ project.para_status == 5 ? '(Deleted)' : ''\\n                }}{{ project.para_status == 3 ? '(Closed)' : '' }}</label>\\n            </div>\\n            <div class=\\\"pull-right\\\">\\n              <button type=\\\"button\\\" (click)=\\\"showEditModal()\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                <i class=\\\"sq sq-quickedit\\\" style=\\\"color: white;\\\"></i>\\n              </button>\\n              <button *ngIf=\\\"project.para_status != 3 && project.para_status != 5\\\" type=\\\"button\\\" (click)=\\\"closeproject()\\\"\\n                class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                pTooltip=\\\"Close\\\">\\n                <i class=\\\"fa fa-times-circle-o\\\" style=\\\"color: white;\\\"></i>\\n              </button>\\n              <button *ngIf=\\\"project.para_status == 3 \\\" (click)=\\\"openproject(project.proj_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                <i class=\\\"fa fa-undo\\\" style=\\\"color: white;\\\"></i>\\n              </button>\\n              <button *ngIf=\\\"project.para_status != 5\\\" (click)=\\\"deleteproject(project.proj_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                <i class=\\\"sq sq-trash\\\" style=\\\"color: white;\\\"></i>\\n              </button>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body box-project\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Project Number: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_id}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Creation Date: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_start}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Product: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.prod_name}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Project Creator: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.creator}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">End Date</label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{ project.proj_end}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Applicant: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.applicant}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Group: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.groupname}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Estimated Points: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_propoints}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Done Points: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_compoints}}</span>\\n              </div>\\n              <div *ngIf=\\\"project.iscomplete == 1\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                  <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Progress</label>\\n                  <span class=\\\"label-noedit col-xs-6 col-md-6 danger-span-sqlx\\\">{{project.proj_percentage_diff}}%</span>\\n                  <div *ngIf=\\\"project.proj_percentage >0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                    <div class=\\\"danger-sqlx col-xs-12 col-md-4\\\" [ngStyle]=\\\"{ 'width': project.proj_percentage + '%' }\\\">\\n                    </div>\\n                  </div>\\n                  <div *ngIf=\\\"project.proj_percentage == 0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                    <div class=\\\"danger-sqlx col-xs-12 col-md-4\\\" style=\\\"width:0%;background-color:transparent;\\\">\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div *ngIf=\\\"project.iscomplete == 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Progress</label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_percentage}}%</span>\\n                <div *ngIf=\\\"project.proj_percentage >0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                  <div class=\\\"success-sqlx col-xs-12 col-md-4\\\" [ngStyle]=\\\"{ 'width': project.proj_percentage + '%' }\\\">\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"project.proj_percentage == 0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                  <div class=\\\"success-sqlx col-xs-12 col-md-4\\\" style=\\\"width:0%;background-color:transparent;\\\">\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                  <label class=\\\"control-label\\\">Shared With</label>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                  <span *ngIf=\\\"!project.userssh || project.userssh.length == 0\\\">None</span>\\n                  <span *ngFor=\\\"let uss of project.userssh\\\" class=\\\"label label-primary\\\">{{ uss.user_name + ' ' +\\n                    uss.user_lastname }}</span>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">DescriptionColor</label>\\n                <div class=\\\"col-xs-12 col-md-12 iframe-desc-proj\\\" style=\\\"padding-top:10px;margin-left:10px;\\\">\\n                  <span class=\\\"iframe-desc-proj\\\">\\n                    <div [innerHtml]=\\\"project.proj_description\\\"></div>\\n                  </span>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-md-12 col-lg-12\\\">\\n            <div class=\\\"box box-desc-milestone\\\">\\n              <div class=\\\"box-header header-milestone\\\">\\n                <div class=\\\"header-border-milestone\\\">\\n                  <div class=\\\"col-xs-6 col-sm-6 col-md-8 col-lg-9\\\" style=\\\"padding:0;\\\">\\n                    <div class=\\\"pull-left\\\" style=\\\"padding:2px 2px 2px 20px; margin:2px;\\\">\\n                      <i class=\\\"sq sq-milestones\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 28px!important\\\"></i>\\n                    </div>\\n                    <div class=\\\"pull-rigth\\\" style=\\\"padding:3px;margin-top: 6px;\\\">\\n                      <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold; font-size: 16px;\\\">MILESTONES</span>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-3\\\" style=\\\"padding:0;\\\">\\n                    <div class=\\\"pull-right\\\" style=\\\"background-color: #026ec5; border-radius: 20px;\\\">\\n                      <div class=\\\"pull-left\\\" style=\\\"margin: 2px 0 2px 2px;\\\">\\n                        <i class=\\\"sq sq-milestones\\\" aria-hidden=\\\"true\\\" style=\\\"color:white;font-size: 25px; padding-left: 8px;\\\"></i>\\n                      </div>\\n                      <div class=\\\"pull-right button-add-milestone\\\" style=\\\"padding-top:3px; margin-top: 6px;\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"addMilestone()\\\" data-toggle=\\\"modal\\\" style=\\\"color:white;font-weight: bold; background-color: transparent; border: none; padding-right: 10px;\\\">ADD\\n                          MILESTONE</button>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--.box-header-->\\n              <div *ngIf=\\\"milestones.length > 0\\\" class=\\\"box-body box-milestone\\\">\\n                <div class=\\\"row\\\">\\n                  <div class=\\\"col-xs-6 col-sm-7 col-md-9 col-lg-9\\\" style=\\\"padding-right: 0px;\\\">\\n                    <div>\\n                      <label class=\\\"control-label  label-sqlx\\\">Start Date</label>\\n                    </div>\\n                    <div>\\n                      <span class=\\\"label-noedit  span-sqlx\\\">{{project.proj_start}}</span>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"col-xs-6 col-sm-5 col-md-3 col-lg-3\\\" style=\\\"padding-left: 0px;\\\">\\n                    <div class=\\\"pull-right\\\">\\n                      <div>\\n                        <label class=\\\"control-label label-sqlx pull-right\\\">Delivery Date</label>\\n                      </div>\\n                      <div>\\n                        <span class=\\\"label-noedit span-sqlx\\\">{{project.proj_end ? project.proj_end : 'Not Defined'}}</span>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div style=\\\"position: absolute; width: calc(100% - 180px); padding: 5px; left: 86px; font-size: 3em; padding-bottom: 20px; \\\">\\n                  <div *ngFor=\\\"let y of milestones\\\" [ngStyle]=\\\"{'width':y.nper + '%', 'float': 'left'}\\\">\\n                    <a href=\\\"javascript:void(0)\\\" (click)=\\\"showMilestone(y)\\\">\\n                      <i class=\\\"sq sq-milestones-o pull-right\\\" aria-hidden=\\\"true\\\" [ngStyle]=\\\"{'color':y.color, 'margin-right' : '-21px'}\\\"><span\\n                          style=\\\" position: absolute; font-size: 20px;margin-left: -27px;margin-top: 4px;font-family: Arial;\\\">{{y.number}}</span></i>\\n                    </a>\\n                  </div>\\n                </div>\\n                <div class=\\\"row\\\" style=\\\"padding-top: 40px;\\\">\\n                  <div style=\\\"width: 50px; position: absolute; left: 40px; padding-top: 4px\\\">\\n                    <div style=\\\"box-shadow:0 1px 5px rgba(0, 0, 0, 0.5); border-radius: 50%; width: 50px; height: 50px; text-align: center; padding-top: 8px;\\\">\\n                      <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\" style=\\\"color:#026ec5;font-size: 28px;\\\"></i>\\n                    </div>\\n                  </div>\\n                  <div style=\\\"position: absolute; width: calc(100% - 180px); padding: 5px; left: 86px; padding-top: 20px;\\\">\\n                    <div class=\\\"progress\\\" style=\\\"height: 15px; background-color:rgb(230, 240, 243);\\\">\\n                      <div *ngFor=\\\"let y of milestones\\\" class=\\\"progress-bar\\\" role=\\\"progressbar\\\" aria-valuenow=\\\"15\\\"\\n                        aria-valuemin=\\\"0\\\" aria-valuemax=\\\"100\\\" [ngStyle]=\\\"{'width':y.nper + '%','background':y.color}\\\">\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div style=\\\"width:50px; padding: 0; position: absolute; right: 50px;\\\">\\n                    <i class=\\\"sq sq-milestones\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(230, 240, 243);;font-size: 50px;  width: 50px;\\\"></i>\\n                  </div>\\n                  <div style=\\\"position: absolute; width: calc(100% - 180px); padding: 5px; padding-top: 35px; left: 86px; font-size: 3em;height: 63px;\\\">\\n                    <div *ngFor=\\\"let x of milestones\\\" [ngStyle]=\\\"{'width':x.nper + '%', 'float': 'left', 'text-align': 'right'}\\\">\\n                      <p style=\\\"font-size: 10px;\\\">{{x.meet_date}}</p>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div class=\\\"row\\\" style=\\\"padding: 20px 5px; border-radius: 10px; border: 2px solid rgb(230, 240, 243); margin: 83px 50px 20px 50px;\\\">\\n                  <button (click)=\\\"deleteMilestone(milestone_show.pjml_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm pull-right\\\"\\n                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                    <i class=\\\"fa fa-trash-o\\\"></i>\\n                  </button>\\n                  <div class=\\\"col-xs-12 col-sm-3 col-md-2 col-lg-1\\\" style=\\\"padding: 0;\\\">\\n                    <i class=\\\"sq sq-milestones-o\\\" aria-hidden=\\\"true\\\" [ngStyle]=\\\"{'color':milestone_show.color , 'font-size': '5em', 'position': 'relative'}\\\">\\n                      <span style=\\\"font-size: 22px; left: 28px; top: 10px; font-family: Arial; position: absolute;\\\">{{milestone_show.number}}</span>\\n                    </i>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-sm-10 col-md-6 col-lg-4\\\">\\n                    <div>\\n                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding: 0px;\\\">\\n                        <p style=\\\"color: #707070; font-weight: bold; font-size: 16px;\\\">Creator</p>\\n                        <span style=\\\"color: #707070; font-size: 15px;\\\">{{milestone_show.name_owner}}</span>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding: 0px;\\\">\\n                        <p style=\\\"color: #707070; font-weight: bold; font-size: 16px; \\\">Delivery Date</p>\\n                        <span style=\\\"color: #707070; font-size: 15px;\\\">{{milestone_show.meet_date}}</span>\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-sm-9 col-md-2 col-lg-2\\\">\\n                    <span style=\\\"color: #707070; font-weight: bold; font-size: 16px; \\\">Place</span>\\n                    <p style=\\\"color: #707070; font-size: 15px;\\\">{{milestone_show.para_name}}</p>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-4\\\">\\n                    <span style=\\\"color: #707070; font-weight: bold; font-size: 16px; \\\">Description</span>\\n                    <p style=\\\"color: #707070; font-size: 15px;\\\">{{milestone_show.pjml_description}}</p>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--.box-body milestone -->\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-sm-12 col-lg-6 comments-project\\\" style=\\\"margin-left: 31px; margin-bottom: 20px;\\\">\\n            <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;\\\">\\n              <div class=pull-left style=\\\"padding:2px; margin:2px;\\\">\\n                <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 23px!important\\\"></i>\\n              </div>\\n              <div class=\\\"pull-rigth\\\" style=\\\"padding:2px; margin:2px;margin-top: 6px;\\\">\\n                <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold;\\\">COMMENTS</span>\\n              </div>\\n              <div style=\\\"background-color:gray; width:90%;margin-left:10px;\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"content-comments-users scrollable\\\" style=\\\"max-height:273px;\\\">\\n              <ul class=\\\"timeline comment-timeline\\\">\\n                <li *ngFor=\\\"let dt of detail; let i=index;\\\" style=\\\"margin-top:5px;\\\">\\n                  <div class=\\\"border-imguser\\\">\\n                    <img [src]=\\\"dt.urlimagen\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"img-usersqlx\\\">\\n                  </div>\\n\\n                  <div class=\\\"timeline-item comment-timeline-item\\\">\\n                    <span class=\\\"time\\\">\\n                      {{dt.note_date}}</span>\\n                    <h3 class=\\\"timeline-header comment-timeline-header\\\">\\n                      <b>{{dt.creator}}</b>\\n                      <!-- {{\\\" \\\" + dt.title + \\\" \\\"}} -->\\n                      commented on a\\n                      <b>project</b>\\n                    </h3>\\n                    <div class=\\\"timeline-body\\\" style=\\\"overflow-y: scroll; max-height:200px; padding-bottom: 1px;\\\">\\n                      <div class=\\\"box-body\\\">\\n                        <div class=\\\"col-xs-12 col-md-12\\\">\\n                          <div class=\\\"col-xs-12 col-md-12 comment-user\\\" style=\\\"padding-top:10px;margin-left:10px;\\\">\\n                            <p class=\\\"comment-user\\\"> {{escapeHtml(dt.note_text)}}</p>\\n                          </div>\\n                          <div *ngIf=\\\"dt.childs.length > 0\\\">\\n                            <div *ngFor=\\\"let chn of dt.childs\\\" class=\\\"col-xs-12 col-md-12 reply-user\\\" style=\\\"padding-top:10px;margin-left:10px; padding-top:0px;\\\">\\n                              <div class=\\\"pull-right reply-comment\\\">\\n                                <h3 class=\\\"reply-user\\\">\\n                                  <b>{{chn.creator}}</b>\\n                                  <!-- {{\\\" \\\" + chn.title + \\\" \\\"}} -->\\n                                  commented on a\\n                                  <b>project</b>\\n                                </h3>\\n                                <p class=\\\"reply-user\\\"> {{escapeHtml(chn.note_text)}}</p>\\n                              </div>\\n                              <div style=\\\"background-color:rgb(230, 240, 243); height:6px; position: relative;\\\">\\n                              </div>\\n                            </div>\\n                          </div>\\n                          <div id=\\\"reply-user\\\" class=\\\"row\\\">\\n                            <div class=\\\"col-md-11 reply-note\\\" *ngIf=\\\"!dt.active\\\" style=\\\"text-align: right;\\\">\\n                              <a href=\\\"javascript:void(0)\\\" (click)=\\\"showNoteReply(i)\\\">\\n                                <p class=\\\"reply-the-comment\\\" style=\\\"color:rgb(167, 167, 167)!important;padding-top: 7px;display: inline-block;text-align: right;\\\">Reply\\n                                  the comment</p>\\n                              </a>\\n                            </div>\\n                            <div class=\\\"col-md-11\\\" *ngIf=\\\"dt.active\\\">\\n                              <a href=\\\"javascript:void(0)\\\" (click)=\\\"createNoteReply(dt.note_id)\\\">\\n                                <div class=\\\"col-md-12\\\" style=\\\"background-color: rgb(230, 240, 243); height: 24px;margin-left:10px;margin-top:6px;\\\">\\n                                  <input type=\\\"text\\\" class=\\\"col-md-12 imput-comments\\\" style=\\\"background-color: rgb(230, 240, 243);height: 24px;margin-top: 5px;margin-bottom: 2px;margin-left: 12px; width: 100%;\\\"\\n                                    [(ngModel)]=\\\"notereply.note_data\\\" placeholder=\\\"Type Comment\\\">\\n                                </div>\\n                              </a>\\n                            </div>\\n                            <div class=\\\"pull-right col-md-1\\\">\\n                              <button type=\\\"submit\\\" (click)=\\\"saveNoteReply(dt.note_id, dt)\\\" style=\\\"background-color:transparent; border:none; margin-top: 3px;\\\">\\n                                <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i>\\n                              </button>\\n                            </div>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </li>\\n              </ul>\\n            </div>\\n            <div class=\\\"modal-footer clearfix footer-comments-users\\\">\\n              <div class=\\\"row\\\">\\n                <div class=\\\"pull-left col-md-11\\\">\\n                  <div class=\\\"pull-left col-md-12\\\" style=\\\"background-color:white; height: 24px;\\\">\\n                    <input type=\\\"text\\\" class=\\\"pull-left col-md-12 imput-comments\\\" [(ngModel)]=\\\"note.note_text\\\"\\n                      placeholder=\\\"New Comment\\\">\\n                  </div>\\n                </div>\\n                <div class=\\\"pull-right col-md-1\\\">\\n                  <button type=\\\"submit\\\" (click)=\\\"saveNote()\\\" class=\\\"button-save-comment-sqlx\\\">\\n                    <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i>\\n                  </button>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"col-sm-12 col-lg-6 comments-project\\\" style=\\\"margin-left: 31px;\\\">\\n            <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;\\\">\\n              <div class=pull-left style=\\\"padding:2px; margin:2px;\\\">\\n                <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 23px!important\\\"></i>\\n              </div>\\n              <div class=\\\"pull-rigth\\\" style=\\\"padding:2px; margin:2px; margin-top: 6px;\\\">\\n                <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold;\\\">STATUS TASKS</span>\\n              </div>\\n            </div>\\n            <div class=\\\"content-status-tasks\\\">\\n              <div class=\\\"box-body\\\" style=\\\"min-width: 200px;\\\">\\n                <table class=\\\"table table-bordered-sqlx table-hover table-striped table-projects\\\">\\n                  <tr>\\n                    <th style=\\\"width: 10px; text-align:center;\\\">#</th>\\n                    <th style=\\\"width: 80px; text-align:center;\\\">Task</th>\\n                    <th style=\\\"width: 50px; text-align:center;\\\">Progress</th>\\n                    <th style=\\\"width: 15px; text-align:center;\\\">Delivery Date</th>\\n                  </tr>\\n                  <tr *ngFor=\\\"let tks of statustasks | paginate : { currp : currentpage, limit : limitpage}\\\">\\n                    <td>\\n                      <span class=\\\"span-sqlx\\\" (click)=\\\"showModal(tks)\\\" style=\\\"text-align: center; cursor: pointer; font-size: 14px;\\\">{{tks.task\\n                        }}</span>\\n                      <taskview [myTaskId]=\\\"tks.task\\\"></taskview>\\n                    </td>\\n                    <td>\\n                      <span class=\\\"span-sqlx\\\" style=\\\"font-size: 14px;\\\">{{ tks.subject }}</span>\\n                    </td>\\n                    <td style=\\\"text-align: center;\\\">\\n                      <span class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tks.points}}%</span>\\n                      <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                        <div class=\\\"success-tasks-request\\\" [ngStyle]=\\\"{ 'width': tks.points + '%' }\\\">\\n                        </div>\\n                      </div>\\n                    </td>\\n                    <td style=\\\"text-align: center;\\\">\\n                      <span class=\\\"span-sqlx\\\" style=\\\"font-size: 14px;\\\">{{ tks.datedelivery }}</span>\\n                    </td>\\n                  </tr>\\n                </table>\\n\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"statustasks\\\">\\n              <div class=\\\"box-footer clearfix\\\">\\n                <div class=\\\"pagination pagination-sm no-margin pull-right\\\">\\n                  {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) > (statustasks).length\\n                  ? (statustasks).length\\n                  : (limitpage * currentpage) }} / {{ (statustasks).length }}\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setPage(0)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                      <i aria-hidden=\\\"true\\\" class=\\\"fa fa-step-backward\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setPage(1)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                      <i aria-hidden=\\\"true\\\" class=\\\"fa fa-step-forward\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddMilestone\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-milestone\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">Add Milestone</h4>\\n        </div>\\n        <!--.modal-header-->\\n        <div class=\\\"modal-body\\\" style=\\\"height:500px;\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"pull left col-xs-6 col-sm-7 col-md-7 col-lg-7 calendar-squadlinx\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Date</label>\\n                  <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"milestone.meet_datex\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                    [showTime]=\\\"true\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                    [monthNavigator]=\\\"true\\\" [minDate]=\\\"minDate\\\" [maxDate]=\\\"maxDate\\\"></p-calendar>\\n                </div>\\n              </div>\\n              <!--.delivery date-->\\n              <div class=\\\"pull-right col-xs-6 col-sm-5 col-md-5 col-lg-5\\\">\\n                <div class=\\\"form-group dropdownSqlx\\\">\\n                  <label style=\\\"color:#707070;\\\">Owner\\n                    <i *ngIf=\\\"!milestone.user_owner \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i>\\n                  </label>\\n                  <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"milestone.user_owner\\\"\\n                    placeholder=\\\"Select Owner\\\" filter=\\\"filter\\\"></p-dropdown>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0;\\\">\\n            <label style=\\\"padding-left: 17px; color:#707070;\\\" class=\\\"control-label col-xs-10 col-md-10\\\">Description\\n              <i *ngIf=\\\"!milestone.pjml_description \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i>\\n            </label>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <textarea name=\\\"textarea\\\" rows=\\\"5\\\" cols=\\\"70\\\" class=\\\"col-xs-12 input-description-milestone\\\" [(ngModel)]=\\\"milestone.pjml_description\\\"\\n                style=\\\"resize: vertical;\\\"></textarea>\\n            </div>\\n          </div>\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"form-group\\\">\\n              <label style=\\\"padding-top: 15px; color: #707070;\\\">Meeting Title\\n                <i *ngIf=\\\"!milestone.meet_text \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i>\\n              </label>\\n              <input style=\\\"border-radius:15px;\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"milestone.meet_text\\\" placeholder=\\\"Meeting Title\\\">\\n            </div>\\n          </div>\\n          <!-- Meeting Tittle -->\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"form-group dropdownSqlx\\\">\\n              <label style=\\\"color: #707070;\\\">Place\\n                <i *ngIf=\\\"!milestone.para_place \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i>\\n              </label>\\n              <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plmt\\\" [(ngModel)]=\\\"milestone.para_place\\\"\\n                placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n            </div>\\n          </div>\\n          <!--meeting Place -->\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n              <label style=\\\"color: #707070;\\\">Share with\\n                <!-- <i *ngIf=\\\"milestone.usershared == '' \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i> -->\\n              </label>\\n              <span class=\\\"ui-fluid\\\">\\n                <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"milestone.usershared\\\" [suggestions]=\\\"usersShareWith\\\"\\n                  (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\"\\n                  field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                </p-autoComplete>\\n              </span>\\n            </div>\\n          </div>\\n        </div>\\n        <!--.modal-body-->\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\" style=\\\"margin-right: 15px;\\\">\\n            <button type=\\\"btn btn-default\\\" class=\\\"btn-done-milestone\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"submit\\\" class=\\\"btn btn-primary btn-done-milestone\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateMiles()\\\"\\n              (click)=\\\"saveMilestone()\\\" style=\\\"border:none; background-color: #A4CB5B;\\\">Save</button>\\n\\n          </div>\\n        </div>\\n        <!--.modal-footer-->\\n      </div>\\n      <!--.modal-content-->\\n    </div>\\n    <!--.modal-dialog-->\\n  </div>\\n\\n  <!--Modal edit project-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdproject\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content-params\\\">\\n        <div *ngIf=\\\"myproj.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"sq sq-myprojs\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + myproj.proj_id + \\\" - \\\" +\\n            myproj.proj_subject}}</h4>\\n        </div>\\n        <div *ngIf=\\\"!myproj.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"sq sq-myprojs\\\" aria-hidden=\\\"true\\\"></i>&nbsp;&nbsp; New myproj</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Subject</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"myproj.proj_subject\\\" name=\\\"myproj_subject\\\"\\n                  placeholder=\\\"Subject\\\">\\n              </div>\\n            </div>\\n            <!--.subject-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>User Applicant</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"applicantlbl\\\"\\n                  [(ngModel)]=\\\"myproj.user_applicant\\\" placeholder=\\\"Select a user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.user applicant-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Group</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\"\\n                  [(ngModel)]=\\\"myproj.group_assigned\\\" placeholder=\\\"Select a Group\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.group-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                  [(ngModel)]=\\\"myproj.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.product-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myproj.proj_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                  [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <!--.delivery date-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Estimated Points</label>\\n                <input type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"myproj.proj_propoints\\\" [step]=\\\"0.25\\\"\\n                  [min]=\\\"0\\\">\\n              </div>\\n            </div>\\n            <!--.estimates points-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                <label>Share with</label>\\n                <span class=\\\"ui-fluid\\\">\\n                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myproj.userssh\\\" [suggestions]=\\\"usersShareWith\\\"\\n                    (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\"\\n                    field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                  </p-autoComplete>\\n                </span>\\n              </div>\\n            </div>\\n          </div>\\n          <!--.share with-->\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                <a id=\\\"editProject-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_project\\\" (click)=\\\"setPageMenu(1)\\\">Description</a>\\n              </li>\\n              <li *ngIf=\\\"myproj.attachments && myproj.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                <a id=\\\"editProject-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_project\\\" (click)=\\\"setPageMenu(2)\\\">Attachments\\n                  <span>({{myproj.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n\\n            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor [(ngModel)]=\\\"myproj.proj_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"attachments_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of myproj.attachments\\\">\\n                      <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\" style=\\\" overflow-x: scroll;\\\">\\n                        <a id=\\\"href-attp2-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.pjat_name}}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentProject(myproj,att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n              Close\\n            </button>\\n            <button type=\\\"submit\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateProj()\\\"\\n              (click)=\\\"savemyproj()\\\" style=\\\"padding: 5px 12px;\\\"> Save\\n            </button>\\n          </div>\\n          <div class=\\\"pull-left\\\">\\n            <label for=\\\"file-upload\\\" class=\\\"custom-file-upload custom-upload-form-projectlist\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!--.Modal edit Project-->\\n  <!--.modal fade-->\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 827 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n/* WEBPACK VAR INJECTION */(function($) {\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nexports.ProjectViewComponent = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dec, _dec2, _class, _desc, _value, _class2, _descriptor;\n\nvar _core = __webpack_require__(0);\n\nvar _router = __webpack_require__(5);\n\nvar _ngxToastr = __webpack_require__(7);\n\nvar _platformBrowser = __webpack_require__(6);\n\nvar _primeng = __webpack_require__(10);\n\nvar _project = __webpack_require__(18);\n\nvar _note = __webpack_require__(24);\n\nvar _pipes = __webpack_require__(14);\n\nvar _projectviewTemplate = __webpack_require__(828);\n\nvar _projectviewTemplate2 = _interopRequireDefault(_projectviewTemplate);\n\nvar _IfObservable = __webpack_require__(100);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _initDefineProp(target, property, descriptor, context) {\n    if (!descriptor) return;\n    Object.defineProperty(target, property, {\n        enumerable: descriptor.enumerable,\n        configurable: descriptor.configurable,\n        writable: descriptor.writable,\n        value: descriptor.initializer ? descriptor.initializer.call(context) : void 0\n    });\n}\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _applyDecoratedDescriptor(target, property, decorators, descriptor, context) {\n    var desc = {};\n    Object['ke' + 'ys'](descriptor).forEach(function (key) {\n        desc[key] = descriptor[key];\n    });\n    desc.enumerable = !!desc.enumerable;\n    desc.configurable = !!desc.configurable;\n\n    if ('value' in desc || desc.initializer) {\n        desc.writable = true;\n    }\n\n    desc = decorators.slice().reverse().reduce(function (desc, decorator) {\n        return decorator(target, property, desc) || desc;\n    }, desc);\n\n    if (context && desc.initializer !== void 0) {\n        desc.value = desc.initializer ? desc.initializer.call(context) : void 0;\n        desc.initializer = undefined;\n    }\n\n    if (desc.initializer === void 0) {\n        Object['define' + 'Property'](target, property, desc);\n        desc = null;\n    }\n\n    return desc;\n}\n\nfunction _initializerWarningHelper(descriptor, context) {\n    throw new Error('Decorating class property failed. Please ensure that transform-class-properties is enabled.');\n}\n\nvar ProjectViewComponent = exports.ProjectViewComponent = (_dec = (0, _core.Component)({\n    selector: \"projectview\",\n    template: _projectviewTemplate2.default,\n    pipes: [_pipes.TruncatePipe, _pipes.PaginatePipe, _pipes.FilterPipe, _pipes.FilterfieldPipe, _pipes.OrderPipe],\n    providers: [_primeng.ConfirmationService]\n}), _dec2 = (0, _core.Input)(), _dec(_class = (_class2 = function () {\n    function ProjectViewComponent(title, route, sanitizer, toastr, ProjectService, noteService, confirmationService) {\n        _classCallCheck(this, ProjectViewComponent);\n\n        _initDefineProp(this, \"myProjectId\", _descriptor, this);\n\n        this._title = title;\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._projects = ProjectService;\n        this._notes = noteService;\n        this.confirm = confirmationService;\n        this.project = { users: [], attachments: [] };\n        this.total_attachments = 0;\n        this.isLoading = false;\n        this.search = \"\";\n        this.comments = [];\n        this.note = {};\n    }\n\n    _createClass(ProjectViewComponent, [{\n        key: \"ngOnInit\",\n        value: function ngOnInit() {}\n    }, {\n        key: \"showModalProject\",\n        value: function showModalProject() {\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            this.project = { users: [], attachments: [] };\n            this.note = {};\n            // var proj_id = this.myProjectId;\n            this.getProject(this.myProjectId);\n            this.getComments(this.myProjectId);\n        }\n    }, {\n        key: \"getProject\",\n        value: function getProject(proj_id) {\n            var _this = this;\n\n            this._projects.getproject(proj_id).subscribe(function (res) {\n\n                _this.project = res.data;\n                _this.project.proj_description = _this.escapeHtml(_this.project.proj_description);\n                _this.project.attachments = res.data.attachments;\n                _this.total_attachments = res.data.attachments.length;\n                $(\"#mdProjectView-\" + _this.myProjectId).modal(\"show\");\n            });\n        }\n    }, {\n        key: \"getComments\",\n        value: function getComments(proj_id) {\n            var _this2 = this;\n\n            this.isLoading = true;\n            this._projects.getCommentsUsers(proj_id).subscribe(function (res) {\n                _this2.comments = res.data;\n                _this2.isLoading = false;\n            });\n            this.note_text = \"\";\n            this.note = {};\n        }\n    }, {\n        key: \"escapeHtml\",\n        value: function escapeHtml(text) {\n            if (!text) {\n                text = \"\";\n            }\n            text += \"\";\n            text = text.replace(/&amp;/g, \"&\").replace(/&lt;/g, \"<\").replace(/&gt;/g, \">\").replace(/&quot;/g, '\"').replace(/&#039;/g, \"'\");\n            return text;\n        }\n    }, {\n        key: \"noteAdd\",\n        value: function noteAdd(proj_id) {\n            var _this3 = this;\n\n            this.isLoading = true;\n            this.note.proj_id = proj_id;\n            if (this.note.note_text == undefined && this.note_text != null && this.note_text != \"\") {\n                this.note.note_text = this.note_text;\n            }\n\n            this._notes.putNote(this.note).subscribe(function (res) {\n                _this3.note.user_creator = _this3.comments.creator;\n                _this3.isLoading = false;\n                if (res.data != null) {\n                    _this3.getComments(proj_id);\n                } else {\n                    _this3.toastr.warning(\"\", res.message);\n                    $(\".textarea-comments\").val(\"\");\n                }\n            });\n\n            this.note = {};\n        }\n    }]);\n\n    return ProjectViewComponent;\n}(), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, \"myProjectId\", [_dec2], {\n    enumerable: true,\n    initializer: function initializer() {\n        return this.myProjectId;\n    }\n})), _class2)) || _class);\nReflect.defineMetadata(\"design:paramtypes\", [_platformBrowser.Title, _router.Router, _platformBrowser.DomSanitizer, _ngxToastr.ToastrService, _project.ProjectService, _note.NoteService, _primeng.ConfirmationService], ProjectViewComponent);\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4)))\n\n/***/ }),\n/* 828 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<button type=\\\"button\\\" [attr.id]=\\\"'myProject'+myProjectId\\\" (click)=\\\"showModalProject()\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n    style=\\\"display:none;\\\">\\n</button>\\n<div class=\\\"modal modal-task fade\\\" [attr.id]=\\\"'mdProjectView-'+myProjectId\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n        <div [attr.id]=\\\"'primerdiv'+myProjectId\\\" class=\\\"modal-content content_modal_projectView\\\">\\n            <div class=\\\"modal-header header-project\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                    <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <div style=\\\"overflow-y: scroll;max-height: 25px;\\\">\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>{{\\\" \\\" + project.proj_id + \\\"-\\\" +\\n                        project.proj_subject }}\\n                    </h4>\\n                </div>\\n            </div>\\n\\n            <div [attr.id]=\\\"'segundoDiv'+myProjectId\\\" class=\\\"modal-body body_modal_projectView\\\">\\n                <div class=\\\"row\\\">\\n                    <!--Listado opciones-->\\n                    <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\">\\n                        <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                            <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                                <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                                    id=\\\"tabsTaskview\\\">\\n                                    <li class=\\\"active\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#infoProj-{{project.proj_id}}\\\">Info</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"project.tasklist && project.tasklist.length > 0\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#projTasks-{{project.proj_id}}\\\">Tasks</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"project.attachments && project.attachments.length > 0 \\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#projAttachments-{{project.proj_id}}\\\">Attachments</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#projComment-{{project.proj_id}}\\\">Comments</a>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--. Listado opciones-->\\n\\n                    <!--Contenido secciones del project view-->\\n                    <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"min-height: 390px;\\\">\\n                        <div class=\\\"tab-content\\\">\\n                            <!--Informacion project-->\\n                            <div [attr.id]=\\\"'infoProj-'+project.proj_id\\\" class=\\\"tab-pane fade in active\\\">\\n                                <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creator</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.creator}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.applicant}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.groupname}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.proj_start}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">End Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.proj_end}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Estimated Points</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.proj_propoints}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.prod_name}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Done Points</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.proj_compoints}}</p>\\n                                    </div>\\n                                    <div *ngIf=\\\"project.userssh && project.userssh.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                        style=\\\"float: left; text-align: left;\\\">\\n                                        <label class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 label-sqlx label_sharedWithTask_sqlx\\\">Shared\\n                                            with</label>\\n                                        <p class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 element_p_sqlx info_sharedWhitTask_sqlx\\\"\\n                                            *ngFor=\\\"let user_share of project.userssh\\\">{{user_share.completename}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"project.proj_description\\\"\\n                                            style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--.Informacion project-->\\n\\n\\n                            <!--Tasks project-->\\n                            <div [attr.id]=\\\"'projTasks-'+project.proj_id\\\" class=\\\"tab-pane fade cont_tasksProject_sqlx\\\">\\n                                <div *ngFor=\\\"let task of project.tasklist\\\" class=\\\"div_taskProject_sqlx\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infoGeneralTask_sqlx\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">\\n                                            <i class=\\\"sq sq-statustasks iconTask_taskProj_sqlx\\\"></i>\\n                                            <span style=\\\"font-weight: bold; color: rgb(113, 113, 113);\\\">#\\n                                                {{task.task_id}} - {{task.task_subject}}</span>\\n                                        </label>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 divCol_descriptionTask_taskProj\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 12px;\\\">\\n                                            <label class=\\\"control-label label-sqlx label_infoDescriptionTask_taskProj_sqlx\\\">Description</label>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infoDescriptionTask_taskProj_sqlx\\\"\\n                                                [innerHTML]=\\\"task.task_description\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Creator</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.creator}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Assigned\\n                                                to</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.asigned}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Creation\\n                                                Date</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.task_date}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"min-height: 53px;\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Delivery\\n                                                Date</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.datedelivery ? task.datedelivery :\\n                                                []}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Status</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.status}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationProgressTaskProject_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"><span class=\\\"descriptionProgressTask_taskProj_sqlx\\\">Progress</span><span\\n                                                    class=\\\"span_numeProgress_taskProject\\\">{{task.task_percentage}}%</span></label>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                <div *ngIf=\\\"task.task_percentage > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 progress-taskRelated-sqlx\\\">\\n                                                    <div class=\\\"infoBarraProgress_taskProject\\\" [ngStyle]=\\\"{ 'width': task.task_percentage  + '%' }\\\"></div>\\n                                                </div>\\n                                                <div *ngIf=\\\"task.task_percentage == 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 progress-taskRelated-sqlx\\\">\\n                                                    <div class=\\\"info_barraProgress_ifcero_taskRelated\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                            <!--.Tasks project-->\\n\\n                            <!--Attachments project-->\\n                            <div [attr.id]=\\\"'projAttachments-'+project.proj_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div *ngIf=\\\"!project.attachments\\\" class=\\\"row\\\">\\n\\n                                </div>\\n                                <div class=\\\"row\\\" *ngIf=\\\"project.attachments && project.attachments.length > 0\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"height: 407px;font-size: 14px;\\\">\\n                                        <label>Attachments ({{total_attachments}})</label>\\n                                        <ul class=\\\"ul_taskAttachments_taskview\\\">\\n                                            <li *ngFor=\\\"let att of project.attachments\\\" style=\\\"width:200px;margin:5px;height:225px;\\\"\\n                                                class=\\\"pull-left\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"fa fa-paperclip\\\"></i>{{ att.pjat_alias }}</a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.pjat_size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--. Attachments project-->\\n\\n                            <!--Comments Project-->\\n                            <div [attr.id]=\\\"'projComment-'+project.proj_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div class=\\\"row\\\" style=\\\" margin-right: 0px;\\\">\\n                                    <div class=\\\"box-footer box-comments commentsProjectView-squadlinx\\\">\\n                                        <div class=\\\"content-comments-users commentsContents_squadlinx\\\">\\n                                            <ul class=\\\"timeline comment-timeline-tk ul_mdTcomments_sqlx\\\">\\n                                                <li class=\\\"li_mdTcomments_sqlx\\\" *ngFor=\\\"let comment of comments\\\">\\n                                                    <div class=\\\"icon-team-sprint div_usuarioComment_sqlx\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team icono_usuarioComment_sqlx\\\"\\n                                                            aria-hidden=\\\"true\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <span class=\\\"time\\\">\\n                                                            {{comment.note_date}}</span>\\n                                                        <h3 class=\\\"timeline-header comment-timeline-header h3_commented_sqlx\\\">\\n                                                            <b class=\\\"name_creator_comment_sqlx\\\">{{comment.creator + \\\"\\n                                                                \\\"}}</b>\\n                                                            <span class=\\\"text_commented_sqlx\\\">Commented</span>\\n                                                        </h3>\\n                                                        <div class=\\\"timeline-body div_fatherComment_sqlx\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div class=\\\"col-xs-12 col-md-12 div_comentUser_sqlx\\\">\\n                                                                    <div class=\\\"col-xs-12 col-md-12 comment-user divDiv_comentUser_sqlx\\\">\\n                                                                        <p class=\\\"comment-user p_comentUser_sqlx\\\">\\n                                                                            <i class=\\\"sq sq-comments icon_textComment_sqlx\\\"\\n                                                                                aria-hidden=\\\"true\\\"></i>\\n                                                                            <span class=\\\"text_comment_squadlinx\\\">{{escapeHtml(comment.note_text)}}</span>\\n                                                                        </p>\\n                                                                    </div>\\n                                                                    <div *ngIf=\\\"comment.childs.length > 0\\\" style=\\\"background-color:rgb(238, 242, 244)\\\">\\n                                                                        <div *ngFor=\\\"let comment_child of comment.childs\\\"\\n                                                                            class=\\\"col-xs-12 col-md-12 reply-user\\\"\\n                                                                            style=\\\"padding-top:10px;margin-left:0px; padding-top:0px;background-color:rgb(238, 242, 244);\\\">\\n                                                                            <div class=\\\"pull-right reply-comment\\\" style=\\\"color:rgb(130, 145, 152); background-color:rgb(238, 242, 244)!important; padding-right:0px;\\\">\\n                                                                                <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                                                    <span style=\\\"color: #999;float: right;font-size: 12px; padding-right: 0px;\\\">\\n                                                                                        {{comment_child.note_date}}</span>\\n                                                                                    <h3 class=\\\"reply-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                                        <b>{{comment_child.creator}}</b>\\n                                                                                        replied\\n                                                                                    </h3>\\n                                                                                    <p class=\\\"reply-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                                        <i class=\\\"sq sq-comments\\\"\\n                                                                                            aria-hidden=\\\"true\\\" style=\\\"color:rgb(68, 180, 248); font-size: 16px;\\\"></i>\\n                                                                                        {{escapeHtml(comment_child.note_text)}}\\n                                                                                    </p>\\n                                                                                </div>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer footer_newsComments_sqlx\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-sm button_leaveComment_sqlx\\\" data-toggle=\\\"collapse\\\"\\n                                            [attr.data-target]=\\\"'#collapse-'+ project.proj_id\\\">\\n                                            <div class=\\\"pull-left\\\">\\n                                                <i class=\\\"sq sq-comments i_leaveComment_sqlx\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"pull-right div_leaveComment_sqlx\\\">\\n                                                Leave a Comment\\n                                            </div>\\n                                        </button>\\n                                        <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                                            <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                                            <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                                        </div>\\n                                        <div [attr.id]=\\\"'collapse-' + project.proj_id\\\" class=\\\"panel-collapse collapse panel_newComment_sqlx\\\">\\n                                            <textarea class=\\\"textarea-comments textarea_comments_squadlinx\\\" [(ngModel)]=\\\"note.note_text\\\"\\n                                                style=\\\"max-height: 130px;\\\"></textarea>\\n                                            <div class=\\\"pull-right\\\">\\n                                                <button class=\\\"btn btn-sm btn-sqlx button_publishComment_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"noteAdd(project.proj_id)\\\" [disabled]=\\\"note.text == ''\\\"\\n                                                    data-toggle=\\\"collapse\\\" [attr.data-target]=\\\"'#collapse-'+ project.proj_id\\\">Publish\\n                                                </button>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--. Comments Project-->\\n                        </div>\\n                    </div>\\n                    <!--. Contenido secciones del project view-->\\n                </div>\\n\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close\\n                </button>\\n            </div>\\n        </div>\\n    </div>\\n</div>\";\n\n/***/ }),\n/* 829 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"tasks\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <!-- <h1><img src=\\\"img/newmegrey_mailbox.svg\\\" id=\\\"envelope-mail\\\" alt=\\\"\\\">Mail</h1> -->\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-mail\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> MAIL\\n            <small style=\\\"font-size:15px;\\\">Home</small>\\n        </h2>\\n        <!--<ol class=\\\"breadcrumb\\\">\\n<li><a href=\\\"#\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n<li class=\\\"active\\\">Mailbox</li>\\n</ol>-->\\n    </section>\\n    <section class=\\\"content-mail\\\">\\n        <div class=\\\"container-fluid\\\">\\n            <div class=\\\"row\\\" style=\\\"background:#fff\\\">\\n                <div class=\\\"col-xs-12 col-sm-4 col-lg-2\\\" style=\\\"padding: 0px;\\\">\\n                    <div class=\\\"left-col-opt-mail\\\">\\n                        <div>\\n                            <div class=\\\"box-header-col1\\\" style=\\\"height:50px;\\\">\\n                                <div class=\\\"box-tools\\\" style=\\\"margin-top:5px;\\\">\\n                                    <div class=\\\"has-feedback-mail\\\">\\n                                        <!--<input type=\\\"text\\\" class=\\\"form-control input-sm\\\" placeholder=\\\"Search\\\" [(ngModel)]=\\\"search\\\">-->\\n                                        <!--<span lass=\\\"glyphicon glyphicon-search form-control-feedback\\\"></span>-->\\n                                        <h4>Mailboxes</h4>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div style=\\\" width:100%;\\\">\\n                                <!-- <div style=\\\"overflow: scroll; width:100%; height:450px; margin-bottom:15px;\\\">\\n<p-tree [value]=\\\"foldersTree\\\" selectionMode=\\\"checkbox\\\" [(selection)]=\\\"selectedNodes\\\" (onNodeSelect)=\\\"updateSelect($event)\\\" (onNodeUnselect)=\\\"updateSelect($event)\\\"></p-tree>\\n</div> -->\\n                                <section class=\\\"sidebar-mail\\\">\\n                                    <ul class=\\\"sidebar-menu-mail\\\" style=\\\"padding-left: 16px;\\\">\\n                                        <!---->\\n                                        <li id=\\\"inbox-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-inbox\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Inbox</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"inbox-children\\\" class=\\\"treeview-menu-mail\\\" style=\\\"padding:0px;\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','INBOX')\\\">\\n                                                        <i class=\\\"sq sq-inbox\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n                                        <li id=\\\"draft-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-drafts\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Drafts</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"draft-children\\\" style=\\\"display:none;padding:0px;\\\" class=\\\"treeview-menu-mail\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','Drafts')\\\">\\n                                                        <i class=\\\"sq sq-drafts\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n                                        <li id=\\\"sent-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-sent\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Sent</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"sent-children\\\" style=\\\"display:none;padding:0px;\\\" class=\\\"treeview-menu-mail\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','Sent')\\\">\\n                                                        <i class=\\\"sq sq-sent\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n                                        <li id=\\\"junk-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-spam\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Spam</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"junk-children\\\" style=\\\"display:none;padding:0px;\\\" class=\\\"treeview-menu-mail\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','Junk')\\\">\\n                                                        <i class=\\\"sq sq-spam\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n\\n                                        <li id=\\\"trash-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-trash\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Trash</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"trash-children\\\" style=\\\"display:none;padding:0px;\\\" class=\\\"treeview-menu-mail\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','Trash')\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n                                        <li class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\">\\n                                            <a style=\\\"cursor: pointer;\\\">\\n                                                <img src=\\\"img/groupsi_mailbox.svg\\\" id=\\\"groups-mail\\\" alt=\\\"\\\">\\n                                                <span>My groups</span>\\n                                            </a>\\n                                        </li>\\n                                        <!---->\\n                                        <li class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\">\\n                                            <a style=\\\"cursor: pointer;\\\" (click)=\\\"showSettings(1)\\\">\\n                                                <i class=\\\"sq sq-settings\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Settings</span>\\n                                            </a>\\n                                        </li>\\n                                    </ul>\\n                                </section>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"activemenu == 0\\\" class=\\\"col-xs-12 col-sm-8 col-lg-3\\\" style=\\\"padding: 0;\\\">\\n                    <div class=\\\"box-header-mail with-border-mail\\\" style=\\\"height:50px;\\\">\\n                        <div style=\\\"float:left;\\\">\\n                            <h5 (click)=\\\"selectAll()\\\">\\n                                <i *ngIf=\\\"selmails.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                <i *ngIf=\\\"selmails.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i> Select All\\n                            </h5>\\n                        </div>\\n                        <div *ngIf=\\\"selmails.length > 0 \\\" style=\\\"float:right;\\\">\\n                            <h5 (click)=\\\"showActionMenu()\\\">Actions <i aria-hidden=\\\"true\\\" class=\\\"fa fa-code-fork\\\"></i></h5>\\n                        </div>\\n                        <div style=\\\"float:right;\\\">\\n                            <h5 (click)=\\\"showSortMenu()\\\" style=\\\"cursor:default;\\\">Sort by <i aria-hidden=\\\"true\\\" class=\\\"fa fa-code-fork\\\"></i></h5>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"box-body-mail\\\">\\n                        <div>\\n                            <div id=\\\"sort-menu\\\" class=\\\"order-menu\\\">\\n                                <p-listbox [options]=\\\"sortoptions\\\" [(ngModel)]=\\\"selectedOption\\\" [style]=\\\"{'width':'180px','margin':'0 auto'}\\\"\\n                                    optionLabel=\\\"label\\\" (click)=\\\"changeSortOption(selectedOption)\\\"></p-listbox>\\n                                <hr style=\\\"margin:0px;\\\">\\n                                <p-listbox [options]=\\\"sortorder\\\" [(ngModel)]=\\\"selectedOrder\\\" [style]=\\\"{'width':'180px','margin':'0 auto'}\\\"\\n                                    optionLabel=\\\"label\\\" (click)=\\\"changeSortOption(selectedOption)\\\"></p-listbox>\\n                            </div>\\n                            <div id=\\\"action-menu\\\" class=\\\"order-menu\\\">\\n                                <ul style=\\\"list-style-type: none; padding-left: 20px;\\\" class=\\\"radio\\\">\\n                                    <li (click)=\\\"emailAction('read')\\\">Mark as read</li>\\n                                    <li (click)=\\\"emailAction('unread')\\\">Mark as unread</li>\\n                                    <li (click)=\\\"emailAction('trash')\\\">Move to trash</li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                        <div style=\\\"height:600px;overflow:scroll;\\\">\\n                            <div *ngIf=\\\"spinner == true && emails.length == 0\\\" class=\\\"sk-fading-circle\\\">\\n                                <div class=\\\"sk-circle1 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle2 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle3 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle4 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle5 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle6 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle7 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle8 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle9 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle10 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle11 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle12 sk-circle\\\"></div>\\n                            </div>\\n                            <div id=\\\"mail-{{email.number}}acc-{{email.accountid}}\\\" class=\\\"inbox_mail email_element\\\" *ngFor=\\\"let email of emails | filterfield : { pos: posFlag, text: selectedFlag } | filterfield : { pos: posFolder, text: selectedFolders } | paginate : { currp : currentpage, limit : limitpage} \\\" (click)=\\\"streamMessage(email)\\\" [ngStyle]=\\\"email.proj_id ? { 'background': 'rgba(255, 0, 0, 0.13)' } : {}\\\" [ngClass]=\\\"{'email_unread': email.status == 'U','email_selected': selmails.indexOf(email.number) >= 0}\\\">\\n                                <div *ngIf=\\\"email.sender != '' || email.sender != null\\\">\\n                                    <p><i id=\\\"unread{{email.number}}{{email.accountid}}\\\" *ngIf=\\\"email.status == 'U'\\\"\\n                                            class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(25,110,198);margin-right:10px;\\\"></i>{{email.sender\\n                                        | truncate : 15}}<i *ngIf=\\\"email.attachments.length > 0\\\" class=\\\"fa fa-paperclip\\\"\\n                                            aria-hidden=\\\"true\\\" style=\\\"color:rgb(25,110,198)\\\"></i></p>\\n                                </div>\\n                                <p id=\\\"inbox_date\\\">{{calculateTime(email.date)}}</p>\\n                                <div *ngIf=\\\"email.subject && (email.subject != '' || email.subject != null)\\\">\\n                                    <p>{{email.subject | truncate : 90}}</p>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"height:70px;\\\">\\n                        <div class=\\\"mailbox-controls\\\">\\n                            <!-- Check all button -->\\n                            <!--<button type=\\\"button\\\" class=\\\"btn btn-default btn-sm checkbox-toggle\\\"><i class=\\\"fa fa-square-o\\\"></i>\\n                            </button>-->\\n                            <!--<div class=\\\"btn-group\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-trash-o\\\"></i></button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-reply\\\"></i></button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-share\\\"></i></button>\\n                            </div>-->\\n                            <!-- /.btn-group -->\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-refresh\\\"></i></button>\\n                            <div class=\\\"pull-right\\\">\\n                                {{ topmail }} - {{ botmail }} / {{ totalmsg }}\\n                                <div class=\\\"btn-group\\\">\\n                                    <button type=\\\"button\\\" [disabled]=\\\" (topmail == 1 || topmail == 0)\\\" class=\\\"btn btn-default btn-sm\\\"\\n                                        (click)=\\\"setCurPage(0)\\\"><i class=\\\"fa fa-chevron-left\\\"></i></button>\\n                                    <button type=\\\"button\\\" [disabled]=\\\" (botmail == totalmsg)\\\" class=\\\"btn btn-default btn-sm\\\"\\n                                        (click)=\\\"setCurPage(1)\\\"><i class=\\\"fa fa-chevron-right\\\"></i></button>\\n                                </div>\\n                                <!-- /.btn-group -->\\n                            </div>\\n                            <!-- /.pull-right -->\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"activemenu == 0\\\" class=\\\"col-xs-12 col-sm-12 col-lg-7\\\" style=\\\"padding: 0;\\\">\\n                    <div>\\n                        <div class=\\\"box-header-mail with-border-mail\\\" style=\\\"height:50px;\\\">\\n                            <div class=\\\"btn-group\\\" style=\\\"float:left;\\\">\\n                                <h5 style=\\\"cursor:default;\\\" (click)=\\\"showNewMessage()\\\"><i class=\\\"sq sq-mail\\\"></i>New\\n                                    Message</h5>\\n                            </div>\\n                            <div class=\\\"btn-group\\\" style=\\\"float: right;\\\">\\n                                <div class=\\\"mailbox-controls\\\">\\n                                    <div>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/archive_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/trash_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/spam_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/reply_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/replyall_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/label_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div>\\n                            <div *ngIf=\\\"spinner == true && !mymail.htmlmsg && emails.length > 0\\\" class=\\\"sk-fading-circle \\\">\\n                                <div class=\\\"sk-circle1 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle2 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle3 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle4 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle5 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle6 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle7 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle8 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle9 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle10 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle11 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle12 sk-circle\\\"></div>\\n                            </div>\\n                            <div *ngIf=\\\"mymail && mymail.htmlmsg\\\" class=\\\"mailbox-messages\\\">\\n                                <div class=\\\"inbound-info\\\">\\n                                    <div class=\\\"col-lg-6 inbound-data\\\">\\n                                        <p>{{mymail.sender_personal}}</p>\\n                                        <p>{{mymail.subject}}</p>\\n                                        <p>TO: {{mymail.to}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-lg-6 inbound-date\\\">\\n                                        <img src=\\\"img/inbox_mailbox.svg\\\" id=\\\"inbox\\\">{{mymail.date}}\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"inbound-attachment\\\">\\n                                    <div class=\\\"col-xs-1 attachment-data\\\" style=\\\"border-right: 1px solid black\\\">\\n                                        <img src=\\\"img/clip_mailbox.svg\\\" id=\\\"clip\\\" alt=\\\"\\\">\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"mail-message\\\">\\n                                    <iframe id=\\\"someFrame\\\" sandbox=\\\"allow-scripts allow-same-origin allow-top-navigation allow-popups allow-forms\\\"\\n                                        style=\\\"width: 100%; min-height: 600px; border: 0px;\\\" #iframe></iframe>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"activemenu==1\\\" class=\\\"col-xs-12 col-sm-8 col-lg-3\\\" style=\\\"padding: 0;\\\">\\n                    <div class=\\\"box-header-mail with-border-mail\\\" style=\\\"height:50px;\\\">\\n                        Account Manager\\n                    </div>\\n                    <div class=\\\"box-body-mail\\\" style=\\\"min-height:500px;border-right:1px solid #dce3e6;\\\">\\n                        <div class=\\\"inbox_mail\\\" *ngFor=\\\"let mailacc of mailaccounts\\\" (click)=\\\"getAccountDetails(mailacc)\\\">\\n                            <p><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" [ngStyle]=\\\"{'color': mailacc.status}\\\" style=\\\"margin-right:10px;\\\"></i>{{mailacc.name\\n                                | truncate : 20}}</p>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"activemenu == 1\\\" class=\\\"col-xs-12 col-sm-12 col-lg-7\\\" style=\\\"padding: 0;\\\">\\n                    <div class=\\\"box-header-mail with-border-mail\\\" style=\\\"height:50px;\\\">\\n                        <div class=\\\"btn-group\\\" style=\\\"float: right;\\\">\\n                            <div class=\\\"mailbox-controls\\\">\\n                                <div>\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"editAccount()\\\"><i\\n                                            class=\\\"sq sq-quickedit\\\"></i></button>\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"deleteAccount()\\\"><i\\n                                            class=\\\"sq sq-trash\\\"></i></button>\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-toggle=\\\"modal\\\" data-target=\\\"#newMailAcccount\\\"\\n                                        style=\\\"width:auto!important;background-color: #55a0f5;\\\">Create New Account</button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"mail-message\\\" style=\\\"color:#000000;padding:10px;\\\">\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-4\\\" style=\\\"padding:8px;\\\">Host Name:</div>\\n                                <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        class=\\\"input-user\\\" [(ngModel)]=\\\"accountDetails.mbac_host\\\"></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-4\\\" style=\\\"padding:8px;\\\">Email Address:</div>\\n                                <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        class=\\\"input-user\\\" [(ngModel)]=\\\"accountDetails.mbac_email\\\"></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-4\\\" style=\\\"padding:8px;\\\">Password:</div>\\n                                <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        class=\\\"input-user\\\" [(ngModel)]=\\\"accountDetails.mbac_password\\\"></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-4\\\" style=\\\"padding:8px;\\\">Mailbox Description:</div>\\n                                <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        class=\\\"input-user\\\" [(ngModel)]=\\\"accountDetails.mbus_description\\\"></div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddproject\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n                    <h4 class=\\\"modal-title\\\">New project</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Subject</label>\\n                                <input class=\\\"form-control\\\" [(ngModel)]=\\\"project.proj_subject\\\" name=\\\"project_subject\\\"\\n                                    placeholder=\\\"Subject\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"applicantlbl\\\"\\n                                    [(ngModel)]=\\\"project.user_applicant\\\" placeholder=\\\"Select a user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Group</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\" [(ngModel)]=\\\"project.group_assigned\\\"\\n                                    placeholder=\\\"Select a group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete [(ngModel)]=\\\"project.users\\\" [suggestions]=\\\"usersCRM\\\"\\n                                        (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                        placeholder=\\\"Share\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Product</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"project.prod_id\\\"\\n                                    placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Category</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"categories\\\"\\n                                    [(ngModel)]=\\\"project.id_caproject\\\" placeholder=\\\"Select a Category\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Description</label>\\n                                <p-editor [(ngModel)]=\\\"project.proj_description\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"project.attachments.length > 0\\\">\\n                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of project.attachments\\\">\\n                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type && (att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/')\\\"></i>\\n                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type && att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                            </span>\\n                            <div class=\\\"mailbox-attachment-info\\\">\\n                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i\\n                                            class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                </span>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveproject()\\\"><i\\n                                class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                            for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdprojectView\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n                    <h4 class=\\\"modal-title\\\">project #{{ project.proj_id }}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Subject</label>\\n                                <p>{{ project.proj_subject }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>User Applicant</label>\\n                                <p>{{ project.applicant }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Group</label>\\n                                <p>{{ project.groupname }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <div>\\n                                    <span *ngFor=\\\"let uss of project.userssh\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px; display: inline-block;\\\">{{uss.user_name\\n                                        + ' ' + uss.user_lastname }}</span>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Product</label>\\n                                <p>{{ project.prod_name }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Category</label>\\n                                <p>{{ project.category }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Description</label>\\n                                <div [innerHTML]=\\\"project.proj_description\\\"></div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"project.attachments && project.attachments.length > 0\\\">\\n                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of project.attachments\\\">\\n                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                    <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                </span></a>\\n                            <div class=\\\"mailbox-attachment-info\\\">\\n                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">{{ att.file_name\\n                                    }}</a>\\n                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{ att.size + ' bytes' }}\\n                                </span>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mailEdit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n                    <h4 class=\\\"modal-title\\\">Compose a Reply </h4>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>To: </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete [(ngModel)]=\\\"mail.emails\\\" [suggestions]=\\\"listmails\\\"\\n                                        (completeMethod)=\\\"filterMultipleEmails($event)\\\" styleClass=\\\"wid200\\\" [minLength]=\\\"1\\\"\\n                                        placeholder=\\\"{{mymail.mabo_sender}}\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <label>Subject:</label>\\n                                <input class=\\\"form-control\\\" [(ngModel)]=\\\"mail.mail_subject\\\" placeholder=\\\"RE: {{mymail.mabo_subject}}\\\">\\n                            </div>\\n                            <div class=\\\"btn-group\\\" role=\\\"group\\\">\\n                                <button *ngFor=\\\"let tmp of templates\\\" (click)=\\\"changeTmp(tmp)\\\">{{tmp.mtpl_name}}</button>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <p-editor [(ngModel)]=\\\"mail.content\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n                            </div>\\n                            <div class=\\\"btn-group\\\" role=\\\"group\\\">\\n                                <button *ngFor=\\\"let sign of signatures\\\" (click)=\\\"changeSgn(sign)\\\">{{sign.mtpl_name}}</button>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"pull-right\\\">\\n                                <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" [disabled]=\\\" (!mail.emails || mail.emails == '') || (!mail.mail_subject || mail.mail_subject == '') || (!mail.content || mail.content == '')\\\"\\n                                    (click)=\\\"saveMail()\\\">\\n                                    <i class=\\\"fa fa-paper-plane-o\\\"></i> Send</button>\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                            </div>\\n                            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                                for=\\\"mail-file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                            </label>\\n                            <input id=\\\"mail-file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                style=\\\"display: none;\\\" (change)=\\\"onChangeMail($event)\\\" />\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"newMailAcccount\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">New Mail Account </h4>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Incoming mail server </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <input class=\\\"form-control\\\" [(ngModel)]=\\\"newaccount.host\\\" placeholder=\\\"Incoming mail server...\\\">\\n                                </span>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <label>User name </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <input class=\\\"form-control\\\" [(ngModel)]=\\\"newaccount.username\\\" placeholder=\\\"email@account.com\\\">\\n                                </span>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <label>Password </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <input type=\\\"password\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"newaccount.password\\\"\\n                                        placeholder=\\\"Password...\\\">\\n                                </span>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <label>Description </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <input class=\\\"form-control\\\" [(ngModel)]=\\\"newaccount.description\\\" placeholder=\\\"Description...\\\">\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"pull-right\\\">\\n                                <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" [disabled]=\\\" (!newaccount.host || newaccount.host == '') || (!newaccount.username || newaccount.username == '') || (!newaccount.password || newaccount.password == '')\\\"\\n                                    (click)=\\\"saveNewAccount(newaccount)\\\">\\n                                    <i class=\\\"fa fa-paper-plane-o\\\"></i> Save</button>\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"NewMessage\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" style=\\\"border-radius: 15px;\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header header-event\\\" style=\\\"color:#829198\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:#829198;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:#829198;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\"><i class=\\\"sq sq-mail\\\" style=\\\"font-size: 24px;vertical-align: middle;\\\"></i><span>\\n                            New Message</span></h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-2\\\" style=\\\"padding:8px;\\\">From:</div>\\n                                <p-multiSelect [options]=\\\"fromOptions\\\" [(ngModel)]=\\\"newMessage.from\\\" (onChange)=\\\"changeFromOption($event)\\\"\\n                                    filter=\\\"false\\\"></p-multiSelect>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-2\\\" style=\\\"padding:8px;\\\">To:</div>\\n                                <div class=\\\"col-md-10\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        type=\\\"email\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"newMessage.to\\\" multiple></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-2\\\" style=\\\"padding:8px;\\\">CC:</div>\\n                                <div class=\\\"col-md-10\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        type=\\\"email\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"newMessage.cc\\\" multiple></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-2\\\" style=\\\"padding:8px;\\\">Subject:</div>\\n                                <div class=\\\"col-md-10\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        type=\\\"text\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"newMessage.subject\\\" multiple></div>\\n                            </div>\\n                            <!-- <div class=\\\"form-group\\\">\\n                                <label>Message</label>\\n                                <p-editor [(ngModel)]=\\\"newMessage.body\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n                            </div> -->\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_email\\\" [ngClass]=\\\"{'active':tagMenuNew == 1}\\\">\\n                                <a id=\\\"a_descriptionTask_newEmail\\\" data-toggle=\\\"tab\\\" href=\\\"#description_newEmail\\\" (click)=\\\"setPageNewEmail(1)\\\">Message</a>\\n                            </li>\\n                            <li id=\\\"li_attachments_email\\\" *ngIf=\\\"newMessage.attachments && newMessage.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenuNew == 2}\\\">\\n                                <a id=\\\"a_attachmentsTask_newEmail\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_newEmail\\\" (click)=\\\"setPageNewEmail(2)\\\">Attachments\\n                                    <span>({{newMessage.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuNew == 1\\\" id=\\\"description_newTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_newEmail\\\" name=\\\"divContenedor_description_newEmail\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editorDescription_newEmail\\\" name=\\\"editorDescription_newEmail\\\" [(ngModel)]=\\\"newMessage.body\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                        <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\"\\n                                                  type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\"\\n                                                  type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenuNew == 2 && newMessage.attachments && newMessage.attachments.length > 0\\\" id=\\\"attachments_newEmail\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div id=\\\"divAttachments_newEmail\\\" name=\\\"divAttachments_newEmail\\\" class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of newMessage.attachments\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                <i class=\\\"sq sq-documents-related\\\"\\n                                   *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                               <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                  style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                <i class=\\\"sq sq-doc\\\"\\n                                   *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                <i class=\\\"sq sq-word\\\"\\n                                   *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                <i class=\\\"sq sq-excel\\\"\\n                                   *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                <i class=\\\"sq sq-compress\\\"\\n                                   *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                <i class=\\\"sq sq-powerpoint\\\"\\n                                   *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                            </span>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <i class=\\\"sq sq-attach-files\\\"></i>{{ att.name }}\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                    <button id=\\\"button_1\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                            (click)=\\\"deleteAttachment(att)\\\">\\n                                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #008BCB; display: inline-block; padding: 6px 12px; cursor: pointer; border-radius: 15px;background-color: #008BCB; color:white;\\\"\\n                            for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                            <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"sendMail(newMessage)\\\"\\n                            [disabled]=\\\"(!newMessage || newMessage.to == '' || newMessage.to == 'undefined')\\\">\\n                            Send</button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"saveDraft(newMessage)\\\" style=\\\"background:#008BCB;width:115px;margin-right:10px;\\\"\\n                            [disabled]=\\\"(!newMessage || newMessage.to == '' || newMessage.to == 'undefined')\\\">\\n                            Save as Draft</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</section>\";\n\n/***/ }),\n/* 830 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(process) {// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = __webpack_require__(832);\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = __webpack_require__(833);\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb, null, ret) },\n            function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n\n/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(831)))\n\n/***/ }),\n/* 831 */\n/***/ (function(module, exports) {\n\n// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n/***/ }),\n/* 832 */\n/***/ (function(module, exports) {\n\nmodule.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n\n/***/ }),\n/* 833 */\n/***/ (function(module, exports) {\n\nif (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n\n/***/ }),\n/* 834 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h2>\\n      <i class=\\\"fa fa-address-book\\\" aria-hidden=\\\"true\\\"></i>\\n      CONTACTS\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"icon icon-home\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Directory</li>\\n    </ol>\\n  </section>\\n  <div *ngIf=\\\"contacts && contacts.length == 0\\\" class=\\\"col-6 col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"height: 150px;\\n        width: 305px;\\n        position: absolute;\\n        font-size: 15px;\\n        color: #707070;\\n        left: 50%;\\n        top: 50%;\\n        margin-top: -70px;\\n        margin-left: -80px;\\n        text-align: center;\\n        align-items: center;\\\">\\n        <div class=\\\"box-tools directory-tools\\\">\\n          <div class=\\\" col-6 col-xs-12 col-sm-12 col-md-12 col-lg-12 inputs-mainfilter2\\\">\\n            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n              <div class=\\\"label-input-mainfilter\\\">\\n                <input type=\\\"text\\\" id=\\\"search_contact\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                  placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\" style=\\\"width:300px;\\\">\\n              </div>\\n              <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                  <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                      <i class=\\\"sq sq-view\\\"></i>\\n                  </button>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n                        <p style=\\\"margin-bottom: 20px;text-align: center;\\\">Contacts empty, let's create one.</p>\\n            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Create\\\">\\n              <!-- <div class=\\\"content-message\\\">\\n                <p style=\\\"margin-bottom: 20px\\\">Empty timeline, lets fill it up. Post a message</p>\\n                <button class=\\\"btn btn-sm button_savedescriptionrejected_sqlx\\\"\\n                    style=\\\"padding: 8px 10px !important; width:180px;\\\" (click)=showMessage()>New\\n                    Message</button>\\n            </div> -->\\n              <button type=\\\"button\\\" class=\\\"btn btn-sm button_savedescriptionrejected_sqlx\\\" (click)=\\\"opensavecontact()\\\" data-container=\\\"body\\\"\\n                tooltipPosition=\\\"top\\\" style=\\\"background-color:white;\\\">\\n                <i class=\\\"fa fa-address-book\\\" style=\\\"color:rgb(27, 110, 198); font-size: 25px;\\\"></i>\\n              </button>\\n            </span>\\n            <!-- <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n              <button id=\\\"\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"reload()\\\"\\n                style=\\\"background-color:white;\\\">\\n                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n              </button>\\n            </span> -->\\n          </div>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <!-- /.col -->\\n      <div *ngIf=\\\"contacts && contacts.length > 0\\\" class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\">\\n          <div class=\\\"box-header with-border directory-header\\\" style=\\\"margin-bottom:50px;\\\">\\n            <div class=\\\" col-6 col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"margin-top:-13px;margin-left: -15px;\\\">\\n              <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Create\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"opensavecontact()\\\" data-container=\\\"body\\\"\\n                  tooltipPosition=\\\"top\\\" style=\\\"background-color:white;\\\">\\n                  <i class=\\\"fa fa-address-book\\\" style=\\\"color:rgb(27, 110, 198); font-size: 25px;\\\"></i>\\n                </button>\\n              </span>\\n              <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                <button id=\\\"\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"reload()\\\"\\n                  style=\\\"background-color:white;\\\">\\n                  <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                </button>\\n              </span>\\n            </div>\\n            <div class=\\\"box-tools directory-tools\\\">\\n                <div class=\\\" col-6 col-xs-12 col-sm-12 col-md-12 col-lg-12 inputs-mainfilter2\\\">\\n                  <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                    <div class=\\\"label-input-mainfilter\\\">\\n                      <input type=\\\"text\\\" id=\\\"search_contact\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                        placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\" style=\\\"width:300px;\\\">\\n                    </div>\\n                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                            <i class=\\\"sq sq-view\\\"></i>\\n                        </button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n              <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;margin-bottom: 60px;\\\">\\n                  <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                  <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n              </div>\\n            <div *ngFor=\\\"let ct of contacts\\\">\\n              <div class=\\\"col-12 col-xs-12 col-sm-6 col-md-4 col-lg-3\\\" style=\\\"margin-bottom:20px;\\\">\\n                <div *ngIf=\\\"isLoadingcontact\\\" class=\\\"contact\\\" style=\\\"border-radius: 20px; box-shadow: 0 0 0.2em 0.2em rgba(199, 195, 202, 0.5);\\\">\\n                  <div class=\\\"name-contact\\\">\\n                    <p> <i class=\\\"\\\" aria-hidden=\\\"true\\\"></i>{{escapeHtml (ct.cont_firstname)}}\\n                      {{ escapeHtml(ct.cont_lastname)}}</p>\\n                  </div>\\n                  <!--.name contact-->\\n                  <div class=\\\"profile-contact\\\">\\n                    <img [src]=\\\"ct.user_photo\\\" onError=\\\"this.src='img/user.png'\\\">\\n                    <p>cargo: {{ escapeHtml(ct.cont_cargo)}}</p>\\n                  </div>\\n                  <!--.profile contact-->\\n                  <div class=\\\"info-contacts\\\">\\n                    <p>Email: {{escapeHtml(ct.cont_email)}}</p>\\n                    <p>Cell Phone: {{escapeHtml(ct.cont_cellphone)}}</p>\\n                    <p>Work Address: {{ escapeHtml(ct.cont_workaddress)}}</p>\\n                  </div>\\n                  <div class=\\\"button-group\\\">\\n                    <i class=\\\"sq sq-search\\\" style=\\\"color:#0ba8da;font-size: 18px;cursor:pointer;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"quick view\\\" (click)=quickciew(ct.cont_id)></i>\\n                    <i class=\\\"sq sq-trash\\\" style=\\\"color:#0ba8da;font-size: 18px;cursor:pointer;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\" (click)=\\\"deleteContact(ct)\\\"></i>\\n                    <!-- <i class=\\\"sq sq-quickedit\\\" style=\\\"color:#0ba8da;font-size: 18px;cursor:pointer;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\" (click)=\\\"openuppcontact(ct.cont_id)\\\"></i> -->\\n                    <a class=\\\"sq sq-info\\\" [routerLink]=\\\"['/contact', ct.cont_id]\\\" style=\\\"color:#0ba8da;font-size: 18px;cursor:pointer;\\\" ></a>\\n                    <img class=\\\"qr-code\\\" src=\\\"img/qr-code-scan.svg\\\" (click)=\\\"openQrcode(ct)\\\">\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n\\n          </div>\\n          <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white; bottom: 0;width: 100%;\\\">\\n              <div *ngIf=\\\"isLoadingpagination\\\" class=\\\"contacts-controls\\\">\\n                  <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                      {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage) > itemcount ? itemcount : (currentpage * limitpage) }} of {{ itemcount }} results\\n                  </button>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                      <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                          <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                              (click)=\\\"goTo(0)\\\">\\n                              <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                      </span>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                      <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                          <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                              <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                      </span>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                      <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                          <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                      </select>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                      <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                          (click)=\\\"setCurPage(1)\\\">\\n                          <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                  </span>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                      <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                          <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                  </span>\\n                  </div>\\n              </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n</section>\\n<!-- modal add contact -->\\n<div class=\\\"modal fade\\\" id=\\\"opensavecontact\\\" role=\\\"dialog\\\">\\n  <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n    <div class=\\\"modal-content-params\\\">\\n      <div class=\\\"modal-header modal-header-info-params\\\">\\n        <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n          style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n        </button>\\n        <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"fa fa-address-book\\\"></i> New Contact </h4>\\n      </div>\\n      <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n        <div class=\\\"row\\\">\\n          <div style=\\\"height: 128px; background-color: #eef4f8;\\\">\\n            <div id=\\\"contact-profile\\\" (mouseenter)=\\\"ChangeAddUser('profile')\\\" (mouseleave)=\\\"ChangeAddUser('profile')\\\">\\n              <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; width:100px;height:100px;margin:0 auto;border-radius:50%;overflow:hidden;text-align: center;\\\">\\n                <img [src]=\\\"contact.cont_photo\\\" id=\\\"profile-img\\\" onError=\\\"this.src='img/user.png'\\\" style=\\\"width:100px;height:auto;top:1px;\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                <div id=\\\"change-profileUser\\\" class=\\\"upload-picture-btn-wrapper icon_customUpload\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\" name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"UploadAddUser($event,'profile')\\\">\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>First Name</label>\\n                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_firstname\\\" name=\\\"cont_firstname\\\" [(ngModel)]=\\\"contact.cont_firstname\\\"\\n                  placeholder=\\\"First Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Last Name</label>\\n                <input class=\\\"form-control sqlx-input\\\" id=\\\"cont_lastname\\\" name=\\\"cont_lastname\\\" [(ngModel)]=\\\"contact.cont_lastname\\\"\\n                  placeholder=\\\"Last Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Birth Date</label>\\n                  <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" id=\\\"calendarStartDate_sprints\\\" [(ngModel)]=\\\"contact.cont_birthday\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"1900:2020\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Share with</label>\\n                        <span class=\\\"ui-fluid\\\">\\n                    <p-autoComplete id=\\\"autcompleteShareWith_editTask\\\" name=\\\"autcompleteShareWith_editTask\\\" class=\\\"autocompleteSqlx\\\"\\n                                    [(ngModel)]=\\\"contact.usersShared\\\"\\n                                    [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                    styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"label\\\"\\n                                    [multiple]=\\\"true\\\">\\n\\n                    </p-autoComplete>\\n                </span>\\n                    </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Phone Number</label>\\n                <p-inputMask class=\\\" form-control sqlx-inputmask\\\" mask=\\\"+99 999 9999999\\\" id=\\\"cont_cellphone\\\" [(ngModel)]=\\\"contact.cont_cellphone\\\"\\n                  name=\\\"phoneUser_addUser\\\" placeholder=\\\"+99 999 9999999\\\"></p-inputMask>\\n              </div>\\n            </div> \\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>E-mail Address</label>\\n                <input type=\\\"email\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_email\\\" name=\\\"cont_email\\\" [(ngModel)]=\\\"contact.cont_email\\\"\\n                  placeholder=\\\"jdoe@mdcloudps.com\\\" pattern=\\\".+@mdcloudps.com\\\" size=\\\"30\\\" (change)=\\\"verifyEmaild(contact.cont_email)\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>workaddress</label>\\n                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_workaddress\\\" name=\\\"cont_workaddress\\\" [(ngModel)]=\\\"contact.cont_workaddress\\\" placeholder=\\\"workaddress\\\"  size=\\\"30\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>cargo</label>\\n                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_cargo\\\" name=\\\"cont_cargo\\\" [(ngModel)]=\\\"contact.cont_cargo\\\" placeholder=\\\"cargo\\\" size=\\\"30\\\" (keypress)=\\\"soloLetras($event)\\\">\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"modal-footer\\\">\\n        <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n          <button id=\\\"buttonClose_addUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:rgb(164, 203, 91) !important;border-color:rgb(164, 203, 91) !important\\\">Close\\n          </button>\\n          <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints\\\"\\n          data-dismiss=\\\"modal\\\" (click)=\\\"saveContact(contact)\\\"\\n          [disabled]=\\\"(!contact.cont_firstname) || (!contact.cont_lastname) || (!contact.cont_birthday) ||  (!contact.cont_cellphone) ||  (!contact.cont_email) ||  (!contact.cont_workaddress) || errors != 0\\\">\\n          Save\\n          </button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n</div>\\n<!-- modal update contact -->\\n<div class=\\\"modal fade\\\" id=\\\"openuppcontact\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"fa fa-address-book\\\"></i> Update Contact {{\\\" #\\\" + contact.cont_id}} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>First Name</label>\\n                  <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_firstname\\\" name=\\\"cont_firstname\\\" [(ngModel)]=\\\"contact.cont_firstname\\\" placeholder=\\\"First Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>Last Name</label>\\n                  <input class=\\\"form-control sqlx-input\\\" id=\\\"cont_lastname\\\" name=\\\"cont_lastname\\\" [(ngModel)]=\\\"contact.cont_lastname\\\" placeholder=\\\"Last Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Birth Date</label>\\n                  <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\"  id=\\\"calendarStartDate_sprints\\\" [(ngModel)]=\\\"contact.cont_birthday\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"1900:2020\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>Phone Number</label>\\n                  <p-inputMask class=\\\" form-control sqlx-inputmask \\\" mask=\\\"+99 999 9999999\\\" id=\\\"cont_cellphone\\\" [(ngModel)]=\\\"contact.cont_cellphone\\\" name=\\\"phoneUser_addUser\\\" placeholder=\\\"+99 999 9999999\\\"></p-inputMask>\\n                </div>\\n              </div> \\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>E-mail Address</label>\\n                  <input type=\\\"email\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_email\\\" name=\\\"cont_email\\\" [(ngModel)]=\\\"contact.cont_email\\\" placeholder=\\\"jdoe@mdcloudps.com\\\" pattern=\\\".+@mdcloudps.com\\\" size=\\\"30\\\">\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>workaddress</label>\\n                  <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_workaddress\\\" name=\\\"cont_workaddress\\\" [(ngModel)]=\\\"contact.cont_workaddress\\\"  placeholder=\\\"workaddress\\\"  size=\\\"30\\\">\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>cargo</label>\\n                  <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_cargo\\\" name=\\\"cont_cargo\\\" [(ngModel)]=\\\"contact.cont_cargo\\\" placeholder=\\\"cargo\\\" size=\\\"30\\\">\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n            <button id=\\\"buttonClose_addUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n              data-dismiss=\\\"modal\\\" (click)=\\\"reload()\\\">Close\\n            </button>\\n            <button id=\\\"buttonSave_addUser\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n              class=\\\"btn-success btn-sm btn-add-sprint\\\"\\n              [disabled]=\\\"(!contact.cont_firstname) || (!contact.cont_lastname) || (!contact.cont_birthday) ||  (!contact.cont_cellphone) ||  (!contact.cont_email) ||  (!contact.cont_workaddress)\\\"\\n              data-dismiss=\\\"modal\\\" (click)=\\\"updateContact(contact)\\\">update\\n            </button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!-- modal quick view -->\\n  <div class=\\\"modal fade\\\" id=\\\"quickciew\\\" role=\\\"dialog\\\">\\n      <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n          <div class=\\\"modal-header modal-header-info-params\\\">\\n            <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n              style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n            </button>\\n            <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"fa fa-address-book\\\"></i> View Contact {{\\\" #\\\" + contact.cont_id}} </h4>\\n          </div>\\n          <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                      <div class=\\\"form-group input-squadlinx\\\">\\n                        <label>First Name</label>\\n                        <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                          {{contact.cont_firstname}}\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                      <div class=\\\"form-group input-squadlinx\\\">\\n                        <label>Last Name</label>\\n                        <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                          {{contact.cont_lastname}}\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                        <div class=\\\"form-group\\\">\\n                            <label>Birth Date</label>\\n                            <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                                {{contact.cont_birthday}}\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                      <div class=\\\"form-group input-squadlinx\\\">\\n                        <label>Phone Number</label>\\n                        <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                            {{contact.cont_cellphone}}\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                      <div class=\\\"form-group input-squadlinx\\\">\\n                        <label>E-mail Address</label>\\n                        <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                            {{contact.cont_email}}\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"form-group input-squadlinx\\\">\\n                          <label>workaddress</label>\\n                          <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                              {{contact.cont_workaddress}}\\n                          </div>\\n                        </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group input-squadlinx\\\">\\n                            <label>cargo</label>\\n                            <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                                {{contact.cont_cargo}}\\n                            </div>\\n                          </div>\\n                        </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"modal-footer\\\">\\n            <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n              <button id=\\\"buttonClose_addUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                data-dismiss=\\\"modal\\\" (click)=\\\"reload()\\\">Close\\n              </button>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdqrcode\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%;\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header mdheader-directory\\\" >\\n                    <div style=\\\"height: 40px; border-bottom: 1px solid #3092E9;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btnclose-qr\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                            <i class=\\\"sq sq-close\\\"></i>\\n                        </button>\\n                    </div> \\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"min-height: 200px;padding: 20px;\\\">\\n                  <div class=\\\"row mdcontent-profile\\\">\\n                    <div class=\\\"col-xs-5 col-md-5 col-md-5 col-lg-5\\\">\\n                      <div style=\\\"margin-left:25px;\\\">\\n                        <button style=\\\"background:#DEDBDB; overflow: hidden;  border-radius: 50%; width: 100px; height: 100px; border: transparent;\\\">\\n                         <img [src]=\\\"user.cont_photo\\\" onError=\\\"this.src='img/user.png'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"max-width: 100%\\\">\\n                        </button>\\n                      </div>\\n                      <h4 style=\\\"color: #3092E9; margin-top: 10px; font-weight: bold; margin-left: 25px;\\\">{{user.cont_firstname}} {{user.cont_lastname}}</h4>\\n                    </div>\\n                    <div class=\\\"col-xs-7 col-md-7 col-md-7 col-lg-7\\\" style=\\\"margin-top: 10px;\\\">\\n                      <div id=\\\"output\\\" style=\\\"text-align: center;\\\"></div>\\n                    </div>\\n                  </div>\\n                    \\n                </div>             \\n                <div class=\\\"modal-footer\\\" style=\\\"padding-top: 0px; border: none;\\\">\\n                    <div style=\\\"text-align: center; height: 40px; padding-top: 20px; border-top: 1px solid #CBC9C9;\\\"> \\n                        <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                          <button  class=\\\"btn-sm btn-close-qrcode\\\" data-dismiss=\\\"modal\\\"  type=\\\"button\\\">Close </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n  </div> \\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\";\n\n/***/ }),\n/* 835 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> DAILY\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Daily</li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n        <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n          <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n        <div class=\\\"nav-tabs-sqlx-v\\\">\\n          <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n            <li class=\\\"active\\\">\\n              <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n            </li>\\n            <li *ngFor=\\\"let gr of groups\\\">\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n            </li>\\n          </ul>\\n        </div>\\n      </div>\\n      <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n        <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;text-align: center;\\\">\\n          <button type=\\\"button\\\" (click)=\\\"searchDaily()\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);\\\">\\n            Refresh</button>\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"addDaily(null)\\\" style=\\\"padding: 5px 5px; background-color:rgb(155,212,107);\\\">\\n            Add Daily</button>\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"showFilter()\\\" style=\\\"padding: 5px 5px; background-color:#036bc9;\\\">\\n            Filter</button>\\n          <div class=\\\"inputs-mainfilter\\\" style=\\\"display: inline-block;margin-right: 10px;background-color: #fff;\\\">\\n            <div class=\\\"row\\\" style=\\\"display: inline-block;position:relative;width: 100%;\\\">\\n              <div class=\\\"label-input-mainfilter\\\">\\n                <input type=\\\"text\\\" style=\\\"width: 97%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n              </div>\\n              <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                  <!-- <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i> -->\\n                  <button type=\\\"button\\\" (click)=\\\"searchDaily()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                    <i class=\\\"sq sq-view\\\"></i>\\n                  </button>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div *ngIf=\\\"filter\\\" class=\\\"box-header with-border filter-options\\\">\\n          <div class=\\\"col-xs-10 col-sm-11 col-md-11 col-lg-11\\\">\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Description</label>\\n                <li *ngIf=\\\"mydailycopy.description\\\">\\n                    {{mydailycopy.description}}\\n                </li>\\n                <li *ngIf=\\\"!mydailycopy.description\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\" >\\n                <label>Date initial</label>\\n                <li *ngIf=\\\"mydaily.date_ini\\\">\\n                  {{formatDate(mydaily.date_ini)}}\\n                </li>\\n                <li *ngIf=\\\"!mydaily.date_ini\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Date end</label>\\n                <li  *ngIf=\\\"mydaily.date_end\\\">\\n                  {{formatDate(mydaily.date_end)}}\\n                </li>\\n                <li  *ngIf=\\\"!mydaily.date_end\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Product(s)</label>\\n                <li *ngFor=\\\"let pr of mydailycopy.products\\\">\\n                    {{pr.prod_name}}\\n                </li>\\n                <li *ngIf=\\\"!mydailycopy.products || mydailycopy.products.length == 0\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Creator(s)</label>\\n                <li *ngFor=\\\"let ur of mydailycopy.creators\\\">\\n                  {{ ur.user_lastname + \\\", \\\" + ur.user_name }}\\n                </li>\\n                <li *ngIf=\\\"!mydailycopy.creators || mydailycopy.creators.length == 0\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Project(s)</label>\\n                <li *ngFor=\\\"let pj of mydailycopy.projects\\\">\\n                  {{pj.proj_subject}}\\n                </li>\\n                <li *ngIf=\\\"!mydailycopy.projects || mydailycopy.projects.length == 0\\\">\\n                    -\\n                </li>\\n              </ul>\\n\\n          </div>\\n          <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"text-align: right;\\\">\\n            <a href=\\\"javascript:void(0)\\\" (click)=\\\"closeFilter()\\\" class=\\\"pull-rigth\\\">\\n                <i class=\\\"sq sq-close\\\" style=\\\"color:#0ba8da; font-weight: bolder;\\\"></i>\\n            </a>\\n          </div>\\n        </div>\\n        <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n            <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n        </div>\\n        <div *ngIf=\\\"!isLoading && daily.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            No Data\\n        </div>\\n        <div *ngIf=\\\"daily.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"table-responsive tasks-messages\\\">\\n\\n              <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxd table-tasklistd\\\" style=\\\"width: 100%;\\\">\\n                <thead>\\n                  <tr style=\\\"border-bottom: 2px solid rgb(227,237,241)!important; border-top: 2px solid rgb(227,237,241)!important;\\\">\\n                    <th (click)=\\\"setOrder('dail_date')\\\" class=\\\"head-table-daily\\\" style=\\\"width: 15%; \\\">Date\\n                      <span [hidden]=\\\"posOrder !== 'dail_date'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('dail_id')\\\" class=\\\"head-table-daily\\\" style=\\\"width: 8%; \\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'dail_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('creator')\\\" class=\\\"head-table-daily\\\" style=\\\"width: 15%; \\\">Creator\\n                      <span [hidden]=\\\"posOrder !== 'creator'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('dail_text')\\\" class=\\\"head-table-daily\\\" style=\\\"width: 33%; \\\">Description\\n                      <span [hidden]=\\\"posOrder !== 'dail_text'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th class=\\\"head-table-daily\\\" style=\\\"width: 8%;\\\">Points</th>\\n                    <th class=\\\"head-table-daily\\\" (click)=\\\"setOrder('task_id')\\\" style=\\\"width: 8%;\\\">Task\\n                      <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th class=\\\"head-table-daily\\\" style=\\\"width: 13%;\\\">Actions</th>\\n                  </tr>\\n                </thead>\\n                <tbody>\\n                  <tr *ngFor=\\\"let day of daily\\\">\\n                    <td>\\n                      {{ escapeHtml(day.dail_date) }}\\n                    </td>\\n                    <td style=\\\"text-align: center;\\\">\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(day)\\\">{{ escapeHtml(day.dail_id) }}</a>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModalUser(day.user_id)\\\">{{ escapeHtml(day.creator) }}</a>\\n                    </td>\\n\\n                    <td>\\n                      <div style=\\\"height: 37px!important;overflow-y: scroll;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(day)\\\">{{ escapeHtml(day.dail_text) }}</a>\\n                      </div>\\n                    </td>\\n                    <td style=\\\"text-align: center;\\\">\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(day)\\\">{{ escapeHtml(day.dail_points) }}</a>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModaltk(day.task_id)\\\">{{ escapeHtml(day.task_id) }}</a>\\n                      <taskview [myTaskId]=\\\"day.task_id\\\"></taskview>\\n                    </td>\\n                    <td>\\n                      <div class=\\\"btn-group\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"View\\\">\\n                          <button type=\\\"button\\\" (click)=\\\"showModal(day)\\\" class=\\\"btn btn-default btn-sm\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                            style=\\\"width: 34px;\\\">\\n                            <i class=\\\"sq sq-search\\\"></i>\\n                          </button>\\n                        </span>\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <button type=\\\"button\\\" (click)=\\\"editDaily(day)\\\" class=\\\"btn btn-default btn-sm\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\">\\n                            <i class=\\\"sq sq-quickedit\\\"></i>\\n                          </button>\\n                        </span>\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                          <button (click)=\\\"deleteDay(day)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\">\\n                            <i class=\\\"sq sq-trash\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                <div class=\\\"contacts-controls\\\">\\n                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage) > itemcount ? itemcount : (currentpage * limitpage) }} of {{ itemcount }} results\\n                    </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                (click)=\\\"goTo(0)\\\">\\n                                <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                            </button>\\n                        </span>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                            </button>\\n                        </span>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                        <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"searchDaily()\\\">\\n                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                        </select>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                            (click)=\\\"setCurPage(1)\\\">\\n                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                        </button>\\n                    </span>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                        </button>\\n                    </span>\\n                    </div>\\n                </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdDayView\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"font-weight: bold;color:white;\\\"></i>\\n          </button>\\n          <h4 *ngIf=\\\"myDay\\\" class=\\\"modal-title\\\" style=\\\"margin-left: 7px;font-weight: bold; color: white;\\\">Daily #\\n            {{myDay.dail_id}} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" *ngIf=\\\"myDay\\\" style=\\\"margin-left: 8px;margin-right: 8px;\\\">\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Date</label>\\n                <p>{{ myDay.dail_date }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Points</label>\\n                <p>{{ myDay.dail_points }}</p>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"!myDay.task_id\\\" class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Product</label>\\n                <p>{{myDay.prod_name}}</p>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"!myDay.task_id\\\" class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Category</label>\\n                <p>{{myDay.para_name}}</p>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"myDay.unit_id && myDay.unit_id > 0 \\\" class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Performance Indicator</label>\\n                <p>{{myDay.units_points + ' ' + myDay.unit_desc}}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Description</label>\\n                <div [innerHTML]=\\\"escapeHtml(myDay.dail_text)\\\" style=\\\"height: 58px;overflow-y: scroll;\\\"></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div style=\\\"text-align: center\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\" style=\\\"font-weight: bold; background-color:rgb(15, 188, 255);\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal modal-task fade\\\" id=\\\"mdDailyTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n        <div class=\\\"modal-header header-project\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\"></i>\\n            Record progress\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"overflow:scroll; height:507px;\\\">\\n              <h4 *ngIf=\\\"developing && developing.length > 0\\\" class=\\\"modal-title\\\">\\n                Tasks\\n              </h4>\\n              <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                  <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                    <li class=\\\"active\\\">\\n                      <a data-toggle=\\\"tab\\\" href=\\\"#ptsknew\\\" (click)=\\\"setMytask(0);\\\">None</a>\\n                    </li>\\n                  </ul>\\n                  <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                    *ngFor=\\\"let dv of developing\\\">\\n                    <li *ngIf=\\\"dv.task_pointsl > 0\\\" class=\\\"active\\\">\\n                      <a data-toggle=\\\"tab\\\" href=\\\"#ptsk{{dv.task_id}}\\\" (click)=\\\"showInfo(dv);\\\">{{dv.task_id}}</a>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-9 col-sm-10 col-md-10 col-lg-10\\\">\\n              <div class=\\\"tab-content\\\">\\n                <div *ngIf=\\\"mytask && developing && developing.length > 0 && dailynew == -1\\\" id=\\\"ptsk{{mytask.task_id}}\\\"\\n                  class=\\\"tab-pane fade in active\\\">\\n                  <h3>{{mytask.task_subject}}</h3>\\n                  <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Number</label>\\n                      <p>{{mytask.task_id}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Date</label>\\n                      <p>{{mytask.task_date}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Creator</label>\\n                      <p>{{mytask.creator}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Status</label>\\n                      <p>{{ mytask.status_name }}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Assigned to</label>\\n                      <p>{{mytask.asigned}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Delivery Date</label>\\n                      <p>{{mytask.task_delivery}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Points</label>\\n                      <p>{{mytask.task_points}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Points Recorded</label>\\n                      <p>{{mytask.task_pointsd}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Product</label>\\n                      <p>{{mytask.prod_name}}</p>\\n                    </div>\\n                    <div *ngIf=\\\"mytask.unit_id && mytask.unit_id > 0\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label\\\">Unit Points</label>\\n                        <p>{{mytask.unit_points}}</p>\\n                    </div>\\n                    <div *ngIf=\\\"mytask.unit_id && mytask.unit_id > 0\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label\\\">Unit Points Recorded</label>\\n                        <p>{{mytask.unit_pointsd}}</p>\\n                    </div>\\n                  </div>\\n                  <label class=\\\"control-label\\\">Description</label>\\n                  <div [innerHtml]=\\\"mytask.task_description\\\" style=\\\"overflow: scroll; height: 80px;\\\"></div>\\n                  <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mcTask-daily\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" [showTime]=\\\"true\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"[yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\" [minDate]=\\\"minDateDaily\\\" [maxDate]=\\\"maxDateDaily\\\"></p-calendar>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"compareDate(day.spri_init) === -1 || compareDate(day.spri_end) === 1\\\">Date out of sprint range.</span>\\n                      <span>{{date3|date}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                      <div class=\\\"form-group spinner-squadlinx\\\">\\n                        <label>Points</label>\\n                        <input type=\\\"number\\\" id=\\\"points-mcTask-daily\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"day.dail_points\\\" step=\\\"0.01\\\" min=\\\"0.01\\\">\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points <= 0\\\">Points must be greater than zero</span>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"(parseFloat(mytask.task_pointsd)+parseFloat(day.dail_points) > parseFloat(mytask.task_points))\\\">Points\\n                          selected exceed current task duration.</span>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"day.unit_id && day.unit_id != 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">  \\n                        <div class=\\\"form-group\\\">\\n                            <div class=\\\"performance-container\\\">\\n                                <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                </div>\\n                                <div class=\\\"spinner-squadlinx performance\\\">\\n                                    <input type=\\\"number\\\" id=\\\"units_newDaily\\\" name=\\\"units_newDaily\\\" class=\\\"input_number_squadlinx\\\"\\n                                        [(ngModel)]=\\\"day.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\" style=\\\"margin-bottom: 6px;\\\"> \\n                                </div>\\n                                <div class=\\\"dropdownSqlx\\\">\\n                                    <p-dropdown [disabled]=\\\"true\\\" id=\\\"dropdownUnits_newDaily\\\" name=\\\"dropdownUnits_newDaily\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"day.unit_id\\\"\\n                                        placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                </div>     \\n                            </div> \\n                            <span class=\\\"has-error\\\" *ngIf=\\\"day.unit_points <= 0\\\">\\n                                Performance Indicator must be greater than zero</span>\\n                        </div>                          \\n                    </div>\\n                  </div>\\n                  <div class=\\\"form-group textarea-squadlinx\\\">\\n                    <label>Description</label>\\n                    <textarea id=\\\"text-mcTask-daily\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\" rows=\\\"3\\\"\\n                      placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text\\\">{{ \\\"*\\\" + day.dail_date + \\\"*\\\" }}</textarea>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"dailynew == 0\\\" id=\\\"ptsknew\\\" class=\\\"tab-pane fade in active\\\">\\n                  <div class=\\\"modal-body calendar-squadlinx\\\">\\n                    <div class=\\\"row\\\">\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"text-align: center;\\\">\\n                          <div class=\\\"form-group\\\">\\n                            <label>Sprint</label>\\n                            <p-dropdown id=\\\"ddwnr_sprint\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" (onChange)=\\\"onChangeSprint()\\\"\\n                                [autoWidth]=\\\"false\\\" [options]=\\\"sprintslist\\\" [(ngModel)]=\\\"day.spri_id\\\" placeholder=\\\"Select a Sprint\\\"\\n                                  filter=\\\"filter\\\"></p-dropdown>\\n                          </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date</label>\\n                                <p-calendar id=\\\"dail_date-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date_2\\\"\\n                                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"[yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [minDate]=\\\"minDateDaily\\\" [maxDate]=\\\"maxDateDaily\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"compareDate2(day.spri_init) === -1 || compareDate2(day.spri_end) === 1\\\">Date out of sprint range.</span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"points-mcTask-daily2\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"day.dail_points_2\\\" step=\\\"0.01\\\" min=\\\"0.01\\\">\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points_2 <= 0\\\">Points must be greater than zero</span>\\n                              </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"form-group dropdownSqlx\\\">\\n                      <label>Product</label>\\n                      <p-dropdown id=\\\"prod_id-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                        [(ngModel)]=\\\"day.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group dropdownSqlx\\\">\\n                      <label>Category</label>\\n                      <p-dropdown id=\\\"para_category-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"catdaily\\\"\\n                        [(ngModel)]=\\\"day.para_category\\\" placeholder=\\\"Select a Category\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group dropdownSqlx\\\">\\n                      <label>Task Refernce</label>\\n                      <p-dropdown id=\\\"task_reference-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblmytasks\\\"\\n                        [(ngModel)]=\\\"day.task_reference\\\" placeholder=\\\"Select a Task\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group textarea-squadlinx\\\">\\n                      <label>Description</label>\\n                      <textarea id=\\\"text-mdDaily-daily\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\" rows=\\\"3\\\"\\n                        placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text_2\\\"></textarea>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"!mytask && !developing && developing.length == 0\\\" id=\\\"ptsk{{mytask.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                  <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n          <button *ngIf=\\\"day && dailynew != 0\\\" id=\\\"save-mcTask-daily\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" [disabled]=\\\"validateDaily(1)\\\" (click)=\\\"saveDaily(day, mytask.task_id)\\\">Save</button>\\n          <button *ngIf=\\\"day && dailynew == 0\\\" id=\\\"save-mcTask2-daily\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" [disabled]=\\\"validateDaily(2)\\\" (click)=\\\"saveDaily(day, 0)\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdUser\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\" style=\\\"height: 110px;\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;margin-top: 3px;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <div style=\\\"transform: translate(195px, 40px);\\\">\\n            <span style=\\\"text-transform: uppercase; color:white;font-size: 26px;font-weight: bold;\\\" [innerHTML]=\\\"getNameUser(user.user_name , user.user_lastname)\\\"> </span>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div id=\\\"user-profile-picture\\\" style=\\\"height: 120px;width: 120px;background: transparent;border-radius: 50%;margin-left: 40px;margin-top: -92px;border: 7px solid white;box-shadow: grey -1px 0px 10px -2px; overflow:hidden;position:relative;\\\">\\n            <div style=\\\"height: 100%;width: 100%;background: white;position: relative;\\\">\\n              <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"left:0px;top:0px;width: 106px;\\\">\\n              <div id=\\\"change-picture\\\" style=\\\"display:none;position:absolute;background:#6b6b6b3d;height:100%;width: 100%;top:0px;left:-5px;color:white;text-align: center;padding-top:15px;\\\">Change\\n                <br>Picture\\n                <br>\\n                <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n              </div>\\n            </div>\\n          </div>\\n          <div style=\\\"transform: translate(195px, -37px);\\\">\\n            <span style=\\\"color:rgb(28,110,198);font-size: 20px;font-weight: bold;\\\">{{user.role_name}} </span>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"margin-top: 0px;margin-left: 15px;margin-right: 15px;\\\">\\n            <div class=\\\"form-group\\\">\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Email:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_email}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Cell Phone:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_phone}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Work Address:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_workaddress}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Work Phone:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_workphone}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Home Address:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_homeaddress}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Home Phone:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_homephone}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Personal Email:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_personalemail}}\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer close-footer\\\" style=\\\"text-align: center;\\\">\\n          <div style=\\\"padding-right:20px;border-top: 1px solid rgb(181,199,208);width: 95%;margin-left: 2%;padding-top: 6px;\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px; font-weight: bold;\\\"\\n              data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal modal-task fade\\\" id=\\\"mdEditDailyTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n        <div class=\\\"modal-header header-project\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\"></i>\\n            Edit daily\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"tab-content\\\">\\n                <div class=\\\"tab-pane fade in active\\\">\\n                  <div *ngIf=\\\"day.task && day.task.task_id && day.task.task_id > 0\\\">\\n                      <h3>{{day.task.task_subject}}</h3>\\n                      <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Number</label>\\n                          <p>{{day.task.task_id}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Date</label>\\n                          <p>{{day.task.task_date}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Creator</label>\\n                          <p>{{day.task.creator}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Status</label>\\n                          <p>{{ day.task.status_name }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Assigned to</label>\\n                          <p>{{day.task.asigned}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Delivery Date</label>\\n                          <p>{{day.task.task_delivery}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Points</label>\\n                          <p>{{day.task.task_points}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Points Recorded</label>\\n                          <p>{{day.task.task_pointsd}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Product</label>\\n                          <p>{{day.task.prod_name}}</p>\\n                        </div>\\n                        <div *ngIf=\\\"day.task.unit_id != null && day.task.unit_id != 0\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <label class=\\\"control-label\\\">Unit Points</label>\\n                            <p>{{day.task.unit_points}}</p>\\n                        </div>\\n                        <div *ngIf=\\\"day.task.unit_id != null && day.task.unit_id != 0\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <label class=\\\"control-label\\\">Unit Points Recorded</label>\\n                            <p>{{day.task.unit_pointsd}}</p>\\n                        </div>\\n                      </div>\\n                      <label class=\\\"control-label\\\">Description</label>\\n    \\n                      <div [innerHtml]=\\\"day.task.task_description\\\" style=\\\"overflow: scroll; height: 80px;\\\"></div>\\n\\n                  </div>\\n                  <div class=\\\"row\\\" *ngIf=\\\"day.task && day.task.task_id && day.task.task_id > 0\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mcTask-daily2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" (onInput)=\\\"onInputDate($event)\\\" (onSelect)=\\\"onChangeDate($event)\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"[yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [minDate]=\\\"minDateDaily\\\" [maxDate]=\\\"maxDateDaily\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"compareDate(day.spri_init) === -1 || compareDate(day.spri_end) === 1\\\">Date out of sprint range.</span>\\n                      <!-- <span>{{date3|date}}</span> -->\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                      <div class=\\\"form-group spinner-squadlinx\\\">\\n                        <label>Points</label>\\n                        <input type=\\\"number\\\" class=\\\"input_number_squadlinx\\\" id=\\\"points-mcTask-daily2\\\" [(ngModel)]=\\\"day.dail_points\\\" step=\\\"0.01\\\">\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points <= 0\\\">Points must be greater than zero</span>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"(day.dail_points > day.pointsr)\\\">Points\\n                          selected exceed current task duration.</span>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"day.unit_id && day.unit_id != 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">  \\n                        <div class=\\\"form-group\\\">\\n                            <div class=\\\"performance-container\\\">\\n                                <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                </div>\\n                                <div class=\\\"spinner-squadlinx performance\\\">\\n                                    <input type=\\\"number\\\" id=\\\"units_editDaily\\\" name=\\\"units_editDaily\\\" class=\\\"input_number_squadlinx\\\"\\n                                        [(ngModel)]=\\\"day.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\" style=\\\"margin-bottom: 6px;\\\">   \\n                                </div>\\n                                <div class=\\\"dropdownSqlx\\\">\\n                                    <p-dropdown [disabled]=\\\"true\\\" id=\\\"dropdownUnits_editDaily\\\" name=\\\"dropdownUnits_editDaily\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"day.unit_id\\\"\\n                                        placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                </div>  \\n                            </div> \\n                            <span class=\\\"has-error\\\" *ngIf=\\\"day.unit_points <= 0\\\">\\n                                Performance Indicator must be greater than zero</span>\\n                        </div>                          \\n                    </div>\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group textarea-squadlinx\\\">\\n                    <label>Description</label>\\n                    <textarea id=\\\"text-mcTask-daily2\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\" rows=\\\"3\\\"\\n                      placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text\\\"></textarea>\\n                  </div>\\n                </div>\\n                <div class=\\\"row\\\" *ngIf=\\\"!day.task || !day.task.task_id || day.task.task_id == 0\\\">\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group dropdownSqlx\\\">\\n                      <label>Product</label>\\n                      <p-dropdown id=\\\"prod_id-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                        [(ngModel)]=\\\"day.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 form-group dropdownSqlx\\\">\\n                      <label>Category</label>\\n                      <p-dropdown id=\\\"para_category-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"catdaily\\\"\\n                        [(ngModel)]=\\\"day.para_category\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 form-group dropdownSqlx\\\">\\n                      <label>Task Refernce</label>\\n                      <p-dropdown id=\\\"task_reference-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblmytasks\\\"\\n                        [(ngModel)]=\\\"day.task_reference\\\" placeholder=\\\"Select a Task\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mcTask-daily3\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"[yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [maxDate]=\\\"maxDateDaily\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                      <!-- <span>{{date3|date}}</span> -->\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                      <div class=\\\"form-group spinner-squadlinx\\\">\\n                        <label>Points</label>\\n                        <input type=\\\"number\\\" id=\\\"points-mcTask-daily3\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"day.dail_points\\\" step=\\\"0.01\\\" min=\\\"0.01\\\">\\n                      </div>\\n                    </div>\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group textarea-squadlinx\\\">\\n                    <label>Description</label>\\n                    <textarea id=\\\"text-mcTask-daily2\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\" rows=\\\"3\\\"\\n                      placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text\\\"></textarea>\\n                  </div>\\n                </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"day.task && day.task.task_id && day.task.task_id > 0\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n          <button id=\\\"save-mcTask-daily2\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" (click)=\\\"updateDaily(day, 1)\\\"[disabled]=\\\"validateDaily(3)\\\">Save</button>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"!day.task || !day.task.task_id || day.task.task_id == 0\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n            <button id=\\\"save-mcTask-daily2\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n              data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" (click)=\\\"updateDaily(day, 2)\\\"[disabled]=\\\"validateDaily(4)\\\">Save</button>\\n          </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdSearchDaily\\\" role=\\\"dialog\\\">\\n      <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n          <div class=\\\"modal-content-params\\\">\\n              <div class=\\\"modal-header modal-header-info-params\\\">\\n                  <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                      <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                  </button>\\n                  <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Main filter</h4>\\n              </div>\\n              <div class=\\\"modal-body\\\">\\n                  <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group input-squadlinx\\\">\\n                              <label>Description</label>\\n                              <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"description_dailyfilter\\\" name=\\\"description_dailyfilter\\\" [(ngModel)]=\\\"mydaily.description\\\" placeholder=\\\"\\\">\\n                          </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                              <label>Product(s)</label>\\n                              <span class=\\\"ui-fluid\\\">\\n                                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mydaily.products\\\"\\n                                      [suggestions]=\\\"productsa\\\" (completeMethod)=\\\"filterMultiple($event, 1)\\\" styleClass=\\\"wid100\\\"\\n                                      [minLength]=\\\"1\\\" placeholder=\\\"Products(s)\\\" field=\\\"prod_name\\\" [multiple]=\\\"true\\\">\\n                                  </p-autoComplete>\\n                              </span>\\n                          </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                              <label>Creator(s)</label>\\n                              <span class=\\\"ui-fluid\\\">\\n                                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mydaily.creators\\\"\\n                                      [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\" styleClass=\\\"wid100\\\"\\n                                      [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                  </p-autoComplete>\\n                              </span>\\n                          </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                              <label>Project(s)</label>\\n                              <span class=\\\"ui-fluid\\\">\\n                                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mydaily.projects\\\"\\n                                      [suggestions]=\\\"myProjects\\\" (completeMethod)=\\\"filterMultiple($event, 3)\\\" styleClass=\\\"wid100\\\"\\n                                      [minLength]=\\\"1\\\" placeholder=\\\"Project(s)\\\" field=\\\"proj_subject\\\" [multiple]=\\\"true\\\">\\n                                  </p-autoComplete>\\n                              </span>\\n                          </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                          <div class=\\\"form-group\\\">\\n                              <label>Date initial</label>\\n                              <p-calendar id=\\\"calendarDateInit_dailyfilter\\\" name=\\\"calendarDateInit_dailyfilter\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mydaily.date_ini\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                          </div>\\n                      </div>\\n\\n                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                          <div class=\\\"form-group\\\">\\n                              <label>Date end</label>\\n                              <p-calendar id=\\\"calendarDateEnd_dailyfilter\\\" name=\\\"calendarDateEnd_dailyfilter\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mydaily.date_end\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                          </div>\\n                      </div>\\n                  </div>\\n              </div>\\n              <div class=\\\"modal-footer\\\">\\n                  <div class=\\\"pull-right\\\">\\n                      <button id=\\\"buttonSearch_dailyfilter\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"filterDaily()\\\"> Search\\n                      </button>\\n                  </div>\\n              </div>\\n          </div>\\n      </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 836 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2>\\n            <i class=\\\"fa fa-address-book\\\" aria-hidden=\\\"true\\\"></i>\\n            CONTACTS\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a [routerLink]=\\\"['/dashboard']\\\">\\n                <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n            </li>\\n            <li>\\n                <a [routerLink]=\\\"['/directory']\\\">Contacts</a>\\n            </li>\\n            <li class=\\\"active\\\">Contact</li>\\n        </ol>\\n    </section>\\n    <!-- Main content -->\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box box-primary\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div id=\\\"size\\\" class=\\\"col-xs-12 col-sm-5 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"contact-section\\\">\\n                                <div class=\\\"name-contact\\\">\\n                                    <i class=\\\"sq sq-comments\\\"></i>\\n                                    <p style=\\\"display: inline; font-size: 15px; margin-left: 5px;\\\"> {{ (contact.cont_firstname)}} {{(contact.cont_lastname)}}</p>\\n                                </div>\\n                                <!--.name contact-->\\n                                <div class=\\\"profile-contact\\\">\\n                                    <!-- <img src=\\\"img/profile.jpg\\\"> -->\\n                                    <img [src]=\\\"contact.cont_photo\\\" onError=\\\"this.src='img/user.png'\\\">\\n                                    <p> {{ (contact.cont_cargo)}}</p>\\n                                </div>\\n                                <!--.profile contact-->\\n                                <div class=\\\"row\\\" style=\\\"padding:15px;\\\">\\n                                    <div class=\\\"col-xs-5\\\"> \\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Email:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Cell Phone:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Work Address:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Work Phone:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Home Address:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Home Phone:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Personal Email:</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-7\\\">\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_email)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_cellphone)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_workaddress)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_workphone)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_homeaddress)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_homephone)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_personalemail)}}</p>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--.contacts-->\\n                            <div class=\\\"options-items\\\">\\n                                <div id=\\\"activity\\\" class=\\\"tab-activity fade in active\\\">\\n                                    <div class=\\\"item-contact active\\\">\\n                                        <img src=\\\"img/activity.svg\\\" style=\\\"height:25px;\\\">\\n                                        <!-- <i class=\\\"fa fa-circle-o-notch\\\" aria-hidden=\\\"true\\\"></i> -->\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#mdActivity\\\" (click)=\\\"registerTab('activity', $event)\\\">Activity </a>\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"profile-settings\\\" class=\\\"tab-profile-settings\\\">\\n                                    <div class=\\\"item-contact\\\">\\n                                        <!-- <i class=\\\"sq sq-settings\\\" aria-hidden=\\\"true\\\"></i> -->\\n                                        <img src=\\\"img/profilesettings.svg\\\" style=\\\"height:25px;\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#mdProfile\\\" (click)=\\\"registerTab('profile', $event)\\\">Profile-Settings </a>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--.options-items-->\\n                        </div>\\n                        <!--.col size-->\\n                        <div class=\\\"col-xs-12 col-sm-7 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"tab-content\\\" id=\\\"content-right\\\">\\n                                <div *ngIf =\\\"tabActive == 'activity'\\\" id=\\\"mdActivity\\\" class=\\\"tab-activity fade in active\\\" [ngClass]=\\\"{'d-none': tabActive == 'profile'}\\\">\\n                                    <div class=\\\"form-group\\\">\\n                                        <p> Activity </p>\\n                                    </div>\\n                                </div>\\n                                <div *ngIf =\\\"tabActive == 'profile'\\\" id=\\\"mdProfile\\\" class=\\\"tab-profile fade row\\\" [ngClass]=\\\"{'d-none': tabActive == 'activity'}\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Name</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory form-directory\\\" [(ngModel)]=\\\"editcontact.cont_firstname\\\" placeholder=\\\"Type Name\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Last Name</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                           <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_lastname\\\" placeholder=\\\"Type Lastname\\\">                                            \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Email</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_email\\\" placeholder=\\\"Add email\\\">                                            \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Cell Phone</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <!-- <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_cellphone\\\" placeholder=\\\"Add Cell Phone\\\"> -->\\n                                            <p-inputMask class=\\\" form-control sqlx-inputmask inputmask-directory\\\" mask=\\\"+99 999 9999999\\\" id=\\\"cellphone\\\" [(ngModel)]=\\\"editcontact.cont_cellphone\\\" name=\\\"phoneUser_addUser\\\" placeholder=\\\"Add Cell Phone\\\"></p-inputMask>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Charge</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_cargo\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Work Address</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_workaddress\\\" placeholder=\\\"Type Address\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Work Phone</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_workphone\\\" placeholder=\\\"Change Work Phone\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Home Address</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_homeaddress\\\" placeholder=\\\"Type Address\\\">                                            \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Home Phone</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_homephone\\\" placeholder=\\\"Change Home Phone\\\">                      \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Personal Email</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_personalemail\\\" placeholder=\\\"Add email\\\">                                            \\n                                        </div>\\n                                    </div>\\n                                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Share with</label>\\n                                                <span class=\\\"ui-fluid\\\">\\n                                            <p-autoComplete id=\\\"autcompleteShareWith_editTask\\\" name=\\\"autcompleteShareWith_editTask\\\" class=\\\"autocompleteSqlx\\\"\\n                                                            [(ngModel)]=\\\"editcontact.grupsShared\\\"\\n                                                            [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                                            styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"label\\\"\\n                                                            [multiple]=\\\"true\\\">\\n                        \\n                                            </p-autoComplete>\\n                                        </span>\\n                                            </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6 content-btncontact\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btnedit-contact\\\" (click)=\\\"updateContact()\\\" [disabled]=\\\"validate()\\\">Save</button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--.tab-content-->\\n                        </div>\\n                        <!--.col size-->\\n                    </div>\\n                    <!-- /.box-body -->\\n                </div>\\n                <!-- /.box primary -->\\n            </div>\\n            <!-- /.col -->\\n        </div>\\n        <!-- /.row -->\\n    </section>\\n    <!-- /.content -->\\n</section>\";\n\n/***/ }),\n/* 837 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"sprint_det\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight: bold;\\\">\\n            <i class=\\\"icon icon-maincontrol\\\" aria-hidden=\\\"true\\\"></i> SPRINT {{'# ' + sprint.spri_id }}\\n            <span style=\\\"font-weight: bold; color: #737374;\\\">&nbsp;&nbsp; Group: {{ sprint.grop_name }}</span>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"icon icon-home\\\"></i> Home</a>\\n            </li>\\n            <li>\\n                <a routerLink=\\\"/sprints\\\">\\n                    <i class=\\\"icon icon-home\\\"></i> sprints</a>\\n            </li>\\n            <li class=\\\"active\\\">Sprint {{'# ' + sprint.spri_id }}</li>\\n        </ol>\\n    </section>\\n    <div class=\\\"row\\\" style=\\\"height: 54px;background: #dce3e6;\\\">\\n        <div class=\\\"\\\">\\n            <!-- <div class=\\\"title-header-sprint col-xs-2 col-sm-2 col-md-2 col-lg-2\\\">\\n              <h4>Group: {{ sprint.grop_name }}</h4>\\n            </div> -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"text-align: center;background-color: rgb(227,237,241); \\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                    <div class=\\\"btn-groupP\\\" style=\\\"position: relative; margin-top: 14px;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"addSpTask()\\\" data-toggle=\\\"modal-sptask\\\"\\n                            data-target=\\\"#mdAddSpTask\\\" style=\\\"font-weight: bold; color:white;background-color:rgb(15, 180, 225);width: 160px!important;margin-bottom: 5px;\\\">\\n                            <i class=\\\"sq sq-tasks-notifications\\\" style=\\\"font-size: 16px;\\\"></i>\\n                            <div class=\\\"pull-right\\\" style=\\\"transform: translate(-31px, 1px);\\\">Add task</div>\\n                        </button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"addTask()\\\" data-toggle=\\\"modal\\\"\\n                             style=\\\"font-weight: bold;color:white;background-color: rgb(128, 186, 84);width: 160px!important;margin-bottom: 5px;\\\">\\n                            <i class=\\\"sq sq-tasks-notifications\\\" style=\\\"font-size: 16px;\\\"></i>\\n                            <div class=\\\"pull-right\\\" style=\\\" transform: translate(-23px, 1px);\\\">Create Task</div>\\n                        </button>\\n                        <button [disabled]=\\\"seltasks.length == 0\\\" [ngStyle]=\\\"{'cursor': seltasks.length == 0 ? 'not-allowed' : 'pointer' }\\\"\\n                            type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"delTaskToSprint(null)\\\" style=\\\"font-weight: bold;color:white;background-color:rgb(240, 20, 88);width: 160px!important;margin-bottom: 5px;\\\">\\n                            <i class=\\\"fa fa-minus\\\" style=\\\"font-size: 14px;\\\"></i>&nbsp;Delete Task\\n                        </button>\\n                        <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);width: 160px!important;margin-bottom: 5px;\\\"\\n                            data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                            <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(247,251,252); font-size: 14px;\\\"></i> Refresh\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <section class=\\\"content\\\" style=\\\"background-color: rgb(247,251,252);\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-7\\\" style=\\\"padding-left: 0px; padding-right: 0px;margin-bottom: 5px;\\\">\\n                <!-- info sprint -->\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 10px;\\\">\\n                    <div class=\\\"modal-content-sprint\\\">\\n                        <div class=\\\"modal-header-info-sprint\\\">\\n                            <span>Sprint Info</span>\\n                            <h4 class=\\\"modal-title\\\"></h4>\\n                        </div>\\n                        <div class=\\\"modal-body\\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">Sprint Start: </label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_init}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">End Date: </label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_end}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">Points: </label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_points}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                    <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Description:\\n                                    </label>\\n                                    <div class=\\\"label-noedit col-xs-10 col-sm-10 col-md-10 col-lg-10 span-sqlx\\\" style=\\\"max-height: 75px; overflow: scroll;\\\">\\n                                        {{sprint.spri_description}}\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <!-- end info sprint -->\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right: 0px; padding-left: 0px;\\\">\\n                    <!-- team -->\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"modal-content-sprint\\\">\\n                            <div class=\\\"modal-header-info-sprint\\\">\\n                                <span>Team</span>\\n                                <h4 class=\\\"modal-title\\\"></h4>\\n                            </div>\\n                            <div class=\\\"modal-body\\\">\\n                                <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                                    <div class=\\\"nav-tabs-custom-spr\\\" style=\\\"overflow-x: scroll;\\\">\\n                                        <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                            <li *ngFor=\\\"let tm of team; let i = index\\\" [ngClass]=\\\"{ 'active': i=='0'}\\\">\\n                                                <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" [ngClass]=\\\"{ 'assigned': tm.user_assigned }\\\" (click)=\\\"teamInfo(tm.user_name, tm.user_lastname, tm.role_name,[tm.user_id],tm.user_id) \\\"\\n                                                    style=\\\"color: #839195; text-decoration: none;\\\">\\n                                                    <div *ngIf=\\\"tm.user_id != 0\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.user_name +' '+ tm.user_lastname}}\\\"\\n                                                        class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;background: transparent;\\\"\\n                                                        [ngStyle]=\\\"{ 'border-color': tm.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                                                        <img [src]=\\\"tm.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                            style=\\\"padding: 0px; width:39px;height:39px;border-radius: 50%;\\\"\\n                                                            class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tm.user_id == 0\\\" class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;\\\"\\n                                                        [ngStyle]=\\\"{ 'background': tm.role_color}\\\">\\n                                                        <i class=\\\"sq sq-scrum user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 30px;\\\"></i>\\n                                                    </div>\\n                                                </a>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-md-12\\\">\\n                                        <h5 id=\\\"team-name\\\" class=\\\"team-label\\\" style=\\\"margin-bottom:0;\\\"></h5>\\n                                        <h6 id=\\\"team-profile\\\" class=\\\"team-label\\\" style=\\\"margin:0;\\\"></h6>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-5\\\" style=\\\"padding-left: 0px;margin-top: 5px;\\\">\\n                <!-- grafica burndown -->\\n                <div id=\\\"burndown-sprint\\\" class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11\\\">\\n                    <div class=\\\"box box-success burndown-border\\\">\\n                        <div class=\\\"box-header with-border border-burndown\\\">\\n                            <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 btns-burndown\\\" style=\\\"padding:0;\\\">\\n                                <div class=\\\"box-tittle BurnDown\\\" style=\\\"padding-top: 5px;transform: translate(-7px, -9px);\\\">\\n                                    <i class=\\\"sq sq-burndown\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <div class=\\\"burndownsprint\\\">BurnDown</div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 btns-burndown\\\" style=\\\"padding-left: 0px;padding-right: 0px;\\\">\\n                                <button id=\\\"burndown-sprint-minus-sprint\\\" type=\\\"button\\\" class=\\\"btn btn-box-tool btn-minus pull-right\\\"\\n                                    data-widget=\\\"collapse\\\" style=\\\"height: 23px;width: 23px;\\\">\\n                                    <i class=\\\"fa fa-minus\\\" style=\\\"margin-left: -5px;margin-top: -6px;padding: -3px;position: absolute;\\\"></i>\\n                                </button>\\n                                <div class=\\\"pull-right\\\" id=\\\"button-work-team\\\">\\n                                    <a id=\\\"showburndown_sprint\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showburndown()\\\">YOUR\\n                                        WORK TEAM\\n                                        <i class=\\\"fa fa-chevron-down\\\" aria-hidden=\\\"true\\\"></i></a>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"box-body\\\">\\n                            <p-chart id=\\\"burndownData_sprint\\\" type=\\\"line\\\" [data]=\\\"burndownData\\\" (onDataSelect)=\\\"chartClicked($event)\\\"\\n                                height=\\\"200\\\"></p-chart>\\n                        </div>\\n                    </div>\\n                </div>\\n                <!-- end grafica burndown -->\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <!-- <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div> -->\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-12 col-lg-12\\\">\\n                <div class=\\\"box-params-sprint\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div>\\n                            <br>\\n                            <table *ngIf=\\\"sprintrefs\\\" id=\\\"results-params\\\" class=\\\"table table-bordered-sqlxs table-sprintsview\\\">\\n                                <thead style=\\\"border: 1px solid #fff;\\\">\\n                                    <th (click)=\\\"selectAll(1)\\\" style=\\\"width: 5%\\\">\\n                                        <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                        <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                    </th>\\n                                    <th style=\\\"width: 5%;\\\">Task</th>\\n                                    <th style=\\\"width: 40%;\\\">Task Description</th>\\n                                    <th style=\\\"width: 10%;\\\">Product</th>\\n                                    <th style=\\\"width: 5%;\\\">Project Related</th>\\n                                    <th style=\\\"width: 10%;\\\">Delivery Date</th>\\n                                    <th style=\\\"width: 5%;\\\">Task Points</th>\\n                                    <th style=\\\"width: 5%;\\\">Task Points D</th>\\n                                    <th style=\\\"width: 5%;\\\">Assigned</th>\\n                                    <th style=\\\"width: 15%;\\\">Actions</th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let spr of sprints | filterfield : { pos : posState, text : textState }\\\">\\n                                        <td>\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"selTasks_sprint\\\" name=\\\"seltasks\\\" value=\\\"{{spr.task_id}}\\\"\\n                                                    label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td>{{ escapeHtml(spr.task_id) }}</td>\\n                                        <td style=\\\"text-align: justify!important;\\\">{{ escapeHtml(spr.task_subject) }}\\n                                        </td>\\n                                        <td>{{ spr.prod_name }}</td>\\n                                        <td>\\n                                            <a (click)=\\\"showModalProject(spr.proj_id)\\\" *ngIf=\\\"spr.proj_id; else alternan\\\">{{escapeHtml(spr.proj_id)\\n                                                }}</a>\\n                                            <ng-template #alternan>\\n                                                <p> - </p>\\n                                            </ng-template>\\n                                        </td>\\n                                        <td>{{ escapeHtml(spr.task_delivery) }}</td>\\n                                        <td>{{ escapeHtml(spr.task_points) }}</td>\\n                                        <td>{{ escapeHtml(spr.task_pointsd) }}</td>\\n                                        <td>\\n                                            <div class=\\\"col-xs-12 col-md-12\\\">\\n                                                <div class=\\\"icon-team-sprint-table\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{spr.user_name +' '+ spr.user_lastname}}\\\"\\n                                                    style=\\\"padding: 0px; margin-left: 5px;background: transparent;\\\"\\n                                                    [ngStyle]=\\\"{ 'border-color': spr.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                                                    <img [src]=\\\"spr.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                        style=\\\"width:24px;height:24px;border-radius: 50%;\\\" class=\\\"user-image\\\"\\n                                                        alt=\\\"User Image\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td>\\n                                            <div class=\\\"btn-group-params\\\">\\n                                                <i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"showModaltk(spr.task_id)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"View\\\"></i>\\n                                                <i class=\\\"fa fa-trash\\\" aria-hidden=\\\"true\\\" (click)=\\\"delTaskToSprint(spr.task_id)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\"></i>\\n                                                <i class=\\\"fa fa-pencil\\\" aria-hidden=\\\"true\\\" (click)=\\\"editTask(spr)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"></i>\\n                                                <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" (click)=\\\"showDuplicateTaskModal(spr.task_id)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Duplicate\\\"></i>\\n                                            </div>\\n                                        </td>\\n                                        <projectview [myProjectId]=\\\"spr.proj_id\\\"></projectview>\\n                                    </tr>\\n                                </tbody>\\n                                <tfoot *ngIf=\\\"textState !=''\\\">\\n                                    <tr>\\n                                        <th></th>\\n                                        <th></th>\\n                                        <th></th>\\n                                        <th></th>\\n                                        <th></th>\\n                                        <th style=\\\"text-align: right; color:#333333;\\\">Total Points:</th>\\n                                        <th style=\\\"text-align: center; color:#333333;\\\">{{round(totalpoints_p, 2)}}</th>\\n                                        <th style=\\\"text-align: center; color:#333333;\\\">{{round(totalpoints_d, 2)}}</th>\\n                                        <th style=\\\"text-align: right; color:#333333;\\\">Pending Points:</th>\\n                                        <th style=\\\"text-align: center; color:#333333;\\\">(\\n                                            {{round(totalpoints_pending, 2)}}\\n                                            )\\n                                        </th>\\n                                    </tr>\\n                                </tfoot>\\n                            </table>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- <div class=\\\"row\\\" style=\\\"margin-top: 10px;\\\">\\n\\n        </div> -->\\n    </section>\\n\\n    <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdAddSpTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"closeModal()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        Add Tasks\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"tab-content\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;margin-bottom: 3px;\\\">\\n                                <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff; float: right;\\\">\\n                                    <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                        <div class=\\\"label-input-mainfilter\\\">\\n                                            <input id=\\\"searchTask_mdAddSpTask\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\"\\n                                                class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"searchtask\\\"\\n                                                (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                        </div>\\n                                        <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                            <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                                <i class=\\\"sq sq-view\\\"></i>\\n                                            </button>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\" style=\\\"margin-bottom: 0px;\\\">\\n                                        <thead>\\n                                            <th style=\\\"text-align: center; width: 5%;\\\">\\n                                                <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                                <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                            </th>\\n                                            <th style=\\\"text-align: center; width: 8%;\\\">Task</th>\\n                                            <th style=\\\"text-align: center; width: 13%;\\\">Status</th>\\n                                            <th style=\\\"text-align: center; width: 40%;\\\">Task Description</th>\\n                                            <th style=\\\"text-align: center; width: 8%;\\\">Points</th>\\n                                            <th style=\\\"text-align: center; width: 8%;\\\">Points Recorded</th>\\n                                            <th style=\\\"text-align: center; width: 18%;\\\">Asigned</th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"max-height: 600px;overflow: scroll;width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let tk of sprintTask\\\">\\n                                                <td style=\\\"text-align: center; width: 5%;\\\">\\n                                                    <div class=\\\"ui-g\\\">\\n                                                        <p-checkbox id=\\\"checkboxSeltasks_mdAddSpTask\\\" name=\\\"listask\\\"\\n                                                            value=\\\"{{tk.task_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\">\\n                                                        </p-checkbox>\\n                                                    </div>\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 8%;\\\">{{ escapeHtml(tk.task_id) }}\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 13%;\\\">\\n                                                    <div *ngIf=\\\"tk.para_status == 35 || tk.para_status == 36 ||tk.para_status == 37 \\\">\\n                                                        <small class=\\\"label task-pending \\\">\\n                                                            <i class=\\\"sq sq-pending\\\"></i> Pending\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 38\\\">\\n                                                        <small class=\\\"label task-developing\\\">\\n                                                            <i class=\\\"sq sq-developing\\\"></i> Developing\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 39\\\">\\n                                                        <small class=\\\"label task-developing\\\">\\n                                                            <i class=\\\"sq sq-move-to-testing\\\"></i> Testing\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 41\\\">\\n                                                        <small class=\\\"label task-improving\\\">\\n                                                            <i class=\\\"sq sq-improving\\\"></i> Improving\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 42\\\">\\n                                                        <small class=\\\"label task-expiring\\\">\\n                                                            <i class=\\\"fa fa-times-circle\\\"></i> Closed\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 40\\\">\\n                                                        <small class=\\\"label task-completed\\\">\\n                                                            <i class=\\\"sq sq-completed\\\"></i> Completed\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 44\\\">\\n                                                        <small class=\\\"label task-backlog\\\">\\n                                                            <i class=\\\"sq sq-backlog\\\"></i> Backlog\\n                                                        </small>\\n                                                    </div>\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 40%;\\\">\\n                                                    {{ escapeHtml(tk.task_subject) }}\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 8%;\\\">\\n                                                    {{ escapeHtml(tk.task_points) }}\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 8%;\\\">\\n                                                    {{ escapeHtml(tk.task_pointsd) }}\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 18%;\\\">{{ escapeHtml(tk.asigned)\\n                                                    }}\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n\\n                            <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                <div class=\\\"contacts-controls\\\">\\n                                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                            {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage *\\n                                            limitpage)\\n                                            >\\n                                            itemcount ?\\n                                            itemcount : (currentpage * limitpage)\\n                                            }} of {{ itemcount }} results\\n                                        </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                        <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                            [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                            <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                            <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                        <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" style=\\\"\\\"\\n                                            [(ngModel)]=\\\"currentpage\\\" (change)=\\\"getList()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                        </select>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                        <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                            [disabled]=\\\"setCurPage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\" (click)=\\\"closeModal()\\\">Close\\n                    </button>\\n                    <button (click)=\\\"saveSpTask(seltasks)\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add\\\" [disabled]=\\\"!seltasks.length || !sprintTask || sprintTask.length == 0\\\"\\n                        data-dismiss=\\\"modal\\\">\\n                        Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <!--Formulario Create Task y edit task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddTaskToSprint\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div class=\\\"modal-content-params\\\">\\n                <div *ngIf=\\\"task.task_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" +\\n                        task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div *ngIf=\\\"!task.task_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>&nbsp;&nbsp; New Task</h4>\\n                </div>\\n\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input id=\\\"inputSubject_AddTaskToSprint\\\" name=\\\"inputSubject_AddTaskToSprint\\\" class=\\\"form-control sqlx-input\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"Subject\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssign_AddTaskToSprint\\\" name=\\\"dropdownAssign_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"dropdownAssign_AddTaskToSprint\\\" name=\\\"dropdownAssign_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropdownProduct_AddTaskToSprint\\\" name=\\\"dropdownProduct_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group input-squadlinx \\\">\\n                                <label>Points</label>\\n                                <input id=\\\"inputPoints_AddTaskToSprint\\\" name=\\\"inputPoints_AddTaskToSprint\\\" type=\\\"number\\\"\\n                                    class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_points\\\" [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_AddTaskToSprint\\\" name=\\\"calendarDeliveryDate_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"task.task_delivery\\\" icon=\\\"sq sq-calendar\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_AddTaskToSprint\\\" name=\\\"dropdownProject_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_newTask\\\" name=\\\"dropdownLevel_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container-sprint\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n\\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_newTask\\\" name=\\\"units_newTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">\\n                                    </div>\\n\\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_newTask\\\" name=\\\"dropdownUnits_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\"\\n                                            [(ngModel)]=\\\"task.unit_id\\\" placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_newTask\\\" name=\\\"autcompleteShareWith_newTask\\\"\\n                                        class=\\\"autocompleteSqlx shareWith_taskUsers\\\" [(ngModel)]=\\\"task.usersShared\\\"\\n                                        [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <!--<div class=\\\"col-xs-12 col-sm-6 col-md-5 col-lg-5\\\" style=\\\"height: 58px;\\\">-->\\n                        <!--<label class=\\\"label-input-checkbox-sqlx\\\">Options</label>-->\\n                        <!--<div class=\\\"col-xs-12 col-md-12 col-lg-12 input-checkbox-sqlx\\\" style=\\\"padding-top: 5px;\\\">-->\\n                        <!--<label class=\\\"form-check-label\\\">-->\\n                        <!--<input id=\\\"inputComplete_AddTaskToSprint\\\" name=\\\"inputComplete_AddTaskToSprint\\\"-->\\n                        <!--type=\\\"checkbox\\\" class=\\\"form-check-input\\\" [(ngModel)]=\\\"task.completed\\\">-->\\n                        <!--Mark-->\\n                        <!--as Complete-->\\n                        <!--</label>-->\\n                        <!--</div>-->\\n                        <!--</div>-->\\n                    </div>\\n\\n                    <!-- row navegacion-->\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\" id=\\\"tabs_createTask\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                                <a id=\\\"descriptionTask_AddTaskToSprint\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\"\\n                                    (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                                <a id=\\\"associateFormTask_AddTaskToSprint\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\"\\n                                    (click)=\\\"setPage(2)\\\">Associate Form</a>\\n                            </li>\\n                            <li id=\\\"li_criteria_sprint_newTask\\\" *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenu == 3}\\\">\\n                                <a id=\\\"a_criteriaTask_sprint_newTask\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_sprint_newTask\\\"\\n                                    (click)=\\\"setPage(3)\\\">Criteria </a>\\n                            </li>\\n                            <li id=\\\"li_attachments_sprint_newtask\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenu == 4}\\\">\\n                                <a id=\\\"a_attachmentsTask_sprint_newTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_sprint_newTask\\\"\\n                                    (click)=\\\"setPage(4)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\" id=\\\"divContenedor_descriptionTask_AddTaskToSprint\\\"\\n                                name=\\\"divContenedor_descriptionTask_AddTaskToSprint\\\">\\n                                <p-editor id=\\\"editor_descriptionTask_AddTaskToSprint\\\" name=\\\"editor_descriptionTask_AddTaskToSprint\\\"\\n                                    [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"divAssociateForm_AddTaskToSprint\\\" name=\\\"divAssociateForm_AddTaskToSprint\\\">\\n                                <div style=\\\"max-height:142px; overflow:scroll; width:100%\\\">\\n                                    <table style=\\\"text-align: center;width: 100%;\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 50px;\\\">\\n                                                <td style=\\\"width: 40%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                                    <div class=\\\"form-squadlinx\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td style=\\\"width: 60%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                                    <div class=\\\"form-squadlinx\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!--pestaña para los criterios de aceptacion de las tareas-->\\n                        <div *ngIf=\\\"tagMenu == 3 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_sprint_newTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask ; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldForm(i)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Criteria\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n                        <!--end pestaña para los criterios de aceptacion de las tareas-->\\n\\n                        <!--pestaña new div for attachments-->\\n                        <div *ngIf=\\\"tagMenu == 4 && task.attachments && task.attachments.length > 0\\\" id=\\\"attachments_sprint_newTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div id=\\\"divAttachmentsTask_AddTaskToSprint\\\" name=\\\"divAttachmentsTask_AddTaskToSprint\\\"\\n                                class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button *ngIf=\\\"task.task_id\\\" id=\\\"btnDeleteAttachmentTask_AddTaskToSprint\\\"\\n                                                        type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment_editTask(task, att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"!task.task_id\\\" id=\\\"btnDeleteAttachment_AddTaskToSprint\\\"\\n                                                        type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment_newTask(att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!-- row navegacion-->\\n                </div>\\n                <!--end. pestaña new div for attachments-->\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;position: inherit;background-color: #007bd2!important;border-color: #007bd2!important;\\\"\\n                            for=\\\"fileUpload_AddTaskToSprint\\\" class=\\\"custom-file-upload btn-success btn-sm custom-upload-form-projectlist\\\">\\n                            <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_AddTaskToSprint\\\" name=\\\"fileUpload_AddTaskToSprint\\\" type=\\\"file\\\" style=\\\"display: none;\\\"\\n                            accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            (change)=\\\"onChange($event)\\\" />\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                            <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm  btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\"\\n                            [disabled]=\\\"validateTask()\\\" (click)=\\\"saveTaskToSprint(sprint.spri_id)\\\">\\n                            Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--End Formulario Create Task y edit task-->\\n\\n    <!--Modal duplicate task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdDuplicateTask\\\" role=\\\"dialog\\\">\\n        <!--Modal New Task-->\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"subject_duplicateTask\\\" name=\\\"subject_duplicateTask\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropwonProduct_duplicateTask\\\" name=\\\"dropwonProduct_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_duplicateTask\\\" name=\\\"dropdownProject_duplicateTask\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"dropdownSprint_duplicateTask\\\" name=\\\"dropdownSprint_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                    [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_duplicateTask\\\" name=\\\"dropdownLevel_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_duplicateTask\\\" name=\\\"calendarDeliveryDate_duplicateTask\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"points_duplicateTask\\\" name=\\\"points_duplicateTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_duplicateTask\\\" name=\\\"autcompleteShareWith_duplicateTask\\\"\\n                                        class=\\\"autocompleteSqlx shareWith_taskUsers\\\" [(ngModel)]=\\\"task.usersShared\\\"\\n                                        [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n                        \\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_editTask\\\" name=\\\"units_editTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">\\n                                    </div>\\n                        \\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_editTask\\\" name=\\\"dropdownUnits_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"task.unit_id\\\"\\n                                            placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_duplicateTask\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 1}\\\">\\n                                <a id=\\\"a_descriptionTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(1)\\\">Description</a>\\n                            </li>\\n                            <li id=\\\"li_criteria_duplicateTask\\\" *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuDupliTk == 2}\\\">\\n                                <a id=\\\"a_criteriaTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(2)\\\">Criteria </a>\\n                            </li>\\n                            <li id=\\\"li_attachments_duplicateTask\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuDupliTk == 3}\\\">\\n                                <a id=\\\"a_attachmentsTask_duplicateTaskk\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(3)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuDupliTk == 1\\\" id=\\\"description_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_duplicateTask\\\" name=\\\"divContenedor_description_duplicateTask\\\"\\n                                style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editorDescription_duplicateTask\\\" name=\\\"editorDescription_duplicateTask\\\"\\n                                    [(ngModel)]=\\\"task.task_description_d\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 2 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_duplicateTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask ; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldFormDuplicateTask(i)\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 3\\\" id=\\\"attachments_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_duplicateTask\\\"\\n                                name=\\\"contenedorAttachmentsTask_duplicateTask\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentDuplicateTask(task, att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                            for=\\\"fileUpload_duplicateTask\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_duplicateTask\\\" name=\\\"fileUpload_duplicateTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                            <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_duplicateTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                            data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"buttonSave_duplicateTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateDuplicateTask()\\\" (click)=\\\"saveDuplicateTask()\\\">\\n                            Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!-- . Modal duplicate task-->\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdBurndown\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdBurndown-sprint\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                        style=\\\"color: #ffffff; opacity: 1;\\\" (click)=\\\"doneFilter()\\\">\\n                        <i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h3 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">Select work\\n                        team\\n                    </h3>\\n                </div>\\n                <!--.modal-header-->\\n                <div id=\\\"search-mdBurndown-sprint\\\" class=\\\"modal-body\\\" style=\\\"height:100%;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 search-work-team\\\" style=\\\"padding-right: 3px;\\\">\\n                            <div class=\\\"pull left col-xs-11 col-sm-11 col-md-11 col-lg-11 label-input-mainfilter\\\" style=\\\" padding: 0; margin-left: 0;\\\">\\n                                <input id=\\\"searchuser-mdBurndown-sprint\\\" name=\\\"searchuser-mdBurndown-sprint\\\" type=\\\"text\\\"\\n                                    class=\\\"input-mainfilter\\\" placeholder=\\\"Search\\\" [(ngModel)]=\\\"searchuser\\\" style=\\\"font-weight: bold; font-size: 17px;\\\">\\n                            </div>\\n                            <div class=\\\"pull-right col-xs-1 col-sm-1 col-md-1 col-lg-1 search-input-mainfilter\\\" style=\\\"margin: 0; padding: 0;\\\">\\n                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248); font-size: 1.8em;\\\"></i>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div id=\\\"select-mdBurndown-sprint\\\" class=\\\"form-group\\\" style=\\\"max-height: 400px;overflow: scroll;\\\">\\n                        <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n                            <thead>\\n                                <th id=\\\"selectall-mdBurndown-sprint\\\" (click)=\\\"selectAllItems()\\\" style=\\\"width: 30px; padding-left: 10px; padding-top: 10px;\\\">\\n                                    <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"padding-left: 15px; padding-top: 0; font-size: 1.5em;\\\">\\n                                        <i *ngIf=\\\"selectedNodes.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                        <i *ngIf=\\\"selectedNodes.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                    </div>\\n                                    <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 select-product\\\" style=\\\"color: rgb(130, 145, 152); padding: 6px 0;\\\">\\n                                        ALL\\n                                    </div>\\n                                </th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let ct of contactsTree\\\">\\n                                    <td style=\\\"padding:0 12px 12px 12px; \\\">\\n                                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"height: auto; padding: 0;\\\">\\n\\n                                            <p-checkbox id=\\\"selectparent-mdBurndown-sprint\\\" name=\\\"selectparent-mdBurndown-sprint\\\"\\n                                                value=\\\"{{ct.data}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelectA($event, ct.children, ct.data)\\\"\\n                                                (change)=\\\"updateSelectA($event, ct.children, ct.data)\\\"></p-checkbox>\\n\\n                                        </div>\\n                                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align: left; padding: 0;text-transform: uppercase; font-weight: bold; \\\">\\n                                            {{ ct.label }}\\n                                        </div>\\n                                        <div *ngIf=\\\"ct.children.length > 0\\\">\\n                                            <div *ngFor=\\\"let ch of ct.children | filter : searchuser\\\" style=\\\"margin-left:20px;\\\">\\n                                                <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                    style=\\\"margin:0;padding:0;height:auto;max-height: 30px;\\\">\\n                                                    <p-checkbox id=\\\"selectchild-mdBurndown-sprint\\\" name=\\\"selectchild-mdBurndown-sprint\\\"\\n                                                        value=\\\"{{ch.data}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\"\\n                                                        (click)=\\\"updateSelect($event)\\\" (change)=\\\"updateSelect($event)\\\">\\n                                                    </p-checkbox>\\n                                                </div>\\n                                                <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align:left;height:auto;max-height: 30px; padding:0; font-weight: bold;\\\">\\n                                                    {{ ch.label }}\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                </div>\\n                <!--.modal-body-->\\n                <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n                    <button id=\\\"btnDone_mdBurndown_sprint\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\"\\n                        data-dismiss=\\\"modal\\\" (click)=\\\"doneFilter()\\\">Done\\n                    </button>\\n                </div>\\n                <!--.modal-footer-->\\n            </div>\\n            <!--.modal-content-->\\n        </div>\\n        <!--.modal-dialog-->\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdDayView\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\" id=\\\"divContenedor_burndown_mdDayView\\\" name=\\\"divContenedor_burndown_mdDayView\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                            class=\\\"sq sq-close\\\" style=\\\"color:white;font-weight: bold;font-size: 20px;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color:white;font-weight: bold;font-size: 18px;text-transform: uppercase;\\\"><i\\n                            class=\\\"sq sq-burndown\\\" style=\\\"font-weight: bold;font-size: 33px;\\\"></i> Day Job for\\n                        {{dayJob}} </h4>\\n                </div>\\n                <div class=\\\"content-comments-users\\\" style=\\\"max-height: 190px;min-height: 75px;overflow: scroll;\\\">\\n                    <div class=\\\"box-body\\\" style=\\\"margin-top:10px;\\\" id=\\\"contentDescriptionSprint_mdDayView\\\" name=\\\"contentDescriptionSprint_mdDayView\\\">\\n                        <ul class=\\\"timeline daily-timeline\\\">\\n                            <li *ngFor=\\\"let day of dayView\\\" style=\\\"padding-bottom:5px;\\\">\\n                                <i class=\\\"fa fa-dot-circle-o\\\" style=\\\"color: rgb(68, 180, 248); font-size: 30px;background-color: transparent;margin-left: -3px; margin-top: -3px;\\\"></i>\\n                                <div class=\\\"timeline-item daily-timeline-item\\\">\\n                                    <h3 class=\\\"timeline-header timeline-dailyheader\\\">\\n                                        <span *ngIf=\\\"day.task_id && day.task_id != null\\\" [ngStyle]=\\\"day.spri_id == null ? { 'color': 'red' } : {}\\\">\\n                                            <b>TASK #{{day.task_id}}</b><br>\\n                                        </span>\\n                                        <b>Points registered:\\n                                            {{day.dail_points}}</b>\\n                                        <span *ngIf=\\\"day.task_percentage && day.task_percentage != 0\\\" style=\\\"font-weight: bold;margin-left: 258px;\\\">Progress:\\n                                            {{day.task_percentage}}%</span>\\n                                    </h3>\\n                                    <div class=\\\"timeline-body daily-timeline-body\\\" style=\\\"margin-top: -8px;max-height: 45px;overflow: scroll;color:rgb(167, 167, 167); width: 93%;text-align: justify;\\\">\\n                                        {{\\\"Comments: \\\" + escapeHtml(day.dail_text)}}\\n                                    </div>\\n                                </div>\\n                            </li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"totalp && totalp > 0\\\" style=\\\"border: none; text-align: center;\\\">\\n                    <h4 style=\\\"font-weight: bold;font-size: 14px;\\\"> TOTAL POINTS REGISTERED : {{\\\" \\\" + totalp}} </h4>\\n                </div>\\n                <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n                    <button id=\\\"btnClose_mdDayView_sprint\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                        style=\\\"background-color: rgb(141,180,95);\\\">Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\\n<taskview *ngFor=\\\"let spr of sprints | filterfield : { pos : posState, text : textState }\\\" [myTaskId]=\\\"spr.task_id\\\">\\n</taskview>\";\n\n/***/ }),\n/* 838 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"sprints\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> SPRINTS\\n            <small style=\\\"font-size:15px;\\\">Scrum</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Sprints</li>\\n        </ol>\\n    </section>\\n    <div class=\\\"row\\\" style=\\\"height: 74px;background: #dce3e6;\\\">\\n        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"box-header-params\\\" style=\\\"border-bottom: none;\\\">\\n                <div class=\\\"btn-groupP\\\">\\n                    <input id=\\\"search-input\\\" type=\\\"text\\\" class=\\\"form-control input-sm\\\" [(ngModel)]=\\\"search\\\"\\n                           (ngModelChange)=\\\"changedExtraHandler($event)\\\"\\n                           style=\\\"display: inline-flex; background-color: #fff;color: #000;font-weight: 100;position:inherit;\\\">\\n                    <button type=\\\"button\\\" (click)=\\\"addSprint()\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n                            style=\\\"background-color:rgb(180, 188, 191);\\\" data-toggle=\\\"modal\\\"\\n                            data-target=\\\"#mdAddSprint\\\"\\n                            style=\\\"background: #b4bcbf!important; border: 1px solid #b4bcbf !important; color: #565a5b;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-plus\\\"></i>&nbsp;Add\\n                    </button>\\n                    <button type=\\\"button\\\" (click)=\\\"getMySprints()\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n                            style=\\\"background-color:rgb(180, 188, 191);\\\"\\n                            style=\\\"background: #b4bcbf!important; border: 1px solid #b4bcbf !important; color: #565a5b;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <section class=\\\"content\\\" style=\\\"padding: 0;\\\">\\n\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-1 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\"\\n                        style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList([''])\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\"\\n                               (click)=\\\"setGroupList([gr.grop_id+''])\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n\\n            <!-- <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\">\\n            </div> -->\\n            <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"margin-top: 20px; margin-left: 10px;\\\">\\n                <div>\\n                    <div class=\\\"box-params \\\">\\n                        <div class=\\\"box-body\\\">\\n                            <div class=\\\"table-responsive\\\" style=\\\"text-align: center;\\\">\\n                                <table id=\\\"results-params\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                                    <thead>\\n                                    <th (click)=\\\"setOrder('spri_init')\\\" style=\\\"width: 10%;\\\">Number\\n                                        <span [hidden]=\\\"posOrder !== 'spri_init'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('spri_init')\\\" style=\\\"width: 15%;\\\">Group\\n                                        <span [hidden]=\\\"posOrder !== 'spri_init'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('spri_init')\\\" style=\\\"width: 10%;\\\">Date Start\\n                                        <span [hidden]=\\\"posOrder !== 'spri_init'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('spri_end')\\\" style=\\\"width: 10%;\\\">Date End\\n                                        <span [hidden]=\\\"posOrder !== 'spri_end'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th style=\\\"width: 10%;\\\">Points</th>\\n                                    <th (click)=\\\"setOrder('spri_description')\\\" style=\\\"width: 30%;\\\">Description\\n                                        <span [hidden]=\\\"posOrder !== 'spri_description'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th style=\\\"width: 15%;\\\">Actions</th>\\n                                    </thead>\\n                                    <tbody>\\n                                    <!--<tr *ngFor=\\\"let spr of sprints | filter : search \\\">-->\\n                                    <tr *ngFor=\\\"let spr of sprints | filter : search | filterfield : { pos : posGroup, text : textGroup} | paginate : { currp : currentpage, limit : limitpage} | order : { pos : posOrder, desc : orderDesc }\\\"\\n                                        [ngStyle]=\\\"spr.para_status == 42 ? { 'background': 'rgba(255, 0, 0, 0.13)' } : spr.para_status == 43 ? { 'background': '#c0c0bf' } : {}\\\">\\n\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.spri_id) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.grop_name)\\n                                                }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.spri_init)\\n                                                }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.spri_end)\\n                                                }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.spri_points)\\n                                                }}</a>\\n                                        </td>\\n                                        <td style=\\\"text-align: justify!important;max-height: 194px; overflow: scroll;\\\">\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">\\n                                                {{ escapeHtml(spr.spri_description) }}\\n                                            </a>\\n                                        </td>\\n                                        <td>\\n                                            <div class=\\\"btn-group-params\\\">\\n                                                <i class=\\\"sq sq-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"showModal(spr)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\"></i>\\n                                                <i class=\\\"sq sq-quickedit\\\" aria-hidden=\\\"true\\\" (click)=\\\"edit(spr)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"></i>\\n                                                <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\" (click)=\\\"delete(spr)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\"></i>\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div class=\\\"box-footer no-padding\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"margin-top: 10px;\\\">\\n                        <div class=\\\"footer-table-controls\\\">\\n                            <div class=\\\"btn-group\\\">\\n                                <button type=\\\"button\\\" (click)=\\\"load()\\\" class=\\\"btn btn-sm\\\" style=\\\"background: #dce3e6;\\\">\\n                                    <i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh\\n                                </button>\\n                            </div>\\n                            <div class=\\\"pull-right\\\">\\n                                {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) >\\n                                (sprints | filter : search | filterfield : { pos : posGroup, text : textGroup }).length\\n                                ? (sprints | filter : search | filterfield : { pos : posGroup, text : textGroup\\n                                }).length : (limitpage * currentpage) }} / {{ (sprints | filter : search | filterfield :\\n                                { pos : posGroup, text : textGroup }).length }}\\n                                <div class=\\\"btn-group\\\">\\n                                    <button [disabled]=\\\"currentpage == 1\\\" type=\\\"button\\\" class=\\\"btn btn-sm\\\"\\n                                            (click)=\\\"setCurPage(0)\\\" style=\\\"background: #dce3e6;\\\">\\n                                        <i class=\\\"fa fa-chevron-left\\\"></i>\\n                                    </button>\\n                                    <button [disabled]=\\\"currentpage == lastpage\\\" type=\\\"button\\\" class=\\\"btn btn-sm\\\"\\n                                            (click)=\\\"setCurPage(1)\\\" style=\\\"background: #dce3e6;\\\">\\n                                        <i class=\\\"fa fa-chevron-right\\\"></i>\\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdSprint\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff; font-size: 20px;\\\"></i>\\n                    <span>SPRINT # {{ sprint.spri_id }}</span>\\n                    <button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\"></h4>\\n                    <!--<i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>-->\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>Group</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6\\\">\\n                            <p>{{sprint.grop_name}}</p>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>Start Date:</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6\\\">\\n                            <p>{{sprint.spri_init}}</p>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>End Date:</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6\\\">\\n                            <p>{{ sprint.spri_end }}</p>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>Points:</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6\\\">\\n                            <p>{{ sprint.spri_points }}</p>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>Description:</label>\\n                        </div>\\n                        <div class=\\\"col-xs-8\\\"\\n                             style=\\\"max-height: 150px;overflow: scroll;text-align: justify;color: #919da1;\\\">\\n                            <p>{{ sprint.spri_description }}</p>\\n                        </div>\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddSprint\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n                    <span>NEW SPRINT</span>\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\"></h4>\\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"padding-right: 25px\\\">\\n                    <div class=\\\"row\\\">\\n                        <!-- Start Date -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Start Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\"\\n                                            id=\\\"calendarStartDate_sprints\\\"\\n                                            [(ngModel)]=\\\"newSprint.spri_init\\\"\\n                                            dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"\\n                                            view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                            [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!-- End Date -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>End Date</label>\\n                                <p-calendar id=\\\"calendarEndDate_sprints\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\"\\n                                            [(ngModel)]=\\\"newSprint.spri_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                            [showIcon]=\\\"true\\\"\\n                                            view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                            [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!-- Points -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input id=\\\"inputPoints_sprints\\\" name=\\\"inputPoints_sprints\\\" type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"newSprint.spri_points\\\" [min]=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <!-- Groups -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown id=\\\"dropdownGroup_sprints\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                            [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\"\\n                                            [(ngModel)]=\\\"newSprint.grop_id\\\" placeholder=\\\"Select Group\\\"\\n                                            filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Description -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 col-lg-12\\\">\\n                            <div class=\\\"form-group textarea-squadlinx\\\">\\n                                <label>Description</label>\\n                                <textarea id=\\\"textareaDescription_sprints\\\" class=\\\"form-control ng-pristine ng-valid ng-touched txt-sqlx\\\"\\n                                          placeholder=\\\"Description of the Sprint\\\" rows=\\\"3\\\"\\n                                          [(ngModel)]=\\\"newSprint.spri_description\\\"></textarea>\\n                            </div>\\n                        </div>\\n                        <!-- Days of Sprint -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group scrollable squadlinx-table\\\" style=\\\"max-height: 300px;\\\">\\n                                <label>Sprint Days</label>\\n                                <table class=\\\"table table-bordered\\\"\\n                                       style=\\\"margin-bottom:0px;\\\" id=\\\"tableSprintDays_sprints\\\">\\n                                    <thead>\\n                                    <th style=\\\"width:5%;\\\"></th>\\n                                    <th style=\\\"width:60%;\\\">Date</th>\\n                                    <th style=\\\"width:35%;\\\">Points</th>\\n                                    </thead>\\n                                    <tbody>\\n                                    <tr *ngFor=\\\"let spd of newSprint.spdays\\\">\\n                                        <td>\\n                                            <input class=\\\"checkbox-sprint \\\"type=\\\"checkbox\\\" id=\\\"checkboxDaysSprint_sprints\\\" name=\\\"product-checkbox\\\" [value]=\\\"spd.spdy_status\\\"\\n                                            [(ngModel)]=\\\"spd.spdy_status\\\" (change)=\\\"updateTotal(newSprint.spri_points)\\\">\\n                                        </td>\\n                                        <td class=\\\"td-table-sqlx\\\">{{spd.spdy_date}}\\n                                            <span style=\\\"text-align:right;\\\">({{spd.spdy_day_name}})</span>\\n                                        </td>\\n                                        <td class=\\\"td-table-sqlx\\\">\\n                                            <input type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"spd.spdy_value\\\"\\n                                                   [min]=\\\"0\\\" (value)=\\\"spd.spdy_value\\\" [disabled]=\\\"!spd.spdy_status\\\"\\n                                                   (ngModelChange)=\\\"calculateTotal()\\\">\\n                                        </td>\\n                                    </tr>\\n                                    </tbody>\\n                                </table>\\n\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div *ngIf=\\\"editvalue == true\\\" class=\\\"form-group squadlinx-label-table\\\">\\n                                <label style=\\\"margin-right:20px;\\\" class=\\\"label-table-sqlx\\\">Total {{currSprintPts_e}}</label>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" (newSprint.spri_points != null && newSprint.spri_points != '') && newSprint.spri_points <= 0\\\">Sprint points must be greater than zero</span>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" currSprintPts_e != null && newSprint.spri_points > 0 && (currSprintPts_e > newSprint.spri_points)\\\">Current points exceed sprint duration</span>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" (newSprint.spri_points != null && newSprint.spri_points != '') && (currSprintPts_e < newSprint.spri_points) \\\">There are still ({{sprintDiff_e}}) points to be assigned.</span>\\n                            </div>\\n                            <div *ngIf=\\\"editvalue == false\\\" class=\\\"form-group squadlinx-label-table\\\">\\n                                <label style=\\\"margin-right:20px;\\\">Total {{currSprintPts}}</label>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" (newSprint.spri_points != null && newSprint.spri_points != '') && newSprint.spri_points <= 0\\\">Sprint points must be greater than zero</span>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" currSprintPts != null && newSprint.spri_points > 0 && (currSprintPts > newSprint.spri_points)\\\">Current points exceed sprint duration</span>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" (newSprint.spri_points != null && newSprint.spri_points != '') && (currSprintPts < newSprint.spri_points) \\\">There are still ({{sprintDiff}}) points to be assigned.</span>\\n                            </div>\\n                        </div>\\n\\n\\n                    </div>\\n                    <!-- .row -->\\n                </div>\\n                <!-- modal-body -->\\n                <div class=\\\"modal-footer\\\" id=\\\"modalSprintNew\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <button type=\\\"button\\\" id=\\\"buttonCalculate_sprintNew_sprints\\\" class=\\\"btn btn-primary btn-calculate-form-sprints\\\"\\n                                (click)=\\\"calculateDays(newSprint.spri_init,newSprint.spri_end,newSprint.spri_points)\\\"\\n                                [disabled]=\\\"newSprint.spri_points == 0 || !newSprint.spri_points || !newSprint.spri_init || newSprint.spri_init == 'null' || !newSprint.spri_end || newSprint.spri_end == 'null'\\\">\\n                            <i class=\\\"fa fa-calendar\\\"></i> Calculate\\n                        </button>\\n\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_sprintNew_sprints\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                        <button id=\\\"buttonSave_sprintNew_sprints\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-save-form-sprints\\\" (click)=\\\"saveSprint()\\\"\\n                                [disabled]=\\\"validateSprint()\\\">\\n                           <!-- <i class=\\\"fa fa-floppy-o\\\"></i>--> Save\\n                        </button>\\n                    </div>\\n                </div>\\n                <!-- modal-footer -->\\n            </div>\\n            <!-- modal-content -->\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n/***/ }),\n/* 839 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n \\n<span class=\\\"addt sendemail fa fa-paper-plane-o bg-purple\\\" (click)=\\\"addMail()\\\" data-container=\\\"body\\\"\\n      tooltipPosition=\\\"top\\\" pTooltip=\\\"Compose a new email\\\"></span>\\n<span class=\\\"addt atemail fa fa-envelope bg-blue\\\" (click)=\\\"showAsociateMail()\\\" data-container=\\\"body\\\"\\n      tooltipPosition=\\\"top\\\" pTooltip=\\\"Link an email\\\"></span>\\n<span class=\\\"addt comment fa fa-comments bg-yellow\\\" (click)=\\\"addNote()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Leave a comment\\\"></span>\\n<span class=\\\"addt task fa fa-tasks bg-aqua\\\" (click)=\\\"addTask()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create a task\\\"></span>\\n<span class=\\\"addt btnplus fa fa-plus bg-blue\\\" style=\\\"height: 45px; width: 45px;\\\" (click)=\\\"enableBtn()\\\"\\n    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tools\\\"></span>\\n \\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n        <section class=\\\"content-header\\\">\\n            <h1>\\n                Scheduler #{{ scheduler.sche_id }}\\n            </h1>\\n            <ol class=\\\"breadcrumb\\\">\\n                    <li><a [routerLink]=\\\"['/dashboard']\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n                    <li><a [routerLink]=\\\"['/schedulerlist']\\\">Scheduler List</a></li>\\n                    <li class=\\\"active\\\">Scheduler</li>\\n            </ol>\\n        </section>\\n        <section class=\\\"content\\\">\\n            <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                    <div class=\\\"box box-primary\\\">\\n                        <div class=\\\"box-header with-border\\\">\\n                            <h3 class=\\\"box-title\\\">{{scheduler.sche_title}}</h3>\\n                        </div>\\n                        <div class=\\\"box-body box-scheduler\\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Date Start</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.sche_start}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                        <label class=\\\"control-label col-xs-5 col-md-5\\\">Date End</label>\\n                                        <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.sche_end}}</span>\\n                                    </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">User</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.completename}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Category</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.para_name}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Place</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.place}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                        <label class=\\\"control-label col-xs-5 col-md-5\\\">Status</label>\\n                                        <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.SchStatus}}</span>\\n                                </div>\\n                                <div class=\\\"col-md-12\\\">\\n                                    <label class=\\\"control-label\\\">Description</label>\\n                                    <div class=\\\"well\\\" id=\\\"textTask\\\" [innerHTML]=\\\"scheduler.sche_description\\\"></div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        \\n                    </div>\\n                    <ul class=\\\"timeline\\\">\\n                        <li>\\n                            <i class=\\\"fa fa-clock-o bg-gray\\\"></i>\\n                        </li>\\n                        <li class=\\\"time-label\\\">\\n                            <span class=\\\"bg-success\\\">{{scheduler.sche_start}}</span>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n        </section>\\n</section>\";\n\n/***/ }),\n/* 840 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"scheduler\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-scheduler\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> SCHEDULER LIST\\n            <small style=\\\"font-size:15px;\\\">Calendar</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Scheduler</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_name, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"addScheduler()\\\" style=\\\"padding: 1px 4px; background-color:white;\\\" data-container=\\\"body\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddScheduler\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Add\\\">\\n                                <i class=\\\"sq sq-create-new-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selsch.length == 0\\\" (click)=\\\"deleteScheduler(null)\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <i class=\\\"sq sq-eliminar\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input id=\\\"search_scheulder\\\" type=\\\"text\\\" class=\\\"input-mainfilter input_search_categories\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (ngModelChange)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                        <i class=\\\"sq sq-view\\\"></i>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\"><a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Active','Cancelled','Finished'])\\\">All</a></li>\\n                        <li><a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Active'])\\\">Active</a></li>\\n                        <li><a href=\\\"#tab_2\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Cancelled'])\\\">Cancelled</a></li>\\n                        <li><a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Finished'])\\\">Finished</a></li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th (click)=\\\"selectAll()\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 30px;\\\">\\n                                            <i *ngIf=\\\"selsch.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                            <i *ngIf=\\\"selsch.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_id')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 50px;\\\">\\n                                            Number\\n                                            <span [hidden]=\\\"posOrder !== 'sche_id'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_start')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 150px;\\\">\\n                                            Date Start\\n                                            <span [hidden]=\\\"posOrder !== 'sche_start'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_end')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 150px;\\\">\\n                                            Date End\\n                                            <span [hidden]=\\\"posOrder !== 'sche_end'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_title')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 200px;\\\">\\n                                            Tittle\\n                                            <span [hidden]=\\\"posOrder !== 'sche_title'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_description')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 300px;\\\">\\n                                            Description\\n                                            <span [hidden]=\\\"posOrder !== 'sche_description'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('user_id')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 100px;\\\">\\n                                            User\\n                                            <span [hidden]=\\\"posOrder !== 'user_id'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('para_category')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 100px;\\\">\\n                                            Category\\n                                            <span [hidden]=\\\"posOrder !== 'para_category'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 100px;\\\">\\n                                            Place\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('para_status')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 100px;\\\">\\n                                            Status\\n                                            <span [hidden]=\\\"posOrder !== 'para_status'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 150px;\\\">\\n                                            Actions\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let sch of schedules | filterfield : { pos : posState, text : textState } | filterfield : { pos : posGroup, text : textGroup} | paginate : { currp : currentpage, limit : limitpage} | order : { pos : posOrder, desc : orderDesc }\\\" [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"schedulerlist\\\" name=\\\"schedulerlist\\\" value=\\\"{{sch.sche_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selsch\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_id) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_start) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_end) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_title) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_description) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.completename) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.para_name) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.place) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.SchStatus) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(sch)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\">\\n                                                <i [ngStyle]=\\\"sch.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-search\\\"></i>\\n                                            </button>\\n                                                <button type=\\\"button\\\" (click)=\\\"showEditModal(sch)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                <i [ngStyle]=\\\"sch.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-quickedit\\\"></i>\\n                                            </button>\\n                                                <button (click)=\\\"deleteScheduler(sch.sche_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                <i [ngStyle]=\\\"sch.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-trash\\\"></i>\\n                                            </button>\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                    <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdScheduler\\\" role=\\\"dialog\\\" *ngIf=\\\"sch\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdScheduler-scheduler\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\"><i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">\\n                        <i class=\\\"sq sq-scheduler\\\" style=\\\"color:white;\\\"></i> {{\\\" #\\\" + sch.sche_id + \\\" - \\\" + sch.sche_title}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"row\\\" style=\\\"margin-top: 5px;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Start Date: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.sche_start}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">End Date: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.sche_end}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Category: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.para_name}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Status: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.SchStatus}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">User: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.completename}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Description: </label>\\n                        <span class=\\\"label-noedit col-xs-10 col-sm-10 col-md-10 col-lg-10 span-sqlx\\\">{{escapeHtml(sch.sche_description)}}</span>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n                    <button id=\\\"close2-schedule\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\" data-dismiss=\\\"modal\\\">\\n                        Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!-- mdScheduler -->\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddScheduler\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close3-mdAddScheduler\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\"><i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Scheduler</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx input-calendar-shedulerlist-sqlx \\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Start Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"scheduler.sche_start\\\" icon=\\\"sq sq-calendar\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!-- Start Date -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx input-calendar-shedulerlist-sqlx \\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>End Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"scheduler.sche_end\\\" icon=\\\"sq sq-calendar\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!-- End Date -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Tittle</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"scheduler.sche_title\\\" placeholder=\\\"Scheduler Tittle\\\">\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Tittle -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"scheduler.user_id\\\" placeholder=\\\"Select User\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler User -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Category</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"catsche\\\" [(ngModel)]=\\\"scheduler.para_category\\\" placeholder=\\\"Select Category\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Category -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stssche\\\" [(ngModel)]=\\\"scheduler.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Status -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Place</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plsch\\\" [(ngModel)]=\\\"scheduler.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Place -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\">\\n                                <label>Description</label>\\n                                <p-editor [(ngModel)]=\\\"scheduler.sche_description\\\" [style]=\\\"{'height':'150px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                        <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                         </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Description -->\\n                    </div>\\n                    <!-- .row -->\\n                </div>\\n                <!-- modal-body -->\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!scheduler.sche_description || scheduler.sche_description == '' || scheduler.sche_description == 'undefined') || (!scheduler.user_id) || (!scheduler.para_category) || (!scheduler.para_status) || (!scheduler.sche_start != '') || (!scheduler.sche_end != '') || (!scheduler.para_place)\\\"\\n                            (click)=\\\"saveScheduler()\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n                        </button>\\n                    </div>\\n                </div>\\n                <!-- modal-footer -->\\n            </div>\\n            <!-- modal-content -->\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditScheduler\\\" role=\\\"dialog\\\" *ngIf=\\\"sch\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close4-scheduler\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\"><i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Edit Schedule # {{sch.sche_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx input-calendar-shedulerlist-sqlx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Start Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"sch.sche_start\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx input-calendar-shedulerlist-sqlx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>End Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"sch.sche_end\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Tittle</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"sch.sche_title\\\" placeholder=\\\"sch Tittle\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"sch.user_id\\\" placeholder=\\\"Select User\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Category</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"catsche\\\" [(ngModel)]=\\\"sch.para_category\\\" placeholder=\\\"Select Category\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stssche\\\" [(ngModel)]=\\\"sch.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Place</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plsch\\\" [(ngModel)]=\\\"sch.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\">\\n                                <label>Description</label>\\n                                <p-editor [(ngModel)]=\\\"sch.sche_description\\\" [style]=\\\"{'height':'150px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                        <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                         </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button style=\\\"position: inherit; width: 83px!important; padding: 5px 12px;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!sch.sche_description || sch.sche_description == '' || sch.sche_description == 'undefined') || (!sch.user_id) || (!sch.para_category) || (!sch.para_status) || (!sch.sche_start != '') || (!sch.sche_end != '') || (!sch.para_place)\\\"\\n                            (click)=\\\"actScheduler(sch)\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n                        </button>\\n                    </div>\\n                </div>\\n                <!-- modal-footer -->\\n            </div>\\n            <!-- modal-content -->\\n        </div>\\n    </div>\\n\\n</section>\";\n\n/***/ }),\n/* 841 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"events\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-scrum\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> EVENTS\\n            <small style=\\\"font-size:15px;\\\">Calendar</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Events</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_name, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"addMeeting()\\\" style=\\\"padding: 1px 4px; background-color:white;\\\" data-container=\\\"body\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddMeeting\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Add\\\">\\n                                <i class=\\\"sq sq-create-new-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selmee.length == 0\\\" (click)=\\\"deleteMeeting(null)\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <i class=\\\"sq sq-eliminar\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" class=\\\"input-mainfilter input_search_categories\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (ngModelChange)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                        <i class=\\\"sq sq-view\\\"></i>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\"><a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\">All</a></li>\\n                        <li><a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Active'])\\\">Active</a></li>\\n                        <li><a href=\\\"#tab_2\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Cancelled'])\\\">Cancelled</a></li>\\n                        <li><a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Finished'])\\\">Finished</a></li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th (click)=\\\"selectAll()\\\" style=\\\"text-align: center; width: 5%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <i *ngIf=\\\"selmee.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                            <i *ngIf=\\\"selmee.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('meet_id')\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Number\\n                                            <span [hidden]=\\\"posOrder !== 'meet_id'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('user_creator')\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            User creator\\n                                            <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('datetime')\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Date Time\\n                                            <span [hidden]=\\\"posOrder !== 'datetime'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('meet_text')\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Text\\n                                            <span [hidden]=\\\"posOrder !== 'meet_text'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('para_status')\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Status\\n                                            <span [hidden]=\\\"posOrder !== 'para_status'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('para_place')\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Place\\n                                            <span [hidden]=\\\"posOrder !== 'para_place'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Actions\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let meet of events\\\" [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"events\\\" name=\\\"events\\\" value=\\\"{{meet.meet_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selmee\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.meet_id)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.creator)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.meet_date)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.meet_text)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.para_name)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.MtPlaces)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\">\\n                                                <i [ngStyle]=\\\"meet.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-search\\\"></i>\\n                                            </button>\\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(meet.meet_id, 'mdEditMeeting')\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                <i [ngStyle]=\\\"meet.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-quickedit\\\"></i>\\n                                            </button>\\n                                                <button (click)=\\\"cancelMeeting(meet.meet_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Cancel\\\">\\n                                                <i [ngStyle]=\\\"meet.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"fa fa-times-circle-o\\\"></i>\\n                                            </button>\\n                                                <button (click)=\\\"deleteMeeting(meet.meet_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                <i [ngStyle]=\\\"meet.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-trash\\\"></i>\\n                                            </button>\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                    <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdMeeting\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdBurndown-dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\">\\n                        <i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h3 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">\\n                        <i class=\\\"sq sq-scrum\\\" style=\\\"color:white;\\\"></i> {{\\\" #\\\" + meeting.meet_id + \\\" - \\\" + meeting.meet_text}}\\n                    </h3>\\n                </div>\\n                <div class=\\\"row\\\" style=\\\"margin-top: 5px;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">User\\n                            Creator: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{meeting.creator}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Date: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{meeting.meet_date}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Status: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{meeting.para_name}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Place: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{meeting.MtPlaces}}</span>\\n                    </div>\\n                    <div *ngIf=\\\"meeting.usershared.length> 0\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" *ngIf=\\\"meeting.usershared.length> 0\\\">\\n                            <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Shared\\n                                with: </label>\\n                            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\">\\n                                <span *ngFor=\\\"let usr of meeting.usershared\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px; display: inline-block;\\\">{{ usr.completename }}</span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Description: </label>\\n                        <span class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\">{{meeting.meet_text}}</span>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n                    <button id=\\\"close2-mdBurndown-dashboard\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\" data-dismiss=\\\"modal\\\"> Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddMeeting\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdBurndown-dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\">\\n                        <i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Meeting</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"meeting.datetime\\\" icon=\\\"sq sq-calendar\\\" dateFormat=\\\"yy-mm-dd\\\" [showTime]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stsmt\\\" [(ngModel)]=\\\"meeting.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Status Place -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Meeting Title</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"meeting.meet_text\\\" placeholder=\\\"Meeting Title\\\">\\n                            </div>\\n                        </div>\\n                        <!-- Meeting Tittle -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Place</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [options]=\\\"plmt\\\" [(ngModel)]=\\\"meeting.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- meeting Place -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                <p-autoComplete class=\\\"autocompleteSqlx\\\"\\n                                [(ngModel)]=\\\"meeting.usershared\\\" [suggestions]=\\\"usersCRM\\\"\\n                                (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\"\\n                                [minLength]=\\\"1\\\" placeholder=\\\"Share\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                </p-autoComplete>\\n              </span>\\n                            </div>\\n                        </div>\\n                        <!-- Share Meeting -->\\n                    </div>\\n                    <!-- .row -->\\n                </div>\\n                <!-- modal-body -->\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button style=\\\"position: inherit;width: 83px!important;padding: 5px 12px;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints \\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!meeting.meet_text || meeting.meet_text == '') || (!meeting.para_place) || (!meeting.datetime != '') || (!meeting.para_status)|| (!meeting.usershared || meeting.usershared.length <= 0)\\\"\\n                            (click)=\\\"saveMeeting(meeting)\\\"> Save\\n                        </button>\\n                    </div>\\n                </div>\\n                <!-- modal-footer -->\\n            </div>\\n            <!-- modal-content -->\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditMeeting\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdEditMeeting-dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\">\\n                        <i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Edit Meeting # {{meeting.meet_id}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"meeting.datetime\\\" dateFormat=\\\"yy-mm-dd\\\" [showTime]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User Creator</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"meeting.user_creator\\\" placeholder=\\\"Select User Creator\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stsmt\\\" [(ngModel)]=\\\"meeting.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Place</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plmt\\\" [(ngModel)]=\\\"meeting.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Meeting Title</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"meeting.meet_text\\\" placeholder=\\\"Meeting Title\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                <p-autoComplete class=\\\"autocompleteSqlx\\\"\\n                        [(ngModel)]=\\\"meeting.usershared\\\" [suggestions]=\\\"usersCRM\\\"\\n                                (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                placeholder=\\\"Share\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\"></p-autoComplete>\\n              </span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!meeting.meet_text || meeting.meet_text == '') || (!meeting.para_place) || (!meeting.datetime != '') || (!meeting.para_status)|| (!meeting.usershared || meeting.usershared.length <= 0)\\\"\\n                            (click)=\\\"saveMeeting()\\\" style=\\\"position: inherit;width: 83px!important; padding: 5px 12px;\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n/***/ }),\n/* 842 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n \\n<span class=\\\"addt sendemail fa fa-paper-plane-o bg-purple\\\" (click)=\\\"addMail()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Compose a new email\\\"></span>\\n<span class=\\\"addt atemail fa fa-envelope bg-blue\\\" (click)=\\\"showAsociateMail()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Link an email\\\"></span>\\n<span class=\\\"addt comment fa fa-comments bg-yellow\\\" (click)=\\\"addNote()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Leave a comment\\\"></span>\\n<span class=\\\"addt task fa fa-tasks bg-aqua\\\" (click)=\\\"addTask()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create a task\\\"></span>\\n<span class=\\\"addt atetask fa fa-external-link-square bg-aqua\\\" (click)=\\\"showAsociateTask()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Link a task\\\"></span>\\n<span class=\\\"addt btnplus fa fa-plus bg-blue\\\" style=\\\"height: 45px; width: 45px;\\\" (click)=\\\"enableBtn()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tools\\\"></span>\\n \\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n        <section class=\\\"content-header\\\">\\n            <h1>\\n                Meeting #{{ meeting.meet_id }}\\n            </h1>\\n            <ol class=\\\"breadcrumb\\\">\\n                    <li><a [routerLink]=\\\"['/dashboard']\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n                    <li><a [routerLink]=\\\"['/meetings']\\\">Meetings</a></li>\\n                    <li class=\\\"active\\\">Meeting</li>\\n            </ol>\\n        </section>\\n        <section class=\\\"content\\\" style=\\\"background-color:#f4f9fc;\\\">\\n            <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                    <div class=\\\"box box-primary\\\">\\n                        <div class=\\\"box-header with-border\\\">\\n                            <h3 class=\\\"box-title\\\">{{meeting.meet_text}}</h3>\\n                        </div>\\n                        <div class=\\\"box-body box-meeting\\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Date Time</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{meeting.meet_date}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Creator</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{meeting.creator}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Status</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{meeting.para_name}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Place</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{meeting.MtPlaces}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-12\\\">\\n                                    <label class=\\\"control-label\\\">Shared with</label>\\n                                    <span *ngFor=\\\"let uss of meeting.usershared\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px; display: inline-block;\\\">{{uss.completename}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-12\\\">\\n    \\n                                </div>\\n                                <!-- <div class=\\\"col-xs-12 col-md-12\\\">\\n                                    <iframe [srcdoc]=\\\"sanitizeHtml(meeting.meet_text)\\\" style=\\\"width: 100%; min-height: 450px; border: 0px;\\\">\\n                                        <div class=\\\"mailbox-read-message\\\" [innerHtml]=\\\"sanitizeHtml(meeting.meet_text)\\\">\\n                                        </div>\\n                                    </iframe>\\n                                    <iframe style=\\\"width: 100%; min-height: 450px; border: 0px;\\\" id=\\\"someFrame\\\">\\n                                    </iframe>\\n                                </div> -->\\n                            </div>\\n                        </div>\\n                        \\n                    </div>\\n                    <ul class=\\\"timeline\\\">\\n                        <li>\\n                            <i class=\\\"fa fa-clock-o bg-gray\\\"></i>\\n                        </li>\\n                        <li class=\\\"time-label\\\">\\n                            <span class=\\\"bg-success\\\">{{meeting.meet_date}}</span>\\n                        </li>\\n                        <li *ngFor=\\\"let dt of detail\\\">\\n                            <i class=\\\"{{ dt.label }}\\\"></i>\\n                            <div class=\\\"timeline-item\\\">\\n                                <span class=\\\"time\\\"><b>{{\\\"#\\\" + dt.number + \\\" \\\"}}</b>{{dt.date}}</span>\\n                                <h3 class=\\\"timeline-header\\\">\\n                                    <a>{{dt.creator}}</a>\\n                                    {{\\\" \\\" + dt.title}}\\n                                    <a>{{dt.asigned}}</a>\\n                                    <!-- <span *ngFor=\\\"let as of dt.asigned\\\">{{ \\\"<\\\" + as.user_lastname + \\\", \\\" + as.user_name + \\\">,\\\" }}</span> -->\\t\\n                                </h3>\\n                                <div class=\\\"timeline-body\\\">\\n                                    <div class=\\\"box-body\\\">\\n                                        <div class=\\\"progress progress-md\\\" *ngIf=\\\"dt.percentage > 0\\\">\\n                                            <div class=\\\"progress-bar progress-bar-success\\\" [ngStyle]=\\\"{ 'width': dt.percentage + '%' }\\\"></div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-md-12 col-bg-12\\\" *ngIf=\\\"dt.subject.length > 0\\\">\\n                                            <p>{{dt.subject}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-md-12\\\">\\n                                            <iframe [attr.id]=\\\"'fr'+dt.number\\\" [attr.srcdoc]=\\\"escapeHtml(sanitizeHtml(dt.description))\\\" [ngStyle]=\\\"escapeHtml(sanitizeHtml(dt.description)).length == 0 ? {'width': '100%', 'height': '0px', 'border': '0px', 'overflow': 'scroll'} : escapeHtml(sanitizeHtml(dt.description)).length <= 100 ? {'width': '100%', 'height': '100px', 'border': '0px', 'overflow': 'scroll'} : {'width': '100%', 'height': '450px', 'border': '0px', 'overflow': 'scroll'}\\\" >\\n                                            </iframe>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"box-footer\\\" *ngIf=\\\"dt.attachments.length > 0\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of dt.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" download=\\\"{{ att.file_name }}\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" download=\\\"{{ att.file_name }}\\\" class=\\\"mailbox-attachment-name\\\"><i class=\\\"fa fa-paperclip\\\"></i> {{ att.file_name }}</a>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\t\\t\\t\\t\\t\\t\\t\\n                        </li>\\n                        <li class=\\\"collapse\\\" id=\\\"collapseNote\\\">\\n                                <i class=\\\"fa fa-comments bg-yellow\\\"></i>\\n                                <div class=\\\"timeline-item\\\">\\n                                    <h3 class=\\\"timeline-header\\\">\\n                                        <a>Leave a Comment</a> New comment for this Meeting</h3>\\n                                    <div class=\\\"timeline-body\\\">\\n                                        <p-editor [(ngModel)]=\\\"note.note_text\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                            <p-header>\\n                                              <span class=\\\"ql-formats\\\">\\n                                                   <span class=\\\"ql-header\\\">\\n                                                      <select class=\\\"ql-header\\\">\\n                                                        <option value=\\\"1\\\">Heading</option>\\n                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                        <option selected>Normal</option>\\n                                                      </select>\\n                                                   </span>\\n\\n                                                    <span class=\\\"ql-font\\\">\\n                                                      <select class=\\\"ql-font\\\">\\n                                                        <option selected>Sans Serif</option>\\n                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                      </select>\\n                                                    </span>\\n                                              </span>\\n\\n                                                <span class=\\\"ql-formats\\\">\\n                                                  <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                  <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                  <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                                 </span>\\n\\n                                                <span class=\\\"ql-formats\\\">\\n                                                  <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                  <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                  <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                    <select class=\\\"ql-align\\\">\\n                                                       <option selected></option>\\n                                                       <option value=\\\"center\\\"></option>\\n                                                       <option value=\\\"right\\\"></option>\\n                                                       <option value=\\\"justify\\\"></option>\\n                                                     </select>\\n                                                  </span>\\n                                                 </span>\\n                                            </p-header>\\n                                        </p-editor>\\n                                    </div>\\n                                    <div class=\\\"timeline-footer\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of note.attachments\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                                </span>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                        <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentNote(att)\\\">\\n                                                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                        </button>\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                    <div class=\\\"timeline-footer\\\">\\n                                        <div class=\\\"pull-right\\\">\\n                                            <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" (click)=\\\"saveNote()\\\">\\n                                                <i class=\\\"fa fa-floppy-o\\\"></i> Publish</button>\\n                                            <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\">\\n                                                <i class=\\\"fa fa-times\\\"></i> Close</button>\\n                                        </div>\\n                                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\" for=\\\"note-file-upload\\\"\\n                                            class=\\\"custom-file-upload\\\">\\n                                            <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                        </label>\\n                                        <input id=\\\"note-file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChangeNote($event)\\\"/>\\n                                    </div>\\n                                </div>\\n                        </li>\\n                        <li class=\\\"collapse \\\" id=\\\"collapseTask\\\">\\n                            <i class=\\\"fa fa-tasks bg-blue\\\"></i>\\n                            <div class=\\\"timeline-item\\\">\\n                                <div class=\\\"timeline-header\\\">\\n                                    <h4 class=\\\"timeline-title\\\">New Task</h4>\\n                                </div>\\n                                <div class=\\\"timeline-body\\\">\\n                                    <div class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Subject</label>\\n                                                <input class=\\\"form-control\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"Subject\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Product</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Assign to</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Delivery Date</label>\\n                                                <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Points</label>\\n                                                <input type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"task.task_points\\\" [step]=\\\"0.25\\\" [min]=\\\"0\\\" >\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Description</label>\\n                                                <p-editor [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n                                            </div>      \\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"timeline-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                            </span>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                                <div class=\\\"timeline-footer\\\">\\n                                    <div class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12\\\">\\n                                            <div class=\\\"pull-left\\\">\\n                                                <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\" for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                                    <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                                </label>\\n                                                <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChangeTask($event)\\\"/>\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\">\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\"><i class=\\\"fa fa-times\\\"></i> Close</button>\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0)\\\" (click)=\\\"saveTask()\\\"><i class=\\\"fa fa-floppy-o\\\"></i> Create</button>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n        </section>\\n        <div class=\\\"modal fade\\\" id=\\\"mdAsoTask\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n                <div class=\\\"modal-content\\\">\\n                    <div class=\\\"modal-header modal-header-info\\\">\\n                        <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                            <span aria-hidden=\\\"true\\\">&times;</span>\\n                        </button>\\n                        <h4 class=\\\"modal-title\\\">\\n                            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i> Link a Task</h4>\\n                    </div>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"form-group\\\">\\n                            <!-- <form (ngSubmit)=\\\"srchTask()\\\"> -->\\n                                <div class=\\\"input-group\\\">\\n                                    <!-- <input type=\\\"text\\\" name=\\\"searcht\\\" [(ngModel)]=\\\"searchTask\\\" class=\\\"form-control\\\" placeholder=\\\"Search for...\\\">\\n                                    <span class=\\\"input-group-btn\\\"> -->\\n                                        <input type=\\\"text\\\" class=\\\"form-control input-sm\\\" placeholder=\\\"Search\\\" [(ngModel)]=\\\"search\\\">\\n                                            <span class=\\\"glyphicon glyphicon-search form-control-feedback\\\"></span>\\n                                        <!-- <button class=\\\"btn btn-default\\\" type=\\\"submit\\\"> -->\\n                                            <!-- <i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\"></i> Search</button> -->\\n                                    <!-- </span> -->\\n                                </div>\\n                            <!-- </form> -->\\n                        </div>\\n                        <div class=\\\"form-group\\\">\\n                            <!-- <label>{{ listtasks.length }} Results</label> -->\\n                            <label>{{ (listtasks | filter : search).length }} Results</label>\\n                            <div class=\\\"table\\\" style=\\\"height: 350px; overflow: scroll;\\\">\\n                                <table id=\\\"results\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                                    <thead>\\n                                        <th></th>\\n                                        <th>ID</th>\\n                                        <th>Date</th>\\n                                        <th>Creator</th>\\n                                        <th>Asigned to</th>\\n                                        <th>Status</th>\\n                                        <th>Subject</th>\\n                                        <th>Points</th>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tk of listtasks | filter : search\\\">\\n                                            <td>\\n                                                <div class=\\\"ui-g\\\">\\n                                                    <p-checkbox id=\\\"list\\\" name=\\\"list\\\" value=\\\"{{tk.task_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"list\\\"></p-checkbox>\\n                                                </div>\\n                                            </td>\\n                                            <td>{{tk.task_id}}</td>\\n                                            <td>{{tk.task_date}}</td>\\n                                            <td>{{tk.creator}}</td>\\n                                            <td>{{tk.asigned}}</td>\\n                                            <td>{{tk.status_name}}</td>\\n                                            <td>{{tk.task_subject}}</td>\\n                                            <td>{{tk.task_points}}</td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"modal-footer\\\">\\n                            <div class=\\\"pull-right\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                                <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"listtasks.length == 0\\\" (click)=\\\"addAsociateTask()\\\">\\n                                    <i class=\\\"fa fa-floppy-o\\\"></i> Link\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n</section>\";\n\n/***/ }),\n/* 843 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"roles\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight: bold;\\\">\\n            <span style=\\\"font-size:20px;\\\">Roles</span>\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Roles</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"button-add\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"btn-group col-md-12 create-rol\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-rol\\\" (click)=\\\"addRole()\\\" data-toggle=\\\"modal\\\">\\n                    Create Role\\n                </button>\\n            </div>\\n        </div>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box role-box\\\" style=\\\"border-top:none;\\\">\\n                    <div class=\\\"table-responsive\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered2 table-hover table-striped table-role\\\">\\n                            <thead>\\n                                <th style=\\\"width: 150px\\\">Role Number</th>\\n                                <th style=\\\"width: 200px;\\\">Role Name</th>\\n                                <th style=\\\"width: 400px;\\\">Description</th>\\n                                <th style=\\\"width: 150px;\\\">Actions</th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let rl of roles\\\">\\n                                    <td>\\n                                        {{ rl.value }}\\n                                    </td>\\n                                    <td class=\\\"name-role\\\" style=\\\"text-align:center;margin-right:10px;\\\">\\n                                        <i class=\\\"{{rl.icon}}\\\"></i>\\n                                        {{ escapeHtml(rl.label) }}\\n                                    </td>\\n                                    <td style=\\\"text-align:center; margin-right:10px;\\\">\\n                                        <span style=\\\"padding-left: 15px;\\\">{{ escapeHtml(rl.description) }}</span>\\n                                    </td>\\n                                    <td>\\n                                        <div class=\\\"btn-group actions\\\">\\n                                            <button type=\\\"button\\\" (click)=\\\"showModal(rl.value, rl.label)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\" data-container=\\\"body\\\">\\n                                                <i class=\\\"sq sq-search\\\"></i>\\n                                            </button>\\n                                            <button (click)=\\\"editRole(rl.value, rl.label, rl.description)\\\" type=\\\"button\\\"\\n                                                class=\\\"btn btn-default btn-sm btn-act\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"\\n                                                data-container=\\\"body\\\">\\n                                                <i class=\\\"sq sq-quickedit\\\"></i>\\n                                            </button>\\n                                            <button (click)=\\\"deleteRole(rl.value)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\" data-container=\\\"body\\\">\\n                                                <i class=\\\"sq sq-trash\\\"></i>\\n                                            </button>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n</section>\\n\\n<div class=\\\"modal fade\\\" id=\\\"mdRole\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content modal-roles\\\" style=\\\"width: 600px;\\\">\\n            <div class=\\\"modal-header header-event header-role\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                        class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title\\\"> {{\\\"Modules - Role #\\\" + myRol + \\\": \\\" + myRolName }}</h4>\\n            </div>\\n            <div class=\\\"modal-body scrollable\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-lg-12 col-md-12 col-sm-12 col-xs-12\\\">\\n                        <div class=\\\"form-group scrollable\\\">\\n                            <table class=\\\"table table-bordered table-roles col-lg-12 col-md-12 col-sm-12 col-xs-12\\\"\\n                                *ngIf=\\\"modulesMyTree.length > 0\\\">\\n\\n                                <!-- <thead>\\n                                    <th style=\\\"width:100px;\\\"></th>\\n                                    <th style=\\\"width:455px;\\\"></th>\\n                                </thead> -->\\n                                <thead>\\n                                    <th class=\\\"col-lg-2 col-md-3 col-sm-3 col-xs-6\\\"></th>\\n                                    <th class=\\\"col-lg-3 col-md-3 col-sm-3 col-xs-6\\\"></th>\\n                                    <th class=\\\"col-lg-7 col-md-6 col-sm-6 col-xs-6\\\"></th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let mdt of modulesMyTree\\\">\\n                                        <td>\\n                                            {{mdt.label}}\\n                                        </td>\\n                                        <td *ngIf=\\\"mdt.children.length > 0\\\">\\n                                            <div class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n                                        </td>\\n                                        <td class=\\\" \\\" style=\\\"display:flex; font-size:0.7em; width:100% ;\\\" *ngIf=\\\"mdt.children.length > 0\\\">\\n                                            <div style=\\\"width:25% \\\" class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n                                            <div style=\\\"width:25%\\\" class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n                                            <div style=\\\"width:25%\\\" class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n                                            <div style=\\\"width:25%\\\" class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"modal-footer close-footer\\\">\\n                <div style=\\\"margin-left:250px;padding-top:8px;\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-close btn-close-form-sprints\\\" style=\\\"display:block;\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"modal fade\\\" id=\\\"addRole\\\" role=\\\"dialog\\\">\\n    <!--modal new role-->\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content modal-roles\\\">\\n            <div class=\\\"modal-header header-event header-role\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                        class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title\\\"><i class=\\\"sq sq-drafts\\\"></i> New Role </h4>\\n            </div>\\n            <div class=\\\"modal-body scrollable md-roles\\\">\\n                <div class=\\\"row\\\" style=\\\"padding-bottom: 10px;\\\">\\n                    <div class=\\\"col-xs-6 col-md-6\\\" style=\\\"padding-left: 20px;\\\">\\n                        <div class=\\\"input-squadlinx\\\">\\n                            <label style=\\\"color:rgb(130, 145, 152);\\\">Role Name</label>\\n                            <input type=\\\"text\\\" class=\\\"form-control imputtext-role sqlx-input\\\" [(ngModel)]=\\\"obj.role_NameNew\\\"\\n                                placeholder=\\\"Type a role name\\\">\\n                            <span class=\\\"has-error\\\" *ngIf=\\\"rolesMenu.indexOf(obj.role_NameNew) >= 0\\\">This name is\\n                                already in use</span>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding-top: 5px;padding-left: 20px;padding-right: 20px;\\\">\\n                        <div class=\\\"textarea-squadlinx\\\">\\n                            <label style=\\\"color:rgb(130, 145, 152);\\\">Description</label>\\n                            <textarea style=\\\"resize: vertical;\\\" class=\\\"form-control txt-sqlx\\\" rows=\\\"2\\\" [(ngModel)]=\\\"obj.role_description\\\"></textarea>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"form-group \\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\" pull-left  col-xs-4 col-sm-4 col-md-4 col-lg-4 squadlinx-acces-a\\\" style=\\\"padding-left: 20px; padding-right:0px; \\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Access</label>\\n                                    <div class=\\\"row size-mod \\\" *ngFor=\\\"let pt of parentsTree\\\">\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModules(pt.data, pt.children)\\\" class=\\\"link-module\\\">\\n                                            <div class=\\\"parents-mod acces-a-sqlx\\\">\\n                                                {{ pt.label }}\\n                                            </div>\\n                                        </a>\\n                                        <div class=\\\"row parents-mod-footer size-mod\\\">\\n                                            <div class=\\\"pull-left\\\" style=\\\"background-color: rgb(239, 244, 245); width: 20px; height: 5px; margin-left: 15px;\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\" style=\\\"background-color:white; height: 5px;\\\">\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"pull-rigth col-xs-8 col-sm-8 col-md-8 col-lg-8\\\" style=\\\"padding-top: 24px;padding-right: 20px; padding-left: 0px;\\\">\\n                                    <div class=\\\"form-group\\\">\\n                                        <table class=\\\"table table-parent\\\" style=\\\"border:none!important;\\\">\\n                                            <thead>\\n                                                <th style=\\\"width:95px;\\\"></th>\\n                                            </thead>\\n                                            <tbody>\\n                                                <tr *ngFor=\\\"let chs of children_show\\\">\\n\\n                                                    <td style=\\\"padding:0px;margin:0px;\\\">\\n\\n                                                        <div class=\\\"submod col-lg-12 col-md-12 col-sm-12 col-xs-12 add-module pull-rigth\\\">\\n                                                            <p-checkbox name=\\\"role-checkbox\\\" value=\\\"{{chs.data}}\\\" label=\\\"{{ chs.label }} \\\"\\n                                                                [(ngModel)]=\\\"selectedSubmodule\\\"></p-checkbox>\\n\\n                                                        </div>\\n                                                        <!-- <div class=\\\"ui-g col-md-1 add-module\\\"\\n                                                         style=\\\"margin:0px;padding-left:0px;\\\">\\n                                                    </div> -->\\n                                                        <div class=\\\"row roles-select\\\">\\n                                                            <table class=\\\"col-lg-12 col-md-12 col-sm-12 col-xs-12\\\">\\n                                                                <tr class=\\\"col-lg-6 col-md-6 col-sm-6 col-xs-12\\\" *ngFor=\\\"let per of chs.permits\\\">\\n                                                                    <td>\\n                                                                        <p-checkbox name=\\\"per-checkbox\\\" value=\\\"{{per.data}}\\\"\\n                                                                            label=\\\"{{per.label}}\\\" [(ngModel)]=\\\"selectedPer\\\"\\n                                                                            id=\\\"per-check\\\"></p-checkbox>\\n                                                                    </td>\\n                                                                </tr>\\n                                                            </table>\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"modal-footer close-footer\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\"\\n                        data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">Close\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"!selectedSubmodule || selectedSubmodule <= 0 || selectedSubmodule == '' || obj.role_NameNew == '' || obj.role_NameNew == null || obj.role_description == '' || obj.role_description == null || !selectedPer || selectedPer <= 0 || selectedPer == '' \\\"\\n                        (click)=\\\"saveRole(obj,selectedSubmodule,selectedPer)\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n<!--.modal new role-->\\n\\n<div class=\\\"modal fade\\\" id=\\\"editRoleNew\\\" role=\\\"dialog\\\">\\n    <!--Modal Editar-->\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content modal-roles\\\">\\n            <div class=\\\"modal-header header-event header-role\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                        class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title\\\"><i class=\\\"sq sq-quickedit\\\"></i> {{\\\"Edit - Role #\\\" + myRol + \\\": \\\" + myRolName }}\\n                </h4>\\n            </div>\\n            <div class=\\\"modal-body scrollable md-roles\\\">\\n                <div class=\\\"row\\\" style=\\\"padding-bottom: 10px;\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\" style=\\\"padding-left: 20px;\\\">\\n                        <div class=\\\"input-squadlinx\\\">\\n                            <label style=\\\"color:rgb(130, 145, 152);\\\">Role Name</label>\\n                            <input type=\\\"text\\\" class=\\\"form-control imputtext-role sqlx-input\\\" [(ngModel)]=\\\"obj.role_NameNew\\\"\\n                                placeholder=\\\"Type a role name\\\">\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-top: 5px;padding-left: 20px;padding-right: 20px;\\\">\\n                        <div class=\\\"textarea-squadlinx\\\">\\n                            <label style=\\\"color:rgb(130, 145, 152);\\\">Description</label>\\n                            <textarea style=\\\"resize: vertical;\\\" class=\\\"form-control txt-sqlx\\\" rows=\\\"2\\\" [(ngModel)]=\\\"obj.role_description\\\"></textarea>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"form-group \\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\" pull-left  col-xs-4 col-sm-4 col-md-4 col-lg-4\\\" style=\\\"padding-left: 20px; padding-right:0px;\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Access</label>\\n                                    <div class=\\\"row size-mod\\\" *ngFor=\\\"let pt of parentsTree\\\">\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModules(pt.data, pt.children)\\\" class=\\\"link-module\\\">\\n                                            <div class=\\\"parents-mod\\\">\\n                                                {{ pt.label }}\\n                                            </div>\\n                                        </a>\\n                                        <div class=\\\"row parents-mod-footer size-mod\\\">\\n                                            <div class=\\\"pull-left\\\" style=\\\"background-color: rgb(239, 244, 245); width: 20px; height: 5px; margin-left: 15px;\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\" style=\\\"background-color:white; height: 5px;\\\">\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"pull-rigth col-xs-8 col-sm-8 col-md-8 col-lg-8\\\" style=\\\"padding-top: 24px;padding-right: 20px; padding-left: 0px;\\\">\\n                                    <div class=\\\"form-group\\\">\\n                                        <table class=\\\"table table-parent\\\" style=\\\"border:none!important;\\\">\\n                                            <thead>\\n                                                <th style=\\\"width:95px;\\\"></th>\\n                                            </thead>\\n                                            <tbody>\\n                                                <tr *ngFor=\\\"let chs of children_show\\\">\\n                                                    <td style=\\\"padding:0px;margin:0px;\\\">\\n                                                        <!-- <div class=\\\"col-md-5 add-module pull-rigth\\\">\\n                                                        {{ chs.label }}\\n                                                    </div>\\n                                                    <div class=\\\"ui-g col-md-1 add-module\\\"\\n                                                         style=\\\"width: 10%!important;margin:0px;padding-left:0px;\\\">\\n                                                        <p-checkbox name=\\\"role-checkbox\\\" value=\\\"{{chs.data}}\\\" label=\\\"\\\"\\n                                                                    [(ngModel)]=\\\"selectedSubmodule\\\"></p-checkbox>\\n                                                    </div> -->\\n                                                        <div class=\\\"submod col-lg-12 col-md-12 col-sm-12 col-xs-12 add-module pull-rigth\\\">\\n                                                            <p-checkbox name=\\\"role-checkbox\\\" value=\\\"{{chs.data}}\\\" label=\\\"{{ chs.label }} \\\"\\n                                                                [(ngModel)]=\\\"selectedSubmodule\\\"></p-checkbox>\\n                                                        </div>\\n                                                        <div class=\\\"row roles-select\\\">\\n                                                            <table class=\\\"col-lg-12 col-md-12 col-sm-12 col-xs-12\\\">\\n                                                                <tr class=\\\"col-lg-6 col-md-6 col-sm-6 col-xs-12\\\" *ngFor=\\\"let per of chs.permits\\\">\\n                                                                    <td>\\n                                                                        <p-checkbox name=\\\"per-checkbox\\\" value=\\\"{{per.data}}\\\"\\n                                                                            label=\\\"{{per.label}}\\\" [(ngModel)]=\\\"selectedPer\\\"\\n                                                                            id=\\\"per-check\\\"></p-checkbox>\\n                                                                    </td>\\n                                                                </tr>\\n                                                            </table>\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"modal-footer close-footer\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles btn-close-form-sprints\\\" style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\"\\n                        data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">Close\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints\\\" style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"!selectedSubmodule || selectedSubmodule <= 0 || selectedSubmodule == '' || obj.role_NameNew == '' || obj.role_NameNew == null || obj.role_description == '' || obj.role_description == null\\\"\\n                        (click)=\\\"updateRole(myRol,obj,selectedSubmodule)\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div><!-- .Modal Editar-->\\n\\n\\n<p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\";\n\n/***/ }),\n/* 844 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"sprint_det\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Rol Modules\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a [routerLink]=\\\"['/dashboard']\\\">\\n          <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li>\\n        <a [routerLink]=\\\"['/roles']\\\">Roles</a>\\n      </li>\\n      <li class=\\\"active\\\">Rol</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\">\\n          <div class=\\\"box-header with-border\\\">\\n            <h3 class=\\\"box-title\\\"> Group : </h3>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"col-md-12\\\">\\n              <div>\\n                <br>\\n                <table id=\\\"resultdetails\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                  <thead>\\n                    <th>Number</th>\\n                    <th>Name</th>\\n                    <th>Icon</th>\\n                    <th>Actions</th>\\n                  </thead>\\n                  <tbody>\\n                    <tr *ngFor=\\\"let md of modulesMyTree\\\">\\n                      <td>{{ md.data }}</td>\\n                      <td>{{ md.label }}</td>\\n                      <td>{{ md.expandedIcon }}</td>\\n\\n                      <div class=\\\"btn-group\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"showMyModal(md.data)\\\" class=\\\"btn btn-default btn-sm\\\" data-target=\\\"#mdTask\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"View\\\">\\n                            <i class=\\\"fa fa-eye\\\"></i>\\n                          </button>\\n                      </div>\\n                      <!--<button (click)=\\\"deleteSpTask(spr.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                            title=\\\"Delete\\\">\\n                            <i class=\\\"fa fa-trash-o\\\"></i>\\n                          </button>\\n                        </div>\\n                      </td>-->\\n                    </tr>\\n                  </tbody>\\n                </table>\\n              </div>\\n              <!--<div>\\n                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"addSpTask()\\\" data-toggle=\\\"modal-sptask\\\" data-target=\\\"#mdAddSpTask\\\">\\n                  <i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n              </div>-->\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdSons\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-md \\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <!--<div class=\\\"modal-header modal-header-info\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>\\n          </h4>\\n        </div>-->\\n        <div class=\\\"modal-body\\\">\\n          <!--<ul class=\\\"nav nav-tabs\\\">\\n            <li class=\\\"active\\\">\\n              <a data-toggle=\\\"tab\\\" href=\\\"\\\">SubModule(s)</a>\\n            </li>\\n          </ul>-->\\n          <table class=\\\"table\\\">\\n            <thead>\\n              <tr>\\n                <th>Submodule name</th>\\n              </tr>\\n            </thead>\\n            <tbody>\\n              <tr *ngFor=\\\"let son of children\\\">\\n                <td>{{son.label}}</td>\\n              </tr>\\n              <tr *ngIf=\\\"children.length == 0\\\">\\n                <td>This Module doesn`t have Submodules!</td>\\n              </tr>\\n            </tbody>\\n          </table>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n\\n\\n</section>\";\n\n/***/ }),\n/* 845 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"roles\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-todolist\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> TO DO LIST\\n            <small style=\\\"font-size:15px;\\\">Home</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">To Do List</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content sectionPrincipal_moduloCategories\\\">\\n        <!--div row-->\\n        <div class=\\\"row\\\">\\n            <!--div col 10-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sectionPrincipal_div_div_moduloCategories\\\">\\n                <!-- box-body-->\\n                <div class=\\\"box-body\\\">\\n                    <!--table-responsive-->\\n\\n                    <div class=\\\"table-responsive tasks-messages\\\" style=\\\" padding-top: 25px;\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 93%; max-width: 93%; margin-left: 60px;  margin-right: 0px;\\\">\\n                            <thead>\\n                                <th id=\\\"order_1\\\" class=\\\"th_columnNumber_todolist\\\">Level</th>\\n                                <th id=\\\"order_2\\\" class=\\\"th_columnNumber_todolist\\\">Number</th>\\n                                <th id=\\\"order_3\\\" class=\\\"th_columnType_todolist\\\">Type</th>\\n                                <th id=\\\"order_4\\\" class=\\\"th_columnStatus_todolist\\\">Status</th>\\n                                <th id=\\\"order_5\\\" class=\\\"th_columnDate_todolist\\\">Date</th>\\n                                <th id=\\\"order_6\\\" class=\\\"th_columnDescription_todolist\\\">Description</th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let list of todolist \\\">\\n                                    <td style=\\\"text-align: center; font-size: 15px;\\\">\\n                                        <a class=\\\"info_todoList\\\"><i class=\\\"sq sq-errors decriptionLevel_todoList\\\"\\n                                                [ngStyle]=\\\"list.level == '0' ? {'color':'#cfcfcf'} : list.level == '1' ? {'color':'#fdd835'} : list.level == '2' ? {'color':'#8bc34a'} : list.level == '3' ? {'color':'#ffa726'} : {'color':'#f4511e'} \\\"></i>{{list.description_level}}</a>\\n                                    </td>\\n                                    <td style=\\\"text-align: center; font-size: 15px;\\\">\\n                                        <a (click)=\\\"showModaltk(list.id)\\\">\\n                                            <span class=\\\"info_todoList\\\">{{list.id}}</span>\\n                                        </a>\\n                                        <taskview [myTaskId]=\\\"list.id\\\"></taskview>\\n                                    </td>\\n                                    <td style=\\\"text-align: center; font-size: 14px;\\\">\\n                                        <a class=\\\"infoType_todoList\\\" *ngIf=\\\"list.type == 'task'\\\">\\n                                            <small class=\\\"statusTaskShared todolist_typeTask \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-statustasks\\\"></i> Task\\n                                            </small>\\n                                        </a>\\n                                        <a class=\\\"infoType_todoList\\\" *ngIf=\\\"list.type == 'event'\\\">\\n                                            <small class=\\\"statusTaskShared todolist_typeEvent \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-scrum\\\"></i> Event\\n                                            </small>\\n                                        </a>\\n                                        <a class=\\\"infoType_todoList\\\" *ngIf=\\\"list.type == 'scheduler'\\\">\\n                                            <small class=\\\"statusTaskShared todolist_typeScheduler \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-scheduler\\\"></i> Scheduler\\n                                            </small>\\n                                        </a>\\n                                    </td>\\n                                    <td style=\\\"text-align: center; font-size: 15px;\\\">\\n                                        <a class=\\\"infoStatus_todoList\\\" *ngIf=\\\"list.para_status == '38'\\\">\\n                                            <small class=\\\"statusTodoList\\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-developing icon_taskDeveloping\\\"></i> Developing\\n                                            </small>\\n                                        </a>\\n                                        <a class=\\\"infoStatus_todoList\\\" *ngIf=\\\"list.para_status == '35' || list.para_status == '36' || list.para_status == '37'\\\">\\n                                            <small class=\\\"statusTodoList \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-pending icon_taskPending\\\"></i> Pending\\n                                            </small>\\n                                        </a>\\n                                        <a class=\\\"infoStatus_todoList\\\" *ngIf=\\\"list.para_status == '51'\\\">\\n                                            <small class=\\\"statusTodoList \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-planning icon_eventScheduler\\\"></i> Active\\n                                            </small>\\n                                        </a>\\n                                    </td>\\n                                    <td style=\\\"text-align: center; font-size: 15px;\\\">\\n                                        <a class=\\\"info_todoList\\\">{{list.delivery_date}}</a>\\n                                    </td>\\n                                    <td style=\\\"text-align: justify; font-size: 15px;\\\">\\n                                        <a class=\\\"info_todoList\\\">{{escapeHtml(list.description)}}</a>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                    <!--end table-responsive-->\\n                    <!--div box-footer-->\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white; width: 93%; max-width: 93%;  margin-left: 60px;  margin-right: 0px;\\\">\\n                        <div class=\\\"contacts-controls\\\">\\n                            <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                    {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                    >\\n                                    itemcount ?\\n                                    itemcount : (currentpage * limitpage)\\n                                    }} of {{ itemcount }} results\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                    <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                    (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                    <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" style=\\\"\\\"\\n                                    [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                    <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                </select>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                    (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                    <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                    <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--end div box-footer-->\\n                </div>\\n                <!-- end box-body-->\\n            </div>\\n            <!--end div col 10-->\\n        </div>\\n        <!--end div row-->\\n    </section>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 846 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"sprints\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight: bold;\\\">\\n            <span style=\\\"font-size:20px;\\\">Users</span>\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Users</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"a_1\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groupsFilter\\\">\\n                            <a id=\\\"a_2\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                        <li>\\n                            <a id=\\\"a_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('noGroup', '')\\\">No group </a>\\n                        </li>\\n\\n                    </ul>\\n\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <button (click)=\\\"addUser()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create user\\\">\\n                                <i class=\\\"sq sq-working-team\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                            </button>\\n                            <button (click)=\\\"refresh()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n\\n                        </div>\\n\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2 div_elementsSearchCategories\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" id=\\\"search_categorie\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                                            placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n\\n                <div class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <!--table-responsive-->\\n                        <div *ngIf=\\\"!userList.length\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                            No Data\\n                        </div>\\n                        <div *ngIf=\\\"userList.length\\\" class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <th style=\\\"width: 90%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <table style=\\\"width: 100%;\\\">\\n                                            <thead>\\n                                                <tr>\\n\\n                                                    <th id=\\\"orderUserId_userList\\\" style=\\\"text-align: center;     width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_id')\\\">Id\\n                                                        <span [hidden]=\\\"posOrder !== 'user_id'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderFirstName_userList\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_name')\\\">First Name\\n                                                        <span [hidden]=\\\"posOrder !== 'user_name'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderLastName_userList\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_lastname')\\\">Last Name\\n                                                        <span [hidden]=\\\"posOrder !== 'user_lastname'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderPhoneNumber_userList\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_phone')\\\">Phone Number\\n                                                        <span [hidden]=\\\"posOrder !== 'user_phone'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderEmail_userList\\\" style=\\\"text-align: center; width: 25%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_email')\\\">E-mail Address\\n                                                        <span [hidden]=\\\"posOrder !== 'user_email'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderRole_userList\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('role_name')\\\">Role\\n                                                        <span [hidden]=\\\"posOrder !== 'role_name'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n                                                    <th id=\\\"orderGroup_userList\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('grop_name')\\\">Group\\n                                                        <span [hidden]=\\\"posOrder !== 'grop_name'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n                                                </tr>\\n                                            </thead>\\n                                        </table>\\n                                    </th>\\n                                    <th style=\\\"text-align: center; width: 10%;color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        Actions\\n                                    </th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let user  of userList\\\">\\n\\n                                        <td style=\\\"text-align: center;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td style=\\\" width: 10%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\" [routerLink]=\\\"['/users', user.user_id]\\\">{{user.user_id}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 15%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\" [routerLink]=\\\"['/users', user.user_id]\\\">{{user.user_name}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 15%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\" [routerLink]=\\\"['/users', user.user_id]\\\">{{user.user_lastname}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 10%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\">{{user.user_phone}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 25%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\">{{user.user_email}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 10%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\">{{user.role_name}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 15%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\">{{user.grop_name}}</a>\\n                                                    </td>\\n                                                </tr>\\n                                            </table>\\n                                        </td>\\n                                        <td>\\n                                            <div class=\\\"btn-group\\\">\\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(user)\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                                                    <i class=\\\"sq sq-search\\\"></i>\\n                                                </button>\\n                                                <button type=\\\"button\\\" (click)=\\\" showModalEditUser(user)\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n\\n                                                    <i class=\\\"sq sq-quickedit\\\"></i>\\n                                                </button>\\n                                                <button (click)=\\\"deleteUser(user)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n\\n\\n                        <div *ngIf=\\\"userList.length\\\" class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                        [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                        (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                        <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                    <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" [(ngModel)]=\\\"currentpage\\\"\\n                                        (change)=\\\"reload()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                        (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                        [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                        <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\\n\\n<div class=\\\"modal fade\\\" id=\\\"EditUser\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n            <div class=\\\"modal-header modal_header_info_categories\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                    <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title titleCategorie_editCategorie\\\"><i class=\\\"sq sq-profiles\\\"></i> Edit User</h4>\\n            </div>\\n            <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n                <div class=\\\"row\\\">\\n                    <div style=\\\"height: 25px;background-color: #eef4f8;width: 100%;\\\"></div>\\n                    <div style=\\\"height: 174px; padding-top: 10px;background-color: #eef4f8;padding: 0px;width: 100%;text-align: center;\\\">\\n                        <div id=\\\"user-profile-picture\\\" class=\\\"container_imageModuleUser\\\" style=\\\"margin-left: 250px;\\\"\\n                            (mouseenter)=\\\"showChangePicture('profile')\\\" (mouseleave)=\\\"showChangePicture('profile')\\\">\\n                            <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; width:100px;height:100px;margin:0 auto;border-radius:50%;overflow:hidden;text-align: center;\\\">\\n                                <img [src]=\\\"user.urlimg\\\" id=\\\"profile-img\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                    style=\\\"width:95px;height:auto;top:1px;\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                <div id=\\\"change-profile\\\" class=\\\"upload-picture-btn-wrapper icon_customUpload\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input\\n                                        type=\\\"file\\\" class=\\\"input-picture\\\" name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\"\\n                                        (change)=\\\"onBasicUpload($event,'profile')\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"infoUserUser_User\\\">\\n                            {{user.user_user}}\\n                        </div>\\n                    </div>\\n                    <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>First Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" type=\\\"text\\\" size=\\\"30\\\" pInputText [(ngModel)]=\\\"user.user_name\\\"\\n                                    id=\\\"nameUser_editUser\\\" name=\\\"nameUser_editUser\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Last Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" type=\\\"text\\\" size=\\\"30\\\" pInputText [(ngModel)]=\\\"user.user_lastname\\\"\\n                                    id=\\\"lastNameUser_editUser\\\" name=\\\"lastNameUser_editUser\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Phone Number</label>\\n                                <p-inputMask class=\\\" form-control sqlx-inputmask\\\" mask=\\\"+99 999 9999999\\\" [(ngModel)]=\\\"user.user_phone\\\"\\n                                    [autoClear]=\\\"false\\\" placeholder=\\\"+99 999 9999999\\\" id=\\\"phoneUser_editUser\\\" name=\\\"phoneUser_editUser\\\"></p-inputMask>\\n\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>E-mail Address</label>\\n                                <input class=\\\"form-control sqlx-input\\\" id=\\\"emailUser_editUser\\\" name=\\\"emailUser_editUser\\\"\\n                                    [disabled]=\\\"user.user_id != '' && user.user_id != null \\\" type=\\\"text\\\" size=\\\"30\\\"\\n                                    pInputText [(ngModel)]=\\\"user.user_email\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Role</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"roles\\\" [(ngModel)]=\\\"user.role_id\\\"\\n                                    placeholder=\\\"Select a Role\\\" id=\\\"rolUser_editUser\\\" name=\\\"rolUser_editUser\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" filter=\\\"filter\\\"></p-dropdown>\\n\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groups\\\" [(ngModel)]=\\\"user.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" id=\\\"groupUser_editUser\\\" name=\\\"groupUser_editUser\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" filter=\\\"filter\\\"></p-dropdown>\\n\\n                            </div>\\n                        </div>\\n                    </div>\\n\\n                </div>\\n            </div>\\n\\n            <div class=\\\"modal-footer\\\">\\n                <div class=\\\"pull-right\\\">\\n                    <button id=\\\"buttonClose_editUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                    <!--<button id=\\\"buttonSave_editUser\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"-->\\n                    <!--class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"editUser()\\\"-->\\n                    <!--data-dismiss=\\\"modal\\\"-->\\n                    <!--[disabled]=\\\"!user.role_id || !user.grop_id || user.user_name == '' || user.user_lastname == '' || user.user_name == null\\\">-->\\n                    <!--Save-->\\n                    <!--</button>-->\\n                    <button id=\\\"buttonSave_editUser\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                        class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"editUser(user)\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"!user.role_id || !user.grop_id || user.user_name == '' || user.user_lastname == '' || user.user_name == null\\\">\\n                        Save\\n                    </button>\\n\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"modal fade\\\" id=\\\"viewUser\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n            <div class=\\\"modal-header modal_header_info_categories\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                    <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title titleCategorie_editCategorie\\\"><i class=\\\"sq sq-profiles\\\"></i> View User</h4>\\n            </div>\\n            <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n                <div class=\\\"row\\\">\\n                    <div style=\\\"height: 174px; padding-top: 10px;background-color: #eef4f8;padding: 0px;width: 100%;text-align: center;\\\">\\n                        <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; width:100px;height:100px;margin:0 auto;border-radius:50%;overflow:hidden;transform: translate(0px, 17px);text-align: center;\\\">\\n                            <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" style=\\\"width:95px;height:auto;top:1px;\\\"\\n                                class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                        </div>\\n                        <div class=\\\"infoUserUser_User\\\">\\n                            {{user.user_user}}\\n                        </div>\\n                    </div>\\n                    <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>First Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_name\\\" id=\\\"nameUser_quickView\\\"\\n                                    name=\\\"nameUser_quickView\\\" disabled>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Last Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_lastname\\\" id=\\\"lastNameUser_quickView\\\"\\n                                    name=\\\"lastNameUser_quickView\\\" disabled>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Phone Number</label>\\n                                <p-inputMask class=\\\" form-control sqlx-inputmask\\\" [autoClear]=\\\"false\\\" mask=\\\"+99 999 9999999\\\"\\n                                    [(ngModel)]=\\\"user.user_phone\\\" placeholder=\\\"+99 999 9999999\\\" disabled></p-inputMask>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>E-mail Address</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_email\\\" id=\\\"emailUser_quickView\\\"\\n                                    name=\\\"emailUser_quickView\\\" disabled>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Role</label>\\n                                <p-dropdown id=\\\"rolUser_quickView\\\" name=\\\"rolUser_quickView\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"roles\\\" [(ngModel)]=\\\"user.role_id\\\"\\n                                    placeholder=\\\"Select a Role\\\" disabled></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown id=\\\"groupUser_quickView\\\" name=\\\"groupUser_quickView\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groups\\\" [(ngModel)]=\\\"user.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" disabled></p-dropdown>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"modal-footer\\\">\\n                <div class=\\\"pull-right\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btncloseModal_moduloCategories\\\" data-dismiss=\\\"modal\\\">\\n                        Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n\\n<div class=\\\"modal fade\\\" id=\\\"addUser\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n            <div class=\\\"modal-header modal-header-info-params\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                        class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"sq sq-profiles\\\"></i> New User </h4>\\n            </div>\\n            <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n                <div class=\\\"row\\\">\\n                    <div style=\\\"height: 25px;background-color: #eef4f8;width: 100%;\\\"></div>\\n                    <div style=\\\"height: 128px; padding-top: 10px;background-color: #eef4f8;padding: 0px;width: 100%;text-align: center;\\\">\\n                        <div id=\\\"user-profile-pictureModuleUser\\\" class=\\\"container_imageModuleUser\\\" style=\\\"margin-left: 250px;\\\"\\n                            (mouseenter)=\\\"showChangePictureUser('profile')\\\" (mouseleave)=\\\"showChangePictureUser('profile')\\\">\\n                            <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; width:100px;height:100px;margin:0 auto;border-radius:50%;overflow:hidden;text-align: center;\\\">\\n                                <img [src]=\\\"user.urlimg\\\" id=\\\"profile-img-user\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                    style=\\\"width:95px;height:auto;top:1px;\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                <div id=\\\"change-profile-user\\\" class=\\\"upload-picture-btn-wrapper icon_customUpload\\\"><i\\n                                        class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\" name=\\\"demo[]\\\"\\n                                        accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"onBasicUploadUser($event,'profile')\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n\\n                    <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>First Name</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_name\\\" id=\\\"nameUser_addUser\\\"\\n                                    name=\\\"nameUser_addUser\\\" placeholder=\\\"First Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Last Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_lastname\\\" id=\\\"lastNameUser_addUser\\\"\\n                                    name=\\\"lastNameUser_addUser\\\" placeholder=\\\"Last Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                            </div>\\n                        </div>\\n\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Phone Number</label>\\n                                <!-- <p-inputMask class=\\\" form-control sqlx-inputmask\\\" mask=\\\"+99 999 9999999\\\" [(ngModel)]=\\\"user.user_phone\\\"\\n                                    id=\\\"phoneUser_addUser\\\" name=\\\"phoneUser_addUser\\\" placeholder=\\\"+99 999 9999999\\\"></p-inputMask> -->\\n                                <int-phone-prefix id =\\\"phoneUser_addUser\\\" name=\\\"phoneUser_addUser\\\" class=\\\"user-inputphone\\\" type=\\\"number\\\" [(ngModel)]=\\\"user.user_phone\\\" (keypress)=\\\"validateTel($event)\\\"></int-phone-prefix>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>E-mail Address</label>\\n                                <input type=\\\"email\\\" class=\\\"form-control sqlx-input\\\" id=\\\"emailUser_addUser\\\" name=\\\"emailUser_addUser\\\"\\n                                    [(ngModel)]=\\\"user.user_email\\\" placeholder=\\\"jdoe@mdcloudps.com\\\" pattern=\\\".+@mdcloudps.com\\\"\\n                                    size=\\\"30\\\" (change)=\\\"verifyEmail(user.user_email)\\\">\\n                            </div>\\n                            <div *ngIf=\\\"errors > 0\\\" class=\\\"errors\\\">\\n                                <h6 id=\\\"result\\\">Invalid email</h6>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Role</label>\\n                                <p-dropdown [options]=\\\"roles\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" id=\\\"roleUser_addUser\\\"\\n                                    name=\\\"roleUser_addUser\\\" [autoWidth]=\\\"false\\\" [(ngModel)]=\\\"user.role_id\\\" placeholder=\\\"Select a Role\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown [options]=\\\"groups\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" id=\\\"groupUser_addUser\\\"\\n                                    name=\\\"groupUser_addUser\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"user.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                    <button id=\\\"buttonClose_addUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                    <button id=\\\"buttonSave_addUser\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                        class=\\\"btn-success btn-sm btn-add-sprint\\\"  [disabled]=\\\"validateUser()\\\"\\n                        (click)=\\\"saveUser(user)\\\">Save\\n                    </button>\\n\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\";\n\n/***/ }),\n/* 847 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"usershistory\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <span style=\\\"font-size:20px;\\\">{{ user.user_alias }}</span>\\n            <!-- <small style=\\\"font-size:15px;\\\">Administrator</small> -->\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">{{ user.user_alias }}</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\">\\n        <!--div row-->\\n        <div class=\\\"row\\\">\\n            <!--div col 10-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <!--div box-header-->\\n                <div class=\\\"box-header with-border\\\">\\n                    <!--opciones parte superior-->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5 div_topOptions_sqlx\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnAdd_moduloCategories\\\" (click)=\\\"showAddModal()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAdd\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n                            <button [disabled]=\\\"this.seluser.length == 0\\\" (click)=\\\"delete(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnDelete_moduloCategories\\\"><i class=\\\"fa fa-trash\\\"></i>&nbsp;Delete</button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm btnRefresh_moduloCategories\\\"><i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n                        </div>\\n                        <!--end opciones parte superior-->\\n                        <!--search-->\\n                        <!-- <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" id=\\\"search_userhistory\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                                            placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div> -->\\n                        <!--end search-->\\n                    </div>\\n                </div>\\n                <!--end div box-header-->\\n                <div class=\\\"nav-tabs-custom div_navTitleCampos_categories_sqlx\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx div_ul_navTitleCampos_sqlx\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <!-- <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li> -->\\n                    </ul>\\n                </div>\\n                <!-- box-body-->\\n                <div class=\\\"box-body\\\">\\n                    <!--table-responsive-->\\n\\n                    <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                    </div>\\n                    <div *ngIf=\\\"!isLoading && userHistories.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                        No Data\\n                    </div>\\n\\n                    <div *ngIf=\\\"userHistories.length > 0\\\" class=\\\"table-responsive tasks-messages\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\">\\n                            <thead>\\n                                <th (click)=\\\"selectAll()\\\" class=\\\"th_selectAll_sqlx\\\">\\n                                    <i *ngIf=\\\"seluser.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                    <i *ngIf=\\\"seluser.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                </th>\\n                                <th id=\\\"order_1\\\" class=\\\"th_columnName_sqlx\\\">Name\\n                                    <span [hidden]=\\\"posOrder !== 'grop_name'\\\">\\n                                        <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                        <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                    </span>\\n                                </th>\\n                                <th id=\\\"order_2\\\" class=\\\"th_columnName_sqlx\\\">Date Start\\n                                    <span [hidden]=\\\"posOrder !== 'date_init'\\\">\\n                                        <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                        <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                    </span>\\n                                </th>\\n                                <th id=\\\"order_3\\\" class=\\\"th_columnName_sqlx\\\">Date End\\n                                    <span [hidden]=\\\"posOrder !== 'date_end'\\\">\\n                                        <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                        <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                    </span>\\n                                </th>\\n                                <th class=\\\"th_columnActions_sqlx\\\">Actions\\n                                </th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let uh of userHistories \\\">\\n                                    <td>\\n                                        <div class=\\\"ui-g\\\">\\n                                            <p-checkbox id=\\\"user_history\\\" name=\\\"user_history\\\" value=\\\"{{uh.grhi_id}}\\\" label=\\\"\\\"\\n                                                [(ngModel)]=\\\"seluser\\\"></p-checkbox>\\n                                        </div>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(uh)\\\">{{\\n                                            escapeHtml(uh.grop_name) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(uh)\\\">{{\\n                                            escapeHtml(uh.date_init) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(uh)\\\">{{\\n                                            escapeHtml(uh.date_end) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <div class=\\\"btn-group\\\">\\n                                            <div class=\\\"row\\\">                                                    \\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(uh)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                                                    <i class=\\\"sq sq-search\\\"></i>\\n                                                </button>\\n                                                <button type=\\\"button\\\" (click)=\\\"showEditModal(uh)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                    <i class=\\\"sq sq-quickedit\\\"></i>\\n                                                </button>\\n                                                <button (click)=\\\"delete(uh.grhi_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </div>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                    <!--end table-responsive-->\\n                    <!--div box-footer-->\\n                    <!-- <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                        <div class=\\\"contacts-controls\\\">\\n                            <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                    {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                    >\\n                                    itemcount ?\\n                                    itemcount : (currentpage * limitpage)\\n                                    }} of {{ itemcount }} results\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                    <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                    (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                    <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\"\\n                                    [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                    <option *ngFor=\\\"let u of pages\\\" [ngValue]=\\\"u\\\">{{ u }}</option>\\n                                </select>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                    (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                    <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                    <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div> -->\\n                    <!--end div box-footer-->\\n                </div>\\n                <!-- end box-body-->\\n            </div>\\n            <!--end div col 10-->\\n        </div>\\n        <!--end div row-->\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdDetail\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content \\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-unit\\\" aria-hidden=\\\"true\\\"></i>{{\\\" User History Group # \\\" + userHistory.grhi_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"form-group col-xs-12 col-sm-12 col-md-4 col-lg-4\\\">\\n                            <label>Group</label>\\n                            <p>{{ userHistory.grop_name }}</p>\\n                        </div>\\n                        <div class=\\\"form-group col-xs-12 col-sm-12 col-md-4 col-lg-4\\\">\\n                            <label>Date Start</label>\\n                            <p>{{ userHistory.date_init }}</p>\\n                        </div>\\n                        <div class=\\\"form-group col-xs-12 col-sm-12 col-md-4 col-lg-4\\\">\\n                            <label>Date End</label>\\n                            <p>{{ userHistory.date_end }}</p>\\n                        </div>\\n                    </div>                    \\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdAdd\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i style=\\\"color:rgb(227,237,241)\\\" class=\\\"sq sq-unit\\\"></i>New History Group\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown [options]=\\\"groups\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" id=\\\"groupUser_addUser\\\"\\n                                    name=\\\"groupUser_addUser\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"userHistory.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date Start</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"userHistory.date_init\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date End</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"userHistory.date_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"validateSave()\\\"\\n                            (click)=\\\"save()\\\">\\n                            Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdEdit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" User History Group # \\\" + userHistory.grhi_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown [options]=\\\"groups\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" id=\\\"groupUser_addUser\\\"\\n                                    name=\\\"groupUser_addUser\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"userHistory.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date Start</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"userHistory.date_init\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date End</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"userHistory.date_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"validateSave()\\\"\\n                            (click)=\\\"update()\\\">\\n                            Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n/***/ }),\n/* 848 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Parameters\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li><a routerLink=\\\"/dashboard\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n      <li class=\\\"active\\\"><a routerLink=\\\"/parameters\\\">Parameters</a></li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\" style=\\\"background: #edf5f8;\\\">\\n    <div class=\\\"row\\\">\\n      <!-- /.col -->\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"content-parameters\\\">\\n          <div role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n              <div class=\\\"modal-header modal-header-info-params\\\">\\n                <i class=\\\"fa fa-sliders fa-2x\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n                <span>Class Information</span>\\n                <!--<button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                              <span aria-hidden=\\\"true\\\">&times;</span>\\n                            </button>-->\\n                <h4 class=\\\"modal-title\\\"></h4>\\n                <!--<i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>-->\\n              </div>\\n              <div class=\\\"modal-body\\\">\\n               <div class=\\\"row\\\">\\n                 <div class=\\\"col-xs-12 col-lg-4\\\">\\n                  <div class=\\\"col-xs-7 col-sm-6 col-lg-6\\\">\\n                    <label>Class Number:</label>\\n                  </div>\\n                    <p>{{ clase.clas_id }}</p>\\n                   <div class=\\\"col-xs-7 col-sm-6 col-lg-6\\\">\\n                    <label>Creator:</label>\\n                  </div>\\n                    <p>{{ clase.creator_name }}</p>\\n                 </div>\\n\\n                 <div class=\\\"col-xs-12 col-lg-4\\\">\\n                    <div class=\\\"col-xs-7 col-sm-6 col-lg-6\\\">\\n                      <label>Creation Date:</label>\\n                    </div>\\n                      <p>{{ clase.clas_date }}</p>\\n\\n                   <div class=\\\"col-xs-7 col-sm-6 col-lg-6\\\">\\n                    <label>Description:</label>\\n                  </div>\\n                    <p>{{ clase.clas_description }}</p>\\n                </div>\\n               </div>\\n              </div>\\n\\n              <!--<div class=\\\"modal-footer\\\">\\n                          <div class=\\\"pull-right\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                          </div>\\n                        </div>-->\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12 content-table-parameters\\\">\\n        <div class=\\\"box-params\\\">\\n          <div class=\\\"table-responsive\\\" style=\\\"min-height: 0px!important;\\\">\\n\\n            <table id=\\\"results-params\\\" class=\\\"table table-bordered table-hover table-striped\\\" style=\\\"margin-bottom: 0px;\\\">\\n              <thead>\\n                <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px; height:40px;\\\"> PARAMETERS RELATED <span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                </th>\\n                <th style=\\\"width: 120px;\\\">ACTIONS </th>\\n              </thead>\\n              <tbody>\\n                <tr class *ngFor=\\\"let cl of parameters \\\">\\n                  <td>{{ cl.para_name }}</td>\\n                  <td>\\n                    <div class=\\\"btn-group-params\\\">\\n                      <i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"mdShowParam(cl)\\\"></i>\\n                      <i class=\\\"fa fa-paint-brush\\\" aria-hidden=\\\"true\\\" (click)=\\\"mdEditParam(cl)\\\"></i>\\n                      <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\" (click)=\\\"delParameter(cl.para_id)\\\"></i>\\n                    </div>\\n                  </td>\\n                </tr>\\n              </tbody>\\n            </table>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12\\\" style=\\\"text-align: center;\\\">\\n        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-addParams\\\" (click)=\\\"mdAddParam()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddP\\\">Add Parameter</button>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddParam\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-xs\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n           <h4 style=\\\"color:#fff;\\\" class=\\\"modal-title\\\"><i class=\\\"fa fa-sliders\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i> Add Parameter</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Class Name:</label>\\n                <input class=\\\"form-control\\\" value=\\\"{{clase.clas_name}}\\\" disabled>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Parameter Name:</label>\\n                <input class=\\\"form-control\\\" [(ngModel)]=\\\"parameter.para_name\\\" >\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default-params\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" \\n              (click)=\\\"saveParameter(clase.clas_id)\\\">\\n                <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditParam\\\" role=\\\"dialog\\\">\\n     <div class=\\\"modal-dialog modal-xs\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n           <h4 style=\\\"color:#fff;\\\" class=\\\"modal-title\\\"><i class=\\\"fa fa-sliders\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i> Add Parameter</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Class Name:</label>\\n                <input class=\\\"form-control\\\" value=\\\"{{clase.clas_name}}\\\" disabled>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Parameter Name:</label>\\n                <input class=\\\"form-control\\\" [(ngModel)]=\\\"parameter.para_name\\\" >\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default-params\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" \\n              (click)=\\\"updateParameter(clase.clas_id,parameter.para_id)\\\">\\n                <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n   <div class=\\\"modal fade\\\" id=\\\"mdShowParam\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <i class=\\\"fa fa-sliders fa-2x\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n          <span>Parameter QuickView</span>\\n          <button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n              <span aria-hidden=\\\"true\\\">&times;</span>\\n            </button>\\n          <h4 class=\\\"modal-title\\\"></h4>\\n          <!--<i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>-->\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Class Number:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.clas_id }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Class Name:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.clas_name }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Creator:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                 <p>{{ clase.creator_name }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Creation Date:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.clas_date }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Description:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.clas_description }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Parameter Number:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.para_id }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Class Related:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.para_name }}</p>\\n              </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 849 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n      <h2 style=\\\"font-weight: bold;\\\">\\n          <i class=\\\"fa fa-sliders fa-lg\\\" aria-hidden=\\\"true\\\" style=\\\"color:#007BD2;font-size:20px;\\\"></i> Parameters\\n          <small style=\\\"font-size:15px;\\\">Settings</small>\\n      </h2>\\n      <ol class=\\\"breadcrumb\\\">\\n          <li>\\n              <a routerLink=\\\"/dashboard\\\">\\n                  <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n          </li>\\n          <li class=\\\"active\\\">Parameters</li>\\n      </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <!-- /.col -->\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box-header-params\\\">\\n          <div class=\\\"btn-groupP\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-add\\\" (click)=\\\"mdAddClass()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddP\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n            <button type=\\\"button\\\" class=\\\"btn-primary btn-sm btn-refresh\\\" (click)=\\\"load()\\\"><i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box-params\\\">\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"table-responsive\\\">\\n                \\n              <table id=\\\"results-params\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                <thead>\\n                  <th (click)=\\\"setOrder('clas_name')\\\" style=\\\"width: 150px;\\\"> Class #<span [hidden]=\\\"posOrder !== 'clas_name'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px;\\\">Creator <span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px;\\\">Description<span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px;\\\"> Parameters<span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px;\\\"> Creation date<span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th style=\\\"width: 120px;\\\">Actions</th>\\n\\n                </thead>\\n                <tbody>\\n                  <tr class *ngFor=\\\"let cl of parameters \\\">\\n\\n\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.clas_name }}</a></td>\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.creator_name }}</a></td>\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.clas_description }}</a></td>\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.related_parameters }}</a></td>\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.clas_date }}</a></td>\\n\\n                    <td>\\n                      <div class=\\\"btn-group-params\\\">\\n                        <i class=\\\"sq sq-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"showClass(cl)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\"></i>\\n                        <i class=\\\"sq sq-quickedit\\\" aria-hidden=\\\"true\\\" (click)=\\\"editClass(cl)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"></i>\\n                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\" (click)=\\\"delClass(cl.clas_id)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\"></i>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div class=\\\"box-footer no-padding\\\">\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"contacts-controls-params\\\">\\n          <div class=\\\"pull-right\\\">\\n            <div class=\\\"btn-group\\\">\\n              <button type=\\\"button\\\" class=\\\"btn btn-default-params btn-sm\\\" style=\\\"margin-right: 6px;\\\" (click)=\\\"setCurPage(0)\\\"><i class=\\\"fa fa-chevron-left\\\"></i></button>\\n              <button type=\\\"button\\\" class=\\\"btn btn-default-params btn-sm\\\" (click)=\\\"setCurPage(1)\\\"><i class=\\\"fa fa-chevron-right\\\"></i></button>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdClass\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <i class=\\\"fa fa-sliders fa-2x\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n          <span>Parameter QuickView</span>\\n          <button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n              <span aria-hidden=\\\"true\\\">&times;</span>\\n            </button>\\n          <h4 class=\\\"modal-title\\\"></h4>\\n          <!--<i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>-->\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Class Number:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n                <p>{{ parameter.clas_id }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Creator:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n                 <p>{{ parameter.creator_name }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Creation Date:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n                <p>{{ parameter.clas_date }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Parameters:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n               <p>{{ parameter.related_parameters }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Description:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n                <p>{{ parameter.clas_description }}</p>\\n              </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditClass\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title-params\\\">\\n             <i class=\\\"fa fa-sliders\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>{{\\\" Class #\\\" + parameter.clas_id }}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Name:</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"parameter.clas_name\\\" placeholder=\\\"Name\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group textarea-squadlinx\\\">\\n                <label>Description:</label>\\n                 <textarea class=\\\"form-control txt-sqlx\\\" rows=\\\"5\\\" id=\\\"comment\\\" [(ngModel)]=\\\"parameter.clas_description\\\" placeholder=\\\"Description\\\"></textarea>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default-params btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!parameter.clas_description || parameter.clas_description == '' || parameter.clas_description == 'undefined') || (!parameter.clas_id) || (!parameter.clas_name || parameter.clas_name == '' || parameter.clas_name == 'undefined')\\\"\\n              (click)=\\\"updateClass()\\\">\\n              <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddClass\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n           <h4 style=\\\"color:#fff;\\\" class=\\\"modal-title\\\"><i class=\\\"fa fa-sliders\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i> New Class</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Name:</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"parameter.clas_name\\\" placeholder=\\\"Name\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group textarea-squadlinx\\\">\\n                <label>Description:</label>\\n                 <textarea class=\\\"form-control txt-sqlx\\\" rows=\\\"5\\\" id=\\\"comment\\\" [(ngModel)]=\\\"parameter.clas_description\\\" placeholder=\\\"Description\\\"></textarea>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default-params btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!parameter.clas_description || parameter.clas_description == '' || parameter.clas_description == 'undefined') || (!parameter.clas_name || parameter.clas_name == '' || parameter.clas_name == 'undefined')\\\"\\n              (click)=\\\"saveClass()\\\">\\n                <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 850 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"categories\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> Categories\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Categories</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{ prodname }}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"a_1\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setProductList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let pr of products\\\">\\n                            <a id=\\\"a_2\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setProductList(pr.value, pr.label)\\\">{{ pr.label }}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 sectionPrincipal_div_div_moduloCategories\\\">\\n                <!--div box-header-->\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!--opciones parte superior-->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5 div_topOptions_sqlx\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnAdd_moduloCategories\\\" (click)=\\\"addCategory()\\\"\\n                                data-toggle=\\\"modal\\\" data-target=\\\"#AddForm\\\">Add Category</button>\\n                            <button [disabled]=\\\"this.selcat.length == 0\\\" (click)=\\\"deleteCategory(null)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-default btn-sm btnDelete_moduloCategories\\\">Delete</button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm btnRefresh_moduloCategories\\\">Refresh</button>\\n                        </div>\\n                        <!--end opciones parte superior-->\\n                        <!--search-->\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2 div_elementsSearchCategories\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" id=\\\"search_categorie\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                                            placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!--end search-->\\n                    </div>\\n                </div>\\n                <!--end div box-header-->\\n                <div class=\\\"nav-tabs-custom div_navTitleCampos_categories_sqlx\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx div_ul_navTitleCampos_sqlx\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <!-- box-body-->\\n                <div class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <th (click)=\\\"selectAll()\\\" class=\\\"th_selectAll_sqlx\\\">\\n                                        <i *ngIf=\\\"selcat.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                        <i *ngIf=\\\"selcat.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                    </th>\\n                                    <th id=\\\"order_1\\\" (click)=\\\"setOrder('cate_id')\\\" class=\\\"th_columnNumber_sqlx\\\">Number\\n                                        <span [hidden]=\\\"posOrder !== 'cate_id'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                            <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                        </span>\\n                                    </th>\\n                                    <th id=\\\"order_2\\\" (click)=\\\"setOrder('cate_desc')\\\" class=\\\"th_columnName_sqlx\\\">Name\\n                                        <span [hidden]=\\\"posOrder !== 'cate_desc'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                            <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                        </span>\\n                                    </th>\\n                                    <th id=\\\"order_3\\\" (click)=\\\"setOrder('para_status')\\\" class=\\\"th_columnStatus_sqlx\\\">Status\\n                                        <span [hidden]=\\\"posOrder !== 'para_status'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                            <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                        </span>\\n                                    </th>\\n                                    <th id=\\\"order_4\\\" (click)=\\\"setOrder('para_type')\\\" class=\\\"th_columnType_sqlx\\\">Type\\n                                        <span [hidden]=\\\"posOrder !== 'para_type'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                            <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                        </span>\\n                                    </th>\\n                                    <th class=\\\"th_columnActions_sqlx\\\">Actions\\n                                    </th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let cat of categories \\\" [ngStyle]=\\\"cat.para_codigo == 2 ? { 'background': '#c0c0bf' } : {}\\\">\\n                                        <td>\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"categories\\\" name=\\\"categories\\\" value=\\\"{{cat.cate_id}}\\\" label=\\\"\\\"\\n                                                    [(ngModel)]=\\\"selcat\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td>\\n                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(cat)\\\">{{\\n                                                escapeHtml(cat.cate_id) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(cat)\\\">{{\\n                                                escapeHtml(cat.cate_desc) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(cat)\\\">{{\\n                                                escapeHtml(cat.status) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(cat)\\\">{{\\n                                                escapeHtml(cat.type_name) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <div class=\\\"btn-group\\\">\\n                                                <div class=\\\"row\\\">\\n                                                    <button type=\\\"button\\\" (click)=\\\"showModal(cat)\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                                                        <i class=\\\"sq sq-search\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"cat.para_status != 72 && cat.para_status != 73\\\" type=\\\"button\\\"\\n                                                        (click)=\\\"showModalEditCategory(cat)\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                        <i class=\\\"sq sq-quickedit\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"cat.para_status == 72\\\" (click)=\\\"reactiveCategory(cat.cate_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Reactive\\\">\\n                                                        <i class=\\\"fa fa-undo\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"cat.para_status != 72 && cat.para_status != 73\\\" (click)=\\\"innactiveCategory(cat.cate_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Inactive\\\">\\n                                                        <i class=\\\"fa fa-times-circle-o\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\" cat.para_status != 73\\\" (click)=\\\"deleteCategory(cat.cate_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <!--end table-responsive-->\\n                        <!--div box-footer-->\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                        [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                        (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                        <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                    <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" style=\\\"\\\"\\n                                        [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                        (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                        [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                        <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!--end div box-footer-->\\n                    </div>\\n                </div>\\n                <!-- end box-body-->\\n            </div>\\n        </div>\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdCategory\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal_header_info_categories\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title titleCategorie_modalQuick\\\">\\n                        <i class=\\\"fa fa-tags\\\" aria-hidden=\\\"true\\\"></i>{{ \\\" Category #\\\" + category.cate_id }}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\">Name:</label>\\n                            <p class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 element_p_sqlx\\\">{{ category.cate_desc }}</p>\\n                        </div>\\n                        <div *ngIf=\\\"category.approvalusers.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 \\\">Users authorized to approve tasks with\\n                                this category:</label>\\n                            <p class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 element_p_sqlx\\\" *ngFor=\\\"let usr of category.approvalusers\\\">{{\\n                                usr.completename }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">Status:</label>\\n                            <p class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 element_p_sqlx\\\">{{ category.status }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">Type:</label>\\n                            <p class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 element_p_sqlx\\\">{{ category.type_name }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">Product:</label>\\n                            <p class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 element_p_sqlx\\\">{{ category.prod_name }}</p>\\n                        </div>\\n                        <div *ngIf=\\\"category.fields.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <label class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_campo_quickViewCategorie\\\">Form\\n                                fields:</label>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 \\\">\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <thead>\\n                                            <th class=\\\"th_columnField_showCat_sqlx\\\">Field</th>\\n                                            <th class=\\\"th_columnName_showCat_sqlx\\\">Name</th>\\n                                            <th class=\\\"th_columnMand_showCat_sqlx\\\">(*)</th>\\n                                        </thead>\\n                                    </table>\\n                                    <!--</div>-->\\n                                </div>\\n                                <div class=\\\"div_tbody_newForm_quickView\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let fd of category.fields ; let i=index;\\\">\\n                                                <td class=\\\"td_columnField_showCat_sqlx\\\">\\n                                                    <label>{{i+1}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnName_showCat_sqlx\\\">\\n                                                    <label>{{ fd.form_field }}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnMand_showCat_sqlx\\\">\\n                                                    <p-checkbox [(ngModel)]=\\\"fd.form_mandatory\\\" binary=\\\"true\\\" disabled></p-checkbox>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btncloseModal_moduloCategories\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"AddCategory\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal_header_info_categories \\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title titleCategorie_modalQuick\\\">New Category</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Name</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"category.categoryNameNew\\\">\\n                            </div>\\n                            <span class=\\\"has-error\\\" *ngIf=\\\"categoryMenu.indexOf(categoryNameNew) >= 0\\\">This name is\\n                                already in use</span>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Need approval from</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"category.approvalusers\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\"\\n                                        [minLength]=\\\"1\\\" placeholder=\\\"Select users\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"stscat\\\" [(ngModel)]=\\\"category.para_status\\\" placeholder=\\\"Select Status\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Type</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [options]=\\\"tycate\\\" [(ngModel)]=\\\"category.para_type\\\" placeholder=\\\"Select Type\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 input-squadlinx\\\">\\n                            <label>Number of fields</label>\\n                            <input type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"category.number\\\" min=\\\"1\\\"\\n                                step=\\\"1\\\">\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n                          <label>Product</label>\\n                          <p-dropdown id=\\\"ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                            [options]=\\\"products\\\" [(ngModel)]=\\\"category.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-sm btn-default btnAddForm_moduloCategories\\\" data-toggle=\\\"collapse\\\"\\n                        data-target=\\\"#addForm\\\" (click)=\\\"createForm(category.number)\\\" [disabled]=\\\"(!category.number)\\\">\\n                        Add Form\\n                        <i class=\\\"fa fa-angle-down\\\" aria-hidden=\\\"true\\\"></i>\\n                    </button>\\n\\n                    <div id=\\\"addForm\\\" class=\\\"panel-collapse collapse\\\" style=\\\"padding-top: 15px;\\\">\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group scrollable\\\" style=\\\"max-height: 300px;\\\">\\n                                <!--<label>New Form</label>-->\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <th class=\\\"th_columnField_newForm_sqlx\\\">Field</th>\\n                                        <th class=\\\"th_columnName_newForm_sqlx\\\">Name</th>\\n                                        <th class=\\\"th_columnMand_newForm_sqlx\\\">(*)</th>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let cat of category.fields; let i=index\\\">\\n                                            <td style=\\\"text-align: center;\\\">\\n                                                <label>{{i+1}}</label>\\n                                            </td>\\n                                            <td>\\n                                                <input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"cat.campo_value\\\"\\n                                                    (value)=\\\"cat.campo_value\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnMand_newForm_sqlx\\\">\\n                                                <p-checkbox [(ngModel)]=\\\"cat.campo_mandatory\\\" binary=\\\"true\\\"></p-checkbox>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btncloseModal_moduloCategories\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                        <button type=\\\"button\\\" id=\\\"buttonSave_newCategorie\\\" class=\\\"btn btnSave_moduloCategories\\\"\\n                            [disabled]=\\\"(!category.para_type) || (!category.categoryNameNew) || (!category.para_status) || (!category.prod_id)\\\"\\n                            (click)=\\\"saveCategory()\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"EditCategory\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal_header_info_categories\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title titleCategorie_editCategorie\\\">Edit Category</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Name</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"categorie.cate_desc\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Need approval from</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"categorie.users\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\"\\n                                        [minLength]=\\\"1\\\" placeholder=\\\"Select users\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"stscat\\\" [(ngModel)]=\\\"categorie.para_status\\\" placeholder=\\\"Select Status\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Type</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [options]=\\\"tycate\\\" [(ngModel)]=\\\"categorie.para_type\\\" placeholder=\\\"Select Type\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n                          <label>Product</label>\\n                          <p-dropdown id=\\\"ddwnr_7\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                            [options]=\\\"products\\\" [(ngModel)]=\\\"categorie.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                        </div>\\n                        <div *ngIf=\\\"categorie.fields.length > 0\\\" class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                            <label class=\\\"label_categorie_squadlinx\\\">Form Associate</label>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <thead>\\n                                            <th class=\\\"th_columnField_editCat_sqlx\\\">Field</th>\\n                                            <th class=\\\"th_columnName_editCat_sqlx\\\">Name</th>\\n                                            <th class=\\\"th_columnMand_editCat_sqlx\\\">(*)</th>\\n                                            <th class=\\\"th_columnButtonDelete_editCat_sqlx\\\"></th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                                <!--tbody para la tabla del form-->\\n                                <div class=\\\"form-group scrollable tbodyForm_editCategory\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let cat of categorie.fields; let i=index\\\">\\n                                                <td class=\\\"td_columnField_editCat_sqlx\\\">\\n                                                    <label style=\\\"margin-top: 8px;\\\">{{i + 1}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnName_editCat_sqlx\\\">\\n                                                    <input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"cat.form_field\\\"\\n                                                        (value)=\\\"cat.form_field\\\">\\n                                                </td>\\n                                                <td class=\\\"td_columnMand_editCat_sqlx\\\">\\n                                                    <p-checkbox [(ngModel)]=\\\"cat.form_mandatory\\\" binary=\\\"true\\\"></p-checkbox>\\n                                                </td>\\n                                                <td class=\\\"td_columnButtonDelete_editCat_sqlx\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        (click)=\\\"deleteFieldForm(i)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Field\\\"\\n                                                        style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                                <!--tfoot para la tabla del form-->\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tfoot>\\n                                            <tr>\\n                                                <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                        pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm()\\\"><i class=\\\"fa fa-plus-square\\\"></i></button>\\n                                                </td>\\n                                            </tr>\\n                                        </tfoot>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"categorie.fields.length == 0\\\" class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                            <label class=\\\"label_categorie_squadlinx\\\">Associate New Form</label>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" style=\\\"font-size: 20px; padding: 0px;\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Form\\\" (click)=\\\"addFieldForm()\\\"><i class=\\\"fa fa-plus-square\\\"></i></button>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btncloseModal_moduloCategories\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btnSave_moduloCategories\\\" [disabled]=\\\"(!categorie.para_type) || (!categorie.cate_desc) || (!categorie.para_status) || (!categorie.prod_id)\\\"\\n                            (click)=\\\"updateCategory()\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n                    </div>\\n                </div>\\n\\n            </div>\\n        </div>\\n    </div>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n/***/ }),\n/* 851 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"units\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <span style=\\\"font-size:20px;\\\">Units</span>\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Units</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\">\\n        <!--div row-->\\n        <div class=\\\"row\\\">\\n            <!--div col 10-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <!--div box-header-->\\n                <div class=\\\"box-header with-border\\\">\\n                    <!--opciones parte superior-->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5 div_topOptions_sqlx\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnAdd_moduloCategories\\\" (click)=\\\"showAddModal()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddUnit\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n                            <button [disabled]=\\\"this.selunit.length == 0\\\" (click)=\\\"deleteUnit(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnDelete_moduloCategories\\\"><i class=\\\"fa fa-trash\\\"></i>&nbsp;Delete</button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm btnRefresh_moduloCategories\\\"><i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n                        </div>\\n                        <!--end opciones parte superior-->\\n                        <!--search-->\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" id=\\\"search_categorie\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                                            placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!--end search-->\\n                    </div>\\n                </div>\\n                <!--end div box-header-->\\n                <div class=\\\"nav-tabs-custom div_navTitleCampos_categories_sqlx\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx div_ul_navTitleCampos_sqlx\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <!-- <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li> -->\\n                    </ul>\\n                </div>\\n                <!-- box-body-->\\n                <div class=\\\"box-body\\\">\\n                    <!--table-responsive-->\\n                    <div class=\\\"table-responsive tasks-messages\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\">\\n                            <thead>\\n                                <th (click)=\\\"selectAll()\\\" class=\\\"th_selectAll_sqlx\\\">\\n                                    <i *ngIf=\\\"selunit.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                    <i *ngIf=\\\"selunit.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                </th>\\n                                <th id=\\\"order_1\\\" (click)=\\\"setOrder('unit_desc')\\\" class=\\\"th_columnName_sqlx\\\">Name\\n                                    <span [hidden]=\\\"posOrder !== 'unit_desc'\\\">\\n                                        <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                        <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                    </span>\\n                                </th>\\n                                <th class=\\\"th_columnActions_sqlx\\\">Actions\\n                                </th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let unit of units \\\">\\n                                    <td>\\n                                        <div class=\\\"ui-g\\\">\\n                                            <p-checkbox id=\\\"units\\\" name=\\\"units\\\" value=\\\"{{unit.unit_id}}\\\" label=\\\"\\\"\\n                                                [(ngModel)]=\\\"selunit\\\"></p-checkbox>\\n                                        </div>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(unit)\\\">{{\\n                                            escapeHtml(unit.unit_desc) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <div class=\\\"btn-group\\\">\\n                                            <div class=\\\"row\\\">                                                    \\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(unit)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                                                    <i class=\\\"sq sq-search\\\"></i>\\n                                                </button>\\n                                                <button type=\\\"button\\\" (click)=\\\"showEditModal(unit)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                    <i class=\\\"sq sq-quickedit\\\"></i>\\n                                                </button>\\n                                                <button (click)=\\\"deleteUnit(unit.unit_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </div>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                    <!--end table-responsive-->\\n                    <!--div box-footer-->\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                        <div class=\\\"contacts-controls\\\">\\n                            <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                    {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                    >\\n                                    itemcount ?\\n                                    itemcount : (currentpage * limitpage)\\n                                    }} of {{ itemcount }} results\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                    <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                    (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                    <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\"\\n                                    [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                    <option *ngFor=\\\"let u of pages\\\" [ngValue]=\\\"u\\\">{{ u }}</option>\\n                                </select>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                    (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                    <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                    <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--end div box-footer-->\\n                </div>\\n                <!-- end box-body-->\\n            </div>\\n            <!--end div col 10-->\\n        </div>\\n        <!--end div row-->\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdUnit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content \\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-unit\\\" aria-hidden=\\\"true\\\"></i>{{\\\" Unit # \\\" + unit.unit_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Unit Name</label>\\n                        <p>{{ unit.unit_desc }}</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddUnit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i style=\\\"color:rgb(227,237,241)\\\" class=\\\"sq sq-unit\\\"></i>New Unit\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Name</label>\\n                                <input class=\\\"form-control sqlx-input \\\" [(ngModel)]=\\\"unit.unit_desc\\\"\\n                                    placeholder=\\\"Unit Name\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\"\\n                            [disabled]=\\\"(!unit.unit_desc || unit.unit_desc == '' || unit.unit_desc == 'undefined')\\\"\\n                            (click)=\\\"saveUnit()\\\">\\n                            Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditUnit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" Unit # \\\" + unit.unit_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Unit Name</label>\\n                                <input class=\\\"form-control sqlx-input \\\" [(ngModel)]=\\\"unit.unit_desc\\\"\\n                                    placeholder=\\\"Unit Name\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\"\\n                            [disabled]=\\\"(!unit.unit_desc || unit.unit_desc == '' || unit.unit_desc == 'undefined')\\\"\\n                            (click)=\\\"updateUnit()\\\">\\n                            Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    \\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n/***/ }),\n/* 852 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<img src=\\\"img/404.png\\\" style=\\\"height: 100%; width: 100%;\\\">\";\n\n/***/ }),\n/* 853 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px; background: white;\\\">\\n    <section class=\\\"content\\\" style=\\\"padding: 0px;\\\">\\n        <img src=\\\"img/404.png\\\" style=\\\"height: 100%; width: 100%;\\\">\\n    </section>\\n</section>\";\n\n/***/ }),\n/* 854 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n\\n<span class=\\\"addt sendemail fa fa-paper-plane-o bg-purple\\\" (click)=\\\"addMail()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n    pTooltip=\\\"Compose a new email\\\"></span>\\n<span class=\\\"addt atemail fa fa-envelope bg-blue\\\" (click)=\\\"showAsociateMail()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n    pTooltip=\\\"Link an email\\\"></span>\\n<span class=\\\"addt comment fa fa-comments bg-yellow\\\" (click)=\\\"addNote()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n    pTooltip=\\\"Leave a comment\\\"></span>\\n<span class=\\\"addt task fa fa-tasks bg-aqua\\\" (click)=\\\"addTask()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create a task\\\"></span>\\n<span class=\\\"addt btnplus fa fa-plus bg-blue\\\" style=\\\"height: 45px; width: 45px;\\\" (click)=\\\"enableBtn()\\\" data-container=\\\"body\\\"\\n    tooltipPosition=\\\"top\\\" pTooltip=\\\"Tools\\\"></span>\\n\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h1>\\n            Products666 #{{ task.task_id }}\\n        </h1>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li><a href=\\\"#\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n            <li><a href=\\\"#\\\">Tasks</a></li>\\n            <li class=\\\"active\\\">Task</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box box-primary\\\">\\n                    <div class=\\\"box-header with-border\\\">\\n                        <h3 class=\\\"box-title\\\">{{ task.task_subject }}</h3>\\n                    </div>\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Number</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.task_id}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Date</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.task_date}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Creator</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.creator ? task.creator : \\\"Error\\\"}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Status</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{ task.tsst_name }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Assigned to</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.asigned ? task.asigned : \\\"Error\\\"}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Delivery Date</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.task_delivery}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Points</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.task_points}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Percentage {{ task.task_percentage + '%' }} </label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <div class='progress progress-sm active'>\\n                                <div class=\\\"progress-bar progress-bar-success progress-bar-striped\\\" role=\\\"progressbar\\\"\\n                                    aria-valuenow=\\\"20\\\" aria-valuemin=\\\"0\\\" aria-valuemax=\\\"100\\\" [ngStyle]=\\\"{ 'width': task.task_percentage + '%' }\\\"><span\\n                                        class='sr-only'> Complete</span>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-md-12\\\">\\n                            <label class=\\\"control-label\\\">Description</label>\\n                            <div class=\\\"well\\\" id=\\\"textTask\\\" [innerHTML]=\\\"task.task_description\\\"></div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"box-footer\\\" *ngIf=\\\"task.attachments.length > 0\\\">\\n                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                            <li *ngFor=\\\"let att of task.attachments\\\">\\n                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                        <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.tsat_type !== 'application/pdf' && att.tsat_type !== 'text/plain' && att.tsat_type !== 'text/csv' && att.tsat_type !== 'application/msword' && att.tsat_type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.tsat_type !== 'application/vnd.ms-excel' && att.tsat_type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.tsat_type !== 'image/jpeg' && att.tsat_type !== 'image/jpg' && att.tsat_type !== 'image/png' && att.tsat_type !== 'image/gift' && att.tsat_type !== 'application/x-rar-compressed' && att.tsat_type !== 'application/zip' && att.tsat_type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.tsat_type !== 'application/vnd.ms-powerpoint' && att.tsat_type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.tsat_type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                        <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.tsat_type == 'application/pdf'\\\"></i>\\n                                        <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.tsat_type == 'image/jpeg' || att.tsat_type == 'image/jpg' || att.tsat_type == 'image/png' || att.tsat_type == 'image/gift'\\\"></i>\\n                                        <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.tsat_type == 'text/plain' || att.tsat_type == 'text/csv'\\\"></i>\\n                                        <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.tsat_type == 'application/msword' || att.tsat_type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                        <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.tsat_type == 'application/vnd.ms-excel' || att.tsat_type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                        <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.tsat_type == 'application/x-rar-compressed' || att.tsat_type == 'application/zip'\\\"></i>\\n                                        <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.tsat_type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.tsat_type == 'application/vnd.ms-powerpoint' || att.tsat_type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                        <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.tsat_type.substring(0, 6) == 'audio/'\\\"></i>\\n                                    </span></a>\\n                                <div class=\\\"mailbox-attachment-info\\\">\\n                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\"><i class=\\\"fa fa-paperclip\\\"></i>{{\\n                                        att.tsat_name }}</a>\\n                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                        {{att.tsat_size + ' bytes'}}\\n                                        <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i\\n                                                class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                    </span>\\n                                </div>\\n                            </li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <ul class=\\\"timeline\\\">\\n                    <li><i class=\\\"fa fa-clock-o bg-gray\\\"></i></li>\\n                    <li class=\\\"time-label\\\">\\n                        <span class=\\\"bg-success\\\">{{task.task_date}}</span>\\n                    </li>\\n                    <li *ngFor=\\\"let dt of detail\\\">\\n                        <i class=\\\"{{ dt.label }}\\\"></i>\\n                        <div class=\\\"timeline-item\\\">\\n                            <span class=\\\"time\\\"><b>{{\\\"#\\\" + dt.number + \\\" \\\"}}</b>{{dt.date}}</span>\\n                            <h3 class=\\\"timeline-header\\\">\\n                                <a>{{dt.creator}}</a>\\n                                {{\\\" \\\" + dt.title}}\\n                                <a>{{dt.asigned}}</a>\\n                                <!-- <span *ngFor=\\\"let as of dt.asigned\\\">{{ \\\"<\\\" + as.user_lastname + \\\", \\\" + as.user_name + \\\">,\\\" }}</span> -->\\n                            </h3>\\n                            <div class=\\\"timeline-body\\\">\\n                                <div class=\\\"box-body\\\">\\n                                    <div class=\\\"progress progress-md\\\" *ngIf=\\\"dt.percentage > 0\\\">\\n                                        <div class=\\\"progress-bar progress-bar-success\\\" [ngStyle]=\\\"{ 'width': dt.percentage + '%' }\\\"></div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-md-12 col-bg-12\\\" *ngIf=\\\"dt.subject.length > 0\\\">\\n                                        <p>{{dt.subject}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-md-12\\\">\\n                                        <iframe [attr.id]=\\\"'fr'+dt.number\\\" [attr.srcdoc]=\\\"escapeHtml(sanitizeHtml(dt.description))\\\"\\n                                            [ngStyle]=\\\"escapeHtml(sanitizeHtml(dt.description)).length == 0 ? {'width': '100%', 'height': '0px', 'border': '0px', 'overflow': 'scroll'} : escapeHtml(sanitizeHtml(dt.description)).length <= 100 ? {'width': '100%', 'height': '100px', 'border': '0px', 'overflow': 'scroll'} : {'width': '100%', 'height': '450px', 'border': '0px', 'overflow': 'scroll'}\\\">\\n                                        </iframe>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"box-footer\\\" *ngIf=\\\"dt.attachments.length > 0\\\">\\n                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                    <li *ngFor=\\\"let att of dt.attachments\\\">\\n                                        <a [href]=\\\"att.path\\\" download=\\\"{{ att.file_name }}\\\" class=\\\"mailbox-attachment-name\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                            </span>\\n                                        </a>\\n                                        <div class=\\\"mailbox-attachment-info\\\">\\n                                            <a [href]=\\\"att.path\\\" download=\\\"{{ att.file_name }}\\\" class=\\\"mailbox-attachment-name\\\"><i\\n                                                    class=\\\"fa fa-paperclip\\\"></i> {{ att.file_name }}</a>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </li>\\n                    <li class=\\\"collapse\\\" id=\\\"collapseNote\\\">\\n                        <i class=\\\"fa fa-comments bg-yellow\\\"></i>\\n                        <div class=\\\"timeline-item\\\">\\n                            <h3 class=\\\"timeline-header\\\"><a>Leave a comment</a> New comment for this task</h3>\\n                            <div class=\\\"timeline-body\\\">\\n                                <textarea class=\\\"form-control\\\" [(ngModel)]=\\\"note.note_text\\\"></textarea>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\">\\n                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                    <li *ngFor=\\\"let att of note.attachments\\\">\\n                                        <span class=\\\"mailbox-attachment-icon\\\">\\n                                            <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                            <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                            <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                            <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                            <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                            <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                            <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                            <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                            <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                        </span>\\n                                        <div class=\\\"mailbox-attachment-info\\\">\\n                                            <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                            <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentNote(att)\\\"><i\\n                                                        class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                            </span>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\">\\n                                <div class=\\\"pull-right\\\">\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" (click)=\\\"saveNote()\\\"><i class=\\\"fa fa-floppy-o\\\"></i>\\n                                        Publish</button>\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\"><i class=\\\"fa fa-times\\\"></i>\\n                                        Close</button>\\n                                </div>\\n                                <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                                    for=\\\"note-file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                    <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                </label>\\n                                <input id=\\\"note-file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                    style=\\\"display: none;\\\" (change)=\\\"onChangeNote($event)\\\" />\\n                            </div>\\n                        </div>\\n                    </li>\\n                    <li class=\\\"collapse \\\" id=\\\"collapseTask\\\">\\n                        <i class=\\\"fa fa-tasks bg-blue\\\"></i>\\n                        <div class=\\\"timeline-item\\\">\\n                            <div class=\\\"timeline-header\\\">\\n                                <h4 class=\\\"timeline-title\\\">New Task</h4>\\n                            </div>\\n                            <div class=\\\"timeline-body\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Subject</label>\\n                                            <input class=\\\"form-control\\\" [(ngModel)]=\\\"subtask.task_subject\\\" placeholder=\\\"Subject\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Product</label>\\n                                            <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                                [(ngModel)]=\\\"subtask.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Assign to</label>\\n                                            <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                                [(ngModel)]=\\\"subtask.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Delivery Date</label>\\n                                            <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"subtask.task_delivery\\\"\\n                                                dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Points</label>\\n                                            <input type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"subtask.task_points\\\"\\n                                                [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Description</label>\\n                                            <p-editor [(ngModel)]=\\\"subtask.task_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                                <p-header>\\n                                                    <span class=\\\"ql-formats\\\">\\n                                                        <span class=\\\"ql-header\\\">\\n                                                            <select class=\\\"ql-header\\\">\\n                                                                <option value=\\\"1\\\">Heading</option>\\n                                                                <option value=\\\"2\\\">Subheading</option>\\n                                                                <option selected>Normal</option>\\n                                                            </select>\\n                                                        </span>\\n\\n                                                        <span class=\\\"ql-font\\\">\\n                                                            <select class=\\\"ql-font\\\">\\n                                                                <option selected>Sans Serif</option>\\n                                                                <option value=\\\"serif\\\">Serif</option>\\n                                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                                            </select>\\n                                                        </span>\\n                                                    </span>\\n\\n                                                    <span class=\\\"ql-formats\\\">\\n                                                        <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                        <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                        <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                                    </span>\\n\\n                                                    <span class=\\\"ql-formats\\\">\\n                                                        <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\"\\n                                                            type=\\\"button\\\"></button>\\n                                                        <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\"\\n                                                            type=\\\"button\\\"></button>\\n                                                        <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                            <select class=\\\"ql-align\\\">\\n                                                                <option selected></option>\\n                                                                <option value=\\\"center\\\"></option>\\n                                                                <option value=\\\"right\\\"></option>\\n                                                                <option value=\\\"justify\\\"></option>\\n                                                            </select>\\n                                                        </span>\\n                                                    </span>\\n                                                </p-header>\\n                                            </p-editor>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\" *ngIf=\\\"subtask.attachments && subtask.attachments.length > 0\\\">\\n                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                    <li *ngFor=\\\"let att of subtask.attachments\\\">\\n                                        <span class=\\\"mailbox-attachment-icon\\\">\\n                                            <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                            <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                            <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                            <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                            <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                            <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                            <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                            <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                            <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                        </span>\\n                                        <div class=\\\"mailbox-attachment-info\\\">\\n                                            <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                            <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i\\n                                                        class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                            </span>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12\\\">\\n                                        <div class=\\\"pull-left\\\">\\n                                            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                                                for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                                <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                            </label>\\n                                            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                                style=\\\"display: none;\\\" (change)=\\\"onChangeTask($event)\\\" />\\n                                        </div>\\n                                        <div class=\\\"pull-right\\\">\\n                                            <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\"><i class=\\\"fa fa-times\\\"></i>\\n                                                Close</button>\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\"\\n                                                [disabled]=\\\"(!subtask.task_description || subtask.task_description == '' || subtask.task_description == 'undefined') || (!subtask.prod_id) || (!subtask.task_points || subtask.task_points <= 0)\\\"\\n                                                (click)=\\\"saveTask()\\\"><i class=\\\"fa fa-floppy-o\\\"></i> Create</button>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </li>\\n                    <li class=\\\"collapse \\\" id=\\\"collapseMail\\\">\\n                        <i class=\\\"fa fa-paper-plane-o bg-purple\\\"></i>\\n                        <div class=\\\"timeline-item\\\">\\n                            <h3 class=\\\"timeline-header\\\"><a>Compose an email</a> New email for this task</h3>\\n                            <div class=\\\"timeline-body\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>To:</label>\\n                                    <span class=\\\"ui-fluid\\\">\\n                                        <p-autoComplete [(ngModel)]=\\\"mail.emails\\\" [suggestions]=\\\"listmails\\\"\\n                                            (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                            placeholder=\\\"Recipient\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                        </p-autoComplete>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Subject: </label>\\n                                    <input class=\\\"form-control\\\" [(ngModel)]=\\\"mail.mail_subject\\\" placeholder=\\\"Subject\\\">\\n                                </div>\\n                                <div class=\\\"btn-group\\\" role=\\\"group\\\">\\n                                    <button *ngFor=\\\"let tmp of templates\\\" (click)=\\\"changeTmp(tmp)\\\">{{tmp.mtpl_name}}</button>\\n                                </div>\\n                                <div class=\\\"form-group\\\">\\n                                    <p-editor [(ngModel)]=\\\"mail.content\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                        <p-header>\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <span class=\\\"ql-header\\\">\\n                                                    <select class=\\\"ql-header\\\">\\n                                                        <option value=\\\"1\\\">Heading</option>\\n                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                        <option selected>Normal</option>\\n                                                    </select>\\n                                                </span>\\n\\n                                                <span class=\\\"ql-font\\\">\\n                                                    <select class=\\\"ql-font\\\">\\n                                                        <option selected>Sans Serif</option>\\n                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                    <select class=\\\"ql-align\\\">\\n                                                        <option selected></option>\\n                                                        <option value=\\\"center\\\"></option>\\n                                                        <option value=\\\"right\\\"></option>\\n                                                        <option value=\\\"justify\\\"></option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n                                        </p-header>\\n                                    </p-editor>\\n                                </div>\\n                                <div class=\\\"btn-group\\\" role=\\\"group\\\">\\n                                    <button *ngFor=\\\"let sign of signatures\\\" (click)=\\\"changeSgn(sign)\\\">{{sign.mtpl_name}}</button>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\" *ngIf=\\\"mail.attachments.length > 0\\\">\\n                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                    <li *ngFor=\\\"let att of mail.attachments\\\">\\n                                        <span class=\\\"mailbox-attachment-icon\\\">\\n                                            <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                            <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                            <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                            <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                            <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                            <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                            <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                            <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                            <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                        </span>\\n                                        <div class=\\\"mailbox-attachment-info\\\">\\n                                            <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                            <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i\\n                                                        class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                            </span>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\">\\n                                <div class=\\\"pull-right\\\">\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" (click)=\\\"saveMail()\\\"><i class=\\\"fa fa-floppy-o\\\"></i>\\n                                        Send</button>\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\"><i class=\\\"fa fa-times\\\"></i>\\n                                        Close</button>\\n                                </div>\\n                                <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                                    for=\\\"mail-file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                    <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                </label>\\n                                <input id=\\\"mail-file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                    style=\\\"display: none;\\\" (change)=\\\"onChangeMail($event)\\\" />\\n                            </div>\\n                        </div>\\n                    </li>\\n                </ul>\\n            </div>\\n        </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAsoMail\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header modal-header-info\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n                    <h4 class=\\\"modal-title\\\"><i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i> Link an email</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <form (ngSubmit)=\\\"srchMail()\\\">\\n                            <div class=\\\"input-group\\\">\\n                                <input type=\\\"text\\\" name=\\\"searchm\\\" [(ngModel)]=\\\"searchMail\\\" class=\\\"form-control\\\"\\n                                    placeholder=\\\"Search...\\\">\\n                                <span class=\\\"input-group-btn\\\">\\n                                    <button class=\\\"btn btn-default\\\" type=\\\"submit\\\"><i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\"></i>\\n                                        Search</button>\\n                                </span>\\n                            </div>\\n                        </form>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>{{ mails.length }} Results</label>\\n                        <div class=\\\"table\\\" style=\\\"height: 350px; overflow: scroll;\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                                <thead>\\n                                    <th></th>\\n                                    <th>ID</th>\\n                                    <th>Date</th>\\n                                    <th>Sender</th>\\n                                    <th>Subject</th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let ml of mails\\\">\\n                                        <td>\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"listmails\\\" name=\\\"listmails\\\" value=\\\"{{ml.id}}\\\" label=\\\"\\\"\\n                                                    [(ngModel)]=\\\"listmails\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td>{{ml.id}}</td>\\n                                        <td>{{ml.mabo_date}}</td>\\n                                        <td>{{ml.mabo_from}}</td>\\n                                        <td>{{ml.mabo_subject}}</td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-right\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"listmails.length == 0\\\"\\n                                (click)=\\\"addAsociateMail()\\\">\\n                                <i class=\\\"fa fa-floppy-o\\\"></i> Link\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</section>\";\n\n/***/ }),\n/* 855 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"tasks\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight: bold;\\\">\\n          <i class=\\\"sq sq-products\\\" aria-hidden=\\\"true\\\" style=\\\"color:#007BD2;font-size:20px;\\\"></i> Products\\n          <small style=\\\"font-size:15px;\\\">Settings</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n                <li>\\n                    <a routerLink=\\\"/dashboard\\\">\\n                        <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n                </li>\\n                <li class=\\\"active\\\">Products</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box-header with-border\\\">\\n                    <div class=\\\"col-xs-12 col-sm-5 col-md-6\\\" style=\\\"display: inline-flex;\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"refresh()\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);\\\">\\n                <i ></i>&nbsp;Refresh</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(155,212,107);\\\" (click)=\\\"addProduct()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddProduct\\\">\\n                <i ></i>&nbsp;Add</button>\\n                        <button [disabled]=\\\"this.selproducts.length == 0\\\" (click)=\\\"deleteProduct(null)\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(155,212,107);\\\">\\n                <i ></i>&nbsp;Delete</button>\\n                    </div>\\n\\n                    <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                        <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                <div class=\\\"label-input-mainfilter\\\">\\n                                    <input id=\\\"search_prod\\\" type=\\\"text\\\" class=\\\"input-mainfilter input_search_categories\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                </div>\\n                                <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                    <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                    <i class=\\\"sq sq-view\\\"></i>\\n                                </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"box-body\\\">\\n                    <div class=\\\"table-responsive product-messages\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-productlistd\\\">\\n                            <thead>\\n                                <tr style=\\\"text-align:center;width: 50px;border: 3px solid rgb(227,237,241) !important;\\\">\\n                                    <th (click)=\\\"selectAll()\\\" style=\\\"width: 40px;\\\">\\n                                        <i *ngIf=\\\"selproducts.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                        <i *ngIf=\\\"selproducts.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                    </th>\\n\\n                                    <th (click)=\\\"setOrder('product.prod_name')\\\">Product Name\\n                                        <span [hidden]=\\\"posOrder !== 'product.prod_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                                        </span>\\n                                    </th>\\n                                    <th style=\\\"width: 150px;\\\">Actions</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let prod of products\\\">\\n                                    <td>\\n                                        <div class=\\\"ui-g\\\">\\n                                            <p-checkbox id=\\\"listproduct\\\" name=\\\"lisproduct\\\" value=\\\"{{prod.prod_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selproducts\\\"></p-checkbox>\\n                                        </div>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(prod.prod_id)\\\">{{ escapeHtml(prod.prod_name) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <div class=\\\"btn-group\\\">\\n                                            <button type=\\\"button\\\" (click)=\\\"showModal(prod.prod_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                          <i class=\\\"sq sq-search\\\"></i>\\n                        </button>\\n                                            <button type=\\\"button\\\" (click)=\\\"showEditModal(prod.prod_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\"></i>\\n                        </button>\\n                                            <button (click)=\\\"deleteProduct(prod.prod_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                          <i class=\\\"sq sq-trash\\\"></i>\\n                        </button>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n\\n                    <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                    </div>\\n                    <div *ngIf=\\\"!isLoading && product.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                        No Data\\n                    </div>\\n\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                        <div class=\\\"contacts-controls\\\">\\n                            <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                    {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                    >\\n                                    itemcount ?\\n                                    itemcount : (currentpage * limitpage)\\n                                    }} of {{ itemcount }} results\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                    <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                            <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                </select>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                        <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n\\n                </div>\\n\\n            </div>\\n\\n        </div>\\n\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdProduct\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content \\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" # \\\" + product.prod_name}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Product Name</label>\\n                        <p>{{ product.prod_name }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Group Assigned</label>\\n                        <p>{{ product.grop_name }}</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddProduct\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i style=\\\"color:rgb(227,237,241)\\\" class=\\\"sq sq-products\\\"></i>New Product\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Name</label>\\n                                <input class=\\\"form-control sqlx-input \\\" [(ngModel)]=\\\"product.prod_name\\\" placeholder=\\\"Product Name\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Groups</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groupslbl\\\" [(ngModel)]=\\\"product.grop_id\\\" placeholder=\\\"Select group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"(!product.prod_name || product.prod_name == '' || product.prod_name == 'undefined') || (!product.grop_id || product.grop_id == '' || product.grop_id == 'undefined' )\\\"\\n                            (click)=\\\"saveProduct()\\\">\\n               Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditProduct\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + product.prod_name}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Product Name</label>\\n                                <input class=\\\"form-control sqlx-input \\\" [(ngModel)]=\\\"product.prod_name\\\" placeholder=\\\"Product Name\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group Assigned</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groupslbl\\\" [(ngModel)]=\\\"product.grop_id\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"(!product.prod_name || product.prod_name == '' || product.prod_name == 'undefined')\\\" (click)=\\\"updateProduct()\\\">\\n              Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 856 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"typelist\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Types\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a href=\\\"#\\\">\\n          <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Types</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\">\\n          <div class=\\\"box-header with-border\\\">\\n            <div class=\\\"btn-group\\\">\\n              <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n              <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"addType()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddType\\\">\\n                <i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n              <button [disabled]=\\\"this.seltypes.length == 0\\\" (click)=\\\"deleteType(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-trash-o\\\"></i>&nbsp;Delete</button>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"table-responsive tasks-messages\\\">\\n              <div class=\\\"nav-tabs-custom\\\">\\n                <ul class=\\\"nav nav-tabs\\\">\\n                  <li class=\\\"active\\\">\\n                    <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('')\\\">All</a>\\n                  </li>\\n                </ul>\\n              </div>\\n\\n              <table id=\\\"results\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                <thead>\\n                  <tr>\\n                    <th (click)=\\\"selectAll()\\\" style=\\\"width: 30px;\\\">\\n                      <i *ngIf=\\\"seltypes.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                      <i *ngIf=\\\"seltypes.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    </th>\\n                    <th (click)=\\\"setOrder('type.type_id')\\\" style=\\\"width: 50px;\\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'type.type_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                       </span>\\n                     </th>\\n                    <th (click)=\\\"setOrder('type.type_name')\\\" style=\\\"width: 300px;\\\">Type Name\\n                      <span [hidden]=\\\"posOrder !== 'type.type_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('type.para_name')\\\" style=\\\"width: 100px;\\\">Status \\n                      <span [hidden]=\\\"posOrder !== 'type.para_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width: 150px;\\\">Actions</th>\\n                  </tr>\\n                </thead>\\n                <tbody>\\n                  <tr *ngFor=\\\"let tys of types\\\">\\n                    <td>\\n                       <div class=\\\"ui-g\\\" >\\n                        <p-checkbox id=\\\"types\\\" name=\\\"types\\\" value=\\\"{{tys.type_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"seltypes\\\"></p-checkbox>\\n                       </div>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(tys.type_id)\\\">{{ escapeHtml(tys.type_id) }}</a>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(tys.type_id)\\\">{{ escapeHtml(tys.type_name) }}</a>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(tys.type_id)\\\">{{ escapeHtml(tys.para_name) }}</a>\\n                    </td>\\n                    <td>\\n                      <div class=\\\"btn-group\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"showModal(tys.type_id)\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                          title=\\\"Quick View\\\">\\n                          <i class=\\\"fa fa-eye\\\"></i>\\n                        </button>\\n                        <button type=\\\"button\\\" (click)=\\\"showEditModal(tys)\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                          title=\\\"Edit\\\">\\n                          <i class=\\\"fa fa-pencil-square-o\\\"></i>\\n                        </button>\\n                        <button  (click)=\\\"deleteType(tys.type_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\"\\n                          data-container=\\\"body\\\" title=\\\"Delete\\\">\\n                          <i class=\\\"fa fa-trash-o\\\"></i>\\n                        </button>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div class=\\\"box-footer no-padding\\\">\\n              <div class=\\\"contacts-controls\\\">\\n                \\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdType\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header modal-header-info\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" # \\\" + type.type_id}}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label> Name</label>\\n            <p>{{ type.type_name }}</p>\\n          </div>\\n          <div class=\\\"form-group\\\">\\n            <label>Status</label>\\n            <p>{{ type.status }}</p>\\n          </div> \\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddType\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">New Type</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-6 col-md-6\\\">\\n                  <label>Name</label>\\n                  <input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"type.typeNameNew\\\">\\n                  <span class=\\\"has-error\\\" *ngIf = \\\"typeMenu.indexOf(typeNameNew) >= 0\\\">This name is already in use</span>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                  <div class=\\\"form-group\\\">\\n                    <label>Status</label>\\n                    <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stscat\\\" [(ngModel)]=\\\"type.para_status\\\" placeholder=\\\"Select Status\\\"\\n                    filter=\\\"filter\\\"></p-dropdown>\\n                  </div>\\n              </div> \\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveType()\\\">\\n              <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditType\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header modal-header-info\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" Type #\\\"  + type.type_id}}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Name</label>\\n                <input class=\\\"form-control\\\" [(ngModel)]=\\\"type.type_name\\\" placeholder=\\\"Type Name\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Status</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stscat\\\" [(ngModel)]=\\\"type.para_status\\\" placeholder=\\\"Select Status\\\"\\n                filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" (click)=\\\"updateType()\\\">\\n              <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 857 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"typelist\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Code\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a href=\\\"/dashboard\\\">\\n          <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Code</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\" style=\\\"background-color:#fff;\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <ul class=\\\"nav nav-tabs wiki-tabs\\\" id=\\\"myTab\\\" role=\\\"tablist\\\">\\n          <li class=\\\"nav-item active\\\">\\n            <a class=\\\"nav-link active\\\" id=\\\"code-tab\\\" data-toggle=\\\"tab\\\" href=\\\"#code\\\" role=\\\"tab\\\" aria-controls=\\\"code\\\" aria-selected=\\\"true\\\">Code</a>\\n          </li>\\n          <li class=\\\"nav-item\\\">\\n            <a class=\\\"nav-link\\\" id=\\\"issues-tab\\\" data-toggle=\\\"tab\\\" href=\\\"#issues\\\" role=\\\"tab\\\" aria-controls=\\\"issues\\\" aria-selected=\\\"false\\\">Issues</a>\\n          </li>\\n        </ul>\\n        <div class=\\\"tab-content\\\" id=\\\"myTabContent\\\">\\n          <div class=\\\"tab-pane fade active in\\\" id=\\\"code\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"code-tab\\\">\\n            <section>\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-xs-12 col-md-12\\\">\\n                  <div style=\\\"margin-top:12px;font-size: 16px;\\\">\\n                    <p>One framework. Mobile & desktop. <a>https://angular.io</a></p>\\n                  </div>\\n                  <div>\\n                    <ul class=\\\"code-list\\\">\\n                      <li>angular</li>\\n                      <li>web</li>\\n                      <li>javascript</li>\\n                      <li>pwa</li>\\n                      <li>web-framework</li>\\n                      <li>php</li>\\n                      <li>html</li>\\n                    </ul>\\n                  </div>\\n                  <div class=\\\"panel panel-default\\\">\\n                    <div class=\\\"panel-body\\\">\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-time\\\"></span>2,235 commits</div>\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-grain\\\"></span> 32 branches</div>\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-sort\\\"></span> 43 releases</div>\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-user\\\"></span> 53 contributors</div>\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-education\\\"> </span> MIT</div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                  <div class=\\\"pull-left\\\">\\n                    <div class=\\\"btn-group\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-xs dropdown-toggle\\\" data-toggle=\\\"dropdown\\\"><a style=\\\"text-decoration: none; overflow: hidden; color: gray\\\">Branch:</a> <label>master</label>  <span class=\\\"caret\\\"></span></button>\\n                      <ul class=\\\"dropdown-menu\\\" role=\\\"menu\\\">\\n                        <label style=\\\"font-family: Arial, Helvetica, sans-serif; font-size: 13px\\\">Switch branches/tags</label>\\n                        <li class=\\\"divider\\\"></li>\\n                        <form class=\\\"navbar-form navbar-left\\\">\\n                          <div class=\\\"form-group\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control\\\" placeholder=\\\"Search\\\">\\n                          </div>\\n                        </form>\\n                        <li class=\\\"divider\\\"></li>\\n                        <li><a href=\\\"#\\\">Acción #1</a></li>\\n                        <li><a href=\\\"#\\\">Acción #2</a></li>\\n                        <li><a href=\\\"#\\\">Acción #3</a></li>\\n                        <li><a href=\\\"#\\\">Acción #4</a></li>\\n                      </ul>\\n                    </div>\\n                  </div>\\n\\n                  <div class=\\\"pull-right\\\" style=\\\"text-align: right\\\">\\n                    <div class=\\\"btn-group\\\" style=\\\"margin: 5px 0;\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" Style=\\\"margin-right:5px;\\\">Find file</button>\\n                      <button type=\\\"button\\\" class=\\\"btn btn-success dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" Style=\\\"margin-right:5px;\\\">Clone or Download<span class=\\\"caret\\\"></span></button>\\n                      <div class=\\\"dropdown-menu\\\" role=\\\"menu\\\" style=\\\"width: 351px;left: -120px;padding:0;\\\">\\n                        <div style=\\\"padding: 8px 16px 16px;\\\">\\n                          <h4>Clone with HTTPS<i class=\\\"sq sq-info\\\"></i></h4>\\n                          <p>Use Git or checkout with SVN using the web URL.</p>\\n                          <input type=\\\"text\\\" class=\\\"form-control input-monospace input-sm js-url-field\\\" value=\\\"https://github.com/git-lfs/git-lfs.git\\\"\\n                            aria-label=\\\"Clone this repository at https://github.com/git-lfs/git-lfs.git\\\" readonly=\\\"\\\">\\n                        </div>\\n                        <div>\\n                          <a href=\\\"https://desktop.github.com\\\" class=\\\"btn wiki-outline wiki-btn tooltipped tooltipped-s tooltipped-multiline\\\" data-open-app=\\\"mac\\\"\\n                            aria-label=\\\"Clone git-lfs/git-lfs to your computer and use it in GitHub Desktop.\\\" style=\\\"border-right: 2px solid #e1e4e8;font-weight: bold;\\\">Open in Desktop</a>\\n                          <a href=\\\"https://desktop.github.com\\\" class=\\\"btn wiki-outline wiki-btn tooltipped tooltipped-s tooltipped-multiline\\\" data-open-app=\\\"mac\\\"\\n                            aria-label=\\\"Clone git-lfs/git-lfs to your computer and use it in GitHub Desktop.\\\" style=\\\"font-weight: bold;\\\">Download ZIP</a>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n\\n                </div>\\n              </div>\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                  <div class=\\\"panel panel-default\\\">\\n                    <div class=\\\"col-xs-12 col-md-12 code-panel\\\">\\n                      <div class=\\\"col-xs-12 col-md-6\\\">\\n                        <span class=\\\"glyphicon glyphicon-user\\\" style=\\\"margin-right: 4px;\\\"></span>\\n                        <h5 style=\\\"display: contents;\\\">alexeagle and vicb ci: require green integration tests to publish snapshot (#23517)</h5>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-md-6\\\">\\n                        <span style=\\\"float:right;\\\">Latest commit 1c9200e  19 hours ago</span>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"wiki-body\\\">\\n                      <table class=\\\"table table-hover table-sm\\\" style=\\\"margin-bottom: 0;\\\">\\n                        <tbody>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> comands</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go: add documentation to trimCurrentPrefix</td>\\n                            <td><label style=\\\"color: grey\\\">21 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> config</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> debian</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> comands</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go: add documentation to trimCurrentPrefix</td>\\n                            <td><label style=\\\"color: grey\\\">21 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> config</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> debian</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> comands</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go: add documentation to trimCurrentPrefix</td>\\n                            <td><label style=\\\"color: grey\\\">21 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> config</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> debian</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                        </tbody>\\n                      </table>\\n                    </div>\\n                  </div>\\n\\n                  <div class=\\\"panel panel-default\\\">\\n                    <div class=\\\"panel-heading\\\">\\n                      <span class=\\\"glyphicon glyphicon-book\\\"></span> README.md\\n                    </div>\\n                    <div class=\\\"panel-body\\\">\\n                      <div class=\\\"\\\">\\n                        <div class=\\\"col-md-10\\\">\\n                          <h2>Git Large File Storage</h2>\\n                          <hr />\\n                        </div>\\n                      </div>\\n                      <div class=\\\"\\\">\\n                        <div class=\\\"col-xs-12 col-md-4\\\">\\n                          <table class=\\\"table table-bordered\\\">\\n                            <thead>\\n                              <tr>\\n                                <th scope=\\\"col\\\">Linux</th>\\n                                <th scope=\\\"col\\\">macOS</th>\\n                                <th scope=\\\"col\\\">Windows</th>\\n                              </tr>\\n                            </thead>\\n                            <tbody>\\n                              <tr>\\n                                <td><a href=\\\"#\\\"><img src=\\\"img/icon.svg\\\" class=\\\"img-responsive\\\" ></a></td>\\n                                <td><a href=\\\"#\\\"><img src=\\\"img/icon.svg\\\" class=\\\"img-responsive\\\"></a></td>\\n                                <td><a href=\\\"#\\\"><img src=\\\"img/icon.svg\\\" class=\\\"img-responsive\\\"></a></td>\\n                              </tr>\\n                            </tbody>\\n                          </table>\\n                        </div>\\n\\n                      </div>\\n                      <div class=\\\"\\\">\\n                        <div class=\\\"col-xs-12 col-md-8\\\">\\n                          <section>\\n                            <P> Git LFS is a command line extension and specification for managing large files with Git.</P>\\n                            <p>The client is written in Go, with pre-compiled binaries available for Mac, Windows, Linux, and\\n                              FreeBSD. Check out the website for an overview of features. </p>\\n                          </section>\\n                        </div>\\n                      </div>\\n\\n                      <div class=\\\"\\\">\\n                        <div class=\\\"col-xs-12 col-md-10 \\\">\\n                          <h3>Getting Started</h3>\\n                          <hr />\\n                          <h4>Installation</h4>\\n                          <section>\\n                            <P> Descargar e instalar version git\\n                            </P>\\n                            <ul>\\n                              <li><strong>Linux users.</strong> Debian <code style=\\\"color: gray\\\">$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \\\\libz-dev libssl-dev</code>                                </li>\\n                              <li><strong>macOS users.</strong> Instalar ssh-copy<code style=\\\"color: gray\\\">ruby -e \\\"$(curl -fsSL <a href=\\\"#\\\" style=\\\"text-decoration: none; color: black; overflow-x:hidden;word-wrap:break-word;\\\">https://raw.githubusercontent.com/Homebrew/install/master/install</a>)\\\"</code></li>\\n                              <li><strong>Windows users.</strong><code style=\\\"color: gray\\\">choco install git</code></li>\\n                            </ul>\\n                            <p>In addition, binary packages are available for Linux, macOS, Windows, and FreeBSD. This repository\\n                              can also be built-from-source using the latest version of Go.</p>\\n                            <h4>Usage</h4>\\n                            Lorem ipsum, dolor sit amet consectetur adipisicing elit. Harum sint ipsa deserunt quas culpa.\\n                            <pre style=\\\"background-color: #f6f8fa;  \\\">Lorem ipsum dolor sit amet consectetur adipisicing elit.</pre> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Harum sint ipsa deserunt quas culpa.\\n                            <pre style=\\\"background-color: #f6f8fa;  \\\">Lorem ipsum dolor sit amet consectetur adipisicing elit.</pre> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Harum sint ipsa deserunt quas culpa.\\n                            <pre style=\\\"background-color: #f6f8fa;  \\\">Lorem ipsum dolor sit amet consectetur adipisicing elit.</pre>\\n                            <br>\\n                            <h3>Contributing</h3>\\n                            <hr />\\n                            <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Blanditiis, quam cum. Vitae hic cum\\n                              labore consectetur maiores aut in ab, praesentium dolorum! Enim inventore explicabo atque ipsam,\\n                              iste nesciunt itaque!</p>\\n                            <br>\\n                            <h3>Core Team</h3>\\n                            <hr />\\n                            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Adipisci, placeat. Quisquam facere maxime,\\n                              quae corrupti voluptatibus.:</p>\\n                            <div class=\\\"col-xs-12 col-md-4 \\\">\\n                              <table class=\\\"table table-hover table-sm table-bordered\\\">\\n\\n                                <tbody>\\n                                  <tr>\\n                                    <td><a href=\\\"#\\\" style=\\\"text-decoration: none\\\">@lorem</a></td>\\n                                    <td><a href=\\\"#\\\" style=\\\"text-decoration: none\\\">@loremsd</a></td>\\n                                  </tr>\\n                                  <tr>\\n                                    <td><img class=\\\"img-responsive\\\" src=\\\"img/descarga.png\\\"></td>\\n                                    <td><img class=\\\"img-responsive\\\" src=\\\"img/descarga.png\\\"></td>\\n                                  </tr>\\n                                </tbody>\\n                              </table>\\n                            </div>\\n                          </section>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </section>\\n          </div>\\n          <div class=\\\"tab-pane fade in\\\" id=\\\"issues\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"issues-tab\\\">\\n            <section>\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-xs-12 col-md-12\\\">\\n                  <div style=\\\"margin-top:12px;font-size: 16px;\\\">\\n                    <div class=\\\"box-header with-border\\\">\\n                      <div class=\\\" search_projects\\\" style=\\\"display: inline-flex;\\\">\\n                        <input type=\\\"text\\\" class=\\\"form-control input-md\\\" placeholder=\\\"Search all issues\\\" [(ngModel)]=\\\"search\\\" style=\\\"text-indent: 15px;\\\">\\n                        <span class=\\\"glyphicon glyphicon-search form-control-feedback\\\" style=\\\"left: 8px;top: 11px;\\\"></span>\\n                      </div>\\n                    </div>\\n                    <div>\\n                      <div class=\\\"\\\" style=\\\"display: inline-flex;\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm\\\">Labels</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"addproject()\\\">Milestones</button>\\n                      </div>\\n                      <div class=\\\"btn-group\\\" style=\\\"margin: 5px 0;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-success dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" Style=\\\"margin-right:5px;\\\">New Issue</button>\\n                      </div>\\n                      <div class=\\\"filter-panel\\\">\\n                        <div class=\\\"filter-head\\\">\\n                          Filter by author\\n                        </div>\\n                        <div class=\\\"filter-head\\\">\\n                          <input type=\\\"text\\\" class=\\\"form-control input-sm\\\" placeholder=\\\"Filter users\\\" [(ngModel)]=\\\"searchUsers\\\">\\n                        </div>\\n                        <div class=\\\"filter-profiles\\\">\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Nestor</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Camilo</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Yajaira</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Doyler</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Luddy</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Admin</a>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                  <div class=\\\"panel panel-default\\\">\\n                    <div class=\\\"col-xs-12 col-md-12 code-panel\\\">\\n                      <div class=\\\"col-xs-12 col-md-12\\\">\\n                        <span class=\\\"sq sq-info\\\" style=\\\"margin-right: 4px;\\\"></span>\\n                        <h5 style=\\\"display: contents;\\\">1,968 Open</h5>\\n                        <span class=\\\"sq sq-move-to-testing\\\" style=\\\"margin: 0 4px;\\\"></span>\\n                        <h5 style=\\\"display: contents;\\\">12,540 Closed</h5>\\n                      \\n\\n                        <div style=\\\"float:right;\\\">\\n                          <div class=\\\"btn-group\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-xs dropdown-toggle\\\" (click)=\\\"showFilter()\\\" data-toggle=\\\"dropdown\\\"><label>Author</label><span class=\\\"caret\\\"></span></button>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"wiki-body\\\">\\n                      <table class=\\\"table table-hover table-sm\\\" style=\\\"margin-bottom: 0;\\\">\\n                        <tbody>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                        </tbody>\\n                      </table>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"row\\\">\\n                <div style=\\\"margin: 0 auto;width: 300px;\\\">\\n                  <nav aria-label=\\\"Page navigation example\\\">\\n                    <ul class=\\\"pagination justify-content-center\\\">\\n                      <li class=\\\"page-item disabled\\\">\\n                        <a class=\\\"page-link\\\" href=\\\"#\\\" tabindex=\\\"-1\\\">Previous</a>\\n                      </li>\\n                      <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">1</a></li>\\n                      <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">2</a></li>\\n                      <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">3</a></li>\\n                      <li class=\\\"page-item\\\">\\n                        <a class=\\\"page-link\\\" href=\\\"#\\\">Next</a>\\n                      </li>\\n                    </ul>\\n                  </nav>\\n                </div>\\n              </div>\\n            </section>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdFilter\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header modal-header-info\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i></h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label>Product Name</label>\\n            <p></p>\\n          </div>\\n          <div class=\\\"form-group\\\">\\n            <label>Group Assigned</label>\\n            <p></p>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 858 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"typelist\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      wiki\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a href=\\\"/dashboard\\\">\\n          <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Code</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\" style=\\\"background-color: #fff; height: 95%;\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-md-3\\\">\\n        <nav class=\\\"wiki border\\\" data-pjax=\\\"\\\">\\n          <a class=\\\"wiki-item selected\\\" href=\\\"javascript:void(0)\\\">Repositories<span class=\\\"Counter ml-1 mt-1\\\">366K</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Code<span class=\\\"Counter ml-1 mt-1\\\">67M</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Commits<span class=\\\"Counter ml-1 mt-1\\\">1M</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Issues<span class=\\\"Counter ml-1 mt-1\\\">382K</span></a>\\n\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Topics<span class=\\\"Counter ml-1 mt-1\\\">877</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Wikis<span class=\\\"Counter ml-1 mt-1\\\">34K</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Users<span class=\\\"Counter ml-1 mt-1\\\">6K</span></a>\\n        </nav>\\n      </div>\\n\\n      <div class=\\\"col-xs-12 col-md-9\\\">\\n        <div style=\\\"width: 101%;\\\">\\n          <h3 style=\\\"display: contents;\\\">366,843 repository results</h3>\\n          <div class=\\\"btn-group\\\" style=\\\"float: right;\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default btn-xs dropdown-toggle\\\" data-toggle=\\\"dropdown\\\"><a style=\\\"text-decoration: none; overflow: hidden; color: gray\\\" >Sort:</a> <label>master</label>  <span class=\\\"caret\\\"></span></button>\\n\\n            <ul class=\\\"dropdown-menu\\\" role=\\\"menu\\\" style=\\\"left: -100px;\\\">\\n              <label style=\\\"font-family: Arial, Helvetica, sans-serif; font-size: 13px;padding-left:4px;\\\">Sort Options</label>\\n              <li class=\\\"divider\\\"></li>\\n              <li><a href=\\\"javascript:void(0)\\\">Acción #1</a></li>\\n              <li><a href=\\\"javascript:void(0)\\\">Acción #2</a></li>\\n              <li><a href=\\\"javascript:void(0)\\\">Acción #3</a></li>\\n              <li><a href=\\\"javascript:void(0)\\\">Acción #4</a></li>\\n            </ul>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" routerLink=\\\"/code\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" routerLink=\\\"/code\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n          <div style=\\\"margin: 0 auto;width: 300px;\\\">\\n            <nav aria-label=\\\"Page navigation example\\\">\\n              <ul class=\\\"pagination justify-content-center\\\">\\n                <li class=\\\"page-item disabled\\\">\\n                  <a class=\\\"page-link\\\" href=\\\"#\\\" tabindex=\\\"-1\\\">Previous</a>\\n                </li>\\n                <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">1</a></li>\\n                <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">2</a></li>\\n                <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">3</a></li>\\n                <li class=\\\"page-item\\\">\\n                  <a class=\\\"page-link\\\" href=\\\"#\\\">Next</a>\\n                </li>\\n              </ul>\\n            </nav>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <p-confirmDialog></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 859 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"requests\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-requests\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> REQUESTS\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Request</li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\" style=\\\"min-width: 410px;\\\">\\n      <div *ngFor=\\\"let ty of types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.type_color, 'border-radius': '15px', 'color': 'white', 'padding-right': '10px', 'cursor': 'pointer', 'border': 'solid 6px rgb(247,247,247)'} : {}\\\"\\n        class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\" (click)=\\\"setStateList([ty.type_id])\\\">\\n        <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 content-buttons pull-left\\\" style=\\\"margin-top: 18px;padding: 0px;\\\">\\n          <span style=\\\"font-size: 20px; font-weight: bold; text-align: center;\\\">{{ty.count}}</span>\\n          <span style=\\\"text-transform: uppercase; font-size: 20px; font-weight: bold; text-align: center;\\\"> <i class=\\\"{{ty.type_label}}\\\"\\n              style=\\\"font-size: 24px; text-align: center; font-weight: bold;\\\"></i>{{ty.type_name}} </span>\\n        </div>\\n        <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 content-buttons pull-right\\\" style=\\\"padding:0px; margin-bottom: 4px; margin-top: -8px;\\\">\\n          <div class=\\\"row button-row\\\">\\n            <div class=\\\"col-xs-6 button-types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.backgorund_color, 'border-radius': '15px', 'color': 'white' } : {}\\\">\\n              <div style=\\\"padding-top: 9px;padding-left: -3px; margin-left: -2px;\\\">\\n                <a href=\\\"javascript:void(0)\\\" (click)=\\\"showCategories(ty.type_id, ty.type_name, ty.type_color,ty.type_label)\\\"\\n                  style=\\\"color:white;text-decoration:none\\\">\\n                  <i class=\\\"sq sq-info more-info\\\" style=\\\"font-size: 30px;\\\"></i>\\n                </a>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-6 button-types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.backgorund_color, 'border-radius': '15px', 'color': 'white' } : {}\\\">\\n              <div style=\\\" padding-top: 10px; margin-left: -16px; margin-right: 3px;padding-left: 12px;\\\">\\n                <a href=\\\"javascript:void(0)\\\" id=\\\"addError\\\" (click)=\\\"addEvent(ty.type_id, ty.type_name, ty.type_color,ty.type_label)\\\"\\n                  style=\\\"color:white;text-decoration:none\\\">\\n                  <i class=\\\"sq sq-add-1 more-info\\\" style=\\\"font-size: 30px;\\\"></i>\\n                </a>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\" style=\\\"margin-top: 5px; margin-bottom: 5px; margin-right: 5px;\\\">\\n        <div class=\\\"nav-tabs-customr col-xs-12 col-sm-5 col-md-5 col-lg-5 req_btn\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n          <ul *ngIf=\\\"types && types.length > 0\\\" class=\\\"nav nav-tabs nav-tabs-sqlxs\\\" style=\\\"border-bottom:none;\\\">\\n            <li [ngClass]=\\\"{'active':typeSelected === '1,3,4'}\\\" style=\\\"border-top:none; padding: 8px;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"All\\\">\\n              <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['1','3','4'])\\\" style=\\\"padding: 0px 10px 0px 7px;border-color:transparent!important;\\\">All</a>\\n            </li>\\n            <li [ngClass]=\\\"{'active':typeSelected === '1'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[0].type_name}}>\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['1'])\\\" style=\\\"border-color:transparent!important;\\\">\\n                <i class=\\\"sq sq-errors\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; text-align: center;margin-left: 3px; margin-right: 1px;\\\"></i>\\n              </a>\\n            </li>\\n            <li [ngClass]=\\\"{'active':typeSelected === '3'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[1].type_name}}>\\n                <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['3'])\\\" style=\\\"border-color:transparent!important;\\\">\\n                  <i class=\\\"sq sq-developing\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; text-align: center; margin-left: 3px; margin-right: 1px;\\\"></i>\\n                </a>\\n            </li>\\n            <li [ngClass]=\\\"{'active':typeSelected === '4'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[2].type_name}}>\\n                <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['4'])\\\" style=\\\"border-color:transparent!important;\\\">\\n                    <i class=\\\"sq sq-implementations\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n                </a>\\n            </li>\\n            <li style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Requests\\\">\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"filterRequest(1)\\\" style=\\\"border-color:transparent!important;\\\">\\n                <i class=\\\"sq sq-requests\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n              </a>\\n            </li>\\n            <li style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks\\\">\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"filterRequest(2)\\\" style=\\\"border-color:transparent!important;\\\">\\n                <i class=\\\"sq sq-statustasks\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n              </a>\\n            </li>\\n            <li style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Rejected\\\">\\n              <label class=\\\"switch-request\\\">\\n                <input type=\\\"checkbox\\\" [(ngModel)]=\\\"rejected\\\" (change)=\\\"filterRejected()\\\" binary=\\\"true\\\" >\\n                <span class=\\\"slider-request round\\\"></span>\\n            </label>\\n            </li>\\n          </ul>\\n        </div>\\n      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n        <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n          <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n            <div class=\\\"label-input-mainfilter\\\">\\n              <input id=\\\"search_req\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\"\\n                placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n            </div>\\n            <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n              <button type=\\\"button\\\" (click)=\\\"searchFilter()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 1px; margin-right: 8px; margin-top: 2px; color: rgb(68, 180, 248);\\\">\\n                <i class=\\\"sq sq-view\\\"></i>\\n              </button>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-xs-1 col-sm-1 col-md-1 col-lg-1\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" (click)=\\\"exportExcel()\\\">\\n              <i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i>\\n          </button>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary2\\\">\\n          <div class=\\\"box-body\\\" style=\\\"max-height:400px;padding-top:20px;\\\">\\n            <div class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;\\\">\\n              <table id=\\\"resultsh\\\" class=\\\"table table-hover\\\" style=\\\"margin-bottom:0px;\\\">\\n                <thead>\\n                  <tr style=\\\"color:#707070;\\\">\\n                    <th style=\\\"width: 1%; text-align:center!important;\\\">\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_id')\\\" style=\\\"width: 8%;text-align:center!important;\\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width: 10%; text-align:center!important;\\\">Progress\\n                    </th>\\n                    <th (click)=\\\"setOrder('tkstatus')\\\" style=\\\"width:10%;text-align:center!important;\\\">Status\\n                      <span [hidden]=\\\"posOrder !== 'tkstatus'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_subject')\\\" style=\\\"width:15%;text-align:center!important;\\\">Subject\\n                      <span [hidden]=\\\"posOrder !== 'task_subject'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_date')\\\" style=\\\"width:12%; text-align:center!important;\\\">Date\\n                      <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('user_creator')\\\" style=\\\"width:10%;text-align:center!important;\\\"> Creator\\n                      <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('asigned')\\\" style=\\\"width:10%;text-align:center!important;\\\">Assigned\\n                      <span [hidden]=\\\"posOrder !== 'asigned'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('type_name')\\\" style=\\\"width:14%; text-align:center!important;\\\"> Type\\n                      <span [hidden]=\\\"posOrder !== 'type_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width:10%;text-align:center!important;\\\">Actions\\n                    </th>\\n                  </tr>\\n                </thead>\\n              </table>\\n            </div>\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n              <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n              <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div *ngIf=\\\"!isLoading && requests.length == 0\\\" class=\\\"table-responsive2 col-lg-12 col-md-12 col-xs-12\\\"\\n              style=\\\"text-align: center;\\\">\\n              No Data\\n            </div>\\n            <div *ngIf=\\\"requests.length > 0\\\" class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-bottom: 2px solid #ddd;\\n            margin-bottom: 3px;padding: 0px;\\\">\\n              <table id=\\\"resultsb\\\" class=\\\"table table-hover\\\">\\n                <tbody style=\\\"height: 100px; overflow:scroll; background: white\\\">\\n                  <tr *ngFor=\\\"let eve of requests\\\" style=\\\"color:#707070;\\\">\\n                    <td class=\\\"td_icontype_slqx\\\" style=\\\"width: 1%;\\\">\\n                      <div *ngIf=\\\"eve.task_delivery == null\\\" class=\\\"icon_type_squalinx\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Request\\\">\\n                        <i class=\\\"sq sq-requests\\\" style=\\\"color:#707070;\\\"></i>\\n                      </div>\\n                      <div *ngIf=\\\"eve.task_delivery != null\\\" class=\\\"icon_type_squalinx\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Task\\\">\\n                        <i class=\\\"sq sq-statustasks\\\" style=\\\"color:#707070;\\\"></i>\\n                      </div>\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: center;width: 8%;\\\">\\n                      {{ escapeHtml(eve.task_id) }}\\n                    </td>\\n                    <td style=\\\"text-align:center;border:none;width: 10%;\\\">\\n                      <span class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{eve.percent}}%</span>\\n                      <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%; margin-left: 12px; height: 10px; background-color:rgb(220, 227, 230); \\\">\\n                        <div class=\\\"success-tasks-request\\\" [ngStyle]=\\\"{ 'width': eve.percent + '%' }\\\">\\n                        </div>\\n                      </div>\\n                    </td>\\n                    <td [ngStyle]=\\\"eve.tkstatus == 'Rejected' ? { 'color': '#F01458', 'border-top':'1px solid white', 'width':'10%' } : eve.tkstatus == 'Complete' ? { 'color': '#92CC66', 'border-top':'1px solid white', 'width':'10%' }  : {'color': '#707070;', 'border-top':'1px solid white', 'width':'10%'}\\\">\\n                      {{ escapeHtml(eve.tkstatus) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;width:15%;\\\">\\n                      {{ escapeHtml(eve.task_subject) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: center;width:12%;\\\">\\n                      {{ escapeHtml(eve.task_date) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: left;width:10%;\\\">\\n                      {{ escapeHtml(eve.user_creator) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: center;width:10%;\\\">\\n                      {{ escapeHtml(eve.asigned) }}\\n                    </td>\\n                    <td style=\\\"border:none;text-align: center;width:14%;\\\">\\n                      <div [ngStyle]=\\\"eve.type_id ? {'background': eve.type_color} : {} \\\" class=\\\"colortype\\\"></div>\\n                    </td>\\n                    <td style=\\\"border:none;width:10%;\\\">\\n                      <div class=\\\"btn-group\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"showModaltk(eve.task_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\">\\n                          <i class=\\\"sq sq-search\\\" style=\\\"font-weight: bold;\\\"></i>\\n                        </button>\\n                        <taskview [myTaskId]=\\\"eve.task_id\\\"></taskview>\\n                        <button *ngIf=\\\"eve.task_delivery == null && eve.asigned_to == 'forme' && eve.para_status != 50\\\"\\n                          type=\\\"button\\\" (click)=\\\"showRequest(eve.asigned_to, eve.canclose, eve.tktype, eve.task_id,eve.type_id, eve.type_name)\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\" style=\\\"font-weight: bold;\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_delivery == null && eve.asigned_to == 'byme' && eve.para_status != 50\\\"\\n                          type=\\\"button\\\" (click)=\\\"showRequest(eve.asigned_to, eve.canclose, eve.tktype, eve.task_id,eve.type_id, eve.type_name)\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.percent == 100 && eve.canclose == '1'\\\" (click)=\\\"closeTask(eve.task_id)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                          <i class=\\\"sq sq-close-bg\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1'\\\" (click)=\\\"deleteTask(eve.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                          <i class=\\\"sq sq-eliminar\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canrj === '1' && eve.para_status != 50\\\" (click)=\\\"showReject(eve)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reject\\\">\\n                          <i class=\\\"sq sq-backlog\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1' && eve.para_status != 50\\\" (click)=\\\"showImprov(eve)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Improve\\\">\\n                          <i class=\\\"sq sq-improving\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1' && eve.para_status == 50\\\" (click)=\\\"reopenTask(eve.task_id)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Reopen\\\">\\n                          <i class=\\\"fa fa-undo\\\"></i>\\n                        </button>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div *ngIf=\\\"requests.length > 0\\\" class=\\\"box-footer no-padding\\\">\\n              <div class=\\\"contacts-controls\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"color:#707070;\\\">\\n                  {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage) > itemcount ?\\n                  itemcount : (currentpage * limitpage)\\n                  }} of {{ itemcount }} results\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\" style=\\\"color:#707070;\\\"></i>\\n                    </button>\\n                    <select class=\\\"btn btn-default btn-sm\\\" style=\\\"height: 30px; background-color: rgb(255,255,255);\\\"\\n                      [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                      <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                    </select>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\" style=\\\"color:#707070;\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n                <div class=\\\"pull-left\\\" style=\\\"color:#707070;\\\">\\n                  <div class=\\\"btn-group\\\">\\n                    <select class=\\\"btn btn-default btn-sm\\\" style=\\\"height: 30px; background-color: rgb(255,255,255);\\\"\\n                      [(ngModel)]=\\\"limitpage\\\" (change)=\\\"reloadResults()\\\">\\n                      <option *ngFor=\\\"let r of results\\\" [ngValue]=\\\"r\\\">{{ r }}</option>\\n                    </select>\\n                  </div>\\n                  per page\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <!--modal mdEditTask-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Subject</label>\\n                <input id=\\\"inputr_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>creator</label>\\n                <input id=\\\"inputr_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.creator\\\" placeholder=\\\"\\\" disabled>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"ddwnr_1\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Assigned to</label>\\n                <p-dropdown id=\\\"ddwnr_2\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-6 col-xs-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Associate to Project</label>\\n                <p-dropdown id=\\\"ddwnr_3\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar id=\\\"calendarb_2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                  [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Associate to Sprint</label>\\n                <p-dropdown id=\\\"ddwnr_4\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group spinner-squadlinx\\\">\\n                <label>Points</label>\\n                <input type=\\\"number\\\" class=\\\"input_number_squadlinx\\\" id=\\\"inputr_2\\\" [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\"\\n                  min=\\\"0\\\">\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_description_task\\\" [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                <a id=\\\"editTask-request\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_associate_form_task\\\" *ngIf=\\\"task.fields && task.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                <a id=\\\"editTask-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate Form</a>\\n              </li>\\n              <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\" id=\\\"li_attachments_editTask\\\">\\n                <a id=\\\"editTask-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\" (click)=\\\"setPage(3)\\\">Attachments\\n                  <span>({{task.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"p_editor_description_requests\\\" [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_editRequest\\\">\\n                  <table class=\\\"table_associateFom_editRequest\\\">\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let fr of task.fields\\\" style=\\\"height: 60px;\\\">\\n                        <td class=\\\"td_formfield_editRequest\\\">\\n                          <div class=\\\"div_formfield_editRequest\\\">\\n                            {{fr.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_editRequest \\\">\\n                          <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editRequest\\\">\\n                            {{fr.form_data}}\\n                          </div>\\n                          <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editRequest\\\">\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of task.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"sq sq-attach-files\\\"></i>{{ (att.tsat_alias.length>6) ? (att.tsat_alias |\\n                          slice:0:20)+'..':(att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"sq sq-attach-files\\\"></i>{{ (att.name.length > 6)? (att.name |\\n                          slice:0:20)+'..':(att.name)\\n                          }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask_editTask(task, att)\\\">\\n                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment_editTask(att)\\\">\\n                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #ccc; display: inline-block; font-size: 12px;padding: 5px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n              for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn_newProjectFromRequest\\\" (click)=\\\"createNewProject(task)\\\">\\n              <i class=\\\"sq sq-create-new-project add_criteria\\\"></i>New Project\\n            </button>\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\"\\n              [disabled]=\\\"(!task.task_subject || task.task_subject == '' || task.task_subject == 'undefined') || (!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0) || (!task.task_delivery || task.task_delivery == '' || task.task_delivery == 'undefined')\\\"\\n              (click)=\\\"saveTask()\\\">Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!--.modal mdEditTask-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditRequest\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"border-radius: 15px;\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-content modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content new-design2\\\" style=\\\"border-radius: 15px; width: 675px;\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"\\n            (click)=\\\"activeTabs()\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i> {{ myfilterfield.typetittle }} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"form-group col-xs-12 col-md-12 col-lg-12 input-squadlinx\\\">\\n              <label>Subject</label>\\n              <input id=\\\"inputt_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Product</label>\\n              <p-dropdown id=\\\"ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Project</label>\\n              <p-dropdown id=\\\"ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Category</label>\\n              <p-dropdown id=\\\"ddwnr_7\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"categorieslbl | filterfield : { pos : 'prod_id', text : [task.prod_id] } | filterfield : { pos : 'para_type', text : myfilterfield.text }\\\" [(ngModel)]=\\\"task.cate_id\\\" placeholder=\\\"Select a Category\\\"\\n                filter=\\\"filter\\\" (onChange)=\\\"createForm(task.cate_id)\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Group</label>\\n              <p-dropdown id=\\\"ddwnr_5\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"groups\\\" [(ngModel)]=\\\"task.grop_id\\\" placeholder=\\\"Select a Group\\\"></p-dropdown>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_associate_form_request\\\" *ngIf=\\\"task.fields && task.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 1}\\\">\\n                <a id=\\\"editRequest-request1\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form_request\\\" (click)=\\\"setPageRequest(1)\\\">Associate\\n                  Form</a>\\n              </li>\\n              <li id=\\\"li_description_request\\\" [ngClass]=\\\"{'active':tagMenuRequest == 2}\\\">\\n                <a id=\\\"editRequest-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#description_request\\\" (click)=\\\"setPageRequest(2)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_attachments_request\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 3}\\\">\\n                <a id=\\\"editRequest-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_request\\\" (click)=\\\"setPageRequest(3)\\\">Attachments\\n                  <span>({{task.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 1 && task.fields && task.fields.length > 0 \\\" id=\\\"associate_form_request\\\"\\n              class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_createRequest\\\">\\n                  <table class=\\\"table_associateFom_createRequest\\\">\\n                    <thead>\\n                      <th style=\\\"width:30%; text-align: center;\\\">Field name</th>\\n                      <th style=\\\"width:60%; text-align: center;\\\">Data</th>\\n                      <th style=\\\"width:10%; text-align: center;\\\"></th>\\n                    </thead>\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let tkf of task.fields\\\" style=\\\"height: 60px;\\\">\\n                        <td class=\\\"td_formfield_createRequest\\\" style=\\\"width: 30%;\\\">\\n                          <div class=\\\"div_formfield_createRequest\\\">\\n                            {{tkf.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_createRequest\\\" style=\\\"width: 65%;\\\">\\n                          <div class=\\\"div_formdata_createRequest\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control div_input_formdata_createRequest\\\" [(ngModel)]=\\\"tkf.form_data\\\"\\n                              (value)=\\\"tkf.form_data\\\">\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formManda_createRequest\\\">\\n                          <div *ngIf=\\\"tkf.form_mandatory \\\" class=\\\"div_formManda_createRequest\\\">\\n                            <label>*</label>\\n                          </div>\\n                          <div *ngIf=\\\"!tkf.form_mandatory\\\" class=\\\"div_formManda_createRequest\\\">\\n\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 2\\\" id=\\\"description_request\\\" class=\\\"col-xs-12 col-md-12 col-lg-12 \\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editorr_2\\\" [(ngModel)]=\\\"task.task_description_r\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 3\\\" id=\\\"attachments_request\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of task.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" target=\\\"_blank\\\" (click)=\\\"downloadFile(att, $event)\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" target=\\\"_blank\\\" (click)=\\\"downloadFile(att, $event)\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"sq sq-attach-files\\\"></i>{{ (att.tsat_alias.length>6) ?\\n                          (att.tsat_alias |\\n                          slice:0:20)+'..':(att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" target=\\\"_blank\\\" (click)=\\\"downloadFile(att, $event)\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"sq sq-attach-files\\\"></i>{{ (att.name.length > 6)? (att.name |\\n                          slice:0:20)+'..':(att.name) }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask_editRequest(task, att)\\\">\\n                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment_editRequest(att)\\\">\\n                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #008BCB; display: inline-block; padding: 6px 12px; cursor: pointer; border-radius: 15px;background-color: #008BCB; color:white;\\\"\\n              for=\\\"file-upload-addRequest\\\" class=\\\"custom-file-upload\\\">\\n              <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n            </label>\\n            <input id=\\\"file-upload-addRequest\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              (change)=\\\"onChange($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"addRequest\\\" type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"saveTask()\\\" [disabled]=\\\"(!task.task_subject || task.task_subject == '' || task.task_subject == 'undefined') || (!task.task_description_r || task.task_description_r == '' || task.task_description_r == 'undefined') || (!task.prod_id) || (!task.cate_id) || (!task.grop_id)\\\">\\n              Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdCategory\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" style=\\\"border-radius: 15px;\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-categories\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i>{{myfilterfield.typetittle}} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group scrollable\\\" style=\\\"max-height: 200px;\\\">\\n                <table class=\\\"table table-hover table-striped table-category\\\">\\n                  <thead>\\n                    <th style=\\\"width:100%;\\\"> </th>\\n                  </thead>\\n                  <tbody>\\n                    <tr *ngFor=\\\"let ml of categorieslbl | filterfield : myfilterfield\\\">\\n                      <td>\\n                        {{ml.label}}\\n                      </td>\\n                    </tr>\\n                  </tbody>\\n                </table>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdRj\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-rejectRequest\\\">\\n        <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n          <button id=\\\"close-mdRj-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Reject task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label class=\\\"label_reasonReject_slqx\\\">Reason for rejection</label>\\n            <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\" placeholder=\\\"Description ...\\\"\\n              [(ngModel)]=\\\"rjtask.retk_description\\\"></textarea>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"close2-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\"\\n            [disabled]=\\\"(!rjtask.retk_description || rjtask.retk_description == '' || rjtask.retk_description == 'undefined')\\\"\\n            (click)=\\\"rejectTask()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdImp\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-rejectRequest\\\">\\n        <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n          <button id=\\\"close-mdImp-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Improve task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label class=\\\"label_reasonReject_slqx\\\">Reason for improve</label>\\n            <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\" placeholder=\\\"Description ...\\\"\\n              [(ngModel)]=\\\"rjtask.retk_description\\\"></textarea>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"close2-mdImp-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mdImp-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\"\\n            [disabled]=\\\"(!rjtask.retk_description || rjtask.retk_description == '' || rjtask.retk_description == 'undefined')\\\"\\n            (click)=\\\"impTask()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdproject\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params\\\" style=\\\"text-align: center;text-align: center; position: absolute; z-index: 10; background-color: rgba(121,121,121,0.54); height: 100%;    margin-top: 0px ;display: flex;justify-content: center;  align-items: center;\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content-params\\\">\\n        <div *ngIf=\\\"!project.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>&nbsp;&nbsp; New project</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Subject</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"project.proj_subject\\\" name=\\\"project_subject\\\"\\n                  placeholder=\\\"Subject\\\">\\n              </div>\\n            </div>\\n            <!--.subject-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>User Applicant</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userapplicant\\\"\\n                  [(ngModel)]=\\\"project.user_applicant\\\" placeholder=\\\"Select a user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.user applicant-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Group</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groupscombo\\\"\\n                  [(ngModel)]=\\\"project.group_assigned\\\" placeholder=\\\"Select a group\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.group-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                  [(ngModel)]=\\\"project.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.product-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"project.proj_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                  [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <!--.delivery date-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Estimated Points</label>\\n                <input type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"project.proj_propoints\\\" [step]=\\\"0.25\\\"\\n                  [min]=\\\"0\\\">\\n              </div>\\n            </div>\\n            <!--.estimates points-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                <label>Share with</label>\\n                <span class=\\\"ui-fluid\\\">\\n                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"project.userssh\\\" [suggestions]=\\\"usersShareWith\\\"\\n                    (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\"\\n                    field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                  </p-autoComplete>\\n                </span>\\n              </div>\\n            </div>\\n          </div>\\n          <!--.share with-->\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li [ngClass]=\\\"{'active':tagMenu == 1}\\\" id=\\\"li_description_project\\\">\\n                <a id=\\\"editProject-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_project\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n              </li>\\n              <li *ngIf=\\\"project.attachments && project.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\" id=\\\"li_attachments_project\\\">\\n                <a id=\\\"editProject-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_project\\\" (click)=\\\"setPage(2)\\\">Attachments\\n                  <span>({{project.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor [(ngModel)]=\\\"project.proj_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n              <!--.description-->\\n            </div>\\n            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"attachments_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of project.attachments\\\">\\n                      <a id=\\\"href-attp-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type && (att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/')\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a id=\\\"href-attp2-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.pjat_name}}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"project.proj_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                            (click)=\\\"deleteAttachmentProject(project,att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!project.proj_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                            (click)=\\\"deleteAttachment(att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n              Close\\n            </button>\\n            <button type=\\\"submit\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateProj()\\\"\\n              (click)=\\\"saveproject()\\\" style=\\\"padding: 5px 12px;\\\"> Save\\n            </button>\\n          </div>\\n          <div class=\\\"pull-left\\\">\\n            <label for=\\\"file-upload\\\" class=\\\"custom-file-upload custom-upload-form-projectlist\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n/***/ }),\n/* 860 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"approval\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-approvals\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> APPROVALS\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Approvals</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\">\\n          <div class=\\\"box-header with-border\\\">\\n            <!-- <div class=\\\"btn-group\\\">\\n              <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n              <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"addTask()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddTask\\\">\\n                <i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n              <button [disabled]=\\\"this.seltasks.length == 0\\\" (click)=\\\"openTask(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-undo\\\"></i>&nbsp;Reopen</button>\\n              <button [disabled]=\\\"this.seltasks.length == 0\\\" (click)=\\\"closeTask(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-times\\\"></i>&nbsp;Close</button>\\n              <button [disabled]=\\\"this.seltasks.length == 0\\\" (click)=\\\"deleteTask(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-trash-o\\\"></i>&nbsp;Delete</button>\\n            </div> -->\\n            <div class=\\\"box-tools pull-right\\\">\\n              <div class=\\\"has-feedback\\\">\\n                <input type=\\\"text\\\" class=\\\"form-control input-sm\\\" placeholder=\\\"Search\\\" [(ngModel)]=\\\"search\\\">\\n                <span class=\\\"glyphicon glyphicon-search form-control-feedback\\\"></span>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"table-responsive tasks-messages\\\">\\n              <div class=\\\"nav-tabs-custom\\\">\\n                <div class=\\\"pull-right\\\">\\n                  <!-- {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) > (tasks | filter : search | filterfield :\\n                  { pos : posState, text : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos\\n                  : posOrder, desc : orderDesc }).length ? (tasks | filter : search | filterfield : { pos : posState, text\\n                  : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos : posOrder, desc : orderDesc\\n                  }).length : (limitpage * currentpage) }} / {{ (tasks | filter : search | filterfield : { pos : posState,\\n                  text : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos : posOrder, desc\\n                  : orderDesc }).length }} -->\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(0)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                      title=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(1)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                      title=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n                <ul class=\\\"nav nav-tabs\\\">\\n                  <li class=\\\"active\\\">\\n                    <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['New','Viewed','Accepted','Develop','Test','Completed','Closed','Backlog'])\\\">All</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['New','Viewed','Accepted','Develop'])\\\">Active</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Test'])\\\">Testing</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_4\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Completed'])\\\">Completed</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_4\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Improved'])\\\">Improving</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Outstanding'])\\\">Favorite</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Deleted'])\\\">Deleted</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Closed'])\\\">Closed</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Backlog'])\\\">Backlog</a>\\n                  </li>\\n                </ul>\\n                <ul class=\\\"nav nav-tabs\\\">\\n                  <li class=\\\"active\\\">\\n                    <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('')\\\">All</a>\\n                  </li>\\n                  <li *ngFor=\\\"let gr of groups\\\">\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList([gr.grop_id+''])\\\">{{gr.grop_name}}</a>\\n                  </li>\\n                </ul>\\n              </div>\\n              <table id=\\\"results\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                <thead>\\n                  <tr>\\n                    <th (click)=\\\"selectAll()\\\">\\n                      <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                      <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    </th>\\n                    <th></th>\\n                    <th (click)=\\\"setOrder('task_date')\\\" style=\\\"width: 100px;\\\">Date\\n                      <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_id')\\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('creator')\\\">Created By\\n                      <span [hidden]=\\\"posOrder !== 'creator'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('asigned')\\\">Assigned To\\n                      <span [hidden]=\\\"posOrder !== 'asigned'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th>Subject</th>\\n                    <th style=\\\"width: 150px;\\\">Actions</th>\\n                  </tr>\\n                </thead>\\n                <tbody id=\\\"main-table-tasks\\\">\\n                  <tr *ngFor=\\\"let tk of tasks | filter : search | filterfield : { pos : posState, text : textState } | filterfield : { pos : posGroup, text : textGroup} | paginate : { currp : currentpage, limit : limitpage} | order : { pos : posOrder, desc : orderDesc }\\\"\\n                    [ngStyle]=\\\"tk.para_status == 42 ? { 'background': 'rgba(255, 0, 0, 0.13)' } : tk.para_status == 43 ? { 'background': '#c0c0bf' } : {}\\\">\\n                    <td>\\n                      <div class=\\\"ui-g\\\">\\n                        <p-checkbox id=\\\"listask\\\" name=\\\"listask\\\" value=\\\"{{tk.task_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\"></p-checkbox>\\n                      </div>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tkst_name == 'New' ? 'bold' : 'normal' }\\\" (click)=\\\"outstanding(tk)\\\">\\n                        <i id=\\\"star{{tk.task_id}}\\\" class=\\\"fa fa-star{{ tk.outst == '1' ? '' : '-o'}} text-yellow\\\"></i>\\n                      </a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.task_date) }}</a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.task_id) }}</a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.creator) }}</a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.asigned) }}</a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.task_subject) }}</a>\\n                    </td>\\n                    <td>\\n                      <div class=\\\"btn-group\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"showModal(tk)\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                          title=\\\"Quick View\\\">\\n                          <i class=\\\"fa fa-eye\\\"></i>\\n                        </button>\\n                        <button type=\\\"button\\\" (click)=\\\"showEditModal(tk)\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                          title=\\\"Edit\\\">\\n                          <i class=\\\"fa fa-pencil-square-o\\\"></i>\\n                        </button>\\n                        <button (click)=\\\"acceptTask(tk)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\"\\n                          data-container=\\\"body\\\" title=\\\"Accept\\\">\\n                          <i class=\\\"fa fa-check\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"tk.para_status != 43\\\" (click)=\\\"deleteTask(tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\"\\n                          data-container=\\\"body\\\" title=\\\"Delete\\\">\\n                          <i class=\\\"fa fa-trash-o\\\"></i>\\n                        </button>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div class=\\\"box-footer no-padding\\\">\\n              <div class=\\\"contacts-controls\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"reload()\\\">\\n                  <i class=\\\"fa fa-refresh\\\"></i>\\n                </button>\\n                <div class=\\\"pull-right\\\">\\n                  {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) > (tasks | filter : search | filterfield :\\n                  { pos : posState, text : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos\\n                  : posOrder, desc : orderDesc }).length ? (tasks | filter : search | filterfield : { pos : posState, text\\n                  : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos : posOrder, desc : orderDesc\\n                  }).length : (limitpage * currentpage) }} / {{ (tasks | filter : search | filterfield : { pos : posState,\\n                  text : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos : posOrder, desc\\n                  : orderDesc }).length }}\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(0)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                      title=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(1)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                      title=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n</section>\";\n\n/***/ }),\n/* 861 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"projectboard\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px; min-height:600px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-projectboard\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> PROJECTBOARD\\n      <small style=\\\"font-size:15px;\\\">Main Control</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Projectboard</li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\" style=\\\"min-height:100%;\\\">\\n    <div class=\\\"row\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"table-responsive\\\" style=\\\"padding-bottom:30px;max-height:none!important;\\\">\\n                    <div style=\\\"margin-bottom:15px; width:100%; height:1050; padding:5px;\\\">\\n                        <!--PLANNING-->\\n                        <div class=\\\"table-column-projectboard pull-left\\\">\\n                            <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                    <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                        <h3 class=\\\"box-title\\\">\\n                                            <i class=\\\"sq sq-planning\\\"></i> Planning</h3>\\n                                    </div>\\n                                    <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                         <!-- {{ round(sumx(pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' }, \\\"36\\\"),2) }} pts -->\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div id=\\\"planningx\\\" class=\\\"table-body pull-left box-solid pending\\\" style=\\\"width:100%;height:90%;\\\">\\n                                <div *ngFor=\\\"let pla of myprojects.planning\\\">\\n                                    <div class=\\\"box taskboard-tile box-solid pending table-element taskboard-tile-{{pla.labelx}}\\\" style=\\\"list-style-type: none; margin-left: 10px;\\\">\\n                                        <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{pla.labelbackgroundx}} taskboard-box-radius-{{pla.labelx}}\\\">\\n                                            <div class=\\\"c100 p{{pla.proj_percentage}} xsmall\\\">\\n                                                <span (click)=\\\"showProject(pla.proj_id)\\\" class=\\\"percentage-{{pla.labelx}}\\\" style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{pla.proj_percentage}}%</span>\\n                                                <div class=\\\"slice\\\">\\n                                                    <div class=\\\"{{pla.labelx}} bar\\\"></div>\\n                                                    <div class=\\\"{{pla.labelx}} fill\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-header task-tile-header-projects with-border\\\" >\\n                                            <h3 class=\\\"box-title\\\"> \\n                                                <span (click)=\\\"showProject(pla.proj_id)\\\" style=\\\"cursor: pointer;\\\">\\n                                                    <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                    {{pla.proj_id + \\\" \\\" + pla.prod_name}}\\n                                                </span>\\n                                            </h3>\\n                                        </div>\\n                                        <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(pla.proj_id) }\\\" style=\\\"height:1975x;float:left;min-width: 220px;\\\">\\n                                            <div class=\\\"row infotask\\\">\\n                                            \\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                [innerHTML]=\\\"pla.proj_subject\\\"></div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                            style=\\\"height:20px!important;\\\">Group:{{\\\" \\\"+pla.grop_name}}\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\" style=\\\"border-top: solid 2px white;height: 100%;\\\">\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div *ngFor=\\\"let pla of myprojects.planning\\\">\\n                                    <projectview [myProjectId]=\\\"pla.proj_id\\\"></projectview>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!-- END PLANNING-->\\n                        <!--BUILD UP-->\\n                        <div class=\\\"table-column-projectboard pull-left\\\">\\n                        <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                    <h3 class=\\\"box-title\\\">\\n                                        <i class=\\\"sq sq-buildup\\\"></i> Build Up</h3>\\n                                </div>\\n                                <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                        <!-- {{ round(sumx(pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' }, \\\"36\\\"),2) }} pts -->\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div id=\\\"buildupx\\\" class=\\\"table-body pull-left box-solid pending\\\" style=\\\"width:100%;height:90%;\\\">\\n                            <div *ngFor=\\\"let bui of myprojects.buildup\\\">\\n                                <div class=\\\"box taskboard-tile taskboard-tile-{{bui.labelx}} box-solid pending table-element\\\" style=\\\"list-style-type: none; margin-left: 10px;\\\">\\n                                    <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{bui.labelbackgroundx}} taskboard-box-radius-{{bui.labelx}}\\\">\\n                                        <div class=\\\"c100 p{{bui.proj_percentage}} xsmall\\\">\\n                                            <span (click)=\\\"showProject(bui.proj_id)\\\" class=\\\"percentage-{{bui.labelx}}\\\" style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{bui.proj_percentage}}%</span>\\n                                            <div class=\\\"slice\\\">\\n                                                <div class=\\\"{{bui.labelx}} bar\\\"></div>\\n                                                <div class=\\\"{{bui.labelx}} fill\\\"></div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-header task-tile-header-projects with-border\\\" >\\n                                        <h3 class=\\\"box-title\\\"> \\n                                            <span (click)=\\\"showProject(bui.proj_id)\\\" style=\\\"cursor: pointer;\\\">\\n                                                <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                {{bui.proj_id  + \\\" \\\" + bui.prod_name}}\\n                                            </span>\\n                                        </h3>\\n                                        <div class=\\\"box-tools pull-right\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <button id=\\\"settings-buildup-projectboard\\\" type=\\\"button\\\"\\n                                                        class=\\\"btn btn-xs task-btn-default dropdown-toggle\\\"\\n                                                        data-toggle=\\\"dropdown\\\"\\n                                                        aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\n                                                        style=\\\"background-color:transparent;\\\">\\n                                                    <i class=\\\"sq sq-setup\\\"></i>\\n                                                </button>\\n                                                <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                    <li>\\n                                                        <a id=\\\"blptoimpl-projectboard\\\" style=\\\"color: #333;\\\" (click)=\\\"setStatusproject(bui, 7)\\\">\\n                                                          <i class=\\\"sq sq-implementation\\\"></i> Move to Implementation</a>\\n                                                      </li>\\n                                                </ul>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(bui.proj_id) }\\\" style=\\\"height:1975x;float:left;min-width: 220px;\\\">\\n                                        <div class=\\\"row infotask\\\">\\n                                        \\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description projdescr no-padding\\\"\\n                                            [innerHTML]=\\\"bui.proj_subject\\\"></div>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                        style=\\\"height:20px!important;\\\">Group:{{\\\" \\\"+bui.grop_name}}\\n                                                </div>\\n                                            </div>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\" style=\\\"border-top: solid 2px white;height: 100%;\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                    style=\\\"height:20px!important;font-weight: bold;\\\">Work team\\n                                                    </div>\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                        <div class=\\\"content-asignedlist\\\">\\n                                                            <div class=\\\"modal-body\\\" style=\\\"padding:0px;\\\">\\n                                                                <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                                                                    <div class=\\\"nav-tabs-custom-pjb\\\" style=\\\"overflow-x: scroll;\\\">\\n                                                                        <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                                                            <li *ngFor=\\\"let tm of bui.asignedlist\\\">\\n                                                                              <div tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.asigned}}\\\" class=\\\"icon-asignedlist\\\">\\n                                                                                <img [src]=\\\"tm.urlimg\\\"\\n                                                                                    onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                    style=\\\"padding: 0px; width:29px;height:29px;border-radius: 50%;\\\"\\n                                                                                    class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                                                              </div>\\n                                                                            </li>\\n                                                                        </ul>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div *ngFor=\\\"let bui of myprojects.buildup\\\">\\n                                <projectview [myProjectId]=\\\"bui.proj_id\\\"></projectview>\\n                            </div>\\n                        </div>\\n                        </div>\\n                        <!-- END BUILD UP-->\\n                        <!--IMPLEMENTATION-->\\n                        <div class=\\\"table-column-projectboard pull-left\\\">\\n                            <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                    <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                        <h3 class=\\\"box-title\\\">\\n                                            <i class=\\\"sq sq-implementation\\\"></i> Implementation</h3>\\n                                    </div>\\n                                    <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                            <!-- {{ round(sumx(pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' }, \\\"36\\\"),2) }} pts -->\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div id=\\\"implementationx\\\" class=\\\"table-body pull-left box-solid pending\\\" style=\\\"width:100%;height:90%;\\\">\\n                                <div *ngFor=\\\"let imp of myprojects.implementation\\\">\\n                                    <div class=\\\"box taskboard-tile taskboard-tile-{{imp.labelx}} box-solid pending table-element\\\" style=\\\"list-style-type: none; margin-left: 10px;\\\">\\n                                        <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{imp.labelbackgroundx}} taskboard-box-radius-{{imp.labelx}}\\\">\\n                                            <div class=\\\"c100 p{{imp.proj_percentage}} xsmall\\\">\\n                                                <span (click)=\\\"showProject(imp.proj_id)\\\" class=\\\"percentage-{{imp.labelx}}\\\" style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{imp.proj_percentage}}%</span>\\n                                                <div class=\\\"slice\\\">\\n                                                    <div class=\\\"{{imp.labelx}} bar\\\"></div>\\n                                                    <div class=\\\"{{imp.labelx}} fill\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-header task-tile-header-projects with-border\\\" >\\n                                            <h3 class=\\\"box-title\\\"> \\n                                                <span (click)=\\\"showProject(imp.proj_id)\\\" style=\\\"cursor: pointer;\\\">\\n                                                    <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                    {{imp.proj_id  + \\\" \\\" + imp.prod_name}}\\n                                                </span>\\n                                            </h3>\\n                                            <div class=\\\"box-tools pull-right\\\">\\n                                                <div class=\\\"btn-group\\\">\\n                                                    <button id=\\\"settings-implementation-projectboard\\\" type=\\\"button\\\"\\n                                                            class=\\\"btn btn-xs task-btn-default dropdown-toggle\\\"\\n                                                            data-toggle=\\\"dropdown\\\"\\n                                                            aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\n                                                            style=\\\"background-color:transparent;\\\">\\n                                                        <i class=\\\"sq sq-setup\\\"></i>\\n                                                    </button>\\n                                                    <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                        <li>\\n                                                            <a id=\\\"imptobui-projectboard\\\" style=\\\"color: #333;\\\" (click)=\\\"setStatusproject(imp, 2)\\\">\\n                                                              <i class=\\\"sq sq-buildup\\\"></i> Move to Build up</a>\\n                                                        </li>\\n                                                    </ul>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(imp.proj_id) }\\\" style=\\\"height:1975x;float:left;min-width: 220px;\\\">\\n                                            <div class=\\\"row infotask\\\">\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description projdescr no-padding\\\"\\n                                                [innerHTML]=\\\"imp.proj_subject\\\"></div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                            style=\\\"height:20px!important;\\\">Group:{{\\\" \\\"+imp.grop_name}}\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\" style=\\\"border-top: solid 2px white;height: 100%;\\\">\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                        style=\\\"height:20px!important;font-weight: bold;\\\">Work team\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                            <div class=\\\"content-asignedlist\\\">\\n                                                                <div class=\\\"modal-body\\\" style=\\\"padding:0px;\\\">\\n                                                                    <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                                                                        <div class=\\\"nav-tabs-custom-pjb\\\" style=\\\"overflow-x: scroll;\\\">\\n                                                                            <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                                                                <li *ngFor=\\\"let tm of imp.asignedlist\\\">\\n                                                                                  <div tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.asigned}}\\\" class=\\\"icon-asignedlist\\\">\\n                                                                                    <img [src]=\\\"tm.urlimg\\\"\\n                                                                                        onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                        style=\\\"padding: 0px; width:29px;height:29px;border-radius: 50%;\\\"\\n                                                                                        class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                                                                  </div>\\n                                                                                </li>\\n                                                                            </ul>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div *ngFor=\\\"let imp of myprojects.implementation\\\">\\n                                    <projectview [myProjectId]=\\\"imp.proj_id\\\"></projectview>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!-- END IMPLEMENTATION-->\\n                        <!--CLOSE UP-->\\n                        <div class=\\\"table-column-projectboard pull-left\\\">\\n                            <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                    <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                        <h3 class=\\\"box-title\\\">\\n                                            <i class=\\\"sq sq-closeup\\\"></i> Close up</h3>\\n                                    </div>\\n                                    <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                            <!-- {{ round(sumx(pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' }, \\\"36\\\"),2) }} pts -->\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div id=\\\"closeupx\\\" class=\\\"table-body pull-left box-solid pending\\\" style=\\\"width:100%;height:90%;\\\">\\n                                <div *ngFor=\\\"let clo of myprojects.closeup\\\">\\n                                    <div class=\\\"box taskboard-tile taskboard-tile-{{clo.labelx}} box-solid pending table-element\\\" style=\\\"list-style-type: none; margin-left: 10px;\\\">\\n                                        <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{clo.labelbackgroundx}} taskboard-box-radius-{{clo.labelx}}\\\">\\n                                            <div class=\\\"c100 p{{clo.proj_percentage}} xsmall\\\">\\n                                                <span (click)=\\\"showProject(clo.proj_id)\\\" class=\\\"percentage-{{clo.labelx}}\\\" style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{clo.proj_percentage}}%</span>\\n                                                <div class=\\\"slice\\\">\\n                                                    <div class=\\\"{{clo.labelx}} bar\\\"></div>\\n                                                    <div class=\\\"{{clo.labelx}} fill\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-header task-tile-header-projects with-border\\\" >\\n                                            <h3 class=\\\"box-title\\\"> \\n                                                <span (click)=\\\"showProject(clo.proj_id)\\\" style=\\\"cursor: pointer;\\\">\\n                                                    <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                    {{clo.proj_id  + \\\" \\\" + clo.prod_name}}\\n                                                </span>\\n                                            </h3>\\n                                            <div class=\\\"box-tools pull-right\\\">\\n                                                <div class=\\\"btn-group\\\">\\n                                                    <button id=\\\"settings-planning-projectboard\\\" type=\\\"button\\\"\\n                                                            class=\\\"btn btn-xs task-btn-default dropdown-toggle\\\"\\n                                                            data-toggle=\\\"dropdown\\\"\\n                                                            aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\n                                                            style=\\\"background-color:transparent;\\\">\\n                                                      <i class=\\\"sq sq-setup\\\"></i>\\n                                                    </button>\\n                                                    <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                        <li>\\n                                                          <a id=\\\"cptobui-projectboard\\\" style=\\\"color: #333;\\\" (click)=\\\"setStatusproject(clo, 3)\\\">\\n                                                            <i class=\\\"sq sq-archivar\\\"></i> Close</a>\\n                                                        </li>\\n                                                    </ul>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(clo.proj_id) }\\\" style=\\\"height:1975x;float:left;min-width: 220px;\\\">\\n                                            <div class=\\\"row infotask\\\">\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description projdescr no-padding\\\"\\n                                                [innerHTML]=\\\"clo.proj_subject\\\"></div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                            style=\\\"height:20px!important;\\\">Group:{{\\\" \\\"+clo.grop_name}}\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\" style=\\\"border-top: solid 2px white;height: 100%;\\\">\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                        style=\\\"height:20px!important;font-weight: bold;\\\">Work team\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                            <div class=\\\"content-asignedlist\\\">\\n                                                                <div class=\\\"modal-body\\\" style=\\\"padding:0px;\\\">\\n                                                                    <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                                                                        <div class=\\\"nav-tabs-custom-pjb\\\" style=\\\"overflow-x: scroll;\\\">\\n                                                                            <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                                                                <li *ngFor=\\\"let tm of clo.asignedlist\\\">\\n                                                                                  <div tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.asigned}}\\\" class=\\\"icon-asignedlist\\\">\\n                                                                                    <img [src]=\\\"tm.urlimg\\\"\\n                                                                                        onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                        style=\\\"padding: 0px; width:29px;height:29px;border-radius: 50%;\\\"\\n                                                                                        class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                                                                  </div>\\n                                                                                </li>\\n                                                                            </ul>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div *ngFor=\\\"let clo of myprojects.closeup\\\">\\n                                    <projectview [myProjectId]=\\\"clo.proj_id\\\"></projectview>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!-- END CLOSE UP-->\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n  </section>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\\n\\n<div>\\n  <div class=\\\"modal fade modal-squadlinx\\\" id=\\\"project-budget\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"width:800px;\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button id=\\\"close-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"closeDaily()\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"font-weight: bolder;\\\">Project Budget</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\" style=\\\"height:475px;\\\">\\n          <div class=\\\"col-md-3\\\">\\n            <div class=\\\"col-md-12 tab-squadlinx selected\\\" (click)=\\\"changeBudget('fixed')\\\">Fixed Costs</div>\\n            <div class=\\\"col-md-12 tab-squadlinx\\\" (click)=\\\"changeBudget('variable')\\\">Variable Costs</div>\\n          </div>\\n          <div class=\\\"col-md-9\\\">\\n            <div class=\\\"tab-content\\\">\\n              <div id=\\\"project-budget\\\" class=\\\"tab-pane fade in active col-md-12\\\" style=\\\"border:1px solid #CCD7DD;border-radius: 15px;\\\">\\n                <div *ngIf=\\\"curBudget == 'fixed'\\\" class=\\\"row\\\" style=\\\"padding-top:35px;padding-bottom:20px;min-height: 275px;\\\">\\n                  <div class=\\\"col-xs-8 col-md-8 col-lg-8\\\">\\n                    <table class=\\\"squadlinx-embed-table\\\">\\n                      <thead>\\n                        <td>Item</td>\\n                        <td>Cost</td>\\n                      </thead>\\n                      <tbody *ngIf=\\\"costreport && costreport.length > 0 && fixedreport.length > 0 && curBudget == 'fixed'\\\">\\n                        <tr *ngFor = \\\"let cost of fixedreport\\\">\\n                          <td>{{cost.pjbu_itemdesc}}</td>\\n                          <td>$ {{cost.cost}}</td>\\n                        </tr>\\n                      </tbody>\\n                      <tbody *ngIf=\\\"fixedreport.length == 0 && curBudget == 'fixed'\\\">\\n                        <tr>\\n                          <td>No Items</td>\\n                          <td>0</td>\\n                        </tr>\\n                      </tbody>\\n                    </table>\\n                  </div>\\n                  <div class=\\\"col-xs-4 col-md-4 col-lg-4 no-padding\\\" style=\\\"padding-top:15%!important;\\\">\\n                    <label style=\\\"color:#0FB4FF;text-align: center;font-size:24px;width: 100%;\\\">$ {{totalfixedmoney}}</label>\\n                    <label style=\\\"color:#006ec6;text-align: center;width: 100%;\\\">Total Fixed Costs</label>\\n                    <div class=\\\"col-md-12\\\">\\n                      <div class=\\\"button-round-squadlinx\\\" style=\\\"margin:0 auto;\\\" (click)=\\\"showAddMenu(true)\\\"><i class=\\\"sq sq-add\\\"></i></div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"curBudget == 'variable'\\\" class=\\\"row\\\" style=\\\"padding-top:35px;padding-bottom:20px;min-height: 275px;\\\">\\n                  <div class=\\\"col-xs-8 col-md-8 col-lg-8\\\">\\n                    <table class=\\\"squadlinx-embed-table\\\">\\n                      <thead>\\n                        <td>Item</td>\\n                        <td>Cost</td>\\n                      </thead>\\n                      <tbody *ngIf=\\\"costreport && costreport.length > 0 && variablereport.length > 0 && curBudget == 'variable'\\\">\\n                        <tr *ngFor = \\\"let cost of variablereport\\\">\\n                          <td>{{cost.pjbu_itemdesc}}</td>\\n                          <td>$ {{cost.cost}}</td>\\n                        </tr>\\n                      </tbody>\\n                      <tbody *ngIf=\\\"variablereport.length == 0 && curBudget == 'variable'\\\">\\n                        <tr>\\n                          <td>No Items</td>\\n                          <td>0</td>\\n                        </tr>\\n                      </tbody>\\n                    </table>\\n                  </div>\\n                  <div class=\\\"col-xs-4 col-md-4 col-lg-4 no-padding\\\" style=\\\"padding-top:15%!important;\\\">\\n                    <label style=\\\"color:#0FB4FF;text-align: center;font-size:24px;width: 100%;\\\">$ {{totalvariablemoney}}</label>\\n                    <label style=\\\"color:#006ec6;text-align: center;width: 100%;\\\">Total Variable Costs</label>\\n                    <div class=\\\"col-md-12\\\">\\n                      <div class=\\\"button-round-squadlinx\\\" style=\\\"margin:0 auto;\\\"><i class=\\\"sq sq-add\\\"></i></div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div *ngIf=\\\"showAddItem\\\" class=\\\"col-md-12 no-padding\\\">\\n            <div id=\\\"add-budget-item\\\" class=\\\"tab-pane fade in active col-md-12 no-padding\\\" style=\\\"border:1px solid #CCD7DD;border-radius: 15px;margin-top:20px;margin-bottom:20px;\\\">\\n              <div class=\\\"row no-padding\\\" style=\\\"padding-top:10px;padding-bottom:10px;height:135px;margin:10px;\\\">\\n                <div class=\\\"col-md-3 no-padding\\\" style=\\\"color:#829198;\\\">\\n                  <div class=\\\"pull-left col-md-12\\\">\\n                    <label style=\\\"font-size:16px;\\\">Item Description</label>\\n                  </div>\\n                  <div class=\\\"pull-left col-md-12\\\">\\n                    <textarea class=\\\"textarea-squadlinx\\\" [(ngModel)]=\\\"newItem.itemdescription\\\" placeholder=\\\"Description\\\" style=\\\"resize: none;height:75px;\\\"></textarea>\\n                  </div>\\n                </div>\\n                <div class=\\\"col-md-7 no-padding pull-left\\\" style=\\\"color:#829198;height: 65px;margin-bottom:10px;margin-left:20px;\\\">\\n                  <div class=\\\"col-md-6 no-padding\\\" style=\\\"color:#829198;\\\">\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <label style=\\\"font-size:16px;\\\">Cost Type</label>\\n                    </div>\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <p-dropdown class=\\\"ui-g ui-fluid dropdown-squadlinx\\\" [autoWidth]=\\\"false\\\" [options]=\\\"costtypes\\\" [(ngModel)]=\\\"costtypeSelected\\\" placeholder=\\\"Select a Type\\\" (onChange)=\\\"updateUnits(costtypeSelected)\\\"></p-dropdown>\\n                    </div>\\n                  </div>\\n                  <div *ngIf=\\\"costtypeSelected == 'total'\\\" class=\\\"col-md-2 no-padding pull-right\\\" style=\\\"color:#829198;\\\">\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <label style=\\\"font-size:16px;\\\">Total Cost</label>\\n                    </div>\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <input class=\\\"input-squadlinx\\\" type=\\\"number\\\" step=\\\".1\\\" [(ngModel)]=\\\"newItem.totalcost\\\" style=\\\"width:125px;\\\" placeholder=\\\"Total Cost\\\">\\n                    </div>\\n                  </div>\\n                  <div *ngIf=\\\"units && units.length > 0 && costtypeSelected == 'unit'\\\" class=\\\"col-md-6 no-padding\\\" style=\\\"color:#829198;\\\">\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <label style=\\\"font-size:16px;\\\">Unit Type</label>\\n                    </div>\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <p-dropdown class=\\\"ui-g ui-fluid dropdown-squadlinx\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"unitSelected\\\" placeholder=\\\"Select a Type\\\" (onChange)=\\\"displayUnits(unitSelected)\\\" ></p-dropdown>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"costDisplayed != {} && unitSelected != '' && unitSelected && costtypeSelected == 'unit'\\\" class=\\\"col-md-7 no-padding pull-left\\\" style=\\\"height:65px;color:#829198;\\\">\\n                  <div class=\\\"col-md-4\\\">\\n                    <input class=\\\"input-squadlinx\\\" type=\\\"number\\\" step=\\\".1\\\" [(ngModel)]=\\\"newItem.unitcost\\\" style=\\\"width:125px;\\\" placeholder=\\\"{{costDisplayed.title}}\\\">\\n                  </div>\\n                  <div class=\\\"col-md-4\\\">\\n                    <input class=\\\"input-squadlinx\\\" type=\\\"number\\\" step=\\\".1\\\" [(ngModel)]=\\\"newItem.totalmeasure\\\" style=\\\"width:125px;\\\" placeholder=\\\"{{costDisplayed.measure}}\\\">\\n                  </div>\\n                  <div class=\\\"col-md-4\\\">\\n                    <input class=\\\"input-squadlinx\\\" type=\\\"number\\\" step=\\\".1\\\" [(ngModel)]=\\\"newItem.totalunits\\\" style=\\\"width:125px;\\\" placeholder=\\\"{{costDisplayed.units}}\\\">\\n                  </div>\\n                </div>\\n                \\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\" style=\\\"color:#006ec6;font-weight: bolder;font-size: 18px;\\\">Total Cost <span style=\\\"color:#0FB4FF;\\\"> $ {{totalcost}}</span> <span style=\\\"color:#CCD7DD;font-size:14px;\\\">/ Estimated Budget $ 25'000.000,00</span></div>\\n          <button id=\\\"close2-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveDaily(day, mcT.task_id)\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n</div>\\n\";\n\n/***/ }),\n/* 862 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"\";\n\n/***/ }),\n/* 863 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<!-- <my-header></my-header> -->\\n<section id=\\\"dashboard\\\"  style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <!-- Main content -->\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-md-8 col-lg-9\\\">\\n        <div class=\\\"box \\\">\\n          <div class=\\\"box-body\\\">\\n            <p-chart type=\\\"line\\\" [data]=\\\"burndownData\\\" height=\\\"200\\\"></p-chart>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  \\n</section>\";\n\n/***/ }),\n/* 864 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<div class=\\\"fondo\\\" [ngStyle]=\\\"myLoginStyle\\\" *ngIf=\\\"codeConfirmed==false\\\">\\n  <div class=\\\"col-md-5 col-lg-7\\\">\\n    \\n  </div>\\n  <div id = \\\"poweredSqlx\\\" style=\\\"bottom: 7%; left: 40%; position: absolute;\\\">\\n    <img src=\\\"img/powered_white.svg\\\" style=\\\"height: 45px;\\\">\\n  </div>\\n\\n  <div id=\\\"pwrecovery-nx\\\">\\n      <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;\\\">\\n        <img src=\\\"img/{{ mainLogoW }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto; max-width: 450px;\\n        height: auto;\\\">\\n      </div>\\n  \\n      <div id=\\\"email-validate\\\" *ngIf=\\\"validated == false\\\">\\n        <div class=\\\"form-group has-feedback\\\">\\n          <input  type=\\\"text\\\" autocomplete=\\\"off\\\" id=\\\"user\\\" name=\\\"user\\\" [(ngModel)]=\\\"email\\\" placeholder=\\\"&#xF007; email\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent;color:#ffffff; outline: none;\\\">\\n        </div>\\n        <!-- <div class=\\\"form-group has-feedback\\\">\\n          <input type=\\\"password\\\" autocomplete=\\\"off\\\" id=\\\"pwd\\\" name=\\\"pwd\\\" [(ngModel)]=\\\"log.pwd\\\" placeholder=\\\"Password\\\"\\n          placeholder=\\\"&#xF023;\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent;\\\">\\n        </div> -->\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <button (click)=\\\"validateEmail(email)\\\" class=\\\"btn-login\\\" [disabled]=\\\"email==null|| email==''\\\">\\n              Reset Password\\n            </button>\\n          </div>\\n        </div>\\n\\n        <div class=\\\"row\\\" style=\\\"padding-top: 20px;text-align:center;\\\">\\n          <div style=\\\"color:#ffffff;\\\"><span>Return to <a id=\\\"forgot-link\\\"  href=\\\"{{loginScreen}}\\\" style=\\\"font-weight:bolder;color:rgb(88, 199, 232);text-decoration:none;\\\">LOGIN</a> page.</span></div>\\n        </div>\\n        <!-- <div class=\\\"row\\\" style=\\\"text-align: center;\\\">\\n            <a href=\\\"#\\\">I forgot my password</a>\\n        </div> -->              \\n      </div>\\n      <div id=\\\"pin-code\\\" *ngIf=\\\"validated == true\\\">\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" style=\\\"margin-right:15px;\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" style=\\\"margin-left:15px;\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" (keyup)=\\\"changeFocus($event)\\\">\\n          </div>\\n        </div>\\n\\n        <div class=\\\"row\\\" style=\\\"margin-top:20px;\\\">\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <button (click)=\\\"resetPassword()\\\" class=\\\"btn-login\\\">\\n              Reset Password\\n            </button>\\n          </div>\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;margin-top:20px;\\\">\\n            <button (click)=\\\"validateEmail(email)\\\" class=\\\"btn-login\\\">\\n              Request a new code\\n            </button>\\n          </div>\\n\\n          <div class=\\\"row\\\" style=\\\"margin-top:100px;padding-top: 20px;text-align:center;\\\">\\n            <div style=\\\"color:#ffffff;\\\"><span>Return to <a id=\\\"forgot-link\\\"  href=\\\"{{loginScreen}}\\\" style=\\\"font-weight:bolder;color:rgb(88, 199, 232);text-decoration:none;\\\">LOGIN</a> page.</span></div>\\n          </div>\\n\\n        </div>\\n        \\n      </div>\\n      \\n  </div>\\n</div>\\n\\n<div class=\\\"fondo\\\" [ngStyle]=\\\"myLoginStyle\\\" *ngIf=\\\"codeConfirmed==true\\\">\\n  <div class=\\\"col-md-5 col-lg-7\\\">\\n    \\n  </div>\\n  <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-5\\\" id=\\\"login-rigth\\\">\\n\\n  </div>\\n  <div id=\\\"formPassword\\\" style=\\\"top: 50%; left: 28%; position: absolute;width:300px;\\\">\\n      <div class=\\\"row\\\">\\n          <h3 style=\\\"color:#57c7ed\\\">Setup your new password</h3>\\n          <div style=\\\"color:#ffffff;\\\">\\n              Enter a new password for your account. We highly recomment you create a unique password. It must contain:\\n              <br><br>\\n              <ul style=\\\"text-decoration:none;list-style-type:none;padding:0px;\\\">\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('eightchars') >= 0 ? '#55fd55' : 'white' }\\\">At least 8 characters</li>\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('uppercase') >= 0 ? '#55fd55' : 'white' }\\\">At least one uppercase character</li>\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('lowercase') >= 0 ? '#55fd55' : 'white' }\\\">At least one lowercase character</li>\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('number') >= 0 ? '#55fd55' : 'white' }\\\">At least one number</li>\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('specialchar') >= 0 ? '#55fd55' : 'white' }\\\">At least one special character</li>\\n              </ul>\\n          </div>\\n      </div>\\n  </div>\\n  <div id=\\\"poweredSqlx2\\\" style=\\\"bottom: 7%; left: 25%; position: absolute;\\\">\\n    <img src=\\\"img/powered_white.svg\\\" style=\\\"height: 45px;\\\">\\n  </div>\\n  <div id=\\\"login-nx\\\">\\n      <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;\\\">\\n        <img src=\\\"img/{{ mainLogo }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto;\\\">\\n      </div>\\n\\n      \\n      <form id=\\\"formLogin\\\" (ngSubmit)=\\\"setNewPassword()\\\">\\n        <div class=\\\"form-group has-feedback\\\">\\n          <input type=\\\"password\\\" autocomplete=\\\"off\\\" id=\\\"pwd1\\\" name=\\\"pwd1\\\" [(ngModel)]=\\\"log.pwd1\\\"\\n          placeholder=\\\"New Password\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent; outline: none;\\\" (keyup)=\\\"validateNewPassword(log.pwd1)\\\">\\n        </div>\\n        <div class=\\\"form-group has-feedback\\\">\\n          <input type=\\\"password\\\" autocomplete=\\\"off\\\" id=\\\"pwd2\\\" name=\\\"pwd2\\\" [(ngModel)]=\\\"log.pwd2\\\" placeholder=\\\"Confirm Password\\\"\\n          style=\\\"font-family:Arial, FontAwesome; background-color: transparent; outline: none;\\\">\\n        </div>\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <button type=\\\"submit\\\" id=\\\"boton_autentico\\\" class=\\\"btn-login\\\">\\n              Save Password\\n            </button>\\n          </div>\\n        </div>\\n        <!-- <div class=\\\"row\\\" style=\\\"text-align: center;\\\">\\n            <a href=\\\"#\\\">I forgot my password</a>\\n        </div> -->\\n      </form>\\n  </div>\\n</div>\";\n\n/***/ }),\n/* 865 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"sprints\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n      <h2 style=\\\"font-weight: bold;\\\">\\n          <i style=\\\"color:#007BD2;font-size:20px;\\\"></i>User Settings\\n          <small style=\\\"font-size:15px;\\\">Settings</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n                <li>\\n                    <a routerLink=\\\"/dashboard\\\">\\n                        <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n                </li>\\n                <li class=\\\"active\\\">User Settings</li>\\n        </ol>\\n  </section>\\n  <section class=\\\"content\\\" style=\\\"min-width: 500px;\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\" style=\\\"width:75%;min-height:450px;margin:0 auto;border-radius:25px;border:none;\\\">\\n          <div class=\\\"box-header\\\" style=\\\"background:#006EC6;border-radius: 25px 25px 0px 0px;height:60px;\\\">\\n            <div class=\\\"btn-group pull-right\\\" style=\\\"color:white;font-weight:bold;\\\">\\n              <div class=\\\"pull-rigth no-padding\\\" style=\\\"text-align:right;font-size:20px;\\\" [innerHTML]=\\\"getNameUser(user.user_name,user.user_lastname)\\\"></div>\\n              <div class=\\\"pull-rigth no-padding\\\" style=\\\"text-align:right;\\\">{{user.user_title}}</div>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2 pull-left no-padding\\\" style=\\\"height:80%;margin-top:-65px;\\\">\\n              <div class=\\\"pull-left setting-element container_changeImage\\\">\\n                <div id=\\\"user-profile-picture\\\" class=\\\"container_imageUser\\\" (mouseenter)=\\\"showChangePicture('profile')\\\" (mouseleave)=\\\"showChangePicture('profile')\\\">\\n                  <div style=\\\"height: 100%;width: 100%;background: white;position: relative;\\\">\\n                    <img [src]=\\\"user.urlimg\\\" id=\\\"profile-img\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"width: 100%; vertical-align: baseline; border-radius: 50%;\\\">\\n                    <div id=\\\"change-profile\\\" class=\\\"upload-picture-btn-wrapper icon_customUpload\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\"  name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"onBasicUpload($event,'profile')\\\"></div>\\n                  </div>\\n                </div>\\n                <div>\\n                  <p class=\\\"informativeMessage_sizeImg\\\" id=\\\"informative_message\\\">\\n                    The size of the image cannot be greater than 4 MB\\n                  </p>\\n                </div>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 pull-right\\\" style=\\\"height:80%;padding:0px 10px;\\\">\\n              <ul style=\\\"list-style: none;margin-top:10px;\\\">\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Email:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <input class=\\\"input-user\\\" disabled=\\\"true\\\" [(ngModel)]=\\\"user.user_email\\\">\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Cell Phone:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <int-phone-prefix id =\\\"cphone-usett\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_phone\\\"></int-phone-prefix>\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Work Address:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <input class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_workaddress\\\">\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Work Phone:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <input class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_workphone\\\">\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Home Address:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <input class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_homeaddress\\\">\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Home Phone:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <int-phone-prefix id =\\\"cphone-usett2\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_homephone\\\"></int-phone-prefix>\\n                  </div>\\n                  <li style=\\\"line-height: 2.5em;\\\">\\n                    <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Personal E-Mail:</div>\\n                    <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                      <input class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_personalemail\\\">\\n                    </div>\\n                  </li>\\n              </ul>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pull-right no-padding\\\" style=\\\"min-height:100px;position:relative;\\\">\\n                <div class=\\\"btnManageNotifications_usersettings\\\" data-toggle=\\\"modal\\\" data-target=\\\"#customNotifications\\\" (click)=\\\"getPreferences()\\\">Manage Notifications</div>\\n                <div class=\\\"btnChangePassword_usersettings\\\" data-toggle=\\\"modal\\\" data-target=\\\"#changePassword\\\" (click)=\\\"showModalPw()\\\">Change Password</div>\\n                <div class=\\\"btnSaveChanges_usersettings\\\" (click)=\\\"editUser(user)\\\">Save</div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"changePassword\\\" role=\\\"dialog\\\" style=\\\"min-width: 500px;\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">Change Password</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label>Previous Password</label>\\n            <input type=\\\"password\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"prev_password\\\">\\n          </div>\\n          <div class=\\\"form-group\\\">\\n            <label>New Password</label>\\n            <input type=\\\"password\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"new_password\\\" (keyup)=\\\"validateNewPassword(new_password)\\\">\\n          </div>\\n          <div class=\\\"form-group\\\">\\n            <label>Confirm Password</label>\\n            <input type=\\\"password\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"confirmed_password\\\">\\n          </div>\\n          <ul style=\\\"text-decoration:none;list-style-type:none;padding:0px;\\\">\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('sixchars') >= 0 ? '#006EC6' : 'black' }\\\">At least 6 characters</li>\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('uppercase') >= 0 ? '#006EC6' : 'black' }\\\">At least one uppercase character</li>\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('lowercase') >= 0 ? '#006EC6' : 'black' }\\\">At least one lowercase character</li>\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('number') >= 0 ? '#006EC6' : 'black' }\\\">At least one number</li>\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('specialchar') >= 0 ? '#006EC6' : 'black' }\\\">At least one special character</li>\\n          </ul>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" (click)=\\\"saveNewPassword()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"customNotifications\\\" role=\\\"dialog\\\">\\n      <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n          <div class=\\\"modal-header modal-header-info-params\\\" style=\\\"color:#FFFFFF;\\\">\\n            <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                <span aria-hidden=\\\"true\\\" style=\\\"color:#FFFFFF;\\\">&times;</span>\\n              </button>\\n            <h4 class=\\\"modal-title\\\">Custom Notifications</h4>\\n          </div>\\n          <div class=\\\"modal-body\\\" style=\\\"min-height: 100px;\\\">\\n            <div *ngFor=\\\"let ntf of notificationstype\\\" class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\" style=\\\"height:20px;\\\">\\n              <div class=\\\"col-xs-4 col-md-4 col-sm-4 col-lg-4\\\" style=\\\"font-weight: bolder;\\\">{{ntf.name}}</div>\\n              <div class=\\\"col-xs-4 col-md-4 col-sm-4 col-lg-4\\\"><p-checkbox class=\\\"checkbox-squadlinx\\\" name=\\\"email\\\" value=\\\"email|{{ntf.id}}\\\" label=\\\"Email\\\" [(ngModel)]=\\\"userPreferences.email\\\" inputId=\\\"{{ntf.emailnotif}}\\\"></p-checkbox></div>\\n              <div class=\\\"col-xs-4 col-md-4 col-sm-4 col-lg-4\\\"><p-checkbox class=\\\"checkbox-squadlinx\\\" name=\\\"desktop\\\" value=\\\"desktop|{{ntf.id}}\\\" label=\\\"Desktop\\\" [(ngModel)]=\\\"userPreferences.desktop\\\" inputId=\\\"{{ntf.desknotif}}\\\"></p-checkbox></div>\\n            </div>\\n          </div>\\n          <div class=\\\"modal-footer\\\">\\n            <button type=\\\"button\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color:rgb(15, 188, 255);margin-right:42%\\\" class=\\\"btn btn-roles\\\" (click)=\\\"savePreferences()\\\"> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n\\n</section>\";\n\n/***/ }),\n/* 866 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"requests\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-requests\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> REQUEST PREFERENCES\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Request Preferences</li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n        <div class=\\\"col-md-12\\\">\\n            <h3 style=\\\"font-weight:bold\\\">Rules</h3>\\n        </div>\\n    </div>\\n    <div class=\\\"row\\\" style=\\\"margin-top: 5px; margin-bottom: 5px; margin-right: 5px;\\\">\\n        <div class=\\\"col-md-12\\\">\\n            <div class=\\\"box box-primary2\\\">\\n                <div class=\\\"box-header without-border\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-8 col-md-8\\\" style=\\\"display: inline-flex;margin-bottom: 10px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"showModalRule()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddTask\\\" style=\\\"background-color:rgb(67, 178, 246);\\\">\\n                                    Create Rule</button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"showModalRule()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddTask\\\" style=\\\"background-color:rgb(67, 178, 246);\\\">\\n                                    Run All Rules</button>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-4 col-md-4 inputs-mainfilter\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                            <div class=\\\"label-input-mainfilter\\\">\\n                                <input type=\\\"text\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\">\\n                            </div>\\n                            <div class=\\\"search-input-mainfilter\\\" style=\\\"position: absolute; right: 0; top: 2px;\\\">\\n                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                            </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"box-body\\\" style=\\\"max-height:400px;padding-top:20px;margin-top: 5px;\\\">\\n                    <div class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n        \\n                    <table id=\\\"results\\\" class=\\\"table table-hover\\\">\\n                        <thead>\\n                        <tr style=\\\"color:#707070;\\\">\\n                            <th (click)=\\\"setOrder('type')\\\" style=\\\"min-width: 40px;text-align:center!important;\\\">Request Type\\n                                <span [hidden]=\\\"posOrder !== 'tkstatus'\\\">\\n                                    <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:#707070;\\\">▼</span>\\n                                    <span [hidden]=\\\"orderDesc\\\" style=\\\"color:#707070;\\\">▲</span>\\n                                </span>\\n                            </th>\\n                            <th></th>\\n                            <th (click)=\\\"setOrder('email')\\\" style=\\\"min-width: 40px;text-align:center!important;\\\">Email Account\\n                                <span [hidden]=\\\"posOrder !== 'tkstatus'\\\">\\n                                    <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:#707070;\\\">▼</span>\\n                                    <span [hidden]=\\\"orderDesc\\\" style=\\\"color:#707070;\\\">▲</span>\\n                                </span>\\n                            </th>\\n                            <th (click)=\\\"setOrder('rule')\\\" style=\\\"min-width: 200px;text-align:center!important;\\\">Rule\\n                                <span [hidden]=\\\"posOrder !== 'rule'\\\">\\n                                    <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:#707070;\\\">▼</span>\\n                                    <span [hidden]=\\\"orderDesc\\\" style=\\\"color:#707070;\\\">▲</span>\\n                                </span>\\n                            </th>\\n                            <th (click)=\\\"setOrder('assigned')\\\" style=\\\"min-width: 80px;text-align:center!important;\\\">Assigned to\\n                                <span [hidden]=\\\"posOrder !== 'assigned'\\\">\\n                                    <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:#707070;\\\">▼</span>\\n                                    <span [hidden]=\\\"orderDesc\\\" style=\\\"color:#707070;\\\">▲</span>\\n                                </span>\\n                            </th>\\n                            <th style=\\\"min-width: 150px;text-align:center!important;\\\">Actions\\n                            </th>\\n                        </tr>\\n                        </thead>\\n                        <tbody style=\\\"height: 100px; overflow:scroll; background: white\\\">\\n                        <tr *ngFor=\\\"let rule of groupRules\\\"\\n                            style=\\\"color:#707070;\\\">\\n                            <td style=\\\"border-top: 1px solid white!important;text-align: center;\\\">\\n                                <span style=\\\"color:#707070;cursor:default;\\\">{{ escapeHtml(rule.category) }}</span>\\n                            </td>\\n                            <td style=\\\"border:none;text-align: center;\\\">\\n                                <div [ngStyle]=\\\"rule.type == 'Errors' ? { 'background': '#F01458' } \\n                                            : rule.type == 'Implementation' ? { 'background': '#92CC66' } \\n                                            : rule.type == 'Improving actions' ? { 'background': '#FFBE2C' } : {}\\\" class=\\\"colortype\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"{{rule.type}}\\\"></div>\\n                            </td>\\n                            <td  style=\\\"border:none;text-align: center;\\\">\\n                                <span style=\\\"color:#707070;cursor:default;\\\">{{ escapeHtml(rule.account) }}</span>\\n                            </td>\\n                            <td  style=\\\"border:none;text-align: center;\\\">\\n                                <span style=\\\"color:#707070;cursor:default;\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"{{rule.criteria}}\\\">{{ escapeHtml(rule.description) | truncate : 35 }}</span>\\n                            </td>\\n                            <td  style=\\\"border:none;text-align: center;\\\">\\n                                <span style=\\\"color:#707070;cursor:default;\\\">{{ escapeHtml(rule.assigned) }}</span>\\n                            </td>\\n                            <td style=\\\"border:none;text-align: center;\\\">\\n                            <div class=\\\"btn-group\\\">\\n                                <button type=\\\"button\\\" (click)=\\\"runRule(rule)\\\"\\n                                    class=\\\"btn btn-default btn-sm btn-act\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"Run\\\">\\n                                    <i class=\\\"sq sq-download\\\"></i>\\n                                </button>\\n                                <button type=\\\"button\\\" (click)=\\\"editRule(rule)\\\"\\n                                class=\\\"btn btn-default btn-sm btn-act\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"Edit\\\">\\n                                    <i class=\\\"sq sq-quickedit\\\" style=\\\"font-weight: bold;\\\"></i>\\n                                </button>\\n                                <button type=\\\"button\\\" (click)=\\\"deleteRule(rule)\\\"\\n                                    class=\\\"btn btn-default btn-sm btn-act\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"Delete\\\">\\n                                        <i class=\\\"sq sq-eliminar\\\"></i>\\n                                </button>\\n                            </div>\\n                            </td>\\n                        </tr>\\n                        </tbody>\\n                    </table>\\n                    </div>\\n                    <div class=\\\"box-footer no-padding\\\">\\n                    <div class=\\\"contacts-controls\\\">\\n                        <div class=\\\"pull-right\\\" style=\\\"color:#707070;\\\">\\n                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) > (events | filter : search | filterfield\\n                        : { pos : posState, text : textState }| filterfield : { pos : posCreator, text : textCreator } | order\\n                        : { pos : posOrder, desc : orderDesc }).length ? (events| filter : search | filterfield : { pos : posState,\\n                        text : textState } | filterfield : { pos : posCreator, text : textCreator } | order : { pos : posOrder,\\n                        desc : orderDesc }).length : (limitpage * currentpage) }} / {{ (events | filter : search | filterfield\\n                        : { pos : posState, text : textState } | filterfield : { pos : posCreator, text : textCreator } | order\\n                        : { pos : posOrder, desc : orderDesc }).length }}\\n                        <div class=\\\"btn-group\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(0)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                            title=\\\"Prev\\\">\\n                            <i class=\\\"fa fa-chevron-left\\\" style=\\\"color:#707070;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(1)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                            title=\\\"Next\\\">\\n                            <i class=\\\"fa fa-chevron-right\\\" style=\\\"color:#707070;\\\"></i>\\n                            </button>\\n                        </div>\\n                        </div>\\n                    </div>\\n                    </div>\\n                </div>\\n                </div>\\n        </div>\\n    </div>\\n    <!-- <div class=\\\"col-md-12\\\">\\n    </div> -->\\n  </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"newRule\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n          <div class=\\\"modal-content\\\">\\n            <div class=\\\"modal-header modal-header-info\\\">\\n              <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                <span aria-hidden=\\\"true\\\">&times;</span>\\n              </button>\\n              <h4 class=\\\"modal-title\\\">\\n                <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>New Rule</h4>\\n            </div>\\n            <div class=\\\"modal-body\\\">\\n             <div class=\\\"row\\\">   \\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Request Category</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"categories\\\" [(ngModel)]=\\\"newRule.type\\\" placeholder=\\\"Select a Type\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Assign to</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groups\\\" [(ngModel)]=\\\"newRule.assigned\\\" placeholder=\\\"Select a Group\\\"\\n                        filter=\\\"filter\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>E-mail Account</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mailAccounts\\\" [(ngModel)]=\\\"newRule.account\\\" placeholder=\\\"Select an email account\\\"\\n                        filter=\\\"filter\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Request Title</label>\\n                        <input class=\\\"form-control\\\" [(ngModel)]=\\\"newRule.title\\\" placeholder=\\\"Request title\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Criteria</label>\\n                        <input class=\\\"form-control\\\" [(ngModel)]=\\\"newRule.criteria\\\" placeholder=\\\"Criteria\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Field</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"ruleFields\\\" [(ngModel)]=\\\"newRule.field\\\" placeholder=\\\"Select a Field\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Operator</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"ruleOperators\\\" [(ngModel)]=\\\"newRule.operator\\\" placeholder=\\\"Select an Operator\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n             </div>\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n              <div class=\\\"pull-right\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-success btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                <button type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\"  (click)=\\\"saveRule(newRule)\\\">Save</button>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n    </div>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n/***/ }),\n/* 867 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"clientsettings\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Settings\\n      <small>User Settings</small>\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/users\\\">\\n        <i class=\\\"fa fa-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Client Settings</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <!-- <button data-toggle=\\\"collapse\\\" data-target=\\\"#changePassword\\\">Change Background</button> -->\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n              <div class=\\\"box box-primary\\\" style=\\\"width:70%;min-height:450px;margin:0 auto;border-radius:25px;border:none;\\\">\\n                <div class=\\\"box-header\\\" style=\\\"background:#006EC6;border-radius: 25px 25px 0px 0px;height:60px;\\\">\\n                      <div class=\\\"pull-left no-padding\\\" style=\\\"text-align:right;font-size:20px;color:white;\\\">General Settings</div>\\n                    <!-- <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button> -->\\n                </div>\\n                <div class=\\\"box-body\\\">\\n                  <div class=\\\"pull-left no-padding\\\" style=\\\"height:80%;width:100%;\\\">\\n                    <div class=\\\"col-xs-6\\n                     col-md-6 col-lg-6\\\">\\n                     <div class=\\\"col-md-12\\\">\\n                      <div class=\\\"pull-left setting-element\\\" style=\\\"height: 90px;width: 90px;background:white;border-radius: 50%;margin-left: 25%;margin-top: 20px;border: 7px solid white;box-shadow: grey -1px 0px 10px -2px;position:relative;padding:1px;\\\">\\n                        <div id=\\\"user-profile-picture\\\" style=\\\"height: 75px;width: 75px;background: transparent;border-radius: 50%;box-shadow: grey -1px 0px 10px -2px; overflow:hidden;position:relative;\\\" (mouseenter)=\\\"showChangePicture('logo')\\\" (mouseleave)=\\\"showChangePicture('logo')\\\">\\n                          <div style=\\\"height: 100%;width: 100%;background: white;position: relative;\\\">\\n                            <img src=\\\"{{ mainLogo }}\\\" id=\\\"logo-img\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"margin-left: 1px;width: 95%;margin-top: 5%;\\\">\\n                            <div id=\\\"change-logo\\\" class=\\\"upload-picture-btn-wrapper\\\" style=\\\"position: absolute;background: rgba(56, 169, 249, 0.71);height: 100%;width: 100%;top: 0px;color: white;text-align: center;padding-top: 30px;display:none;\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\"  name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"onBasicUpload($event,'mainlogo')\\\"></div>\\n                          </div>\\n                        </div>\\n                      </div>\\n                     </div>\\n                     <div class=\\\"pull-left\\\" style=\\\"margin-top: 10px;margin-left:18%;font-weight: bold;color: #707070;\\\"><p style=\\\"text-align: center;\\\">Change Company Logo<br> (300x96 px)</p></div>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-md-6 col-lg-6\\\">\\n                      <div class=\\\"col-md-12\\\">\\n                        <div class=\\\"pull-left setting-element\\\" style=\\\"height: 90px;width: 90px;background:white;border-radius: 50%;margin-left: 25%;margin-top: 20px;border: 7px solid white;box-shadow: grey -1px 0px 10px -2px;position:relative;padding:1px;\\\">\\n                          <div id=\\\"user-profile-picture\\\" style=\\\"height: 75px;width: 75px;background: transparent;border-radius: 50%;box-shadow: grey -1px 0px 10px -2px; overflow:hidden;position:relative;\\\" (mouseenter)=\\\"showChangePicture('background')\\\" (mouseleave)=\\\"showChangePicture('background')\\\">\\n                            <div style=\\\"height: 100%;width: 100%;background: white;position: relative;\\\">\\n                              <img id=\\\"background-img\\\" src=\\\"{{ loginBack }}\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"margin-left: -20px;height: 100%;\\\">\\n                            </div>\\n                            <div id=\\\"change-background\\\" class=\\\"upload-picture-btn-wrapper\\\" style=\\\"position: absolute;background: rgba(56, 169, 249, 0.71);height: 100%;width: 100%;top: 0px;color: white;text-align: center;padding-top: 30px;display:none;\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\"  name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"onBasicUpload($event,'background')\\\"></div>\\n                          </div>\\n                        </div>\\n                      </div>\\n                      <div class=\\\"pull-left\\\" style=\\\"margin-top: 10px;margin-left:17%;font-weight: bold;color: #707070;\\\"><p style=\\\"text-align: center;\\\">Change Login Background <br>(1920x1080 px)</p></div>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-md-12 col-lg-12 pull-right\\\" style=\\\"height:80%;padding:0px 10px;margin-top:50px;\\\">\\n                      <ul style=\\\"list-style: none;margin-top:10px;\\\">\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Company Name:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.companyname\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">Subscription Email Account:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.email\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;margin-top:20px;\\\">Usage Policies:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:auto;margin-bottom:5px;margin-top:20px;\\\"><textarea [(ngModel)]=\\\"client.policies\\\" style=\\\"width:100%;max-width: 100%;max-height: 150px;background: transparent;border: none;margin: 0px;padding-top:10px;\\\"></textarea></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">Notification Email Account:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\"  [(ngModel)]=\\\"client.emailnotif\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">Notification Email Password:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\">\\n                                <input type=\\\"password\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"client.password\\\">\\n                              </div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">Host:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.host\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\"> IMAP Port:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.imap\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">SMTP Port:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.smtp\\\"></div>\\n                            </div>\\n                          </li>\\n                      </ul>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"min-height:65px;position:relative;\\\">\\n                    <div class=\\\"pull-right\\\" style=\\\"margin-top: 15px;\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-toggle=\\\"modal\\\" data-target=\\\"#changePassword\\\"> Preview </button>\\n                      <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validate()\\\" (click)=\\\"saveCompanyDetails()\\\"> Save</button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"changePassword\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"width:980px;\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n              <span aria-hidden=\\\"true\\\">&times;</span>\\n            </button>\\n          <h4 class=\\\"modal-title\\\">Change Login Theme</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"box box-primary\\\" style=\\\"width:950px;min-height:450px;margin:0 auto;border-radius:25px;border:none;\\\">\\n              <div class=\\\"box-body\\\">\\n                <div id=\\\"preview-background\\\" [ngStyle]=\\\"myLoginStyle\\\"> \\n                  <div class=\\\"col-md-5 col-lg-7\\\">\\n          \\n                  </div>\\n                  <div style=\\\"border-top: 1200px solid rgba(255, 255, 255, 0.8);border-left: 120px solid transparent;height: 100%;float: right;width:395px;\\\" id=\\\"login-rigth\\\">\\n                  </div>\\n                  <div id=\\\"login-nx\\\" style=\\\"right: 5%;\\\">\\n                      <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;width:285px;margin-left: 15px;\\\">\\n                        <img id=\\\"preview-logo\\\" src=\\\"{{ mainLogo }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto;margin-left: 15px;margin-top:0;height: 95px;width:auto;\\\">\\n                      </div>\\n                      <form id=\\\"formLogin\\\" style=\\\"margin-top:50px;\\\">\\n                        <div class=\\\"form-group has-feedback\\\" style=\\\"border-bottom: solid #0ca8da 2px;width:150px;text-align: center;margin-left: 105px;\\\">\\n                          <i class=\\\"sq sq-profiles\\\"></i>\\n                        </div>\\n                        <div class=\\\"form-group has-feedback\\\" style=\\\"border-bottom: solid #0ca8da 2px;width:150px;text-align: center;margin-left: 105px;\\\">\\n                          <i class=\\\"sq sq-administrator\\\"></i>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;margin-top:50px;\\\">\\n                            <div style=\\\"width: 75px;border-radius: 50px;background: #0ca8da;color: white;margin-left: 145px;font-size: 12px;height: 25px;padding-top: 4px;\\\">\\n                              LOG IN\\n                            </div>\\n                          </div>\\n                        </div>\\n                        <div class=\\\"row\\\" style=\\\"padding-top: 20px;text-align:center;margin-left:40px;\\\">\\n                          <div><p> Forgot Password?</p></div>\\n                        </div>\\n                      </form>\\n                  </div>\\n                </div>  \\n              </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n</section>\";\n\n/***/ }),\n/* 868 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"clientsettings\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Workflow\\n      <small>DailyBoard</small>\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/users\\\">\\n        <i class=\\\"fa fa-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">DailyBoard</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"pull-left col-md-4 no-padding\\\">\\n        <div class=\\\"pull-left col-md-4\\\" *ngIf=\\\"scrollOn==false\\\" style=\\\"height: 50px;\\\" (click)=\\\"startScroll(true)\\\"><div style=\\\"width:35px;height:35px;text-align:right;margin-top:15px;\\\"><i class=\\\"sq sq-forwardarrow\\\"></i></div></div>\\n        <div class=\\\"pull-left col-md-4\\\" *ngIf=\\\"scrollOn==true\\\" style=\\\"height: 50px;\\\"  (click)=\\\"startScroll(false)\\\"><div style=\\\"width:35px;height:35px;text-align:right;margin-top:15px;\\\"><i class=\\\"sq sq-close-bg\\\"></i></div></div>\\n        <div class=\\\"pull-right col-md-8\\\" style=\\\"height: 50px;font-weight: bold;font-size: 18px;text-align: right;padding-top: 10px;padding-right: 30px;\\\">\\n            {{teamDisplay}}\\n        </div>\\n        <div id=\\\"burndown-scroll\\\" class=\\\"pull-left col-md-10\\\"  style=\\\"height:700px;overflow:scroll;margin-left:55px;\\\" detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n          <div *ngIf=\\\"groupUsers || groupUsers.users.length == 0\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" id=\\\"burndown-dashboard\\\" class=\\\"col-md-12\\\" style=\\\"max-height:250px;margin-bottom:70px;\\\">\\n              <div class=\\\"box box-success burndown-border\\\">\\n                <div class=\\\"box-header with-border border-burndown\\\">\\n                  <div class=\\\"col-md-12 btns-burndown\\\" style=\\\"padding:0;\\\">\\n                    <div class=\\\"box-tittle BurnDown\\\" style=\\\"padding-top: 5px;\\\">\\n                      <i class=\\\"sq sq-burndown\\\" aria-hidden=\\\"true\\\"></i>\\n                      <div class=\\\"burndownsprint\\\">BurnDown for {{grp.title}}</div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div class=\\\"box-body\\\">\\n                  <p-chart id=\\\"burndowndata-dashboard\\\" type=\\\"line\\\" [data]=\\\"grp.burndownData\\\" (onDataSelect)=\\\"chartClicked($event)\\\" height=\\\"250px\\\"></p-chart>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          </div>\\n      </div>\\n      <div class=\\\"pull-right  col-md-8\\\">\\n        <!-- <button data-toggle=\\\"collapse\\\" data-target=\\\"#changePassword\\\">Change Background</button> -->\\n        <div class=\\\"col-md-3 no-padding\\\">\\n          <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"width:95%;margin-left:2px;\\\">\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-11 no-padding\\\" style=\\\"margin-left:10px;\\\">\\n              <h3 class=\\\"box-title\\\">\\n              <i class=\\\"sq sq-todolist\\\"></i> TO DO</h3>\\n            </div>\\n          </div>\\n          <div class=\\\"table-body pull-left box-solid body-dailyboard\\\" style=\\\"max-height: 700px;overflow:scroll;background:transparent;padding-top:10px;\\\"  detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" style=\\\"height:300px;background:white;margin-bottom:20px;margin-left:5px;\\\" class=\\\"col-md-11 dailyboard-column no-padding\\\">\\n              <div *ngFor=\\\"let tk of grp.tasks.today\\\" class=\\\"dailyboard-tile dailyboard-tile-{{tk.label}} pull-left\\\">\\n                <div class=\\\"col-md-8 no-padding\\\" style=\\\"border-right:1px white;\\\">{{tk.task_id}}</div>\\n                <div class=\\\"col-md-4 no-padding\\\" (click)=\\\"showModal(tk)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\" style=\\\"cursor: pointer;\\\"><i class=\\\"sq sq-search\\\"></i></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-md-3 no-padding\\\" style=\\\"background:transparent;\\\">\\n          <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"width:95%;margin-left:2px;\\\">\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-11 no-padding\\\" style=\\\"margin-left:10px;\\\">\\n              <h3 class=\\\"box-title\\\">\\n              <i class=\\\"sq sq-record-progress\\\"></i> IN PROGRESS</h3>\\n            </div>\\n          </div>\\n          <div class=\\\"table-body pull-left box-solid body-dailyboard\\\" style=\\\"max-height: 700px;overflow:scroll;background:transparent;padding-top:10px;\\\"  detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" style=\\\"height:300px;background:white;margin-bottom:20px;margin-left:5px;\\\" class=\\\"col-md-11 dailyboard-column  no-padding\\\">\\n              <div *ngFor=\\\"let tk of grp.tasks.inprogress\\\" class=\\\"dailyboard-tile dailyboard-tile-{{tk.label}} pull-left\\\">\\n                <div class=\\\"col-md-8 no-padding\\\" style=\\\"border-right:1px white;\\\">{{tk.task_id}}</div>\\n                <div class=\\\"col-md-4 no-padding\\\" (click)=\\\"showModal(tk)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\" style=\\\"cursor: pointer;\\\"><i class=\\\"sq sq-search\\\"></i></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-md-3 no-padding\\\" style=\\\"background:transparent;\\\">\\n          <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"width:95%;margin-left:2px;\\\">\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-11 no-padding\\\" style=\\\"margin-left:10px;\\\">\\n              <h3 class=\\\"box-title\\\">\\n              <i class=\\\"sq sq-improving\\\"></i> IMPROVING</h3>\\n            </div>\\n          </div>\\n          <div class=\\\"table-body pull-left box-solid body-dailyboard\\\" style=\\\"max-height: 700px;overflow:scroll;background:transparent;padding-top:10px;\\\"  detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" style=\\\"height:300px;background:white;margin-bottom:20px;margin-left:5px;\\\" class=\\\"col-md-11 dailyboard-column  no-padding\\\">\\n              <div *ngFor=\\\"let tk of grp.tasks.improving\\\" class=\\\"dailyboard-tile dailyboard-tile-{{tk.label}} pull-left\\\">\\n                <div class=\\\"col-md-8 no-padding\\\" style=\\\"border-right:1px white;\\\">{{tk.task_id}}</div>\\n                <div class=\\\"col-md-4 no-padding\\\" (click)=\\\"showModal(tk)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\" style=\\\"cursor: pointer;\\\"><i class=\\\"sq sq-search\\\"></i></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-md-3 no-padding\\\" style=\\\"background:transparent;\\\">\\n          <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"width:95%;margin-left:2px;\\\">\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-11 no-padding\\\" style=\\\"margin-left:10px;\\\">\\n              <h3 class=\\\"box-title\\\">\\n              <i class=\\\"sq sq-completed\\\"></i> DONE</h3>\\n            </div>\\n          </div>\\n          <div class=\\\"table-body pull-left box-solid body-dailyboard\\\" style=\\\"max-height: 700px;overflow:scroll;background:transparent;padding-top:10px;\\\"  detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" style=\\\"height:300px;background:white;margin-bottom:20px;margin-left:5px;\\\" class=\\\"col-md-11 dailyboard-column  no-padding\\\">\\n              <div *ngFor=\\\"let tk of grp.tasks.done\\\" class=\\\"dailyboard-tile dailyboard-tile-{{tk.label}} pull-left\\\">\\n                <div class=\\\"col-md-8 no-padding\\\" style=\\\"border-right:1px white;\\\">{{tk.task_id}}</div>\\n                <div class=\\\"col-md-4 no-padding\\\" (click)=\\\"showModal(tk)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\" style=\\\"cursor: pointer;\\\"><i class=\\\"sq sq-search\\\"></i></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"changePassword\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"width:980px;\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n              <span aria-hidden=\\\"true\\\">&times;</span>\\n            </button>\\n          <h4 class=\\\"modal-title\\\">Change Login Theme</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"box box-primary\\\" style=\\\"width:950px;min-height:450px;margin:0 auto;border-radius:25px;border:none;\\\">\\n              <div class=\\\"box-body\\\">\\n                <div id=\\\"preview-background\\\" [ngStyle]=\\\"myLoginStyle\\\"> \\n                  <div class=\\\"col-md-5 col-lg-7\\\">\\n          \\n                  </div>\\n                  <div style=\\\"border-top: 1200px solid rgba(255, 255, 255, 0.8);border-left: 120px solid transparent;height: 100%;float: right;width:395px;\\\" id=\\\"login-rigth\\\">\\n                  </div>\\n                  <div id=\\\"login-nx\\\" style=\\\"right: 5%;\\\">\\n                      <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;width:285px;margin-left: 15px;\\\">\\n                        <img id=\\\"preview-logo\\\" src=\\\"{{ mainLogo }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto;margin-left: 15px;margin-top:0;height: 95px;width:auto;\\\">\\n                      </div>\\n                      <form id=\\\"formLogin\\\" style=\\\"margin-top:50px;\\\">\\n                        <div class=\\\"form-group has-feedback\\\" style=\\\"border-bottom: solid #0ca8da 2px;width:150px;text-align: center;margin-left: 105px;\\\">\\n                          <i class=\\\"sq sq-profiles\\\"></i>\\n                        </div>\\n                        <div class=\\\"form-group has-feedback\\\" style=\\\"border-bottom: solid #0ca8da 2px;width:150px;text-align: center;margin-left: 105px;\\\">\\n                          <i class=\\\"sq sq-administrator\\\"></i>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;margin-top:50px;\\\">\\n                            <div style=\\\"width: 75px;border-radius: 50px;background: #0ca8da;color: white;margin-left: 145px;font-size: 12px;height: 25px;padding-top: 4px;\\\">\\n                              LOG IN\\n                            </div>\\n                          </div>\\n                        </div>\\n                        <div class=\\\"row\\\" style=\\\"padding-top: 20px;text-align:center;margin-left:40px;\\\">\\n                          <div><p> Forgot Password?</p></div>\\n                        </div>\\n                      </form>\\n                  </div>\\n                </div>  \\n              </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal modal-task fade\\\" id=\\\"mdTask\\\" role=\\\"dialog\\\">\\n      <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n          <div class=\\\"modal-header header-project\\\">\\n            <button id=\\\"close-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n              <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n            </button>\\n            <div style=\\\"overflow-y: scroll;max-height: 25px;\\\">\\n              <h4 class=\\\"modal-title\\\">\\n                <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" \\\" + mdT.task_id + \\\" - \\\" + mdT.task_subject}}\\n              </h4>\\n            </div>\\n          </div>\\n          <div class=\\\"modal-body\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\">\\n                <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                  <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                      <li class=\\\"active\\\">\\n                        <a id=\\\"info-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#ptsk{{mdT.task_id}}\\\">Info</a>\\n                      </li>\\n                      <li>\\n                        <a id=\\\"proj-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#ptk{{mdT.task_id}}\\\">Project related</a>\\n                      </li>\\n                      <li>\\n                        <a id=\\\"adj-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#taskAdjusted\\\">Adjustments</a>\\n                      </li>\\n                      <li>\\n                        <a id=\\\"timeline-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#taskTimeline\\\">Timeline</a>\\n                      </li>\\n                      <li>\\n                          <a data-toggle=\\\"tab\\\" href=\\\"#taskForm\\\">Form</a>\\n                      </li>\\n                    </ul>\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"min-height: 390px;\\\">\\n                <div class=\\\"tab-content\\\">\\n                  <div id=\\\"ptsk{{mdT.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                      <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"mdT.task_description\\\" style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                        </div>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Status</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.status_name }}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_date}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Creator</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.creator}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Assigned to</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.asigned}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_delivery}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Points Assigned</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_points}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Points Recorded</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_pointsd}}</p>\\n                      </div>\\n                      <div *ngIf=\\\"mdT.project\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                      </div>\\n                    </div>\\n                    <div id=\\\"mdTComments\\\" class=\\\"box-footer box-comments\\\" *ngIf=\\\"mdT.comments && mdT.comments.length > 0\\\" style=\\\"max-height: 130px; overflow-y:scroll; background-color:rgb(238, 242, 244);padding-top: 0px;\\\">\\n                      <div class=\\\"content-comments-users scrollable\\\" style=\\\"max-height:273px; font-size: 14px;\\\">\\n                        <ul class=\\\"timeline comment-timeline-tk\\\">\\n                          <li *ngFor=\\\"let cpm of mdT.comments\\\" style=\\\"margin-top:5px;\\\">\\n                            <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 25px;width: 25px;\\\">\\n                              <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 20px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                            </div>\\n                            <div class=\\\"timeline-item comment-timeline-item\\\">\\n                              <span class=\\\"time\\\">\\n                                {{cpm.note_date}}</span>\\n                              <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:rgb(130, 145, 152);font-size: 14px;\\\">\\n                                <b>{{cpm.creator + \\\" \\\"}}</b> Commented\\n                              </h3>\\n                              <div class=\\\"timeline-body\\\" style=\\\"overflow-y: scroll; background-color: transparent; max-height:200px; padding-bottom: 1px;\\\">\\n                                <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                  <div class=\\\"col-xs-12 col-md-12\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12 comment-user\\\" style=\\\"background-color:rgb(238, 242, 244); padding-left: 1px; padding-right: 0px;\\\">\\n                                      <p class=\\\"comment-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                        <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(68, 180, 248); font-size: 16px;\\\"></i> {{escapeHtml(cpm.note_text)}}</p>\\n                                    </div>\\n                                  </div>\\n                                </div>\\n                              </div>\\n                            </div>\\n                          </li>\\n                        </ul>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"box-footer\\\">\\n                      <button id=\\\"comment-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#collapse1\\\"\\n                        style=\\\"color:white;background-color:rgb(36, 122, 205);width: 160px!important;\\\">\\n                        <div class=\\\"pull-left\\\">\\n                          <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:white;background-color:rgb(36, 122, 205);font-size: 16px;\\\"></i>\\n                        </div>\\n                        <div class=\\\"pull-right\\\">\\n                          Leave a Comment\\n                        </div>\\n                      </button>\\n                      <div id=\\\"collapse1\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin-top: 10px;\\\">\\n                        <textarea id=\\\"text-mdTask-taskboard\\\" [(ngModel)]=\\\"note.note_text\\\" style=\\\"resize: vertical; width: 100%; height: 80px;border: 2px solid rgb(238,242,244);outline: 0px none transparent;\\\"></textarea>\\n                        <div class=\\\"pull-right\\\">\\n                          <button id=\\\"publishcomm-mdTask-taskboard\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"background-color:rgb(51, 141, 197);\\\" type=\\\"button\\\"\\n                            (click)=\\\"noteAdd(mdT.task_id, 1)\\\" [disabled]=\\\"note.text == ''\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#collapse1\\\">Publish</button>\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"box-footer\\\" *ngIf=\\\"note.attachments && note.attachments.length > 0\\\">\\n                      <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of note.attachments\\\">\\n                          <span class=\\\"mailbox-attachment-icon\\\">\\n                            <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-pdf-o\\\"*ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                            <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          </span>\\n                          <div class=\\\"mailbox-attachment-info\\\">\\n                            <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                            <span class=\\\"mailbox-attachment-size\\\">\\n                              {{att.size + ' bytes'}}\\n                            </span>\\n                          </div>\\n                        </li>\\n                      </ul>\\n                    </div>\\n                    <div class=\\\"box-footer\\\" *ngIf=\\\"mdT.attachments && mdT.attachments.length > 0\\\">\\n                      <label>Attachments ({{mdT.total_attachments}})</label>\\n                      <ul style=\\\"list-style-type:none;height:220px;overflow:scroll;width:100%;position:relative;padding-left:0px;\\\">\\n                        <li *ngFor=\\\"let att of mdT.attachments\\\" style=\\\"width:200px;margin:5px;height:225px;\\\" class=\\\"pull-left\\\">\\n                          <a id=\\\"att-mdTask-taskboard\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                            <i class=\\\"fa fa-paperclip\\\"></i>\\n                            <span class=\\\"mailbox-attachment-icon\\\">\\n                              <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-pdf-o\\\"*ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                              <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            </span>\\n                          </a>\\n                          <div class=\\\"mailbox-attachment-info\\\">\\n                            <a id=\\\"attclip-mdTask-taskboard\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                              <i class=\\\"fa fa-paperclip\\\"></i>{{ att.tsat_alias }}</a>\\n                            <span class=\\\"mailbox-attachment-size\\\">\\n                              {{att.tsat_size + ' bytes'}}\\n                            </span>\\n                          </div>\\n                        </li>\\n                      </ul>\\n                    </div>\\n                  </div>\\n                  <div id=\\\"ptk{{mdT.task_id}}\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                    <div *ngIf=\\\"mdT.project && mdT.project.length > 0\\\" class=\\\"row\\\">\\n                      <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Project Name</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_subject }}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">\\n                          {{escapeHtml(sanitizeHtml(mdT.project.proj_description))}}\\n                        </p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Project Number</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_id}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_start}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Project Creator</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.creator}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.applicant}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_end}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Progress</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_percentage + \\\"%\\\"}}</p>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"!mdT.project\\\" class=\\\"row\\\">\\n  \\n                    </div>\\n                  </div>\\n                  <div id=\\\"taskAdjusted\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                    <div *ngIf=\\\"mdT.total_adjusted && mdT.total_adjusted.length > 0 \\\" class=\\\"row\\\">\\n                      <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding-bottom: 10px;\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Task Adjusted</label>\\n                      </div>\\n                      <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"max-height:273px; font-size: 14px;\\\">\\n                        <ul class=\\\"timeline comment-timeline-tk\\\">\\n                          <li *ngFor=\\\"let adj of mdT.total_adjusted\\\" style=\\\"margin-top:5px;\\\">\\n                            <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 30px;width: 30px;\\\">\\n                              <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                            </div>\\n                            <div class=\\\"timeline-item comment-timeline-item\\\">\\n                              <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;\\\">\\n                                <b>{{adj.header}}</b>\\n                              </h3>\\n                              <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                  <div>\\n                                    <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                      <span>{{adj.points}}</span> on {{adj.date}} /\\n                                      <span>{{adj.delivery}}</span>\\n                                      <br> Reason for adjustment : {{adj.reason}} </label>\\n                                  </div>\\n                                </div>\\n                              </div>\\n                            </div>\\n                          </li>\\n                        </ul>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"!mdT.total_adjusted || mdT.total_adjusted.length == 0\\\" class=\\\"row\\\">\\n  \\n                    </div>\\n                  </div>\\n                  <div id=\\\"taskTimeline\\\" class=\\\"tab-pane fade\\\">\\n                    <div *ngIf=\\\"!mdT.timeline\\\" class=\\\"row\\\">\\n                    </div>\\n                    <div *ngIf=\\\"mdT.timeline\\\" class=\\\"row\\\">\\n                      <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"font-size: 14px;\\\">\\n                        <ul class=\\\"timeline comment-daily-timeline\\\">\\n                          <li *ngFor=\\\"let adj of mdT.timeline\\\" style=\\\"margin-top:5px;\\\">\\n                            <div class=\\\"icon-team-daily-table\\\" style=\\\"position: absolute;margin-left: 0px; height: 10px;width: 10px;\\\">\\n                              <i class=\\\"fa fa-dot-circle-o user-icon-daily\\\" aria-hidden=\\\"true\\\" style=\\\"color:#0FB4FF;; font-size: 22px;position: absolute!important;top: 4px;left: -8px;\\\"></i>\\n                            </div>\\n                            <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 20px; height: 30px;width: 30px;\\\">\\n                              <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                            </div>\\n                            <div class=\\\"timeline-item comment-timeline-item\\\">\\n                              <label class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;margin-left: 14px; margin-top: 2px;\\\">\\n                                <b>{{adj.creator}}</b>\\n                                <span style=\\\"font-weight: normal;\\\">{{\\\" \\\" + adj.tittle}}</span>\\n                              </label>\\n                              <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                  <div>\\n                                    <div class=\\\"pull-left col-xs-1 col-md-1 col-lg-1 \\\">\\n                                      <i class=\\\"{{adj.label}}\\\" [ngStyle]=\\\"adj.type == 'note' ? { 'font-size': '24px' } : adj.type == 'daily' ? { 'font-size': '28px' } : {}\\\"\\n                                        style=\\\"color:#0FB4FF\\\"></i>\\n  \\n                                    </div>\\n                                    <div *ngIf=\\\"adj.type == 'note'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                      <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                        {{escapeHtml(adj.description)}}\\n                                        <span>\\n                                          <br> Date: {{adj.date}}</span>\\n                                      </label>\\n                                    </div>\\n                                    <div *ngIf=\\\"adj.type == 'daily'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                      <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                        <br> {{adj.date}}\\n                                        <br> Description: {{escapeHtml(adj.description)}}\\n                                        <span *ngIf=\\\"adj.date != ''\\\" style=\\\"font-weight: bold;\\\">\\n                                          <br> {{adj.points}} </span>\\n                                      </label>\\n                                    </div>\\n                                  </div>\\n                                </div>\\n                              </div>\\n                            </div>\\n                          </li>\\n                        </ul>\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div id=\\\"taskForm\\\" class=\\\"tab-pane fade\\\">\\n                    <div *ngIf=\\\"!mdT.form\\\" class=\\\"row\\\">\\n  \\n                    </div>\\n                    <div *ngIf=\\\"mdT.form && mdT.form.length > 0\\\" class=\\\"row\\\">\\n                      <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"height: 407px;font-size: 14px;\\\">\\n                        <div style=\\\"text-align: left;\\\">\\n                           <span style=\\\"color:rgb(130,145,152);font-weight: bold;\\\">Category: {{mdT.form[0].cate_desc}}</span>  \\n                        </div>\\n                        <table style=\\\"text-align: center;width: 100%;\\\">\\n                            <tbody style=\\\"width: 100%;\\\">\\n                              <tr *ngFor=\\\"let fr of mdT.form\\\" style=\\\"height: 50px;\\\">\\n                                <td style=\\\"width: 40%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                  <div style=\\\"color:rgb(130,145,152);border-radius: 15px; height: 30px; border: 2px solid rgb(238,242,244); width: 100%; margin-bottom: 3px;height: 30px;overflow-y: scroll;padding-top: 4px;\\\">\\n                                      {{fr.form_field}}\\n                                  </div>\\n                                </td>\\n                                <td style=\\\"width: 60%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                    <div style=\\\"color:rgb(130,145,152); border-radius: 15px;height: 30px; border: 2px solid rgb(238,242,244); width: 100%; margin-bottom: 3px;height: 30px;overflow-y: scroll;padding-top: 4px;\\\">\\n                                        {{fr.form_data}}\\n                                    </div>\\n                                </td>\\n                              </tr>\\n                            </tbody>\\n                        </table>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"modal-footer\\\">\\n            <div id=\\\"collapse-file\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin:20px 0;\\\">\\n              <p-fileUpload #form1 name=\\\"fileUpload-Tasks\\\" (onSelect)=\\\"onChangeTask($event,'new')\\\" multiple=\\\"multiple\\\" maxFileSize=\\\"8388608\\\"\\n                [showUploadButton]=\\\"false\\\" (onRemove)=\\\"onChangeTask($event,'delete')\\\"></p-fileUpload>\\n              <button id=\\\"save-mdTask-taskboard\\\" class=\\\"btn btn-primary btn-sm\\\" type=\\\"button\\\" (click)=\\\"onUploadAttachment(mdT.task_id, form)\\\"\\n                (click)=\\\"form1.clear()\\\" [disabled]=\\\"!taskattch.attachments || taskattch.attachments.length==0\\\" data-toggle=\\\"collapse\\\"\\n                data-target=\\\"#collapse-file\\\">Save</button>\\n            </div>\\n            <button id=\\\"close2-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n\\n</section>\";\n\n/***/ }),\n/* 869 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"reports\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"fa fa-line-chart\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> REPORTS\\n      <small style=\\\"font-size:15px;\\\">Scrum</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Reports</li>\\n    </ol>\\n  </section>\\n  <div class=\\\"row\\\" style=\\\"height: 62px;background: #dce3e6;\\\">\\n    <div *ngIf = \\\"mysprints && mysprints.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top: 5px;\\\">\\n        <div class=\\\"box-header with-border\\\" style=\\\"position: relative;z-index: 2;border-bottom: none!important;text-align: center;min-width: 617px;\\\">\\n          <div class=\\\"btn btn-sm\\\" style=\\\"color:rgb(35,121,205);transform: translate(17%, 2%);\\\">\\n           <span style=\\\"font-size: 14px;font-weight: bold;padding-right: 0px;padding-left: 0px;\\\">sprint</span> \\n          </div>\\n          <p-dropdown id=\\\"ddwnr_spr\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" [dropdownIcon]=\\\"icon\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"sprint.spri_id\\\" placeholder=\\\"Select a sprint\\\" filter=\\\"filter\\\" (onChange)=\\\"showSprint(sprint.spri_id)\\\"></p-dropdown>\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);\\\" (click)=\\\"getReport()\\\"> Search</button>\\n          <!-- <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(237,59,89);\\\"><i class=\\\"fa fa-file-pdf-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i></button> -->\\n          <button type=\\\"button\\\" [disabled]=\\\"emptyReport\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" (click)=\\\"exportExcel('users')\\\"><i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i></button>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <section class=\\\"content\\\" style=\\\"padding: 0;\\\">\\n\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-1 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n        <div class=\\\"nav-tabs-sqlx-v\\\" style=\\\"min-width:150px;\\\">\\n          <ul class=\\\"col-xs-12 nav nav-groups-sqlx-r\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n            <li *ngFor=\\\"let gr of groups\\\" [ngClass]=\\\"{ 'active': gr.groupselect}\\\">\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id)\\\">\\n                <span style=\\\"text-transform: uppercase;\\\">\\n                {{gr.grop_name}}\\n              </span> \\n            </a>\\n            </li>\\n          </ul>\\n        </div>\\n      </div>\\n      <ng-template [ngIf]=\\\"tableinfo.length\\\">\\n        <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9 content-report\\\" style=\\\"margin-top: 20px; margin-left: 10px;\\\">\\n          <div class=\\\"col-sm-12 col-lg-12\\\" >\\n            <!-- nuevo -->\\n              <ul class=\\\"nav nav-pills mb-3\\\" id=\\\"pills-tab\\\" role=\\\"tablist\\\">\\n                  <li class=\\\"nav-item active\\\">\\n                    <a class=\\\"nav-link active\\\" id=\\\"pills-home-tab\\\" data-toggle=\\\"pill\\\" href=\\\"#pills-home\\\" role=\\\"tab\\\" aria-controls=\\\"pills-home\\\" aria-selected=\\\"true\\\">Users</a>\\n                  </li>\\n                  <li class=\\\"nav-item\\\">\\n                    <a class=\\\"nav-link\\\" id=\\\"pills-profile-tab\\\" data-toggle=\\\"pill\\\" href=\\\"#pills-profile\\\" role=\\\"tab\\\" aria-controls=\\\"pills-profile\\\" aria-selected=\\\"false\\\">Projects</a>\\n                  </li>\\n                </ul>\\n                <div class=\\\"tab-content\\\" id=\\\"pills-tabContent\\\">\\n                  <div class=\\\"tab-pane active\\\" id=\\\"pills-home\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"pills-home-tab\\\">\\n                   <!-- <span style=\\\"position:absolute;\\\">users</span>  -->\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0px;margin-right: -49px;\\\">\\n                      <div class=\\\"col-sm-12 col-lg-4 reports-graphics\\\" style=\\\"margin-left: 10px;margin-bottom: 20px;margin-top: 10px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;text-align: center;border-bottom: 1px solid transparent;\\\">\\n                          <span style=\\\"color:rgb(79, 93, 100);font-weight: bold;\\\">\\n                            ESTIMATED POINTS / REGISTERED POINTS -table\\n                          </span>\\n                          <div class=\\\"modal-body\\\" style=\\\"padding: 0px;\\\">\\n                            <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"margin-top: 27px;\\\">\\n                              <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"padding: 0px;height: 55px;\\\">\\n                                  <table class=\\\"table table-bordered2 table-report-u\\\" style=\\\"padding: 0px;\\\">\\n                                      <thead>\\n                                        <tr style=\\\"background-color: rgb(249, 252, 252) !important;color: rgb(130, 145, 152);text-align: center;\\\">\\n                                            <th style=\\\"width: 20%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Team</th>\\n                                            <th style=\\\"width: 40%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Estimated Points</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Registered Points</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Extra Points</th>\\n                                            <th style=\\\"width: 10%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Unit Cost</th>\\n                                        </tr>\\n                                      </thead>\\n                                    </table>\\n                              </div>\\n                              <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"padding: 0px;height: 330px;overflow: scroll;\\\"> \\n                                  <table class=\\\"table table-bordered2 table-report-u\\\">\\n                                      <tbody *ngIf=\\\"tableinfoU && tableinfoU.length > 0\\\">\\n                                        <tr *ngFor=\\\"let tbu of tableinfoU\\\">\\n                                          <td style=\\\"width: 20%;font-size: 12px;\\\"> {{tbu.task_assigned}}</td>\\n                                          <td style=\\\"width: 40%;font-size: 12px;\\\"> {{tbu.points_e}}</td>\\n                                          <td style=\\\"width: 15%;font-size: 12px;\\\"> {{tbu.pointse_r}} </td>\\n                                          <td *ngIf=\\\"tbu.typeextrapoints == 'negative'\\\"  style=\\\"width: 15%;font-size: 12px;\\\"> {{tbu.pointsd_p}}</td>\\n                                          <td *ngIf=\\\"tbu.typeextrapoints == 'positive'\\\"  style=\\\"width: 15%;font-size: 12px;\\\"> {{tbu.pointsd_ext}}</td>\\n                                          <td *ngIf=\\\"tbu.typeextrapoints == 'zero'\\\"  style=\\\"width: 15%;font-size: 12px;\\\"> {{tbu.pointsd_ext}}</td>\\n                                          <td style=\\\"width: 10%;font-size: 12px;\\\"> {{tbu.unitcost}} </td>\\n                                        </tr>\\n                                      </tbody>\\n                                    </table>\\n                              </div>\\n                            </div>\\n                          </div>\\n                          \\n                        </div>\\n                      </div>\\n                      <div class=\\\"col-sm-12 col-lg-8 reports-graphics\\\" style=\\\"margin-left: 30px;margin-bottom: 20px;margin-top: 10px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;text-align: center;border-bottom: 1px solid transparent;\\\">\\n                          <span style=\\\"color:rgb(79, 93, 100);font-weight: bold;\\\">\\n                            ESTIMATED POINTS / REGISTERED POINTS -graphic\\n                          </span>\\n                          <div id = \\\"canvasBarContainer\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 estimaed-points-bar\\\" style=\\\"margin-top: 46px; height: 288px;text-align: center;max-width: 750px;\\\">\\n                            <!-- <canvas id=\\\"canvas-bar\\\">\\n                            </canvas> -->\\n                            <p-chart id=\\\"canvas-bar\\\" type=\\\"bar\\\" [data]=\\\"databar\\\" [options]=\\\"optionsbar\\\"></p-chart>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"tab-pane fade\\\" id=\\\"pills-profile\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"pills-profile-tab\\\">\\n                      <!-- <span style=\\\"position:absolute;\\\">projects</span>  -->\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0px;margin-right: -49px;\\\">\\n                      <div class=\\\"col-sm-12 col-lg-4 reports-graphics\\\" style=\\\"margin-left: 10px;margin-bottom: 20px;margin-top: 10px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;text-align: center;border-bottom: 1px solid transparent;\\\">\\n                          <span style=\\\"color:rgb(79, 93, 100);font-weight: bold;\\\">\\n                             PROJECTS SPRINT PROGRESS -table\\n                          </span>\\n                          <div class=\\\"modal-body\\\" style=\\\"padding: 0px;\\\">\\n                            <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"margin-top: 27px;\\\">\\n                              <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"padding: 0px;height: 55px;\\\">\\n                                  <table class=\\\"table table-bordered2 table-report-u\\\" style=\\\"padding: 0px;\\\">\\n                                      <thead>\\n                                        <tr style=\\\"background-color: rgb(249, 252, 252) !important;color: rgb(130, 145, 152);text-align: center;\\\">\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">#Project</th>\\n                                            <th style=\\\"width: 40%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Description</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Registered Points</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Cost</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Cost Point</th>\\n                                        </tr>\\n                                      </thead>\\n                                    </table>\\n                              </div>\\n                              <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"padding: 0px;height:330px;overflow: scroll;\\\"> \\n                                  <table class=\\\"table table-bordered2 table-report-u\\\">\\n                                      <tbody *ngIf=\\\"projectsnames && projectsnames.length > 0\\\">\\n                                        <tr *ngFor=\\\"let pjn of projectsnames\\\">\\n                                          <td *ngIf=\\\"pjn.proj_id != 0\\\" style=\\\"width: 15%;font-size: 12px;\\\"> {{pjn.proj_id}}</td>\\n                                          <td *ngIf=\\\"pjn.proj_id == 0\\\" style=\\\"width: 15%;font-size: 12px;\\\"> - </td>\\n                                          <td style=\\\"width: 40%;font-size: 12px;\\\">\\n                                              <div style=\\\"height: 38px; overflow: scroll;\\\">{{pjn.descr}}</div> </td>\\n                                          <td style=\\\"width: 15%;font-size: 12px;\\\"> {{pjn.sum_dailpoints}} </td>\\n                                          <td style=\\\"width: 15%;font-size: 12px;\\\"> {{pjn.cost}}</td>\\n                                          <td style=\\\"width: 15%;font-size: 12px;\\\"> {{pjn.total_cost}} </td>\\n                                        </tr>\\n                                      </tbody>\\n                                    </table>\\n                              </div>\\n                            </div>\\n                          </div>\\n                        </div>\\n                      </div>\\n                      <div class=\\\"col-sm-12 col-lg-8 reports-graphics\\\" style=\\\"margin-left: 30px;margin-bottom: 20px;margin-top: 10px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;text-align: center;border-bottom: 1px solid transparent;\\\">\\n                          <span style=\\\"color:rgb(79, 93, 100);font-weight: bold;\\\">\\n                             PROJECTS SPRINT PROGRESS -graphic\\n                          </span>\\n                          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 projectsprint-pie\\\" style=\\\"padding: 10px;height: auto;\\\">\\n                            <p-chart id=\\\"canvas-pie\\\" type=\\\"pie\\\" [data]=\\\"datapie\\\" [options]=\\\"optionspie\\\"></p-chart>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <!-- fin nuevo -->\\n          </div>\\n          <div class=\\\"col-sm-12 col-lg-12 reports-table\\\">\\n            <table id=\\\"results\\\" class=\\\"table table-bordered2 table-hover table-striped table-role\\\">\\n                <thead>\\n                <th style=\\\"width: 10%;\\\">#Project</th>\\n                <th style=\\\"width: 10%;\\\">#Task</th>\\n                <th style=\\\"width: 10%;\\\">Date</th>\\n                <th style=\\\"width: 12,5%;\\\">Registered Points</th>\\n                <th style=\\\"width: 12,5%;\\\">Estimated Points / Tasks Points</th>\\n                <th style=\\\"width: 12,5%;\\\">Completed Points / Tasks Points</th>\\n                <th style=\\\"width: 12,5%;\\\">Project Creator / Tasks Assigned</th>\\n                <th style=\\\"width: 20%;\\\">Description</th>\\n                </thead>\\n                <tbody *ngIf=\\\"tableinfo && tableinfo.length > 0\\\">\\n                <tr *ngFor=\\\"let tb of tableinfo\\\">\\n                    <td *ngIf=\\\"tb.proj_id\\\"> {{tb.proj_id}} </td>\\n                    <td *ngIf=\\\"!tb.proj_id\\\"> - </td>\\n                    <td> {{tb.task_id}} </td>\\n                    <td> {{tb.dail_date}} </td>\\n                    <td> {{tb.dail_points}}</td>\\n                    <td> {{tb.task_points}}</td>\\n                    <td> {{tb.task_pointsd}}</td>\\n                    <td> {{tb.task_assigned}} </td>\\n                    <td> \\n                    <div style=\\\"height: 92px; overflow: scroll;\\\">\\n                        {{tb.task_subject}} \\n                        </div>\\n                    </td>\\n                </tr>\\n                </tbody>\\n            </table>\\n        </div>\\n  \\n        </div>\\n      </ng-template>\\n      <ng-template [ngIf]=\\\"isLoading\\\">\\n        <div class=\\\"col-xs-10 empty-report\\\">\\n          <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\"></i>\\n          <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n        </div>\\n      </ng-template>\\n      <ng-template [ngIf]=\\\"emptyReport\\\">\\n        <div class=\\\"col-xs-10 empty-report\\\"> \\n          No data\\n        </div>\\n      </ng-template>\\n    </div>\\n\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdReport\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff; font-size: 20px;\\\"></i>\\n          report\\n          <button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\"></h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>Group</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>Group</p>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>Start Date:</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>Start Date</p>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>End Date:</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>End Date</p>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>Points:</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>Points</p>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>Description:</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>Description</p>\\n            </div>\\n          </div>\\n        </div>\\n\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddReport\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n          <span>NEW REPORT</span>\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\"></h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <!-- .row -->\\n        </div>\\n        <!-- modal-body -->\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            \\n          </div>\\n        </div>\\n        <!-- modal-footer -->\\n      </div>\\n      <!-- modal-content -->\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n  \\n</section>\";\n\n/***/ }),\n/* 870 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"guideburdown\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i>BURNDOWN GUIDE\\n      <small style=\\\"font-size:15px;\\\">User Guide</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li><a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      <li class=\\\"active\\\">Burndown Guide</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\" id=\\\"guideDashboard\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px;\\\">\\n        <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\" >\\n          <a href=\\\"../../../pdf/burndown_guide.pdf\\\" download=\\\"burndown_guide\\\" style=\\\"text-decoration: none;\\\">\\n            <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n            <p class=\\\"textDownload_userGuide\\\">Download</p>\\n          </a>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n        <div class=\\\"col-md-8\\\" style=\\\"text-align: center\\\">\\n          <img src=\\\"img/nuevomanual/dashboard.png\\\" style=\\\" width: 80%; height: 395px;\\\">\\n        </div>\\n        <div class=\\\"col-md-4\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Dashboard</h3>\\n          <p style=\\\"margin-bottom: 30px; padding-right: 118px;\\\">\\n            Once you have logged in, you will land on the dashboard module.\\n            This main screen contains at the upper side of the screen\\n            a 5 section banner, each section has a different color,\\n            representing one status each. If your profile is \\\"Regular\\n            User\\\" the information displayed here will be that related\\n            to those tasks that are assigned to you.\\n          </p>\\n          <br>\\n          <br>\\n          <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0; padding-top: 20px;\\\">\\n            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\" id=\\\"guideBurndown\\\">Burndown</h3>\\n            <p>On this chart you can see the <br> progress to your team or just to yourself.</p>\\n          </div>\\n\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n          <img src=\\\"img/nuevomanual/7.png\\\" style=\\\"width: 70%; border-radius: 20px; margin-bottom: 15px;\\\" alt=\\\"\\\">\\n          <p style=\\\"text-align: left;padding-left: 50px;\\\">You can click on line chart to use the specific <br>\\n            information of day job</p>\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/guide/3.png\\\" style=\\\" width: 80%; border-radius: 20px;\\\"><br>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px; \\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n          <img src=\\\"img/guide/4.png\\\" style=\\\"width: 78%; height: 424px;\\\" alt=\\\"\\\">\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <p style=\\\"margin-top: 113px;\\\">\\n            In order to review the progress of your team, a specific member or <br>\\n            the whole team, click the \\\"your work team\\\" option, and select a <br>\\n            departament from the menu. <br>\\n            <br>\\n            The following window will show when clicking on the \\\"Your work <br>\\n            team\\\" menu. Here you will see every departament and will be able to <br>\\n            get the progress chart according to the team selected if your Role in <br>\\n            the system is \\\"Administrator\\\". <br>\\n            <br>\\n            If your role is regular user, your name will be the only one listed here. <br>\\n            If your role ir \\\"Head of Departament\\\" you will access to all team <br>\\n            members of your group only.\\n          </p>\\n        </div>\\n      </div>\\n      <div id=\\\"guideNotifications\\\" class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"font-size: 17px;margin-top: 40px;padding-left: 6%;\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Notificacions</h3>\\n          <br>\\n          <p>\\n            The notifications containing all actions related to the <br>\\n            task assigned to you, comments made on your task, <br>\\n            and projects where you are a part of. <br>\\n            <br>\\n            You can click on the main action button of each <br>\\n            notification, this will show you information related to <br>\\n            that item. <br>\\n            <br>\\n            <em>Note: The notifications list/time line has 2 options at the <br>\\n              top, a collapse button that will hide all notifications and <br>\\n              an eraser, which will clear all your notifications.</em>\\n          </p>\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/guide/5.png\\\" style=\\\"width: 84%;\\\" alt=\\\"\\\">\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\">\\n        <div class=\\\"col-xl-12 col-sm-12 col-md-6 col-lg-6\\\">\\n          <img src=\\\"img/nuevomanual/10.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n        </div>\\n        <div class=\\\"col-xl-12 col-sm-12 col-md-6 col-lg-6\\\">\\n          <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top: 40px\\\">\\n            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">On Top</h3>\\n            <br>\\n            <p>You can view the notifications about tasks on right top:</p>\\n          </div>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\" id=\\\"viewtask\\\">\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/nuevomanual/11.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n        </div>\\n        <div class=\\\"col-md-6\\\" id=\\\"viewtask\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\"><i class=\\\"fa fa-angle-double-right\\\"\\n              aria-hidden=\\\"true\\\"></i> Task Info</h3>\\n          <br>\\n          <p style=\\\"font-size: 15px;\\\">\\n            The options \\\"View task\\\" will show the following\\n            window, containing the essential information of that\\n            task, on the first section you can find the Task number,\\n            description, creator, creation date, points assigned and developed,\\n            and the Comments that have been made for that task will be found here <br>\\n            <br>\\n          </p>\\n\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\"><i class=\\\"fa fa-angle-double-right\\\"\\n              aria-hidden=\\\"true\\\"></i> Leave a comment</h3>\\n          <br>\\n          <p style=\\\"font-size: 15px;\\\">\\n            Also, you can publish a new message on this task, click <br>\\n            on the 'Leave a Comment' button, type the message\\n            and click on \\\"Publish\\\" button.\\n            <br>\\n          </p>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: right; font-size: 16px;\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0;\\\"> Project Related <i\\n              class=\\\"fa fa-angle-double-left\\\" aria-hidden=\\\"true\\\"></i></h3>\\n          <br>\\n          <p>\\n            On the second section you<br>\\n            can find the information<br>\\n            about the project related to <br>\\n            this task.\\n            <br>\\n          </p>\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/nuevomanual/12.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/nuevomanual/13.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n        </div>\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: left; font-size: 16px; margin-top: 70px;\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0;\\\"><i class=\\\"fa fa-angle-double-right\\\"\\n              aria-hidden=\\\"true\\\"></i> Adjustments </h3>\\n          <br>\\n          <p>\\n            On the third section you can find the exactly <br>\\n            information on adjustments done about this task , if was <br>\\n            extended there will show the new delivery time and the <br>\\n            task points. You can know how many times the task was <br>\\n            extended.\\n            <br>\\n          </p>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: right; font-size: 16px; margin-top: 32px; padding-right: 0;\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0;\\\">\\n            Timeline\\n            <i class=\\\"fa fa-angle-double-left\\\" aria-hidden=\\\"true\\\"></i>\\n          </h3>\\n          <br>\\n          <p>\\n            On the fourth section show <br>\\n            timeline of registered points <br>\\n            on the daily.\\n            <br>\\n          </p> <br>\\n          <p>\\n            Note: On the fifth section will show the related form if the task <br>\\n            was created as a request on request module (to see more) <br>\\n            information go to request section), if the task was created as a <br>\\n            regular task this section will be empty.\\n          </p>\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/nuevomanual/14.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\">\\n        <div class=\\\"col-xl-12 col-sm-12 col-md-6 col-lg-6\\\">\\n          <img src=\\\"img/nuevomanual/15.png\\\" alt=\\\"\\\" style=\\\"width: 100%\\\">\\n        </div>\\n        <div class=\\\"col-xl-12 col-sm-12 col-md-6 col-lg-6\\\">\\n          <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-top:100px;\\\">\\n            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0;\\\"><i class=\\\"fa fa-angle-double-right\\\"\\n                aria-hidden=\\\"true\\\"></i> Sprint Related </h3>\\n            <br>\\n            <p> On the sixth section will show the sprint information. </p>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px; margin-bottom: 30px;\\\">\\n        <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\" >\\n          <a href=\\\"../../../pdf/burndown_guide.pdf\\\" download=\\\"burndown_guide\\\" style=\\\"text-decoration: none;\\\">\\n            <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n            <p class=\\\"textDownload_userGuide\\\">Download</p>\\n          </a>\\n        </div>\\n      </div>\\n\\n\\n    </div>\\n  </section>\\n</section>\\n\";\n\n/***/ }),\n/* 871 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"guideburdown\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> PROJECTBOARD GUIDE\\n            <small style=\\\"font-size:15px;\\\">User Guide</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li><a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            <li class=\\\"active\\\">ProjectBoard Guide</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" id=\\\"guideViewproject\\\">\\n        <!-- Section #guideViewproject -->\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px;\\\">\\n                <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\">\\n                    <a href=\\\"../../../pdf/project_board_guide.pdf\\\" download=\\\"project_board_guide\\\" style=\\\"text-decoration: none;\\\">\\n                        <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n                        <p class=\\\"textDownload_userGuide\\\">Download</p>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-md-3\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Projectboard</h3>\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">View Project</h3>\\n                    <p>\\n                        \\\"View Project\\\" option, will show the following screen, containing detailed\\n                        information of the project (Name of the Project, Creator, Group Assigned, Category,\\n                        Description, Tasks assigned to the project and Comments that have been made for that\\n                        project will be found here). In the middle of the modal will appear 3 icons, the firts\\n                        one will be active and will show on the right side the list of associated task to this\\n                        project, you can see more information to each task click on the button \\\"view more\\\" it\\n                        would be redirecting to another page to show that information.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-md-9\\\" style=\\\"text-align: center\\\">\\n                    <img src=\\\"img/nuevomanual/44.png\\\" style=\\\" width: 80%; height: 395px;\\\">\\n                </div>\\n                <div class=\\\"col-md-9\\\" style=\\\"text-align: center\\\">\\n                    <i class=\\\"fa fa-angle-double-down\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 42px; margin-top: 20px; color: rgb(35,121,205);\\\"></i>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                    <img src=\\\"img/nuevomanual/17.png\\\" style=\\\" width: 80%; margin-top: 20px;\\\">\\n                </div>\\n\\n                <div class=\\\"col-md-6\\\" style=\\\" margin-top: 30px;\\\">\\n                    <p>\\n                        When you select the second icon on the right side will show the list\\n                        of associated comments to this project, you can add more comments typing a new comment\\n                        and click on the button \\\"plus icon\\\".\\n                    </p>\\n                    <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 42px; color: rgb(35,121,205);\\\"></i>\\n                    <img src=\\\"img/nuevomanual/18.png\\\" style=\\\" width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Taskboard</h3>\\n                <p>\\n                    To access the Taskboard, on the Main navigation menu, click on the \\\"Main Control\\\" dropdown menu,\\n                    select the option called \\\"Taskboard\\\". <br><br>\\n                    Taskboard allows users (Administrators, Project Managers, Team leads and Team members) access a\\n                    graphic representation of what the status of development of the current tasks is. <br><br>\\n                    When using the taskboard you will find on top there are two buttons (to see requests and to apply a\\n                    filter), on a main screen divided in 5 columns, which are Backlog, Pending, Developing, Improving\\n                    and Complete. These columns contain all tasks that are currently in the system, according to the\\n                    user that is logged in to Squadlinx.\\n                </p>\\n                <img src=\\\"img/nuevomanual/19.png\\\" style=\\\"width: 100%;margin-bottom: 30px\\\" alt=\\\"\\\">\\n\\n                <p>There are 4 color codes for the task titles, green, yellow, red and grey</p>\\n                <ul>\\n                    <li class=\\\"listtask\\\"><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color: rgb(255,0,75)\\\"></i>\\n                        Red - Delivery date is between 1 - 3 days from the current date.</li>\\n                    <li class=\\\"listtask\\\"><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color: rgb(247,170,0)\\\"></i>Yellow\\n                        - Delivery date is between 3 - 5 days from the\\n                        current date.</li>\\n                    <li class=\\\"listtask\\\"><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color: rgb(105,195,82)\\\"></i>\\n                        Green - Delivery date is greater than 5 days from the current date.</li>\\n                    <li class=\\\"listtask\\\"><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color: rgb(179,188,191)\\\"></i>Grey\\n                        - Backlog tasks. This tasks do not expire since\\n                        they are in the backlog status still.</li>\\n                </ul>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-4\\\" style=\\\" padding-top: 52px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-bottom: 22px\\\">Main Filter <img src=\\\"img/nuevomanual/filter.svg\\\"\\n                            style=\\\"width:40px\\\"> </h3>\\n                    <p>\\n                        This button always will appear on top, if you are head of a team and have many task on your\\n                        task\\n                        board, you can filter by product, project, or by an specific user. The following window will\\n                        show when clicking on the \\\"filter\\\" button (filter icon), this 3-column window contains three\\n                        different criteria that can be used to filter down the taskboard: <br><br>\\n                        First filter - Products (on left side) <br><br>\\n                        Second filter - Projects (on middle)<br><br>\\n                        Third filter - User assigned (on right side) <br><br>\\n                        All three filters can be selected and the results will show according to the selection, to\\n                        close\\n                        and finish this process just click on \\\"Done\\\" button located on right side bottom.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-8\\\" style=\\\" padding-top: 52px;\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-1\\\" id=\\\"iconMainfil\\\">\\n                        <i aria-hidden=\\\"true\\\" class=\\\"fa fa-angle-double-left\\\" style=\\\"color:rgb(35,121,205); margin-top: 86px; font-size: 50px;\\\"></i>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-11\\\">\\n                        <img src=\\\"img/nuevomanual/20.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-8\\\" style=\\\" padding-top: 52px;padding-left: 0\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-11\\\">\\n                        <img src=\\\"img/nuevomanual/20.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                    </div>\\n                    <div id=\\\"iconRequest\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-1\\\">\\n                        <i aria-hidden=\\\"true\\\" class=\\\"fa fa-angle-double-right\\\" style=\\\"color:rgb(35,121,205); margin-top: 86px; font-size: 50px;\\\"></i>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-4\\\" id=\\\"requestTask\\\" style=\\\"padding-top: 52px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-bottom: 22px\\\">Requests on Taskboard<img\\n                            src=\\\"img/nuevomanual/imgrequests.png\\\" style=\\\"width:40px\\\"> </h3>\\n                    <p>\\n                        This button will appear on top if the user have been assigned at least one request. <br><br>\\n                        The following window will show when clicking on the \\\"Request\\\" button (speaker icon) <br><br>\\n                        Where you will see two sections, the first one (on the left side) shows a list of request\\n                        located, the second one (on the right side) shows request information, you will be able to turn\\n                        out this request on a task updating delivery date and points, to save changes click on \\\"Save\\\"\\n                        button located on bottom, to close and finish this process just click on \\\"close\\\" blue button\\n                        located on right side bottom.\\n                    </p>\\n                </div>\\n            </div>\\n\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 10%;margin-top: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">TASK CARD STRUCTURE</h3>\\n                <div style=\\\"text-align: center; \\\">\\n                    <img src=\\\"img/guide/Captaskcard.png\\\" style=\\\"width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 10%;margin-top: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">TASK CARD STRUCTURE</h3>\\n                <p>Each task displayed on taskboard according with the its status will be available certain of the next\\n                    actions:</p>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-adjust-duration\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Adjust Duration\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this a modal will show up, <br> where user have to type the reasons\\n                            for the adjust <br> and define the new delivery date.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-add\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Add a Tag\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this action a modal will show up <br> with a list of user's tags,\\n                            where can select a tag or <br> create a new one.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-record-progress\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Record Progress\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this action a modal will show up, <br> where user have to type the\\n                            description of <br> activities done for the task, select a date and <br> indicates the\\n                            number of points to register.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-sprints\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Add or delete from sprint\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this action a modal will show up <br> with a list of last 2 sprint\\n                            ,\\n                            where can select an sprint <br> with the checkbox or select none.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-close-bg\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Reject Task\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this action a modal will show up <br> where user have to type the\\n                            reasons for the rejection.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-backlog\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to backlog\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to backlog, means that the <br> task stays on sleep, until the user\\n                            decided to reject it <br> or move it to pending to work on it.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-pending\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to pending\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to pending, means that the <br> user wants to work soon on that\\n                            task.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-setup\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to developing\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to developing, means that the <br> user wants start to work on it.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 \\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-improving\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to improving\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to improving, means that the <br> task needs improvements.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-completed\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to completed\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to improving, means that the <br> task is finished.</p>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Status Task</h3>\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">BACKLOG</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            Tasks can be modified in this section, when a task is in the backlog it cannot be worked\\n                            on,\\n                            actions are restricted to a limited set of options. <br><br>\\n                            These tasks don't add up to the total amount of points for the current sprint, add can be\\n                            dragged or moved using the options button. <br><br>\\n                            The available actions for this status are:\\n                        </P>\\n                        <img src=\\\"img/nuevomanual/23.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/24.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">PENDING</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            At the top right corner of the column, a number of points is displayed <br><br>\\n                            automatically, this number indicates the amount of points that are still available to be\\n                            worked on or \\\"Pending\\\". <br><br>\\n                            If a task with 5 points assigned has been extended and now has 10 points assigned but 5\\n                            points were already used, the total will not show 10 but 5 instead. <br><br>\\n                            The available actions for this status are:\\n                        </P>\\n                        <img src=\\\"img/nuevomanual/25.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/26.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">DEVELOPING</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            At the top right corner of the Developing column a number is shown indicating the amount of\\n                            points used or worked during the current day. Task in this column correspond to the actual\\n                            work being performed by the user during the sprint. <br><br>\\n                            Once a task is completed (All points used) must be placed in the \\\"Complete\\\" column by\\n                            dragging the tile over, or using the actions button. <br><br>\\n                            if a task needs more time to be completed, users can extend it using the actions button ->\\n                            extend task and put a reason for extending the task, a new delivery date and the points to\\n                            be extended. <br><br>\\n                            The available actions for this status are:\\n                        </P>\\n                        <img src=\\\"img/nuevomanual/27.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/28.png\\\" style=\\\"width: 70%;    padding-top: 100px;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">IMPROVING</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            At the top right corner of this column a number showing the total amount of points (pending\\n                            and worked) of the tasks that are currently sitting in this status.\\n                        </P>\\n                        <p>\\n                            When a task has been completed, a supervisor or QA will verify the completeness of it. If\\n                            any issue is found or the person performing the review considers the task is missing\\n                            something, they will send the task to this status and the user assigned to it will be\\n                            notified.\\n                        </p>\\n                        <p>\\n                            This status works as an intermediate phase between completed and developing. This allows\\n                            users to hold off on those task under improving and move them to developing when they are\\n                            actually going to work on them. <br><br>\\n                            The available actions for this status are:\\n                        </p>\\n                        <img src=\\\"img/nuevomanual/29.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/30.png\\\" style=\\\"width: 70%;    padding-top: 50px;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">COMPLETE</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            When a task is moved to the 'Complete' status it indicates it has been finished by the user\\n                            assigned to it, however an extra step is needed before the task is removed from the\\n                            taskboard.\\n                        </P>\\n                        <p>\\n                            Tasks need to be closed by someone who has the right permits to do so, for instance, if the\\n                            task wasn't created by the same person the task is assigned to, the user will not be able\\n                            to\\n                            close it.\\n                        </p>\\n                        <p>\\n                            However, tasks can be sent to the improving section by the QA or testing departament or a\\n                            supervisor. <br><br>\\n                            The available actions for this status are:\\n                        </p>\\n                        <img src=\\\"img/nuevomanual/31.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/32.png\\\" style=\\\"width: 70%;    padding-top: 50px;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 60px;\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">How to adjust a task</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"col-xs-12 col-sm-11 col-md-11 col-lg-11\\\">\\n                            <p>\\n                                Under the Developing status users can adjust duration of a task on two instances, when\\n                                the points assigned to do the task already used or when the task finished on less time\\n                                than expected, the user will click on the Actions menu and select the option \\\"Adjust\\n                                duration\\\". <br>\\n                                The following window will show.\\n                            </p>\\n                            <p>\\n                                <i>Note: if you are going to add points the number must be positive if not must be\\n                                    negative.</i>\\n                            </p>\\n                            <p>\\n                                This window contains the vital information of the task and 3 input fields at the\\n                                bottom.\\n                                The first one is the New delivery date of the task, the second one for register the\\n                                amount of points to add or remove and a text description to the reason for adjustment.\\n                            </p>\\n                            <p>\\n                                Once all fields have been field, and the Save button clicked, the alert on the right\\n                                will show at the top right side of the screen, letting the user know the task has been\\n                                saved.\\n                            </p>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-1 col-md-1 col-lg-1\\\">\\n                            <i aria-hidden=\\\"true\\\" id=\\\"ajustaskicon\\\" class=\\\"fa fa-angle-double-right\\\" style=\\\"color:rgb(35,121,205); margin-top: 6px; font-size: 50px;\\\"></i>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"text-align: center; margin-top: 30px;margin-top: 30px;margin-bottom: 30px;\\\">\\n                            <img src=\\\"img/nuevomanual/successful1.svg\\\" alt=\\\"\\\" style=\\\" width: 70%; \\\">\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/nuevomanual/33.png\\\" alt=\\\"\\\" style=\\\" width: 100%; \\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                    <h3 style=\\\"color: rgb(35,121,205); font-weight: bold; margin-bottom: 40px; padding-left: 32px;\\\">How\\n                        to record the progress of a task on Taskboard?</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <p>\\n                                Under the Developing status users can register their work for the day. According to the\\n                                points designated for the dar during the sprint planning meeting, the user will click\\n                                on\\n                                the Actions menu and select the option \\\"Record Progress\\\". The following window will\\n                                show.\\n                            </p>\\n                            <p>\\n                                This window contains the vital information of the task and 3 input fields at the\\n                                bottom.\\n                                The first field is the Date that user will record the points for. A points field,\\n                                indicating the amount of points that were used and a text description, specifying what\\n                                was done.\\n                            </p>\\n                            <p>\\n                                Different validations are ran, however one of the most important is that the system\\n                                will\\n                                not allow the amount of points recorded to be greater than the points assigned to the\\n                                task.\\n                            </p>\\n                            <p>\\n                                Once all fields have been field, and the Save button clicked, the alert on the right\\n                                will show at the top right side of the screen, letting the user know the Daily has been\\n                                saved.\\n                            </p>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"text-align: center;margin-top: 30px;margin-bottom: 30px;\\\">\\n                            <img src=\\\"img/nuevomanual/successful1.svg\\\" alt=\\\"\\\" style=\\\" width: 70%; \\\">\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/nuevomanual/34.png\\\" alt=\\\"\\\" style=\\\" width: 100%; \\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-2\\\">\\n                    <h3 style=\\\"color: rgb(35,121,205); font-weight: bold; margin-bottom: 40px;\\\">Projectboard</h3>\\n                    <p>\\n                        To access the Projectboard, on the Main navigation menu, click on the \\\"Main Control\\\" dropdown\\n                        menu, select the option called \\\"Projectboard\\\". <br>\\n                        Projectboard allows users (Administrators, Project Managers and Team leads) access a graphic\\n                        representation of what the status of development of the current project are.\\n                    </p>\\n                    <p>\\n                        When using the Projectboard you will find on a main screen divided in 4 column, which are\\n                        Planning, Build Up, Implementation and Close up. These columns contain all projects that are\\n                        currently in the system.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-10\\\">\\n                    <img src=\\\"img/nuevomanual/44.png\\\" style=\\\"width: 100%; \\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <h3 style=\\\"color: rgb(35,121,205); font-weight: bold; margin-bottom: 40px;\\\">Action menu</h3>\\n                <p>Each task displayed on the Projectboard according with the its status will be available certain of\\n                    the next actions:</p>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-planning\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Planning\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>Projects listed in this section stays on sleep, until the user decided to work on it.</p>\\n                        <p>The projects will be here until some task related with this project register some <br>\\n                            progress, the system automatically change the status to Build Up.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-buildup\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Build Up\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>Projects listed in this section has related task on development.</p>\\n                        <p>The only available action for this status is:</p>\\n                        <img src=\\\"img/nuevomanual/toimplementation.svg\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-implementation\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Implementation\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>The projects listed in this section have completed their development stage.</p>\\n                        <p>The available action for this status are:</p>\\n                        <img src=\\\"img/nuevomanual/tobuildup.svg\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-closeup\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Close Up\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>The projects listed in this section have finished and all its task are closed. <br> The\\n                            available actions for this status are:</p>\\n                        <img src=\\\"img/nuevomanual/tobuildup2.svg\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n            </div>\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-sm-12 col-md-3\\\" style=\\\"margin-top: 20px\\\">\\n                    <h3 style=\\\"color: rgb(35,121,205); font-weight: bold; margin-top: 0;\\\">Workflow</h3>\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">tasklist</h3>\\n                    <p>\\n                        <br>In order to access the Tasks module, go to the main menu and click\\n                        the dropdown title \\\"Workflow\\\", according to your profile a set of options will be\\n                        shown, click \\\"Tasks\\\".\\n                        <br>\\n                        <br>\\n                        Once inside the module, the following view is displayed. A set of different buttons can\\n                        be found there, will a different actions each, such as Add, Close, Delete, Reopen and Refresh.\\n                        A search section, a column located on the left side of the screen with different categories and\\n                        a main\\n                        menu which can be used to filter the results and table where all the information related to\\n                        each\\n                        of the tasks in the\\n                        system can be found.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-9\\\" style=\\\"text-align: center; margin-top: 20px\\\">\\n                    <img src=\\\"img/guide/Cap.png\\\" style=\\\"width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-12\\\" style=\\\"margin-top: 20px\\\">\\n                    <p>\\n                        Note: The task-list (table) contains the following information: Date, task number, creator,\\n                        user\\n                        assigned to the task, description, project related, sprint related and actions.\\n                    </p>\\n                    <br>\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Appearance</h3>\\n                    <p>\\n                        The task information will have an specific color according with its status. For task closet the\\n                        background color will light gray, for deleted task the font color will be red. The action\\n                        buttons also change, for deleted task only will appear the quick view button, and on the closed\\n                        task will appear the reopen task button instead the close button.\\n                    </p>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have four options: filter by text, category, status or by page</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/14.png\\\" style=\\\"margin-top: 22px; width: 85%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by text\\n                        </h3>\\n                        <p>You can search an specific task typing a keyboard on top, which will effect the results\\n                            displayed on the table.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/15.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by category\\n                        </h3>\\n                        <p>Filter by category: To filter the results, you can click on the categories of the left-side\\n                            column or on the 'status' menu that is displayed at the top the table. When a category is\\n                            selected, a blue border can be seen on the right side of the box, indicating what category\\n                            is currently active.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/16.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 100px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by status\\n                        </h3>\\n                        <p>\\n                            As explained above, when a status is selected its bottom border turns light-blue. <br>\\n                            Note: \\\"At anytime given you can select a different category and a different status, which\\n                            will effect the results displayed on the table\\\".\\n                        </p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/17.png\\\" style=\\\"width: 72%; margin-top: 24px;\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by page\\n                        </h3>\\n                        <p>\\n                            You can navigate across the results of table, you can click on buttons angle left or angle\\n                            right to see previous and next results respectively. Also you can go directly to the first\\n                            or last page.\\n\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;font-size: 18px\\\">On top the table:</h3>\\n                <p>\\n                    The actions add, close, delete, reopen and refresh can be found on top of the table.\\n                </p>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 12%;margin-top: 40px; margin-bottom: 40px\\\">\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/newtask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Create a New task</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/closetask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Close a task</p>\\n                    </div>\\n\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/deletetask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Delete a task</p>\\n                    </div>\\n\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/reopentask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Reopen a closed task</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/reloadtask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Reload the page</p>\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <ul style=\\\"list-style: none\\\">\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                            In order to create a new task,\\n                            click the first button. Once this button is clicked a window will be show requesting the\\n                            user to fill out the information needed to create a new task.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>Select\\n                            a least one task to be\\n                            re-opened, closed or deleted, using the checkbox that will be shown on the firts column for\\n                            each task. When at least a task is selected the colors will turn brighter, indicating the\\n                            buttons are now active. When any of these 3 buttons is clicked, a confirmation dialog will\\n                            show.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>To\\n                            re-open, close or delete a\\n                            task you can do it using the action buttons described above, or you can use the bulk action\\n                            buttons at the top of the screen. These buttons will remain disabled (faded) if no task is\\n                            currently selected.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                            Refresh button, click on this\\n                            option in order to Refresh the task lists if you need to update it. \\\" The system keeps the\\n                            list up to date automatically.\\\"\\n                        </li>\\n                    </ul>\\n\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3> <br>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <i class=\\\"sq sq-view guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-quickedit  guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"fa fa-times-circle-o  guide-actions\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-eliminar guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-sprints  guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                    </div>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Inside the table:</h3>\\n                        <p>\\n                            The actions quick view, edit, close, delete, add to a sprint that can be found in front of\\n                            each task.\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-view \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Quick view (magnifiying\\n                            galss)\\n                        </h3>\\n                        <p>\\n                            When this option is selected, the <br>\\n                            following window will be displayed, <br>\\n                            containing some information related to <br> the task.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/18.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Quick view -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-quickedit \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Edit (Pencil)</h3>\\n                        <p>\\n                            A window with edition options will<br>\\n                            show. All data of the task can be edited <br>\\n                            such as: Subject, product, user <br>\\n                            assigned, delivery date, points, project <br>\\n                            assigned and task description. Nothing <br>\\n                            will be saved unless the \\\"Save\\\" button <br>\\n                            is clicked.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/19.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Edit -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"fa fa-times-circle-o\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Close (X)</h3>\\n                        <p>\\n                            if you need to close a task, click on the <br> 'x' button, a confirmation dialog will <br>\\n                            then show up requiring you to confirm <br> the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/20.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Close -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-eliminar\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Delete (trash can)</h3>\\n                        <p>\\n                            Delete (trash can) if you need to delete<br> a task (erasing all content related to it <br>\\n                            in the system) click on this button, a<br> confirmation dialog will show up, <br> requiring\\n                            you to confirm the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/20.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Deleted -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-sprints\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Add to sprint (flag)</h3>\\n                        <p>\\n                            If you need to add or delete a task from a<br> sprint click on this button, a modal will\\n                            <br> show up with a list of last 2 sprint, you<br> can select an sprint with the checkbox,\\n                            or <br> you can can select none. Nothing will be <br> saved unless the \\\"Save\\\" button is\\n                            clicked.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/21.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">How to create a Task?</h3>\\n                        <i class=\\\"sq sq-create-new-task\\\" style=\\\"font-size: 44px; color: rgb(35,121,205); position: relative; box-sizing: border-box; border: 2px solid #d2d6de; border-radius: 10px; vertical-align: bottom; position: relative;\\\"></i>\\n                        <p>\\n                            To create a Task you must click on a first <br>button (with a plus thumbtack) the next\\n                            window <br>will be shown requesting the\\n                            user to fill out<br> the information needed to create a new Task.<br> The fields subject,\\n                            product, Assign to (user),<br> delivery\\n                            date, points and description are <br>mandatory. Once the mandatory fields have <br>been\\n                            filled, and the Save button clicked,\\n                            the <br>alert on the right will show at the top <br>right side of the screen, letting the\\n                            user know<br> the Task has been created. <br><br>\\n                            Note: if the user does not select any sprint,<br> the task automatically save under backlog\\n                            status.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/newtask.png\\\" style=\\\"width: 100%; border-radius:13px;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Task</h3>\\n                <p style=\\\"padding-bottom: 15px;\\\">To get a detailed view of a specific task you can click on any field\\n                    of\\n                    the task on task list.</p>\\n                <img src=\\\"img/guide/22.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                <p style=\\\"padding-top: 20px;\\\">The following screen will be shown, containing all data related to the\\n                    task selected (1), such as information of the task, a progress bar,\\n                    attachments (files), a comments section (2) and a section showing the activities associated to the\\n                    task (3). </p>\\n                <img src=\\\"img/guide/23.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Add comments on a task</h3>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/24.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\" style=\\\"margin-bottom: 25px\\\">\\n                    <p class=\\\"textask\\\"> If you wish to leave a comment or note to a <br> task, go to the comments box\\n                        (section 2) <br> and type the comment you want to post, <br> the click on the following button\\n                        to publish <br> the comment.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/25.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\" style=\\\"margin-bottom: 25px\\\">\\n                    <p class=\\\"textask\\\"> Your comment will be show an the end of <br> the time-line. On the upper side\\n                        of\\n                        the <br> screen a notification will pop up, letting you <br> know your note was successfully\\n                        added.<br> However if the notification is not loaded, a <br> warning will show up.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/26.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\" style=\\\"margin-bottom: 25px\\\">\\n                    <p class=\\\"textask\\\"> You can also send a reply to a comment, to <br> do so, once you have found a\\n                        comment <br> click on the \\\"reply the comment\\\" and start <br> typing your reply. After writing\\n                        your <br> comment, click on the ligth blue \\\"text\\\" <br> button to send the reply.\\n                    </p>\\n                </div>\\n\\n                <div class=\\\"col-md-12 col-lg-12\\\">\\n                    <p>\\n                        The \\\"activities\\\" section (3), will show all actions related to the task, giving you a preview\\n                        of\\n                        the Daily with essential information, such\\n                        as the creation date and time of the daily, as well as the amount of points that were\\n                        registered.\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-4\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Projects</h3>\\n                    <p>To access the Projects modules, click on the \\\"Projects\\\" option of the main menu, after clicking\\n                        on the Dropdown title \\\"Worflow\\\".<br><br>\\n                        Once you have selected the Projects option, the following screen will be displayed, containing\\n                        a\\n                        search section, a column on the right side of the window will show a menu with different\\n                        categories, and a status menu which you can use to filter down the results. <br><br>\\n                        Note: The main content of the screen is a table where you can find all the information related\\n                        to every project in the system. The project list (table) will show you the following\\n                        information: Start date, project number, project creator, applicant, subject, a closed by\\n                        column, percentage of completion, and a tool-box (Actions).\\n                    </p>\\n\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-8\\\">\\n                    <img src=\\\"img/guide/27.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n        </div>\\n    </section> <!-- End Section #guideViewproject -->\\n\\n    <section class=\\\"content\\\" id=\\\"guideFilters\\\">\\n        <!-- Section #guideFilters -->\\n        <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0;\\\">\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-top: 40px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have four options: filter by text, category, status or by page</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/14.png\\\" style=\\\"margin-top: 22px; width: 85%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by text\\n                        </h3>\\n                        <p>You can search an specific task typing a keyboard on top, which will effect the results\\n                            displayed on the table.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/15.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by category\\n                        </h3>\\n                        <p>Filter by category: To filter the results, you can click on the categories of the left-side\\n                            column or on the 'status' menu that is displayed at the top the table. When a category is\\n                            selected, a blue border can be seen on the right side of the box, indicating what category\\n                            is currently active.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/16.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 100px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by status\\n                        </h3>\\n                        <p>\\n                            As explained above, when a status is selected its bottom border turns light-blue. <br>\\n                            Note: \\\"At anytime given you can select a different category and a different status, which\\n                            will effect the results displayed on the table\\\".\\n                        </p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/17.png\\\" style=\\\"width: 72%; margin-top: 24px;\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by page\\n                        </h3>\\n                        <p>\\n                            You can navigate across the results of table, you can click on buttons angle left or angle\\n                            right to see previous and next results respectively.\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;font-size: 18px\\\">On top the table:</h3>\\n                <p>\\n                    The task (table) contains the following information: Date, task number, creator, user assigned to\\n                    the task, description, project related, sprint related and actions.\\n                </p>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 12%;margin-bottom: 30px;margin-top: 30px\\\">\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/newproject.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Create a new project</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/closeproject.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Close a project</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/deletetask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Delete a project</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/reopentask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Reopen a closed project</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/reloadtask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Reload the page</p>\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <ul style=\\\"list-style: none\\\">\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                            Refresh button, click on this\\n                            option in order to Refresh the task if you need to update it. \\\" The system keeps the list\\n                            up\\n                            to date automatically.\\\"\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                            In order to create a new task,\\n                            click the 'Add' button. Once this button is clicked a window will be show requesting the\\n                            user to fill out the information needed to create a new task.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>Select\\n                            a least one task to be\\n                            re-opened, closed or deleted, using the checkbox that will be shown on the firts column for\\n                            each task.When at least a task is selected the colors will turn brighter, indicating the\\n                            buttons are now active. When any of these 3 buttons is clicked, a confirmation dialog will\\n                            show.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>To\\n                            re-open, close or delete a\\n                            task you can do it using the action buttons described above, or you can use the bulk action\\n                            buttons at the top of the screen. These buttons will remain disabled (fadded) if no task is\\n                            currently selected.\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3> <br>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <i class=\\\"sq sq-view guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-quickedit  guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"fa fa-times-circle-o  guide-actions\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-eliminar guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n\\n                    </div>\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Inside the table:</h3>\\n                        <p>\\n                            The actions quick view, edit, close, delete, add to a sprint that can be found in front od\\n                            each task.\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-view \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Quick view (magnifiying\\n                            galss)\\n                        </h3>\\n                        <p>\\n                            When this option is selected, the <br>\\n                            following window will be displayed, <br>\\n                            containing some information related to <br> the task.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/28.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Quick view -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-quickedit \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Edit (Pencil)</h3>\\n                        <p>\\n                            A window with edition options will<br>\\n                            show. All data of the task can be edited <br>\\n                            such as: Subject, product, user <br>\\n                            assigned, delivery date, points, project <br>\\n                            assigned and task description. Nothing <br>\\n                            will be saved unless the \\\"Save\\\" button <br>\\n                            is clicked.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/29.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Edit -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"fa fa-times-circle-o\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Close (X)</h3>\\n                        <p>\\n                            if you need to close a task, click on the <br> 'x' button, a confirmation dialog will <br>\\n                            then show up requiring you to confirm <br> the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/20.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Close -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-eliminar\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Delete (trash can)</h3>\\n                        <p>\\n                            Delete (trash can) if you need to delete<br> a task (erasing all content related to it <br>\\n                            in the system) click on this button, a<br> confirmation dialog will show up, <br> requiring\\n                            you to confirm the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/20.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Deleted -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">The Project</h3>\\n                <p>\\n                    The actions refresh, add, reopen, close and deleted can be found on top of the table.\\n                </p>\\n                <img src=\\\"img/guide/theproject.jpeg\\\" style=\\\"width: 100%;margin-bottom: 25px\\\" alt=\\\"\\\">\\n                <p style=\\\"margin-bottom: 58px\\\">\\n                    the following screen will be shown, containing all data related to project selected to the project\\n                    selected (1), such as basic of the project, a progress <br> bar, a milestones section (2), a\\n                    comments section (3) and a section showing the task associated to the project (4).\\n                </p>\\n                <div class=\\\"col-md-2 col-lg-2\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Milestones</h3>\\n                        <p>\\n                            A milestones is defined as a deliverable of a project. You can see the on a time line all\\n                            the milestones of the\\n                            project (section 2), each milestone has a different color and has a unique date between\\n                            creation and delivery date of the project, you can click on a icon on each milestone to see\\n                            morei nformation. </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-10 col-lg-10\\\">\\n                    <img src=\\\"img/guide/30.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n                <br><br>\\n                <br><br>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top: 40px;\\\">\\n                    <div class=\\\"col-md-6 col-lg-6\\\" style=\\\"text-align: right;\\\">\\n                        <img src=\\\"img/guide/addmilestone.svg\\\" style=\\\"width: 42%;margin-bottom: 20px\\\" alt=\\\"\\\"><i class=\\\"fa fa-angle-double-right milestone-right\\\"\\n                            aria-hidden=\\\"true\\\" style=\\\"font-size: 40px; color: rgb(35,121,205);  margin-left: 10px;\\\"></i>\\n                        <p>\\n                            Also you create a new milestone for the project, once the <br> \\\"Add milestone\\\" button is\\n                            clicked a window will be shown <br> requesting the user to fill out the information needed\\n                            to create <br> a new milestone\\n                        </p>\\n                        <i class=\\\"fa fa-angle-double-down icon-milestone\\\" aria-hidden=\\\"true\\\"></i>\\n                    </div>\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <img src=\\\"img/guide/Capmilestone.png\\\" style=\\\"width: 100%;border-radius: 3%\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-12\\\">\\n                    <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Add a comment on a project\\n                        </h3>\\n                        <p>\\n                            Also you create a new milestone for the project, once the <br> \\\"Add milestone\\\" button is\\n                            clicked a window will be shown <br> requesting the user to fill out the information needed\\n                            to create <br> a new milestone\\n                        </p>\\n                        <i class=\\\"fa fa-angle-double-down\\\" style=\\\"margin-left: 5%; color: rgb(35,121,205); font-size: 30px;\\\"\\n                            aria-hidden=\\\"true\\\"></i>\\n                        <img src=\\\"img/guide/31.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                    </div>\\n                    <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\">\\n                        <div class=\\\"guidediv\\\">\\n                            <i class=\\\"fa fa-angle-double-down doubleUp\\\" style=\\\"margin-left: 45%; color: rgb(35,121,205); font-size: 40px;\\\"\\n                                aria-hidden=\\\"true\\\"></i>\\n                            <i class=\\\"fa fa-angle-double-right doubleRigth\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 40px; color: rgb(35,121,205);  margin-left: 10px;\\\"></i>\\n                            <img src=\\\"img/guide/25.png\\\" style=\\\"width: 85%;border-radius: 3%\\\" alt=\\\"\\\">\\n                            <i class=\\\"fa fa-angle-double-down\\\" style=\\\"margin-left: 40%; color: rgb(35,121,205); font-size: 30px;\\\"\\n                                aria-hidden=\\\"true\\\"></i>\\n                            <p>\\n                                Your comment will be shown at the end time-line, On the upper side of the screen a\\n                                notification will pop up, letting you know your note was successfully added. However if\\n                                the notification is not loaded, a warning will show up.\\n                            </p>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;\\\">Associated task</h3>\\n                    <p>\\n                        The \\\"Task\\\" section (4), will show you all actions related to the task, giving you preview of\\n                        the\\n                        Task with essential information. such as the task number, description, progress bar, and\\n                        delivery date. you can browse through your task by clickingon the navigation buttons left and\\n                        Right. <br><br>\\n                        If you want to access the information of a task, just click on the task number fiel of the\\n                        list.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/33.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">REQUESTS</h3>\\n                <p>\\n                    A list containing all requesting, sorted by number, displaying the information related to the\\n                    request, status, creation date, creator, user assigned and request type.\\n                </p>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-9 \\\">\\n                    <img src=\\\"img/guide/34.png\\\" style=\\\"width: 100%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-3 \\\">\\n                    <img src=\\\"img/guide/paginator.svg\\\" style=\\\"width: 100%\\\">\\n                    <p>Note: You can browse through the request, using the navigation buttons 'previous' and 'next'.\\n                        <br><br>\\n                        At the upper section of the main screen a three section banner can be found, 3 colors each one\\n                        representing a Request type: Errors, Improving Action, and Imprementation. <br><br>\\n                        Each section will show the amount of request in the system for that type of request. You can\\n                        find updated information about the request assigned to you or your group and the ones created\\n                        by\\n                        your group. </p>\\n                </div>\\n                <br><br><br><br>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top: 20px; text-align:center\\\">\\n                    <h4 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Show category list</h4>\\n                    <p style=\\\"margin-top: 38px\\\">You can acces the list of categories for <br> each type by clicking on\\n                        the \\\"i\\\" button.</p>\\n                    <img src=\\\"img/guide/info.svg\\\" style=\\\"width: 10%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/35.png\\\" style=\\\"width: 100%\\\">\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top: 20px; text-align:center\\\">\\n                    <h4 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Create a request</h4>\\n                    <p style=\\\"margin-top: 38px\\\">According to the type of request selected,<br> you can create a new\\n                        request by clicking on<br> the “+” Button. Which will\\n                        display a window<br> with fields to be completed in order to<br> create a new request.<br><br>\\n                        If a category has associated form, the fields<br> will show on this modal, those fields are\\n                        not<br> mandatory.\\n                    </p>\\n                    <img src=\\\"img/guide/add-reqbotton.png\\\" style=\\\"border-radius: 10px;width: 10%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/add-request.png\\\" style=\\\"margin-top:20px; border-radius: 15px; width: 100%\\\">\\n                </div>\\n            </div>\\n\\n\\n\\n        </div>\\n    </section><!-- End Section #guideFilters -->\\n\\n    <section class=\\\"content\\\" id=\\\"guideRoles\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n        <!-- Section #guideRoles -->\\n        <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0;\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Roles</h3>\\n                <p>If your role in the system is “Regular User” you will have access only to those Requests assigned to\\n                    and created by you. <br>\\n                    If your role is “Head of Department” , you will have access to all requests created to and by your\\n                    team.</p>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have four options: filter by text, category, status or by page</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/14.png\\\" style=\\\"margin-top: 22px;width: 100%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by text\\n                        </h3>\\n                        <p>You can search an specific task typing a keyboard on top, which will effect the results\\n                            displayed on the table.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/36.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by creator\\n                        </h3>\\n                        <p>To filter the results, ,you can click on the blue icon that is displayed at the left top of\\n                            the table head \\\"Creator\\\" is displayed on the, showing only the requets associated with that\\n                            creator</p>\\n                        <ul>\\n                            <li>Created by me: The request created by me or my team for other users.</li>\\n                            <li>Created by me: The request created for me or my team by other users.</li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/37.png\\\" style=\\\"width: 63%\\\"><i class=\\\"fa fa-angle-double-down\\\" aria-hidden=\\\"true\\\"\\n                            style=\\\"font-size: 42px; color: rgb(35,121,205);\\\"></i>\\n                        <img src=\\\"img/guide/38.png\\\" style=\\\"width: 63%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 100px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by type\\n                        </h3>\\n                        <p>\\n                            To filter the results, you can click on the blue icon that is displayed at the left top of\\n                            the table head \\\"Request type\\\". When a type is selected, will effect the results displayed\\n                            on\\n                            the table, showing only the request type. <br><br>\\n                            Note: \\\"At anytime given you can select a different creator and a different type, which will\\n                            effect the results displayed on the table\\\". <br> <br>\\n                            Accordind to the type of request selected, you can create a new request by clickingon the\\n                            \\\"+\\\" Button. Wich will display a window with fields to be completed in order to create a new\\n                            request. <br> <br>\\n                            If a category has associated form, the fields will show on this modal, those fields are not\\n                            mandatory.\\n                        </p>\\n                    </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                            <img src=\\\"img/guide/17.png\\\" style=\\\"width: 72%; margin-top: 24px;\\\">\\n                        </div>\\n                        <div class=\\\"col-md-6\\\">\\n                            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                                <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                filter by page\\n                            </h3>\\n                            <p>\\n                                You can navigate across the results of table, you can click on buttons angle left or\\n                                angle right to see previous and next results respectively.\\n                            </p>\\n                        </div>\\n                    </div>\\n                    <br>\\n                    <br><br><br>\\n                    <div class=\\\"col-md-12\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Request Deatils</h3>\\n                        <p>When clicking on any field of a requet, you will have access to the request and the options\\n                            shown will depended on if you are the creator of the request or it the request is assigned\\n                            to you.</p>\\n                        <div class=\\\"col-md-12\\\">\\n                            <div class=\\\"col-sm-12 col-md-4\\\">\\n                                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">If you are the creator of the\\n                                    request</h3>\\n                                <p>\\n                                    If you are the creator of the request the following window will appear if you click\\n                                    on any field or on pencil button, allowing you to change essential data of request.\\n                                    The color of modal header and Icons will change according the type of the request\\n                                    for Errors will be red, Improving Actions yellow, and Implementation green.\\n                                </p>\\n                            </div>\\n                            <div class=\\\"col-sm-12 col-md-8\\\">\\n                                <img src=\\\"img/guide/39.png\\\" style=\\\"width: 100%;\\\">\\n                            </div>\\n\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <div class=\\\"col-sm-12 col-md-4\\\">\\n                            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">If the request is assigned to your own\\n                                team</h3>\\n                            <p>\\n                                If the request is assigned to you or your team the following window will appear if you\\n                                click on any field or on pencil button, allowing you to change essential data of the\\n                                task you will be able to edit it by adjusting the points and delivery date.\\n                            </p>\\n                        </div>\\n                        <div class=\\\"col-sm-12 col-md-8\\\">\\n                            <img src=\\\"img/guide/40.png\\\" style=\\\"width: 100%;\\\">\\n                        </div>\\n                    </div>\\n\\n                    <div class=\\\"col-md-12\\\">\\n                        <p>\\n                            Once a request gets approved and changes its status to \\\"Task\\\", the following window appear\\n                            if you click on any field or on search button, you will only be able <br> to access the\\n                            request information and its progress.\\n                        </p>\\n                        <img src=\\\"img/guide/41.png\\\" style=\\\"width: 100%; margin-bottom: 30px;\\\" alt=\\\"\\\">\\n                        <div class=\\\"col-md-6\\\">\\n                            <div class=\\\"text-request\\\">\\n                                <p>\\n                                    Once a request gets approved <br>\\n                                    and changes its status to \\\"Task\\\", <br>\\n                                    the following window will appear <br>\\n                                    if you click on any field or on <br>\\n                                    search button, you will only be <br>\\n                                    able to access the request <br>\\n                                    information and its progress.\\n                                </p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-md-6\\\">\\n                            <img src=\\\"img/guide/42.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                        </div>\\n                    </div>\\n\\n\\n                    <div class=\\\"col-md-12\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Status Task</h3>\\n                        <div class=\\\"col-md-6\\\">\\n                            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">BACKLOG</h3>\\n                            <P>\\n                                Task can be modified in this section, When a task is in the backlog it cannot be worked\\n                                on, actions are restricted to a limited set of options. <br><br>\\n                                These task don't add up to the total amount of points for the current sprint, add can\\n                                be\\n                                dragged or moved using the options button. <br><br>\\n                                Backlog - Actions menu\\n                            </P>\\n                        </div>\\n                        <div class=\\\"col-md-6\\\" style=\\\"border-left: 1px solid darkgray\\\">\\n\\n                            <img src=\\\"img/guide/taskgrey.svg\\\" style=\\\"width: 100%; margin-bottom: 20px\\\" alt=\\\"\\\">\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">EXTERNAL REQUESTS</h3>\\n                <p>\\n                    To access the External Requests module, click on the “External Requests\\\" option of the main menu,\\n                    after clicking on the\\n                    Dropdown title “Workflow”.\\n                    Once you have selected the External Requests option, the following screen will be displayed,\\n                    containing a search\\n                    section, a menu with different categories which you can use to filter down the results.\\n\\n                </p>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-9 \\\">\\n                    <img src=\\\"img/guide/45.png\\\" style=\\\"width: 100%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-3 \\\">\\n                    <img src=\\\"img/guide/paginator.svg\\\" style=\\\"width: 100%\\\">\\n                    <p>Note: You can browse through the request, using the navigation buttons 'previous' and 'next'.\\n                        <br><br>\\n                        At the upper section of the main screen a three section banner can be found, 3 colors each one\\n                        representing\\n                        a Request type: Errors, Improving Action, and Imprementation. <br><br>\\n                        Each section will show the amount of request in the system for that type of request. You can\\n                        find updated\\n                        information about the request assigned to you or your group and the ones created by your group.\\n                    </p>\\n                </div>\\n                <br><br><br><br>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top: 20px; text-align:center\\\">\\n\\n                    <h4 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Show category list</h4>\\n                    <p style=\\\"margin-top: 38px\\\">You can acces the list of categories for <br> each type by clicking on\\n                        the \\\"i\\\"\\n                        button.</p>\\n                    <img src=\\\"img/guide/info.svg\\\" style=\\\"width: 10%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/35.png\\\" style=\\\"width: 100%\\\">\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top: 20px; text-align:center\\\">\\n\\n                    <h4 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Create a external request</h4>\\n                    <p style=\\\"margin-top: 38px\\\">According to the type of request selected,<br> you can create a new\\n                        request by clicking\\n                        on<br> the “+” Button. Which will\\n                        display a window<br> with fields to be completed in order to<br> create a new request.<br><br>\\n                        If a category has associated form, the fields<br> will show on this modal, those fields are\\n                        not<br> mandatory.\\n                    </p>\\n                    <img src=\\\"img/guide/add-reqbotton.png\\\" style=\\\"border-radius: 10px;width: 10%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/add-extrequest.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/search-ext.png\\\" style=\\\"margin-top:50px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">Filter by text: You can search an specific <br> External Requests\\n                        typing\\n                        a keyword on<br>\\n                        top, which will effect the results displayed<br> on the table.\\n                    </p>\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/by-category.png\\\" style=\\\"margin-top:66px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top:50px; text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">Filter by category: To filter the results, you can click<br> on the on\\n                        the ‘status' menu that is displayed at the <br>top of\\n                        the table. When a category is selected, a blue <br>border can be seen on the lower sideof the\\n                        box,<br> indicating what\\n                        category is currently active.\\n\\n                    </p>\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/quick-edit.png\\\" style=\\\"margin-top:50px; border-radius: 10px; width: 110px\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">Inside the table: The actions quick view, edit and create <br>task can\\n                        be found in front of each External Requests.\\n                    </p>\\n                </div>\\n\\n\\n            </div>\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-sm-12 col-md-3\\\" style=\\\"margin-top: 20px\\\">\\n\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">ExternalTasks</h3>\\n                    <p>\\n                        <br>To access the External Tasks module, click on the “External Tasks\\\" option of the main menu,\\n                        after clicking on the\\n                        Dropdown title “Workflow”.\\n\\n                        <br>\\n                        <br>\\n                        Once inside the module, the following view is displayed. A button of Refresh can be found\\n                        there,. A search section, a\\n                        column located on the left side of the screen with different categories and a main menu which\\n                        can be used to filter the\\n                        results and a table where all the information related to each of the tasks in the system can be\\n                        found.\\n\\n                    </p>\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-9\\\" style=\\\"text-align: center; margin-top: 20px\\\">\\n                    <img src=\\\"img/guide/ext-task.png\\\" style=\\\"width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-12\\\" style=\\\"margin-top: 20px\\\">\\n                    <p>\\n                        Note: The task-list (table) contains the following information: Date, task number, creator,\\n                        user\\n                        assigned to the task,\\n                        description, project related, sprint related and actions.\\n\\n                    </p>\\n                    <br>\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Appearance</h3>\\n                    <p>\\n                        The task information will have an specific color according with its status. For task closet the\\n                        background\\n                        color will light gray, for deleted task the font color will be red. The action buttons also\\n                        change, for\\n                        deleted task only will appear the quick view button, and on the closed task will appear the\\n                        reopen task\\n                        button instead the close button.\\n                    </p>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have four options: filter by text, category, status or by page</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/14.png\\\" style=\\\"margin-top: 22px; width: 85%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by text\\n                        </h3>\\n                        <p>You can search an specific task typing a keyboard on top, which will effect the results\\n                            displayed on the\\n                            table.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/by-categoryext.png\\\" style=\\\"width: 260px\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by category\\n                        </h3>\\n                        <p>Filter by category: To filter the results, you can click on the categories of the left-side\\n                            column or on\\n                            the 'status' menu that is displayed at the top the table. When a category is selected, a\\n                            blue border\\n                            can be seen on the right side of the box, indicating what category is currently active.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/16.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 100px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by status\\n                        </h3>\\n                        <p>\\n                            As explained above, when a status is selected its bottom border turns light-blue. <br>\\n                            Note: \\\"At anytime given you can select a different category and a different status, which\\n                            will effect\\n                            the results displayed on the table\\\".\\n                        </p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/17.png\\\" style=\\\"width: 72%; margin-top: 24px;\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by page\\n                        </h3>\\n                        <p>\\n                            You can navigate across the results of table, you can click on buttons angle left or angle\\n                            right to see\\n                            previous and next results respectively. Also you can go directly to the first or last page.\\n\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;font-size: 18px\\\">On top the table:</h3>\\n                <p>\\n                    The actions refresh can be found on top of the table.\\n                </p>\\n\\n                <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                    <img src=\\\"img/guide/reloadtask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                    <p class=\\\"title-guide\\\">Reload the page</p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                <ul style=\\\"list-style: none\\\">\\n                    <li class=\\\"list-guide\\\">\\n                        <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                        Refresh button, click on this option in order to Refresh the task lists if you need to update\\n                        it. \\\" The\\n                        system keeps the list up to date automatically.\\\"\\n                    </li>\\n                </ul>\\n\\n            </div>\\n\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3> <br>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <i class=\\\"sq sq-view guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-quickedit  guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"fa fa-times-circle-o  guide-actions\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-eliminar guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                    </div>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Inside the table:</h3>\\n                        <p>\\n                            The actions quick view, edit, close, delete that can be found in front of each task.\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-view \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Quick view (magnifiying\\n                            galss)\\n                        </h3>\\n                        <p>\\n                            When this option is selected, the <br>\\n                            following window will be displayed, <br>\\n                            containing some information related to <br> the task.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/46.png\\\" style=\\\"border-radius:10px; width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Quick view -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-quickedit \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Edit (Pencil)</h3>\\n                        <p>\\n                            A window with edition options will<br>\\n                            show. All data of the task can be edited <br>\\n                            such as: Subject, product, user <br>\\n                            assigned, delivery date, points, project <br>\\n                            assigned and task description. Nothing <br>\\n                            will be saved unless the \\\"Save\\\" button <br>\\n                            is clicked.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/47.png\\\" style=\\\"border-radius: 10px; width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Edit -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"fa fa-times-circle-o\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Close (X)</h3>\\n                        <p>\\n                            if you need to close a task, click on the <br> 'x' button, a confirmation dialog will <br>\\n                            then show up\\n                            requiring you to confirm <br> the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/48.png\\\" style=\\\"border-radius: 20px; width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Close -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-eliminar\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Delete (trash can)</h3>\\n                        <p>\\n                            Delete (trash can) if you need to delete<br> a task (erasing all content related to it <br>\\n                            in the\\n                            system) click on this button, a<br> confirmation dialog will show up, <br> requiring you to\\n                            confirm the\\n                            action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/49.png\\\" style=\\\"border-radius: 20px; width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Deleted -->\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-sm-12 col-md-3\\\" style=\\\"margin-top: 20px\\\">\\n\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\"> REPORTS</h3>\\n                    <p>\\n                        <br>To access the Sprints module, go to the main menu and click on the \\\"Scrum\\\" drop-down title.\\n                        According to your profile,\\n                        a set of options will be displayed, click on “Reports\\\".\\n\\n\\n                        <br>\\n                        <br>\\n                        Once inside the module, the following view is shown. At the top you can find a Sprint Select\\n                        and\\n                        a search and two\\n                        buttons to export the reports in PDF and XLS. A column located on the left side of the screen\\n                        with different categories\\n                        that can be used to filter the results by group.\\n\\n                    </p>\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-9\\\" style=\\\"text-align: center; margin-top: 20px\\\">\\n                    <img src=\\\"img/guide/50.png\\\" style=\\\"width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/51.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top:30px;text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">A category section is located in the top center and shows the report by\\n                        Users and Projects\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/52.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">When filtered by Users it will show a table where the information\\n                        related to each of the Estimated Points / Registered\\n                        Points in the system is found\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/53.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">When filtered by Users it will show a bar chart where the information\\n                        related to each of the Estimated Points /\\n                        Registered Points in the system is located\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/54.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">When filtered by Projects it will show a table where the information\\n                        related to each of the Projects Sprint Progress in\\n                        the system is located\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/55.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">When filtered by Projects it will show a circle chart where the\\n                        information related to each of the Projects Sprint\\n                        Progress in the system is located\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/56.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">And another table which will show more detailed information on each of\\n                        the tasks assigned to the users of the group.\\n                    </p>\\n                </div>\\n            </div>\\n\\n\\n\\n\\n            <div class=\\\"col-md-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have three options: filter by sprint or by category:</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/57.png\\\" style=\\\"margin-top: 22px; width: 85%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            Filter by sprint\\n                        </h3>\\n                        <p>You can search for a specific sprint by selecting one of the ones in the options and\\n                            clicking\\n                            on Search will consult\\n                            the information of this</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/58.png\\\" style=\\\"width: 260px\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            Filter by category\\n                        </h3>\\n                        <p>To filter the results, you can click on the categories of the left-side column or on the\\n                            ‘status' menu that is\\n                            displayed at the top of the table. When a category is selected, the background of the box\\n                            changes to blue, indicating\\n                            what category is currently active.</p>\\n                    </div>\\n\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;font-size: 18px\\\">On top the table:</h3>\\n                <p>\\n                    The actions Export the reports in PDF and XLS can be found on top of the table.\\n\\n                </p>\\n\\n                <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                    <img src=\\\"img/guide/59.png\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\"border-radius:35px; width: 70%\\\">\\n                    <p class=\\\"title-guide\\\">Export PDF</p>\\n                </div>\\n\\n                <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                    <img src=\\\"img/guide/60.png\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\"border-radius:35px; width: 70%\\\">\\n                    <p class=\\\"title-guide\\\">Export Xls</p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                <ul style=\\\"list-style: none\\\">\\n                    <li class=\\\"list-guide\\\">\\n                        <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                        Export PDF, click on this option to generate a report in PDF format with the information that\\n                        has been consulted in the\\n                        previous filters and will be automatically downloaded to the computer.\\n\\n                    </li>\\n                    <br>\\n                    <li class=\\\"list-guide\\\">\\n                        <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                        Export XLS, click on this option to generate a report in excel format with the information that\\n                        has been consulted in\\n                        the previous filters and will be automatically downloaded to the computer.\\n\\n                    </li>\\n                </ul>\\n\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px; margin-bottom: 30px;\\\">\\n                <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\">\\n                    <a href=\\\"../../../pdf/project_board_guide.pdf\\\" download=\\\"project_board_guide\\\" style=\\\"text-decoration: none;\\\">\\n                        <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n                        <p class=\\\"textDownload_userGuide\\\">Download</p>\\n                    </a>\\n                </div>\\n            </div>\\n\\n\\n        </div>\\n\\n\\n    </section><!-- End Section #guideRoles -->\\n\\n</section>\";\n\n/***/ }),\n/* 872 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"guideburdown\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> LOGIN GUIDE\\n            <small style=\\\"font-size:15px;\\\">User Guide</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li><a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            <li class=\\\"active\\\">Login guide</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" id=\\\"useriguidelogin\\\">\\n        <!-- Section #useriguidelogin -->\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px;\\\">\\n                <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\" >\\n                    <a href=\\\"../../../pdf/login_guide.pdf\\\" download=\\\"login_guide\\\" style=\\\"text-decoration: none;\\\">\\n                        <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n                        <p class=\\\"textDownload_userGuide\\\" >Download</p>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-3 col-lg-3\\\">\\n                    <h1 class=\\\"tittle-userguide\\\">LOGIN</h1>\\n                    <p style=\\\"margin-right: 25%;\\\">\\n                        Once your user created by the administrator on Squadlinx system, you will receive on email with\\n                        the next information:\\n                    </p>\\n                    <p class=\\\"prf-user-guide\\\">\\n                        The user must click on the \\\"Go to Squadlinx\\\" button to continue with the activation of this\\n                        account.\\n                    </p>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 cntd-guide\\\">\\n                        <div class=\\\"button-userguide\\\" style=\\\"text-align: center;\\\">\\n                            <a style=\\\"text-decoration:none;line-height: 1.5em; font-size: 20px; color:#ffffff;\\\">\\n                                Go to Squadlinx!\\n                            </a>\\n                        </div>\\n                        <!-- <img src=\\\"img/nuevomanual/boton-login.png\\\" alt=\\\"\\\"> -->\\n                        <p>Activation to an account</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"line-userguide\\\"></div>\\n                <div id=\\\"gotosqx\\\" class=\\\"col-xs-12 col-sm-12 col-md-9 col-lg-9\\\" style=\\\"text-align: center\\\">\\n                    <img src=\\\"img/nuevomanual/1.png\\\" alt=\\\"\\\" style=\\\"margin-top: 40px;\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:30px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5 pdd-rig\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/one.png\\\" alt=\\\"\\\">\\n                        <p>Type the user email and click on \\\"Reset Password\\\" button. <br> The user will receive on his\\n                            phone on number</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-7 col-lg-7 pddlef\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/3.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:30px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5 pdd-rig\\\" style=\\\"margin-top:30px;\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/two.png\\\" alt=\\\"\\\">\\n                        <p>The user will receive on this phone an authentication code <br> that have to type on the form\\n                            fields.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-7 col-lg-7 pddlef\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/2.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:30px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-5 pdd-rig\\\">\\n                    <div id=\\\"number3\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser listtrifor\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/three.png\\\" alt=\\\"\\\">\\n                        <p>The user must to type the password.</p>\\n                    </div>\\n                    <div id=\\\"number4\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser listtrifor\\\"\\n                        style=\\\"margin-top: 10%; padding-bottom: 20px;\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/four.png\\\" alt=\\\"\\\">\\n                        <p>Once the password is obey the system specifying for define a unique password, each item will\\n                            turns out to green and the user will be able click on \\\"Save Password\\\", immediately an alert\\n                            will show at the top right side of the screen, letting the user know the changes has been\\n                            saved. </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-7 pddlef imgtrifor\\\">\\n                    <img class=\\\"circleuser\\\" src=\\\"img/nuevomanual/6.png\\\" alt=\\\"\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/4.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:100px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5 pdd-rig\\\">\\n                    <div id=\\\"number5\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/five.png\\\" alt=\\\"\\\">\\n                        <p>The system will show the login page where the user can type the username and the password on\\n                            Squadlinx System and click on the \\\"SIGN IN\\\" button.</p>\\n                        <p style=\\\"text-align:center\\\">Joe Doe <i class=\\\"fa fa-angle-double-right icon-five\\\"\\n                                aria-hidden=\\\"true\\\"></i> Username: joe.doe </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-7 col-lg-7 pddlef\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/5.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:100px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-3 col-lg-3 pdd-rig\\\">\\n                    <div id=\\\"number6\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/six.png\\\" alt=\\\"\\\">\\n                        <p>When a new user starts session for the first time will see the Squadlinx system looks like\\n                            the following image:</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-9 col-lg-9 pddlef\\\" style=\\\"z-index: 1; position: relative;\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/dashboard.png\\\" style=\\\"width: 86%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:100px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-3 col-lg-3 pdd-rig\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig\\\">\\n                        <h2 style=\\\"color: rgb(35,121,205);font-weight: bold;\\\">Introduction to Squadlinx</h2>\\n                        <p>The user will find the next sections:</p>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <img class=\\\"img-numeral\\\" src=\\\"../../../assets/public/img/nuevomanual/numeral1.png\\\" alt=\\\"\\\">\\n                            <p style=\\\"color: rgb(35,121,205);margin-bottom: 0;\\\">Menu (on left side):</p>\\n                            <p>There will the access to different modules.</p>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <img class=\\\"img-numeral\\\" src=\\\"../../../assets/public/img/nuevomanual/numeral2.png\\\" alt=\\\"\\\">\\n                            <p style=\\\"color: rgb(35,121,205);margin-bottom: 0;\\\">Menu header (on top):</p>\\n                            <p>There will be the notifications, sing off, and a link to edit user profile.</p>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <img class=\\\"img-numeral\\\" src=\\\"../../../assets/public/img/nuevomanual/numeral3.png\\\" alt=\\\"\\\">\\n                            <p style=\\\"color: rgb(35,121,205);margin-bottom: 0;\\\">Menu content (on the middle):</p>\\n                            <p> There will be the content of the active module.</p>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-9 col-lg-9 pddlef\\\" style=\\\"z-index: 1; position: relative;\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/dashboard2.png\\\" style=\\\"width: 86%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <h2 class=\\\"tittle-color\\\"> Available Actions</h2>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-dashboard iconos-squadguide\\\"></i> Dashboard</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li style=\\\"border-top: .5px solid gray;padding-top: 10px;\\\">See the notifications.</li>\\n                            <li>See the amount of task under pending, developing, improving, expiring and backlog\\n                                status.</li>\\n                            <li>See the task list on under pending, developing, improving, expiring or backlog status.\\n                            </li>\\n                            <li>See the burndown (line chart).</li>\\n                            <li class=\\\"lisguide-bottom\\\">Erase notifications.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-taskboard iconos-squadguide\\\"></i> Taskboard</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">See the task list on under backlog, pending, developing, improving\\n                                and complete status.</li>\\n                            <li>Register a task progress.</li>\\n                            <li>Update the task status.</li>\\n                            <li>Edit task under Backlog status.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Add or delete a task from a sprint.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-statustasks iconos-squadguide\\\"></i> Task</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">See the task list assigned to him.</li>\\n                            <li>Create task to assign to another user or for himself.</li>\\n                            <li>Edit, close or delete task created by him.</li>\\n                            <li>Search an specific task.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Filter tasks according with his status.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-daily iconos-squadguide\\\"></i> Daily</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">See the daily list registered by user.</li>\\n                            <li>Register a task progress.</li>\\n                            <li>Register a daily with none task associated.</li>\\n                            <li>Delete some daily.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Search an specific daily.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-requests iconos-squadguide\\\"></i> Requests</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">See the request list assigned to him.</li>\\n                            <li>Create request to assign to another user or for himself.</li>\\n                            <li>Edit and delete request created by him.</li>\\n                            <li>Search an specifi request.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Filter request according with his type or creator.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-settings iconos-squadguide\\\"></i> Settings</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">Edit personal data.</li>\\n                            <li>Change password.</li>\\n                            <li>Upload an image.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Manage the notifications.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-doc-related iconos-squadguide\\\"></i> User Guide</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-bottom\\\" style=\\\"padding-bottom: 50px; padding-top: 32px;\\\">See the user\\n                                guide.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px; margin-bottom: 30px;\\\">\\n                    <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\" >\\n                        <a href=\\\"../../../pdf/login_guide.pdf\\\" download=\\\"login_guide\\\" style=\\\"text-decoration: none;\\\">\\n                            <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n                            <p class=\\\"textDownload_userGuide\\\">Download</p>\\n                        </a>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n</section>\\n\";\n\n/***/ }),\n/* 873 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-my-groups\\\" aria-hidden=\\\"true\\\" style=\\\"color:#007BD2;font-size:20px;\\\"></i> Groups\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Groups</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <!-- /.col -->\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box-header-params\\\">\\n                    <div class=\\\"btn-groupP\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"addGroup()\\\"\\n                                style=\\\"padding: 5px 3px; background-color:white;\\\"\\n                                data-container=\\\"body\\\"  tooltipPosition=\\\"top\\\" pTooltip=\\\"Add group\\\">\\n                            <i class=\\\"sq sq-my-groups\\\" style=\\\"color:rgb(27, 110, 198); font-size: 29px;\\\"></i>\\n                            <span style=\\\"position: absolute;margin-left: -5px;margin-top: -5px;\\\"><i class=\\\"sq sq-add-1\\\"\\n                                                                                                    style=\\\"color:rgb(27, 110, 198); font-size: 10px;\\\"></i></span>\\n                        </button>\\n                        <button (click)=\\\"reload()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                            <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 33px;\\\"></i>\\n                        </button>\\n                        <button (click)=\\\"addUser()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create user\\\">\\n                            <i class=\\\"sq sq-working-team\\\" style=\\\"color:rgb(27, 110, 198); font-size: 33px;\\\"></i>\\n                            <span style=\\\"position: absolute;margin-left: -8px;\\\"><i class=\\\"sq sq-add-1\\\"\\n                                                                                   style=\\\"color:rgb(27, 110, 198); font-size: 10px;\\\"></i></span>\\n                        </button>\\n                        <button (click)=\\\"addUserGroup()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Add users\\\">\\n                            <i class=\\\"sq sq-scrum\\\" style=\\\"color:rgb(27, 110, 198); font-size: 33px;\\\"></i>\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box-params\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive\\\">\\n\\n                            <table id=\\\"results-params\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                                <thead>\\n                                <th style=\\\"width: 15%;\\\"> Group number\\n                                </th>\\n                                <th style=\\\"width: 25%;\\\">Name\\n                                </th>\\n                                <th style=\\\"width: 20%;\\\">Leader\\n                                </th>\\n                                <th style=\\\"width: 15%;\\\"> Number of Users\\n                                </th>\\n                                <th style=\\\"width: 25%;\\\">Actions</th>\\n\\n                                </thead>\\n                                <tbody>\\n                                <tr *ngFor=\\\"let gr of groups\\\">\\n                                    <td>{{gr.grop_id}}</td>\\n                                    <td>{{gr.grop_name}}</td>\\n                                    <td>{{gr.leader}}</td>\\n                                    <td>{{gr.cant_users}}</td>\\n                                    <td>\\n                                        <div class=\\\"btn-group-params\\\">\\n                                            <i class=\\\"sq sq-search cursor-elements-i-sqlx\\\" aria-hidden=\\\"true\\\" (click)=\\\"showGroup(gr)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\"></i>\\n                                            <i class=\\\"sq sq-quickedit cursor-elements-i-sqlx\\\" aria-hidden=\\\"true\\\" (click)=\\\"editGroup(gr)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"></i>\\n                                            <i class=\\\"sq sq-eliminar cursor-elements-i-sqlx\\\" aria-hidden=\\\"true\\\" (click)=\\\"deleteGroup(gr.grop_id)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\"></i>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\">\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdGroup\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"clear()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-my-groups\\\" style=\\\"color:white\\\"></i> # {{group.grop_id}} - {{group.grop_name}}\\n                        Group\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"tab-content\\\">\\n                        <div class=\\\"row\\\" style=\\\"padding: 0px;\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                     style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                    <div class=\\\"input-squadlinx\\\">\\n                                        <label style=\\\"color:rgb(130, 145, 152);\\\">Name Group</label>\\n                                        <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [disabled]=\\\"true\\\"\\n                                               [(ngModel)]=\\\"group.grop_name\\\" placeholder=\\\"Name group\\\">\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                     style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                    <div class=\\\"form-group dropdownSqlx\\\">\\n                                        <label style=\\\"color:rgb(130, 145, 152);\\\">Group leader</label>\\n                                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [disabled]=\\\"true\\\" [autoWidth]=\\\"false\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                    [options]=\\\"users\\\" [(ngModel)]=\\\"group.user_id\\\"\\n                                                    placeholder=\\\"Select user\\\"\\n                                                    filter=\\\"filter\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                                <label class=\\\"col-xs-6 col-sm-6 col-md-5 col-lg-5 label-title-squadlinx\\\">Team:</label>\\n                            </div>\\n                            <div style=\\\"width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\"\\n                                           style=\\\"margin-bottom: 0px;\\\">\\n                                        <thead>\\n                                        <th style=\\\"text-align: center; width: 20%;\\\" class=\\\"th-info-squadlinx\\\">User id</th>\\n                                        <th style=\\\"text-align: center; width: 40%;\\\" class=\\\"th-info-squadlinx\\\">Name</th>\\n                                        <th style=\\\"text-align: center; width: 40%;\\\" class=\\\"th-info-squadlinx\\\">Role</th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"max-height: 200px; overflow: scroll; width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                                        <tbody>\\n                                        <tr *ngFor=\\\"let usr of group.users\\\">\\n                                            <td style=\\\"text-align: center; width: 20%;\\\" class=\\\"td-info-squadlinx\\\">{{ usr.user_id }}</td>\\n                                            <td style=\\\"text-align: center; width: 40%; \\\" class=\\\"td-info-squadlinx\\\">{{ usr.completename }}</td>\\n                                            <td style=\\\"text-align: center; width: 40%;\\\" class=\\\"td-info-squadlinx\\\">{{ usr.role_name }}</td>\\n                                        </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask btn-close-form-sprints\\\"\\n                            data-dismiss=\\\"modal\\\"\\n                            (click)=\\\"clear()\\\">Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdEditGroup\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"clear()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-my-groups\\\" style=\\\"color:white\\\"></i> # {{group.grop_id}} - {{group.grop_name}}\\n                        Group\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"tab-content\\\">\\n                        <div class=\\\"row\\\" style=\\\"padding: 0px;\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                     style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                    <div class=\\\"input-squadlinx\\\">\\n                                        <label style=\\\"color:rgb(130, 145, 152);\\\">Name Group</label>\\n                                        <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"group.grop_name\\\"\\n                                               placeholder=\\\"Name group\\\">\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                     style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                    <div class=\\\"form-group dropdownSqlx\\\">\\n                                        <label style=\\\"color:rgb(130, 145, 152);\\\">Group leader</label>\\n                                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userListEdit\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                    [(ngModel)]=\\\"group.user_id\\\" placeholder=\\\"Select user\\\"\\n                                                    filter=\\\"filter\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                                <label class=\\\"col-xs-6 col-sm-6 col-md-5 col-lg-5 label-title-squadlinx\\\">Team:</label>\\n                            </div>\\n                            <div style=\\\"width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\"\\n                                           style=\\\"margin-bottom: 0px;\\\">\\n                                        <thead>\\n                                        <th style=\\\"text-align: center; width: 25%;\\\" class=\\\"th-info-squadlinx\\\">User id</th>\\n                                        <th style=\\\"text-align: center; width: 25%;\\\" class=\\\"th-info-squadlinx\\\">Name</th>\\n                                        <th style=\\\"text-align: center; width: 25%;\\\" class=\\\"th-info-squadlinx\\\">Role</th>\\n                                        <th style=\\\"text-align: center; width: 25%;\\\" class=\\\"th-info-squadlinx\\\">Actions</th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"max-height: 200px; overflow: scroll; width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                                        <tbody>\\n                                        <tr *ngFor=\\\"let usr of group.users\\\">\\n                                            <td style=\\\"text-align: center; width: 25%;\\\" class=\\\"td-info-squadlinx\\\">{{ usr.user_id }}</td>\\n                                            <td style=\\\"text-align: center; width: 25%; \\\" class=\\\"td-info-squadlinx\\\">{{ usr.completename }}</td>\\n                                            <td style=\\\"text-align: center; width: 25%;\\\" class=\\\"td-info-squadlinx\\\">{{ usr.role_name }}</td>\\n                                            <td style=\\\"text-align: center; width: 25%;\\\"><i class=\\\"sq sq-eliminar\\\"\\n                                                                                           aria-hidden=\\\"true\\\"\\n                                                                                           (click)=\\\"deleteUserGroup(usr)\\\"></i>\\n                                            </td>\\n                                        </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles btn-close-form-sprints\\\"\\n                            style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\" data-dismiss=\\\"modal\\\"\\n                            aria-label=\\\"Close\\\" (click)=\\\"clear()\\\">Close\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints\\\"\\n                            style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                            data-dismiss=\\\"modal\\\" (click)=\\\"saveGroup(group)\\\" [disabled]=\\\"validateGroup()\\\"> Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"addGroup\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content modal-roles\\\">\\n                <div class=\\\"modal-header header-event header-role\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                            style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\"><i class=\\\"sq sq-my-groups\\\"></i> New Group </h4>\\n                </div>\\n                <div class=\\\"modal-body scrollable md-roles\\\" style=\\\"height: 250px;\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                             style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                            <div class=\\\"input-squadlinx\\\">\\n                                <label style=\\\"color:rgb(130, 145, 152);\\\">Name Group</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"group.grop_name\\\"\\n                                       placeholder=\\\"Name group\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                             style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label style=\\\"color:rgb(130, 145, 152);\\\">Group leader</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"users\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                            [(ngModel)]=\\\"group.user_id\\\" placeholder=\\\"Select user\\\"\\n                                            filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer close-footer\\\">\\n                    <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-roles btn-close-form-sprints\\\"\\n                                style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\" data-dismiss=\\\"modal\\\"\\n                                aria-label=\\\"Close\\\">Close\\n                        </button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints\\\"\\n                                style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                                data-dismiss=\\\"modal\\\" (click)=\\\"saveGroup(group)\\\" [disabled]=\\\"validateGroup()\\\"> Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"addUser\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                            style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"sq sq-profiles\\\"></i> New User </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"form-group\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"input-squadlinx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">First Name</label>\\n                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_name\\\"\\n                                           placeholder=\\\"First Name\\\" name=\\\"letras\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"input-squadlinx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Last Name</label>\\n                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_lastname\\\"\\n                                           placeholder=\\\"Last Name\\\" name=\\\"letras\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"input-squadlinx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">E-mail Address</label>\\n                                    <input id=\\\"float-input-email2\\\" type=\\\"email\\\" class=\\\"form-control sqlx-input\\\"\\n                                           [(ngModel)]=\\\"user.user_email\\\" placeholder=\\\"jdoe@mdcloudps.com\\\"\\n                                           pattern=\\\".+@mdcloudps.com\\\" size=\\\"30\\\" (change)=\\\"verifyEmail(user.user_email)\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"inputMask-squadlinx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Phone Number</label>\\n                                    <p-inputMask mask=\\\"+99 999 9999999\\\" class=\\\"ui-g ui-fluid sqlx-inputMask\\\"\\n                                                 [(ngModel)]=\\\"user.user_phone\\\"\\n                                                 placeholder=\\\"+99 999 9999999\\\"></p-inputMask>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Role</label>\\n                                    <p-dropdown [options]=\\\"roles\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                                                dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                [(ngModel)]=\\\"user.role_id\\\" placeholder=\\\"Select a Role\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Group</label>\\n                                    <p-dropdown [options]=\\\"grouplist\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                                                dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                [(ngModel)]=\\\"user.grop_id\\\" placeholder=\\\"Select a Group\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer close-footer\\\">\\n                    <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-roles btn-close-form-sprints\\\"\\n                                style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\" data-dismiss=\\\"modal\\\"\\n                                aria-label=\\\"Close\\\">Close\\n                        </button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints \\\" style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                                data-dismiss=\\\"modal\\\" (click)=\\\"saveUser(user, 'new')\\\"\\n                                [disabled]=\\\"!user.user_name || !user.user_lastname || !user.user_phone || !user.role_id || !user.grop_id || !user.user_email || errors != 0\\\">\\n                            Save\\n                        </button>\\n                        <div *ngIf=\\\"errors > 0\\\" class=\\\"errors\\\">\\n                            <h3 id=\\\"result2\\\"></h3>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdAddUsrGroup\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div *ngIf=\\\"usersg.permits == 'false'\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"closeModal()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        Add Users to {{usersg.grop_name}} Group\\n                    </h4>\\n                </div>\\n                <div *ngIf=\\\"usersg.permits == 'true'\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"closeModal()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        Add Users to a Group\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"tab-content\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-xs-12 col-sm-4 col-md-4 inputs-mainfilter\\\"\\n                                 style=\\\"float: right;margin-bottom: 7px;margin-top: 16px;margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\"\\n                                               class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"searchuser\\\">\\n                                    </div>\\n                                    <div class=\\\"search-input-mainfilter\\\"\\n                                         style=\\\"position: absolute; right: 0; top: 2px;\\\">\\n                                        <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-4 col-md-4\\\" style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div *ngIf=\\\"usersg.permits == 'true'\\\" class=\\\"form-group dropdownSqlx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Group</label>\\n                                    <p-dropdown [options]=\\\"grouplist\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                                                dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                [(ngModel)]=\\\"usersg.grop_id\\\" placeholder=\\\"Select a Group\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div *ngIf=\\\"loadingGroup\\\" class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                                <div>\\n                                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                                </div>\\n                                <div>\\n                                    <span style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\"\\n                                           style=\\\"margin-bottom: 0px;\\\">\\n                                        <thead>\\n                                        <th style=\\\"text-align: center; width: 5%;\\\">\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 15%;\\\" class=\\\"th-info-squadlinx\\\">User id</th>\\n                                        <th style=\\\"text-align: center; width: 40%;\\\" class=\\\"th-info-squadlinx\\\">Name</th>\\n                                        <th style=\\\"text-align: center; width: 40%;\\\" class=\\\"th-info-squadlinx\\\">Role</th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"max-height: 400px;overflow: scroll;width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                                        <tbody>\\n                                        <tr *ngFor=\\\"let usr of pendingusers | filter : searchuser\\\">\\n                                            <td style=\\\"text-align: center; width: 5%;\\\">\\n                                                <div class=\\\"ui-g\\\">\\n                                                    <p-checkbox id=\\\"selusrs\\\" name=\\\"selusrs\\\" value=\\\"{{usr.user_id}}\\\"\\n                                                                label=\\\"\\\" [(ngModel)]=\\\"selusrs\\\"></p-checkbox>\\n                                                </div>\\n                                            </td>\\n                                            <td style=\\\"text-align: center; width: 15%;\\\" class=\\\"td-info-squadlinx\\\">{{usr.user_id}}</td>\\n                                            <td style=\\\"text-align: center; width: 40%;\\\" class=\\\"td-info-squadlinx\\\" >{{usr.completename}}</td>\\n                                            <td style=\\\"text-align: center; width: 40%;\\\" class=\\\"td-info-squadlinx\\\">{{usr.role_name}}</td>\\n                                        </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"pendingusers.length === 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" class=\\\"no-data-user-group\\\">\\n                    No Data\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\"\\n                            (click)=\\\"closeModal()\\\">Close\\n                    </button>\\n                    <button (click)=\\\"saveUsers(selusrs, usersg.grop_id)\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add btn-save-form-sprints\\\"\\n                            [disabled]=\\\"!selusrs || selusrs.length == 0 || usersg.grop_id == 0 \\\">\\n                        Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 874 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"sprint_det\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight: bold;\\\">\\n      <i class=\\\"icon icon-maincontrol\\\" aria-hidden=\\\"true\\\"></i>\\n      MY SPRINT {{'# ' + sprint.spri_id }}\\n      <span style=\\\"font-weight: bold; color: #737374;\\\">&nbsp;&nbsp; Group: {{ sprint.grop_name }}</span>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">My Sprint</li>\\n    </ol>\\n  </section>\\n  <div class=\\\"row\\\" style=\\\"height: 62px;background: #dce3e6;\\\">\\n    <div *ngIf=\\\"sprintslist && sprintslist.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top: 5px;\\\">\\n      <div class=\\\"box-header with-border\\\" style=\\\"position: relative;z-index: 2;border-bottom: none!important;text-align: center;min-width: 617px;\\\">\\n        <div class=\\\"btn btn-sm\\\" style=\\\"color:rgb(35,121,205);transform: translate(17%, 2%);\\\">\\n          <span style=\\\"font-size: 14px;font-weight: bold;padding-right: 0px;padding-left: 0px;\\\">sprint</span>\\n        </div>\\n        <p-dropdown id=\\\"ddwnr_spr\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" [dropdownIcon]=\\\"icon\\\" [autoWidth]=\\\"false\\\"\\n          [options]=\\\"sprintslist\\\" [(ngModel)]=\\\"mysprint.spri_id\\\" placeholder=\\\"Select a sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);\\\"\\n          (click)=\\\"updateSprint(mysprint.spri_id)\\\"> Search</button>\\n      </div>\\n    </div>\\n  </div>\\n  <section class=\\\"content\\\" style=\\\"background-color: rgb(247,251,252);\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-7\\\" style=\\\"padding-left: 0px; padding-right: 0px;margin-bottom: 5px;\\\">\\n        <!-- info sprint -->\\n        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 10px;\\\">\\n          <div class=\\\"modal-content-sprint\\\">\\n            <div class=\\\"modal-header-info-sprint\\\">\\n              <span>Sprint Info</span>\\n              <h4 class=\\\"modal-title\\\"></h4>\\n            </div>\\n            <div class=\\\"modal-body\\\">\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                  <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">Sprint Start: </label>\\n                  <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_init}}</span>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                  <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">End Date: </label>\\n                  <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_end}}</span>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                  <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">Points: </label>\\n                  <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_points}}</span>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                  <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Description: </label>\\n                  <div class=\\\"label-noedit col-xs-10 col-sm-10 col-md-10 col-lg-10 span-sqlx\\\" style=\\\"max-height: 75px; overflow: scroll;\\\">\\n                    {{sprint.spri_description}}\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <!-- end info sprint -->\\n        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right: 0px; padding-left: 0px;\\\">\\n          <!-- team -->\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"modal-content-sprint\\\">\\n              <div class=\\\"modal-header-info-sprint\\\">\\n                <span>Team</span>\\n                <h4 class=\\\"modal-title\\\"></h4>\\n              </div>\\n              <div class=\\\"modal-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                  <div class=\\\"nav-tabs-custom-spr\\\" style=\\\"overflow-x: scroll;\\\">\\n                    <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                      <li *ngFor=\\\"let tm of team; let i = index\\\" [ngClass]=\\\"{ 'active': tm.usersel}\\\">\\n                        <div *ngIf=\\\"tm.user_id != 0\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.user_name +' '+ tm.user_lastname}}\\\"\\n                          class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;background: transparent;\\\" [ngStyle]=\\\"{ 'border-color': tm.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                          <img [src]=\\\"tm.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" style=\\\"padding: 0px; width:39px;height:39px;border-radius: 50%;\\\"\\n                            class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                        </div>\\n                        <div *ngIf=\\\"tm.user_id == 0\\\" class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;\\\" [ngStyle]=\\\"{ 'background': tm.role_color}\\\">\\n                          <i class=\\\"sq sq-scrum user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 30px;\\\"></i>\\n                        </div>\\n                      </li>\\n                    </ul>\\n                  </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                  <div class=\\\"col-md-12\\\">\\n                    <h5 id=\\\"team-name\\\" class=\\\"team-label\\\" style=\\\"margin-bottom:0;\\\"></h5>\\n                    <h6 id=\\\"team-profile\\\" class=\\\"team-label\\\" style=\\\"margin:0;\\\"></h6>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-5\\\" style=\\\"padding-left: 0px;margin-top: 5px;\\\">\\n        <!-- burndown -->\\n        <div id=\\\"burndownSprint_mySprint\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n          <div class=\\\"box box-success burndown-border\\\">\\n            <div class=\\\"box-header with-border border-burndown\\\">\\n              <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 btns-burndown\\\" style=\\\"padding:0;\\\">\\n                <div class=\\\"box-tittle BurnDown\\\" style=\\\"padding-top: 5px;transform: translate(-7px, -9px);\\\">\\n                  <i class=\\\"sq sq-burndown\\\" aria-hidden=\\\"true\\\"></i>\\n                  <div class=\\\"burndownsprint\\\">BurnDown</div>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 btns-burndown\\\" style=\\\"padding-left: 0px;padding-right: 0px;\\\">\\n                <button id=\\\"closeBurndownSprint_mySprint\\\" type=\\\"button\\\" class=\\\"btn btn-box-tool btn-minus pull-right\\\"\\n                  data-widget=\\\"collapse\\\" style=\\\"height: 23px;width: 23px;\\\">\\n                  <i class=\\\"fa fa-minus\\\" style=\\\"margin-left: -5px;margin-top: -6px;padding: -3px;position: absolute;\\\"></i>\\n                </button>\\n                <div class=\\\"pull-right\\\" id=\\\"button-work-team\\\">\\n                  <a id=\\\"showburndown-sprint\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showburndown()\\\">YOUR WORK TEAM\\n                    <i class=\\\"fa fa-chevron-down\\\" aria-hidden=\\\"true\\\"></i></a>\\n                </div>\\n              </div>\\n            </div>\\n            <div class=\\\"box-body\\\">\\n              <p-chart id=\\\"burndowndata-sprint\\\" type=\\\"line\\\" [data]=\\\"burndownData\\\" (onDataSelect)=\\\"chartClicked($event)\\\"\\n                height=\\\"200\\\"></p-chart>\\n            </div>\\n          </div>\\n        </div>\\n        <!-- end burndown -->\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-11 col-sm-11 col-md-12 col-lg-12\\\">\\n        <div class=\\\"box-params-sprint\\\">\\n          <div class=\\\"box-body\\\">\\n            <div>\\n              <br>\\n              <table id=\\\"results-params\\\" class=\\\"table table-bordered-sqlxs table-sprintsview\\\">\\n                <thead style=\\\"border: 1px solid #fff;\\\">\\n                  <th style=\\\"width: 6%;\\\">Task</th>\\n                  <th style=\\\"width: 45%;\\\">Task Description</th>\\n                  <th style=\\\"width: 10%;\\\">Product</th>\\n                  <th style=\\\"width: 6%;\\\">Project Related</th>\\n                  <th style=\\\"width: 6%;\\\">Task Points</th>\\n                  <th style=\\\"width: 6%;\\\">Task Points D</th>\\n                  <th style=\\\"width: 6%;\\\">Asigned</th>\\n                  <th style=\\\"width: 15%;\\\">Actions</th>\\n                </thead>\\n                <tbody>\\n                  <tr *ngFor=\\\"let spr of sprints\\\">\\n                    <td>{{ escapeHtml(spr.task_id) }}</td>\\n                    <td style=\\\"text-align: justify!important;\\\">{{ escapeHtml(spr.task_subject) }}</td>\\n                    <td>{{ spr.prod_name }}</td>\\n                    <td>\\n                      <a (click)=\\\"showModalProject(spr.proj_id)\\\" *ngIf=\\\"spr.proj_id; else alternan\\\">{{escapeHtml(spr.proj_id)\\n                        }}</a>\\n                      <ng-template #alternan>\\n                        <p> - </p>\\n                      </ng-template>\\n                    </td>\\n                    <td>{{ escapeHtml(spr.task_points) }}</td>\\n                    <td>{{ escapeHtml(spr.task_pointsd) }}</td>\\n                    <td>\\n                      <div class=\\\"col-xs-12 col-md-12\\\">\\n                        <div class=\\\"icon-team-sprint-table\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{spr.user_name +' '+ spr.user_lastname}}\\\"\\n                          style=\\\"margin-left: 5px;background: transparent;\\\" [ngStyle]=\\\"{ 'border-color': spr.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                          <img [src]=\\\"spr.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" style=\\\"width:24px;height:24px;border-radius: 50%;\\\"\\n                            class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                        </div>\\n                      </div>\\n                    </td>\\n                    <td>\\n                      <div class=\\\"btn-group-params\\\">\\n                        <i class=\\\"sq sq-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"showModaltk(spr.task_id)\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Quick View\\\"></i>\\n                      </div>\\n                      <taskview [myTaskId]=\\\"spr.task_id\\\"></taskview>\\n                    </td>\\n                    <projectview [myProjectId]=\\\"spr.proj_id\\\"></projectview>\\n                  </tr>\\n                </tbody>\\n                <tfoot>\\n                  <tr>\\n                    <th></th>\\n                    <th></th>\\n                    <th></th>\\n                    <th style=\\\"text-align: right; color:#333333;\\\">Total Points:</th>\\n                    <th style=\\\"text-align: center; color:#333333;\\\">{{round(totalpoints_p, 2)}}</th>\\n                    <th style=\\\"text-align: center; color:#333333;\\\">{{round(totalpoints_d, 2)}}</th>\\n                    <th style=\\\"text-align: right; color:#333333;\\\">Pending Points:</th>\\n                    <th style=\\\"text-align: center; color:#333333;\\\">( {{round(totalpoints_pending, 2)}} )</th>\\n                  </tr>\\n                </tfoot>\\n              </table>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdBurndown\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-workteam\\\">\\n          <button id=\\\"buttonClose_mdBurndown_mySprint\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color: #ffffff; opacity: 1;\\\" (click)=\\\"doneFilter()\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h3 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">Select work team</h3>\\n        </div>\\n        <!--.modal-header-->\\n        <div id=\\\"divSearch_mdBurndown_mySprint\\\" class=\\\"modal-body\\\" style=\\\"height:100%;\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 search-work-team\\\" style=\\\"padding-right: 3px;\\\">\\n              <div class=\\\"pull left col-xs-11 col-sm-11 col-md-11 col-lg-11 label-input-mainfilter\\\" style=\\\" padding: 0; margin-left: 0;\\\">\\n                <input id=\\\"searchUser_mdBurndown_mySprint\\\" name=\\\"searchUser_mdBurndown_mySprint\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\"\\n                  placeholder=\\\"Search\\\" [(ngModel)]=\\\"searchuser\\\" style=\\\"font-weight: bold; font-size: 17px;\\\">\\n              </div>\\n              <div class=\\\"pull-right col-xs-1 col-sm-1 col-md-1 col-lg-1 search-input-mainfilter\\\" style=\\\"margin: 0; padding: 0;\\\">\\n                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248); font-size: 1.8em;\\\"></i>\\n              </div>\\n            </div>\\n          </div>\\n          <div id=\\\"divSelect_mdBurndown_mySprint\\\" class=\\\"form-group\\\" style=\\\"max-height: 400px;overflow: scroll;\\\">\\n            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n              <thead>\\n                <th id=\\\"selectAllItems_mdBurndown_mySprint\\\" (click)=\\\"selectAllItems()\\\" style=\\\"width: 30px; padding-left: 10px; padding-top: 10px;\\\">\\n                  <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"padding-left: 15px; padding-top: 0; font-size: 1.5em;\\\">\\n                    <i *ngIf=\\\"selectedNodes.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    <i *ngIf=\\\"selectedNodes.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                  </div>\\n                  <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 select-product\\\" style=\\\"color: rgb(130, 145, 152); padding: 6px 0;\\\">\\n                    ALL\\n                  </div>\\n                </th>\\n              </thead>\\n              <tbody>\\n                <tr *ngFor=\\\"let ct of contactsTree\\\">\\n                  <td style=\\\"padding:0 12px 12px 12px; \\\">\\n                    <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"height: auto; padding: 0;\\\">\\n\\n                      <p-checkbox id=\\\"selectparent_mdBurndown_mySprint\\\" name=\\\"product-checkbox\\\" value=\\\"{{ct.data}}\\\"\\n                        label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelectA($event, ct.children, ct.data)\\\"\\n                        (change)=\\\"updateSelectA($event, ct.children, ct.data)\\\"></p-checkbox>\\n\\n                    </div>\\n                    <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align: left; padding: 0;text-transform: uppercase; font-weight: bold; \\\">\\n                      {{ ct.label }}\\n                    </div>\\n                    <div *ngIf=\\\"ct.children.length > 0\\\">\\n                      <div *ngFor=\\\"let ch of ct.children | filter : searchuser\\\" style=\\\"margin-left:20px;\\\">\\n                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\" style=\\\"margin:0;padding:0;height:auto;max-height: 30px;\\\">\\n                          <p-checkbox id=\\\"selectchild_mdBurndown_mySprint\\\" name=\\\"product-checkbox\\\" value=\\\"{{ch.data}}\\\"\\n                            label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelect($event)\\\" (change)=\\\"updateSelect($event)\\\"></p-checkbox>\\n                        </div>\\n                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align:left;height:auto;max-height: 30px; padding:0; font-weight: bold;\\\">\\n                          {{ ch.label }}\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </td>\\n                </tr>\\n              </tbody>\\n            </table>\\n          </div>\\n        </div>\\n        <!--.modal-body-->\\n        <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n          <button id=\\\"buttonDone_mdBurndown_mySprint\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\" data-dismiss=\\\"modal\\\"\\n            (click)=\\\"doneFilter()\\\">Done</button>\\n        </div>\\n        <!--.modal-footer-->\\n      </div>\\n      <!--.modal-content-->\\n    </div>\\n    <!--.modal-dialog-->\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdDayView\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button id=\\\"buttonX_dayView_mySprint\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;font-weight: bold;font-size: 20px;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color:white;font-weight: bold;font-size: 18px;text-transform: uppercase;\\\"><i\\n              class=\\\"sq sq-burndown\\\" style=\\\"font-weight: bold;font-size: 33px;\\\"></i> Day Job for {{dayJob}} </h4>\\n        </div>\\n        <div class=\\\"content-comments-users\\\" style=\\\"max-height: 190px;min-height: 75px;overflow: scroll;\\\">\\n          <div class=\\\"box-body\\\" style=\\\"margin-top:10px;\\\">\\n            <ul class=\\\"timeline daily-timeline\\\">\\n              <li *ngFor=\\\"let day of dayView\\\" style=\\\"padding-bottom:5px;\\\">\\n                <i class=\\\"fa fa-dot-circle-o\\\" style=\\\"color: rgb(68, 180, 248); font-size: 30px;background-color: transparent;margin-left: -3px; margin-top: -3px;\\\"></i>\\n                <div class=\\\"timeline-item daily-timeline-item\\\">\\n                  <h3 class=\\\"timeline-header timeline-dailyheader\\\">\\n                    <span *ngIf=\\\"day.task_id && day.task_id != null\\\" [ngStyle]=\\\"day.spri_id == null ? { 'color': 'red' } : {}\\\">\\n                      <b>TASK #{{day.task_id}}</b><br>\\n                    </span>\\n\\n                    <b>Points registered:\\n                      {{day.dail_points}}</b>\\n                    <span *ngIf=\\\"day.task_percentage && day.task_percentage != 0\\\" style=\\\"font-weight: bold;margin-left: 258px;\\\">Progress:\\n                      {{day.task_percentage}}%</span>\\n                  </h3>\\n                  <div class=\\\"timeline-body daily-timeline-body\\\" style=\\\"margin-top: -8px;max-height: 45px;overflow: scroll;color:rgb(167, 167, 167); width: 93%;text-align: justify;\\\">\\n                    {{\\\"Comments: \\\" + escapeHtml(day.dail_text)}}\\n                  </div>\\n                </div>\\n              </li>\\n            </ul>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"totalp && totalp > 0\\\" style=\\\"border: none; text-align: center;\\\">\\n          <h4 style=\\\"font-weight: bold;font-size: 14px;\\\"> TOTAL POINTS REGISTERED : {{\\\" \\\" + totalp}} </h4>\\n        </div>\\n        <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n          <button id=\\\"buttonClose_dayView_mySprint\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n            style=\\\"background-color: rgb(141,180,95);\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 875 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"    <!-- <a href=\\\"javascript:void(0)\\\" (click)=showMessage()>\\n        <span class=\\\"comment-whiteboard\\\"  data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" style=\\\"font-size: 20px;\\\">\\n            <img src=\\\"img/newpost.svg\\\" style=\\\"height: 60px; width: 60px;\\\">\\n        </span>\\n    </a> -->\\n    <my-header></my-header>\\n    <section id=\\\"whiteboard\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 65px;\\\">\\n      <section class=\\\"content-whiteboard\\\" style=\\\"margin-top: 20px\\\">\\n\\n        <div *ngIf=\\\"messageslist && messageslist.length > 0\\\" style=\\\"width: 100%; text-align:center;\\\">\\n            <button class=\\\"btn btn-default btn-sm btnNewMessage_whiteboard\\\" (click)=showMessage() data-target=\\\"#AddForm\\\" data-toggle=\\\"modal\\\" type=\\\"button\\\">New Message</button>\\n        </div>\\n        <div *ngIf=\\\"messageslist && messageslist.length == 0\\\" class=\\\"row\\\" style=\\\"margin-left:0px;text-align:center;\\\">\\n            <div class=\\\"content-message\\\" >\\n                <p style=\\\"margin-bottom: 20px\\\">Empty timeline, lets fill it up. Post a message</p>\\n                <button style=\\\"color: #FFFFFF; background-color: #91D061;border-radius: 5px;\\\" (click)=showMessage()>New Message</button>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"messageslist && messageslist.length > 0\\\"  class=\\\"content-profile-whiteboard\\\">\\n            <div class=\\\"list-Messagewhiteboard\\\" style=\\\" margin-top: 50px;\\\">\\n                <div *ngFor=\\\"let c of messageslist\\\" class=\\\"row\\\" style=\\\"width: 98%; margin-left: 0%; padding-bottom: 30px; margin-right: 0%;\\\">\\n                        <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-2 btn-editPtofile\\\" style=\\\"text-align: center; margin-top: 20px;\\\">\\n                            <span class=\\\"btn-visits pull-right\\\"  style=\\\"overflow: hidden; border-radius: 50px; width: 50px; height: 50px; box-shadow: 2px 2px 20px 0px rgba(185, 195, 202, 1);\\\">\\n                                <img [src]=\\\"c.user_photo\\\" onError=\\\"this.src='img/user.png'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"max-width: 100%\\\">\\n                            </span>\\n                        </div>\\n                        <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-10\\\" style=\\\"padding: 0px; margin-top: 20px;\\\">\\n                          <div class=\\\"col-md-12 col-lg-12\\\" style=\\\"padding: 0px 0px 20px;\\\">\\n                            <span style=\\\"font-weight: bold; color: #283760; font-size: 20px;\\\"> {{c.name}}</span>\\n                            <button aria-label=\\\"Close\\\" class=\\\"pull-right btncloseMessage_whiteboard\\\" (click)=\\\"deletePost(1,c.id)\\\" type=\\\"button\\\">\\n                                <span aria-hidden=\\\"true\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> </span>\\n                            </button>\\n                          </div>\\n                          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                            <p style=\\\"overflow-wrap: break-word; color: #8A989E; font-weight: bold; font-size: 15px;\\\">{{c.description}}</p>\\n                          </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding:5px 0px; border-bottom: 3px solid #DCE3E6;\\\">\\n                          <div style=\\\"float:left; margin-top:10px;\\\">\\n                            <span style=\\\"color: #8A989E; font-weight: bold; font-size: 10px;\\\">posted: {{c.datetime}}</span>\\n                          </div>\\n                          \\n                          <div class=\\\"pull-right\\\" style=\\\"height: 30px; text-align: center; \\\">\\n                              <a href=\\\"javascript:void(0)\\\" (click)=showComments(c.id) style=\\\"text-decoration: none; float: left; padding-left: 10px; margin-right: 9px;\\\">\\n                                  <img class=\\\"icons_reactions_whiteboard\\\" src=\\\"img/new_comment.svg\\\">\\n                                  <span style=\\\"font-size: 12px; color: #717171;\\\">{{c.child_comments.length}}</span>\\n                              </a>\\n                              <ul style=\\\"float:left; padding-left: 3px;\\\" class=\\\"dropdown-whiteboard\\\">\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                    <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\" (click)=\\\"addLike(1,c.id, c.reactionPost[0].id_reaction)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                                        <span>\\n                                            <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"like\\\" src=\\\"img/reaction_like.svg\\\">\\n                                            <span *ngIf=\\\"c.reactionPost[0].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[0].quantity}}</span>\\n                                        </span>\\n                                    </a>\\n                                    <ul class=\\\"dropdown-content\\\">\\n                                        <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                        <div style=\\\"background: #A1D6F6;\\\" >\\n                                            <p *ngIf=\\\"u.id_reaction == '1' \\\">\\n                                            {{u.completename}} Likes this\\n                                            </p>\\n                                        </div>\\n                                        </li>\\n                                    </ul>\\n                                </li>\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                  <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\"  (click)=\\\"addLove(1,c.id, c.reactionPost[1].id_reaction)\\\" class=\\\"dropdown-toggle \\\" data-toggle=\\\"dropdown\\\">\\n                                    <span>\\n                                        <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"love\\\" src=\\\"img/reaction_love.svg\\\">\\n                                      <span *ngIf=\\\"c.reactionPost[1].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[1].quantity}}</span>\\n                                    </span>\\n                                  </a>\\n                                    <ul class=\\\"dropdown-content\\\">\\n                                      <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                        <div style=\\\"background: #A1D6F6;\\\" >\\n                                          <p *ngIf=\\\"u.id_reaction == '2' \\\">\\n                                            {{u.completename}} Loves this\\n                                          </p>\\n                                        </div>\\n                                      </li>\\n                                    </ul>\\n                                </li>\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                  <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\"  (click)=\\\"addAngry(1,c.id, c.reactionPost[2].id_reaction)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                                    <span>\\n                                        <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"angry\\\" src=\\\"img/reaction_angry.svg\\\">\\n                                      <span *ngIf=\\\"c.reactionPost[2].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[2].quantity}}</span>\\n                                    </span> \\n                                  </a>\\n                                  <ul class=\\\"dropdown-content\\\">\\n                                    <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                      <div style=\\\"background: #A1D6F6;\\\" >\\n                                        <p *ngIf=\\\"u.id_reaction == '3' \\\">\\n                                          {{u.completename}} Angry this\\n                                        </p>\\n                                      </div>\\n                                    </li>\\n                                  </ul>\\n                                </li>\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                  <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\"  (click)=\\\"addFun(1,c.id, c.reactionPost[3].id_reaction)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                                    <span>\\n                                        <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"smile\\\" src=\\\"img/reaction_smile.svg\\\">\\n                                      <span *ngIf=\\\"c.reactionPost[3].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[3].quantity}}</span>\\n                                    </span>   \\n                                  </a>\\n                                  <ul class=\\\"dropdown-content\\\">\\n                                    <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                      <div style=\\\"background: #A1D6F6;\\\" >\\n                                        <p *ngIf=\\\"u.id_reaction == '4' \\\">\\n                                          {{u.completename}} Fun this\\n                                        </p>\\n                                      </div>\\n                                    </li>\\n                                  </ul>\\n                                </li>\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                  <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\"  (click)=\\\"addWow(1,c.id, c.reactionPost[4].id_reaction)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                                    <span>\\n                                        <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"surprised\\\" src=\\\"img/reaction_surprised.svg\\\">\\n                                      <span *ngIf=\\\"c.reactionPost[4].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[4].quantity}}</span>\\n                                    </span>\\n                                  </a>\\n                                  <ul class=\\\"dropdown-content\\\">\\n                                    <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                      <div style=\\\"background: #A1D6F6;\\\" >\\n                                        <p *ngIf=\\\"u.id_reaction == '5' \\\">\\n                                          {{u.completename}} Surprise this\\n                                        </p>\\n                                      </div>\\n                                    </li>\\n                                  </ul>\\n                                </li>\\n                              </ul>\\n                          </div>\\n                      </div>\\n                        </div>\\n                        <div class=\\\"content-children\\\">\\n                          <div *ngFor=\\\"let ch of c.child_comments\\\" class=\\\"children-comments\\\">\\n                              <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-2\\\"></div>\\n                              <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-10\\\" style=\\\"padding-left: 0px; padding-right: 0px; padding-top: 15px;\\\">\\n                                <div class=\\\"child-comment col-xs-12\\\" style=\\\"padding: 0px;\\\" >\\n                                    <div class=\\\"col-xs-1 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"margin-top: 10px; padding-left:0px; padding-right: 0px; text-align: center;\\\">\\n                                        <span class=\\\"btn-visits pull-right\\\"  style=\\\"overflow: hidden; border-radius: 50px; width: 38px; height: 38px; box-shadow: 2px 2px 20px 0px rgba(185, 195, 202, 1); margin-right: 10px;\\\">\\n                                          <img [src]=\\\"ch.image\\\" onError=\\\"this.src='img/user.png'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"max-width: 100%\\\">\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11\\\" style=\\\"margin-top: 10px; padding-left: 0px;\\\">\\n                                      <div class=\\\"col-md-12 col-lg-12\\\" style=\\\"padding: 0px 0px 20px;\\\">\\n                                        <span style=\\\"font-weight: bold; color: #283760; font-size: 18px;\\\"> {{ch.name}}</span>\\n                                        <button aria-label=\\\"Close\\\" class=\\\"pull-right btncloseMessage_whiteboard\\\" (click)=\\\"deletePost(2,ch.id_comentario)\\\" type=\\\"button\\\">\\n                                            <span aria-hidden=\\\"true\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> </span>\\n                                        </button>\\n                                      </div>\\n                                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                                        <p style=\\\"overflow-wrap: break-word; color: #8A989E; font-weight: bold;\\\">{{ch.description}}</p>\\n                                      </div>\\n                                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 posted-comment\\\" style=\\\"border-bottom: 2px solid #DCE3E6; padding:5px 0px;\\\">\\n                                        <div style=\\\"float:left; margin-top:5px;\\\">\\n                                          <span style=\\\"color: #8A989E; font-weight: bold; font-size: 10px;\\\">posted: {{ch.datetime}}</span> \\n                                        </div>\\n                                          \\n                                          <ul class=\\\"pull-right dropdown-whiteboard\\\" style=\\\"border-radius: 10px; color: #38A0F4; margin-bottom: 0px;\\\">\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addLove(2,ch.id_comentario, ch.reactionComment[1].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"love_comment\\\" src=\\\"img/reaction_love.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[1].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[1].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li *ngFor=\\\"let lc of ch.child_usuarios\\\"> \\n                                                  <div style=\\\"background: #A1D6F6;\\\" >\\n                                                    <p *ngIf=\\\"lc.id_reaction == '2' \\\">\\n                                                      {{lc.completename}} Loves this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\" >\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addAngry(2,ch.id_comentario, ch.reactionComment[2].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"angry_comment\\\" src=\\\"img/reaction_angry.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[2].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[2].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li *ngFor=\\\"let lc of ch.child_usuarios\\\"> \\n                                                  <div style=\\\"background: #A1D6F6;\\\">\\n                                                    <p *ngIf=\\\"lc.id_reaction == '3' \\\">\\n                                                      {{lc.completename}} Angry this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addFun(2,ch.id_comentario, ch.reactionComment[3].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"smile_comment\\\" src=\\\"img/reaction_smile.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[3].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[3].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li *ngFor=\\\"let lc of ch.child_usuarios\\\" > \\n                                                  <div style=\\\"background: #A1D6F6;\\\">\\n                                                    <p *ngIf=\\\"lc.id_reaction == '4' \\\">\\n                                                      {{lc.completename}} Fun this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addWow(2,ch.id_comentario, ch.reactionComment[4].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"surprised_comment\\\" src=\\\"img/reaction_surprised.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[4].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[4].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li *ngFor=\\\"let lc of ch.child_usuarios\\\" > \\n                                                  <div style=\\\"background: #A1D6F6;\\\">\\n                                                    <p *ngIf=\\\"lc.id_reaction == '5' \\\">\\n                                                      {{lc.completename}} Surprise this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addLike(2,ch.id_comentario, ch.reactionComment[0].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"like_comment\\\" src=\\\"img/reaction_like.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[0].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[0].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li  *ngFor=\\\"let lc of ch.child_usuarios\\\" > \\n                                                  <div style=\\\"background: #A1D6F6;\\\">\\n                                                    <p *ngIf=\\\"lc.id_reaction == '1' \\\">\\n                                                      {{lc.completename}} Likes this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                          </ul>\\n                                      </div>\\n                                    </div>\\n                                </div>\\n                              </div>\\n                          </div>\\n                        </div>\\n                </div>\\n            </div>\\n        </div>\\n      </section>\\n      <div class=\\\"modal modal-message fade\\\" id=\\\"mdMessage\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-md mdmessage-whiteboard\\\" style=\\\"margin-top: 136px;\\\" role=\\\"document\\\">\\n          <div class=\\\"modal-content-params\\\">\\n            <div class=\\\"modal-header modal-header-info-params\\\" style=\\\"color: #ffffff;\\\">\\n              <button type=\\\"button\\\" class=\\\"pull-right close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                <span aria-hidden=\\\"true\\\"><i class=\\\"sq sq-close\\\" aria-hidden=\\\"true\\\" style=\\\"color: #FFFFFF;\\\"></i>\\n                </span>\\n              </button>\\n              <i class=\\\"fa fa-comment-o pull-left\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 22px; margin-right: 8px;\\\"></i>\\n              <h4 class=\\\"modal-title pull-left\\\" style=\\\"font-weight: bold\\\">New Message</h4>\\n            </div>\\n            <div class=\\\"modal-body contenedoModal_notAttachments\\\">\\n              <div class=\\\"row\\\">\\n                <textarea [(ngModel)]=\\\"messages.description\\\" name=\\\"textarea\\\" rows=\\\"6\\\" cols=\\\"70\\\" placeholder=\\\"Type Message\\\" class=\\\"col-xs-12 input-description-milestone textarea_newMessaje_whiteboard \\\"></textarea>\\n              </div>\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n              <div class=\\\"pull-left\\\" style=\\\"width: 200px;\\\">\\n                  <p-multiSelect [options]=\\\"groups\\\"  dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"messages.group\\\" [panelStyle]=\\\"{minWidth:'12em'}\\\" class=\\\"pull-left myteams-message\\\"></p-multiSelect>\\n              </div>\\n              <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-top: 7px; padding-right: 0px;\\\">\\n                <span class=\\\"pull-left\\\" style=\\\"color: #829198; font-family: helvetica neue; font-weight: normal;\\\">\\n                  <p-checkbox [(ngModel)]=\\\"messages.notify\\\" binary=\\\"true\\\"></p-checkbox>\\n                  Notify\\n                </span>\\n              </div>\\n              <div class=\\\"pull-right\\\">\\n                <button type=\\\"button\\\" class=\\\"btn-sm btn-success btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\" >Close</button>\\n                <button  class=\\\"btn btn-sm button_savedescriptionrejected_sqlx\\\" type=\\\"button\\\" data-dismiss=\\\"modal\\\" (click)=saveMessage() [disabled]=\\\"validate()\\\">Send</button>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"modal modal-comments fade\\\" id=\\\"mdComments\\\" role=\\\"dialog\\\">\\n          <div class=\\\"modal-dialog modal-md mdcomments-whiteboard\\\" style=\\\"margin-top: 136px;\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\" >\\n              <div class=\\\"modal-header modal-header-info-params\\\" style=\\\"color: #ffffff;\\\">\\n                <button type=\\\"button\\\" class=\\\"pull-right close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" >\\n                  <span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-times\\\" aria-hidden=\\\"true\\\"></i>\\n                  </span>\\n                </button>\\n                <i class=\\\"fa fa-comment-o pull-left\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 22px; margin-right: 8px;\\\"></i>\\n                <h4 class=\\\"modal-title pull-left\\\" style=\\\"font-weight: bold\\\">New Comment</h4>\\n              </div>\\n              <div class=\\\"modal-body contenedoModal_notAttachments\\\" style=\\\"min-height: 200px;padding: 30px;\\n              \\\">\\n                <div class=\\\"row\\\">\\n                  <textarea [(ngModel)]=\\\"comments.description\\\" name=\\\"textarea\\\" rows=\\\"6\\\" cols=\\\"70\\\" placeholder=\\\"Type Comment\\\" class=\\\"col-xs-12 input-description-milestone textarea_newMessaje_whiteboard\\\"></textarea>\\n                </div>\\n              </div>\\n              <div class=\\\"modal-footer\\\">\\n                  <!-- <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\" style=\\\"background: #E94367; color: #ffffff; width: 80px; font-size: 14px; height: 30px; border: none;\\\">Back</button>\\n                  <button  [disabled]=\\\"validateComment()\\\" class=\\\"btn btn-primary btn-sm\\\" type=\\\"button\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveComments() \\\" style=\\\"width: 80px; background: #6AB925; border: none;font-size: 15px;height: 30px;\\\">Send</button> -->\\n                  <div class=\\\"pull-right\\\">\\n                        <button class=\\\"btn-success btn-sm btn-close-sprintTask\\\"  id=\\\"buttonClose_duplicateTask\\\" type=\\\"button\\\">Close</button>\\n                        <button class=\\\"btn btn-sm button_savedescriptionrejected_sqlx\\\" (click)=\\\"saveComments()\\\" [disabled]=\\\"validateComment()\\\" data-dismiss=\\\"modal\\\" type=\\\"button\\\" disabled=\\\"\\\">Send</button>\\n                  </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      \\n      <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n    </section>\";\n\n/***/ }),\n/* 876 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"externalrequests\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-requests\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> EXTERNAL REQUESTS\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">External Request</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\" style=\\\"min-width: 410px;\\\">\\n      <div *ngFor=\\\"let ty of types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.type_color, 'border-radius': '15px', 'color': 'white', 'padding-right': '10px', 'cursor': 'pointer','border': 'solid 6px rgb(247,247,247)'} : {}\\\"\\n        class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\" (click)=\\\"setStateList([ty.type_id])\\\">\\n        <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 content-buttons pull-left\\\" style=\\\"margin-top: 18px;padding: 0px;\\\">\\n          <span style=\\\"font-size: 20px; font-weight: bold; text-align: center;\\\">{{ty.count}}</span>\\n          <span style=\\\"text-transform: uppercase; font-size: 20px; font-weight: bold; text-align: center;\\\"> <i class=\\\"{{ty.type_label}}\\\"\\n              style=\\\"font-size: 24px; text-align: center; font-weight: bold;\\\"></i>{{ty.type_name}} </span>\\n        </div>\\n        <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 content-buttons pull-right\\\" style=\\\"padding:0px;margin-bottom: 4px; margin-top: -8px;\\\">\\n          <div class=\\\"row button-row\\\">\\n            <div class=\\\"col-xs-6 button-types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.backgorund_color, 'border-radius': '15px', 'color': 'white' } : {}\\\">\\n              <div style=\\\"padding-top: 9px;padding-left: -3px; margin-left: -2px;\\\">\\n                <a href=\\\"javascript:void(0)\\\" (click)=\\\"showCategories(ty.type_id, ty.type_name, ty.type_color,ty.type_label)\\\"\\n                  style=\\\"color:white;text-decoration:none\\\">\\n                  <i class=\\\"sq sq-info more-info\\\" style=\\\"font-size: 30px;\\\"></i>\\n                </a>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-6 button-types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.backgorund_color, 'border-radius': '15px', 'color': 'white' } : {}\\\">\\n              <div style=\\\" padding-top: 10px; margin-left: -16px; margin-right: 3px;padding-left: 12px;\\\">\\n                <a href=\\\"javascript:void(0)\\\" id=\\\"addError\\\" (click)=\\\"addEvent(ty.type_id, ty.type_name, ty.type_color,ty.type_label)\\\"\\n                  style=\\\"color:white;text-decoration:none\\\">\\n                  <i class=\\\"sq sq-add-1 more-info\\\" style=\\\"font-size: 30px;\\\"></i>\\n                </a>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\" style=\\\"margin-top: 5px; margin-bottom: 5px; margin-right: 5px;\\\">\\n      <div class=\\\"nav-tabs-customr col-xs-12 col-sm-5 col-md-5 col-lg-5 req_btn\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n        <ul *ngIf=\\\"types && types.length > 0\\\" class=\\\"nav nav-tabs nav-tabs-sqlxs\\\" style=\\\"border-bottom:none;\\\">\\n          <li [ngClass]=\\\"{'active':typeSelected === '1,3,4'}\\\" class=\\\"active\\\" style=\\\"border-top:none; padding: 8px;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"All\\\">\\n            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['1','3','4'])\\\" style=\\\"padding: 0px 10px 0px 7px;border-color:transparent!important;\\\">All</a>\\n          </li>\\n          <li [ngClass]=\\\"{'active':typeSelected === '1'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[0].type_name}}>\\n            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['1'])\\\" style=\\\"border-color:transparent!important;\\\">\\n              <i class=\\\"sq sq-errors\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; text-align: center;margin-left: 3px; margin-right: 1px;\\\"></i>\\n            </a>\\n          </li>\\n          <li [ngClass]=\\\"{'active':typeSelected === '3'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[1].type_name}}>\\n            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['3'])\\\" style=\\\"border-color:transparent!important;\\\">\\n              <i class=\\\"sq sq-developing\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; text-align: center; margin-left: 3px; margin-right: 1px;\\\"></i>\\n            </a>\\n          </li>\\n          <li [ngClass]=\\\"{'active':typeSelected === '4'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[2].type_name}}>\\n            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['4'])\\\" style=\\\"border-color:transparent!important;\\\">\\n              <i class=\\\"sq sq-implementations\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n            </a>\\n          </li>\\n          <li style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n            <a (click)=\\\"reload()\\\" style=\\\"border-color:transparent!important;\\\">\\n              <i class=\\\"sq sq-refresh\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n            </a>\\n          </li>\\n        </ul>\\n      </div>\\n      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n        <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n          <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n            <div class=\\\"label-input-mainfilter\\\">\\n              <input id=\\\"er_search_reqext\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\"\\n                placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n            </div>\\n            <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n              <button type=\\\"button\\\" (click)=\\\"searchFilter()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 1px; margin-right: 8px; margin-top: 2px; color: rgb(68, 180, 248);\\\">\\n                <i class=\\\"sq sq-view\\\"></i>\\n              </button>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-xs-1 col-sm-1 col-md-1 col-lg-1\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" (click)=\\\"exportExcel()\\\">\\n              <i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i>\\n          </button>\\n        </div>\\n      </div>\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right:0;\\\">\\n        <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n          <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n            <li class=\\\"active\\\" style=\\\"border-top:none;width: 125px;\\\">\\n              <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('')\\\" style=\\\"border-color:transparent!important;\\\">My\\n                Requests</a>\\n            </li>\\n            <li *ngFor=\\\"let cl of clientlist\\\" style=\\\"border-top:none;width: 125px;\\\">\\n              <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(cl.usex_dbname)\\\" style=\\\"border-color:transparent!important;\\\">{{cl.client_name}}</a>\\n            </li>\\n          </ul>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary2\\\">\\n          <div class=\\\"box-body\\\" style=\\\"max-height:400px;padding-top:20px;\\\">\\n            <div class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;\\\">\\n              <table id=\\\"resultsh\\\" class=\\\"table table-hover\\\" style=\\\"margin-bottom:0px;\\\">\\n                <thead>\\n                  <tr style=\\\"color:#707070;\\\">\\n                    <th style=\\\"width: 1%; text-align:center!important;\\\">\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_id')\\\" style=\\\"width: 8%;text-align:center!important;\\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width:9%; text-align:center!important;\\\">Progress\\n                    </th>\\n                    <th (click)=\\\"setOrder('tkstatus')\\\" style=\\\"width:9%;text-align:center!important;\\\">Status\\n                      <span [hidden]=\\\"posOrder !== 'tkstatus'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_subject')\\\" style=\\\"width:19%;text-align:center!important;\\\">Subject\\n                      <span [hidden]=\\\"posOrder !== 'task_subject'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_date')\\\" style=\\\"width:12%; text-align:center!important;\\\">Date\\n                      <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('userext_creator')\\\" style=\\\"width:9%;text-align:center!important;\\\"> Creator\\n                      <span [hidden]=\\\"posOrder !== 'userext_creator'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('asigned')\\\" style=\\\"width:9%;text-align:center!important;\\\">Assigned\\n                      <span [hidden]=\\\"posOrder !== 'asigned'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('type_name')\\\" style=\\\"width:10%; text-align:center!important;\\\"> Type\\n                      <span [hidden]=\\\"posOrder !== 'type_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width:15%;text-align:center!important;\\\">Actions\\n                    </th>\\n                  </tr>\\n                </thead>\\n              </table>\\n            </div>\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n              <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n              <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div *ngIf=\\\"!isLoading && requests.length == 0\\\" class=\\\"table-responsive2 col-lg-12 col-md-12 col-xs-12\\\"\\n              style=\\\"text-align: center;\\\">\\n              No Data\\n            </div>\\n            <div *ngIf=\\\"requests.length > 0\\\" class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-bottom: 2px solid #ddd;\\\">\\n              <table id=\\\"resultsb\\\" class=\\\"table table-hover\\\">\\n                <tbody style=\\\"height: 100px; overflow:scroll; background: white\\\">\\n                  <tr *ngFor=\\\"let eve of requests\\\" style=\\\"color:#707070;\\\">\\n                    <td class=\\\"td_icontype_slqx\\\" style=\\\"width: 1%;\\\">\\n                      <div *ngIf=\\\"eve.task_delivery == null\\\" class=\\\"icon_type_squalinx\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Request\\\">\\n                        <i class=\\\"sq sq-requests\\\" style=\\\"color:#707070;\\\"></i>\\n                      </div>\\n                      <div *ngIf=\\\"eve.task_delivery != null\\\" class=\\\"icon_type_squalinx\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Task\\\">\\n                        <i class=\\\"sq sq-statustasks\\\" style=\\\"color:#707070;\\\"></i>\\n                      </div>\\n                    </td>\\n                    <td style=\\\"width: 8%; border-top: 1px solid white!important;text-align: center;\\\">\\n                      {{ escapeHtml(eve.task_id) }}\\n                    </td>\\n                    <td style=\\\"width:9%;text-align:center;border:none;\\\">\\n                      <span class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{eve.percent}}%</span>\\n                      <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%; margin-left: 12px; height: 10px; background-color:rgb(220, 227, 230); \\\">\\n                        <div class=\\\"success-tasks-request\\\" [ngStyle]=\\\"{ 'width': eve.percent + '%' }\\\">\\n                        </div>\\n                      </div>\\n                    </td>\\n                    <td [ngStyle]=\\\"eve.tkstatus == 'Rejected' ? { 'color': '#F01458', 'border-top':'1px solid white', 'width':'9%' } : eve.tkstatus == 'Complete' ? { 'color': '#92CC66', 'border-top':'1px solid white', 'width':'9%' }  : {'color': '#707070;', 'border-top':'1px solid white', 'width':'9%'}\\\">\\n                      {{ escapeHtml(eve.tkstatus) }}\\n                    </td>\\n                    <td style=\\\"width:19%;border-top: 1px solid white!important;\\\">\\n                      {{ escapeHtml(eve.task_subject) }}\\n                    </td>\\n                    <td style=\\\"width:12%;border-top: 1px solid white!important;text-align: center;\\\">\\n                      {{ escapeHtml(eve.task_date) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: left;width:9%;\\\">\\n                      {{ eve.creator}}\\n                    </td>\\n                    <td style=\\\"width:9%;border-top: 1px solid white!important;text-align: center;\\\">\\n                      {{ escapeHtml(eve.asigned) }}\\n                    </td>\\n                    <td style=\\\"border:none;text-align: center;width:10%;\\\">\\n                      <div [ngStyle]=\\\"eve.type_id ? {'background': eve.type_color} : {} \\\" class=\\\"colortype\\\"></div>\\n                    </td>\\n                    <td style=\\\"border:none;width:15%;\\\">\\n                      <div class=\\\"btn-group\\\">\\n                        <button *ngIf=\\\"eve.type == Task \\\" type=\\\"button\\\" (click)=\\\"showModaltk(eve.task_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\">\\n                          <i class=\\\"sq sq-search\\\" style=\\\"font-weight: bold;\\\"></i>\\n                        </button>\\n                        <taskview [myTaskId]=\\\"eve.task_id\\\" [myDbName]=\\\"eve.bd_external\\\"></taskview>\\n                        <button *ngIf=\\\"eve.task_delivery == null && eve.asigned_to == 'forme' && eve.para_status != 50\\\"\\n                          type=\\\"button\\\" (click)=\\\"showRequest(eve)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-toggle=\\\"tooltip\\\"\\n                          data-container=\\\"body\\\" title=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\" style=\\\"font-weight: bold;\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_delivery == null && eve.asigned_to == 'byme' && eve.para_status != 50\\\"\\n                          type=\\\"button\\\" (click)=\\\"showRequest(eve)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.percent == 100 && eve.canclose == '1'\\\" (click)=\\\"closeTask(eve.bd_external, eve.task_id)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Close\\\">\\n                          <i class=\\\"sq sq-close-bg\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1'\\\" (click)=\\\"deleteTask(eve.bd_external, eve.task_id)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                          <i class=\\\"sq sq-eliminar\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canrj === '1' && eve.para_status != 50\\\" (click)=\\\"showReject(eve)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reject\\\">\\n                          <i class=\\\"sq sq-backlog\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1' && eve.tkstatus != 'Improve'\\\" (click)=\\\"showImprov(eve)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Improve\\\">\\n                          <i class=\\\"sq sq-improving\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_child_id == 0 && eve.task_child_id != null\\\" (click)=\\\"mdShowTypeTaskJoin(eve)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Create Task\\\" style=\\\" padding: 2px 10px 5px 10px;\\\">\\n                          <i class=\\\"sq sq-create-new-task\\\" style=\\\"font-size: 19px;\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_child_id == 0 && eve.task_child_id != null\\\" (click)=\\\"mdShowAssociateTaskJoin(eve)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Associate Task\\\" style=\\\" padding: 2px 10px 5px 10px;\\\">\\n                          <i class=\\\"sq sq-statustasks\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_child_id != 0 && eve.task_child_id != null\\\" (click)=\\\"deleteTaskJoin(eve.task_child_id)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Delete Task\\\" style=\\\" padding: 2px 10px 5px 10px;\\\">\\n                          <i class=\\\"sq sq-close-task\\\" style=\\\"font-size: 19px;\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose == '1' && eve.para_status == 50\\\" (click)=\\\"reopenTask(eve.bd_external, eve.task_id)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Reopen\\\">\\n                          <i class=\\\"fa fa-undo\\\"></i>\\n                        </button>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div *ngIf=\\\"requests.length > 0\\\" class=\\\"box-footer no-padding\\\">\\n              <div class=\\\"contacts-controls\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"color:#707070;\\\">\\n                  {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage) > itemcount ?\\n                  itemcount : (currentpage * limitpage)\\n                  }} of {{ itemcount }} results\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\" style=\\\"color:#707070;\\\"></i>\\n                    </button>\\n                    <select class=\\\"btn btn-default btn-sm\\\" style=\\\"height: 30px; background-color: rgb(255,255,255);\\\"\\n                      [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                      <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                    </select>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\" style=\\\"color:#707070;\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n                <div class=\\\"pull-left\\\" style=\\\"color:#707070;\\\">\\n                  <div class=\\\"btn-group\\\">\\n                    <select class=\\\"btn btn-default btn-sm\\\" style=\\\"height: 30px; background-color: rgb(255,255,255);\\\"\\n                      [(ngModel)]=\\\"limitpage\\\" (change)=\\\"reloadResults()\\\">\\n                      <option *ngFor=\\\"let r of results\\\" [ngValue]=\\\"r\\\">{{ r }}</option>\\n                    </select>\\n                  </div>\\n                  per page\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group \\\">\\n                <label>Subject</label>\\n                <input id=\\\"inputr_1\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"ddwnr_1\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"myproducts\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Assigned to</label>\\n                <p-dropdown id=\\\"ddwnr_2\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-xs-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Associate to Project</label>\\n                <p-dropdown id=\\\"ddwnr_3\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Associate to Sprint</label>\\n                <p-dropdown id=\\\"ddwnr_4\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar id=\\\"calendarb_2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                  [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group spinner-squadlinx\\\">\\n                <label>Points</label>\\n                <p-spinner id=\\\"inputr_2\\\" class=\\\"spinnersql\\\" [(ngModel)]=\\\"task.task_points\\\" [step]=\\\"0.25\\\" [min]=\\\"0\\\"></p-spinner>\\n              </div>\\n            </div>\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                <a id=\\\"editTask-request\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n              </li>\\n              <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                <a id=\\\"editTask-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate Form</a>\\n              </li>\\n            </ul>\\n            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editor_2\\\" [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div style=\\\"max-height:142px; overflow:scroll; width:100%\\\">\\n                  <table style=\\\"text-align: center;width: 100%;\\\">\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 50px;\\\">\\n                        <td style=\\\"width: 40%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                          <div class=\\\"form-squadlinx\\\">\\n                            {{fr.form_field}}\\n                          </div>\\n                        </td>\\n                        <td style=\\\"width: 60%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                          <div class=\\\"form-squadlinx\\\">\\n                            {{fr.form_data}}\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n          <ul class=\\\"mailbox-attachments clearfix\\\">\\n            <li *ngFor=\\\"let att of task.attachments\\\">\\n              <a *ngIf=\\\"att.type\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                <span class=\\\"mailbox-attachment-icon\\\">\\n                  <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                    style=\\\"max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                </span>\\n              </a>\\n              <div class=\\\"mailbox-attachment-info\\\">\\n                <a *ngIf=\\\"att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                  <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.tsat_alias.length>6) ? (att.tsat_alias |\\n                  slice:0:20)+'..':(att.tsat_alias)\\n                  }}\\n                </a>\\n                <a *ngIf=\\\"!att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                  <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.name.length > 6)? (att.name | slice:0:20)+'..':(att.name) }}\\n                </a>\\n                <span class=\\\"mailbox-attachment-size\\\">\\n                  {{att.size + ' bytes'}}\\n                  <button *ngIf=\\\"task.taskid > 0\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                  </button>\\n                  <button *ngIf=\\\"task.taskid == 0\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\">\\n                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                  </button>\\n                </span>\\n              </div>\\n            </li>\\n          </ul>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n              for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\"\\n              [disabled]=\\\"(!task.task_subject || task.task_subject == '' || task.task_subject == 'undefined') || (!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0) || (!task.task_delivery || task.task_delivery == '' || task.task_delivery == 'undefined')\\\"\\n              (click)=\\\"saveTask()\\\">Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditRequest\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"border-radius: 15px;\\\">\\n\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-content modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n\\n      <div class=\\\"modal-content new-design2\\\" style=\\\"border-radius: 15px; width: 675px;\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"\\n            (click)=\\\"activeTabs()\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i> {{ myfilterfield.typetittle }} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"form-group col-xs-12 col-md-12 col-lg-12 input-squadlinx\\\">\\n              <label>Subject</label>\\n              <input id=\\\"er_inputt_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n            </div>\\n            <!-- clients -->\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Client</label>\\n              <p-dropdown id=\\\"er_ddwnr_11\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"clients\\\" [(ngModel)]=\\\"task.client_id\\\" (onChange)=\\\"clientData(task.client_id, myfilterfield.text)\\\"\\n                placeholder=\\\"Select a client\\\"></p-dropdown>\\n            </div>\\n            <!-- end clients -->\\n            <!-- end clients -->\\n            <!-- end clients -->\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Category</label>\\n              <p-dropdown id=\\\"er_ddwnr_7\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"categorieslbl\\\" [(ngModel)]=\\\"task.cate_id\\\" placeholder=\\\"Select a Category\\\" filter=\\\"filter\\\"\\n                (onChange)=\\\"createForm(task.cate_id)\\\" [disabled]=\\\"existProduct\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Product</label>\\n              <p-dropdown id=\\\"er_ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"\\n                [disabled]=\\\"existClient\\\"\\n                (onChange)=\\\"getCategoriesbyProduct(task.prod_id, myfilterfield.text)\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Group</label>\\n              <p-dropdown id=\\\"er_ddwnr_5\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"groups\\\" [(ngModel)]=\\\"task.grop_id\\\" placeholder=\\\"Select a Group\\\" [disabled]=\\\"existClient\\\"></p-dropdown>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_associate_form_request\\\" *ngIf=\\\"task.fields && task.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 1}\\\">\\n                <a id=\\\"editRequest-request1\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form_request\\\" (click)=\\\"setPageRequest(1)\\\">Associate\\n                  Form</a>\\n              </li>\\n              <li id=\\\"li_description_request\\\" [ngClass]=\\\"{'active':tagMenuRequest == 2}\\\">\\n                <a id=\\\"editRequest-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#description_request\\\" (click)=\\\"setPageRequest(2)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_attachments_request\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 3}\\\">\\n                <a id=\\\"editRequest-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_request\\\" (click)=\\\"setPageRequest(3)\\\">Attachments\\n                  <span>({{task.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 1 && task.fields && task.fields.length > 0 \\\" id=\\\"associate_form_request\\\"\\n              class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_createRequest\\\">\\n                  <table class=\\\"table_associateFom_createRequest\\\">\\n                    <thead>\\n                      <th style=\\\"width:30%; text-align: center;\\\">Field name</th>\\n                      <th style=\\\"width:70%; text-align: center;\\\">Data</th>\\n                    </thead>\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let tkf of task.fields\\\" style=\\\"height: 60px;\\\">\\n                        <td class=\\\"td_formfield_createRequest\\\">\\n                          <div class=\\\"div_formfield_createRequest\\\">\\n                            {{tkf.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_createRequest\\\">\\n                          <div class=\\\"div_formdata_createRequest\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control div_input_formdata_createRequest\\\" [(ngModel)]=\\\"tkf.form_data\\\"\\n                              (value)=\\\"tkf.form_data\\\">\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 2\\\" id=\\\"description_request\\\" class=\\\"col-xs-12 col-md-12 col-lg-12 \\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editorr_2\\\" [(ngModel)]=\\\"task.task_description_r\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 3\\\" id=\\\"attachments_request\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of task.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-namex\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-namex\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.tsat_alias.length>6) ?\\n                          (att.tsat_alias |\\n                          slice:0:20)+'..':(att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-namex\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.name.length > 6)? (att.name |\\n                          slice:0:20)+'..':(att.name) }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #008BCB; display: inline-block; padding: 6px 12px; cursor: pointer; border-radius: 15px;background-color: #008BCB; color:white;\\\"\\n              for=\\\"file-upload-addRequest\\\" class=\\\"custom-file-upload\\\">\\n              <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n            </label>\\n            <input id=\\\"file-upload-addRequest\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              (change)=\\\"onChange($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"er_addRequest\\\" type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"saveTask(0)\\\" [disabled]=\\\"(!task.task_description_r || task.task_description_r == '' || task.task_description_r == 'undefined') || (!task.prod_id) || (!task.cate_id) || (!task.grop_id) || (!task.client_id)\\\">\\n              Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdCategory\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" style=\\\"border-radius: 15px;\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-categories\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i> {{myfilterfield.typetittle}} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group scrollable\\\" style=\\\"max-height: 200px;\\\">\\n                <table class=\\\"table table-hover table-striped table-category\\\">\\n                  <thead>\\n                    <th style=\\\"width:100%;\\\"> </th>\\n                  </thead>\\n                  <tbody>\\n                    <tr *ngFor=\\\"let ml of categorieslblClients | filterfield : myfilterfield\\\">\\n                      <td>\\n                        {{ml.label}}\\n                      </td>\\n                    </tr>\\n                  </tbody>\\n                </table>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdRj\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-rejectRequest\\\">\\n        <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n          <button id=\\\"close-mdRj-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Reject task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label class=\\\"label_reasonReject_slqx\\\">Reason for rejection</label>\\n            <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\" placeholder=\\\"Description ...\\\"\\n              [(ngModel)]=\\\"rjtask.retk_description\\\"></textarea>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"close2-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\"\\n            [disabled]=\\\"(!rjtask.retk_description || rjtask.retk_description == '' || rjtask.retk_description == 'undefined')\\\"\\n            (click)=\\\"rejectTask()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdImp\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-rejectRequest\\\">\\n        <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n          <button id=\\\"close-mdImp-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Improve task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label class=\\\"label_reasonReject_slqx\\\">Reason for improve</label>\\n            <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\" placeholder=\\\"Description ...\\\"\\n              [(ngModel)]=\\\"imptask.imtk_description\\\"></textarea>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"close2-mdImp-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mdImp-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\"\\n            [disabled]=\\\"(!imptask.imtk_description || imptask.imtk_description == '' || imptask.imtk_description == 'undefined')\\\"\\n            (click)=\\\"impTask()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <!--Modal edit external request-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditExtRequest\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"border-radius: 15px;\\\">\\n\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-content modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n\\n      <div class=\\\"modal-content new-design2\\\" style=\\\"border-radius: 15px; width: 675px;\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"\\n            (click)=\\\"activeTabs()\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i> {{ myfilterfield.typetittle }} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"form-group col-xs-12 col-md-12 col-lg-12 input-squadlinx\\\">\\n              <label>Subject</label>\\n              <input id=\\\"erx_inputt_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n            </div>\\n            <div class=\\\"input-squadlinx form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Client</label>\\n              <input id=\\\"erx_inputt_2\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.dbname\\\" placeholder=\\\"\\\"\\n                [disabled]=\\\"true\\\">\\n            </div>\\n            <div class=\\\"input-squadlinx form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Category</label>\\n              <input id=\\\"erx_inputt_3\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.cate_desc\\\" placeholder=\\\"\\\"\\n                [disabled]=\\\"true\\\">\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Product</label>\\n              <p-dropdown id=\\\"er_ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" [disabled]=\\\"true\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"\\n                [disabled]=\\\"existClient\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Group</label>\\n              <p-dropdown id=\\\"er_ddwnr_5\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"groups\\\" [(ngModel)]=\\\"task.grop_id\\\" [disabled]=\\\"true\\\" placeholder=\\\"Select a Group\\\" [disabled]=\\\"existClient\\\"></p-dropdown>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_associate_form_request\\\" *ngIf=\\\"task.fields && task.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 1}\\\">\\n                <a id=\\\"editRequest-request1\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form_request\\\" (click)=\\\"setPageRequest(1)\\\">Associate\\n                  Form</a>\\n              </li>\\n              <li id=\\\"li_description_request\\\" [ngClass]=\\\"{'active':tagMenuRequest == 2}\\\">\\n                <a id=\\\"editRequest-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#description_request\\\" (click)=\\\"setPageRequest(2)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_attachments_request\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 3}\\\">\\n                <a id=\\\"editRequest-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_request\\\" (click)=\\\"setPageRequest(3)\\\">Attachments\\n                  <span>({{task.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 1 && task.fields && task.fields.length > 0 \\\" id=\\\"associate_form_request\\\"\\n              class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_createRequest\\\">\\n                  <table class=\\\"table_associateFom_createRequest\\\">\\n                    <thead>\\n                      <th style=\\\"width:30%; text-align: center;\\\">Field name</th>\\n                      <th style=\\\"width:70%; text-align: center;\\\">Data</th>\\n                    </thead>\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let tkf of task.fields\\\" style=\\\"height: 60px;\\\">\\n                        <td class=\\\"td_formfield_createRequest\\\">\\n                          <div class=\\\"div_formfield_createRequest\\\">\\n                            {{tkf.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_createRequest\\\">\\n                          <div class=\\\"div_formdata_createRequest\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control div_input_formdata_createRequest\\\" [(ngModel)]=\\\"tkf.form_data\\\"\\n                              (value)=\\\"tkf.form_data\\\">\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 2\\\" id=\\\"description_request\\\" class=\\\"col-xs-12 col-md-12 col-lg-12 \\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editorr_2\\\" [(ngModel)]=\\\"task.task_description_rext\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 3\\\" id=\\\"attachments_request\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of task.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.tsat_alias.length>6) ?\\n                          (att.tsat_alias |\\n                          slice:0:20)+'..':(att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.name.length > 6)? (att.name |\\n                          slice:0:20)+'..':(att.name) }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #008BCB; display: inline-block; padding: 6px 12px; cursor: pointer; border-radius: 15px;background-color: #008BCB; color:white;\\\"\\n              for=\\\"file-upload-addRequest\\\" class=\\\"custom-file-upload\\\">\\n              <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n            </label>\\n            <input id=\\\"file-upload-addRequest\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              (change)=\\\"onChange($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"erx_addRequest\\\" type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"saveTask(1)\\\" [disabled]=\\\"(!task.task_description_rext || task.task_description_rext == '' || task.task_description_rext == 'undefined' || task.task_subject == '')\\\">\\n              Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!-- . Modal edit external request-->\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdTypeTaskJoin\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modalDialog_newTaskJoin\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\"width: 360px;border-radius: 14px;\\\">\\n        <div class=\\\"modal-header header-event\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <i class=\\\"sq sq-close i_close_typeNewTaskJoin\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title titleType_newTaskJoin\\\"> <i class=\\\"sq sq-create-new-task i_createNewTaskJoin\\\"></i> New\\n            Task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\" style=\\\"    padding-top: 0px;  padding-bottom: 0px;\\\">\\n          <div class=\\\"row row_sectionNewTaskJoin\\\">\\n            <ul *ngIf=\\\"types && types.length > 0\\\" style=\\\"padding: 0px; margin-bottom: 0px;text-transform: uppercase;\\\">\\n              <li *ngFor=\\\"let typ of types\\\" class=\\\"li_newTaskJoin\\\" (click)=\\\"mdShowCreateTaskJoin(typ.type_id, typ.type_name, typ.type_color,typ.type_label)\\\" [ngStyle]=\\\"{'background-color': typ.type_color} \\\">\\n                <i class=\\\"{{typ.type_label}} icons_types_newTaskJoin\\\"></i>\\n                <small>{{typ.type_name}}</small>\\n              </li>\\n            </ul>\\n          </div>\\n        </div>\\n\\n      </div>\\n    </div>\\n  </div>\\n\\n  <!--modal create task join-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdCreateTaskJoin\\\" role=\\\"dialog\\\">\\n    <!--Modal New Task Join-->\\n    <div class=\\\"modal-dialog modalDialog_newTaskJoin\\\" role=\\\"document\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-content modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content new-design2 modalContent_newTaskJoin\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfieldNewTask.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i style=\\\"font-size: 24px;\\\" class=\\\"{{myfilterfieldNewTask.icon}}\\\"></i> {{myfilterfieldNewTask.typetittle}}\\n          </h4>\\n\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row row_sectionNewTaskJoin\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Subject</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"taskJoin.task_subject\\\" placeholder=\\\"\\\">\\n              </div>\\n            </div>\\n            <div class=\\\" form-group col-xs-12 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Category</label>\\n              <p-dropdown id=\\\"dropdownCategory_NewTaskJoin\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                [autoWidth]=\\\"false\\\" [options]=\\\"categorieslblNewTask | filterfield : myfilterfieldNewTask\\\" [(ngModel)]=\\\"taskJoin.cate_id\\\"\\n                placeholder=\\\"Select a Category\\\" filter=\\\"filter\\\" (onChange)=\\\"createFormNewTask(taskJoin.cate_id)\\\"></p-dropdown>\\n\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"dropdownProduct_newTaskJoin\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                  [autoWidth]=\\\"false\\\" [options]=\\\"myproducts\\\" [(ngModel)]=\\\"taskJoin.prod_id\\\" placeholder=\\\"Select a Product\\\"\\n                  filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Group</label>\\n              <p-dropdown id=\\\"dropdownGroup_newTaskJoin\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                [autoWidth]=\\\"false\\\" [options]=\\\"groupsNewTask\\\" [(ngModel)]=\\\"taskJoin.grop_id\\\" placeholder=\\\"Select a Group\\\"\\n                filter=\\\"filter\\\"></p-dropdown>\\n            </div>\\n\\n          </div>\\n          <div class=\\\"row row_sectionNewTaskJoin\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_associateForm_taskJoin\\\" *ngIf=\\\"taskJoin.fields && taskJoin.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenuNew == 1}\\\">\\n                <a id=\\\"associateForm_taskJoin\\\" data-toggle=\\\"tab\\\" href=\\\"#associateForm_newTaskJoin\\\" (click)=\\\"setPageNewTask(1)\\\">Associate\\n                  Form</a>\\n              </li>\\n              <li id=\\\"li_description_taskJoin\\\" [ngClass]=\\\"{'active':tagMenuNew == 2}\\\">\\n                <a id=\\\"description_taskJoin\\\" data-toggle=\\\"tab\\\" href=\\\"#description_newTaskJoin\\\" (click)=\\\"setPageNewTask(2)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_attachments_taskJoin\\\" *ngIf=\\\"taskJoin.attachments && taskJoin.attachments.length > 0\\\"\\n                [ngClass]=\\\"{'active':tagMenuNew == 3}\\\">\\n                <a id=\\\"attachments_taskJoin\\\" data-toggle=\\\"tab\\\" href=\\\"#attachment_newTaskJoin\\\" (click)=\\\"setPageNewTask(3)\\\">Attachments\\n                  <span>({{taskJoin.attachments.length}})</span> </a>\\n              </li>\\n            </ul>\\n            <div *ngIf=\\\"tagMenuNew == 1 && taskJoin.fields && taskJoin.fields.length > 0\\\" id=\\\"associateForm_newTaskJoin\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_createRequest\\\">\\n                  <table class=\\\"table_associateFom_createRequest\\\">\\n                    <thead>\\n                      <th style=\\\"width:30%; text-align: center;\\\">Field name</th>\\n                      <th style=\\\"width:70%; text-align: center;\\\">Data</th>\\n                    </thead>\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr style=\\\"height: 60px;\\\" *ngFor=\\\"let field of taskJoin.fields\\\">\\n                        <td class=\\\"td_formfield_createRequest\\\">\\n                          <div class=\\\"div_formfield_createRequest\\\">\\n                            {{field.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_createRequest\\\">\\n                          <div class=\\\"div_formdata_createRequest\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control div_input_formdata_createRequest\\\" [(ngModel)]=\\\"field.form_data\\\"\\n                              (value)=\\\"field.form_data\\\">\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenuNew == 2\\\" id=\\\"description_newTaskJoin\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editor_1\\\" [(ngModel)]=\\\"taskJoin.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenuNew == 3\\\" id=\\\"attachment_newTaskJoin\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of taskJoin.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.tsat_alias.length > 6) ?\\n                          (att.tsat_alias |\\n                          slice:0:20) + '..' : (att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.name.length > 6) ? (att.name |\\n                          slice:0:20) + '..' : (att.name) }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\"> {{att.size + ' bytes'}}\\n                          <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentNewTaskJoin(att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label for=\\\"file-upload-addTaskJoin\\\" class=\\\"custom-file-upload customUpload_newTaskJoin\\\">\\n              <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n            </label>\\n            <input id=\\\"file-upload-addTaskJoin\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              (change)=\\\"onChangeTask($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"button_2\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close\\n            </button>\\n            <button id=\\\"button_3\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" (click)=\\\"saveTaskJoin()\\\"\\n              class=\\\"btn-success btn-sm btn-add-sprint\\\">\\n              Save\\n            </button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n\\n  </div>\\n  <!-- . modal create task join-->\\n\\n  <div class=\\\"modal modal-sptask\\\" id=\\\"mdAssociateTaskJoin\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\"><i class=\\\"sq sq-statustasks i_associateTaskJoin\\\"></i>Associate\\n            Task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"tab-content\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;margin-bottom: 3px;\\\">\\n                <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2 div_elementsSearchCategories\\\"\\n                  style=\\\"margin-bottom: 10px;\\\">\\n                  <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                    <div class=\\\"label-input-mainfilter\\\">\\n                      <input type=\\\"text\\\" id=\\\"search_categorie\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                        placeholder=\\\"\\\" [(ngModel)]=\\\"searchTaskShared\\\" (keyup)=\\\"changedExtraHandlerTaskShared($event)\\\">\\n                    </div>\\n                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                      <button type=\\\"button\\\" (click)=\\\"filterTextTaskShared()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                        <i class=\\\"sq sq-view\\\"></i>\\n                      </button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div style=\\\"width: 100%;\\\">\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <table class=\\\"table table-bordered table-hover table-striped\\\" style=\\\"margin-bottom: 0px; padding-bottom: 0px;\\\">\\n                    <thead>\\n                      <th style=\\\"text-align:center; width: 5%\\\">\\n                        <i *ngIf=\\\"taskChecked == 0\\\" class=\\\"fa fa-circle-o iconRadioButton-associateTask\\\"></i>\\n                        <i *ngIf=\\\"taskChecked != 0\\\" class=\\\"fa fa-dot-circle-o iconRadioButton-associateTask\\\"> </i>\\n                      </th>\\n                      <th id=\\\"order_group\\\" (click)=\\\"setOrderTaskShared('grop_name')\\\" class=\\\"th_groupTaskShared\\\">Group\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'grop_name'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                      <th id=\\\"order_task\\\" (click)=\\\"setOrderTaskShared('task_id')\\\" class=\\\"th_taskTaskShared\\\">Task\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'task_id'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                      <th id=\\\"order_status\\\" (click)=\\\"setOrderTaskShared('para_status')\\\" class=\\\"th_statusTaskShared\\\">Status\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'para_status'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                      <th id=\\\"order_description\\\" (click)=\\\"setOrderTaskShared('task_description')\\\" class=\\\"th_descriptionTaskShared\\\">Task\\n                        Description\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'task_description'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                      <th id=\\\"order_asigned\\\" (click)=\\\"setOrderTaskShared('asigned')\\\" class=\\\"th_asignedTaskShared\\\">Asigned\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'asigned'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                    </thead>\\n                  </table>\\n                </div>\\n                <div style=\\\"max-height: 600px;overflow: scroll;width: 100%;\\\">\\n                  <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                      <tbody>\\n                        <tr *ngFor=\\\"let task of taskShared\\\">\\n                          <td style=\\\"width: 5%; text-align:center;\\\">\\n                            <div class=\\\"ui-g\\\">\\n                              <p-radioButton name=\\\"radioButtonTask_taskShared\\\" id=\\\"radioButtonTask_taskShared\\\" value=\\\"{{task.task_id}}\\\"\\n                                (onClick)=\\\"checkTask(task.task_id)\\\"></p-radioButton>\\n                            </div>\\n                          </td>\\n                          <td style=\\\"width: 12%; text-align:center; \\\">{{task.grop_name}}</td>\\n                          <td style=\\\"width: 10%; text-align:center;\\\">{{task.task_id}}</td>\\n                          <td style=\\\"width: 14%; text-align: center;\\\">\\n                            <div *ngIf=\\\"task.para_status == 35 || task.para_status == 36 ||task.para_status == 37 \\\">\\n                              <small class=\\\"statusTaskShared task-pending \\\">\\n                                <i class=\\\"sq sq-pending\\\"></i> Pending\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 38\\\">\\n                              <small class=\\\"statusTaskShared task-developing\\\">\\n                                <i class=\\\"sq sq-developing\\\"></i> Developing\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 39\\\">\\n                              <small class=\\\"statusTaskShared task-developing\\\">\\n                                <i class=\\\"sq sq-move-to-testing\\\"></i> Testing\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 41\\\">\\n                              <small class=\\\"statusTaskShared task-improving\\\">\\n                                <i class=\\\"sq sq-improving\\\"></i> Improving\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 42\\\">\\n                              <small class=\\\"statusTaskShared task-expiring\\\">\\n                                <i class=\\\"fa fa-times-circle\\\"></i> Closed\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 40\\\">\\n                              <small class=\\\"statusTaskShared task-completed\\\">\\n                                <i class=\\\"sq sq-completed\\\"></i> Completed\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 44\\\">\\n                              <small class=\\\"statusTaskShared task-backlog\\\">\\n                                <i class=\\\"sq sq-backlog\\\"></i> Backlog\\n                              </small>\\n                            </div>\\n                          </td>\\n                          <td style=\\\"width: 40%;\\\">{{escapeHtml(task.task_description)}}</td>\\n                          <td style=\\\"width: 19%;\\\">{{task.asigned}}</td>\\n                        </tr>\\n                      </tbody>\\n                    </table>\\n                  </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <div class=\\\"contacts-controls\\\">\\n                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                        {{ (currentpageTaskShared * limitpageTaskShared) - limitpageTaskShared + 1 }} - {{\\n                        (currentpageTaskShared * limitpageTaskShared)\\n                        >\\n                        itemcountTaskShared ?\\n                        itemcountTaskShared : (currentpageTaskShared * limitpageTaskShared)\\n                        }} of {{ itemcountTaskShared }} results\\n                      </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                      <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                        [disabled]=\\\"currentpageTaskShared == 1\\\" (click)=\\\"goToTaskShared(0)\\\">\\n                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpageTaskShared == 1\\\"\\n                        (click)=\\\"setCurPageTaskShared(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                        <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                      <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" style=\\\"\\\" [(ngModel)]=\\\"currentpageTaskShared\\\"\\n                        (change)=\\\"reload()\\\">\\n                        <option *ngFor=\\\"let c of pagesTaskShared\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                      </select>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpageTaskShared == lastpageTaskShared\\\"\\n                        (click)=\\\"setCurPageTaskShared(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                        <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                      <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                        [disabled]=\\\"setCurPageTaskShared == lastpageTaskShared\\\" (click)=\\\"goToTaskShared(1)\\\">\\n                        <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"btnClose_AssociateTaskJoin\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n            data-dismiss=\\\"modal\\\">Close\\n          </button>\\n          <button id=\\\"btn_saveAssociateTaskJoin\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" (click)=\\\"associateTaskJoin()\\\"\\n            class=\\\"btn-success btn-sm btn-add-sprint\\\">\\n            Save\\n          </button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n/***/ }),\n/* 877 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"externaltasks\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> EXTERNAL TASKS\\n            <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">External Tasks</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"a_1\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'My Tasks')\\\">My Tasks</a>\\n                        </li>\\n                        <li *ngFor=\\\"let cl of clients\\\">\\n                            <a id=\\\"a_2\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(cl.usex_dbname, cl.client_name)\\\">{{cl.client_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-2 col-sm-4 col-md-6 col-lg-6\\\" style=\\\"display: inline-flex;margin-bottom: 10px;\\\">\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <button type=\\\"button\\\" (click)=\\\"searchTask()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <button type=\\\"button\\\" [disabled]=\\\"!externaltask.length\\\" (click)=\\\"showFilter()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Filter\\\">\\n                                <i class=\\\"fa fa-filter\\\" style=\\\"color:rgb(27, 110, 198); font-size: 22px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-10 col-sm-8 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-10 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input id=\\\"search_task\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"searchTask()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-1\\\">\\n                                <button class=\\\"btn btn-sm btn-sqlx-r\\\" [disabled]=\\\"!externaltask.length\\\" (click)=\\\"exportExcel()\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" type=\\\"button\\\">\\n                                    <i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i>\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!-- end - botones y search -->\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\" style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div *ngIf=\\\"filter\\\" class=\\\"box-header with-border filter-options\\\" style=\\\"margin: 1.5rem;\\\">\\n                    <div class=\\\"col-xs-10 col-sm-11 col-md-11 col-lg-11\\\">\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Subject</label>\\n                            <li *ngIf=\\\"mytaskcopy.description\\\">\\n                                {{mytask.description}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.description\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date initial</label>\\n                            <li *ngIf=\\\"mytask.date_ini\\\">\\n                                {{formatDate(mytask.date_ini)}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytask.date_ini\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date end</label>\\n                            <li *ngIf=\\\"mytask.date_end\\\">\\n                                {{formatDate(mytask.date_end)}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytask.date_end\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Task_ids</label>\\n                            <li *ngFor=\\\"let tk of mytaskcopy.task_ids\\\">\\n                                {{tk}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.task_ids\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Assigned to</label>\\n                            <li *ngFor=\\\"let assig of mytaskcopy.assigned\\\">\\n                                {{ assig.label }}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.assigned || mytaskcopy.assigned.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Creator(s)</label>\\n                            <li *ngFor=\\\"let ur of mytaskcopy.creators\\\">\\n                                {{ ur.label }}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.creators || mytaskcopy.creators.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Product(s)</label>\\n                            <li *ngFor=\\\"let pr of mytaskcopy.products\\\">\\n                                {{pr.label}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.products || mytaskcopy.products.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Project(s)</label>\\n                            <li *ngFor=\\\"let pj of mytaskcopy.projects\\\">\\n                                {{pj.label}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.projects || mytaskcopy.projects.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"text-align: right;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"closeFilter()\\\" class=\\\"pull-rigth\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:#0ba8da; font-weight: bolder;\\\"></i>\\n                        </a>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"isLoading\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && !externaltask.length\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"externaltask && externaltask.length\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th id=\\\"th_1\\\" (click)=\\\"selectAll()\\\" style=\\\"width: 5%; text-align:center;border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                            <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                        </th>\\n                                        <th style=\\\"width: 70%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <thead>\\n                                                    <tr>\\n                                                        <th id=\\\"order_1\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('task_date')\\\">Date\\n                                                            <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_2\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('task_id')\\\">Number\\n                                                            <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_3\\\" style=\\\"text-align: center; width: 22.5%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('user_creator')\\\">Created by\\n                                                            <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_4\\\" style=\\\"text-align: center; width: 22.5%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('user_asigned')\\\">Assigned to\\n                                                            <span [hidden]=\\\"posOrder !== 'user_asigned'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_5\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('proj_id')\\\">Project Related\\n                                                            <span [hidden]=\\\"posOrder !== 'proj_id'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                    </tr>\\n                                                </thead>\\n                                            </table>\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Progress\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 15%;color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Actions\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let tk of externaltask\\\" [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\" style=\\\"text-align: center; vertical-align: middle;\\\">\\n                                                <p-checkbox id=\\\"listask\\\" name=\\\"listask\\\" value=\\\"{{tk.task_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'text-align': 'center', 'background': 'rgb(227, 237, 241)'  } : { 'text-align': 'center'}\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td style=\\\"width: 20%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.task_date) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.task_id) }}\\n                                                        </a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 22.5%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.creator) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 22.5%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.asigned) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\" *ngIf=\\\"tk.proj_id != null\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.proj_id) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\" *ngIf=\\\"tk.proj_id == null\\\">\\n                                                        -\\n                                                    </td>\\n                                                </tr>\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td colspan=\\\"6\\\">\\n                                                        <div class=\\\"descriptionTasks description-fixed-squadlinx\\\" [ngStyle]=\\\"tk.para_status == 42 ? {'border-top': '2px solid white'} : { 'border-top': '2px solid rgb(227,237,241)'} \\\">\\n                                                            <span [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)', 'font-weight': 'bold' } : {'color': 'rgb(79, 93, 100)', 'font-weight': 'bold'}\\\">Description:</span>\\n                                                        </div>\\n                                                        <div class=\\\"descriptionTasks\\\">\\n                                                            <p class=\\\"box-task-description\\\" [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                                  [innerHTML]=\\\"tk.task_description\\\" ></p>\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </table>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'text-align': 'center', 'padding-left': '4px;','background': 'rgb(227, 237, 241)'  } : { 'padding-left': '4px;','text-align': 'center'}\\\">\\n                                            <span [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\" class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tk.task_percentage}}%</span>\\n                                            <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%;\\\">\\n                                                <div class=\\\"success-tasks\\\" [ngStyle]=\\\"tk.para_status == 43 ? { 'background': 'rgb(237, 59, 89)', 'width': tk.task_percentage + '%' } : tk.para_status == 42 ? { 'background': 'rgb(79, 93, 100)' , 'width': tk.task_percentage + '%' } :{'background': 'rgb(68, 180, 248)' , 'width': tk.task_percentage + '%' }\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white','background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <span class=\\\"tool-tip\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Quick view\\\">\\n                                                    <button type=\\\"button\\\" (click)=\\\"showModaltk(tk.task_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-search\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                    <button *ngIf=\\\"tk.para_status != 43 && tk.islocal\\\" type=\\\"button\\\" (click)=\\\"showEditModal(tk)\\\"\\n                                                        class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-quickedit\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Open\\\">\\n                                                    <button *ngIf=\\\"tk.para_status == 42 && tk.para_status != 43 && !tk.islocal\\\"\\n                                                        (click)=\\\"reopenTask(tk.bd_external, tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"fa fa-undo\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span  tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                                    <button *ngIf=\\\"tk.para_status != 42 && tk.para_status != 43 && !tk.islocal\\\"\\n                                                        (click)=\\\"closeTask(tk.bd_external, tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"fa fa-times-circle-o\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <button *ngIf=\\\"tk.para_status != 43 && !tk.islocal\\\" (click)=\\\"deleteTask(tk.bd_external, tk.task_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"tk.task_id\\\" [myDbName]=\\\"tk.bd_external\\\"></taskview>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                            </div>\\n                            <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                                <div class=\\\"contacts-controls\\\">\\n                                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                                (click)=\\\"goTo(0)\\\">\\n                                                <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                        </select>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input id=\\\"input_3\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"ddwn_5\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assigned to</label>\\n                                <p-dropdown id=\\\"ddwn_6\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Project</label>\\n                                <p-dropdown id=\\\"ddwn_7\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"ddwn_8\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendar_2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"input_4\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                                <a id=\\\"editTask-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                                <a id=\\\"editTask-tasklist2\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate\\n                                    Form</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\">\\n                                <a id=\\\"editTask-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\" (click)=\\\"setPage(3)\\\">Attachments <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"p_editor_description_tasklist\\\" [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                      <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                      </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                         </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                                <div class=\\\"div_table_associateFom_editTask\\\">\\n                                    <table class=\\\"table_associateFom_editTask\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 60px;\\\">\\n                                                <td class=\\\"td_formfield_editTask\\\">\\n                                                    <div class=\\\"div_formfield_editTask\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td class=\\\"td_formdata_editTask\\\">\\n                                                    <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                    <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"fa fa-file-o\\\"\\n                                                   *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <img [src]=\\\"att.path\\\"\\n                                                     *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                     style=\\\"height: 100%; max-width: 100%\\\">\\n                                                <i class=\\\"fa fa-file-text-o\\\"\\n                                                   *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-word-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-excel-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-archive-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-powerpoint-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                            </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                                                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                            </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\" for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"button_21\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"button_22\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0)\\\"\\n                            (click)=\\\"saveTask()\\\">Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n      <!--modal search External Task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdSearchExternalTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Main filter</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Description</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"description_taskfilter\\\" name=\\\"description_taskfilter\\\"\\n                                    [(ngModel)]=\\\"mytask.description\\\" placeholder=\\\"type a keyword\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-chips\\\">\\n                                <label>Task id(s)</label>\\n                                <p-chips class=\\\"chipsSqlx\\\" [(ngModel)]=\\\"mytask.task_ids\\\" placeholder=\\\"Ex.17,19-22 enter\\\"></p-chips>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Assigned to</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete *ngIf=\\\"textGroup\\\" class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.assigned\\\"\\n                                        [suggestions]=\\\"usersExternal\\\" (completeMethod)=\\\"filterMultiple($event, 4)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Assigned to\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                    <p-autoComplete *ngIf=\\\"!textGroup\\\" class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.assigned\\\"\\n                                        [suggestions]=\\\"usersFilter\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Assigned to\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Creator(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete *ngIf=\\\"textGroup\\\" class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.creators\\\"\\n                                        [suggestions]=\\\"usersFilter\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                    <p-autoComplete *ngIf=\\\"!textGroup\\\" class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.creators\\\"\\n                                        [suggestions]=\\\"usersExternal\\\" (completeMethod)=\\\"filterMultiple($event, 4)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Product(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.products\\\"\\n                                        [suggestions]=\\\"productsFilter\\\" (completeMethod)=\\\"filterMultiple($event, 1)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Products(s)\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Project(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.projects\\\"\\n                                        [suggestions]=\\\"projectsFilter\\\" (completeMethod)=\\\"filterMultiple($event, 3)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Project(s)\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date initial</label>\\n                                <p-calendar id=\\\"calendarDateInit_taskfilter\\\" name=\\\"calendarDateInit_taskfilter\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mytask.date_ini\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date end</label>\\n                                <p-calendar id=\\\"calendarDateEnd_taskfilter\\\" name=\\\"calendarDateEnd_taskfilter\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mytask.date_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button style=\\\"position: initial; max-width: 83px;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"filterTask()\\\">\\n                            Search\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 878 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"logs\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> LOGS\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Logs</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\" style=\\\"min-height: 50px;background: #dce3e6;\\\">\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div *ngIf = \\\"modules && modules.length > 0\\\" class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 dropdownSqlx\\\" style=\\\"text-align: center;margin-bottom: 3px;\\\">\\n                        <p-dropdown id=\\\"ddwnr_log\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"modules\\\" [(ngModel)]=\\\"log.modu_id\\\" (onChange)=\\\"updateData(modules.label)\\\" placeholder=\\\"Module\\\" filter=\\\"filter\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 calendar-squadlinx\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <p-calendar id=\\\"dateinit-log\\\" name=\\\"date-log\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"log.date_init\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2015:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div  class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 calendar-squadlinx\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <p-calendar id=\\\"dateend-log\\\" name=\\\"date-log\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"log.date_end\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2015:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-2 col-lg-2\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                <div class=\\\"label-input-mainfilter\\\">\\n                                    <input id=\\\"search_task\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"search by a keywords\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                </div>\\n                                <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                        <i class=\\\"sq sq-view\\\"></i>\\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-1 col-lg-1\\\" style=\\\"text-align: center;margin-bottom: 3px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);margin-left: 8px;\\\" (click)=\\\"getLogs()\\\" [disabled]=\\\"validateLog()\\\"> Search</button>\\n                    </div>\\n                    <!-- end - botones y search -->\\n                </div>\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && logs.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"logs.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;margin-bottom: 0px;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th style=\\\"width: 70%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <thead>\\n                                                    <tr>\\n                                                        <th id=\\\"order_7\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100)\\\">\\n                                                            Module\\n                                                        </th>\\n                                                        <th id=\\\"order_3\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_related')\\\">\\n                                                            User\\n                                                            <span [hidden]=\\\"posOrder !== 'user_related'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_8\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" \\n                                                        (click)=\\\"setOrder('logg_descripcion')\\\">\\n                                                            Description\\n                                                            <span [hidden]=\\\"posOrder !== 'logg_descripcion'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_1\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" \\n                                                        (click)=\\\"setOrder('logg_fecha')\\\">\\n                                                            Date\\n                                                            <span [hidden]=\\\"posOrder !== 'logg_fecha'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_4\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" \\n                                                        (click)=\\\"setOrder('logg_ip')\\\">\\n                                                            ip\\n                                                            <span [hidden]=\\\"posOrder !== 'logg_ip'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_5\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100)\\\" \\n                                                        (click)=\\\"setOrder('logg_agente')\\\">\\n                                                            Agent\\n                                                            <span [hidden]=\\\"posOrder !== 'logg_agente'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                    </tr>\\n                                                </thead>\\n                                            </table>\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                            </table>\\n                            <table id=\\\"results2\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let lg of logs\\\">\\n                                        <td style=\\\"text-align: center;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td style=\\\"text-align: center; width: 20%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_modulo }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.user_related }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_descripcion }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 10%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_fecha }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_ip }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 20%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_agente }}</a>\\n                                                    </td>\\n                                                </tr>\\n                                            </table>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                            </div>\\n                            <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                                <div class=\\\"contacts-controls\\\">\\n                                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                                (click)=\\\"goTo(0)\\\">\\n                                                <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                        </select>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header modal-header-info\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Subject</label>\\n                        <p>{{ task.task_subject }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Product</label>\\n                        <p>{{ task.prod_name }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Assigned to</label>\\n                        <p>{{ task.asigned }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Description</label>\\n                        <div [innerHTML]=\\\"task.task_description\\\"></div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                </span>\\n                            </a>\\n                            <div class=\\\"mailbox-attachment-info\\\">\\n                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                </span>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddTask\\\" role=\\\"dialog\\\">\\n        <!--Modal New Task-->\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"ddwn_4\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"ddwn_3\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"ddwn_2\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"ddwn_1\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendar_1\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\"  id=\\\"spinner_1\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"height: 58px;\\\">\\n                            <label>Options</label>\\n                            <div class=\\\"col-xs-12 col-md-12 col-lg-12 \\\" style=\\\"padding-top: 5px;\\\">\\n                                <label class=\\\"form-check-label\\\">\\n                                    <input id=\\\"check_1\\\" type=\\\"checkbox\\\" class=\\\"form-check-input\\\" [(ngModel)]=\\\"task.completed\\\">\\n                                    Mark as Complete\\n                                </label>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_task\\\" [ngClass]=\\\"{'active':tagMenuNew == 1}\\\">\\n                                <a id=\\\"editTask-request\\\" data-toggle=\\\"tab\\\" href=\\\"#description_newTask\\\"\\n                                   (click)=\\\"setPageNewTask(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuNew == 2}\\\">\\n                                <a id=\\\"editTask-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_newTask\\\"\\n                                   (click)=\\\"setPageNewTask(2)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuNew == 1\\\" id=\\\"description_newTask\\\"\\n                             class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editor_1\\\" [(ngModel)]=\\\"task.task_description2\\\"\\n                                          [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                      <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                      </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\"\\n                                                  type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\"\\n                                                  type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenuNew == 2 && task.attachments && task.attachments.length > 0\\\"\\n                             id=\\\"attachments_newTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                <i class=\\\"fa fa-file-o\\\"\\n                                   *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                <img [src]=\\\"att.path\\\"\\n                                     *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                     style=\\\"height: 100%; max-width: 100%\\\">\\n                                <i class=\\\"fa fa-file-text-o\\\"\\n                                   *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                <i class=\\\"fa fa-file-word-o\\\"\\n                                   *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                <i class=\\\"fa fa-file-excel-o\\\"\\n                                   *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                <i class=\\\"fa fa-file-archive-o\\\"\\n                                   *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                <i class=\\\"fa fa-file-powerpoint-o\\\"\\n                                   *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                            </span>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                    <button id=\\\"button_1\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                            (click)=\\\"deleteAttachment(att)\\\">\\n                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\" for=\\\"file-upload2\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload2\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"button_2\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"button_3\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateTask()\\\" (click)=\\\"saveTask()\\\"> Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input id=\\\"input_3\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"ddwn_5\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assigned to</label>\\n                                <p-dropdown id=\\\"ddwn_6\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Project</label>\\n                                <p-dropdown id=\\\"ddwn_7\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"ddwn_8\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendar_2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"input_4\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                                <a id=\\\"editTask-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                                <a id=\\\"editTask-tasklist2\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate\\n                                    Form</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\">\\n                                <a id=\\\"editTask-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\" (click)=\\\"setPage(3)\\\">Attachments <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"p_editor_description_tasklist\\\" [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                      <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                      </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                         </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                                <div class=\\\"div_table_associateFom_editTask\\\">\\n                                    <table class=\\\"table_associateFom_editTask\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 60px;\\\">\\n                                                <td class=\\\"td_formfield_editTask\\\">\\n                                                    <div class=\\\"div_formfield_editTask\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td class=\\\"td_formdata_editTask\\\">\\n                                                    <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                    <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"fa fa-file-o\\\"\\n                                                   *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <img [src]=\\\"att.path\\\"\\n                                                     *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                     style=\\\"height: 100%; max-width: 100%\\\">\\n                                                <i class=\\\"fa fa-file-text-o\\\"\\n                                                   *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-word-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-excel-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-archive-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-powerpoint-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                            </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                                                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                            </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\" for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"button_21\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"button_22\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0)\\\"\\n                            (click)=\\\"saveTask()\\\">Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 879 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<my-header></my-header>\\n<section id=\\\"notifications\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-notifications\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> NOTIFICATIONS\\n            <small style=\\\"font-size:15px;\\\">Calendar</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Notifications</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;height:939px;\\\">\\n        <div class=\\\"row\\\" style=\\\"min-height: 50px;background: #dce3e6;\\\">\\n            <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 calendar-squadlinx\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <p-calendar id=\\\"dateinit-notif\\\" name=\\\"date-notif\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"notif.date_init\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2015:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div  class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 calendar-squadlinx\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <p-calendar id=\\\"dateend-notif\\\" name=\\\"date-notif\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"notif.date_end\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2015:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-2 col-lg-2\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                <div class=\\\"label-input-mainfilter\\\">\\n                                    <input id=\\\"search_task\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"search by a keywords\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                </div>\\n                                <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-view\\\"></i> \\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-1 col-lg-1\\\" style=\\\"text-align: center;margin-bottom: 3px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);margin-left: 8px;\\\" (click)=\\\"getNotifications()\\\" [disabled]=\\\"validateNotificatios()\\\"> Search</button>\\n                    </div>\\n                    <!-- end - botones y search -->\\n                </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && notifications.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"notifications.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div id=\\\"notifications-dashboard\\\" class=\\\"col-xs-11 col-sm-11 col-md-12 col-lg-12 notifications-types\\\">\\n                        <div class=\\\"box\\\" style=\\\"box-shadow:0 0px 0px rgba(0, 0, 0, 0.1); border-top:none;\\\">\\n                            <div class=\\\"box-body chat-notif\\\" style=\\\"width:100%; height: 613px; overflow-y:scroll;\\\">\\n                            <div class=\\\"item\\\" *ngFor=\\\"let nt of notifications\\\">\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'new_task'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\" style=\\\"text-decoration: none;\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    <span>{{ nt.noti_title }} </span> task\\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <span> Task : </span>{{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                                    <div class=\\\"btn-goto-task pull-right\\\">\\n                                    <button id=\\\"mdtask-notif-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdTask\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">go to task </span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                <!--TASK-->\\n                                </div>\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'comment_task'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    <span> {{ nt.noti_title }} </span> task\\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                                    <div class=\\\"btn-ViewMore pull-right\\\">\\n                                    <button id=\\\"viewTask_commentTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdTask\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">View task</span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                </div>\\n                                <!--comments-task-->\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'status_task'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    - Task #{{nt.task_id + \\\" \\\"}}<span> {{ nt.noti_title }} </span> \\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                                    <div class=\\\"btn-ViewMore pull-right\\\">\\n                                    <button id=\\\"viewTask_statusTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdTask\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">View task</span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                </div>\\n                                <!--status-task-->\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'extra_task'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    - Task #{{nt.task_id + \\\" \\\"}}<span> {{ nt.noti_title }} </span> \\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                                    <div class=\\\"btn-ViewMore pull-right\\\">\\n                                    <button id=\\\"viewTask_extraTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdTask\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">View task</span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                </div>\\n                                <!--extra-task-->\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'comment_proj'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    <span>{{ nt.noti_title }} </span> project\\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i>\\n                                    {{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                \\n                                    <div class=\\\"pull-right btn-send-task\\\">\\n                                    <button id=\\\"mdproject-notif-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.proj_id\\\" (click)=\\\"showProject(nt.proj_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdprojectView\\\" style=\\\"background-color:#47B5FB; border-radius:10px; color:white; font-size: 15px; font-weight: bold;\\\">\\n                                        <span>View Project</span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                </div>\\n                                <!--comments project-->\\n                                <taskview [myTaskId]=\\\"nt.task_id\\\"></taskview>\\n                            </div>\\n                            <!--.ngfor-->\\n                            </div>\\n                            <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                                    <div class=\\\"contacts-controls\\\">\\n                                        <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                                {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                                >\\n                                                itemcount ?\\n                                                itemcount : (currentpage * limitpage)\\n                                                }} of {{ itemcount }} results\\n                                            </button>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                                        (click)=\\\"goTo(0)\\\">\\n                                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                                                        <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                            <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                                    <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                                </select>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                                    (click)=\\\"setCurPage(1)\\\">\\n                                                    <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                            </span>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                                    (click)=\\\"goTo(1)\\\">\\n                                                    <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                            </span>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            <!--box-body-->\\n                        </div>\\n                        <!--box success-->\\n                    </div>\\n                </div>\\n                </div>\\n            </div>\\n    </section>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n/***/ }),\n/* 880 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<a href=\\\"javascript:void(0)\\\" (click)=addDocument()>\\n    <span class=\\\"search-document\\\"  data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" style=\\\"padding: 0px; background: none;\\\">\\n        <img src=\\\"img/addblue.svg\\\" style=\\\"height: 40px; width: 40px;\\\">\\n    </span>\\n</a> \\n<my-header></my-header>\\n<section id=\\\"documents\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content\\\">\\n        <div class=\\\"box-header documents-header\\\">        \\n            <div class=\\\"documentstype col-xs-8 col-sm-6 col-md-5 col-lg-6\\\" style=\\\"left: 25%;padding-top: 23px;\\\">\\n                <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" id=\\\"dropdown-documents\\\"  name=\\\"documentstype\\\" [options]=\\\"typedocuments\\\" [(ngModel)]=\\\"document.value\\\" (onChange)=getDocuments(document.value) ></p-dropdown>\\n            </div>\\n        </div>          \\n        <div class=\\\"documents-content\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center; margin-top:20px;\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div *ngIf=\\\"!isLoading && documents.length == 0\\\" style=\\\"text-align: center;\\\">\\n                <h3 style=\\\"color:#3EA8F9;\\\"> NO DATA </h3>\\n            </div>\\n            <div class=\\\"documents-title\\\" *ngIf=\\\"documents && documents.length >0\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Date</div>\\n                    <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Created by</div>\\n                    <div class=\\\"col-xs-5\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Documents</div>\\n                    <div class=\\\"col-xs-3\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Actions</div>\\n                </div>\\n            </div>\\n            <div class=\\\"box-body documents-body\\\" *ngIf=\\\"documents && documents.length >0\\\">\\n                <div class=\\\"row\\\" *ngFor=\\\"let x of documents\\\" style=\\\"border-bottom: 1px solid #B2B2B2;\\\">\\n                    <div  style=\\\"min-height: 40px; padding-top: 10px;\\\">\\n                        <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"> \\n                            {{x.cloud_date}}\\n                        </div>\\n                        <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"> \\n                            {{x.creator}}\\n                        </div>\\n                        <div class=\\\"col-xs-5\\\" style=\\\"text-align: center; font-size: 16px; color: #283760;\\\">{{x.title}}</div>\\n                        <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\" style=\\\"color: #38A0F4; text-align: center;\\\"> \\n                            <button (click) = \\\"downloadDocument(x.id_cloud)\\\" style=\\\"border: none; background: transparent; \\\">\\n                                <img class=\\\"download-document\\\" src=\\\"img/download_mailbox.svg\\\">\\n                            </button>\\n                            <button (click) = \\\"editDocument(x)\\\" style=\\\"border: none; background: transparent; \\\">\\n                                <img src=\\\"img/pencil.svg\\\" style=\\\"height: 20px; width: 20px;\\\">\\n                            </button>\\n                            <button (click) = \\\"confirmDocument(x)\\\" style=\\\"border: none; background: transparent;\\\">\\n                                <img src=\\\"img/uncheck.svg\\\" style=\\\"height: 20px; width: 20px;\\\">\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal modal-documents fade\\\" id=\\\"mdEditdocument\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%;\\\">\\n                <div class=\\\"modal-content\\\" style=\\\"border-radius: 10px;\\\">\\n                    <div class=\\\"modal-header-documents\\\">\\n                        <div >\\n                            <label>SHARE WITH</label>\\n                            <button type=\\\"button\\\" class=\\\"pull-right btnclose-document\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                                <span aria-hidden=\\\"true\\\">x</span>\\n                            </button>\\n                        </div> \\n                    </div>\\n                    <div class=\\\"modal-body\\\" style=\\\"min-height: 200px;padding: 30px;\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5\\\">\\n                                <ul class=\\\"shareuser\\\">\\n                                    <p-listbox [options]=\\\"listgroups\\\" [(ngModel)]=\\\"editdocument.shared\\\" multiple=\\\"multiple\\\" checkbox=\\\"checkbox\\\" ></p-listbox>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-7\\\">\\n                                <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"margin-bottom:10px; padding: 0px;\\\">\\n                                    <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]='false'  class=\\\"dropdown-document\\\" [options]=\\\"resourcetype\\\" [(ngModel)]=\\\"editdocument.id_type\\\"></p-dropdown>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"padding: 0px;\\\">\\n                                    <input [ngClass]=\\\"{'field-required':requiredTitle == true}\\\" class=\\\"inputeditdocument\\\" type=\\\"text\\\" [(ngModel)]=\\\"editdocument.title\\\" placeholder=TITLE >\\n                                </div>\\n                                <div class=\\\"col-xs-12\\\" style=\\\"padding: 0px;\\\">\\n                                    <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]='false' id=\\\"dropdowndocuments\\\" class=\\\"dropdown-type-document\\\" [options]=\\\"typedocuments\\\" [(ngModel)]=\\\"editdocument.id_class\\\"></p-dropdown>\\n                                </div>\\n                                <div class=\\\"col-xs-12\\\" style=\\\"padding: 0px;\\\">\\n                                    <div *ngIf=\\\"editdocument.id_type == '76' \\\"> \\n                                        <input [ngClass]=\\\"{'field-required':required == true}\\\" class=\\\"urldocument\\\" type=\\\"text\\\" [(ngModel)]=\\\"editdocument.clou_nameUrl\\\" placeholder=URL>\\n                                    </div>\\n                                    <div *ngIf=\\\"editdocument.id_type == '75' \\\"> \\n                                        <div class=\\\"file-document\\\" [ngClass]=\\\"{'field-required':required == true}\\\"> \\n                                            <input id=\\\"file-upload2\\\"  type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.svg\\\" (change)=\\\"onChange($event)\\\" style=\\\"height: 32px; padding-left: 5px; padding-top: 8px; width: 100%\\\" /> \\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>    \\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-right\\\">\\n                            <button class=\\\"btn-close-documents\\\" data-dismiss=\\\"modal\\\"  type=\\\"button\\\">Close\\n                            </button>\\n                            <button class=\\\"btn-add-documents\\\" type=\\\"button\\\" (click)=saveDocuments()>\\n                                Save\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal fade\\\" id=\\\"mdDelete\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%; max-width: 478px;\\\">\\n                <div class=\\\"modal-content\\\" style=\\\"border-radius: 10px;\\\">\\n                    <div class=\\\"modal-header-alert\\\" >\\n                        <div class=\\\"header-alert-icon\\\">\\n                            <span><i class=\\\"fa fa-exclamation\\\"></i></span>\\n                        </div>\\n                        <h2>Are you sure?</h2>\\n                    </div>\\n                    <div class=\\\"modal-body\\\" style=\\\"padding: 0px 15px 10px 15px;\\\">\\n                        <div style=\\\"text-align:center;\\\">\\n                            <h4>Do you really want to delete?</h4>\\n                        </div>\\n                    </div>             \\n                    <div class=\\\"modal-footer\\\" style=\\\"padding-top: 0px; border: none;\\\">\\n                        <div style=\\\"text-align: center; height: 60px; padding-top: 20px; border-top: 1px solid #CBC9C9;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn-confirm-alert\\\"  (click)=deleteDocument(deletedocument) data-dismiss=\\\"modal\\\">Yes</button>\\n                            <button type=\\\"button\\\" class=\\\"btn-alert\\\" data-dismiss=\\\"modal\\\">No</button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </section>      \\n</section>\\n\\n\\n\\n\\n\\n\\n  \";\n\n/***/ }),\n/* 881 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<a href=\\\"javascript:void(0)\\\" (click)=addDocument()>\\n    <span class=\\\"search-document\\\"  data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" style=\\\"padding: 0px; background: none;\\\">\\n        <img src=\\\"img/addblue.svg\\\" style=\\\"height: 40px; width: 40px;\\\">\\n    </span>\\n</a> \\n<my-header></my-header>\\n<section id=\\\"documents\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content\\\">\\n        <div class=\\\"box-header documents-header\\\">        \\n            <div class=\\\"documentstype col-xs-8 col-sm-6 col-md-5 col-lg-6\\\" style=\\\"left: 25%;padding-top: 23px;\\\">\\n                <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" id=\\\"dropdown-documents\\\"  name=\\\"documentstype\\\" [options]=\\\"typedocuments\\\" [(ngModel)]=\\\"document.value\\\" (onChange)=listCloud(document.value) ></p-dropdown>\\n            </div>\\n        </div>          \\n        <div class=\\\"documents-content\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center; margin-top:20px;\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div *ngIf=\\\"!isLoading && documents.length == 0\\\" style=\\\"text-align: center;\\\">\\n                <h3 style=\\\"color:#3EA8F9;\\\"> NO DATA </h3>\\n            </div>\\n            <div class=\\\"documents-title\\\" *ngIf=\\\"documents && documents.length >0\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\"> Date</div>\\n                    <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Created by</div>\\n                    <div class=\\\"col-xs-5\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Documents</div>\\n                    <div class=\\\"col-xs-3\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Actions</div>\\n                </div>\\n            </div>\\n            <div class=\\\"box-body documents-body\\\" *ngIf=\\\"documents && documents.length >0\\\">\\n                <div class=\\\"row\\\" *ngFor=\\\"let x of documents\\\" style=\\\"border-bottom: 1px solid #B2B2B2;\\\">\\n                    <div  style=\\\"min-height: 40px; padding-top: 10px;\\\">\\n                        <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"> \\n                            {{x.cloud_date}}\\n                        </div>\\n                        <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"> \\n                            {{x.creator}}\\n                        </div>\\n                        <div class=\\\"col-xs-5\\\" style=\\\"text-align: center; font-size: 16px; color: #283760;\\\">{{x.title}}</div>\\n                        <div class=\\\"col-xs-3\\\" style=\\\"color: #38A0F4; text-align: center;\\\"> \\n                            <button (click) = \\\"downloadDocument(x.id_cloud)\\\" style=\\\"border: none; background: transparent; \\\">\\n                                <img class=\\\"download-document\\\" src=\\\"img/download_mailbox.svg\\\">\\n                            </button> \\n                            <button (click) = \\\"editDocument(x)\\\" style=\\\"border: none; background: transparent; \\\">\\n                                <img src=\\\"img/pencil.svg\\\" style=\\\"height: 20px; width: 20px;\\\">\\n                            </button>\\n                            <button (click) = \\\"confirmDocument(x)\\\" style=\\\"border: none; background: transparent;\\\">\\n                                <img src=\\\"img/uncheck.svg\\\" style=\\\"height: 20px; width: 20px;\\\">\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal modal-documents fade\\\" id=\\\"mdEditdocument\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%;\\\">\\n                <div class=\\\"modal-content\\\" style=\\\"border-radius: 10px;\\\">\\n                    <div class=\\\"modal-header-documents\\\">\\n                        <div >\\n                            <label>SHARE WITH</label>\\n                            <button type=\\\"button\\\" class=\\\"pull-right btnclose-document\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                                <span aria-hidden=\\\"true\\\">x</span>\\n                            </button>\\n                        </div> \\n                    </div>\\n                    <div class=\\\"modal-body\\\" style=\\\"min-height: 200px;padding: 30px;\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5\\\">\\n                                <ul class=\\\"shareuser\\\">\\n                                    <p-listbox [options]=\\\"listusers\\\" [(ngModel)]=\\\"editdocument.shared\\\" multiple=\\\"multiple\\\" checkbox=\\\"checkbox\\\" ></p-listbox>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-7\\\">\\n                                <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"margin-bottom:10px; padding: 0px;\\\">\\n                                    <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]='false'  class=\\\"dropdown-document\\\" [options]=\\\"resourcetype\\\" [(ngModel)]=\\\"editdocument.id_type\\\"></p-dropdown>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"padding: 0px;\\\">\\n                                    <input [ngClass]=\\\"{'field-required':requiredTitle == true}\\\" class=\\\"inputeditdocument\\\" type=\\\"text\\\" [(ngModel)]=\\\"editdocument.title\\\" placeholder=TITLE >\\n                                </div>\\n                                <div class=\\\"col-xs-12\\\" style=\\\"padding: 0px;\\\">\\n                                    <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]='false' id=\\\"dropdowndocuments\\\" class=\\\"dropdown-type-document\\\" [options]=\\\"typedocuments\\\" [(ngModel)]=\\\"editdocument.id_class\\\"></p-dropdown>\\n                                </div>\\n                                <div class=\\\"col-xs-12\\\" style=\\\"padding: 0px;\\\">\\n                                    <div *ngIf=\\\"editdocument.id_type == '76' \\\"> \\n                                        <input [ngClass]=\\\"{'field-required':required == true}\\\" class=\\\"urldocument\\\" type=\\\"text\\\" [(ngModel)]=\\\"editdocument.clou_nameUrl\\\" placeholder=URL>\\n                                    </div>\\n                                    <div *ngIf=\\\"editdocument.id_type == '75' \\\"> \\n                                        <div class=\\\"file-document\\\" [ngClass]=\\\"{'field-required':required == true}\\\"> \\n                                            <input id=\\\"file-upload2\\\"  type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.svg\\\" (change)=\\\"onChange($event)\\\" style=\\\"height: 32px; padding-left: 5px; padding-top: 8px; width: 100%\\\" /> \\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>    \\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-right\\\">\\n                            <button class=\\\"btn-close-documents\\\" data-dismiss=\\\"modal\\\"  type=\\\"button\\\">Close\\n                            </button>\\n                            <button class=\\\"btn-add-documents\\\" type=\\\"button\\\" (click)=saveDocuments()>\\n                                Save\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal fade\\\" id=\\\"mdDelete\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%; max-width: 478px;\\\">\\n                <div class=\\\"modal-content\\\" style=\\\"border-radius: 10px;\\\">\\n                    <div class=\\\"modal-header-alert\\\" >\\n                        <div class=\\\"header-alert-icon\\\">\\n                            <span><i class=\\\"fa fa-exclamation\\\"></i></span>\\n                        </div>\\n                        <h2>Are you sure?</h2>\\n                    </div>\\n                    <div class=\\\"modal-body\\\" style=\\\"padding: 0px 15px 10px 15px;\\\">\\n                        <div style=\\\"text-align:center;\\\">\\n                            <h4>Do you really want to delete?</h4>\\n                        </div>\\n                    </div>             \\n                    <div class=\\\"modal-footer\\\" style=\\\"padding-top: 0px; border: none;\\\">\\n                        <div style=\\\"text-align: center; height: 60px; padding-top: 20px; border-top: 1px solid #CBC9C9;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn-confirm-alert\\\"  (click)=deleteDocument(deletedocument) data-dismiss=\\\"modal\\\">Yes</button>\\n                            <button type=\\\"button\\\" class=\\\"btn-alert\\\" data-dismiss=\\\"modal\\\">No</button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </section>      \\n</section>\\n\\n\\n\\n\\n\\n\\n  \";\n\n/***/ }),\n/* 882 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.routes = undefined;\n\nvar _login = __webpack_require__(250);\n\nvar _dashboard = __webpack_require__(251);\n\nvar _taskboard = __webpack_require__(252);\n\nvar _tasklist = __webpack_require__(253);\n\nvar _task = __webpack_require__(52);\n\nvar _projectlist = __webpack_require__(386);\n\nvar _project = __webpack_require__(83);\n\nvar _mailbox = __webpack_require__(387);\n\nvar _directory = __webpack_require__(388);\n\nvar _daily = __webpack_require__(389);\n\nvar _contact = __webpack_require__(390);\n\nvar _sprints = __webpack_require__(392);\n\nvar _sprint = __webpack_require__(391);\n\nvar _schedulerlistComponent = __webpack_require__(394);\n\nvar _schedulerComponent = __webpack_require__(393);\n\nvar _eventslistComponent = __webpack_require__(395);\n\nvar _eventsComponent = __webpack_require__(396);\n\nvar _roles = __webpack_require__(397);\n\nvar _rol = __webpack_require__(398);\n\nvar _todolist = __webpack_require__(399);\n\nvar _users = __webpack_require__(400);\n\nvar _usershistory = __webpack_require__(401);\n\nvar _parameterlist = __webpack_require__(402);\n\nvar _parameters = __webpack_require__(403);\n\nvar _categories = __webpack_require__(404);\n\nvar _units = __webpack_require__(405);\n\nvar _approvals = __webpack_require__(414);\n\nvar _product = __webpack_require__(408);\n\nvar _productlist = __webpack_require__(409);\n\nvar _typelist = __webpack_require__(410);\n\nvar _code = __webpack_require__(411);\n\nvar _wiki = __webpack_require__(412);\n\nvar _requests = __webpack_require__(413);\n\nvar _notfoundComponent = __webpack_require__(406);\n\nvar _notpermitsComponent = __webpack_require__(407);\n\nvar _projectboard = __webpack_require__(415);\n\nvar _static = __webpack_require__(416);\n\nvar _burndown = __webpack_require__(417);\n\nvar _passwordrecovery = __webpack_require__(418);\n\nvar _usersettings = __webpack_require__(419);\n\nvar _preferences = __webpack_require__(420);\n\nvar _clientsettings = __webpack_require__(421);\n\nvar _dailyboard = __webpack_require__(422);\n\nvar _guideburndown = __webpack_require__(424);\n\nvar _guideprojectboard = __webpack_require__(425);\n\nvar _reports = __webpack_require__(423);\n\nvar _grouplist = __webpack_require__(427);\n\nvar _mysprint = __webpack_require__(428);\n\nvar _userguidelogin = __webpack_require__(426);\n\nvar _whiteboard = __webpack_require__(429);\n\nvar _externalrequests = __webpack_require__(430);\n\nvar _externaltasklist = __webpack_require__(431);\n\nvar _loglist = __webpack_require__(432);\n\nvar _notifications = __webpack_require__(433);\n\nvar _documents = __webpack_require__(434);\n\nvar _cloud = __webpack_require__(435);\n\nvar routes = exports.routes = [{ path: '', redirectTo: '/login', pathMatch: 'full' }, { path: 'login', component: _login.LoginComponent }, { path: 'dashboard', component: _dashboard.DashboardComponent }, { path: 'burndownapp/:module/:action/:users/:userdetail', component: _burndown.BurndownComponent }, { path: 'taskboard', component: _taskboard.TaskboardComponent }, { path: 'tasks', component: _tasklist.TaskListComponent }, { path: 'task/:idtask', component: _task.TaskComponent }, { path: 'projects', component: _projectlist.ProjectListComponent }, { path: 'project/:idproject', component: _project.ProjectComponent }, { path: 'mailbox', component: _mailbox.MailboxComponent }, { path: 'directory', component: _directory.DirectoryComponent }, { path: 'daily', component: _daily.DailyComponent }, { path: 'contact/:idcontact', component: _contact.ContactComponent }, { path: 'sprints', component: _sprints.SprintsComponent }, { path: 'sprint/:idsprint', component: _sprint.SprintComponent }, { path: 'schedulerlist', component: _schedulerlistComponent.SchedulerListComponent }, { path: 'scheduler/:idscheduler', component: _schedulerComponent.SchedulerComponent }, { path: 'eventslist', component: _eventslistComponent.EventsListComponent }, { path: 'events/:idmeeting', component: _eventsComponent.EventsComponent }, { path: 'sprint/:idsprint', component: _sprint.SprintComponent }, { path: 'scheduler', component: _schedulerComponent.SchedulerComponent }, { path: 'roles', component: _roles.RolesComponent }, { path: 'roles/:idrole', component: _rol.RolComponent }, { path: 'todolist', component: _todolist.TodolistComponent }, { path: 'users', component: _users.UsersComponent }, { path: 'users/:iduser', component: _usershistory.UsersHistoryComponent }, { path: 'parameterlist/:idclass', component: _parameterlist.ParameterListComponent }, { path: 'parameters', component: _parameters.ParametersComponent }, { path: 'categories', component: _categories.CategoriesComponent }, { path: 'units', component: _units.UnitsComponent }, { path: 'approvals', component: _approvals.ApprovalsComponent }, { path: 'products', component: _productlist.ProductListComponent }, { path: 'projectboard', component: _projectboard.ProjectboardComponent }, { path: 'typelist', component: _typelist.TypeListComponent }, { path: 'code', component: _code.CodeComponent }, { path: 'wiki', component: _wiki.WikiComponent }, { path: 'requests', component: _requests.RequestsComponent }, { path: 'static/:folder/:attchname', component: _static.StaticComponent }, { path: 'passwordrecovery', component: _passwordrecovery.PasswordRecoveryComponent }, { path: 'usersettings', component: _usersettings.UserSettingsComponent }, { path: 'requestsettings', component: _preferences.RequestsSettingsComponent }, { path: 'clientsettings', component: _clientsettings.ClientSettingsComponent }, { path: 'dailyboard', component: _dailyboard.DailyBoardComponent }, { path: 'reports', component: _reports.ReportsComponent }, { path: 'guideburndown', component: _guideburndown.GuideburndownComponent }, { path: 'guideprojectboard', component: _guideprojectboard.GuideprojectboardComponent }, { path: 'grouplist', component: _grouplist.GroupListComponent }, { path: 'mysprint', component: _mysprint.MySprintComponent }, { path: 'userguidelogin', component: _userguidelogin.UserguideloginComponent }, { path: 'whiteboard', component: _whiteboard.WhiteboardComponent }, { path: 'externalrequests', component: _externalrequests.ExternalRequestsComponent }, { path: 'externaltasks', component: _externaltasklist.ExternalTaskListComponent }, { path: 'loglist', component: _loglist.LogListComponent }, { path: 'notifications', component: _notifications.NotificationsComponent }, { path: 'documents', component: _documents.DocumentsComponent }, { path: 'cloud', component: _cloud.CloudComponent }, { path: '404', component: _notfoundComponent.NotfoundComponent }, { path: '403', component: _notpermitsComponent.NotpermitsComponent }, { path: '**', redirectTo: '404' }, { path: 'beta', component: _static.StaticComponent }];\n\n/***/ })\n],[439]);\n\n\n// WEBPACK FOOTER //\n// main.bundle.js","import {\n  Directive,\n  ElementRef,\n  NgModule,\n} from '@angular/core';\n\n@Directive({\n  selector: '[toastContainer]',\n  exportAs: 'toastContainer',\n})\nexport class ToastContainerDirective {\n  constructor(private el: ElementRef) { }\n  getContainerElement(): HTMLElement {\n    return this.el.nativeElement;\n  }\n}\n\n@NgModule({\n  declarations: [ToastContainerDirective],\n  exports: [ToastContainerDirective],\n})\nexport class ToastContainerModule {}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/toast.directive.ts","import { SafeHtml } from '@angular/platform-browser';\nimport { Observable, Subject } from 'rxjs';\nimport { ComponentType } from '../portal/portal';\nimport { ToastRef } from './toast-injector';\n\n/**\n * Configuration for an individual toast.\n */\nexport interface IndividualConfig {\n  /**\n   * disable both timeOut and extendedTimeOut\n   * default: false\n   */\n  disableTimeOut: boolean;\n  /**\n   * toast time to live in milliseconds\n   * default: 5000\n   */\n  timeOut: number;\n  /**\n   * toast show close button\n   * default: false\n   */\n  closeButton: boolean;\n  /**\n   * time to close after a user hovers over toast\n   * default: 1000\n   */\n  extendedTimeOut: number;\n  /**\n   * show toast progress bar\n   * default: false\n   */\n  progressBar: boolean;\n\n  /**\n   * changes toast progress bar animation\n   * default: decreasing\n   */\n  progressAnimation?: 'increasing' | 'decreasing';\n  /**\n   * render html in toast message (possibly unsafe)\n   * default: false\n   */\n  enableHtml: boolean;\n  /**\n   * css class on toast component\n   * default: toast\n   */\n  toastClass: string;\n  /**\n   * css class on toast container\n   * default: toast-top-right\n   */\n  positionClass: string;\n  /**\n   * css class on toast title\n   * default: toast-title\n   */\n  titleClass: string;\n  /**\n   * css class on toast message\n   * default: toast-message\n   */\n  messageClass: string;\n  /**\n   * animation easing on toast\n   * default: ease-in\n   */\n  easing: string;\n  /**\n   * animation ease time on toast\n   * default: 300\n   */\n  easeTime: string | number;\n  /**\n   * clicking on toast dismisses it\n   * default: true\n   */\n  tapToDismiss: boolean;\n  /**\n   * Angular toast component to be shown\n   * default: Toast\n   */\n  toastComponent: ComponentType<any>;\n  /**\n   * Helps show toast from a websocket or from event outside Angular\n   * default: false\n   */\n  onActivateTick: boolean;\n}\n\nexport interface ToastrIconClasses {\n  error: string;\n  info: string;\n  success: string;\n  warning: string;\n}\n\n/**\n * Global Toast configuration\n * Includes all IndividualConfig\n */\nexport interface GlobalConfig extends IndividualConfig {\n  /**\n   * max toasts opened. Toasts will be queued\n   * Zero is unlimited\n   * default: 0\n   */\n  maxOpened: number;\n  /**\n   * dismiss current toast when max is reached\n   * default: false\n   */\n  autoDismiss: boolean;\n  iconClasses: Partial<ToastrIconClasses>;\n  /**\n   * New toast placement\n   * default: true\n   */\n  newestOnTop: boolean;\n  /**\n   * block duplicate messages\n   * default: false\n   */\n  preventDuplicates: boolean;\n\n  /**\n   * Reset toast timeout when there's a duplicate (preventDuplicates needs to be set to true)\n   * default: false\n   */\n  resetTimeoutOnDuplicate: boolean;\n}\n\n/**\n * Everything a toast needs to launch\n */\nexport class ToastPackage {\n  private _onTap = new Subject<any>();\n  private _onAction = new Subject<any>();\n\n  constructor(\n    public toastId: number,\n    public config: IndividualConfig,\n    public message: string | SafeHtml | null | undefined,\n    public title: string | undefined,\n    public toastType: string,\n    public toastRef: ToastRef<any>\n  ) {\n    this.toastRef.afterClosed().subscribe(() => {\n      this._onAction.complete();\n      this._onTap.complete();\n    });\n  }\n\n  /** Fired on click */\n  triggerTap() {\n    this._onTap.next();\n    if (this.config.tapToDismiss) {\n      this._onTap.complete();\n    }\n  }\n\n  onTap(): Observable<any> {\n    return this._onTap.asObservable();\n  }\n\n  /** available for use in custom toast */\n  triggerAction(action?: any) {\n    this._onAction.next(action);\n  }\n\n  onAction(): Observable<any> {\n    return this._onAction.asObservable();\n  }\n}\n\n/* tslint:disable:no-empty-interface */\nexport interface GlobalToastrConfig extends GlobalConfig {}\nexport interface IndividualToastrConfig extends IndividualConfig {}\nexport interface ToastrConfig extends IndividualConfig {}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/toastr-config.ts","import {\n  ComponentRef,\n  Injector,\n  ViewContainerRef\n} from '@angular/core';\n\nexport interface ComponentType<T> {\n  new (...args: any[]): T;\n}\n\n\n/**\n * A `ComponentPortal` is a portal that instantiates some Component upon attachment.\n */\nexport class ComponentPortal<T> {\n  private _attachedHost?: BasePortalHost;\n  /** The type of the component that will be instantiated for attachment. */\n  component: ComponentType<T>;\n\n  /**\n   * [Optional] Where the attached component should live in Angular's *logical* component tree.\n   * This is different from where the component *renders*, which is determined by the PortalHost.\n   * The origin necessary when the host is outside of the Angular application context.\n   */\n  viewContainerRef: ViewContainerRef;\n\n  /** Injector used for the instantiation of the component. */\n  injector: Injector;\n\n  constructor(component: ComponentType<T>, injector: Injector) {\n    this.component = component;\n    this.injector = injector;\n  }\n\n  /** Attach this portal to a host. */\n  attach(host: BasePortalHost, newestOnTop: boolean) {\n    this._attachedHost = host;\n    return host.attach(this, newestOnTop);\n  }\n\n  /** Detach this portal from its host */\n  detach() {\n    const host = this._attachedHost;\n    if (host) {\n      this._attachedHost = undefined;\n      return host.detach();\n    }\n  }\n\n  /** Whether this portal is attached to a host. */\n  get isAttached(): boolean {\n    return this._attachedHost != null;\n  }\n\n  /**\n   * Sets the PortalHost reference without performing `attach()`. This is used directly by\n   * the PortalHost when it is performing an `attach()` or `detach()`.\n   */\n  setAttachedHost(host?: BasePortalHost) {\n    this._attachedHost = host;\n  }\n}\n\n/**\n * Partial implementation of PortalHost that only deals with attaching a\n * ComponentPortal\n */\nexport abstract class BasePortalHost {\n  /** The portal currently attached to the host. */\n  private _attachedPortal?: ComponentPortal<any>;\n\n  /** A function that will permanently dispose this host. */\n  private _disposeFn?: () => void;\n\n  attach(portal: ComponentPortal<any>, newestOnTop: boolean) {\n    this._attachedPortal = portal;\n    return this.attachComponentPortal(portal, newestOnTop);\n  }\n\n  abstract attachComponentPortal<T>(portal: ComponentPortal<T>, newestOnTop: boolean): ComponentRef<T>;\n\n  detach() {\n    if (this._attachedPortal) {\n      this._attachedPortal.setAttachedHost();\n    }\n\n    this._attachedPortal = undefined;\n    if (this._disposeFn) {\n      this._disposeFn();\n      this._disposeFn = undefined;\n    }\n  }\n\n  setDisposeFn(fn: () => void) {\n    this._disposeFn = fn;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/portal/portal.ts","import {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  ComponentRef,\n  EmbeddedViewRef,\n} from '@angular/core';\nimport { BasePortalHost, ComponentPortal } from './portal';\n\n/**\n * A PortalHost for attaching portals to an arbitrary DOM element outside of the Angular\n * application context.\n *\n * This is the only part of the portal core that directly touches the DOM.\n */\nexport class DomPortalHost extends BasePortalHost {\n  constructor(\n    private _hostDomElement: Element,\n    private _componentFactoryResolver: ComponentFactoryResolver,\n    private _appRef: ApplicationRef,\n  ) {\n    super();\n  }\n\n  /**\n   * Attach the given ComponentPortal to DOM element using the ComponentFactoryResolver.\n   * @param portal Portal to be attached\n   */\n  attachComponentPortal<T>(\n    portal: ComponentPortal<T>,\n    newestOnTop: boolean,\n  ): ComponentRef<T> {\n    const componentFactory = this._componentFactoryResolver.resolveComponentFactory(\n      portal.component,\n    );\n    let componentRef: ComponentRef<T>;\n\n    // If the portal specifies a ViewContainerRef, we will use that as the attachment point\n    // for the component (in terms of Angular's component tree, not rendering).\n    // When the ViewContainerRef is missing, we use the factory to create the component directly\n    // and then manually attach the ChangeDetector for that component to the application (which\n    // happens automatically when using a ViewContainer).\n    componentRef = componentFactory.create(portal.injector);\n\n    // When creating a component outside of a ViewContainer, we need to manually register\n    // its ChangeDetector with the application. This API is unfortunately not yet published\n    // in Angular core. The change detector must also be deregistered when the component\n    // is destroyed to prevent memory leaks.\n    this._appRef.attachView(componentRef.hostView);\n\n    this.setDisposeFn(() => {\n      this._appRef.detachView(componentRef.hostView);\n      componentRef.destroy();\n    });\n\n    // At this point the component has been instantiated, so we move it to the location in the DOM\n    // where we want it to be rendered.\n    if (newestOnTop) {\n      this._hostDomElement.insertBefore(\n        this._getComponentRootNode(componentRef),\n        this._hostDomElement.firstChild,\n      );\n    } else {\n      this._hostDomElement.appendChild(\n        this._getComponentRootNode(componentRef),\n      );\n    }\n\n    return componentRef;\n  }\n\n  /** Gets the root HTMLElement for an instantiated component. */\n  private _getComponentRootNode(componentRef: ComponentRef<any>): HTMLElement {\n    return (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/portal/dom-portal-host.ts","import { ComponentRef } from '@angular/core';\nimport { BasePortalHost, ComponentPortal } from '../portal/portal';\n\n/**\n * Reference to an overlay that has been created with the Overlay service.\n * Used to manipulate or dispose of said overlay.\n */\nexport class OverlayRef {\n  constructor(private _portalHost: BasePortalHost) {}\n\n  attach(\n    portal: ComponentPortal<any>,\n    newestOnTop: boolean = true,\n  ): ComponentRef<any> {\n    return this._portalHost.attach(portal, newestOnTop);\n  }\n\n  /**\n   * Detaches an overlay from a portal.\n   * @returns Resolves when the overlay has been detached.\n   */\n  detach() {\n    return this._portalHost.detach();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/overlay/overlay-ref.ts","/**\n * The OverlayContainer is the container in which all overlays will load.\n * It should be provided in the root component to ensure it is properly shared.\n */\nexport class OverlayContainer {\n  private _containerElement: HTMLElement;\n\n  /**\n   * This method returns the overlay container element.  It will lazily\n   * create the element the first time  it is called to facilitate using\n   * the container in non-browser environments.\n   * @returns the container element\n   */\n  getContainerElement(): HTMLElement {\n    if (!this._containerElement) { this._createContainer(); }\n    return this._containerElement;\n  }\n\n  /**\n   * Create the overlay container element, which is simply a div\n   * with the 'cdk-overlay-container' class on the document body.\n   */\n  private _createContainer(): void {\n    const container = document.createElement('div');\n    container.classList.add('overlay-container');\n    document.body.appendChild(container);\n    this._containerElement = container;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/overlay/overlay-container.ts","import { ApplicationRef, ComponentFactoryResolver, Injectable } from '@angular/core';\nimport { DomPortalHost } from '../portal/dom-portal-host';\nimport { OverlayRef } from './overlay-ref';\n\nimport { ToastContainerDirective } from '../toastr/toast.directive';\nimport { OverlayContainer } from './overlay-container';\n\n/**\n * Service to create Overlays. Overlays are dynamically added pieces of floating UI, meant to be\n * used as a low-level building building block for other components. Dialogs, tooltips, menus,\n * selects, etc. can all be built using overlays. The service should primarily be used by authors\n * of re-usable components rather than developers building end-user applications.\n *\n * An overlay *is* a PortalHost, so any kind of Portal can be loaded into one.\n */\n @Injectable()\n  export class Overlay {\n    // Namespace panes by overlay container\n    private _paneElements: Map<ToastContainerDirective, {string?: HTMLElement}> = new Map();\n\n    constructor(private _overlayContainer: OverlayContainer,\n                private _componentFactoryResolver: ComponentFactoryResolver,\n                private _appRef: ApplicationRef) {}\n  /**\n   * Creates an overlay.\n   * @returns A reference to the created overlay.\n   */\n  create(positionClass?: string, overlayContainer?: ToastContainerDirective): OverlayRef {\n    // get existing pane if possible\n    return this._createOverlayRef(this.getPaneElement(positionClass, overlayContainer));\n  }\n\n  getPaneElement(positionClass: string = '', overlayContainer?: ToastContainerDirective): HTMLElement {\n    if (!this._paneElements.get(overlayContainer)) {\n      this._paneElements.set(overlayContainer, {});\n    }\n\n    if (!this._paneElements.get(overlayContainer)[positionClass]) {\n      this._paneElements.get(overlayContainer)[positionClass] = this._createPaneElement(positionClass, overlayContainer);\n    }\n\n    return this._paneElements.get(overlayContainer)[positionClass];\n  }\n\n  /**\n   * Creates the DOM element for an overlay and appends it to the overlay container.\n   * @returns Newly-created pane element\n   */\n  private _createPaneElement(positionClass: string, overlayContainer?: ToastContainerDirective): HTMLElement {\n    const pane = document.createElement('div');\n    pane.id = 'toast-container';\n    pane.classList.add(positionClass);\n    pane.classList.add('toast-container');\n\n    if (!overlayContainer) {\n      this._overlayContainer.getContainerElement().appendChild(pane);\n    } else {\n      overlayContainer.getContainerElement().appendChild(pane);\n    }\n    return pane;\n  }\n\n  /**\n   * Create a DomPortalHost into which the overlay content can be loaded.\n   * @param pane The DOM element to turn into a portal host.\n   * @returns A portal host for the given DOM element.\n   */\n  private _createPortalHost(pane: HTMLElement): DomPortalHost {\n    return new DomPortalHost(pane, this._componentFactoryResolver, this._appRef);\n  }\n\n  /**\n   * Creates an OverlayRef for an overlay in the given DOM element.\n   * @param pane DOM element for the overlay\n   */\n  private _createOverlayRef(pane: HTMLElement): OverlayRef {\n    return new OverlayRef(this._createPortalHost(pane));\n  }\n}\n\n\n/** Providers for Overlay and its related injectables. */\nexport const OVERLAY_PROVIDERS = [\n  Overlay,\n  OverlayContainer,\n];\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/overlay/overlay.ts","import { Injector } from '@angular/core';\nimport { Observable, Subject } from 'rxjs';\nimport { OverlayRef } from '../overlay/overlay-ref';\nimport { ToastPackage } from './toastr-config';\n\n/**\n * Reference to a toast opened via the Toastr service.\n */\nexport class ToastRef<T> {\n  /** The instance of component opened into the toast. */\n  componentInstance: T;\n\n  /** Subject for notifying the user that the toast has finished closing. */\n  private _afterClosed = new Subject<any>();\n  /** triggered when toast is activated */\n  private _activate = new Subject<any>();\n  /** notifies the toast that it should close before the timeout */\n  private _manualClose = new Subject<any>();\n  /** notifies the toast that it should reset the timeouts */\n  private _resetTimeout = new Subject<any>();\n\n  constructor(private _overlayRef: OverlayRef) {}\n\n  manualClose() {\n    this._manualClose.next();\n    this._manualClose.complete();\n  }\n\n  manualClosed(): Observable<any> {\n    return this._manualClose.asObservable();\n  }\n\n  timeoutReset(): Observable<any> {\n    return this._resetTimeout.asObservable();\n  }\n\n  /**\n   * Close the toast.\n   */\n  close(): void {\n    this._overlayRef.detach();\n    this._afterClosed.next();\n    this._manualClose.next();\n    this._afterClosed.complete();\n    this._manualClose.complete();\n    this._activate.complete();\n    this._resetTimeout.complete();\n  }\n\n  /** Gets an observable that is notified when the toast is finished closing. */\n  afterClosed(): Observable<any> {\n    return this._afterClosed.asObservable();\n  }\n\n  isInactive() {\n    return this._activate.isStopped;\n  }\n\n  activate() {\n    this._activate.next();\n    this._activate.complete();\n  }\n\n  /** Gets an observable that is notified when the toast has started opening. */\n  afterActivate(): Observable<any> {\n    return this._activate.asObservable();\n  }\n\n  /** Reset the toast timouts */\n  resetTimeout() {\n    this._resetTimeout.next();\n  }\n}\n\n/** Custom injector type specifically for instantiating components with a toast. */\nexport class ToastInjector implements Injector {\n  constructor(\n    private _toastPackage: ToastPackage,\n    private _parentInjector: Injector\n  ) {}\n\n  /* tslint:disable:deprecation */\n  get(token: any, notFoundValue?: any): any {\n    if (token === ToastPackage && this._toastPackage) {\n      return this._toastPackage;\n    }\n    return this._parentInjector.get(token, notFoundValue);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/toast-injector.ts","import { InjectionToken } from '@angular/core';\n\nimport { GlobalConfig } from './toastr-config';\n\nexport interface ToastToken {\n  config: GlobalConfig;\n  defaults: any;\n}\n\nexport const TOAST_CONFIG = new InjectionToken<ToastToken>('ToastConfig');\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/toast-token.ts","import {\n  ComponentRef,\n  Inject,\n  Injectable,\n  Injector,\n  NgZone,\n  SecurityContext\n} from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { Observable } from 'rxjs';\nimport { Overlay } from '../overlay/overlay';\nimport { ComponentPortal } from '../portal/portal';\nimport { ToastInjector, ToastRef } from './toast-injector';\nimport { ToastToken, TOAST_CONFIG } from './toast-token';\nimport { ToastContainerDirective } from './toast.directive';\nimport { GlobalConfig, IndividualConfig, ToastPackage } from './toastr-config';\n\nexport interface ActiveToast<C> {\n  /** Your Toast ID. Use this to close it individually */\n  toastId: number;\n  /** the message of your toast. Stored to prevent duplicates */\n  message: string;\n  /** a reference to the component see portal.ts */\n  portal: ComponentRef<C>;\n  /** a reference to your toast */\n  toastRef: ToastRef<C>;\n  /** triggered when toast is active */\n  onShown: Observable<any>;\n  /** triggered when toast is destroyed */\n  onHidden: Observable<any>;\n  /** triggered on toast click */\n  onTap: Observable<any>;\n  /** available for your use in custom toast */\n  onAction: Observable<any>;\n}\n\n@Injectable()\nexport class ToastrService {\n  toastrConfig: GlobalConfig;\n  currentlyActive = 0;\n  toasts: ActiveToast<any>[] = [];\n  overlayContainer: ToastContainerDirective;\n  previousToastMessage: string | undefined;\n  private index = 0;\n\n  constructor(\n    @Inject(TOAST_CONFIG) token: ToastToken,\n    private overlay: Overlay,\n    private _injector: Injector,\n    private sanitizer: DomSanitizer,\n    private ngZone: NgZone\n  ) {\n    const defaultConfig = new token.defaults();\n    this.toastrConfig = { ...defaultConfig, ...token.config };\n    this.toastrConfig.iconClasses = {\n      ...defaultConfig.iconClasses,\n      ...token.config.iconClasses\n    };\n  }\n  /** show toast */\n  show(\n    message?: string,\n    title?: string,\n    override: Partial<IndividualConfig> = {},\n    type = ''\n  ) {\n    return this._preBuildNotification(\n      type,\n      message,\n      title,\n      this.applyConfig(override)\n    );\n  }\n  /** show successful toast */\n  success(\n    message?: string,\n    title?: string,\n    override: Partial<IndividualConfig> = {}\n  ) {\n    const type = this.toastrConfig.iconClasses.success || '';\n    return this._preBuildNotification(\n      type,\n      message,\n      title,\n      this.applyConfig(override)\n    );\n  }\n  /** show error toast */\n  error(\n    message?: string,\n    title?: string,\n    override: Partial<IndividualConfig> = {}\n  ) {\n    const type = this.toastrConfig.iconClasses.error || '';\n    return this._preBuildNotification(\n      type,\n      message,\n      title,\n      this.applyConfig(override)\n    );\n  }\n  /** show info toast */\n  info(\n    message?: string,\n    title?: string,\n    override: Partial<IndividualConfig> = {}\n  ) {\n    const type = this.toastrConfig.iconClasses.info || '';\n    return this._preBuildNotification(\n      type,\n      message,\n      title,\n      this.applyConfig(override)\n    );\n  }\n  /** show warning toast */\n  warning(\n    message?: string,\n    title?: string,\n    override: Partial<IndividualConfig> = {}\n  ) {\n    const type = this.toastrConfig.iconClasses.warning || '';\n    return this._preBuildNotification(\n      type,\n      message,\n      title,\n      this.applyConfig(override)\n    );\n  }\n  /**\n   * Remove all or a single toast by id\n   */\n  clear(toastId?: number) {\n    // Call every toastRef manualClose function\n    for (const toast of this.toasts) {\n      if (toastId !== undefined) {\n        if (toast.toastId === toastId) {\n          toast.toastRef.manualClose();\n          return;\n        }\n      } else {\n        toast.toastRef.manualClose();\n      }\n    }\n  }\n  /**\n   * Remove and destroy a single toast by id\n   */\n  remove(toastId: number) {\n    const found = this._findToast(toastId);\n    if (!found) {\n      return false;\n    }\n    found.activeToast.toastRef.close();\n    this.toasts.splice(found.index, 1);\n    this.currentlyActive = this.currentlyActive - 1;\n    if (!this.toastrConfig.maxOpened || !this.toasts.length) {\n      return false;\n    }\n    if (\n      this.currentlyActive < this.toastrConfig.maxOpened &&\n      this.toasts[this.currentlyActive]\n    ) {\n      const p = this.toasts[this.currentlyActive].toastRef;\n      if (!p.isInactive()) {\n        this.currentlyActive = this.currentlyActive + 1;\n        p.activate();\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Determines if toast message is already shown\n   */\n  isDuplicate(message: string, resetOnDuplicate: boolean) {\n    for (let i = 0; i < this.toasts.length; i++) {\n      if (this.toasts[i].message === message) {\n        if (\n          resetOnDuplicate &&\n          this.toasts[i].toastRef.componentInstance.resetTimeout\n        ) {\n          this.toasts[i].toastRef.resetTimeout();\n        }\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /** create a clone of global config and apply individual settings */\n  private applyConfig(override: Partial<IndividualConfig> = {}): GlobalConfig {\n    return { ...this.toastrConfig, ...override };\n  }\n\n  /**\n   * Find toast object by id\n   */\n  private _findToast(\n    toastId: number\n  ): { index: number; activeToast: ActiveToast<any> } | null {\n    for (let i = 0; i < this.toasts.length; i++) {\n      if (this.toasts[i].toastId === toastId) {\n        return { index: i, activeToast: this.toasts[i] };\n      }\n    }\n    return null;\n  }\n\n  /**\n   * Determines the need to run inside angular's zone then builds the toast\n   */\n  private _preBuildNotification(\n    toastType: string,\n    message: string | undefined,\n    title: string | undefined,\n    config: GlobalConfig\n  ): ActiveToast<any> | null {\n    if (config.onActivateTick) {\n      return this.ngZone.run(() =>\n        this._buildNotification(toastType, message, title, config)\n      );\n    }\n    return this._buildNotification(toastType, message, title, config);\n  }\n\n  /**\n   * Creates and attaches toast data to component\n   * returns null if toast is duplicate and preventDuplicates == True\n   */\n  private _buildNotification(\n    toastType: string,\n    message: string | undefined,\n    title: string | undefined,\n    config: GlobalConfig\n  ): ActiveToast<any> | null {\n    if (!config.toastComponent) {\n      throw new Error('toastComponent required');\n    }\n    // max opened and auto dismiss = true\n    if (\n      message &&\n      this.toastrConfig.preventDuplicates &&\n      this.isDuplicate(message, this.toastrConfig.resetTimeoutOnDuplicate)\n    ) {\n      return null;\n    }\n    this.previousToastMessage = message;\n    let keepInactive = false;\n    if (\n      this.toastrConfig.maxOpened &&\n      this.currentlyActive >= this.toastrConfig.maxOpened\n    ) {\n      keepInactive = true;\n      if (this.toastrConfig.autoDismiss) {\n        this.clear(this.toasts[0].toastId);\n      }\n    }\n    const overlayRef = this.overlay.create(\n      config.positionClass,\n      this.overlayContainer\n    );\n    this.index = this.index + 1;\n    let sanitizedMessage: string | SafeHtml | undefined | null = message;\n    if (message && config.enableHtml) {\n      sanitizedMessage = this.sanitizer.sanitize(SecurityContext.HTML, message);\n    }\n    const toastRef = new ToastRef(overlayRef);\n    const toastPackage = new ToastPackage(\n      this.index,\n      config,\n      sanitizedMessage,\n      title,\n      toastType,\n      toastRef\n    );\n    const toastInjector = new ToastInjector(toastPackage, this._injector);\n    const component = new ComponentPortal(config.toastComponent, toastInjector);\n    const portal = overlayRef.attach(component, this.toastrConfig.newestOnTop);\n    toastRef.componentInstance = (<any>portal)._component;\n    const ins: ActiveToast<any> = {\n      toastId: this.index,\n      message: message || '',\n      toastRef,\n      onShown: toastRef.afterActivate(),\n      onHidden: toastRef.afterClosed(),\n      onTap: toastPackage.onTap(),\n      onAction: toastPackage.onAction(),\n      portal\n    };\n\n    if (!keepInactive) {\n      setTimeout(() => {\n        ins.toastRef.activate();\n        this.currentlyActive = this.currentlyActive + 1;\n      });\n    }\n\n    this.toasts.push(ins);\n    return ins;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/toastr.service.ts","import {\n  animate,\n  state,\n  style,\n  transition,\n  trigger\n} from '@angular/animations';\nimport {\n  Component,\n  HostBinding,\n  HostListener,\n  NgZone,\n  OnDestroy\n} from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { Subscription } from 'rxjs';\nimport { IndividualConfig, ToastPackage } from './toastr-config';\nimport { ToastrService } from './toastr.service';\n\n@Component({\n  selector: '[toast-component]',\n  template: `\n  <button *ngIf=\"options.closeButton\" (click)=\"remove()\" class=\"toast-close-button\" aria-label=\"Close\">\n    <span aria-hidden=\"true\">&times;</span>\n  </button>\n  <div *ngIf=\"title\" [class]=\"options.titleClass\" [attr.aria-label]=\"title\">\n    {{ title }}\n  </div>\n  <div *ngIf=\"message && options.enableHtml\" role=\"alertdialog\" aria-live=\"polite\"\n    [class]=\"options.messageClass\" [innerHTML]=\"message\">\n  </div>\n  <div *ngIf=\"message && !options.enableHtml\" role=\"alertdialog\" aria-live=\"polite\"\n    [class]=\"options.messageClass\" [attr.aria-label]=\"message\">\n    {{ message }}\n  </div>\n  <div *ngIf=\"options.progressBar\">\n    <div class=\"toast-progress\" [style.width]=\"width + '%'\"></div>\n  </div>\n  `,\n  animations: [\n    trigger('flyInOut', [\n      state(\n        'inactive',\n        style({\n          display: 'none',\n          opacity: 0\n        })\n      ),\n      state('active', style({})),\n      state('removed', style({ opacity: 0 })),\n      transition(\n        'inactive => active',\n        animate('{{ easeTime }}ms {{ easing }}')\n      ),\n      transition('active => removed', animate('{{ easeTime }}ms {{ easing }}'))\n    ])\n  ],\n  preserveWhitespaces: false\n})\nexport class Toast implements OnDestroy {\n  message?: string | SafeHtml | null;\n  title?: string;\n  options: IndividualConfig;\n  originalTimeout: number;\n  /** width of progress bar */\n  width = -1;\n  /** a combination of toast type and options.toastClass */\n  @HostBinding('class') toastClasses = '';\n  /** controls animation */\n  @HostBinding('@flyInOut')\n  state = {\n    value: 'inactive',\n    params: {\n      easeTime: this.toastPackage.config.easeTime,\n      easing: 'ease-in'\n    }\n  };\n  private timeout: any;\n  private intervalId: any;\n  private hideTime: number;\n  private sub: Subscription;\n  private sub1: Subscription;\n  private sub2: Subscription;\n\n  constructor(\n    protected toastrService: ToastrService,\n    public toastPackage: ToastPackage,\n    protected ngZone?: NgZone\n  ) {\n    this.message = toastPackage.message;\n    this.title = toastPackage.title;\n    this.options = toastPackage.config;\n    this.originalTimeout = toastPackage.config.timeOut;\n    this.toastClasses = `${toastPackage.toastType} ${\n      toastPackage.config.toastClass\n    }`;\n    this.sub = toastPackage.toastRef.afterActivate().subscribe(() => {\n      this.activateToast();\n    });\n    this.sub1 = toastPackage.toastRef.manualClosed().subscribe(() => {\n      this.remove();\n    });\n    this.sub2 = toastPackage.toastRef.timeoutReset().subscribe(() => {\n      this.resetTimeout();\n    });\n  }\n  ngOnDestroy() {\n    this.sub.unsubscribe();\n    this.sub1.unsubscribe();\n    this.sub2.unsubscribe();\n    clearInterval(this.intervalId);\n    clearTimeout(this.timeout);\n  }\n  /**\n   * activates toast and sets timeout\n   */\n  activateToast() {\n    this.state = { ...this.state, value: 'active' };\n    if (!this.options.disableTimeOut && this.options.timeOut) {\n      this.outsideTimeout(() => this.remove(), this.options.timeOut);\n      this.hideTime = new Date().getTime() + this.options.timeOut;\n      if (this.options.progressBar) {\n        this.outsideInterval(() => this.updateProgress(), 10);\n      }\n    }\n  }\n  /**\n   * updates progress bar width\n   */\n  updateProgress() {\n    if (this.width === 0 || this.width === 100 || !this.options.timeOut) {\n      return;\n    }\n    const now = new Date().getTime();\n    const remaining = this.hideTime - now;\n    this.width = (remaining / this.options.timeOut) * 100;\n    if (this.options.progressAnimation === 'increasing') {\n      this.width = 100 - this.width;\n    }\n    if (this.width <= 0) {\n      this.width = 0;\n    }\n    if (this.width >= 100) {\n      this.width = 100;\n    }\n  }\n\n  resetTimeout() {\n    clearTimeout(this.timeout);\n    clearInterval(this.intervalId);\n    this.state = { ...this.state, value: 'active' };\n\n    this.outsideTimeout(() => this.remove(), this.originalTimeout);\n    this.options.timeOut = this.originalTimeout;\n    this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n    this.width = -1;\n    if (this.options.progressBar) {\n      this.outsideInterval(() => this.updateProgress(), 10);\n    }\n  }\n\n  /**\n   * tells toastrService to remove this toast after animation time\n   */\n  remove() {\n    if (this.state.value === 'removed') {\n      return;\n    }\n    clearTimeout(this.timeout);\n    this.state = { ...this.state, value: 'removed' };\n    this.outsideTimeout(\n      () => this.toastrService.remove(this.toastPackage.toastId),\n      +this.toastPackage.config.easeTime\n    );\n  }\n  @HostListener('click')\n  tapToast() {\n    if (this.state.value === 'removed') {\n      return;\n    }\n    this.toastPackage.triggerTap();\n    if (this.options.tapToDismiss) {\n      this.remove();\n    }\n  }\n  @HostListener('mouseenter')\n  stickAround() {\n    if (this.state.value === 'removed') {\n      return;\n    }\n    clearTimeout(this.timeout);\n    this.options.timeOut = 0;\n    this.hideTime = 0;\n\n    // disable progressBar\n    clearInterval(this.intervalId);\n    this.width = 0;\n  }\n  @HostListener('mouseleave')\n  delayedHideToast() {\n    if (\n      this.options.disableTimeOut ||\n      this.options.extendedTimeOut === 0 ||\n      this.state.value === 'removed'\n    ) {\n      return;\n    }\n    this.outsideTimeout(() => this.remove(), this.options.extendedTimeOut);\n    this.options.timeOut = this.options.extendedTimeOut;\n    this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\n    this.width = -1;\n    if (this.options.progressBar) {\n      this.outsideInterval(() => this.updateProgress(), 10);\n    }\n  }\n\n  outsideTimeout(func: Function, timeout: number) {\n    if (this.ngZone) {\n      this.ngZone.runOutsideAngular(\n        () =>\n          (this.timeout = setTimeout(\n            () => this.runInsideAngular(func),\n            timeout\n          ))\n      );\n    } else {\n      this.timeout = setTimeout(() => func(), timeout);\n    }\n  }\n\n  outsideInterval(func: Function, timeout: number) {\n    if (this.ngZone) {\n      this.ngZone.runOutsideAngular(\n        () =>\n          (this.intervalId = setInterval(\n            () => this.runInsideAngular(func),\n            timeout\n          ))\n      );\n    } else {\n      this.intervalId = setInterval(() => func(), timeout);\n    }\n  }\n\n  private runInsideAngular(func: Function) {\n    if (this.ngZone) {\n      this.ngZone.run(() => func());\n    } else {\n      func();\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/toast.component.ts","import { Toast } from './toast.component';\nimport { GlobalConfig } from './toastr-config';\n\nexport class DefaultGlobalConfig implements GlobalConfig {\n  // Global\n  maxOpened = 0;\n  autoDismiss = false;\n  newestOnTop = true;\n  preventDuplicates = false;\n  resetTimeoutOnDuplicate = false;\n  iconClasses = {\n    error: 'toast-error',\n    info: 'toast-info',\n    success: 'toast-success',\n    warning: 'toast-warning'\n  };\n\n  // Individual\n  toastComponent = Toast;\n  closeButton = false;\n  disableTimeOut: false;\n  timeOut = 5000;\n  extendedTimeOut = 1000;\n  enableHtml = false;\n  progressBar = false;\n  toastClass = 'toast';\n  positionClass = 'toast-top-right';\n  titleClass = 'toast-title';\n  messageClass = 'toast-message';\n  easing = 'ease-in';\n  easeTime = 300;\n  tapToDismiss = true;\n  onActivateTick = false;\n  progressAnimation: 'decreasing' | 'increasing' = 'decreasing';\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/default-config.ts","import { CommonModule } from '@angular/common';\nimport {\n  ModuleWithProviders,\n  NgModule,\n  Optional,\n  SkipSelf,\n} from '@angular/core';\n\nimport { Overlay } from '../overlay/overlay';\nimport { OverlayContainer } from '../overlay/overlay-container';\nimport { DefaultGlobalConfig } from './default-config';\nimport { TOAST_CONFIG } from './toast-token';\nimport { Toast } from './toast.component';\nimport { GlobalConfig } from './toastr-config';\nimport { ToastrService } from './toastr.service';\n\n\n@NgModule({\n  imports: [CommonModule],\n  exports: [Toast],\n  declarations: [Toast],\n  entryComponents: [Toast],\n})\nexport class ToastrModule {\n  constructor(@Optional() @SkipSelf() parentModule: ToastrModule) {\n    if (parentModule) {\n      throw new Error('ToastrModule is already loaded. It should only be imported in your application\\'s main module.');\n    }\n  }\n  static forRoot(config: Partial<GlobalConfig> = {}): ModuleWithProviders {\n    return {\n      ngModule: ToastrModule,\n      providers: [\n        { provide: TOAST_CONFIG, useValue: { config, defaults: DefaultGlobalConfig } },\n        OverlayContainer,\n        Overlay,\n        ToastrService,\n      ],\n    };\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/toastr.module.ts","import { CommonModule } from '@angular/common';\r\nimport {\r\n  ApplicationRef,\r\n  Component,\r\n  HostBinding,\r\n  HostListener,\r\n  NgModule,\r\n  OnDestroy\r\n} from '@angular/core';\r\nimport { SafeHtml } from '@angular/platform-browser';\r\nimport { Subscription } from 'rxjs';\r\nimport { IndividualConfig, ToastPackage } from './toastr-config';\r\nimport { ToastrService } from './toastr.service';\r\n\r\n@Component({\r\n  selector: '[toast-component]',\r\n  template: `\r\n  <button *ngIf=\"options.closeButton\" (click)=\"remove()\" class=\"toast-close-button\" aria-label=\"Close\">\r\n    <span aria-hidden=\"true\">&times;</span>\r\n  </button>\r\n  <div *ngIf=\"title\" [class]=\"options.titleClass\" [attr.aria-label]=\"title\">\r\n    {{ title }}\r\n  </div>\r\n  <div *ngIf=\"message && options.enableHtml\" role=\"alert\" aria-live=\"polite\"\r\n    [class]=\"options.messageClass\" [innerHTML]=\"message\">\r\n  </div>\r\n  <div *ngIf=\"message && !options.enableHtml\" role=\"alert\" aria-live=\"polite\"\r\n    [class]=\"options.messageClass\" [attr.aria-label]=\"message\">\r\n    {{ message }}\r\n  </div>\r\n  <div *ngIf=\"options.progressBar\">\r\n    <div class=\"toast-progress\" [style.width]=\"width + '%'\"></div>\r\n  </div>\r\n  `\r\n})\r\nexport class ToastNoAnimation implements OnDestroy {\r\n  message?: string | SafeHtml | null;\r\n  title?: string;\r\n  options: IndividualConfig;\r\n  originalTimeout: number;\r\n  /** width of progress bar */\r\n  width = -1;\r\n  /** a combination of toast type and options.toastClass */\r\n  @HostBinding('class') toastClasses = '';\r\n\r\n  @HostBinding('style.display')\r\n  get displayStyle() {\r\n    if (this.state === 'inactive') {\r\n      return 'none';\r\n    }\r\n    return 'inherit';\r\n  }\r\n\r\n  /** controls animation */\r\n  state = 'inactive';\r\n  private timeout: any;\r\n  private intervalId: any;\r\n  private hideTime: number;\r\n  private sub: Subscription;\r\n  private sub1: Subscription;\r\n  private sub2: Subscription;\r\n\r\n  constructor(\r\n    protected toastrService: ToastrService,\r\n    public toastPackage: ToastPackage,\r\n    protected appRef: ApplicationRef\r\n  ) {\r\n    this.message = toastPackage.message;\r\n    this.title = toastPackage.title;\r\n    this.options = toastPackage.config;\r\n    this.originalTimeout = toastPackage.config.timeOut;\r\n    this.toastClasses = `${toastPackage.toastType} ${\r\n      toastPackage.config.toastClass\r\n    }`;\r\n    this.sub = toastPackage.toastRef.afterActivate().subscribe(() => {\r\n      this.activateToast();\r\n    });\r\n    this.sub1 = toastPackage.toastRef.manualClosed().subscribe(() => {\r\n      this.remove();\r\n    });\r\n    this.sub2 = toastPackage.toastRef.timeoutReset().subscribe(() => {\r\n      this.resetTimeout();\r\n    });\r\n  }\r\n  ngOnDestroy() {\r\n    this.sub.unsubscribe();\r\n    this.sub1.unsubscribe();\r\n    this.sub2.unsubscribe();\r\n    clearInterval(this.intervalId);\r\n    clearTimeout(this.timeout);\r\n  }\r\n  /**\r\n   * activates toast and sets timeout\r\n   */\r\n  activateToast() {\r\n    this.state = 'active';\r\n    if (!this.options.disableTimeOut && this.options.timeOut) {\r\n      this.timeout = setTimeout(() => {\r\n        this.remove();\r\n      }, this.options.timeOut);\r\n      this.hideTime = new Date().getTime() + this.options.timeOut;\r\n      if (this.options.progressBar) {\r\n        this.intervalId = setInterval(() => this.updateProgress(), 10);\r\n      }\r\n    }\r\n    if (this.options.onActivateTick) {\r\n      this.appRef.tick();\r\n    }\r\n  }\r\n  /**\r\n   * updates progress bar width\r\n   */\r\n  updateProgress() {\r\n    if (this.width === 0 || this.width === 100 || !this.options.timeOut) {\r\n      return;\r\n    }\r\n    const now = new Date().getTime();\r\n    const remaining = this.hideTime - now;\r\n    this.width = (remaining / this.options.timeOut) * 100;\r\n    if (this.options.progressAnimation === 'increasing') {\r\n      this.width = 100 - this.width;\r\n    }\r\n    if (this.width <= 0) {\r\n      this.width = 0;\r\n    }\r\n    if (this.width >= 100) {\r\n      this.width = 100;\r\n    }\r\n  }\r\n\r\n  resetTimeout() {\r\n    clearTimeout(this.timeout);\r\n    clearInterval(this.intervalId);\r\n    this.state = 'active';\r\n\r\n    this.options.timeOut = this.originalTimeout;\r\n    this.timeout = setTimeout(() => this.remove(), this.originalTimeout);\r\n    this.hideTime = new Date().getTime() + (this.originalTimeout || 0);\r\n    this.width = -1;\r\n    if (this.options.progressBar) {\r\n      this.intervalId = setInterval(() => this.updateProgress(), 10);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * tells toastrService to remove this toast after animation time\r\n   */\r\n  remove() {\r\n    if (this.state === 'removed') {\r\n      return;\r\n    }\r\n    clearTimeout(this.timeout);\r\n    this.state = 'removed';\r\n    this.timeout = setTimeout(() =>\r\n      this.toastrService.remove(this.toastPackage.toastId)\r\n    );\r\n  }\r\n  @HostListener('click')\r\n  tapToast() {\r\n    if (this.state === 'removed') {\r\n      return;\r\n    }\r\n    this.toastPackage.triggerTap();\r\n    if (this.options.tapToDismiss) {\r\n      this.remove();\r\n    }\r\n  }\r\n  @HostListener('mouseenter')\r\n  stickAround() {\r\n    if (this.state === 'removed') {\r\n      return;\r\n    }\r\n    clearTimeout(this.timeout);\r\n    this.options.timeOut = 0;\r\n    this.hideTime = 0;\r\n\r\n    // disable progressBar\r\n    clearInterval(this.intervalId);\r\n    this.width = 0;\r\n  }\r\n  @HostListener('mouseleave')\r\n  delayedHideToast() {\r\n    if (\r\n      this.options.disableTimeOut ||\r\n      this.options.extendedTimeOut === 0 ||\r\n      this.state === 'removed'\r\n    ) {\r\n      return;\r\n    }\r\n    this.timeout = setTimeout(\r\n      () => this.remove(),\r\n      this.options.extendedTimeOut\r\n    );\r\n    this.options.timeOut = this.options.extendedTimeOut;\r\n    this.hideTime = new Date().getTime() + (this.options.timeOut || 0);\r\n    this.width = -1;\r\n    if (this.options.progressBar) {\r\n      this.intervalId = setInterval(() => this.updateProgress(), 10);\r\n    }\r\n  }\r\n}\r\n\r\n@NgModule({\r\n  imports: [CommonModule],\r\n  declarations: [ToastNoAnimation],\r\n  exports: [ToastNoAnimation],\r\n  entryComponents: [ToastNoAnimation]\r\n})\r\nexport class ToastNoAnimationModule {}\r\n\n\n\n// WEBPACK FOOTER //\n// ng://ngx-toastr/toastr/toast-noanimation.component.ts","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar DomHandler = /** @class */ (function () {\n    function DomHandler() {\n        this.calculatedScrollbarWidth = null;\n    }\n    DomHandler.prototype.addClass = function (element, className) {\n        if (element.classList)\n            element.classList.add(className);\n        else\n            element.className += ' ' + className;\n    };\n    DomHandler.prototype.addMultipleClasses = function (element, className) {\n        if (element.classList) {\n            var styles = className.split(' ');\n            for (var i = 0; i < styles.length; i++) {\n                element.classList.add(styles[i]);\n            }\n        }\n        else {\n            var styles = className.split(' ');\n            for (var i = 0; i < styles.length; i++) {\n                element.className += ' ' + styles[i];\n            }\n        }\n    };\n    DomHandler.prototype.removeClass = function (element, className) {\n        if (element.classList)\n            element.classList.remove(className);\n        else\n            element.className = element.className.replace(new RegExp('(^|\\\\b)' + className.split(' ').join('|') + '(\\\\b|$)', 'gi'), ' ');\n    };\n    DomHandler.prototype.hasClass = function (element, className) {\n        if (element.classList)\n            return element.classList.contains(className);\n        else\n            return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className);\n    };\n    DomHandler.prototype.siblings = function (element) {\n        return Array.prototype.filter.call(element.parentNode.children, function (child) {\n            return child !== element;\n        });\n    };\n    DomHandler.prototype.find = function (element, selector) {\n        return element.querySelectorAll(selector);\n    };\n    DomHandler.prototype.findSingle = function (element, selector) {\n        return element.querySelector(selector);\n    };\n    DomHandler.prototype.index = function (element) {\n        var children = element.parentNode.childNodes;\n        var num = 0;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i] == element)\n                return num;\n            if (children[i].nodeType == 1)\n                num++;\n        }\n        return -1;\n    };\n    DomHandler.prototype.indexWithinGroup = function (element, attributeName) {\n        var children = element.parentNode.childNodes;\n        var num = 0;\n        for (var i = 0; i < children.length; i++) {\n            if (children[i] == element)\n                return num;\n            if (children[i].attributes && children[i].attributes[attributeName] && children[i].nodeType == 1)\n                num++;\n        }\n        return -1;\n    };\n    DomHandler.prototype.relativePosition = function (element, target) {\n        var elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n        var targetHeight = target.offsetHeight;\n        var targetWidth = target.offsetWidth;\n        var targetOffset = target.getBoundingClientRect();\n        var windowScrollTop = this.getWindowScrollTop();\n        var viewport = this.getViewport();\n        var top, left;\n        if ((targetOffset.top + targetHeight + elementDimensions.height) > viewport.height) {\n            top = -1 * (elementDimensions.height);\n            if (targetOffset.top + top < 0) {\n                top = 0;\n            }\n        }\n        else {\n            top = targetHeight;\n        }\n        if ((targetOffset.left + elementDimensions.width) > viewport.width)\n            left = targetWidth - elementDimensions.width;\n        else\n            left = 0;\n        element.style.top = top + 'px';\n        element.style.left = left + 'px';\n    };\n    DomHandler.prototype.absolutePosition = function (element, target) {\n        var elementDimensions = element.offsetParent ? { width: element.offsetWidth, height: element.offsetHeight } : this.getHiddenElementDimensions(element);\n        var elementOuterHeight = elementDimensions.height;\n        var elementOuterWidth = elementDimensions.width;\n        var targetOuterHeight = target.offsetHeight;\n        var targetOuterWidth = target.offsetWidth;\n        var targetOffset = target.getBoundingClientRect();\n        var windowScrollTop = this.getWindowScrollTop();\n        var windowScrollLeft = this.getWindowScrollLeft();\n        var viewport = this.getViewport();\n        var top, left;\n        if (targetOffset.top + targetOuterHeight + elementOuterHeight > viewport.height) {\n            top = targetOffset.top + windowScrollTop - elementOuterHeight;\n            if (top < 0) {\n                top = 0 + windowScrollTop;\n            }\n        }\n        else {\n            top = targetOuterHeight + targetOffset.top + windowScrollTop;\n        }\n        if (targetOffset.left + targetOuterWidth + elementOuterWidth > viewport.width)\n            left = targetOffset.left + windowScrollLeft + targetOuterWidth - elementOuterWidth;\n        else\n            left = targetOffset.left + windowScrollLeft;\n        element.style.top = top + 'px';\n        element.style.left = left + 'px';\n    };\n    DomHandler.prototype.getHiddenElementOuterHeight = function (element) {\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        var elementHeight = element.offsetHeight;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n        return elementHeight;\n    };\n    DomHandler.prototype.getHiddenElementOuterWidth = function (element) {\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        var elementWidth = element.offsetWidth;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n        return elementWidth;\n    };\n    DomHandler.prototype.getHiddenElementDimensions = function (element) {\n        var dimensions = {};\n        element.style.visibility = 'hidden';\n        element.style.display = 'block';\n        dimensions.width = element.offsetWidth;\n        dimensions.height = element.offsetHeight;\n        element.style.display = 'none';\n        element.style.visibility = 'visible';\n        return dimensions;\n    };\n    DomHandler.prototype.scrollInView = function (container, item) {\n        var borderTopValue = getComputedStyle(container).getPropertyValue('borderTopWidth');\n        var borderTop = borderTopValue ? parseFloat(borderTopValue) : 0;\n        var paddingTopValue = getComputedStyle(container).getPropertyValue('paddingTop');\n        var paddingTop = paddingTopValue ? parseFloat(paddingTopValue) : 0;\n        var containerRect = container.getBoundingClientRect();\n        var itemRect = item.getBoundingClientRect();\n        var offset = (itemRect.top + document.body.scrollTop) - (containerRect.top + document.body.scrollTop) - borderTop - paddingTop;\n        var scroll = container.scrollTop;\n        var elementHeight = container.clientHeight;\n        var itemHeight = this.getOuterHeight(item);\n        if (offset < 0) {\n            container.scrollTop = scroll + offset;\n        }\n        else if ((offset + itemHeight) > elementHeight) {\n            container.scrollTop = scroll + offset - elementHeight + itemHeight;\n        }\n    };\n    DomHandler.prototype.fadeIn = function (element, duration) {\n        element.style.opacity = 0;\n        var last = +new Date();\n        var opacity = 0;\n        var tick = function () {\n            opacity = +element.style.opacity.replace(\",\", \".\") + (new Date().getTime() - last) / duration;\n            element.style.opacity = opacity;\n            last = +new Date();\n            if (+opacity < 1) {\n                (window.requestAnimationFrame && requestAnimationFrame(tick)) || setTimeout(tick, 16);\n            }\n        };\n        tick();\n    };\n    DomHandler.prototype.fadeOut = function (element, ms) {\n        var opacity = 1, interval = 50, duration = ms, gap = interval / duration;\n        var fading = setInterval(function () {\n            opacity = opacity - gap;\n            if (opacity <= 0) {\n                opacity = 0;\n                clearInterval(fading);\n            }\n            element.style.opacity = opacity;\n        }, interval);\n    };\n    DomHandler.prototype.getWindowScrollTop = function () {\n        var doc = document.documentElement;\n        return (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n    };\n    DomHandler.prototype.getWindowScrollLeft = function () {\n        var doc = document.documentElement;\n        return (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n    };\n    DomHandler.prototype.matches = function (element, selector) {\n        var p = Element.prototype;\n        var f = p['matches'] || p.webkitMatchesSelector || p['mozMatchesSelector'] || p.msMatchesSelector || function (s) {\n            return [].indexOf.call(document.querySelectorAll(s), this) !== -1;\n        };\n        return f.call(element, selector);\n    };\n    DomHandler.prototype.getOuterWidth = function (el, margin) {\n        var width = el.offsetWidth;\n        if (margin) {\n            var style = getComputedStyle(el);\n            width += parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n        }\n        return width;\n    };\n    DomHandler.prototype.getHorizontalPadding = function (el) {\n        var style = getComputedStyle(el);\n        return parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n    };\n    DomHandler.prototype.getHorizontalMargin = function (el) {\n        var style = getComputedStyle(el);\n        return parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n    };\n    DomHandler.prototype.innerWidth = function (el) {\n        var width = el.offsetWidth;\n        var style = getComputedStyle(el);\n        width += parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n        return width;\n    };\n    DomHandler.prototype.width = function (el) {\n        var width = el.offsetWidth;\n        var style = getComputedStyle(el);\n        width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight);\n        return width;\n    };\n    DomHandler.prototype.getInnerHeight = function (el) {\n        var height = el.offsetHeight;\n        var style = getComputedStyle(el);\n        height += parseFloat(style.paddingTop) + parseFloat(style.paddingBottom);\n        return height;\n    };\n    DomHandler.prototype.getOuterHeight = function (el, margin) {\n        var height = el.offsetHeight;\n        if (margin) {\n            var style = getComputedStyle(el);\n            height += parseFloat(style.marginTop) + parseFloat(style.marginBottom);\n        }\n        return height;\n    };\n    DomHandler.prototype.getHeight = function (el) {\n        var height = el.offsetHeight;\n        var style = getComputedStyle(el);\n        height -= parseFloat(style.paddingTop) + parseFloat(style.paddingBottom) + parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth);\n        return height;\n    };\n    DomHandler.prototype.getWidth = function (el) {\n        var width = el.offsetWidth;\n        var style = getComputedStyle(el);\n        width -= parseFloat(style.paddingLeft) + parseFloat(style.paddingRight) + parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth);\n        return width;\n    };\n    DomHandler.prototype.getViewport = function () {\n        var win = window, d = document, e = d.documentElement, g = d.getElementsByTagName('body')[0], w = win.innerWidth || e.clientWidth || g.clientWidth, h = win.innerHeight || e.clientHeight || g.clientHeight;\n        return { width: w, height: h };\n    };\n    DomHandler.prototype.getOffset = function (el) {\n        var rect = el.getBoundingClientRect();\n        return {\n            top: rect.top + document.body.scrollTop,\n            left: rect.left + document.body.scrollLeft\n        };\n    };\n    DomHandler.prototype.replaceElementWith = function (element, replacementElement) {\n        var parentNode = element.parentNode;\n        if (!parentNode)\n            throw \"Can't replace element\";\n        return parentNode.replaceChild(replacementElement, element);\n    };\n    DomHandler.prototype.getUserAgent = function () {\n        return navigator.userAgent;\n    };\n    DomHandler.prototype.isIE = function () {\n        var ua = window.navigator.userAgent;\n        var msie = ua.indexOf('MSIE ');\n        if (msie > 0) {\n            // IE 10 or older => return version number\n            return true;\n        }\n        var trident = ua.indexOf('Trident/');\n        if (trident > 0) {\n            // IE 11 => return version number\n            var rv = ua.indexOf('rv:');\n            return true;\n        }\n        var edge = ua.indexOf('Edge/');\n        if (edge > 0) {\n            // Edge (IE 12+) => return version number\n            return true;\n        }\n        // other browser\n        return false;\n    };\n    DomHandler.prototype.appendChild = function (element, target) {\n        if (this.isElement(target))\n            target.appendChild(element);\n        else if (target.el && target.el.nativeElement)\n            target.el.nativeElement.appendChild(element);\n        else\n            throw 'Cannot append ' + target + ' to ' + element;\n    };\n    DomHandler.prototype.removeChild = function (element, target) {\n        if (this.isElement(target))\n            target.removeChild(element);\n        else if (target.el && target.el.nativeElement)\n            target.el.nativeElement.removeChild(element);\n        else\n            throw 'Cannot remove ' + element + ' from ' + target;\n    };\n    DomHandler.prototype.isElement = function (obj) {\n        return (typeof HTMLElement === \"object\" ? obj instanceof HTMLElement :\n            obj && typeof obj === \"object\" && obj !== null && obj.nodeType === 1 && typeof obj.nodeName === \"string\");\n    };\n    DomHandler.prototype.calculateScrollbarWidth = function () {\n        if (this.calculatedScrollbarWidth !== null)\n            return this.calculatedScrollbarWidth;\n        var scrollDiv = document.createElement(\"div\");\n        scrollDiv.className = \"ui-scrollbar-measure\";\n        document.body.appendChild(scrollDiv);\n        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n        document.body.removeChild(scrollDiv);\n        this.calculatedScrollbarWidth = scrollbarWidth;\n        return scrollbarWidth;\n    };\n    DomHandler.prototype.invokeElementMethod = function (element, methodName, args) {\n        element[methodName].apply(element, args);\n    };\n    DomHandler.prototype.clearSelection = function () {\n        if (window.getSelection) {\n            if (window.getSelection().empty) {\n                window.getSelection().empty();\n            }\n            else if (window.getSelection().removeAllRanges && window.getSelection().rangeCount > 0 && window.getSelection().getRangeAt(0).getClientRects().length > 0) {\n                window.getSelection().removeAllRanges();\n            }\n        }\n        else if (document['selection'] && document['selection'].empty) {\n            try {\n                document['selection'].empty();\n            }\n            catch (error) {\n                //ignore IE bug\n            }\n        }\n    };\n    DomHandler.prototype.getBrowser = function () {\n        if (!this.browser) {\n            var matched = this.resolveUserAgent();\n            this.browser = {};\n            if (matched.browser) {\n                this.browser[matched.browser] = true;\n                this.browser['version'] = matched.version;\n            }\n            if (this.browser['chrome']) {\n                this.browser['webkit'] = true;\n            }\n            else if (this.browser['webkit']) {\n                this.browser['safari'] = true;\n            }\n        }\n        return this.browser;\n    };\n    DomHandler.prototype.resolveUserAgent = function () {\n        var ua = navigator.userAgent.toLowerCase();\n        var match = /(chrome)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(webkit)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(opera)(?:.*version|)[ \\/]([\\w.]+)/.exec(ua) ||\n            /(msie) ([\\w.]+)/.exec(ua) ||\n            ua.indexOf(\"compatible\") < 0 && /(mozilla)(?:.*? rv:([\\w.]+)|)/.exec(ua) ||\n            [];\n        return {\n            browser: match[1] || \"\",\n            version: match[2] || \"0\"\n        };\n    };\n    DomHandler.zindex = 1000;\n    DomHandler = __decorate([\n        core_1.Injectable()\n    ], DomHandler);\n    return DomHandler;\n}());\nexports.DomHandler = DomHandler;\n//# sourceMappingURL=domhandler.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/dom/domhandler.js\n// module id = 9\n// module chunks = 0","/* Shorthand */\n\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./components/common/api\"));\n__export(require(\"./components/common/shared\"));\n__export(require(\"./components/accordion/accordion\"));\n__export(require(\"./components/autocomplete/autocomplete\"));\n__export(require(\"./components/blockui/blockui\"));\n__export(require(\"./components/breadcrumb/breadcrumb\"));\n__export(require(\"./components/button/button\"));\n__export(require(\"./components/captcha/captcha\"));\n__export(require(\"./components/calendar/calendar\"));\n__export(require(\"./components/card/card\"));\n__export(require(\"./components/carousel/carousel\"));\n__export(require(\"./components/chart/chart\"));\n__export(require(\"./components/checkbox/checkbox\"));\n__export(require(\"./components/chips/chips\"));\n__export(require(\"./components/codehighlighter/codehighlighter\"));\n__export(require(\"./components/colorpicker/colorpicker\"));\n__export(require(\"./components/confirmdialog/confirmdialog\"));\n__export(require(\"./components/contextmenu/contextmenu\"));\n__export(require(\"./components/datagrid/datagrid\"));\n__export(require(\"./components/datalist/datalist\"));\n__export(require(\"./components/datascroller/datascroller\"));\n__export(require(\"./components/datatable/datatable\"));\n__export(require(\"./components/defer/defer\"));\n__export(require(\"./components/dialog/dialog\"));\n__export(require(\"./components/dragdrop/dragdrop\"));\n__export(require(\"./components/dropdown/dropdown\"));\n__export(require(\"./components/editor/editor\"));\n__export(require(\"./components/fieldset/fieldset\"));\n__export(require(\"./components/fileupload/fileupload\"));\n__export(require(\"./components/galleria/galleria\"));\n__export(require(\"./components/gmap/gmap\"));\n__export(require(\"./components/growl/growl\"));\n__export(require(\"./components/inplace/inplace\"));\n__export(require(\"./components/inputmask/inputmask\"));\n__export(require(\"./components/inputswitch/inputswitch\"));\n__export(require(\"./components/inputtext/inputtext\"));\n__export(require(\"./components/inputtextarea/inputtextarea\"));\n__export(require(\"./components/keyfilter/keyfilter\"));\n__export(require(\"./components/lightbox/lightbox\"));\n__export(require(\"./components/listbox/listbox\"));\n__export(require(\"./components/megamenu/megamenu\"));\n__export(require(\"./components/menu/menu\"));\n__export(require(\"./components/menubar/menubar\"));\n__export(require(\"./components/messages/messages\"));\n__export(require(\"./components/message/message\"));\n__export(require(\"./components/multiselect/multiselect\"));\n__export(require(\"./components/orderlist/orderlist\"));\n__export(require(\"./components/organizationchart/organizationchart\"));\n__export(require(\"./components/overlaypanel/overlaypanel\"));\n__export(require(\"./components/paginator/paginator\"));\n__export(require(\"./components/panel/panel\"));\n__export(require(\"./components/panelmenu/panelmenu\"));\n__export(require(\"./components/password/password\"));\n__export(require(\"./components/picklist/picklist\"));\n__export(require(\"./components/progressbar/progressbar\"));\n__export(require(\"./components/progressspinner/progressspinner\"));\n__export(require(\"./components/radiobutton/radiobutton\"));\n__export(require(\"./components/rating/rating\"));\n__export(require(\"./components/schedule/schedule\"));\n__export(require(\"./components/scrollpanel/scrollpanel\"));\n__export(require(\"./components/selectbutton/selectbutton\"));\n__export(require(\"./components/slidemenu/slidemenu\"));\n__export(require(\"./components/slider/slider\"));\n__export(require(\"./components/sidebar/sidebar\"));\n__export(require(\"./components/spinner/spinner\"));\n__export(require(\"./components/splitbutton/splitbutton\"));\n__export(require(\"./components/steps/steps\"));\n__export(require(\"./components/tabview/tabview\"));\n__export(require(\"./components/tabmenu/tabmenu\"));\n__export(require(\"./components/terminal/terminal\"));\n__export(require(\"./components/tieredmenu/tieredmenu\"));\n__export(require(\"./components/togglebutton/togglebutton\"));\n__export(require(\"./components/toolbar/toolbar\"));\n__export(require(\"./components/tooltip/tooltip\"));\n__export(require(\"./components/tree/tree\"));\n__export(require(\"./components/treetable/treetable\"));\n__export(require(\"./components/tristatecheckbox/tristatecheckbox\"));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/primeng.js\n// module id = 10\n// module chunks = 0","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class GroupService {\n\n    constructor(http: HttpService) {\n        this._http = http;\n    }\n\n    getGroups() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"group\",\n            action : \"list\",\n            token : token\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    saveGroup(group){\n        var token = localStorage.getItem('token');\n        group.module = \"group\";\n        group.action = \"insert\";\n        group.token = token;\n        return this._http.post(group).map(res => {\n            return res;\n        });\n    }\n    getUsersGroup(id_group) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"group\",\n          action: \"usersgroup\",\n          token: token,\n          id_group: id_group\n        };\n        return this._http.post(params).map(res => {\n          return res;\n        });\n    }\n    deleteGroup(id_group) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"group\",\n          action: \"delete\",\n          token: token,\n          id_group: id_group\n        };\n        return this._http.post(params).map(res => {\n          return res;\n        });\n    }\n    deleteUserGroup(user_id) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"group\",\n          action: \"deleteuser\",\n          token: token,\n          id_user: user_id\n        };\n        return this._http.post(params).map(res => {\n          return res;\n        });\n    }\n    getPendigUsers() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"group\",\n            action : \"pendingusers\",\n            token : token\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    saveUsersGroup(grop_id, users) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"group\",\n          action: \"saveusers\",\n          token: token,\n          grop_id: grop_id,\n          users: users\n        };\n        return this._http.post(params).map(res => {\n          return res;\n        });\n      }\n    getmyGroups() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"group\",\n            action : \"mygroups\",\n            token : token\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/group.service.js","export * from './trim/trim.pipe';\nexport * from './filter/filter.pipe';\nexport * from './filter/filterfield.pipe';\nexport * from './filter/filterdata.pipe';\nexport * from './truncate/truncate.pipe';\nexport * from './paginate/paginate.pipe';\nexport * from './order/order.pipe';\nexport * from './safehtml/safehtml.pipe';\nexport * from './calculate/calculate.pipe';\n\n\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/index.js","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar core_2 = require(\"@angular/core\");\nvar Header = /** @class */ (function () {\n    function Header() {\n    }\n    Header = __decorate([\n        core_2.Component({\n            selector: 'p-header',\n            template: '<ng-content></ng-content>'\n        })\n    ], Header);\n    return Header;\n}());\nexports.Header = Header;\nvar Footer = /** @class */ (function () {\n    function Footer() {\n    }\n    Footer = __decorate([\n        core_2.Component({\n            selector: 'p-footer',\n            template: '<ng-content></ng-content>'\n        })\n    ], Footer);\n    return Footer;\n}());\nexports.Footer = Footer;\nvar PrimeTemplate = /** @class */ (function () {\n    function PrimeTemplate(template) {\n        this.template = template;\n    }\n    PrimeTemplate.prototype.getType = function () {\n        return this.name;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PrimeTemplate.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input('pTemplate'),\n        __metadata(\"design:type\", String)\n    ], PrimeTemplate.prototype, \"name\", void 0);\n    PrimeTemplate = __decorate([\n        core_1.Directive({\n            selector: '[pTemplate]',\n            host: {}\n        }),\n        __metadata(\"design:paramtypes\", [core_1.TemplateRef])\n    ], PrimeTemplate);\n    return PrimeTemplate;\n}());\nexports.PrimeTemplate = PrimeTemplate;\n/* Deprecated */\nvar Column = /** @class */ (function () {\n    function Column() {\n        this.filterType = 'text';\n        this.exportable = true;\n        this.resizable = true;\n        this.sortFunction = new core_1.EventEmitter();\n    }\n    Column.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'header':\n                    _this.headerTemplate = item.template;\n                    break;\n                case 'body':\n                    _this.bodyTemplate = item.template;\n                    break;\n                case 'footer':\n                    _this.footerTemplate = item.template;\n                    break;\n                case 'filter':\n                    _this.filterTemplate = item.template;\n                    break;\n                case 'editor':\n                    _this.editorTemplate = item.template;\n                    break;\n                default:\n                    _this.bodyTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"field\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"colId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"sortField\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"filterField\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"sortable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"editable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"filter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"filterMatchMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"filterType\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"excludeGlobalFilter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Column.prototype, \"rowspan\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Column.prototype, \"colspan\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"scope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"exportable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"headerStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"headerStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"bodyStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"bodyStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Column.prototype, \"footerStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"footerStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"hidden\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"expander\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Column.prototype, \"filterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Column.prototype, \"filterMaxlength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"frozen\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Column.prototype, \"resizable\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Column.prototype, \"sortFunction\", void 0);\n    __decorate([\n        core_1.ContentChildren(PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Column.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ContentChild(core_1.TemplateRef),\n        __metadata(\"design:type\", core_1.TemplateRef)\n    ], Column.prototype, \"template\", void 0);\n    Column = __decorate([\n        core_2.Component({\n            selector: 'p-column',\n            template: ''\n        })\n    ], Column);\n    return Column;\n}());\nexports.Column = Column;\n/* Deprecated */\nvar Row = /** @class */ (function () {\n    function Row() {\n    }\n    __decorate([\n        core_1.ContentChildren(Column),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Row.prototype, \"columns\", void 0);\n    Row = __decorate([\n        core_2.Component({\n            selector: 'p-row',\n            template: \"\"\n        })\n    ], Row);\n    return Row;\n}());\nexports.Row = Row;\n/* Deprecated */\nvar HeaderColumnGroup = /** @class */ (function () {\n    function HeaderColumnGroup() {\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], HeaderColumnGroup.prototype, \"frozen\", void 0);\n    __decorate([\n        core_1.ContentChildren(Row),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], HeaderColumnGroup.prototype, \"rows\", void 0);\n    HeaderColumnGroup = __decorate([\n        core_2.Component({\n            selector: 'p-headerColumnGroup',\n            template: \"\"\n        })\n    ], HeaderColumnGroup);\n    return HeaderColumnGroup;\n}());\nexports.HeaderColumnGroup = HeaderColumnGroup;\n/* Deprecated */\nvar FooterColumnGroup = /** @class */ (function () {\n    function FooterColumnGroup() {\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FooterColumnGroup.prototype, \"frozen\", void 0);\n    __decorate([\n        core_1.ContentChildren(Row),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], FooterColumnGroup.prototype, \"rows\", void 0);\n    FooterColumnGroup = __decorate([\n        core_2.Component({\n            selector: 'p-footerColumnGroup',\n            template: \"\"\n        })\n    ], FooterColumnGroup);\n    return FooterColumnGroup;\n}());\nexports.FooterColumnGroup = FooterColumnGroup;\nvar SharedModule = /** @class */ (function () {\n    function SharedModule() {\n    }\n    SharedModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Header, Footer, Column, PrimeTemplate, Row, HeaderColumnGroup, FooterColumnGroup],\n            declarations: [Header, Footer, Column, PrimeTemplate, Row, HeaderColumnGroup, FooterColumnGroup]\n        })\n    ], SharedModule);\n    return SharedModule;\n}());\nexports.SharedModule = SharedModule;\n//# sourceMappingURL=shared.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/common/shared.js\n// module id = 15\n// module chunks = 0","import { Http, HttpHeaders, HTTP_PROVIDERS } from '@angular/http';\nimport { Injectable } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\n\n@Injectable()\nexport class HttpService {\n\n    constructor(http: Http, route: Router, toastr: ToastrService) {\n        this._route = route;\n        this._http = http;\n        this.toastr = toastr;\n        this.toastr.options = {\n          \"preventDuplicates\": true,\n          \"preventOpenDuplicates\": true\n          };\n    }\n    \n    jsonToFormData(inJSON, inTestJSON, inFormData, parentKey) {\n        var form_data = inFormData || new FormData();\n        var testJSON = inTestJSON || {};\n        for ( var key in inJSON ) {\n            var constructedKey = key;\n            if (parentKey) {\n                constructedKey = parentKey + \".\" + key;\n            }\n    \n            var value = inJSON[key];\n\n            if (value && value.constructor === {}.constructor) {\n                // This is a JSON, we now need to recurse!\n                this.jsonToFormData (value, testJSON, form_data, constructedKey);\n            } else if (Array.isArray(value)) {\n                for (var i = 0; i < value.length; i++) {\n                    form_data.append(key+'[]', value[i]);\n                }\n            } else {\n                form_data.append(constructedKey, inJSON[key]);\n                testJSON[constructedKey] = inJSON[key];\n            }\n        }\n        return form_data;\n    }\n\n    post(postData, withCredentials = true){\n        //var body = $.param(postData);\n        var headers = new Headers();\n        headers.append('Content-type','application/json');\n        var formData = this.jsonToFormData(postData);\n        return this._http.post(\"api/routes.php\",formData, {headers: headers, withCredentials: withCredentials}).map(res => {\n            var rs = {data: \"error\", message: \"error\"};\n            if (res.json()) {\n                rs = res.json();\n                if (rs.data === \"notlog\" ) {\n                    this.toastr.warning(rs.message,\"warning!\");\n                    this._route.navigate(['/login']);\n                    return {data: \"error\", message: \"error\"};\n                } \n            }\n            return rs;\n        })\n        .catch(error => {\n            this.logError(postData.module, postData.action, error);\n            this._route.navigate(['/login']);\n            return {data: error, message: \"error\"};\n        });  \n    }\n\n    logError(tmd, tac, error){\n        var params = {\n            module : \"login\",\n            action : \"saverror\",\n            tomodule: tmd,\n            toaction: tac,\n            error: error,\n            token: localStorage.getItem('token')\n        };\n        var headers = new Headers();\n        headers.append('Content-type','application/json');\n        var formData = this.jsonToFormData(params);\n        this._http.post(\"api/routes.php\",formData, {headers: headers, withCredentials: true}).map(res => {\n            //console.log(res);\n        })\n        .catch(error => {\n            //console.log(\"Error\");\n        });  \n    }\n\n    postWithFile(postData, files, withCredentials = true) {\n\n        if (document.getElementById(\"loader\")) {\n            document.getElementById(\"loader\").style.display = \"display\";\n        }\n        /*var headers = this._http._defaultOptions.headers;\n        headers.append('Content-type','application/x-www-form-urlencoded');*/\n        var headers = new Headers();\n        var formData = this.jsonToFormData(postData);\n\n        // For multiple files\n        if (files && Array.isArray(files)) {\n            for (let i = 0; i < files.length; i++) {\n                formData.append('files[]', (files[i], files[i].name));\n            }\n        }\n        return this._http.post(\"api/routes.php\",formData, {headers: headers, withCredentials: withCredentials}).map(function(res){\n            var rs = res.json();\n            if (rs) {\n                if (rs.data === \"error\") {\n                    this.toastr.error(rs.message,\"Error!\");\n                    this._route.navigate(['/login']);\n                    return {data: \"error\", message: rs.message};\n                } else if (rs.data === \"notlog\") {\n                    this.toastr.warning(rs.message,\"warning!\");\n                    this._route.navigate(['/login']);\n                    return {data: \"error\", message: rs.message};\n                }\n            } \n            if (document.getElementById(\"loader\")) {\n                document.getElementById(\"loader\").style.display = \"none\";\n            }\n            return rs;\n        }.bind(this))\n        .catch(function(error){\n            if (document.getElementById(\"loader\")) {\n                document.getElementById(\"loader\").style.display = \"none\";\n            }\n            this._route.navigate(['/login']);\n            return {data: error, message: \"error\"};\n        }.bind(this)); \n    }\n    postExternal(postData, withCredentials = true){\n        //var body = $.param(postData);\n        var headers = new Headers();\n        headers.append('Content-type','application/json');\n        var formData = this.jsonToFormData(postData);\n        return this._http.post(\"api/private/eroutes.php\",formData, {headers: headers, withCredentials: withCredentials}).map(res => {\n            var rs = {data: \"error\", message: \"error\"};\n            if (res.json()) {\n                rs = res.json();\n                if (rs.data === \"error\" && rs.message !== \"Session has Expired\" && rs.message !== \"User or Password incorrect!\") {\n                    this.toastr.error(rs.message,\"Error!\");\n                    this._route.navigate(['/login']);\n                    return {data: \"error\", message: rs.message};\n                } else if (rs.data === \"notlog\") {\n                    this.toastr.warning(rs.message,\"warning!\");\n                    this._route.navigate(['/login']);\n                    return {data: \"error\", message: \"error\"};\n                } else if (rs.data === \"error\" && rs.message == \"User or Password incorrect!\") {\n                    this.toastr.error(rs.message,\"Error!\");\n                    return {data: \"error\", message: rs.message};\n                }\n            }\n            return rs;\n        })\n        .catch(error => {\n            this.logError(postData.module, postData.action, error);\n            this._route.navigate(['/login']);\n            return {data: error, message: \"error\"};\n        });  \n    }\n    \n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/services/http.service.js","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"./http.service\";\n\n@Injectable()\nexport class ProjectService {\n  constructor(http: HttpService) {\n    this.http = http;\n  }\n\n  getprojectList(filter) {\n    var token = localStorage.getItem(\"token\");\n    filter.module = \"project\";\n    filter.action = \"listx\";\n    filter.token = token;\n    return this.http.post(filter).map(res => {\n      return res;\n    });\n  }\n\n  getmyProjects() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"myprojects\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  putproject(project) {\n    var token = localStorage.getItem(\"token\");\n    project.module = \"project\";\n    project.action = \"insert\";\n    project.token = token;\n    return this.http.postWithFile(project, project.attachments).map(res => {\n      return res;\n    });\n  }\n\n  putMilestone(project) {\n    var token = localStorage.getItem(\"token\");\n    project.module = \"project\";\n    project.action = \"milestone\";\n    project.token = token;\n    return this.http.post(project).map(res => {\n      return res;\n    });\n  }\n\n  getMilestone(proj_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"mymilestone\",\n      token: token,\n      proj_id: proj_id\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  putFromEvent(project) {\n    var token = localStorage.getItem(\"token\");\n    project.module = \"project\";\n    project.action = \"fromevent\";\n    project.token = token;\n    return this.http.postWithFile(project, project.attachments).map(res => {\n      return res;\n    });\n  }\n\n  deleteMilestone(pjml_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"deletemilestone\",\n      token: token,\n      pjml_id: pjml_id\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getStates() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"states\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getproject(tkid) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"project\",\n      proj_id: tkid,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getprojectInfo(tkid) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"projectinfo\",\n      proj_id: tkid,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getCategories() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"categories\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  approveproject(tkid) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"approve\",\n      proj_id: tkid,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getAttachments(proj_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"attachments\",\n      proj_id: proj_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n    deleteAttachmentProject(proj_id, att_id) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"project\",\n            action: \"deleteattachments\",\n            proj_id: proj_id,\n            att_id: att_id,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n  setStatusproject(proj_id, status) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"setstatus\",\n      proj_id: proj_id,\n      para_status: status,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTimeline(tkid) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"timeline\",\n      proj_id: tkid,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getprojectNotes(proj_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"ProjectNote\",\n      proj_id: proj_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getCommentsUsers(proj_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"project\",\n      action: \"getcommentsusers\",\n      proj_id: proj_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/services/project.service.js","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"./http.service\";\n\n@Injectable()\nexport class TaskService {\n  constructor(http: HttpService) {\n    this.http = http;\n  }\n\n  getTasks() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"list\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n  status(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"status\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTaskList(filter) {\n    var token = localStorage.getItem(\"token\");\n    filter.module = \"task\";\n    filter.action = \"listx\";\n    filter.token = token;\n    return this.http.post(filter).map(res => {\n      return res;\n    });\n  }\n\n  getPercentage() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"percentage\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getStates() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"states\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getUserEvent() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"events\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getComments(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"comments\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  rejectTask(task_id, retk_description) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"reject\",\n      task_id: task_id,\n      retk_description: retk_description,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n  backlogTask(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"backlog\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  impTask(task_id, imtk_description) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"improvement\",\n      task_id: task_id,\n      imtk_description: imtk_description,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getUserTasks() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"userlist\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  deleteTask(task) {\n    var token = localStorage.getItem(\"token\");\n    task.module = \"task\";\n    task.action = \"delete\";\n    task.token = token;\n    return this.http.post(task).map(res => {\n      return res;\n    });\n  }\n\n  putTask(task) {\n    var token = localStorage.getItem(\"token\");\n    task.module = \"task\";\n    task.action = \"insert\";\n    task.token = token;\n    return this.http.postWithFile(task, task.attachments).map(res => {\n      return res;\n    });\n  }\n\n  duplicateTask(task) {\n    var token = localStorage.getItem(\"token\");\n    task.module = \"task\";\n    task.action = \"duplicate\";\n    task.token = token;\n    return this.http.postWithFile(task, task.attachments).map(res => {\n      return res;\n    });\n  }\n\n  getTask(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"task\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getAttachments(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"attachments\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  deleteAttachmentTask(task_id, att_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"deleteattachments\",\n      task_id: task_id,\n      att_id: att_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  putExtra(task) {\n    var token = localStorage.getItem(\"token\");\n    task.module = \"task\";\n    task.action = \"extra\";\n    task.token = token;\n    return this.http.postWithFile(task, task.attachments).map(res => {\n      return res;\n    });\n  }\n\n  editTask(task) {\n    var token = localStorage.getItem(\"token\");\n    task.module = \"task\";\n    task.action = \"edittask\";\n    task.token = token;\n    return this.http.post(task).map(result => {\n      return result;\n    });\n  }\n\n  setStatusTask(task_id, status) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"setstatus\",\n      task_id: task_id,\n      para_status: status,\n      //task_approved : task_approved,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTimeline(tkid) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"timeline\",\n      tkid: tkid,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getRejected(tkid) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"rejected\",\n      tkid: tkid,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTaskproject(proj_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"taskproject\",\n      proj_id: proj_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getBadges() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getbadges\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  removeBadge(id, type) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"removebadges\",\n      task_id: id,\n      not_type: type,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  acceptTask(taskid, catid) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"accepttask\",\n      taskid: taskid,\n      catid: catid,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getBadges() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getbadges\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  removeBadge(id, type) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"removebadges\",\n      task_id: id,\n      not_type: type,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  putAttachments(task) {\n    var token = localStorage.getItem(\"token\");\n    task.module = \"task\";\n    task.action = \"insertattachment\";\n    task.token = token;\n    return this.http.postWithFile(task, task.attachments).map(res => {\n      return res;\n    });\n  }\n\n  getMyTags() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"mytags\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTagsByTask(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"gettagsbytask\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  deleteTagsByTask(task_id, tag_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"deletetagsbytask\",\n      task_id: task_id,\n      tag_id: tag_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  setTag(data) {\n    var token = localStorage.getItem(\"token\");\n    data.module = \"task\";\n    data.action = \"settag\";\n    data.token = token;\n    return this.http.post(data).map(res => {\n      return res;\n    });\n  }\n\n  saveNewTag(data) {\n    var token = localStorage.getItem(\"token\");\n    data.module = \"task\";\n    data.action = \"inserttag\";\n    data.token = token;\n    return this.http.post(data).map(res => {\n      return res;\n    });\n  }\n\n  getAdjusted(taskid) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"adjusted\",\n      token: token,\n      taskid: taskid\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  putTaskFields(taskid, fld) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"insertfields\",\n      token: token,\n      taskid: taskid,\n      fields: '{\"fields\": ' + JSON.stringify(fld) + '}'\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTaskFields(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getfields\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getCommentsUsers(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getcommentsusers\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getDailyTimeline(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getdailytimeline\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTimelinetk(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"timelinetk\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  moveTaskCpImp(task_id, retk_description) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"improvement\",\n      task_id: task_id,\n      retk_description: retk_description,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTasksbyMe() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getbyme\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getCurrentDate() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"currentdate\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getPercentageDetail(state) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"percentagedetail\",\n      state: state,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getMyTask(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"mytask\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getJoin(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getjoin\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getInfoTaskJoin(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getinfotaskjoin\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTaskSharedList(filter) {\n    var token = localStorage.getItem(\"token\");\n    filter.module = \"task\";\n    filter.action = \"liststaskshared\";\n    filter.token = token;\n    return this.http.post(filter).map(res => {\n      return res;\n    });\n  }\n\n  saveTaskJoin(task) {\n    var token = localStorage.getItem(\"token\");\n    task.module = \"task\";\n    task.action = \"savetaskjoin\";\n    task.token = token;\n    return this.http.post(task).map(res => {\n      return res;\n    });\n  }\n\n  associateTaskJoin(task) {\n    var token = localStorage.getItem(\"token\");\n    task.module = \"task\";\n    task.action = \"associatetaskjoin\";\n    task.token = token;\n    return this.http.post(task).map(res => {\n      return res;\n    });\n  }\n\n  deleteTaskJoin(task_child_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"deletetaskjoin\",\n      task_child_id: task_child_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getInfoTaskCriteria(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getinfotaskcriteria\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getFormTaskCriteria(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getformtaskcriteria\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  reopenTask(task_id, status) {\n\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"reopen\",\n      task_id: task_id,\n      status: status,\n      token: token\n    };\n\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getLevels() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"getlevels\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  deletesprintbytask(task_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"task\",\n      action: \"deletesprintbytask\",\n      task_id: task_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getExcel(filter) {\n    var token = localStorage.getItem(\"token\");\n    filter.module = \"task\";\n    filter.action = \"excel\";\n    filter.token = token;\n    return this.http.post(filter).map(res => {\n      return res;\n    });\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/services/task.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\nimport { filter } from 'rxjs/operators';\n\n@Injectable()\nexport class UsersService {\n\n    constructor(httpService: HttpService) {\n        this._http = httpService;\n    }\n\n    getUserList() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"getlist\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    listUsersEdit(grop_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"listusersedit\",\n            grop_id: grop_id,\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getUsersx(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"users\";\n        filter.action = \"listx\";\n        filter.token = token;\n        return this._http.post(filter).map(res => {\n            return res;\n        });\n    }\n\n    getCRMUsers() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"listcrm\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getUsersExternal(bd_name) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"listuserexternal\",\n            dbname : bd_name, \n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMyUsers() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"listmyusers\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    saveUser(data) {\n        var token = localStorage.getItem('token');\n        data.module = \"users\";\n        data.action = \"saveUser\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n            this.reload();\n        });\n    }\n\n    changePassword(data) {\n        var token = localStorage.getItem('token');\n        data.module = \"users\";\n        data.action = \"changepw\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }\n\n    editUser(data) {\n        var token = localStorage.getItem(\"token\");\n        data.module = \"users\";\n        data.action = \"editUser\";\n        data.token = token;\n        //console.log(product);\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }\n\n    geteditUser(user_id, noGroup) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"geteditUser\",\n            token: token,\n            user_id: user_id,\n            no_group : noGroup\n\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    editUserSettings(data) {\n        var token = localStorage.getItem(\"token\");\n        data.module = \"users\";\n        data.action = \"editusersettings\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }\n\n    deleteUser(user_id) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"users\",\n            action: \"deleteuser\",\n            token: token,\n            user_id: user_id\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getNotificationsList() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"getnotificationslist\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getUserInfo(user_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"getuserinfo\",\n            user_id: user_id,\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMyUserData() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"myuserdata\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getEmailList() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"emaillist\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getPreferences() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"getmypreferences\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    savePreferences(preferences) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"savepreferences\",\n            token: token,\n            preferences: preferences\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    verifyEmail(email) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"users\",\n            action: \"verify\",\n            email: email,\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getExternalList() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"externallist\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getDataBase(user_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"getdatabase\",\n            user_id: user_id,\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getRolUser() {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"users\",\n            action: \"getroluser\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getUserHistory(user_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"gethistoryusersgroup\",\n            user_id: user_id,\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    saveUserHistory(data) {\n        var token = localStorage.getItem('token');\n        data.module = \"users\";\n        data.action = \"puthistoryusergroup\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }    \n\n    updateUserHistory(data) {\n        var token = localStorage.getItem('token');\n        data.module = \"users\";\n        data.action = \"edithistoryusergroup\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }\n\n    deleteUserHistory(grhi_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"users\",\n            action: \"deletehistoryusergroup\",\n            token: token,\n            grhi_id: grhi_id\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/users.service.js","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"./http.service\";\n\n@Injectable()\nexport class ProductService {\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getProducts() {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"product\",\n            action: \"list\",\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getProductsx(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"product\";\n        filter.action = \"listx\";\n        filter.token = token;\n        return this.http.post(filter).map(res => {\n            return res;\n        });\n    }\n\n    getProduct(idprod) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"product\",\n            action: \"listproduct\",\n            prod_id: idprod,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    putProduct(product) {\n        var token = localStorage.getItem(\"token\");\n        product.module = \"product\";\n        product.action = \"insert\";\n        product.token = token;\n        //console.log(product);\n        return this.http.post(product).map(res => {\n            return res;\n        });\n    }\n\n    updateProduct(product) {\n        var token = localStorage.getItem(\"token\");\n        product.module = \"product\";\n        product.action = \"update\";\n        product.token = token;\n        //console.log(product);\n        return this.http.post(product).map(res => {\n            return res;\n        });\n    }\n\n    deleteProduct(idprod) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"product\",\n            action: \"delete\",\n            prod_id: idprod,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/product.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class NoteService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getNotes() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"note\",\n            action : \"list\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    putNote(note){\n        var token = localStorage.getItem('token');\n        note.module = \"note\";\n        note.action = \"insert\";\n        note.token = token;\n        if (!note.attachments) {\n            note.attachments = [];\n        }\n        return this.http.postWithFile(note, note.attachments).map(res => {\n            return res;\n        });\n    }\n\n\n    getNote(ntid){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"note\",\n            action : \"note\",\n            ntid : ntid,\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        }); \n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/note.service.js","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"./http.service\";\n\n@Injectable()\nexport class SprintService {\n  constructor(http: HttpService) {\n    this.http = http;\n  }\n\n  getMySprints() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"mysprints\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getSprintFull(spri_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"sprintfull\",\n      spri_id: spri_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getSprintDetail(id_sprint) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"sprintdetails\",\n      token: token,\n      id_sprint: id_sprint\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getSprint(id_sprint) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"sprintn\",\n      token: token,\n      id_sprint: id_sprint\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n  \n  getHead(id_group) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"head\",\n      token: token,\n      grop_id: id_group\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTeam(id_group) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"team\",\n      token: token,\n      grop_id: id_group\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  saveSprintTasks(id_sprint, tasks) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"savespr\",\n      token: token,\n      id_sprint: id_sprint,\n      tasks: tasks\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  delSprintTasks(id_sprint, tasks) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"delspr\",\n      token: token,\n      id_sprint: id_sprint,\n      tasks: tasks\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  saveTaskToSprint(id_sprint, task) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"saveTasktoSprint\",\n      token: token,\n      id_sprint: id_sprint,\n      task: task\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  deleteSprint(id_sprint) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"deleteSprint\",\n      token: token,\n      id_sprint: id_sprint\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTasksWoSp(filter) {\n    var token = localStorage.getItem(\"token\");\n    filter.module = \"sprint\"; \n    filter.action = \"TasksWoSp\"; \n    filter.token = token; \n    return this.http.post(filter).map(res => {\n      return res;\n    });\n  }\n\n  putSprint(spri) {\n    var token = localStorage.getItem(\"token\");\n\n    spri.module = \"sprint\";\n    spri.action = \"insert\";\n    spri.token = token;\n\n    return this.http.post(spri).map(res => {\n      return res;\n    });\n  }\n\n  putSprintDay(spri) {\n    var token = localStorage.getItem(\"token\");\n\n    spri.module = \"sprint\";\n    spri.action = \"insertdays\";\n    spri.token = token;\n\n    return this.http.post(spri).map(res => {\n      return res;\n    });\n  }\n\n  getSum(spri_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"sum\",\n      spri_id: spri_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getMySpri() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"myspri\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getListSprints() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"listsprints\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getMySprintDetail() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"mysprintdetails\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getListReport(grop_id) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"listreport\",\n      grop_id: grop_id,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getTasksReport(grop_id, date_init, date_end) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"tasksreport\",\n      grop_id: grop_id,\n      date_init: date_init,\n      date_end: date_end,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getUsersReport(grop_id, date_init, date_end) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"usersreport\",\n      grop_id: grop_id,\n      date_init: date_init,\n      date_end: date_end,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getProjectsReport(grop_id, date_init, date_end) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"projectsreport\",\n      grop_id: grop_id,\n      date_init: date_init,\n      date_end: date_end,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getMySprintInfo(id_sprint) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"sprintinfo\",\n      id_sprint : id_sprint,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n\n  getExcel(type, grop_id, date_init, date_end) {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"sprint\",\n      action: \"excel\",\n      type: type,\n      grop_id: grop_id,\n      date_init: date_init,\n      date_end: date_end,\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n  \n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/services/sprint.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class DirectoryService {\n\n    constructor(httpService: HttpService) {\n        this._http = httpService;\n    }\n\n    getContacts() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"directory\",\n            action : \"list\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getContact(cont_id) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module : \"directory\",\n            action : \"listcontact\",\n            cont_id : cont_id,\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    saveContact(data) {\n        var token = localStorage.getItem('token');\n        data.module = \"directory\";\n        data.action = \"savecontac\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }\n    verifyEmaild(email) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"directory\",\n            action: \"verify\",\n            email: email,\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    updateContact(data) {\n        var token = localStorage.getItem('token');\n        data.module = \"directory\";\n        data.action = \"updatecontac\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n      }\n\n      deleteContact(cont_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"directory\",\n            action : \"deleteContact\",\n            cont_id : cont_id,\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n      }\n\n      getUsersx(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"directory\";\n        filter.action = \"listx\";\n        filter.token = token;\n        return this._http.post(filter).map(res => {\n            return res;\n        });\n    }\n    getGroups() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"directory\",\n            action : \"listgroups\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getCategories(idusuario) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"directory\",\n            action : \"categories\",\n            idusuario: idusuario,\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n\n    }\n\n    putEmail(user_id, email) {\n        var token = localStorage.getItem('token');\n        var params = {\n            token : token,\n            module : \"directory\",\n            action : \"addemail\",\n            idusuario : user_id,\n            email : email\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        }); \n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/directory.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class HeaderService {\n\n    constructor(httpService: HttpService) {\n        this._http = httpService;\n    }\n\n    getUser() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"menu\",\n            action : \"user\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMenuByUser() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"menu\",\n            action : \"menubyuser\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getDeskNotificatons() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"notifications\",\n            action : \"desknotification\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    \n    clearNotificatons() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"notifications\",\n            action : \"clear\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    setCatNotification(id, cat) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"notifications\",\n            action : \"setcatnotification\",\n            id_notification: id,\n            id_catnotification: cat,\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getCheckVersion() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"notifications\",\n            action: \"checkversion\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getListx(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"notifications\"; \n        filter.action = \"listx\"; \n        filter.token = token; \n        return this._http.post(filter).map(res => {\n          return res;\n        });\n      }\n}\n\n\n\n\n// WEBPACK FOOTER //\n// ./app/services/header.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class MailService {\n\n    constructor(httpService: HttpService) {\n        this._http = httpService;\n    }\n\n    searchMail(search){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"search\",\n            token : token,\n            search : search\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getEmails() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"inbox\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getFolders() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"getfolders\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMessage(msgid) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"email\",\n            token : token,\n            msgid : msgid\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    \n\n    sendMessage(message) {\n        let token = localStorage.getItem('token');\n        message.module = \"mailbox\";\n        message.action = \"sendemail\";\n        message.token = token;\n        return this._http.postWithFile(message, message.attachments).map(res => {\n            return res;\n        });\n    }\n\n    emailUpdate() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"update\",\n            token : token\n        };\n        return this._http.postWithFile(params, params.attachments).map(res => {\n            return res;\n        });\n    }\n\n    getFlags() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"getflags\",\n            token : token\n        };\n        return this._http.post(params).map(data => {\n            return data;\n        });\n    }\n\n    setFlag(idmail,idflag) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"setflag\",\n            emailid : idmail,\n            flag : idflag,\n            token : token\n        };\n        return this._http.post(params).map(data => {\n            return data;\n        });\n    }\n\n    getFolders() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"getfolders\",\n            token : token\n        };\n        return this._http.post(params).map(data => {\n            return data;\n        });\n    }\n\n    setFolder(idmail,idfolder) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"setfolder\",\n            emailid : idmail,\n            folder : idfolder,\n            token : token\n        };\n        return this._http.post(params).map(data => {\n            return data;\n        });\n    }\n\n    NewMailbox(connection){\n        var token = localStorage.getItem('token');\n        connection.module = \"mailbox\";\n        connection.action = \"newmail\";\n        connection.token = token;\n        return this._http.post(connection).map(data => {\n            return data;\n        });\n    }\n\n    streamMessage(msgno,usem_id,folder){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"streammail\",\n            token : token,\n            msgno : msgno,\n            usem_id : usem_id,\n            folder : folder\n        };\n        return this._http.post(params).map(data => {\n            return data;\n        });\n    }\n\n    getMyAccounts(){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"getmyaccounts\",\n            token : token\n        };\n        return this._http.post(params).map(data => {\n            return data;\n        });\n    }\n\n    saveNewAccount(data){\n        var token = localStorage.getItem('token');\n        data.module = \"mailbox\";\n        data.action = \"saveaccount\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }\n\n    emailAction(data){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"mailbox\",\n            action : \"emailaction\",\n            token : token,\n            data : data\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    editAccount(data){\n        var token = localStorage.getItem('token');\n        data.module = \"mailbox\";\n        data.action = \"editaccount\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }\n\n    deleteAccount(data){\n        var token = localStorage.getItem('token');\n        data.module = \"mailbox\";\n        data.action = \"deleteaccount\";\n        data.token = token;\n        return this._http.post(data).map(res => {\n            return res;\n        });\n    }\n\n    sendEmail(data){\n        var token = localStorage.getItem('token');\n        data.module = \"mailbox\";\n        data.action = \"sendmessage\";\n        data.token = token;\n        return this._http.postWithFile(data, data.attachments).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/mail.service.js","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar common_1 = require(\"@angular/common\");\nvar ButtonDirective = /** @class */ (function () {\n    function ButtonDirective(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.iconPos = 'left';\n        this.cornerStyleClass = 'ui-corner-all';\n    }\n    ButtonDirective.prototype.ngAfterViewInit = function () {\n        this.domHandler.addMultipleClasses(this.el.nativeElement, this.getStyleClass());\n        if (this.icon) {\n            var iconElement = document.createElement(\"span\");\n            iconElement.setAttribute(\"aria-hidden\", \"true\");\n            var iconPosClass = (this.iconPos == 'right') ? 'ui-button-icon-right' : 'ui-button-icon-left';\n            iconElement.className = iconPosClass + ' ui-clickable fa fa-fw ' + this.icon;\n            this.el.nativeElement.appendChild(iconElement);\n        }\n        var labelElement = document.createElement(\"span\");\n        labelElement.className = 'ui-button-text ui-clickable';\n        labelElement.appendChild(document.createTextNode(this.label || 'ui-btn'));\n        this.el.nativeElement.appendChild(labelElement);\n        this.initialized = true;\n    };\n    ButtonDirective.prototype.getStyleClass = function () {\n        var styleClass = 'ui-button ui-widget ui-state-default ' + this.cornerStyleClass;\n        if (this.icon) {\n            if (this.label != null && this.label != undefined) {\n                if (this.iconPos == 'left')\n                    styleClass = styleClass + ' ui-button-text-icon-left';\n                else\n                    styleClass = styleClass + ' ui-button-text-icon-right';\n            }\n            else {\n                styleClass = styleClass + ' ui-button-icon-only';\n            }\n        }\n        else {\n            if (this.label) {\n                styleClass = styleClass + ' ui-button-text-only';\n            }\n            else {\n                styleClass = styleClass + ' ui-button-text-empty';\n            }\n        }\n        return styleClass;\n    };\n    Object.defineProperty(ButtonDirective.prototype, \"label\", {\n        get: function () {\n            return this._label;\n        },\n        set: function (val) {\n            this._label = val;\n            if (this.initialized) {\n                this.domHandler.findSingle(this.el.nativeElement, '.ui-button-text').textContent = this._label;\n                if (!this.icon) {\n                    if (this._label) {\n                        this.domHandler.removeClass(this.el.nativeElement, 'ui-button-text-empty');\n                        this.domHandler.addClass(this.el.nativeElement, 'ui-button-text-only');\n                    }\n                    else {\n                        this.domHandler.addClass(this.el.nativeElement, 'ui-button-text-empty');\n                        this.domHandler.removeClass(this.el.nativeElement, 'ui-button-text-only');\n                    }\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ButtonDirective.prototype, \"icon\", {\n        get: function () {\n            return this._icon;\n        },\n        set: function (val) {\n            this._icon = val;\n            if (this.initialized) {\n                var iconPosClass = (this.iconPos == 'right') ? 'ui-button-icon-right' : 'ui-button-icon-left';\n                this.domHandler.findSingle(this.el.nativeElement, '.fa').className =\n                    iconPosClass + ' ui-clickable fa fa-fw ' + this.icon;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ButtonDirective.prototype.ngOnDestroy = function () {\n        while (this.el.nativeElement.hasChildNodes()) {\n            this.el.nativeElement.removeChild(this.el.nativeElement.lastChild);\n        }\n        this.initialized = false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ButtonDirective.prototype, \"iconPos\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ButtonDirective.prototype, \"cornerStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], ButtonDirective.prototype, \"label\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], ButtonDirective.prototype, \"icon\", null);\n    ButtonDirective = __decorate([\n        core_1.Directive({\n            selector: '[pButton]',\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], ButtonDirective);\n    return ButtonDirective;\n}());\nexports.ButtonDirective = ButtonDirective;\nvar Button = /** @class */ (function () {\n    function Button() {\n        this.type = 'button';\n        this.iconPos = 'left';\n        this.onClick = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"iconPos\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"icon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Button.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Button.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Button.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Button.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Button.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Button.prototype, \"onBlur\", void 0);\n    Button = __decorate([\n        core_1.Component({\n            selector: 'p-button',\n            template: \"\\n        <button [attr.type]=\\\"type\\\" [class]=\\\"styleClass\\\" [style]=\\\"style\\\" [disabled]=\\\"disabled\\\"\\n            [ngClass]=\\\"{'ui-button ui-widget ui-state-default ui-corner-all':true,\\n                        'ui-button-icon-only': (icon && !label),\\n                        'ui-button-text-icon-left': (icon && label && iconPos === 'left'),\\n                        'ui-button-text-icon-right': (icon && label && iconPos === 'right'),\\n                        'ui-button-text-only': (!icon && label),\\n                        'ui-button-text-empty': (!icon && !label),\\n                        'ui-state-disabled': disabled}\\\"\\n                        (click)=\\\"onClick.emit($event)\\\" (focus)=\\\"onFocus.emit($event)\\\" (blur)=\\\"onBlur.emit($event)\\\">\\n            <ng-content></ng-content>\\n            <span [ngClass]=\\\"{'ui-clickable': true,\\n                        'ui-button-icon-left': (iconPos === 'left'), \\n                        'ui-button-icon-right': (iconPos === 'right')}\\\"\\n                        [class]=\\\"icon\\\" *ngIf=\\\"icon\\\"></span>\\n            <span class=\\\"ui-button-text ui-clickable\\\">{{label||'ui-btn'}}</span>\\n        </button>\\n    \"\n        })\n    ], Button);\n    return Button;\n}());\nexports.Button = Button;\nvar ButtonModule = /** @class */ (function () {\n    function ButtonModule() {\n    }\n    ButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ButtonDirective, Button],\n            declarations: [ButtonDirective, Button]\n        })\n    ], ButtonModule);\n    return ButtonModule;\n}());\nexports.ButtonModule = ButtonModule;\n//# sourceMappingURL=button.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/button/button.js\n// module id = 37\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar ObjectUtils = /** @class */ (function () {\n    function ObjectUtils() {\n    }\n    ObjectUtils.prototype.equals = function (obj1, obj2, field) {\n        if (field)\n            return (this.resolveFieldData(obj1, field) === this.resolveFieldData(obj2, field));\n        else\n            return this.equalsByValue(obj1, obj2);\n    };\n    ObjectUtils.prototype.equalsByValue = function (obj1, obj2, visited) {\n        if (obj1 == null && obj2 == null) {\n            return true;\n        }\n        if (obj1 == null || obj2 == null) {\n            return false;\n        }\n        if (obj1 == obj2) {\n            return true;\n        }\n        if (typeof obj1 == 'object' && typeof obj2 == 'object') {\n            if (visited) {\n                if (visited.indexOf(obj1) !== -1)\n                    return false;\n            }\n            else {\n                visited = [];\n            }\n            visited.push(obj1);\n            for (var p in obj1) {\n                if (obj1.hasOwnProperty(p) !== obj2.hasOwnProperty(p)) {\n                    return false;\n                }\n                switch (typeof (obj1[p])) {\n                    case 'object':\n                        if (!this.equalsByValue(obj1[p], obj2[p], visited))\n                            return false;\n                        break;\n                    case 'function':\n                        if (typeof (obj2[p]) == 'undefined' || (p != 'compare' && obj1[p].toString() != obj2[p].toString()))\n                            return false;\n                        break;\n                    default:\n                        if (obj1[p] != obj2[p])\n                            return false;\n                        break;\n                }\n            }\n            for (var p in obj2) {\n                if (typeof (obj1[p]) == 'undefined')\n                    return false;\n            }\n            delete obj1._$visited;\n            return true;\n        }\n        return false;\n    };\n    ObjectUtils.prototype.resolveFieldData = function (data, field) {\n        if (data && field) {\n            if (field.indexOf('.') == -1) {\n                return data[field];\n            }\n            else {\n                var fields = field.split('.');\n                var value = data;\n                for (var i = 0, len = fields.length; i < len; ++i) {\n                    if (value == null) {\n                        return null;\n                    }\n                    value = value[fields[i]];\n                }\n                return value;\n            }\n        }\n        else {\n            return null;\n        }\n    };\n    ObjectUtils.prototype.filter = function (value, fields, filterValue) {\n        var filteredItems = [];\n        if (value) {\n            for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n                var item = value_1[_i];\n                for (var _a = 0, fields_1 = fields; _a < fields_1.length; _a++) {\n                    var field = fields_1[_a];\n                    if (String(this.resolveFieldData(item, field)).toLowerCase().indexOf(filterValue.toLowerCase()) > -1) {\n                        filteredItems.push(item);\n                        break;\n                    }\n                }\n            }\n        }\n        return filteredItems;\n    };\n    ObjectUtils.prototype.reorderArray = function (value, from, to) {\n        var target;\n        if (value && (from !== to)) {\n            if (to >= value.length) {\n                target = to - value.length;\n                while ((target--) + 1) {\n                    value.push(undefined);\n                }\n            }\n            value.splice(to, 0, value.splice(from, 1)[0]);\n        }\n    };\n    ObjectUtils.prototype.generateSelectItems = function (val, field) {\n        var selectItems;\n        if (val && val.length) {\n            selectItems = [];\n            for (var _i = 0, val_1 = val; _i < val_1.length; _i++) {\n                var item = val_1[_i];\n                selectItems.push({ label: this.resolveFieldData(item, field), value: item });\n            }\n        }\n        return selectItems;\n    };\n    ObjectUtils.prototype.insertIntoOrderedArray = function (item, index, arr, sourceArr) {\n        if (arr.length > 0) {\n            var injected = false;\n            for (var i = 0; i < arr.length; i++) {\n                var currentItemIndex = this.findIndexInList(arr[i], sourceArr);\n                if (currentItemIndex > index) {\n                    arr.splice(i, 0, item);\n                    injected = true;\n                    break;\n                }\n            }\n            if (!injected) {\n                arr.push(item);\n            }\n        }\n        else {\n            arr.push(item);\n        }\n    };\n    ObjectUtils.prototype.findIndexInList = function (item, list) {\n        var index = -1;\n        if (list) {\n            for (var i = 0; i < list.length; i++) {\n                if (list[i] == item) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    ObjectUtils = __decorate([\n        core_1.Injectable()\n    ], ObjectUtils);\n    return ObjectUtils;\n}());\nexports.ObjectUtils = ObjectUtils;\n//# sourceMappingURL=objectutils.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/utils/objectutils.js\n// module id = 40\n// module chunks = 0","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class TypeService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getTypes() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"type\",\n            action : \"list\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getTypeStatus(){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"type\",\n            action : \"statuslist\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getType(type_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"type\",\n            action : \"listtype\",\n            type_id : type_id,\n            token : token\n        }\n        return this.http.post(params).map(res => {\n           return res;\n        });\n    }\n\n       putType(type){\n        var token = localStorage.getItem('token');\n        type.module = \"type\";\n        type.action = \"insert\";\n        type.token = token;\n        return this.http.post(type).map(res => {\n            return res;\n        });\n    }\n\n       updateType(type){\n        var token = localStorage.getItem('token');\n        type.module = \"type\";\n        type.action = \"update\";\n        type.token = token;\n        //console.log(type);\n        return this.http.post(type).map(res => {\n            return res;\n        });\n    }\n\n    deleteType(type_id){\n       var token = localStorage.getItem('token');\n        var params = {\n            module : \"type\",\n            action : \"delete\",\n            type_id : type_id,\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        }); \n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/type.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class LoginService {\n\n    _user = {user_name: \"Undefined\", user_lastname: \"Undefined\", urlimg: \"\"};\n\n    constructor(httpService: HttpService) {\n        this._http = httpService;\n    }\n\n    getCookie(){\n        var params = {\n            module : \"login\",\n            action : \"cookie\"\n        };\n        return this._http.post(params).map(res => {\n            if (res.data) {\n                return res.data;\n            }\n            return res;\n        });\n    }\n\n    siteKey(){\n        var params = {\n            module : \"login\",\n            action : \"sitekey\"\n        };\n        return this._http.post(params).map(res =>{\n            return res;\n        });\n    }\n    captchaforever(){\n        var params = {\n            module : \"login\",\n            action : \"captchaforever\"\n        };\n        return this._http.post(params).map(res =>{\n            return res;\n        });\n    }\n\n    getLoginBack(){\n        var params = {\n            module : \"login\",\n            action : \"loginback\"\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    \n    getLoginBackW(){\n        var params = {\n            module : \"login\",\n            action : \"loginbackw\"\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    isLogged() {\n        var token = localStorage.getItem('token'); \n        var params = {\n            module : \"state\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        }); \n    }\n\n    logOut() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"login\",\n            action : \"logout\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            localStorage.removeItem('token');\n            return res;\n        });              \n    }\n\n    getAuth (log) {\n        var params = {\n            module : \"login\",\n            action : \"login\",\n            response : log.response, //recaptcha//\n            captchaforever: log.captchaforever,\n            token : log.token,\n            usuario : this.encryp(log.user, log.key),\n            key : this.encryp(log.pwd, log.key)\n        };\n        return this._http.post(params).map(res => {\n            this._user = res.data;\n            return res;\n        });\n    }\n\n\tencryp(text, pubkey){\n\t\tif(text){\n\t\t\tvar encrypt = new JSEncrypt();\n\t\t\tencrypt.setPublicKey(pubkey);\n\t\t\tvar encripcion = encrypt.encrypt(text);\n\t\t\treturn encripcion;\t\n\t\t}\n\t\treturn false;\n    }\n    \n    validateEmail(email){\n        var token = localStorage.getItem('token');\n        var params = {\n            token : token,\n            module : \"login\",\n            action : \"validateemail\",\n            email : email\n        };\n        return this._http.post(params).map(res =>{\n            return res;\n        });\n    }\n\n    resetPassword(code,email){\n        var token = localStorage.getItem('token');\n        var params = {\n            token : token,\n            module : \"login\",\n            action : \"pwreset\",\n            code : code,\n            email : email\n        };\n        return this._http.post(params).map(res =>{\n            return res;\n        });\n    }\n\n    setPassword(authcode,pw){\n        var token = localStorage.getItem('token');\n        var params = {\n            token : token,\n            module : \"login\",\n            action : \"setnewpw\",\n            pw : pw,\n            authcode : authcode\n        };\n        return this._http.post(params).map(res =>{\n            return res;\n        });\n    }\n\n    getSettings(){\n        var token = localStorage.getItem('token');\n        var params = {\n            token : token,\n            module : \"generalsettings\",\n            action : \"getsettings\"\n        };\n        return this._http.post(params).map(res =>{\n            return res;\n        });\n    }\n\n\n    saveGeneralSetting(data){\n        var token = localStorage.getItem('token');\n        data.module = 'generalsettings';\n        data.action = 'savechanges';\n        data.token = token;\n        return this._http.postWithFile(data).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/login.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class DashboardService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getTaskboard(spri_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"dashboard\",\n            action : \"tasks\",\n            spri_id: spri_id,\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getBurndown(sprint_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"dashboard\",\n            action : \"burndown\",\n            sprint_id : sprint_id,\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getStatustask() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"dashboard\",\n            action : \"statustask\",\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getStatusTasksUser(){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"dashboard\",\n            action : \"statustaskuser\",\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        }); \n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/dashboard.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class DailyService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getDailyList(filter) {\n        var token = localStorage.getItem('token');\n        filter.module = \"daily\";\n        filter.action = \"list\";\n        filter.token = token;\n        return this.http.post(filter).map(res => {\n            return res;\n        });\n    }\n    getDevtasks() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"daily\",\n            action : \"devtasks\",\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getDay4Usr(idusr, day) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"daily\",\n            action : \"day4usr\",\n            user_id : idusr,\n            day : day,\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getPtsToday(){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"daily\",\n            action : \"ptstoday\",\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getExtraList() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"daily\",\n            action : \"extralist\",\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getCategories() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"daily\",\n            action : \"categories\",\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    putDaily(daily){\n        var token = localStorage.getItem('token');\n        daily.module = \"daily\";\n        daily.action = \"insert\";\n        daily.token = token;\n        return this.http.post(daily).map(res => {\n            return res;\n        });\n    }\n\n    deleteDay(dail_id){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"daily\",\n            action : \"delete\",\n            dail_id : dail_id,\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        }); \n    }\n\n    getDaily(dail_id){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"daily\",\n            action : \"daily\",\n            dail_id: dail_id,\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        }); \n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/daily.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class RolesService {\n    constructor(httpService: HttpService) {\n        this._http = httpService;\n    }\n\n    getModules(role) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action : \"getmodules\",\n            roleid : role,\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getSubmodules(moduleId) { \n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action : \"getsubmodules\",\n            idmodule : moduleId,\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getRoles() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action: \"getroles\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getPermits(){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action : \"getpermits\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    //=============funcion original==================\n    // savePermits(permits,submodule,role){\n    //     var token = localStorage.getItem('token');\n    //     var params = {\n    //         module : \"roles\",\n    //         action : \"savepermits\",\n    //         token : token,\n    //         permits : permits,\n    //         submodule : submodule,\n    //         role : role\n    //     }\n    //     return this._http.post(params).map(res => {\n    //         return res;\n    //     });\n    // }\n\n    savePermits(permit, role){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action : \"savepermit\",\n            token : token,\n            permit : permit,\n            role: role\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n        \n    }\n\n    saveRole(role,modules){\n        var token = localStorage.getItem('token');\n        var params ={\n            module : \"roles\",\n            action : \"saverole\",\n            token : token,\n            role_NameNew : role.role_NameNew,\n            role_description : role.role_description,\n            modules : modules,\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getRole(role_id){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action : \"getrole\",\n            token : token,\n            role_id : role_id\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getChildModules(parent_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action : \"getchildmodules\",\n            parent_id : parent_id,\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getParentModules() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action: \"getparentmodules\",\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    deleteRole(role_id){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"roles\",\n            action : \"delete\",\n            token : token,\n            role_id : role_id\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    updateRole(role_id,role,modules){\n        var token = localStorage.getItem('token');\n        var params ={\n            module : \"roles\",\n            action : \"updaterole\",\n            token : token,\n            role_id : role_id,\n            role_NameNew : role.role_NameNew,\n            role_description : role.role_description,\n            modules : modules\n        };\n        return this._http.post(params).map(res => {\n            \n            return res;\n        });\n    }\n\n    getPermModules(modu_id){\n        var token = localStorage.getItem('token');\n        var params ={\n            module : \"roles\",\n            action : \"permrols\",\n            modu_id : modu_id,\n            token : token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/roles.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class CategoriesService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getCategories() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"list\",\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getCategoryList(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"categories\";\n        filter.action = \"listx\";\n        filter.token = token;\n        return this.http.post(filter).map(res => {\n            return res;\n        });\n    }\n\n    getStates() {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"categories\",\n            action: \"states\",\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getCategory(cateid) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"category\",\n            cate_id: cateid,\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getActiveCategories() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"getactcategories\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    deleteCategory(cate_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"delete\",\n            token: token,\n            cate_id: cate_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    innactiveCategory(cate_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"innactive\",\n            token: token,\n            cate_id: cate_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    reactiveCategory(cate_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"reactive\",\n            token: token,\n            cate_id: cate_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getCategoryType(type_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"typescat\",\n            token: token,\n            type_id: type_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getIdStatus(clas, code) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"getstatus\",\n            clas: clas,\n            code: code,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    setStatusCategory(cate_id, status) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"setstatus\",\n            cate_id: cate_id,\n            status: status,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getCategoryStatus() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"statuslist\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getType() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"typelist\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getApproval() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"apprlist\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    putCategory(cat) {\n        var token = localStorage.getItem('token');\n        cat.module = \"categories\";\n        cat.action = \"insert\";\n        cat.token = token;\n        return this.http.post(cat).map(res => {\n            return res;\n        });\n    }\n\n    updateCategory(cat) {\n        var token = localStorage.getItem('token');\n        cat.module = \"categories\";\n        cat.action = \"update\";\n        cat.token = token;\n        return this.http.post(cat).map(res => {\n            return res;\n        });\n    }\n\n    getMyApprovals() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"getapprovals\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getUsersCategory(cate_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"users\",\n            token: token,\n            cate_id: cate_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getFieldsCategory(cate_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"fields\",\n            token: token,\n            cate_id: cate_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getCategorie(cate_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"categories\",\n            action: \"getcategorie\",\n            token: token,\n            cate_id: cate_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/categories.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class ExternalRequestService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n    getProducts(database) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"products\",\n          dbname : database, \n          token: token\n        };\n        return this.http.post(params).map(res => {\n           return res;\n        });\n    }\n    getGroups(database) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"externalrequests\",\n            action : \"groups\",\n            dbname : database, \n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getActiveCategories(database, type, idProduct) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"externalrequests\",\n            action : \"getactcategories\",\n            dbname : database, \n            type: type,\n            id_product: idProduct,\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getMyRequests(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"externalrequests\"; \n        filter.action = \"requestsgroup\"; \n        filter.token = token; \n        return this.http.post(filter).map(res => {\n            return res;\n        });\n    }\n    getmyProjects() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"externalrequests\",\n            action: \"myprojects\",\n            token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    putNote(note){\n        var token = localStorage.getItem('token');\n        note.module = \"externalrequests\";\n        note.action = \"putnote\";\n        note.token = token;\n        if (!note.attachments) {\n            note.attachments = [];\n        }\n        return this.http.postWithFile(note, note.attachments).map(res => {\n             return res;\n        });\n    }\n    getTask(task_id, database) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"task\",\n          task_id: task_id,\n          dbname : database, \n          token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    getProjectInfo(pjid, dbname ) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"externalrequests\",\n            action: \"projectinfo\",\n            proj_id: pjid,\n            dbname: dbname,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    getComments(task_id, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"comments\",\n          task_id: task_id,\n          dbname: dbname,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getAttachments(task_id, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"attachments\",\n          task_id: task_id,\n          dbname: dbname,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getAdjusted(taskid, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"adjusted\",\n          token: token,\n          taskid: taskid,\n          dbname: dbname\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getTimelinetk(task_id, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"timelinetk\",\n          task_id: task_id,\n          dbname: dbname,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    getTaskFields(task_id, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"getfields\",\n          task_id: task_id,\n          dbname: dbname,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    getRejected(tkid, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"rejected\",\n          tkid: tkid,\n          dbname: dbname,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    getSprint(id_sprint, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"sprintn\",\n          token: token,\n          dbname: dbname,\n          id_sprint: id_sprint\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    putTask(task) {\n        var token = localStorage.getItem(\"token\");\n        task.module = \"externalrequests\";\n        task.action = \"puttask\";\n        task.token = token;\n        return this.http.postWithFile(task, task.attachments).map(res => {\n            return res;\n        });\n    }\n    getFieldsCategory(cate_id, database) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"externalrequests\",\n            action : \"fields\",\n            dbname : database, \n            token : token,\n            cate_id : cate_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    deleteAttachmentTask(task_id, att_id, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"deleteattachments\",\n          task_id: task_id,\n          att_id: att_id,\n          dbname: dbname,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    putTaskFields(fld, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"insertfields\",\n          token: token,\n          dbname: dbname,\n          fields: '{\"fields\": ' + JSON.stringify(fld) + '}'\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    setStatusTask(database, task_id, status) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"setstatus\",\n          task_id: task_id,\n          para_status: status,\n          dbname: database,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    impTask(database, task_id, imtk_description) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"improvement\",\n          task_id: task_id,\n          imtk_description: imtk_description,\n          dbname: database,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n\n    getExternalList(){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"externalrequests\",\n            action : \"externallist\",\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getTagsByTask(task_id, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"externalrequests\",\n            action: \"gettagsbytask\",\n            task_id: task_id,\n            dbname: dbname,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    rejectTask(task_id, retk_description, dbname) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n        module: \"externalrequests\",\n        action: \"reject\",\n        task_id: task_id,\n        dbname: dbname,\n        retk_description: retk_description,\n        token: token\n        };\n        return this.http.post(params).map(res => {\n        return res;\n        });\n    }\n    getTaskList(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"externalrequests\"; \n        filter.action = \"listx\"; \n        filter.token = token; \n        return this.http.post(filter).map(res => {\n        return res;\n        });\n    }\n    getCategories(client) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"externalrequests\",\n            action : \"categories\",\n            client: client,\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    reopenTask(tkid, dbname, status) {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"externalrequests\",\n          action: \"reopen\",\n          task_id: tkid,\n          dbname: dbname,\n          status: status,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n             return res;\n        });\n    }\n    getExcel(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"externalrequests\";\n        filter.action = \"excel\";\n        filter.token = token;\n        return this.http.post(filter).map(res => {\n          return res;\n        });\n      }\n\n    getExcelExternalTask(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"externalrequests\";\n        filter.action = \"exceltask\";\n        filter.token = token;\n        return this.http.post(filter).map(res => {\n          return res;\n        });\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/externalrequest.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class EventsService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getMyMeetings() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"mymeetings\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getMyMeetingsList(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"events\";\n        filter.action = \"mymeetingsx\";\n        filter.token = token;\n        return this.http.post(filter).map(res => {\n            return res;\n        });\n    }\n\n    putMeeting(mt) {\n        var token = localStorage.getItem('token');\n        mt.module = \"events\";\n        mt.action = \"insert\";\n        mt.token = token;\n        return this.http.post(mt).map(res => {\n            return res;\n        });\n    }\n\n    getMeeting(meet_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"get\",\n            token: token,\n            meet_id: meet_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    deleteMeeting(meet_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"delete\",\n            token: token,\n            meet_id: meet_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    setStatusMeeting(meet_id, status) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"setstatus\",\n            meet_id: meet_id,\n            para_status: status,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    editMeeting(mt) {\n        var token = localStorage.getItem('token');\n        mt.module = \"events\";\n        mt.action = \"edit\";\n        mt.token = token;\n        return this.http.post(mt).map(result => {\n            return result;\n        });\n    }\n\n    getMeetingStatus() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"statuslist\",\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMeetingPlaces() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"placeslist\",\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getUsersMeeting(meet_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"users\",\n            token: token,\n            meet_id: meet_id\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    addAsociateMail(id_mail, meet_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"asociatemail\",\n            meet_id: meet_id,\n            id_mail: id_mail,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    addAsociateTask(task_id, meet_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"asociatetask\",\n            task_id: task_id,\n            meet_id: meet_id,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getIdStatus(clas, code) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"events\",\n            action: \"getstatus\",\n            clas: clas,\n            code: code,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/events.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class UnitsService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getUnits() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"units\",\n            action : \"units\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getList(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"units\";\n        filter.action = \"list\";\n        filter.token = token;\n        return this.http.post(filter).map(res => {\n            return res;\n        });\n    }\n\n    getUnit(unit_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"units\",\n            action: \"unit\",\n            token: token,\n            unit_id: unit_id\n        }\n        return this.http.post(params).map(res => {\n           return res;\n        });\n    }\n\n    putUnit(unit) {\n        var token = localStorage.getItem('token');\n        unit.module = \"units\";\n        unit.action = \"addUnits\";\n        unit.token = token;\n        return this.http.post(unit).map(res => {\n            return res;\n        });\n    }\n\n    updateUnit(unit) {\n        var token = localStorage.getItem('token');\n        unit.module = \"units\";\n        unit.action = \"updateUnits\";\n        unit.token = token;\n        return this.http.post(unit).map(res => {\n            return res;\n        });\n    }\n\n    deleteUnit(unit_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"units\",\n            action: \"deleteUnits\",\n            token: token,\n            unit_id: unit_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/units.service.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { TaskService } from \"../../services/task.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { MailService } from \"../../services/mail.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { ProjectService } from \"../../services/project.service\";\n\nimport template from \"./task.template.html\";\n\n@Component({\n  selector: \"task\",\n  template: template\n})\nexport class TaskComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    toastr: ToastrService,\n    sanitizer: DomSanitizer,\n    arouter: ActivatedRoute,\n    taskService: TaskService,\n    noteService: NoteService,\n    userService: UsersService,\n    productService: ProductService,\n    ProjectService: ProjectService,\n    sprintService: SprintService,\n    mailService: MailService\n  ) {\n    this._title = title;\n    this._route = route;\n    this._tasks = taskService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._sprint = sprintService;\n    this._mail = mailService;\n    this.task = { attachments: [] };\n    this.subtask = { attachments: [] };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.isrequest = [\"\"];\n    this.searchMail = \"\";\n    this.listmails = [];\n    this.listmailsa = [];\n    this.crmusers = [];\n    this.contacts = [];\n    this.modalnotereply = 0;\n    this.tagMenuDupliTk = 1;\n    this.tagMenu = 1;\n    this.myProjects = [];\n    this.mysprints = [];\n    this.notereply = [];\n    this.category = {};\n    this.myTask = { usersShared: [], project: {}, criteriaTask: [], attachments: [] };\n    this.isLoading = false;\n\n  }\n\n  ngOnInit() {\n    this.reload();\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this.userslbl = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._user.getEmailList().subscribe(data => {\n      this.listmails = data.data;\n      this.listmailsa = data.data;\n    });\n\n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n    });\n\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprints = [];\n      this.mysprints.push({\n        label: \"Backlog\",\n        value: 0\n      });\n      for (let c of res.data) {\n        this.mysprints.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n      }\n    });\n\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.usersShareWith = data.data;\n      this.usersShareWith_a = data.data;\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n\n  }\n  getAttachments(task_id) {\n    this._tasks.getAttachments(task_id).subscribe(res => {\n      this.task.attachments = res.data;\n    });\n  }\n\n  reload() {\n    this._aroute.params.forEach(params => {\n      this._title.setTitle(\n        \".:: \" + localStorage.getItem(\"title\") + \" : Task #\" + params.idtask + \" ::.\"\n      );\n      this._tasks.getTask(params.idtask).subscribe(res => {\n        this.task = res.data;\n        if (this.task.length == 0) {\n          this._route.navigate(['/403']);\n        }\n      });\n      this.getTimeline(params.idtask);\n      this.getDailyTimeline(params.idtask);\n      this.getAttachments(params.idtask);\n    });\n  }\n\n  getTimeline(task_id) {\n    this._tasks.getCommentsUsers(task_id).subscribe(res => {\n      this.detail = res.data;\n      for (let i = 0; i < this.detail.length; i++) {\n        this.detail[i].active = false;\n      }\n    });\n  }\n\n  getDailyTimeline(task_id) {\n    this._tasks.getDailyTimeline(task_id).subscribe(res => {\n      this.detail_daily = res.data;\n    });\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n\n  enableBtn() {\n    if (this.displaybtn) {\n      $(\".task\").animate({\n        right: \"20px\"\n      });\n      $(\".comment\").animate({\n        right: \"20px\"\n      });\n      $(\".atemail\").animate({\n        right: \"20px\"\n      });\n      $(\".sendemail\").animate({\n        right: \"20px\"\n      });\n      this.displaybtn = false;\n    } else {\n      $(\".task\").animate({\n        right: \"65px\"\n      });\n      $(\".comment\").animate({\n        right: \"110px\"\n      });\n      $(\".atemail\").animate({\n        right: \"155px\"\n      });\n      $(\".sendemail\").animate({\n        right: \"200px\"\n      });\n      this.displaybtn = true;\n    }\n  }\n\n  closedt() {\n    $(\"#collapseNote\").css({ display: \"none\" });\n    this.note = { attachments: [] };\n    $(\"#collapseTask\").css({ display: \"none\" });\n    this.subtask = { attachments: [] };\n    $(\"#collapseMail\").css({ display: \"none\" });\n    this.mail = { attachments: [] };\n  }\n\n  addTask() {\n    if (this.displaybtn) {\n      if (this.crmusers.length == 0) {\n        this._user.getCRMUsers().subscribe(data => {\n          this.crmusers = data.data;\n        });\n      }\n      $(\"#collapseNote\").css({ display: \"none\" });\n      if ($(\"#collapseTask\").css(\"display\") == \"none\") {\n        $(\"#collapseTask\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseTask\").offset().top\n        },\n        1000\n      );\n      this.subtask.task_description = this.sanitizeHtml(\n        this.task.task_description\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveNewTask() {\n    if (\n      (this.myTask.task_description2 != \"\" ||\n        this.myTask.task_description2 != null) &&\n      this.myTask.task_description == undefined\n    ) {\n      this.myTask.task_description = this.myTask.task_description2;\n    }\n    this.myTask.task_description = this.myTask.task_description\n      .split(\"\\t\")\n      .join(\"\");\n    this.myTask.task_description = this.myTask.task_description\n      .split(\"\\n\")\n      .join(\"\");\n    this.myTask.task_description = this.myTask.task_description\n      .split(\"\\r\")\n      .join(\"\");\n    this.myTask.task_delivery = new Date(this.myTask.task_delivery);\n    this.myTask.task_delivery = this.myTask.task_delivery.getFullYear() + \"-\" + (this.myTask.task_delivery.getMonth() + 1) + \"-\" + this.myTask.task_delivery.getDate();\n\n    //reasignacion de la variable con un array de ids de usuarios\n    let users_share = [];\n\n    for (let user in this.myTask.usersShared) {\n      users_share.push(this.myTask.usersShared[user].user_id);\n    }\n\n    // Solve Bug Autocomplete users.\n    let task = Object.assign({}, this.myTask);\n    task.usersShared = users_share;\n\n    let criteria_task = [];\n    let fields_empty = false;\n\n    for (let i in this.myTask.criteriaTask) {\n      if (this.myTask.criteriaTask[i].tkcr_description && this.myTask.criteriaTask[i].tkcr_description.trim() != \"\") {\n        criteria_task.push(this.myTask.criteriaTask[i].tkcr_num + '|*|' + this.myTask.criteriaTask[i].tkcr_description);\n      } else {\n        fields_empty = true;\n      }\n    }\n\n    if (fields_empty == false) {\n      task.criteriaTask = criteria_task;\n      task.isrequest = \"false\";\n\n      this.isLoading = true;\n\n      this._tasks.putTask(task).subscribe(data => {\n\n        this.isLoading = false;\n        if (data.data === \"\" || data.data === \"0\") {\n          this.toastr.warning(data.message, \"Bad news! Error saving task\");\n        } else {\n          this.toastr.success(data.message, \"Task saved successfully\");\n        }\n        $(\"#mdEditTask\").modal(\"hide\");\n        this.reload();\n        this.myTask = { attachments: [] };\n        this.myTask.task_description = \"\";\n      });\n    } else {\n      this.toastr.warning(\"Empty form fields\");\n\n    }\n  }\n\n  onChangeTask(event) {\n    var files = event.srcElement.files;\n    this.subtask.attachments.push(files[0]);\n  }\n\n  addNote() {\n    if (this.displaybtn) {\n      $(\"#collapseTask\").css({ display: \"none\" });\n      if ($(\"#collapseNote\").css(\"display\") == \"none\") {\n        $(\"#collapseNote\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseNote\").offset().top\n        },\n        1000\n      );\n      this.enableBtn();\n    }\n  }\n  saveNote() {\n    if (this.note.note_text) {\n      this.note.task_id = this.task.task_id;\n      this._notes.putNote(this.note).subscribe(data => {\n        if (data.data != null) {\n          this.toastr.success(data.message, \"Note added Successfully\");\n          this.note = { attachments: [] };\n          this.getTimeline(this.task.task_id);\n        } else {\n          this.toastr.warning(\"\", data.message);\n          $('.imput-comments').val('');\n        }\n      });\n    }\n  }\n\n  saveNoteReply(id_note, detail) {\n    if ((this.notereply.note_data == \"\" || !this.notereply.note_data) || (this.notereply.note_data && !detail.active)) {\n      this.notereply = [];\n      \n    } else {\n      if (this.notereply.note_data) {\n        this.note.note_text = this.notereply.note_data;\n        this.note.task_id = this.task.task_id;\n        this.note.note_parent = id_note;\n        this._notes.putNote(this.note).subscribe(data => {\n          if (data.data != null) {\n            this.toastr.success(data.message, \"Note added Successfully\");\n            this.note = { attachments: [] };\n            this.getTimeline(this.task.task_id);\n          } else {\n            this.toastr.warning(\"\", data.message);\n            $('.imput-comments').val('');\n          }\n\n        });\n        this.notereply = [];\n      }\n    }\n  }\n\n  showNoteReply(item) {\n    this.notereply = [];\n    for (let i = 0; i < this.detail.length; i++) {\n      if(i == item){\n        this.detail[i].active = true;\n      }else{\n        this.detail[i].active = false;\n      }\n    }\n  }\n  createNoteReply(id_note) {\n    this.notereply = [];\n    this.notereply.push({\n      note_data: \"\"\n    });\n    // this.modalnotereply = 1;\n  }\n\n  onChangeNote(event) {\n    var files = event.srcElement.files;\n    this.note.attachments.push(files[0]);\n  }\n\n  showAsociateMail() {\n    this.closedt();\n    $(\"#mdAsoMail\").modal(\"show\");\n  }\n\n  srchMail() {\n    this.mails = [];\n    this.listmails = [];\n    this._mail.searchMail(this.searchMail).subscribe(data => {\n      this.mails = data.data;\n    });\n  }\n\n  addMail() {\n    if (!this.loadmail) {\n      this.loadmail = true;\n      this._user.getEmailList().subscribe(data => {\n        // emails\n      });\n      /*\n            this._template.getTemplates().subscribe(data => {\n                for (var i in data.data){\n                    if (data.data[i].id_catmailtemp == \"2\") {\n                        this.signatures.push(data.data[i]);\n                    } else {\n                        this.templates.push(data.data[i]);\n                    }\n                }\n            });*/\n    }\n    if (this.displaybtn) {\n      $(\"#collapseMail\").css({ display: \"none\" });\n      if ($(\"#collapseMail\").css(\"display\") == \"none\") {\n        $(\"#collapseMail\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseMail\").offset().top\n        },\n        1000\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveMail() {\n    let mymails = [];\n    for (let x in this.mail.emails) {\n      mymails.push(this.mail.emails[x].correo);\n    }\n    this.mail.emails = mymails;\n    this.mail.content = this.mail.content.split(\"\\n\").join(\"\");\n    this.mail.content = this.mail.content.split(\"\\r\").join(\"\");\n    this.mail.task_id = this.task.task_id;\n    this._mail.sendMessage(this.mail).subscribe(data => {\n      this.toastr.success(data.message, \"Mail sent Successfully\");\n      this.getTimeline(this.task.task_id);\n    });\n    this.mail = { attachments: [] };\n    this.closedt();\n  }\n\n  showEditModal() {\n    this.myTask = { project: {}, attachments: [] };\n    this._tasks.getTask(this.task.task_id).subscribe(res => {\n      if (res.data.task_description) {\n        res.data.task_description = this.escapeHtml(res.data.task_description);\n      }\n      this.myTask = res.data;\n      this._tasks.getAttachments(this.task.task_id).subscribe(res => {\n        this.myTask.attachments = res.data;\n        this._tasks.getTaskFields(this.task.task_id).subscribe(res => {\n          this.myTask.form = res.data;\n        });\n      });\n      $(\"#mdEditTask\").modal(\"show\");\n      this.activeTabDescription_editTask();\n    });\n  }\n\n  openTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to open the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 35).subscribe(data => {\n            this.reload();\n            this.toastr.success(\"Task opened successfully\");\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 35)\n                .subscribe(data => { });\n            }\n            this.seltasks = [];\n            this.reload();\n            this.toastr.success(\"Tasks opened successfully\");\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  closeTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to close the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 42).subscribe(data => {\n            this.reload();\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Task closed successfully\");\n            } else {\n              this.toastr.warning(data.message, \"There was an error\");\n            }\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 42)\n                .subscribe(data => {\n                  if (data.data == \"OK\") {\n                    this.toastr.success(\"Tasks closed successfully\");\n                  } else {\n                    this.toastr.warning(data.message, \"There was an error\");\n                  }\n                });\n            }\n            this.seltasks = [];\n            this.reload();\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  deleteTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to delete the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 43).subscribe(data => {\n            this.reload();\n            this.toastr.success(\"Task deleted successfully\");\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 43)\n                .subscribe(data => { });\n            }\n            this.seltasks = [];\n            this.toastr.success(\"Tasks deleted successfully\");\n            this.reload();\n          }\n        }\n      },\n      reject: () => { }\n    });\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  decode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n    var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n    if (base64test.exec(input)) {\n      return false;\n    }\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n    do {\n      enc1 = keyStr.indexOf(input.charAt(i++));\n      enc2 = keyStr.indexOf(input.charAt(i++));\n      enc3 = keyStr.indexOf(input.charAt(i++));\n      enc4 = keyStr.indexOf(input.charAt(i++));\n\n      chr1 = (enc1 << 2) | (enc2 >> 4);\n      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n      chr3 = ((enc3 & 3) << 6) | enc4;\n\n      output = output + String.fromCharCode(chr1);\n\n      if (enc3 != 64) {\n        output = output + String.fromCharCode(chr2);\n      }\n      if (enc4 != 64) {\n        output = output + String.fromCharCode(chr3);\n      }\n\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n\n    return unescape(output);\n  }\n\n  encode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    input = escape(input);\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    do {\n      chr1 = input.charCodeAt(i++);\n      chr2 = input.charCodeAt(i++);\n      chr3 = input.charCodeAt(i++);\n      enc1 = chr1 >> 2;\n      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n      enc4 = chr3 & 63;\n      if (isNaN(chr2)) {\n        enc3 = enc4 = 64;\n      } else if (isNaN(chr3)) {\n        enc4 = 64;\n      }\n      output =\n        output +\n        keyStr.charAt(enc1) +\n        keyStr.charAt(enc2) +\n        keyStr.charAt(enc3) +\n        keyStr.charAt(enc4);\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n    return output;\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n\n  showDuplicateTaskModal(idtk) {\n    this.myTask = { usersShared: [], project: {}, attachments: [] };\n    this._tasks.getTask(idtk).subscribe(res => {\n      this.myTask.criteriaTask = res.data.criteriaTask;\n      this._tasks.getTaskFields(idtk).subscribe(res => {\n        this.myTask.form = res.data;\n      });\n      this.myTask = res.data;\n      this.myTask.task_description_d = this.myTask.task_description;\n    });\n    $(\"#mdDuplicateTask\").modal(\"show\");\n    this.activeTabDescription_duplicateTask();\n  }\n\n  setPageDupliTk(opt) {\n    if (opt == 1) {\n      this.tagMenuDupliTk = 1;\n    }\n    if (opt == 2) {\n      this.tagMenuDupliTk = 2;\n    }\n    if (opt == 3) {\n      this.tagMenuDupliTk = 3;\n    }\n    if (opt == 4) {\n      this.tagMenuDupliTk = 4;\n    }\n  }\n\n  saveDuplicateTask() {\n\n    let task = {};\n    this.myTask.task_description_d = this.myTask.task_description_d.split(\"\\t\").join(\"\");\n    this.myTask.task_description_d = this.myTask.task_description_d.split(\"\\n\").join(\"\");\n    this.myTask.task_description_d = this.myTask.task_description_d.split(\"\\r\").join(\"\");\n    this.myTask.task_delivery = new Date(this.myTask.task_delivery);\n    this.myTask.task_delivery = this.myTask.task_delivery.getFullYear() + \"-\" + (this.myTask.task_delivery.getMonth() + 1) + \"-\" + this.myTask.task_delivery.getDate();\n\n    task.task_subject = this.myTask.task_subject;\n    task.prod_id = this.myTask.prod_id;\n    task.user_asigned = this.myTask.user_asigned;\n    task.proj_id = this.myTask.proj_id;\n    task.spri_id = this.myTask.spri_id;\n    task.task_delivery = this.myTask.task_delivery;\n    task.task_points = this.myTask.task_points;\n    task.task_description = this.myTask.task_description_d;\n    task.attachments = this.myTask.attachments;\n\n    //reasignacion de la variable con un array de ids de usuarios\n    let users_share = [];\n\n    for (let user in this.myTask.usersShared) {\n      users_share.push(this.myTask.usersShared[user].user_id);\n    }\n\n    task.usersShared = users_share;\n\n    let criteria_task = [];\n    let campos = [];\n    let fields_empty = false;\n\n    for (let i in this.myTask.criteriaTask) {\n      if (this.myTask.criteriaTask[i].tkcr_description && this.myTask.criteriaTask[i].tkcr_description.trim() != \"\") {\n        criteria_task.push(this.myTask.criteriaTask[i].tkcr_num + '|*|' + this.myTask.criteriaTask[i].tkcr_description);\n      } else {\n        fields_empty = true;\n      }\n    }\n\n    for (let i in this.myTask.form) {\n      campos.push(this.myTask.form[i].form_id + '|*|' + this.myTask.form[i].form_data);\n    }\n\n    if (fields_empty == false) {\n      task.criteriaTask = criteria_task;\n      task.form = campos;\n      this.isLoading = true;\n      this._tasks.duplicateTask(task).subscribe(res => {\n        this.isLoading = false;\n        if (res.data && res.data != null) {\n          this.toastr.success(res.message);\n        } else {\n          this.toastr.warning(res.message, \"Error\");\n        }\n        $(\"#mdDuplicateTask\").modal(\"hide\");\n        this.myTask = { attachments: [] };\n        this.myTask.task_description = \"\";\n      });\n\n    } else {\n      this.toastr.warning(\"Empty form fields\");\n\n    }\n  }\n\n  validateDuplicateTask() {\n    return (\n      !this.myTask.task_subject ||\n      this.myTask.task_subject.trim() == \"\" ||\n      !this.myTask.task_description ||\n      this.myTask.task_description.trim() == \"\" ||\n      !this.myTask.prod_id ||\n      this.myTask.prod_id.trim() == \"\" ||\n      !this.myTask.task_delivery ||\n      this.myTask.task_delivery == \"\" ||\n      this.myTask.task_delivery == \"undefined\" ||\n      !this.myTask.task_points ||\n      this.myTask.task_points == \"\" ||\n      this.myTask.task_points == \"undefined\"\n    );\n  }\n\n  deleteFieldForm(i) {\n    this.myTask.criteriaTask.splice(i, 1);\n\n    let j = 1;\n\n    for (let i = 0; i < this.myTask.criteriaTask.length; i++) {\n      this.myTask.criteriaTask[i].tkcr_num = j;\n      j++;\n    }\n  }\n\n  addFieldForm() {\n    let j = 1;\n    if (this.myTask.criteriaTask.length == 4) {\n      this.toastr.warning(\"You have reached the maximum number of criteria\");\n    } else {\n      let valor = this.myTask.criteriaTask.length + j;\n      this.myTask.criteriaTask.push({ tkcr_num: valor, tkcr_description: \"\" });\n      j++;\n    }\n  }\n\n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  onChangeDupliTk(event) {\n    var files = event.srcElement.files;\n    this.myTask.attachments.push(files[0]);\n  }\n\n  getFormTaskCriteria(task_id) {\n    this.myTask.criteriaTask = [];\n    this._tasks.getFormTaskCriteria(task_id).subscribe(res => {\n\n      this.myTask.criteriaTask = res.data.data;\n\n    });\n  }\n\n  filterMultipleShared(event) {\n    let query = event.query;\n    this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n  }\n\n  filterShared(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  setPage(opt) {\n    if (opt == 1) {\n      this.tagMenu = 1;\n    }\n    if (opt == 2) {\n      this.tagMenu = 2;\n    }\n    if (opt == 3) {\n      this.tagMenu = 3;\n    }\n    if (opt == 4) {\n      this.tagMenu = 4;\n    }\n  }\n\n  onChangeNewTask(event) {\n    var files = event.srcElement.files;\n    this.myTask.attachments.push(files[0]);\n  }\n\n  activeTabDescription_editTask() {\n    this.tagMenu = 1;\n    $('#li_form_editTask_task').removeClass('active');\n    $('#li_attachments_editTask_task').removeClass('active');\n    $('#li_criteria_editTask_task').removeClass('active');\n    $('#li_description_editTask_task').addClass('active');\n  }\n\n  activeTabDescription_duplicateTask() {\n    this.tagMenuDupliTk = 1;\n    $('#li_form_duplicateTask_task').removeClass('active');\n    $('#li_attachments_duplicateTask').removeClass('active');\n    $('#li_criteria_duplicateTask').removeClass('active');\n    $('#li_description_duplicateTask').addClass('active');\n  }\n\n  deleteAttachmentTask_editTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n\n    if (task.attachments.length == 0) {\n      this.activeTabDescription_editTask();\n    }\n\n  }\n\n\n  deleteAttachment_duplicateTask(att) {\n\n    var index = 0;\n    for (let i in this.myTask.attachments) {\n      if (att.name == this.myTask.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n    this.myTask.attachments.splice(index, 1);\n\n    if (this.myTask.attachments.length == 0) {\n      this.activeTabDescription_duplicateTask();\n    }\n\n  }\n\n  deleteFieldForm_editTask(i) {\n    this.myTask.criteriaTask.splice(i, 1);\n\n    let j = 1;\n\n    for (let i = 0; i < this.myTask.criteriaTask.length; i++) {\n      this.myTask.criteriaTask[i].tkcr_num = j;\n      j++;\n    }\n\n    if (this.myTask.criteriaTask.length == 0) {\n      this.activeTabDescription_editTask();\n    }\n\n  }\n\n  deleteFieldForm_duplicateTask(i) {\n    this.myTask.criteriaTask.splice(i, 1);\n\n    let j = 1;\n\n    for (let i = 0; i < this.myTask.criteriaTask.length; i++) {\n      this.myTask.criteriaTask[i].tkcr_num = j;\n      j++;\n    }\n\n    if (this.myTask.criteriaTask.length == 0) {\n      this.activeTabDescription_duplicateTask();\n    }\n\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/task/task.component.js","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar forms_1 = require(\"@angular/forms\");\nvar common_1 = require(\"@angular/common\");\nvar InputText = /** @class */ (function () {\n    function InputText(el, ngModel) {\n        this.el = el;\n        this.ngModel = ngModel;\n    }\n    InputText.prototype.ngDoCheck = function () {\n        this.updateFilledState();\n    };\n    //To trigger change detection to manage ui-state-filled for material labels when there is no value binding\n    InputText.prototype.onInput = function (e) {\n        this.updateFilledState();\n    };\n    InputText.prototype.updateFilledState = function () {\n        this.filled = (this.el.nativeElement.value && this.el.nativeElement.value.length) ||\n            (this.ngModel && this.ngModel.model);\n    };\n    __decorate([\n        core_1.HostListener('input', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputText.prototype, \"onInput\", null);\n    InputText = __decorate([\n        core_1.Directive({\n            selector: '[pInputText]',\n            host: {\n                '[class.ui-inputtext]': 'true',\n                '[class.ui-corner-all]': 'true',\n                '[class.ui-state-default]': 'true',\n                '[class.ui-widget]': 'true',\n                '[class.ui-state-filled]': 'filled'\n            }\n        }),\n        __param(1, core_1.Optional()),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, forms_1.NgModel])\n    ], InputText);\n    return InputText;\n}());\nexports.InputText = InputText;\nvar InputTextModule = /** @class */ (function () {\n    function InputTextModule() {\n    }\n    InputTextModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [InputText],\n            declarations: [InputText]\n        })\n    ], InputTextModule);\n    return InputTextModule;\n}());\nexports.InputTextModule = InputTextModule;\n//# sourceMappingURL=inputtext.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/inputtext/inputtext.js\n// module id = 65\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar forms_1 = require(\"@angular/forms\");\nvar dropdown_1 = require(\"../dropdown/dropdown\");\nvar shared_1 = require(\"../common/shared\");\nvar Paginator = /** @class */ (function () {\n    function Paginator() {\n        this.pageLinkSize = 5;\n        this.onPageChange = new core_1.EventEmitter();\n        this.alwaysShow = true;\n        this._totalRecords = 0;\n        this._first = 0;\n        this._rows = 0;\n    }\n    Paginator.prototype.ngOnInit = function () {\n        this.updatePaginatorState();\n    };\n    Object.defineProperty(Paginator.prototype, \"totalRecords\", {\n        get: function () {\n            return this._totalRecords;\n        },\n        set: function (val) {\n            this._totalRecords = val;\n            this.updatePageLinks();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Paginator.prototype, \"first\", {\n        get: function () {\n            return this._first;\n        },\n        set: function (val) {\n            this._first = val;\n            this.updatePageLinks();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Paginator.prototype, \"rows\", {\n        get: function () {\n            return this._rows;\n        },\n        set: function (val) {\n            this._rows = val;\n            this.updatePageLinks();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Paginator.prototype, \"rowsPerPageOptions\", {\n        get: function () {\n            return this._rowsPerPageOptions;\n        },\n        set: function (val) {\n            this._rowsPerPageOptions = val;\n            if (this._rowsPerPageOptions) {\n                this.rowsPerPageItems = [];\n                for (var _i = 0, _a = this._rowsPerPageOptions; _i < _a.length; _i++) {\n                    var opt = _a[_i];\n                    this.rowsPerPageItems.push({ label: String(opt), value: opt });\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Paginator.prototype.isFirstPage = function () {\n        return this.getPage() === 0;\n    };\n    Paginator.prototype.isLastPage = function () {\n        return this.getPage() === this.getPageCount() - 1;\n    };\n    Paginator.prototype.getPageCount = function () {\n        return Math.ceil(this.totalRecords / this.rows) || 1;\n    };\n    Paginator.prototype.calculatePageLinkBoundaries = function () {\n        var numberOfPages = this.getPageCount(), visiblePages = Math.min(this.pageLinkSize, numberOfPages);\n        //calculate range, keep current in middle if necessary\n        var start = Math.max(0, Math.ceil(this.getPage() - ((visiblePages) / 2))), end = Math.min(numberOfPages - 1, start + visiblePages - 1);\n        //check when approaching to last page\n        var delta = this.pageLinkSize - (end - start + 1);\n        start = Math.max(0, start - delta);\n        return [start, end];\n    };\n    Paginator.prototype.updatePageLinks = function () {\n        this.pageLinks = [];\n        var boundaries = this.calculatePageLinkBoundaries(), start = boundaries[0], end = boundaries[1];\n        for (var i = start; i <= end; i++) {\n            this.pageLinks.push(i + 1);\n        }\n    };\n    Paginator.prototype.changePage = function (p) {\n        var pc = this.getPageCount();\n        if (p >= 0 && p < pc) {\n            this.first = this.rows * p;\n            var state = {\n                page: p,\n                first: this.first,\n                rows: this.rows,\n                pageCount: pc\n            };\n            this.updatePageLinks();\n            this.onPageChange.emit(state);\n            this.updatePaginatorState();\n        }\n    };\n    Paginator.prototype.getPage = function () {\n        return Math.floor(this.first / this.rows);\n    };\n    Paginator.prototype.changePageToFirst = function (event) {\n        if (!this.isFirstPage()) {\n            this.changePage(0);\n        }\n        event.preventDefault();\n    };\n    Paginator.prototype.changePageToPrev = function (event) {\n        this.changePage(this.getPage() - 1);\n        event.preventDefault();\n    };\n    Paginator.prototype.changePageToNext = function (event) {\n        this.changePage(this.getPage() + 1);\n        event.preventDefault();\n    };\n    Paginator.prototype.changePageToLast = function (event) {\n        if (!this.isLastPage()) {\n            this.changePage(this.getPageCount() - 1);\n        }\n        event.preventDefault();\n    };\n    Paginator.prototype.onPageLinkClick = function (event, page) {\n        this.changePage(page);\n        event.preventDefault();\n    };\n    Paginator.prototype.onRppChange = function (event) {\n        this.changePage(this.getPage());\n    };\n    Paginator.prototype.updatePaginatorState = function () {\n        this.paginatorState = {\n            page: this.getPage(),\n            rows: this.rows,\n            first: this.first,\n            totalRecords: this.totalRecords\n        };\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Paginator.prototype, \"pageLinkSize\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Paginator.prototype, \"onPageChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Paginator.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Paginator.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Paginator.prototype, \"alwaysShow\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", core_1.TemplateRef)\n    ], Paginator.prototype, \"templateLeft\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", core_1.TemplateRef)\n    ], Paginator.prototype, \"templateRight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Paginator.prototype, \"dropdownAppendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], Paginator.prototype, \"totalRecords\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], Paginator.prototype, \"first\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], Paginator.prototype, \"rows\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Paginator.prototype, \"rowsPerPageOptions\", null);\n    Paginator = __decorate([\n        core_1.Component({\n            selector: 'p-paginator',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-paginator ui-widget ui-widget-header ui-unselectable-text ui-helper-clearfix'\\\"\\n            *ngIf=\\\"alwaysShow ? true : (pageLinks && pageLinks.length > 1)\\\">\\n            <div class=\\\"ui-paginator-left-content\\\" *ngIf=\\\"templateLeft\\\">\\n                <ng-container *ngTemplateOutlet=\\\"templateLeft; context: {$implicit: paginatorState}\\\"></ng-container>\\n            </div>\\n            <a href=\\\"#\\\" class=\\\"ui-paginator-first ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"changePageToFirst($event)\\\" [ngClass]=\\\"{'ui-state-disabled':isFirstPage()}\\\" [tabindex]=\\\"isFirstPage() ? -1 : null\\\">\\n                <span class=\\\"fa fa-step-backward\\\"></span>\\n            </a>\\n            <a href=\\\"#\\\" class=\\\"ui-paginator-prev ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"changePageToPrev($event)\\\" [ngClass]=\\\"{'ui-state-disabled':isFirstPage()}\\\" [tabindex]=\\\"isFirstPage() ? -1 : null\\\">\\n                <span class=\\\"fa fa-backward\\\"></span>\\n            </a>\\n            <span class=\\\"ui-paginator-pages\\\">\\n                <a href=\\\"#\\\" *ngFor=\\\"let pageLink of pageLinks\\\" class=\\\"ui-paginator-page ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"onPageLinkClick($event, pageLink - 1)\\\" [ngClass]=\\\"{'ui-state-active': (pageLink-1 == getPage())}\\\">{{pageLink}}</a>\\n            </span>\\n            <a href=\\\"#\\\" class=\\\"ui-paginator-next ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"changePageToNext($event)\\\" [ngClass]=\\\"{'ui-state-disabled':isLastPage()}\\\" [tabindex]=\\\"isLastPage() ? -1 : null\\\">\\n                <span class=\\\"fa fa-forward\\\"></span>\\n            </a>\\n            <a href=\\\"#\\\" class=\\\"ui-paginator-last ui-paginator-element ui-state-default ui-corner-all\\\"\\n                    (click)=\\\"changePageToLast($event)\\\" [ngClass]=\\\"{'ui-state-disabled':isLastPage()}\\\" [tabindex]=\\\"isLastPage() ? -1 : null\\\">\\n                <span class=\\\"fa fa-step-forward\\\"></span>\\n            </a>\\n            <p-dropdown [options]=\\\"rowsPerPageItems\\\" [(ngModel)]=\\\"rows\\\" *ngIf=\\\"rowsPerPageOptions\\\" \\n                (onChange)=\\\"onRppChange($event)\\\" [lazy]=\\\"false\\\" [autoWidth]=\\\"false\\\" [appendTo]=\\\"dropdownAppendTo\\\"></p-dropdown>\\n            <div class=\\\"ui-paginator-right-content\\\" *ngIf=\\\"templateRight\\\">\\n                <ng-container *ngTemplateOutlet=\\\"templateRight; context: {$implicit: paginatorState}\\\"></ng-container>\\n            </div>\\n        </div>\\n    \"\n        })\n    ], Paginator);\n    return Paginator;\n}());\nexports.Paginator = Paginator;\nvar PaginatorModule = /** @class */ (function () {\n    function PaginatorModule() {\n    }\n    PaginatorModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, dropdown_1.DropdownModule, forms_1.FormsModule, shared_1.SharedModule],\n            exports: [Paginator, dropdown_1.DropdownModule, forms_1.FormsModule, shared_1.SharedModule],\n            declarations: [Paginator]\n        })\n    ], PaginatorModule);\n    return PaginatorModule;\n}());\nexports.PaginatorModule = PaginatorModule;\n//# sourceMappingURL=paginator.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/paginator/paginator.js\n// module id = 79\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar common_1 = require(\"@angular/common\");\nvar core_1 = require(\"@angular/core\");\nvar rxjs_1 = require(\"rxjs\");\nexports.RECAPTCHA_LANGUAGE = new core_1.InjectionToken('recaptcha-language');\nexports.RECAPTCHA_BASE_URL = new core_1.InjectionToken('recaptcha-base-url');\nexports.RECAPTCHA_NONCE = new core_1.InjectionToken('recaptcha-nonce-tag');\nfunction loadScript(renderMode, onLoaded, urlParams, url, nonce) {\n    window.ng2recaptchaloaded = function () {\n        onLoaded(grecaptcha);\n    };\n    var script = document.createElement('script');\n    script.innerHTML = '';\n    var baseUrl = url || 'https://www.google.com/recaptcha/api.js';\n    script.src = baseUrl + \"?render=\" + renderMode + \"&onload=ng2recaptchaloaded\" + urlParams;\n    if (nonce) {\n        // tslint:disable-next-line:no-any Remove \"any\" cast once we upgrade Angular to 7 and TypeScript along with it\n        // tslint:disable-next-line:no-any Remove \"any\" cast once we upgrade Angular to 7 and TypeScript along with it\n        script.nonce = nonce;\n    }\n    script.async = true;\n    script.defer = true;\n    document.head.appendChild(script);\n}\nexports.loadScript = loadScript;\nvar RecaptchaLoaderService = /** @class */ (function () {\n    function RecaptchaLoaderService(\n    // tslint:disable-next-line:no-any\n    platformId, language, baseUrl, nonce) {\n        this.platformId = platformId;\n        this.language = language;\n        this.baseUrl = baseUrl;\n        this.nonce = nonce;\n        this.init();\n        this.ready = common_1.isPlatformBrowser(this.platformId) ? RecaptchaLoaderService.ready.asObservable() : rxjs_1.of();\n    }\n    /** @internal */\n    /** @internal */\n    RecaptchaLoaderService.prototype.init = /** @internal */\n    function () {\n        if (RecaptchaLoaderService.ready) {\n            return;\n        }\n        if (common_1.isPlatformBrowser(this.platformId)) {\n            var subject_1 = new rxjs_1.BehaviorSubject(null);\n            RecaptchaLoaderService.ready = subject_1;\n            var langParam = this.language ? '&hl=' + this.language : '';\n            loadScript('explicit', function (grecaptcha) { return subject_1.next(grecaptcha); }, langParam, this.baseUrl, this.nonce);\n        }\n    };\n    /**\n       * @internal\n       * @nocollapse\n       */\n    RecaptchaLoaderService.ready = null;\n    RecaptchaLoaderService.decorators = [\n        { type: core_1.Injectable },\n    ];\n    /** @nocollapse */\n    RecaptchaLoaderService.ctorParameters = function () { return [\n        { type: undefined, decorators: [{ type: core_1.Inject, args: [core_1.PLATFORM_ID,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [exports.RECAPTCHA_LANGUAGE,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [exports.RECAPTCHA_BASE_URL,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [exports.RECAPTCHA_NONCE,] },] },\n    ]; };\n    return RecaptchaLoaderService;\n}());\nexports.RecaptchaLoaderService = RecaptchaLoaderService;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ng-recaptcha/recaptcha/recaptcha-loader.service.js\n// module id = 80\n// module chunks = 0","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class RequestService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getMyEvents() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"requests\",\n            action : \"myevents\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMyGroupEvents() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"requests\",\n            action : \"eventsgroup\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMyRequests(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"requests\"; \n        filter.action = \"requestsgroup\"; \n        filter.token = token; \n        return this.http.post(filter).map(res => {\n        return res;\n        });\n    }\n\n    getMyGroupAccounts(){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"requests\",\n            action : \"accounts\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    \n    getMyGroupRules(){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"requests\",\n            action : \"rules\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    addRule(data){\n        var token = localStorage.getItem('token');\n        data.token = token;\n        data.module = \"requests\";\n        data.action = \"newrule\";\n        return this.http.post(data).map(res => {\n            return res;\n        });\n    }\n\n    runRule(rule){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"requests\",\n            action : \"runrule\",\n            token : token,\n            ruleid : rule\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    deleteRule(rule){\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"requests\",\n            action : \"deleterule\",\n            token : token,\n            ruleid : rule\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getRequests() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"requests\",\n            action : \"requests\",\n            token : token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getExcel(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"requests\";\n        filter.action = \"excel\";\n        filter.token = token;\n        return this.http.post(filter).map(res => {\n          return res;\n        });\n      }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/request.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class SchedulerService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getMySchedule() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"myscheduler\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n\n    getScheduler(id_scheduler) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"get\",\n            token: token,\n            id_scheduler: id_scheduler\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    editScheduler(sch) {\n        var token = localStorage.getItem('token');\n        sch.module = \"scheduler\";\n        sch.action = \"editscheduler\";\n        sch.token = token;\n        return this.http.post(sch).map(result => {\n            return result;\n        });\n    }\n\n    deleteScheduler(id_scheduler) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"delete\",\n            token: token,\n            id_scheduler: id_scheduler\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getSchedulerCategory() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"categorylist\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getSchedulerStatus() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"statuslist\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    getSchedulerPlaces() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"placeslist\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    setStatusScheduler(sch, status) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"setstatus\",\n            id_scheduler: sch,\n            id_statusscheduler: status,\n            token: token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    putScheduler(sch) {\n        var token = localStorage.getItem('token');\n        sch.module = \"scheduler\";\n        sch.action = \"insert\";\n        sch.token = token;\n        return this.http.post(sch).map(res => {\n            return res;\n        });\n    }\n\n    getMyMeeting() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"mymeeting\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    putMeeting(mt) {\n        var token = localStorage.getItem('token');\n        mt.module = \"scheduler\";\n        mt.action = \"insertmeeting\";\n        mt.token = token;\n        return this.http.post(mt).map(res => {\n            return res;\n        });\n    }\n    deleteMeeting(meet_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"deletemeeting\",\n            token: token,\n            meet_id: meet_id\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n    editMeeting(mt) {\n        var token = localStorage.getItem('token');\n        mt.module = \"scheduler\";\n        mt.action = \"editmeeting\";\n        mt.token = token;\n        return this.http.post(mt).map(result => {\n            return result;\n        });\n    }\n    getMeetingStatus() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"scheduler\",\n            action: \"statuslistmeeting\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/scheduler.service.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { TaskService } from \"../../services/task.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { MailService } from \"../../services/mail.service\";\nimport { EventsService } from \"../../services/events.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { GroupService } from \"../../services/group.service\";\n\nimport template from \"./project.template.html\";\n\n@Component({\n  selector: \"project\",\n  template: template,\n  providers: [ConfirmationService]\n})\nexport class ProjectComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    toastr: ToastrService,\n    sanitizer: DomSanitizer,\n    arouter: ActivatedRoute,\n    taskService: TaskService,\n    noteService: NoteService,\n    usersService: UsersService,\n    productService: ProductService,\n    mailService: MailService,\n    ProjectService: ProjectService,\n    confirmationService: ConfirmationService,\n    sprintService: SprintService,\n    eventsService: EventsService,\n    groupService: GroupService\n  ) {\n    this._title = title;\n    this._route = route;\n    this._tasks = taskService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n      };\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._sanitizer = sanitizer;\n    this._user = usersService;\n    this.confirm = confirmationService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._mail = mailService;\n    this._events = eventsService;\n    this._sprint = sprintService;\n    this._groups = groupService;\n    this.project = { attachments: [] };\n    this.myproj = { attachments: [] , userssh:[] };\n    this.task = { attachments: [] };\n    this.taskpj = { project: {}, attachments: [] };\n    this.taskpj_description = \"\";\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.searchMail = \"\";\n    this.currentpage = 1;\n    this.mdT = { project: {} };\n    this.minDate = new Date();\n    this.maxDate = new Date();\n    this.crmusers = [];\n    this.contacts = [];\n    this.statustasks = [];\n    this.limitpage = 0;\n    this.commentsusers = [];\n    this.notereply = [];\n    this.modalnotereply = 0;\n    this.milestone = { usershared: [] };\n    this.invalid_dates = [];\n    this.meeting = { usershared: [] };\n    this.plmt = [];\n    this.diasmileston = [];\n    this.diasmiles = 0;\n    this.milestones = [];\n    this.milestone_show = [];\n    this.selmiles = [];\n    this.taskattch = { attachments: [] };\n    this.isLoading = false;\n    this.tagMenu = 1;\n    this.reload();\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this.applicantlbl = [];\n    this._user.getEmailList().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.applicantlbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n\n    this.userslbl = [];\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n\n      this.usersShareWith = data.data;\n      this.usersShareWith_a = data.data;\n\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n\n    this.listmails = [];\n    this.listmailsa = [];\n    this._events.getMeetingPlaces().subscribe(res => {\n      for (let c of res.data) {\n        this.plmt.push({ label: c.para_name, value: c.para_id });\n      }\n    });\n    this.usersCRM = [];\n    this.usersCRMa = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.usersCRM = data.data;\n      this.usersCRMa = data.data;\n    });\n    this.groups = [];\n    this.lblgroups = [];\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n  }\n\n  ngOnInit() {}\n\n  reload(){\n    this._aroute.params.forEach(params => {\n      this.stTitle = \"Squadlinx\";\n      if(localStorage.getItem('title')){\n        this.stTitle = localStorage.getItem('title');\n      }\n      this._title.setTitle(\".:: \" + this.stTitle + \" : Project #\" + params.idproject + \" ::.\");\n      this._projects.getproject(params.idproject).subscribe(res => {\n        if (res.data.length == 0) {\n          this._route.navigate(['/403']);\n        }\n        res.data.proj_description = this.escapeHtml(this.sanitizeHtml(\n          res.data.proj_description\n        ));\n        this.project = res.data;\n        this.minDate = new Date(this.project.proj_start);\n        this.maxDate = new Date(this.project.proj_end);\n        let y = Math.round(this.project.proj_percentage);\n        this.project.proj_percentage = y;\n        for (let c of this.project.tasklist) {\n          let x = Math.round(c.task_percentage);\n          this.statustasks.push({\n            points: x,\n            datedelivery: c.datedelivery,\n            task: c.task_id,\n            subject: c.task_subject,\n            status: c.status,\n            proj_id: c.proj_id,\n            task_points: c.task_points,\n            task_pointsd: c.task_pointsd,\n            prod_name: c.prod_name,\n            task_date: c.task_date,\n            asigned: c.asigned,\n            creator: c.creator\n          });\n        }\n        this.limitpage =\n          this.statustasks.length > 4 ? 4 : this.statustasks.length;\n        this.itemcount = this.statustasks.length;\n        this.lastpage = ((this.itemcount)/(this.limitpage));\n        if (this.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(this.lastpage);\n          this.lastpage = countpag;\n        }\n        this.getTimeline();\n        this.getmilestone(this.project.proj_id);\n      });\n    });\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.myproj.attachments.push(files[0]);\n  }\n\n  getTimeline() {\n    this._projects.getCommentsUsers(this.project.proj_id).subscribe(res => {\n      this.detail = res.data;\n      for (let i = 0; i < this.detail.length; i++) {\n        this.detail[i].active = false;\n      }\n    });\n  }\n\n  getmilestone(proj_id) {\n    this._projects.getMilestone(proj_id).subscribe(res => {\n      this.milestones = res.data;\n      this.milestone_show = this.milestones[0];\n      this.invalid_dates = [];\n      for (let i = 0; i < this.milestones.length; i++) {\n        let di = new Date(this.milestones[i].meet_date);\n        di.setDate(di.getDate() + 1);\n        this.invalid_dates.push(di);\n      }\n    });\n  }\n\n  addMilestone() {\n    this.milestone = { usershared: [] };\n    $(\"#mdAddMilestone\").modal(\"show\");\n  }\n\n  showMilestone(mymilestone) {\n    this.milestone_show = mymilestone;\n  }\n\n  deleteAttachmentNT(att) {\n    for (var i in this.note.attachments) {\n      if (this.note.attachments[i] === att) {\n        this.note.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  validateMiles() {\n    return (\n      !this.milestone.meet_datex ||\n      this.milestone.meet_datex == \"\" ||\n      this.milestone.meet_datex == \"undefined\" ||\n      !this.milestone.user_owner ||\n      this.milestone.user_owner.trim() == \"\" ||\n      !this.milestone.pjml_description ||\n      this.milestone.pjml_description.trim() == \"\" ||\n      !this.milestone.para_place ||\n      this.milestone.para_place.trim() == \"\" ||\n      !this.milestone.meet_text ||\n      this.milestone.meet_text.trim() == \"\" \n      // !this.milestone.usershared ||\n      // this.milestone.usershared == \"\"\n    );\n  }\n\n  saveMilestone() {\n\n    this.milestone.meet_date =\n      this.milestone.meet_datex.getFullYear() +\n      \"-\" +\n      this.lpad(this.milestone.meet_datex.getMonth() + 1, 2) +\n      \"-\" +\n      this.lpad(this.milestone.meet_datex.getDate(), 2) +\n      \" \" +\n      this.lpad(this.milestone.meet_datex.getHours(), 2) +\n      \":\" +\n      this.lpad(this.milestone.meet_datex.getMinutes(), 2) +\n      \":\" +\n      this.lpad(this.milestone.meet_datex.getSeconds(), 2);\n\n    this.milestone.proj_id = this.project.proj_id;\n    let usarr = [];\n    for (let x in this.milestone.usershared) {\n      if (this.milestone.usershared[x].user_id) {\n        usarr.push(this.milestone.usershared[x].user_id);\n      }\n    }\n    this.milestone.users = usarr;\n\n    this._projects.putMilestone(this.milestone).subscribe(data => {\n      if (data.data === \"\") {\n        this.toastr.warning(data.message, \"Attention!\");\n      } else {\n        this.toastr.success(data.message, \"Milestone saved successfully\");\n      }\n      this.getmilestone(this.project.proj_id);\n      this.milestone = { usershared: [] };\n    });\n  }\n\n  deleteMilestone(mlt) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to proceed?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (mlt) {\n          this._projects.deleteMilestone(mlt).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Milestone deleted successfully\");\n            } else {\n              this.toastr.error(data.message);\n            }\n            this.getmilestone(this.project.proj_id);\n          });\n        }\n      },\n      reject: () => {}\n    });\n  }\n\n  filterMultipleEmails(event) {\n    let query = event.query;\n    this.listmails = this.filter(query, this.listmailsa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  lpad(n, width, z) {\n    z = z || \"0\";\n    n = n || \"0\";\n    n = n + \"\";\n    return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n  }\n\n  noteAdd(idtask, type) {\n    this.note.task_id = idtask;\n    if (\n      this.note.note_text == undefined &&\n      this.note_text != null &&\n      this.note_text != \"\"\n    ) {\n      this.note.note_text = this.note_text;\n    }\n    this._notes.putNote(this.note).subscribe(data => {});\n    this.getComments(idtask);\n    this.getTimelinetk(idtask);\n  }\n\n  saveTask() {\n    this.task.proj_id = this.project.proj_id;\n    this.task.task_delivery =\n      this.task.task_delivery.getFullYear() +\n      \"-\" +\n      (this.task.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.task.task_delivery.getDate();\n    this._tasks.putTask(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this.toastr.success(data.message, \"Saved Successfully\");\n      }\n      this.closedt();\n      this.getTimeline();\n    });\n  }\n\n  onChangeTask(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n\n  onChangeTask(event, action) {\n    if (action == \"new\") {\n      var files = event.files;\n      if (this.taskattch.attachments.length > 0) {\n        for (let c of this.taskattch.attachments) {\n          if (files[0][\"name\"] == c.name) {\n          } else {\n            this.taskattch.attachments.push(files[0]);\n          }\n        }\n      } else {\n        this.taskattch.attachments.push(files[0]);\n      }\n    } else if (action == \"delete\") {\n      var file = event.file;\n      for (let c of this.taskattch.attachments) {\n        if (file[\"name\"] == c.name) {\n          var posattch = this.taskattch.attachments.indexOf(c);\n          this.taskattch.attachments.splice(posattch);\n        }\n      }\n    }\n  }\n\n  onUploadAttachment(taskid) {\n    if (taskid) {\n      this.taskattch.task_id = taskid;\n      this._tasks.putAttachments(this.taskattch).subscribe(res => {\n        if (res.data === \"\" || res.data === \"0\") {\n          this.toastr.error(res.message, \"Error!\");\n        } else {\n          this.toastr.success(res.message, \"Attachments uploaded successfully\");\n          this.taskattch.attachments = [];\n          this.getAttachments(taskid);\n        }\n      });\n    }\n  }\n\n    saveNote() {\n        if (this.note.note_text) {\n            this.note.proj_id = this.project.proj_id;\n            this._notes.putNote(this.note).subscribe(data => {\n                if (data.data != null) {\n                    this.toastr.success(data.message, \"Note added Successfully\");\n                    this.note = {attachments: []};\n                    this.getTimeline();\n                } else {\n                    this.toastr.warning(\"\", data.message);\n                    $('.imput-comments').val('');\n                }\n            });\n        }\n    }\n\n  saveNoteReply(id_note, detail) {\n    if ((this.notereply.note_data == \"\" || !this.notereply.note_data) || (this.notereply.note_data && !detail.active)) {\n      this.notereply = [];\n  \n    } else {\n      if (this.notereply.note_data) {\n        this.note.note_text = this.notereply.note_data;\n        this.note.proj_id = this.project.proj_id;\n        this.note.note_parent = id_note;\n        this._notes.putNote(this.note).subscribe(data => {\n            if(data.data != null) {\n                this.toastr.success(data.message, \"Note added Successfully\");\n                this.note = { attachments: [] };\n                this.getTimeline();\n            }else {\n                this.toastr.warning(\"\", data.message);\n                $('.imput-comments').val('');\n            }\n\n        });\n        this.notereply = [];\n      }\n    }\n  }\n\n  showNoteReply(item) {\n    this.notereply = [];\n    for (let i = 0; i < this.detail.length; i++) {\n      if(i == item){\n        this.detail[i].active = true;\n      }else{\n        this.detail[i].active = false;\n      }\n    }\n  }\n\n  createNoteReply(id_note) {\n    this.notereply = [];\n    this.notereply.push({\n      note_data: \"\"\n    });\n    // this.modalnotereply = 1;\n  }\n\n  onChangeNote(event) {\n    var files = event.srcElement.files;\n    this.note.attachments.push(files[0]);\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n  }\n  setPage(value) {\n    if (value == 0) {\n      this.currentpage = 1;\n    } else {\n      this.currentpage = this.lastpage;\n    }\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  decode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n    var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n    if (base64test.exec(input)) {\n      return false;\n    }\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n    do {\n      enc1 = keyStr.indexOf(input.charAt(i++));\n      enc2 = keyStr.indexOf(input.charAt(i++));\n      enc3 = keyStr.indexOf(input.charAt(i++));\n      enc4 = keyStr.indexOf(input.charAt(i++));\n\n      chr1 = (enc1 << 2) | (enc2 >> 4);\n      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n      chr3 = ((enc3 & 3) << 6) | enc4;\n\n      output = output + String.fromCharCode(chr1);\n\n      if (enc3 != 64) {\n        output = output + String.fromCharCode(chr2);\n      }\n      if (enc4 != 64) {\n        output = output + String.fromCharCode(chr3);\n      }\n\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n\n    return unescape(output);\n  }\n\n  encode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    input = escape(input);\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    do {\n      chr1 = input.charCodeAt(i++);\n      chr2 = input.charCodeAt(i++);\n      chr3 = input.charCodeAt(i++);\n      enc1 = chr1 >> 2;\n      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n      enc4 = chr3 & 63;\n      if (isNaN(chr2)) {\n        enc3 = enc4 = 64;\n      } else if (isNaN(chr3)) {\n        enc4 = 64;\n      }\n      output =\n        output +\n        keyStr.charAt(enc1) +\n        keyStr.charAt(enc2) +\n        keyStr.charAt(enc3) +\n        keyStr.charAt(enc4);\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n    return output;\n  }\n\n  showEditModal() {\n    this._projects.getproject(this.project.proj_id).subscribe(res => {\n      this.myproj = {attachments: []};\n      res.data.proj_description = this.escapeHtml(res.data.proj_description);\n      this.myproj = res.data;\n      this._projects.getAttachments(this.project.proj_id).subscribe(rx => {\n        this.myproj.attachments = rx.data;\n      });\n      $(\"#mdproject\").modal(\"show\");\n    });\n  }\n\n  validateProj() {\n    return (\n      !this.myproj.proj_subject ||\n      this.myproj.proj_subject.trim() == \"\" ||\n      !this.myproj.proj_description ||\n      this.myproj.proj_description.trim() == \"\" ||\n      !this.myproj.prod_id ||\n      this.myproj.prod_id.trim() == \"\" ||\n      !this.myproj.group_assigned ||\n      this.myproj.group_assigned.trim() == \"\" ||\n      !this.myproj.user_applicant ||\n      this.myproj.user_applicant.trim() == \"\" ||\n      !this.myproj.proj_end ||\n      this.myproj.proj_end == \"\" ||\n      this.myproj.proj_end == \"undefined\" ||\n      !this.myproj.proj_propoints ||\n      this.myproj.proj_propoints == \"\" ||\n      this.myproj.proj_propoints == \"undefined\"\n    );\n  }\n\n  savemyproj() {\n\n    this.myproj.proj_end = new Date(this.myproj.proj_end);\n    this.myproj.proj_end =\n        this.myproj.proj_end.getFullYear() +\n        \"-\" +\n        (this.myproj.proj_end.getMonth() + 1) +\n        \"-\" +\n        this.myproj.proj_end.getDate();\n\n    let users_share = [];\n\n    for (let user in this.myproj.userssh) {\n      users_share.push(this.myproj.userssh[user].user_id);\n    }\n\n    let project = Object.assign({}, this.myproj);\n    project.users = users_share;\n\n    this.isLoading = true;\n\n    this._projects.putproject(project).subscribe(data => {\n      this.isLoading = false;\n      if (data.data === \"\" || data.data === \"0\" || data.data == null) {\n        this.toastr.warning(data.message, \"Attention!\");\n      } else {\n        this.toastr.success(data.message, \"project saved successfully\");\n      }\n      this.reload();\n      this.myproj = { attachments: [] };\n    });\n  }\n  \n  closeproject() {\n    this.confirm.confirm({\n      message: \"Do you want to close the project(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        this._projects.setStatusproject(this.project.proj_id, 3).subscribe(data => {\n          if (data.data == \"\") {\n            this.toastr.error(data.message);\n          } else {\n            this.reload();\n            this.toastr.success(\"project closed successfully\");\n          }\n        });\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  openproject(idtk) {\n    this.confirm.confirm({\n      message: \"Do you want to open the project(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        this._projects.setStatusproject(idtk, 2).subscribe(data => {\n          if (data.data == \"\") {\n            this.toastr.error(data.message);\n          } else {\n            this.reload();\n            this.toastr.success(\"Project Opened successfully\");\n          }\n        });\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  deleteproject(idtk) {\n    this.confirm.confirm({\n      message: \"Do you want to delete the project(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        this._projects.setStatusproject(idtk, 5).subscribe(data => {\n          if (data.data == \"\") {\n            this.toastr.error(data.message);\n          } else {\n            this.toastr.success(\"project deleted successfully\");\n          }\n          this.reload();\n        });\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    return text;\n  }\n\n  showModal(mytk){\n    $(\"#myTask\"+ mytk.task).click();\n  }\n\n  filterMultipleShared(event) {\n    let query = event.query;\n    this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n  }\n\n  filterShared(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n          country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  setPageMenu(opt) {\n    if (opt == 1) {\n      this.tagMenu = 1;\n    }\n    if (opt == 2) {\n      this.tagMenu = 2;\n    }\n  }\n\n  deleteAttachmentProject(proj, att) {\n    for (var i in proj.attachments) {\n      if (proj.attachments[i] === att) {\n        this._projects\n            .deleteAttachmentProject(proj.proj_id, proj.attachments[i].pjat_id)\n            .subscribe(res => {\n              if (res.data != null) {\n                this.toastr.success(\n                    res.message,\n                    \"Attachment deleted successfully\"\n                );\n                this.getAttachments(proj.proj_id);\n              } else {\n                this.toastr.warning(\"\", res.message);\n              }\n            });\n        proj.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  deleteAttachment(att) {\n\n    var index = 0;\n    for (let i in this.myproj.attachments) {\n      if (att.name == this.myproj.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n    this.myproj.attachments.splice(index, 1);\n\n  }\n\n  getAttachments(projid) {\n    this._projects.getAttachments(projid).subscribe(res => {\n      this.myproj.attachments = res.data;\n      for (var i = 0; i < this.myproj.attachments.length; i++) {\n        if (i == 0) {\n          this.myproj.total_attachments = 1;\n        } else {\n          this.myproj.total_attachments++;\n        }\n      }\n    });\n  }\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/project/project.component.js","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar recaptcha_loader_service_1 = require(\"./recaptcha-loader.service\");\nvar recaptcha_settings_1 = require(\"./recaptcha-settings\");\nvar nextId = 0;\nvar RecaptchaComponent = /** @class */ (function () {\n    function RecaptchaComponent(elementRef, loader, zone, settings) {\n        this.elementRef = elementRef;\n        this.loader = loader;\n        this.zone = zone;\n        this.id = \"ngrecaptcha-\" + nextId++;\n        this.resolved = new core_1.EventEmitter();\n        if (settings) {\n            this.siteKey = settings.siteKey;\n            this.theme = settings.theme;\n            this.type = settings.type;\n            this.size = settings.size;\n            this.badge = settings.badge;\n        }\n    }\n    RecaptchaComponent.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.subscription = this.loader.ready.subscribe(function (grecaptcha) {\n            if (grecaptcha != null && grecaptcha.render instanceof Function) {\n                _this.grecaptcha = grecaptcha;\n                _this.renderRecaptcha();\n            }\n        });\n    };\n    RecaptchaComponent.prototype.ngOnDestroy = function () {\n        // reset the captcha to ensure it does not leave anything behind\n        // after the component is no longer needed\n        this.grecaptchaReset();\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    };\n    /**\n     * Executes the invisible recaptcha.\n     * Does nothing if component's size is not set to \"invisible\".\n     */\n    /**\n       * Executes the invisible recaptcha.\n       * Does nothing if component's size is not set to \"invisible\".\n       */\n    RecaptchaComponent.prototype.execute = /**\n       * Executes the invisible recaptcha.\n       * Does nothing if component's size is not set to \"invisible\".\n       */\n    function () {\n        if (this.size !== 'invisible') {\n            return;\n        }\n        if (this.widget != null) {\n            this.grecaptcha.execute(this.widget);\n        }\n        else {\n            // delay execution of recaptcha until it actually renders\n            this.executeRequested = true;\n        }\n    };\n    RecaptchaComponent.prototype.reset = function () {\n        if (this.widget != null) {\n            if (this.grecaptcha.getResponse(this.widget)) {\n                // Only emit an event in case if something would actually change.\n                // That way we do not trigger \"touching\" of the control if someone does a \"reset\"\n                // on a non-resolved captcha.\n                this.resolved.emit(null);\n            }\n            this.grecaptchaReset();\n        }\n    };\n    /** @internal */\n    /** @internal */\n    RecaptchaComponent.prototype.expired = /** @internal */\n    function () {\n        this.resolved.emit(null);\n    };\n    /** @internal */\n    /** @internal */\n    RecaptchaComponent.prototype.captchaResponseCallback = /** @internal */\n    function (response) {\n        this.resolved.emit(response);\n    };\n    /** @internal */\n    /** @internal */\n    RecaptchaComponent.prototype.grecaptchaReset = /** @internal */\n    function () {\n        var _this = this;\n        if (this.widget != null) {\n            this.zone.runOutsideAngular(function () { return _this.grecaptcha.reset(_this.widget); });\n        }\n    };\n    /** @internal */\n    /** @internal */\n    RecaptchaComponent.prototype.renderRecaptcha = /** @internal */\n    function () {\n        var _this = this;\n        this.widget = this.grecaptcha.render(this.elementRef.nativeElement, {\n            badge: this.badge,\n            callback: function (response) {\n                _this.zone.run(function () { return _this.captchaResponseCallback(response); });\n            },\n            'expired-callback': function () {\n                _this.zone.run(function () { return _this.expired(); });\n            },\n            sitekey: this.siteKey,\n            size: this.size,\n            tabindex: this.tabIndex,\n            theme: this.theme,\n            type: this.type,\n        });\n        if (this.executeRequested === true) {\n            this.executeRequested = false;\n            this.execute();\n        }\n    };\n    RecaptchaComponent.decorators = [\n        { type: core_1.Component, args: [{\n                    exportAs: 'reCaptcha',\n                    selector: 're-captcha',\n                    template: \"\",\n                },] },\n    ];\n    /** @nocollapse */\n    RecaptchaComponent.ctorParameters = function () { return [\n        { type: core_1.ElementRef, },\n        { type: recaptcha_loader_service_1.RecaptchaLoaderService, },\n        { type: core_1.NgZone, },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [recaptcha_settings_1.RECAPTCHA_SETTINGS,] },] },\n    ]; };\n    RecaptchaComponent.propDecorators = {\n        \"id\": [{ type: core_1.Input }, { type: core_1.HostBinding, args: ['attr.id',] },],\n        \"siteKey\": [{ type: core_1.Input },],\n        \"theme\": [{ type: core_1.Input },],\n        \"type\": [{ type: core_1.Input },],\n        \"size\": [{ type: core_1.Input },],\n        \"tabIndex\": [{ type: core_1.Input },],\n        \"badge\": [{ type: core_1.Input },],\n        \"resolved\": [{ type: core_1.Output },],\n    };\n    return RecaptchaComponent;\n}());\nexports.RecaptchaComponent = RecaptchaComponent;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ng-recaptcha/recaptcha/recaptcha.component.js\n// module id = 110\n// module chunks = 0","import {Injectable} from '@angular/core';\nimport {HttpService} from './http.service';\n\n@Injectable()\nexport class TodolistService {\n\n    constructor(httpService: HttpService) {\n        this._http = httpService;\n    }\n\n    setLevel(item_id, new_level) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"todolist\",\n            action: \"setlevel\",\n            token: token,\n            item_id: item_id,\n            new_level: new_level\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getTasksMySprint() {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"todolist\",\n            action: \"gettasksmysprint\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMyMeetings() {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"todolist\",\n            action: \"getmymeetings\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getMySchedulers() {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n            module: \"todolist\",\n            action: \"getmyschedulers\",\n            token: token\n        };\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getListAll(filter) {\n        var token = localStorage.getItem(\"token\");\n        filter.module = \"todolist\";\n        filter.action = \"listall\";\n        filter.token = token;\n        return this._http.post(filter).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/todolist.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class ParameterService {\n\n    constructor(http: HttpService) {\n        this._http = http;\n    }\n\n    getClasses() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"parameters\",\n            action : \"classes\",\n            token : token\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    getParametersClass(id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"parameters\",\n            action : \"listParams\",\n            token : token,\n            clas_id : id\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    getParameters() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"parameters\",\n            action : \"list\",\n            token : token\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    putParameter(param) {\n        var token = localStorage.getItem('token');\n        param.module = \"parameters\";\n        param.action = \"put\";\n        param.token = token;\n        return this._http.post(param).map(res => {\n            return res;\n        });\n    }\n    putClass(param) {\n        var token = localStorage.getItem('token');\n        param.module = \"parameters\";\n        param.action = \"putClass\";\n        param.token = token;\n        return this._http.post(param).map(res => {\n            return res;\n        });\n    }\n    updateClass(param) {\n        var token = localStorage.getItem('token');\n        param.module = \"parameters\";\n        param.action = \"updateClass\";\n        param.token = token;\n        return this._http.post(param).map(res => {\n            return res;\n        });\n    }\n    delClass(class_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"parameters\",\n            action : \"deleteClass\",\n            token : token,\n            clas_id: class_id\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n    getParametersbyClass(clasid) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"parameters\",\n            action : \"paramcla\",\n            token : token,\n            clas_id: calsid\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    delParameter(paraid) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"parameters\",\n            action : \"delete\",\n            token : token,\n            para_id: paraid\n        }\n        return this._http.post(params).map(res => {\n            return res;\n        });\n    }\n        updateParameter(param) {\n        var token = localStorage.getItem('token');\n        param.module = \"parameters\";\n        param.action = \"updateParam\";\n        param.token = token;\n        return this._http.post(param).map(res => {\n            return res;\n        });\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/parameter.service.js","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"./http.service\";\n\n@Injectable()\nexport class LogService {\n  constructor(http: HttpService) {\n    this.http = http;\n  }\n\n  getModules() {\n    var token = localStorage.getItem('token');\n    var params = {\n        module : \"log\",\n        action : \"modules\",\n        token : token\n    }\n    return this.http.post(params).map(res => {\n        return res;\n    });\n  }\n  getLogs(filter) {\n    var token = localStorage.getItem(\"token\");\n    filter.module = \"log\"; \n    filter.action = \"logs\"; \n    filter.token = token; \n    return this.http.post(filter).map(res => {\n      return res;\n    });\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/services/log.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class CloudService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n   \n    documentsType() {\n      var token = localStorage.getItem('token');\n      var params = {\n          module : \"cloud\",\n          action : \"documentstype\",\n          token : token\n      };\n      return this.http.post(params).map(res => {\n          return res;\n      });\n    }\n    getDocuments(id_type) {\n      var token = localStorage.getItem('token');\n      var params = {\n          module : \"cloud\",\n          action : \"getdocuments\",\n          id_type : id_type,\n          token : token\n      };\n      return this.http.post(params).map(res => {\n          return res;\n      });\n    }\n    getDocument(id_document) {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"getdocument\",\n        id_document: id_document,\n        token: token\n      };\n      return this.http.post(params).map(res => {\n        return res;\n      });\n    }\n    getGroups() {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"groups\",\n        token: token\n      };\n      return this.http.post(params).map(res => {\n        return res;\n      });\n    }\n    deleteDocument(id_document, user_id) {\n        var token = localStorage.getItem('token');\n        var params = {\n          module: \"cloud\",\n          action: \"delete\",\n          id_document: id_document,\n          user_id: user_id,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n          return res;\n        });\n    }\n    editDocument(document) {\n        var token = localStorage.getItem('token');\n        document.module = \"cloud\";\n        document.action = \"edit\";\n        document.token = token;\n        return this.http.postWithFile(document, document.clou_name).map(res => {\n          return res;\n        });\n    }\n    insertDocument(document) {\n        var token = localStorage.getItem('token');\n        document.module = \"cloud\";\n        document.action = \"insert\";\n        document.token = token;\n        return this.http.postWithFile(document, document.clou_name).map(res => {\n            return res;\n        });\n    }\n    downloadDocument(id_document) {\n      var token = localStorage.getItem('token');\n      var params = {\n        module: \"cloud\",\n        action: \"download\",\n        id_document: id_document,\n        token: token\n      };\n      return this.http.post(params).map(res => {\n        return res;\n      });\n    }\n\n    //  Functions Module Cloud\n\n    listCloud(id_type) {\n        var token = localStorage.getItem('token');\n        var params = {\n            module : \"cloud\",\n            action : \"listcloud\",\n            id_type : id_type,\n            token : token\n        };\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n    getCloud(id_document) {\n        var token = localStorage.getItem('token');\n        var params = {\n          module: \"cloud\",\n          action: \"getcloud\",\n          id_document: id_document,\n          token: token\n        };\n        return this.http.post(params).map(res => {\n          return res;\n        });\n    }\n    getUsers() {\n        var token = localStorage.getItem('token');\n        var params = {\n          module: \"cloud\",\n          action: \"users\",\n          token: token\n        };\n        return this.http.post(params).map(res => {\n          return res;\n        });\n    }\n    editCloud(document) {\n        var token = localStorage.getItem('token');\n        document.module = \"cloud\";\n        document.action = \"editcloud\";\n        document.token = token;\n        return this.http.postWithFile(document, document.clou_name).map(res => {\n          return res;\n        });\n    }\n\n    insertCloud(document) {\n        var token = localStorage.getItem('token');\n        document.module = \"cloud\";\n        document.action = \"insertcloud\";\n        document.token = token;\n        return this.http.postWithFile(document, document.clou_name).map(res => {\n          return res;\n        });\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/cloud.service.js","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n\n  /** Used as the semantic version number. */\n  var VERSION = '4.17.15';\n\n  /** Used as the size to enable large array optimizations. */\n  var LARGE_ARRAY_SIZE = 200;\n\n  /** Error message constants. */\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function';\n\n  /** Used to stand-in for `undefined` hash values. */\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n  /** Used as the maximum memoize cache size. */\n  var MAX_MEMOIZE_SIZE = 500;\n\n  /** Used as the internal argument placeholder. */\n  var PLACEHOLDER = '__lodash_placeholder__';\n\n  /** Used to compose bitmasks for cloning. */\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n\n  /** Used to compose bitmasks for value comparisons. */\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n\n  /** Used to compose bitmasks for function metadata. */\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n\n  /** Used as default options for `_.truncate`. */\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n\n  /** Used to indicate the type of lazy iteratees. */\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n\n  /** Used as references for various `Number` constants. */\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n\n  /** Used as references for the maximum length and index of an array. */\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n  /** Used to associate wrap methods with their bit flags. */\n  var wrapFlags = [\n    ['ary', WRAP_ARY_FLAG],\n    ['bind', WRAP_BIND_FLAG],\n    ['bindKey', WRAP_BIND_KEY_FLAG],\n    ['curry', WRAP_CURRY_FLAG],\n    ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n    ['flip', WRAP_FLIP_FLAG],\n    ['partial', WRAP_PARTIAL_FLAG],\n    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n    ['rearg', WRAP_REARG_FLAG]\n  ];\n\n  /** `Object#toString` result references. */\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n\n  /** Used to match empty string literals in compiled template source. */\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n  /** Used to match HTML entities and HTML characters. */\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n  /** Used to match template delimiters. */\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n  /** Used to match property names within property paths. */\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n\n  /** Used to match leading and trailing whitespace. */\n  var reTrim = /^\\s+|\\s+$/g,\n      reTrimStart = /^\\s+/,\n      reTrimEnd = /\\s+$/;\n\n  /** Used to match wrap detail comments. */\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n\n  /** Used to match words composed of alphanumeric characters. */\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n  /** Used to match backslashes in property paths. */\n  var reEscapeChar = /\\\\(\\\\)?/g;\n\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n  /** Used to match `RegExp` flags from their coerced string values. */\n  var reFlags = /\\w*$/;\n\n  /** Used to detect bad signed hexadecimal string values. */\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n  /** Used to detect binary string values. */\n  var reIsBinary = /^0b[01]+$/i;\n\n  /** Used to detect host constructors (Safari). */\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n  /** Used to detect octal string values. */\n  var reIsOctal = /^0o[0-7]+$/i;\n\n  /** Used to detect unsigned integer values. */\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n  /** Used to ensure capturing order of template delimiters. */\n  var reNoMatch = /($^)/;\n\n  /** Used to match unescaped characters in compiled string literals. */\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n  /** Used to compose unicode character classes. */\n  var rsAstralRange = '\\\\ud800-\\\\udfff',\n      rsComboMarksRange = '\\\\u0300-\\\\u036f',\n      reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n      rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = '\\\\u2700-\\\\u27bf',\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = '\\\\u2000-\\\\u206f',\n      rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = '\\\\ufe0e\\\\ufe0f',\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n  /** Used to compose unicode capture groups. */\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n      rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = '\\\\u200d';\n\n  /** Used to compose unicode regexes. */\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n  /** Used to match apostrophes. */\n  var reApos = RegExp(rsApos, 'g');\n\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n  var reComboMark = RegExp(rsCombo, 'g');\n\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n  /** Used to match complex or compound words. */\n  var reUnicodeWord = RegExp([\n    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n    rsUpper + '+' + rsOptContrUpper,\n    rsOrdUpper,\n    rsOrdLower,\n    rsDigits,\n    rsEmoji\n  ].join('|'), 'g');\n\n  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');\n\n  /** Used to detect strings that need a more robust regexp to match words. */\n  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n  /** Used to assign default `context` object properties. */\n  var contextProps = [\n    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n  ];\n\n  /** Used to make template sourceURLs easier to identify. */\n  var templateCounter = -1;\n\n  /** Used to identify `toStringTag` values of typed arrays. */\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n  typedArrayTags[uint32Tag] = true;\n  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n  typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n  typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n  typedArrayTags[setTag] = typedArrayTags[stringTag] =\n  typedArrayTags[weakMapTag] = false;\n\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n  var cloneableTags = {};\n  cloneableTags[argsTag] = cloneableTags[arrayTag] =\n  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n  cloneableTags[boolTag] = cloneableTags[dateTag] =\n  cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n  cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n  cloneableTags[int32Tag] = cloneableTags[mapTag] =\n  cloneableTags[numberTag] = cloneableTags[objectTag] =\n  cloneableTags[regexpTag] = cloneableTags[setTag] =\n  cloneableTags[stringTag] = cloneableTags[symbolTag] =\n  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n  cloneableTags[errorTag] = cloneableTags[funcTag] =\n  cloneableTags[weakMapTag] = false;\n\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n    '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n    '\\xc7': 'C',  '\\xe7': 'c',\n    '\\xd0': 'D',  '\\xf0': 'd',\n    '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n    '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n    '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n    '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n    '\\xd1': 'N',  '\\xf1': 'n',\n    '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n    '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n    '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n    '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n    '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n    '\\xc6': 'Ae', '\\xe6': 'ae',\n    '\\xde': 'Th', '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n    '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n    '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n    '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n    '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n    '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n    '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n    '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n    '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n    '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n    '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n    '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n    '\\u0134': 'J',  '\\u0135': 'j',\n    '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n    '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n    '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n    '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n    '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n    '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n    '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n    '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n    '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n    '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n    '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n    '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n    '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n    '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n    '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n    '\\u0174': 'W',  '\\u0175': 'w',\n    '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n    '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n    '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n    '\\u0132': 'IJ', '\\u0133': 'ij',\n    '\\u0152': 'Oe', '\\u0153': 'oe',\n    '\\u0149': \"'n\", '\\u017f': 's'\n  };\n\n  /** Used to map characters to HTML entities. */\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n\n  /** Used to map HTML entities to characters. */\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n\n  /** Used to escape characters for inclusion in compiled string literals. */\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    '\\u2028': 'u2028',\n    '\\u2029': 'u2029'\n  };\n\n  /** Built-in method references without a dependency on `root`. */\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n\n  /** Detect free variable `global` from Node.js. */\n  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n  /** Detect free variable `self`. */\n  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n  /** Used as a reference to the global object. */\n  var root = freeGlobal || freeSelf || Function('return this')();\n\n  /** Detect free variable `exports`. */\n  var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n  /** Detect free variable `module`. */\n  var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n  /** Detect the popular CommonJS extension `module.exports`. */\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n\n  /** Detect free variable `process` from Node.js. */\n  var freeProcess = moduleExports && freeGlobal.process;\n\n  /** Used to access faster Node.js helpers. */\n  var nodeUtil = (function() {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      }\n\n      // Legacy `process.binding('util')` for Node.js < 10.\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }());\n\n  /* Node.js helper references. */\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0: return func.call(thisArg);\n      case 1: return func.call(thisArg, args[0]);\n      case 2: return func.call(thisArg, args[0], args[1]);\n      case 3: return func.call(thisArg, args[0], args[1], args[2]);\n    }\n    return func.apply(thisArg, args);\n  }\n\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n    return result;\n  }\n\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n    return array;\n  }\n\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n    return accumulator;\n  }\n\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  var asciiSize = baseProperty('length');\n\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function asciiToArray(string) {\n    return string.split('');\n  }\n\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function(value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while ((fromRight ? index-- : ++index < length)) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value\n      ? strictIndexOf(array, value, fromIndex)\n      : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? (baseSum(array, iteratee) / length) : NAN;\n  }\n\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function baseProperty(key) {\n    return function(object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n  function basePropertyOf(object) {\n    return function(key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function(value, index, collection) {\n      accumulator = initAccum\n        ? (initAccum = false, value)\n        : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n\n    array.sort(comparer);\n    while (length--) {\n      array[length] = array[length].value;\n    }\n    return array;\n  }\n\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n      if (current !== undefined) {\n        result = result === undefined ? current : (result + current);\n      }\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n    return result;\n  }\n\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n  function baseToPairs(object, props) {\n    return arrayMap(props, function(key) {\n      return [key, object[key]];\n    });\n  }\n\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n  function baseUnary(func) {\n    return function(value) {\n      return func(value);\n    };\n  }\n\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n  function baseValues(object, props) {\n    return arrayMap(props, function(key) {\n      return object[key];\n    });\n  }\n\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n    return index;\n  }\n\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n  var deburrLetter = basePropertyOf(deburredLetters);\n\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n    return result;\n  }\n\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n\n    map.forEach(function(value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n  function overArg(func, transform) {\n    return function(arg) {\n      return func(transform(arg));\n    };\n  }\n\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n    return result;\n  }\n\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n\n    set.forEach(function(value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return -1;\n  }\n\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n    return index;\n  }\n\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n  function stringSize(string) {\n    return hasUnicode(string)\n      ? unicodeSize(string)\n      : asciiSize(string);\n  }\n\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function stringToArray(string) {\n    return hasUnicode(string)\n      ? unicodeToArray(string)\n      : asciiToArray(string);\n  }\n\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n    return result;\n  }\n\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n  var runInContext = (function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n    /** Built-in constructor references. */\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n\n    /** Used for built-in method references. */\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n\n    /** Used to detect overreaching core-js shims. */\n    var coreJsData = context['__core-js_shared__'];\n\n    /** Used to resolve the decompiled source of functions. */\n    var funcToString = funcProto.toString;\n\n    /** Used to check objects for own properties. */\n    var hasOwnProperty = objectProto.hasOwnProperty;\n\n    /** Used to generate unique IDs. */\n    var idCounter = 0;\n\n    /** Used to detect methods masquerading as native. */\n    var maskSrcKey = (function() {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? ('Symbol(src)_1.' + uid) : '';\n    }());\n\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n    var nativeObjectToString = objectProto.toString;\n\n    /** Used to infer the `Object` constructor. */\n    var objectCtorString = funcToString.call(Object);\n\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n    var oldDash = root._;\n\n    /** Used to detect if a method is native. */\n    var reIsNative = RegExp('^' +\n      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n      .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n    );\n\n    /** Built-in value references. */\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n        symIterator = Symbol ? Symbol.iterator : undefined,\n        symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n    var defineProperty = (function() {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }());\n\n    /** Mocked built-ins. */\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n\n    /* Built-in method references that are verified to be native. */\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n\n    /** Used to store function metadata. */\n    var metaMap = WeakMap && new WeakMap;\n\n    /** Used to lookup unminified function names. */\n    var realNames = {};\n\n    /** Used to detect maps, sets, and weakmaps. */\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n\n    /** Used to convert symbols to primitives and strings. */\n    var symbolProto = Symbol ? Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n      return new LodashWrapper(value);\n    }\n\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n    var baseCreate = (function() {\n      function object() {}\n      return function(proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n        object.prototype = proto;\n        var result = new object;\n        object.prototype = undefined;\n        return result;\n      };\n    }());\n\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n    function baseLodash() {\n      // No operation performed.\n    }\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n    lodash.templateSettings = {\n\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    };\n\n    // Ensure wrappers are instances of `baseLodash`.\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n      return result;\n    }\n\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : (start - 1),\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n      var result = [];\n\n      outer:\n      while (length-- && resIndex < takeCount) {\n        index += dir;\n\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n        result[resIndex++] = value;\n      }\n      return result;\n    }\n\n    // Ensure `LazyWrapper` is an instance of `baseLodash`.\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function hashGet(key) {\n      var data = this.__data__;\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n    }\n\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n      return this;\n    }\n\n    // Add methods to `Hash`.\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n      var lastIndex = data.length - 1;\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n      --this.size;\n      return true;\n    }\n\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      return index < 0 ? undefined : data[index][1];\n    }\n\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n      return this;\n    }\n\n    // Add methods to `ListCache`.\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n\n      this.clear();\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash,\n        'map': new (Map || ListCache),\n        'string': new Hash\n      };\n    }\n\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    }\n\n    // Add methods to `MapCache`.\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n\n      this.__data__ = new MapCache;\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n      return this;\n    }\n\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    }\n\n    // Add methods to `SetCache`.\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n    function stackClear() {\n      this.__data__ = new ListCache;\n      this.size = 0;\n    }\n\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n\n      this.size = data.size;\n      return result;\n    }\n\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n    function stackSet(key, value) {\n      var data = this.__data__;\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n        data = this.__data__ = new MapCache(pairs);\n      }\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    }\n\n    // Add methods to `Stack`.\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) &&\n            !(skipIndexes && (\n               // Safari 9 has enumerable `arguments.length` in strict mode.\n               key == 'length' ||\n               // Node.js 0.10 has enumerable non-index properties on buffers.\n               (isBuff && (key == 'offset' || key == 'parent')) ||\n               // PhantomJS 2 has enumerable non-index properties on typed arrays.\n               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n               // Skip index properties.\n               isIndex(key, length)\n            ))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignMergeValue(object, key, value) {\n      if ((value !== undefined && !eq(object[key], value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n          (value === undefined && !(key in object))) {\n        baseAssignValue(object, key, value);\n      }\n    }\n\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n    function assocIndexOf(array, key) {\n      var length = array.length;\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function(value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n      return number;\n    }\n\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n      if (result !== undefined) {\n        return result;\n      }\n      if (!isObject(value)) {\n        return value;\n      }\n      var isArr = isArray(value);\n      if (isArr) {\n        result = initCloneArray(value);\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n          result = (isFlat || isFunc) ? {} : initCloneObject(value);\n          if (!isDeep) {\n            return isFlat\n              ? copySymbolsIn(value, baseAssignIn(result, value))\n              : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      }\n      // Check for circular references and return its corresponding clone.\n      stack || (stack = new Stack);\n      var stacked = stack.get(value);\n      if (stacked) {\n        return stacked;\n      }\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function(subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function(subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull\n        ? (isFlat ? getAllKeysIn : getAllKeys)\n        : (isFlat ? keysIn : keys);\n\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function(subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        }\n        // Recursively populate clone (susceptible to call stack limits).\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseConforms(source) {\n      var props = keys(source);\n      return function(object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if ((value === undefined && !(key in object)) || !predicate(value)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return setTimeout(function() { func.apply(undefined, args); }, wait);\n    }\n\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      }\n      else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n          result.push(value);\n        }\n        else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEach = createBaseEach(baseForOwn);\n\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function(value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined\n              ? (current === current && !isSymbol(current))\n              : comparator(current, computed)\n            )) {\n          var computed = current,\n              result = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n\n      start = toInteger(start);\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = (end === undefined || end > length) ? length : toInteger(end);\n      if (end < 0) {\n        end += length;\n      }\n      end = start > end ? 0 : toLength(end);\n      while (start < end) {\n        array[start++] = value;\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function(value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseFor = createBaseFor();\n\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n    var baseForRight = createBaseFor(true);\n\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function(key) {\n        return isFunction(object[key]);\n      });\n    }\n\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseGet(object, path) {\n      path = castPath(path, object);\n\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n      return (index && index == length) ? object : undefined;\n    }\n\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n      return (symToStringTag && symToStringTag in Object(value))\n        ? getRawTag(value)\n        : objectToString(value);\n    }\n\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n    function baseGt(value, other) {\n      return value > other;\n    }\n\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n          ? new SetCache(othIndex && array)\n          : undefined;\n      }\n      array = arrays[0];\n\n      var index = -1,\n          seen = caches[0];\n\n      outer:\n      while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (!(seen\n              ? cacheHas(seen, computed)\n              : includes(result, computed, comparator)\n            )) {\n          othIndex = othLength;\n          while (--othIndex) {\n            var cache = caches[othIndex];\n            if (!(cache\n                  ? cacheHas(cache, computed)\n                  : includes(arrays[othIndex], computed, comparator))\n                ) {\n              continue outer;\n            }\n          }\n          if (seen) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function(value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n        return value !== value && other !== other;\n      }\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n        objIsArr = true;\n        objIsObj = false;\n      }\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack);\n        return (objIsArr || isTypedArray(object))\n          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n\n          stack || (stack = new Stack);\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n      if (!isSameTag) {\n        return false;\n      }\n      stack || (stack = new Stack);\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n      object = Object(object);\n      while (index--) {\n        var data = matchData[index];\n        if ((noCustomizer && data[2])\n              ? data[1] !== object[data[0]]\n              : !(data[0] in object)\n            ) {\n          return false;\n        }\n      }\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack;\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n          if (!(result === undefined\n                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n                : result\n              )) {\n            return false;\n          }\n        }\n      }\n      return true;\n    }\n\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) &&\n        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n      if (value == null) {\n        return identity;\n      }\n      if (typeof value == 'object') {\n        return isArray(value)\n          ? baseMatchesProperty(value[0], value[1])\n          : baseMatches(value);\n      }\n      return property(value);\n    }\n\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n      var result = [];\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n    function baseLt(value, other) {\n      return value < other;\n    }\n\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n      return function(object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n      return function(object) {\n        var objValue = get(object, path);\n        return (objValue === undefined && objValue === srcValue)\n          ? hasIn(object, path)\n          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n      baseFor(source, function(srcValue, key) {\n        stack || (stack = new Stack);\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        }\n        else {\n          var newValue = customizer\n            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n            : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n      var newValue = customizer\n        ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n        : undefined;\n\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n        newValue = srcValue;\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          }\n          else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          }\n          else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          }\n          else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          }\n          else {\n            newValue = [];\n          }\n        }\n        else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          }\n          else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        }\n        else {\n          isCommon = false;\n        }\n      }\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n      assignMergeValue(object, key, newValue);\n    }\n\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n    function baseNth(array, n) {\n      var length = array.length;\n      if (!length) {\n        return;\n      }\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n    function baseOrderBy(collection, iteratees, orders) {\n      var index = -1;\n      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n      var result = baseMap(collection, function(value, key, collection) {\n        var criteria = arrayMap(iteratees, function(iteratee) {\n          return iteratee(value);\n        });\n        return { 'criteria': criteria, 'index': ++index, 'value': value };\n      });\n\n      return baseSortBy(result, function(object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function(value, path) {\n        return hasIn(object, path);\n      });\n    }\n\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n    function basePropertyDeep(path) {\n      return function(object) {\n        return baseGet(object, path);\n      };\n    }\n\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n          splice.call(array, fromIndex, 1);\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n      return array;\n    }\n\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n    function baseRepeat(string, n) {\n      var result = '';\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      }\n      // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n      do {\n        if (n % 2) {\n          result += string;\n        }\n        n = nativeFloor(n / 2);\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n          if (newValue === undefined) {\n            newValue = isObject(objValue)\n              ? objValue\n              : (isIndex(path[index + 1]) ? [] : {});\n          }\n        }\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n      return object;\n    }\n\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetData = !metaMap ? identity : function(func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var baseSetToString = !defineProperty ? identity : function(func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : (length + start);\n      }\n      end = end > length ? length : end;\n      if (end < 0) {\n        end += length;\n      }\n      length = start > end ? 0 : ((end - start) >>> 0);\n      start >>>= 0;\n\n      var result = Array(length);\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n    function baseSome(collection, predicate) {\n      var result;\n\n      baseEach(collection, function(value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = (low + high) >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) &&\n              (retHighest ? (computed <= value) : (computed < value))) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n        return high;\n      }\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n\n      var low = 0,\n          high = array == null ? 0 : array.length,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? (computed <= value) : (computed < value);\n        }\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      return +value;\n    }\n\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      }\n      else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n        if (set) {\n          return setToArray(set);\n        }\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache;\n      }\n      else {\n        seen = iteratee ? [] : result;\n      }\n      outer:\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        value = (comparator || value !== 0) ? value : 0;\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n          if (iteratee) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n        else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n          result.push(value);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) &&\n        predicate(array[index], index, array)) {}\n\n      return isDrop\n        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n    }\n\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n    function baseWrapperValue(value, actions) {\n      var result = value;\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n      return arrayReduce(actions, function(result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n      return result;\n    }\n\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    var castRest = baseRest;\n\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return (!start && end >= length) ? array : baseSlice(array, start, end);\n    }\n\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n    var clearTimeout = ctxClearTimeout || function(id) {\n      return root.clearTimeout(id);\n    };\n\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n      buffer.copy(result);\n      return result;\n    }\n\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n            (valIsNull && othIsDefined && othIsReflexive) ||\n            (!valIsDefined && othIsReflexive) ||\n            !valIsReflexive) {\n          return 1;\n        }\n        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n            (othIsNull && valIsDefined && valIsReflexive) ||\n            (!othIsDefined && valIsReflexive) ||\n            !othIsReflexive) {\n          return -1;\n        }\n      }\n      return 0;\n    }\n\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      }\n      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n      return object.index - other.index;\n    }\n\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n      return result;\n    }\n\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n      var offset = argsIndex;\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n\n      array || (array = Array(length));\n      while (++index < length) {\n        array[index] = source[index];\n      }\n      return array;\n    }\n\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n\n        var newValue = customizer\n          ? customizer(object[key], source[key], key, object, source)\n          : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n      return object;\n    }\n\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n    function createAggregator(setter, initializer) {\n      return function(collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n    function createAssigner(assigner) {\n      return baseRest(function(object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n\n        customizer = (assigner.length > 3 && typeof customizer == 'function')\n          ? (length--, customizer)\n          : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n        object = Object(object);\n        while (++index < length) {\n          var source = sources[index];\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n        return object;\n      });\n    }\n\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseEach(eachFunc, fromRight) {\n      return function(collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while ((fromRight ? index-- : ++index < length)) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n        return collection;\n      };\n    }\n\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n    function createBaseFor(fromRight) {\n      return function(object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n        return object;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n    function createCaseFirst(methodName) {\n      return function(string) {\n        string = toString(string);\n\n        var strSymbols = hasUnicode(string)\n          ? stringToArray(string)\n          : undefined;\n\n        var chr = strSymbols\n          ? strSymbols[0]\n          : string.charAt(0);\n\n        var trailing = strSymbols\n          ? castSlice(strSymbols, 1).join('')\n          : string.slice(1);\n\n        return chr[methodName]() + trailing;\n      };\n    }\n\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n    function createCompounder(callback) {\n      return function(string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCtor(Ctor) {\n      return function() {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n        switch (args.length) {\n          case 0: return new Ctor;\n          case 1: return new Ctor(args[0]);\n          case 2: return new Ctor(args[0], args[1]);\n          case 3: return new Ctor(args[0], args[1], args[2]);\n          case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args);\n\n        // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n          ? []\n          : replaceHolders(args, placeholder);\n\n        length -= holders.length;\n        if (length < arity) {\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, undefined,\n            args, holders, undefined, undefined, arity - length);\n        }\n        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n        return apply(fn, this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n    function createFind(findIndexFunc) {\n      return function(collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n          predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n        }\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n    function createFlow(fromRight) {\n      return flatRest(function(funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n        while (index--) {\n          var func = funcs[index];\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n        index = wrapper ? index : length;\n        while (++index < length) {\n          func = funcs[index];\n\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          if (data && isLaziable(data[0]) &&\n                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n                !data[4].length && data[9] == 1\n              ) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = (func.length == 1 && isLaziable(func))\n              ? wrapper[funcName]()\n              : wrapper.thru(func);\n          }\n        }\n        return function() {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n          return result;\n        };\n      });\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n        length -= holdersCount;\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(\n            func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n            args, newHolders, argPos, ary, arity - length\n          );\n        }\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n\n        length = args.length;\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n        return fn.apply(thisBinding, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n    function createInverter(setter, toIteratee) {\n      return function(object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n    function createMathOperation(operator, defaultValue) {\n      return function(value, other) {\n        var result;\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n        if (value !== undefined) {\n          result = value;\n        }\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n          result = operator(value, other);\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n    function createOver(arrayFunc) {\n      return flatRest(function(iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function(args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function(iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n\n      var charsLength = chars.length;\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars)\n        ? castSlice(stringToArray(result), 0, length).join('')\n        : result.slice(0, length);\n    }\n\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n      return wrapper;\n    }\n\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n    function createRange(fromRight) {\n      return function(start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        }\n        // Ensure the sign of `-0` is preserved.\n        start = toFinite(start);\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n    function createRelationalOperation(operator) {\n      return function(value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n        return operator(value, other);\n      };\n    }\n\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n\n      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n      var newData = [\n        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n        newHoldersRight, argPos, ary, arity\n      ];\n\n      var result = wrapFunc.apply(undefined, newData);\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function(number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n        return func(number);\n      };\n    }\n\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n      return new Set(values);\n    };\n\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n    function createToPairs(keysFunc) {\n      return function(object) {\n        var tag = getTag(object);\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var length = partials ? partials.length : 0;\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n\n        partials = holders = undefined;\n      }\n      var data = isBindKey ? undefined : getData(func);\n\n      var newData = [\n        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n        argPos, ary, arity\n      ];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined\n        ? (isBindKey ? 0 : func.length)\n        : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined ||\n          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n        return srcValue;\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n      return objValue;\n    }\n\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(array);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var index = -1,\n          result = true,\n          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n      stack.set(array, other);\n      stack.set(other, array);\n\n      // Ignore non-index properties.\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, arrValue, index, other, array, stack)\n            : customizer(arrValue, othValue, index, array, other, stack);\n        }\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n          result = false;\n          break;\n        }\n        // Recursively compare arrays (susceptible to call stack limits).\n        if (seen) {\n          if (!arraySome(other, function(othValue, othIndex) {\n                if (!cacheHas(seen, othIndex) &&\n                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n                  return seen.push(othIndex);\n                }\n              })) {\n            result = false;\n            break;\n          }\n        } else if (!(\n              arrValue === othValue ||\n                equalFunc(arrValue, othValue, bitmask, customizer, stack)\n            )) {\n          result = false;\n          break;\n        }\n      }\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if ((object.byteLength != other.byteLength) ||\n              (object.byteOffset != other.byteOffset)) {\n            return false;\n          }\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if ((object.byteLength != other.byteLength) ||\n              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == (other + '');\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          }\n          // Assume cyclic values are equal.\n          var stacked = stack.get(object);\n          if (stacked) {\n            return stacked == other;\n          }\n          bitmask |= COMPARE_UNORDERED_FLAG;\n\n          // Recursively compare objects (susceptible to call stack limits).\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n      }\n      return false;\n    }\n\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n      var index = objLength;\n      while (index--) {\n        var key = objProps[index];\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      }\n      // Assume cyclic values are equal.\n      var stacked = stack.get(object);\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n\n      var skipCtor = isPartial;\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial\n            ? customizer(othValue, objValue, key, other, object, stack)\n            : customizer(objValue, othValue, key, object, other, stack);\n        }\n        // Recursively compare objects (susceptible to call stack limits).\n        if (!(compared === undefined\n              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n              : compared\n            )) {\n          result = false;\n          break;\n        }\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor;\n\n        // Non `Object` object instances with different constructors are not equal.\n        if (objCtor != othCtor &&\n            ('constructor' in object && 'constructor' in other) &&\n            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n              typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n    var getData = !metaMap ? noop : function(func) {\n      return metaMap.get(func);\n    };\n\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n    function getFuncName(func) {\n      var result = (func.name + ''),\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key)\n        ? data[typeof key == 'string' ? 'string' : 'hash']\n        : data.map;\n    }\n\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n      if (object == null) {\n        return [];\n      }\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function(symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n      var result = [];\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n      return result;\n    };\n\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n    var getTag = baseGetTag;\n\n    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n        (Map && getTag(new Map) != mapTag) ||\n        (Promise && getTag(Promise.resolve()) != promiseTag) ||\n        (Set && getTag(new Set) != setTag) ||\n        (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n      getTag = function(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString: return dataViewTag;\n            case mapCtorString: return mapTag;\n            case promiseCtorString: return promiseTag;\n            case setCtorString: return setTag;\n            case weakMapCtorString: return weakMapTag;\n          }\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':      start += size; break;\n          case 'dropRight': end -= size; break;\n          case 'take':      end = nativeMin(end, start + size); break;\n          case 'takeRight': start = nativeMax(start, end - size); break;\n        }\n      }\n      return { 'start': start, 'end': end };\n    }\n\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n        object = object[key];\n      }\n      if (result || ++index != length) {\n        return result;\n      }\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) &&\n        (isArray(object) || isArguments(object));\n    }\n\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length);\n\n      // Add properties assigned by `RegExp#exec`.\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n      return result;\n    }\n\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneObject(object) {\n      return (typeof object.constructor == 'function' && !isPrototype(object))\n        ? baseCreate(getPrototype(object))\n        : {};\n    }\n\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag: case float64Tag:\n        case int8Tag: case int16Tag: case int32Tag:\n        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor;\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor;\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n      if (!length) {\n        return source;\n      }\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) ||\n        !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n    function isIndex(value, length) {\n      var type = typeof value;\n      length = length == null ? MAX_SAFE_INTEGER : length;\n\n      return !!length &&\n        (type == 'number' ||\n          (type != 'symbol' && reIsUint.test(value))) &&\n            (value > -1 && value % 1 == 0 && value < length);\n    }\n\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n      var type = typeof index;\n      if (type == 'number'\n            ? (isArrayLike(object) && isIndex(index, object.length))\n            : (type == 'string' && index in object)\n          ) {\n        return eq(object[index], value);\n      }\n      return false;\n    }\n\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n      var type = typeof value;\n      if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n          value == null || isSymbol(value)) {\n        return true;\n      }\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n        (object != null && value in Object(object));\n    }\n\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n    function isKeyable(value) {\n      var type = typeof value;\n      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n        ? (value !== '__proto__')\n        : (value === null);\n    }\n\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n      if (func === other) {\n        return true;\n      }\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n    function isMasked(func) {\n      return !!maskSrcKey && (maskSrcKey in func);\n    }\n\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n      return value === proto;\n    }\n\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n    function matchesStrictComparable(key, srcValue) {\n      return function(object) {\n        if (object == null) {\n          return false;\n        }\n        return object[key] === srcValue &&\n          (srcValue !== undefined || (key in Object(object)));\n      };\n    }\n\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n    function memoizeCapped(func) {\n      var result = memoize(func, function(key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n        return key;\n      });\n\n      var cache = result.cache;\n      return result;\n    }\n\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n      var isCombo =\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n      // Exit early if metadata can't be merged.\n      if (!(isCommon || isCombo)) {\n        return data;\n      }\n      // Use source `thisArg` if available.\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2];\n        // Set when currying a bound function.\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      }\n      // Compose partial arguments.\n      var value = source[3];\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      }\n      // Compose partial right arguments.\n      value = source[5];\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      }\n      // Use source `argPos` if available.\n      value = source[7];\n      if (value) {\n        data[7] = value;\n      }\n      // Use source `ary` if it's smaller.\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      }\n      // Use source `arity` if one is not provided.\n      if (data[9] == null) {\n        data[9] = source[9];\n      }\n      // Use source `func` and merge bitmasks.\n      data[0] = source[0];\n      data[1] = newBitmask;\n\n      return data;\n    }\n\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n    function nativeKeysIn(object) {\n      var result = [];\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n      return function() {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n        index = -1;\n        var otherArgs = Array(start + 1);\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n      return array;\n    }\n\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n    var setData = shortOut(baseSetData);\n\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n    var setTimeout = ctxSetTimeout || function(func, wait) {\n      return root.setTimeout(func, wait);\n    };\n\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n    var setToString = shortOut(baseSetToString);\n\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = (reference + '');\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n\n      return function() {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n\n        lastCalled = stamp;\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n        return func.apply(undefined, arguments);\n      };\n    }\n\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n\n      size = size === undefined ? length : size;\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n\n        array[rand] = array[index];\n        array[index] = value;\n      }\n      array.length = size;\n      return array;\n    }\n\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n    var stringToPath = memoizeCapped(function(string) {\n      var result = [];\n      if (string.charCodeAt(0) === 46 /* . */) {\n        result.push('');\n      }\n      string.replace(rePropName, function(match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n      });\n      return result;\n    });\n\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n      var result = (value + '');\n      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n    }\n\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n        try {\n          return (func + '');\n        } catch (e) {}\n      }\n      return '';\n    }\n\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function(pair) {\n        var value = '_.' + pair[0];\n        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__  = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n    function chunk(array, size, guard) {\n      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n      var length = array == null ? 0 : array.length;\n      if (!length || size < 1) {\n        return [];\n      }\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, (index += size));\n      }\n      return result;\n    }\n\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n      return result;\n    }\n\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n    function concat() {\n      var length = arguments.length;\n      if (!length) {\n        return [];\n      }\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n    var difference = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var differenceBy = baseRest(function(array, values) {\n      var iteratee = last(values);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n    var differenceWith = baseRest(function(array, values) {\n      var comparator = last(values);\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n      return isArrayLikeObject(array)\n        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n    function dropWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), true)\n        : [];\n    }\n\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n      return baseFill(array, value, start, end);\n    }\n\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length - 1;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0\n          ? nativeMax(length + index, 0)\n          : nativeMin(index, length - 1);\n      }\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n      return result;\n    }\n\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n    function head(array) {\n      return (array && array.length) ? array[0] : undefined;\n    }\n\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n      return baseIndexOf(array, value, index);\n    }\n\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n    var intersection = baseRest(function(arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped)\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n    var intersectionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, getIteratee(iteratee, 2))\n        : [];\n    });\n\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n    var intersectionWith = baseRest(function(arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      if (comparator) {\n        mapped.pop();\n      }\n      return (mapped.length && mapped[0] === arrays[0])\n        ? baseIntersection(mapped, undefined, comparator)\n        : [];\n    });\n\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return -1;\n      }\n      var index = length;\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n      return value === value\n        ? strictLastIndexOf(array, value, index)\n        : baseFindIndex(array, baseIsNaN, index, true);\n    }\n\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n    function nth(array, n) {\n      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n    }\n\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    var pull = baseRest(pullAll);\n\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n    function pullAll(array, values) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values)\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n    function pullAllBy(array, values, iteratee) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, getIteratee(iteratee, 2))\n        : array;\n    }\n\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n    function pullAllWith(array, values, comparator) {\n      return (array && array.length && values && values.length)\n        ? basePullAll(array, values, undefined, comparator)\n        : array;\n    }\n\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n    var pullAt = flatRest(function(array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n\n      basePullAt(array, arrayMap(indexes, function(index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n\n      return result;\n    });\n\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n    function remove(array, predicate) {\n      var result = [];\n      if (!(array && array.length)) {\n        return result;\n      }\n      var index = -1,\n          indexes = [],\n          length = array.length;\n\n      predicate = getIteratee(predicate, 3);\n      while (++index < length) {\n        var value = array[index];\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n      basePullAt(array, indexes);\n      return result;\n    }\n\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      }\n      else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n      return baseSlice(array, start, end);\n    }\n\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value);\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n      return -1;\n    }\n\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n    function sortedUniq(array) {\n      return (array && array.length)\n        ? baseSortedUniq(array)\n        : [];\n    }\n\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n    function sortedUniqBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSortedUniq(array, getIteratee(iteratee, 2))\n        : [];\n    }\n\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n      if (!length) {\n        return [];\n      }\n      n = (guard || n === undefined) ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n    function takeRightWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3), false, true)\n        : [];\n    }\n\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n    function takeWhile(array, predicate) {\n      return (array && array.length)\n        ? baseWhile(array, getIteratee(predicate, 3))\n        : [];\n    }\n\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n    var union = baseRest(function(arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    var unionBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var unionWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n    function uniq(array) {\n      return (array && array.length) ? baseUniq(array) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n    function uniqBy(array, iteratee) {\n      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var length = 0;\n      array = arrayFilter(array, function(group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function(index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n      var result = unzip(array);\n      if (iteratee == null) {\n        return result;\n      }\n      return arrayMap(result, function(group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n    var without = baseRest(function(array, values) {\n      return isArrayLikeObject(array)\n        ? baseDifference(array, values)\n        : [];\n    });\n\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n    var xor = baseRest(function(arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n    var xorBy = baseRest(function(arrays) {\n      var iteratee = last(arrays);\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n    var xorWith = baseRest(function(arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n    var zip = baseRest(unzip);\n\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n    var zipWith = baseRest(function(arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n    var wrapperAt = flatRest(function(paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function(object) { return baseAt(object, paths); };\n\n      if (length > 1 || this.__actions__.length ||\n          !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n      value = value.slice(start, +start + (length ? 1 : 0));\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n      return new LodashWrapper(value, this.__chain__).thru(function(array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n        return array;\n      });\n    });\n\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n    function wrapperChain() {\n      return chain(this);\n    }\n\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n\n      return { 'done': done, 'value': value };\n    }\n\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n    function wrapperToIterator() {\n      return this;\n    }\n\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n      previous.__wrapped__ = value;\n      return result;\n    }\n\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n        wrapped = wrapped.reverse();\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n      return this.thru(reverse);\n    }\n\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n    var countBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     */\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n    var find = createFind(findIndex);\n\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n    var findLast = createFind(findLastIndex);\n\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n    var groupBy = createAggregator(function(result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n      var length = collection.length;\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n      return isString(collection)\n        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n    }\n\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n    var invokeMap = baseRest(function(collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n\n      baseEach(collection, function(value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n    var keyBy = createAggregator(function(result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n      orders = guard ? undefined : orders;\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n      return baseOrderBy(collection, iteratees, orders);\n    }\n\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n    var partition = createAggregator(function(result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function() { return [[], []]; });\n\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n    function sampleSize(collection, n, guard) {\n      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n      var tag = getTag(collection);\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n      return baseKeys(collection).length;\n    }\n\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n      return func(collection, getIteratee(predicate, 3));\n    }\n\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n     */\n    var sortBy = baseRest(function(collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n      var length = iteratees.length;\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n    var now = ctxNow || function() {\n      return root.Date.now();\n    };\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = (func && n == null) ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n    function before(n, func) {\n      var result;\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      n = toInteger(n);\n      return function() {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n        if (n <= 1) {\n          func = undefined;\n        }\n        return result;\n      };\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n    var bind = baseRest(function(func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n    var bindKey = baseRest(function(object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      wait = toNumber(wait) || 0;\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time;\n        // Start the timer for the trailing edge.\n        timerId = setTimeout(timerExpired, wait);\n        // Invoke the leading edge.\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n\n        return maxing\n          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n          : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime;\n\n        // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n      }\n\n      function timerExpired() {\n        var time = now();\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        }\n        // Restart the timer.\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined;\n\n        // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n        return result;\n      }\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n    var defer = baseRest(function(func, args) {\n      return baseDelay(func, 1, args);\n    });\n\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n    var delay = baseRest(function(func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      var memoized = function() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n      memoized.cache = new (memoize.Cache || MapCache);\n      return memoized;\n    }\n\n    // Expose `MapCache`.\n    memoize.Cache = MapCache;\n\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      return function() {\n        var args = arguments;\n        switch (args.length) {\n          case 0: return !predicate.call(this);\n          case 1: return !predicate.call(this, args[0]);\n          case 2: return !predicate.call(this, args[0], args[1]);\n          case 3: return !predicate.call(this, args[0], args[1], args[2]);\n        }\n        return !predicate.apply(this, args);\n      };\n    }\n\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n    function once(func) {\n      return before(2, func);\n    }\n\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n    var overArgs = castRest(function(func, transforms) {\n      transforms = (transforms.length == 1 && isArray(transforms[0]))\n        ? arrayMap(transforms[0], baseUnary(getIteratee()))\n        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n      var funcsLength = transforms.length;\n      return baseRest(function(args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n        return apply(func, this, args);\n      });\n    });\n\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n    var partial = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n    var partialRight = baseRest(function(func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n    var rearg = flatRest(function(func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function(args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n        return apply(func, this, otherArgs);\n      });\n    }\n\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n    function unary(func) {\n      return ary(func, 1);\n    }\n\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n    function eq(value, other) {\n      return value === other || (value !== value && other !== other);\n    }\n\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n    var gt = createRelationalOperation(baseGt);\n\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n    var gte = createRelationalOperation(function(value, other) {\n      return value >= other;\n    });\n\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n        !propertyIsEnumerable.call(value, 'callee');\n    };\n\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n    var isArray = Array.isArray;\n\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n    function isBoolean(value) {\n      return value === true || value === false ||\n        (isObjectLike(value) && baseGetTag(value) == boolTag);\n    }\n\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n    var isBuffer = nativeIsBuffer || stubFalse;\n\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n      if (isArrayLike(value) &&\n          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n            isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n      var tag = getTag(value);\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n      return true;\n    }\n\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag ||\n        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n    }\n\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      }\n      // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n    function isLength(value) {\n      return typeof value == 'number' &&\n        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n    function isObject(value) {\n      var type = typeof value;\n      return value != null && (type == 'object' || type == 'function');\n    }\n\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n    function isObjectLike(value) {\n      return value != null && typeof value == 'object';\n    }\n\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n      return baseIsNative(value);\n    }\n\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n    function isNull(value) {\n      return value === null;\n    }\n\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n    function isNil(value) {\n      return value == null;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n    function isNumber(value) {\n      return typeof value == 'number' ||\n        (isObjectLike(value) && baseGetTag(value) == numberTag);\n    }\n\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n      var proto = getPrototype(value);\n      if (proto === null) {\n        return true;\n      }\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n        funcToString.call(Ctor) == objectCtorString;\n    }\n\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n    function isString(value) {\n      return typeof value == 'string' ||\n        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n    function isSymbol(value) {\n      return typeof value == 'symbol' ||\n        (isObjectLike(value) && baseGetTag(value) == symbolTag);\n    }\n\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n    function isUndefined(value) {\n      return value === undefined;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n    var lt = createRelationalOperation(baseLt);\n\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n    var lte = createRelationalOperation(function(value, other) {\n      return value <= other;\n    });\n\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n      return func(value);\n    }\n\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n      value = toNumber(value);\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = (value < 0 ? -1 : 1);\n        return sign * MAX_INTEGER;\n      }\n      return value === value ? value : 0;\n    }\n\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n\n      return result === result ? (remainder ? result - remainder : result) : 0;\n    }\n\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n      if (isSymbol(value)) {\n        return NAN;\n      }\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? (other + '') : other;\n      }\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n      value = value.replace(reTrim, '');\n      var isBinary = reIsBinary.test(value);\n      return (isBinary || reIsOctal.test(value))\n        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n        : (reIsBadHex.test(value) ? NAN : +value);\n    }\n\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n    function toSafeInteger(value) {\n      return value\n        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n        : (value === 0 ? value : 0);\n    }\n\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var assign = createAssigner(function(object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n    var assignIn = createAssigner(function(object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n    var at = flatRest(baseAt);\n\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n    var defaults = baseRest(function(object, sources) {\n      object = Object(object);\n\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined ||\n              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n    var defaultsDeep = baseRest(function(args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n    function forIn(object, iteratee) {\n      return object == null\n        ? object\n        : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n    function forInRight(object, iteratee) {\n      return object == null\n        ? object\n        : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n    var invert = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n    var invertBy = createInverter(function(result, value, key) {\n      if (value != null &&\n          typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n    var invoke = baseRest(baseInvoke);\n\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n\n      baseForOwn(object, function(value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n    var merge = createAssigner(function(object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n    var omit = flatRest(function(object, paths) {\n      var result = {};\n      if (object == null) {\n        return result;\n      }\n      var isDeep = false;\n      paths = arrayMap(paths, function(path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n      var length = paths.length;\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n      return result;\n    });\n\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    var pick = flatRest(function(object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n      var props = arrayMap(getAllKeysIn(object), function(prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function(value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n\n      var index = -1,\n          length = path.length;\n\n      // Ensure the loop is entered when path is empty.\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n        object = isFunction(value) ? value.call(object) : value;\n      }\n      return object;\n    }\n\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n    var toPairs = createToPairs(keys);\n\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n    var toPairsIn = createToPairs(keysIn);\n\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n      iteratee = getIteratee(iteratee, 4);\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor : [];\n        }\n        else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        }\n        else {\n          accumulator = {};\n        }\n      }\n      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n      return baseClamp(toNumber(number), lower, upper);\n    }\n\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n    function inRange(number, start, end) {\n      start = toFinite(start);\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        }\n        else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      }\n      else {\n        lower = toFinite(lower);\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n      }\n      return baseRandom(lower, upper);\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n    var camelCase = createCompounder(function(result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n\n      var length = string.length;\n      position = position === undefined\n        ? length\n        : baseClamp(toInteger(position), 0, length);\n\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n    function escape(string) {\n      string = toString(string);\n      return (string && reHasUnescapedHtml.test(string))\n        ? string.replace(reUnescapedHtml, escapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n    function escapeRegExp(string) {\n      string = toString(string);\n      return (string && reHasRegExpChar.test(string))\n        ? string.replace(reRegExpChar, '\\\\$&')\n        : string;\n    }\n\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n    var kebabCase = createCompounder(function(result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n    var lowerCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n    var lowerFirst = createCaseFirst('toLowerCase');\n\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      if (!length || strLength >= length) {\n        return string;\n      }\n      var mid = (length - strLength) / 2;\n      return (\n        createPadding(nativeFloor(mid), chars) +\n        string +\n        createPadding(nativeCeil(mid), chars)\n      );\n    }\n\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (string + createPadding(length - strLength, chars))\n        : string;\n    }\n\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n\n      var strLength = length ? stringSize(string) : 0;\n      return (length && strLength < length)\n        ? (createPadding(length - strLength, chars) + string)\n        : string;\n    }\n\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n    function repeat(string, n, guard) {\n      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n      return baseRepeat(toString(string), n);\n    }\n\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n    var snakeCase = createCompounder(function(result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n      if (!limit) {\n        return [];\n      }\n      string = toString(string);\n      if (string && (\n            typeof separator == 'string' ||\n            (separator != null && !isRegExp(separator))\n          )) {\n        separator = baseToString(separator);\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n      return string.split(separator, limit);\n    }\n\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n    var startCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null\n        ? 0\n        : baseClamp(toInteger(position), 0, string.length);\n\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\";\n\n      // Compile the regexp to match each delimiter.\n      var reDelimiters = RegExp(\n        (options.escape || reNoMatch).source + '|' +\n        interpolate.source + '|' +\n        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n        (options.evaluate || reNoMatch).source + '|$'\n      , 'g');\n\n      // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n      // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n      var sourceURL = '//# sourceURL=' +\n        (hasOwnProperty.call(options, 'sourceURL')\n          ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n          : ('lodash.templateSources[' + (++templateCounter) + ']')\n        ) + '\\n';\n\n      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue);\n\n        // Escape characters that can't be included in string literals.\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n        // Replace delimiters with snippets.\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n        index = offset + match.length;\n\n        // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n        return match;\n      });\n\n      source += \"';\\n\";\n\n      // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      // Like with sourceURL, we take care to not check the option's prototype,\n      // as this configuration is a code injection vector.\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      }\n      // Cleanup code by stripping empty strings.\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n        .replace(reEmptyStringMiddle, '$1')\n        .replace(reEmptyStringTrailing, '$1;');\n\n      // Frame code as the function body.\n      source = 'function(' + (variable || 'obj') + ') {\\n' +\n        (variable\n          ? ''\n          : 'obj || (obj = {});\\n'\n        ) +\n        \"var __t, __p = ''\" +\n        (isEscaping\n           ? ', __e = _.escape'\n           : ''\n        ) +\n        (isEvaluating\n          ? ', __j = Array.prototype.join;\\n' +\n            \"function print() { __p += __j.call(arguments, '') }\\n\"\n          : ';\\n'\n        ) +\n        source +\n        'return __p\\n}';\n\n      var result = attempt(function() {\n        return Function(importsKeys, sourceURL + 'return ' + source)\n          .apply(undefined, importsValues);\n      });\n\n      // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n      result.source = source;\n      if (isError(result)) {\n        throw result;\n      }\n      return result;\n    }\n\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n    function trim(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrim, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n      return castSlice(strSymbols, start, end).join('');\n    }\n\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimEnd, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n      return castSlice(strSymbols, 0, end).join('');\n    }\n\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n\n      return castSlice(strSymbols, start).join('');\n    }\n\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n      string = toString(string);\n\n      var strLength = string.length;\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n      if (length >= strLength) {\n        return string;\n      }\n      var end = length - stringSize(omission);\n      if (end < 1) {\n        return omission;\n      }\n      var result = strSymbols\n        ? castSlice(strSymbols, 0, end).join('')\n        : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n      if (strSymbols) {\n        end += (result.length - end);\n      }\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n          separator.lastIndex = 0;\n          while ((match = separator.exec(substring))) {\n            var newEnd = match.index;\n          }\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n      return result + omission;\n    }\n\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n    function unescape(string) {\n      string = toString(string);\n      return (string && reHasEscapedHtml.test(string))\n        ? string.replace(reEscapedHtml, unescapeHtmlChar)\n        : string;\n    }\n\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n    var upperCase = createCompounder(function(result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n    var upperFirst = createCaseFirst('toUpperCase');\n\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n      return string.match(pattern) || [];\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n    var attempt = baseRest(function(func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n    var bindAll = flatRest(function(object, methodNames) {\n      arrayEach(methodNames, function(key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n\n      pairs = !length ? [] : arrayMap(pairs, function(pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n        return [toIteratee(pair[0]), pair[1]];\n      });\n\n      return baseRest(function(args) {\n        var index = -1;\n        while (++index < length) {\n          var pair = pairs[index];\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n    function constant(value) {\n      return function() {\n        return value;\n      };\n    }\n\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n    function defaultTo(value, defaultValue) {\n      return (value == null || value !== value) ? defaultValue : value;\n    }\n\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flow = createFlow();\n\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n    var flowRight = createFlow(true);\n\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n    function identity(value) {\n      return value;\n    }\n\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     */\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     */\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n    var method = baseRest(function(path, args) {\n      return function(object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n    var methodOf = baseRest(function(object, args) {\n      return function(path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null &&\n          !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n\n      arrayEach(methodNames, function(methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n        if (isFunc) {\n          object.prototype[methodName] = function() {\n            var chainAll = this.__chain__;\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n\n              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n              result.__chain__ = chainAll;\n              return result;\n            }\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n\n      return object;\n    }\n\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n      return this;\n    }\n\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n    function noop() {\n      // No operation performed.\n    }\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function(args) {\n        return baseNth(args, n);\n      });\n    }\n\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n    var over = createOver(arrayMap);\n\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overEvery = createOver(arrayEvery);\n\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     */\n    var overSome = createOver(arraySome);\n\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n    function propertyOf(object) {\n      return function(path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n    var range = createRange();\n\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n    var rangeRight = createRange(true);\n\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n    function stubArray() {\n      return [];\n    }\n\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n    function stubFalse() {\n      return false;\n    }\n\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n    function stubObject() {\n      return {};\n    }\n\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n    function stubString() {\n      return '';\n    }\n\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n    function stubTrue() {\n      return true;\n    }\n\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n    function times(n, iteratee) {\n      n = toInteger(n);\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n\n      var result = baseTimes(length, iteratee);\n      while (++index < n) {\n        iteratee(index);\n      }\n      return result;\n    }\n\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n    var add = createMathOperation(function(augend, addend) {\n      return augend + addend;\n    }, 0);\n\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n    var ceil = createRound('ceil');\n\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n    var divide = createMathOperation(function(dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n    var floor = createRound('floor');\n\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n    function max(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseGt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n    function maxBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n        : undefined;\n    }\n\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n    function min(array) {\n      return (array && array.length)\n        ? baseExtremum(array, identity, baseLt)\n        : undefined;\n    }\n\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n    function minBy(array, iteratee) {\n      return (array && array.length)\n        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n        : undefined;\n    }\n\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n    var multiply = createMathOperation(function(multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n    var round = createRound('round');\n\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n    var subtract = createMathOperation(function(minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n    function sum(array) {\n      return (array && array.length)\n        ? baseSum(array, identity)\n        : 0;\n    }\n\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n    function sumBy(array, iteratee) {\n      return (array && array.length)\n        ? baseSum(array, getIteratee(iteratee, 2))\n        : 0;\n    }\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return wrapped values in chain sequences.\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith;\n\n    // Add aliases.\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith;\n\n    // Add methods to `lodash.prototype`.\n    mixin(lodash, lodash);\n\n    /*------------------------------------------------------------------------*/\n\n    // Add methods that return unwrapped values in chain sequences.\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst;\n\n    // Add aliases.\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n\n    mixin(lodash, (function() {\n      var source = {};\n      baseForOwn(lodash, function(func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }()), { 'chain': false });\n\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n    lodash.VERSION = VERSION;\n\n    // Assign default placeholders.\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n      lodash[methodName].placeholder = lodash;\n    });\n\n    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n    arrayEach(['drop', 'take'], function(methodName, index) {\n      LazyWrapper.prototype[methodName] = function(n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n        var result = (this.__filtered__ && !index)\n          ? new LazyWrapper(this)\n          : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    });\n\n    // Add `LazyWrapper` methods that accept an `iteratee` value.\n    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function(iteratee) {\n        var result = this.clone();\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.head` and `_.last`.\n    arrayEach(['head', 'last'], function(methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this[takeName](1).value()[0];\n      };\n    });\n\n    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n    arrayEach(['initial', 'tail'], function(methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function() {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function() {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function(predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function(predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n      return this.map(function(value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function(predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function(start, end) {\n      start = toInteger(start);\n\n      var result = this;\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function(predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function() {\n      return this.take(MAX_ARRAY_LENGTH);\n    };\n\n    // Add `LazyWrapper` methods to `lodash.prototype`.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n      lodash.prototype[methodName] = function() {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return (isTaker && chainAll) ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n          return new LodashWrapper(result, chainAll);\n        }\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n        result = this.thru(interceptor);\n        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n      };\n    });\n\n    // Add `Array` methods to `lodash.prototype`.\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function() {\n        var args = arguments;\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n        return this[chainName](function(value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    });\n\n    // Map minified method names to their real names.\n    baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n      var lodashFunc = lodash[methodName];\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n        realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n      }\n    });\n\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }];\n\n    // Add methods to `LazyWrapper`.\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue;\n\n    // Add chain sequence methods to the `lodash` wrapper.\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n    // Add lazy aliases.\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n    return lodash;\n  });\n\n  /*--------------------------------------------------------------------------*/\n\n  // Export lodash.\n  var _ = runInContext();\n\n  // Some AMD build optimizers, like r.js, check for condition patterns like:\n  if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _;\n\n    // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n    define(function() {\n      return _;\n    });\n  }\n  // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n    // Export for Node.js.\n    (freeModule.exports = _)._ = _;\n    // Export for CommonJS support.\n    freeExports._ = _;\n  }\n  else {\n    // Export to the global object.\n    root._ = _;\n  }\n}.call(this));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/lodash/lodash.js\n// module id = 229\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar Subject_1 = require(\"rxjs/Subject\");\nvar TreeDragDropService = /** @class */ (function () {\n    function TreeDragDropService() {\n        this.dragStartSource = new Subject_1.Subject();\n        this.dragStopSource = new Subject_1.Subject();\n        this.dragStart$ = this.dragStartSource.asObservable();\n        this.dragStop$ = this.dragStopSource.asObservable();\n    }\n    TreeDragDropService.prototype.startDrag = function (event) {\n        this.dragStartSource.next(event);\n    };\n    TreeDragDropService.prototype.stopDrag = function (event) {\n        this.dragStopSource.next(event);\n    };\n    TreeDragDropService = __decorate([\n        core_1.Injectable()\n    ], TreeDragDropService);\n    return TreeDragDropService;\n}());\nexports.TreeDragDropService = TreeDragDropService;\n//# sourceMappingURL=treedragdropservice.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/common/treedragdropservice.js\n// module id = 230\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar Subject_1 = require(\"rxjs/Subject\");\nvar ConfirmationService = /** @class */ (function () {\n    function ConfirmationService() {\n        this.requireConfirmationSource = new Subject_1.Subject();\n        this.acceptConfirmationSource = new Subject_1.Subject();\n        this.requireConfirmation$ = this.requireConfirmationSource.asObservable();\n        this.accept = this.acceptConfirmationSource.asObservable();\n    }\n    ConfirmationService.prototype.confirm = function (confirmation) {\n        this.requireConfirmationSource.next(confirmation);\n        return this;\n    };\n    ConfirmationService.prototype.onAccept = function () {\n        this.acceptConfirmationSource.next();\n    };\n    ConfirmationService = __decorate([\n        core_1.Injectable()\n    ], ConfirmationService);\n    return ConfirmationService;\n}());\nexports.ConfirmationService = ConfirmationService;\n//# sourceMappingURL=confirmationservice.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/common/confirmationservice.js\n// module id = 231\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar inputtext_1 = require(\"../inputtext/inputtext\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar forms_1 = require(\"@angular/forms\");\nexports.CHIPS_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Chips; }),\n    multi: true\n};\nvar Chips = /** @class */ (function () {\n    function Chips(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.onAdd = new core_1.EventEmitter();\n        this.onRemove = new core_1.EventEmitter();\n        this.allowDuplicate = true;\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Chips.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Chips.prototype.onClick = function (event) {\n        this.inputViewChild.nativeElement.focus();\n    };\n    Chips.prototype.writeValue = function (value) {\n        this.value = value;\n        this.updateMaxedOut();\n    };\n    Chips.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Chips.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Chips.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Chips.prototype.resolveFieldData = function (data, field) {\n        if (data && field) {\n            if (field.indexOf('.') == -1) {\n                return data[field];\n            }\n            else {\n                var fields = field.split('.');\n                var value = data;\n                for (var i = 0, len = fields.length; i < len; ++i) {\n                    value = value[fields[i]];\n                }\n                return value;\n            }\n        }\n        else {\n            return null;\n        }\n    };\n    Chips.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        this.onFocus.emit(event);\n    };\n    Chips.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        if (this.addOnBlur && this.inputViewChild.nativeElement.value) {\n            this.addItem(event, this.inputViewChild.nativeElement.value);\n            this.inputViewChild.nativeElement.value = '';\n        }\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    };\n    Chips.prototype.removeItem = function (event, index) {\n        if (this.disabled) {\n            return;\n        }\n        var removedItem = this.value[index];\n        this.value = this.value.filter(function (val, i) { return i != index; });\n        this.onModelChange(this.value);\n        this.onRemove.emit({\n            originalEvent: event,\n            value: removedItem\n        });\n        this.updateMaxedOut();\n    };\n    Chips.prototype.addItem = function (event, item) {\n        this.value = this.value || [];\n        if (item && item.trim().length) {\n            if (this.allowDuplicate || this.value.indexOf(item) === -1) {\n                this.value = this.value.concat([item]);\n                this.onModelChange(this.value);\n                this.onAdd.emit({\n                    originalEvent: event,\n                    value: item\n                });\n            }\n        }\n        this.updateMaxedOut();\n    };\n    Chips.prototype.onKeydown = function (event) {\n        switch (event.which) {\n            //backspace\n            case 8:\n                if (this.inputViewChild.nativeElement.value.length === 0 && this.value && this.value.length > 0) {\n                    this.value = this.value.slice();\n                    var removedItem = this.value.pop();\n                    this.onModelChange(this.value);\n                    this.onRemove.emit({\n                        originalEvent: event,\n                        value: removedItem\n                    });\n                }\n                break;\n            //enter\n            case 13:\n                this.addItem(event, this.inputViewChild.nativeElement.value);\n                this.inputViewChild.nativeElement.value = '';\n                event.preventDefault();\n                break;\n            case 9:\n                if (this.addOnTab && this.inputViewChild.nativeElement.value !== '') {\n                    this.addItem(event, this.inputViewChild.nativeElement.value);\n                    this.inputViewChild.nativeElement.value = '';\n                    event.preventDefault();\n                }\n                break;\n            default:\n                if (this.max && this.value && this.max === this.value.length) {\n                    event.preventDefault();\n                }\n                break;\n        }\n    };\n    Chips.prototype.updateMaxedOut = function () {\n        if (this.inputViewChild && this.inputViewChild.nativeElement) {\n            if (this.max && this.value && this.max === this.value.length)\n                this.inputViewChild.nativeElement.disabled = true;\n            else\n                this.inputViewChild.nativeElement.disabled = false;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Chips.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Chips.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Chips.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Chips.prototype, \"onAdd\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Chips.prototype, \"onRemove\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Chips.prototype, \"field\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Chips.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Chips.prototype, \"max\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Chips.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Chips.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Chips.prototype, \"allowDuplicate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Chips.prototype, \"inputStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Chips.prototype, \"inputStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Chips.prototype, \"addOnTab\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Chips.prototype, \"addOnBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Chips.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Chips.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.ViewChild('inputtext'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Chips.prototype, \"inputViewChild\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Chips.prototype, \"templates\", void 0);\n    Chips = __decorate([\n        core_1.Component({\n            selector: 'p-chips',\n            template: \"\\n        <div [ngClass]=\\\"'ui-chips ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" (click)=\\\"onClick($event)\\\">\\n            <ul [ngClass]=\\\"{'ui-inputtext ui-state-default ui-corner-all':true,'ui-state-focus':focus,'ui-state-disabled':disabled}\\\">\\n                <li #token *ngFor=\\\"let item of value; let i = index;\\\" class=\\\"ui-chips-token ui-state-highlight ui-corner-all\\\">\\n                    <span *ngIf=\\\"!disabled\\\" class=\\\"ui-chips-token-icon fa fa-fw fa-close\\\" (click)=\\\"removeItem($event,i)\\\"></span>\\n                    <span *ngIf=\\\"!itemTemplate\\\" class=\\\"ui-chips-token-label\\\">{{field ? resolveFieldData(item,field) : item}}</span>\\n                    <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item}\\\"></ng-container>\\n                </li>\\n                <li class=\\\"ui-chips-input-token\\\">\\n                    <input #inputtext type=\\\"text\\\" [attr.id]=\\\"inputId\\\" [attr.placeholder]=\\\"(value && value.length ? null : placeholder)\\\" [attr.tabindex]=\\\"tabindex\\\" (keydown)=\\\"onKeydown($event)\\\" \\n                        (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" [disabled]=\\\"disabled\\\" [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\">\\n                </li>\\n            </ul>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, exports.CHIPS_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Chips);\n    return Chips;\n}());\nexports.Chips = Chips;\nvar ChipsModule = /** @class */ (function () {\n    function ChipsModule() {\n    }\n    ChipsModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, inputtext_1.InputTextModule, shared_1.SharedModule],\n            exports: [Chips, inputtext_1.InputTextModule, shared_1.SharedModule],\n            declarations: [Chips]\n        })\n    ], ChipsModule);\n    return ChipsModule;\n}());\nexports.ChipsModule = ChipsModule;\n//# sourceMappingURL=chips.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/chips/chips.js\n// module id = 232\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar objectutils_1 = require(\"../utils/objectutils\");\nvar forms_1 = require(\"@angular/forms\");\nexports.DROPDOWN_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Dropdown; }),\n    multi: true\n};\nvar Dropdown = /** @class */ (function () {\n    function Dropdown(el, domHandler, renderer, cd, objectUtils, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.objectUtils = objectUtils;\n        this.zone = zone;\n        this.scrollHeight = '200px';\n        this.autoWidth = true;\n        this.filterBy = 'label';\n        this.lazy = true;\n        this.resetFilterOnHide = false;\n        this.dropdownIcon = 'fa fa-fw fa-caret-down';\n        this.autoDisplayFirst = true;\n        this.emptyFilterMessage = 'No results found';\n        this.onChange = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onClick = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.panelVisible = false;\n    }\n    Dropdown.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                case 'selectedItem':\n                    _this.selectedItemTemplate = item.template;\n                    break;\n                case 'group':\n                    _this.groupTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Dropdown.prototype.ngOnInit = function () {\n        this.optionsToDisplay = this.options;\n        this.updateSelectedOption(null);\n    };\n    Object.defineProperty(Dropdown.prototype, \"options\", {\n        get: function () {\n            return this._options;\n        },\n        set: function (val) {\n            var opts = this.optionLabel ? this.objectUtils.generateSelectItems(val, this.optionLabel) : val;\n            this._options = opts;\n            this.optionsToDisplay = this._options;\n            this.updateSelectedOption(this.value);\n            this.optionsChanged = true;\n            if (this.filterValue && this.filterValue.length) {\n                this.activateFilter();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Dropdown.prototype.ngAfterViewInit = function () {\n        this.container = this.containerViewChild.nativeElement;\n        this.panel = this.panelViewChild.nativeElement;\n        this.itemsWrapper = this.itemsWrapperViewChild.nativeElement;\n        if (this.editable) {\n            this.updateEditableLabel();\n        }\n        this.updateDimensions();\n        this.initialized = true;\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panel);\n            else\n                this.domHandler.appendChild(this.panel, this.appendTo);\n        }\n    };\n    Object.defineProperty(Dropdown.prototype, \"label\", {\n        get: function () {\n            return (this.selectedOption ? this.selectedOption.label : null);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Dropdown.prototype.updateEditableLabel = function () {\n        if (this.editableInputViewChild && this.editableInputViewChild.nativeElement) {\n            this.editableInputViewChild.nativeElement.value = (this.selectedOption ? this.selectedOption.label : this.value || '');\n        }\n    };\n    Dropdown.prototype.onItemClick = function (event, option) {\n        this.itemClick = true;\n        this.selectItem(event, option);\n        this.focusViewChild.nativeElement.focus();\n        this.filled = true;\n        this.hide();\n    };\n    Dropdown.prototype.selectItem = function (event, option) {\n        if (this.selectedOption != option) {\n            this.selectedOption = option;\n            this.value = option.value;\n            this.onModelChange(this.value);\n            this.updateEditableLabel();\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    };\n    Dropdown.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        if (this.shown) {\n            this.onShow();\n            this.shown = false;\n        }\n        if (this.optionsChanged && this.panelVisible) {\n            this.optionsChanged = false;\n            this.zone.runOutsideAngular(function () {\n                setTimeout(function () {\n                    _this.updateDimensions();\n                    _this.alignPanel();\n                }, 1);\n            });\n        }\n        if (this.selectedOptionUpdated && this.itemsWrapper) {\n            this.updateDimensions();\n            var selectedItem = this.domHandler.findSingle(this.panel, 'li.ui-state-highlight');\n            if (selectedItem) {\n                this.domHandler.scrollInView(this.itemsWrapper, this.domHandler.findSingle(this.panel, 'li.ui-state-highlight'));\n            }\n            this.selectedOptionUpdated = false;\n        }\n    };\n    Dropdown.prototype.writeValue = function (value) {\n        if (this.filter) {\n            this.resetFilter();\n        }\n        this.value = value;\n        this.updateSelectedOption(value);\n        this.updateEditableLabel();\n        this.updateFilledState();\n        this.cd.markForCheck();\n    };\n    Dropdown.prototype.resetFilter = function () {\n        if (this.filterViewChild && this.filterViewChild.nativeElement) {\n            this.filterViewChild.nativeElement.value = '';\n        }\n        this.optionsToDisplay = this.options;\n    };\n    Dropdown.prototype.updateSelectedOption = function (val) {\n        this.selectedOption = this.findOption(val, this.optionsToDisplay);\n        if (this.autoDisplayFirst && !this.placeholder && !this.selectedOption && this.optionsToDisplay && this.optionsToDisplay.length && !this.editable) {\n            this.selectedOption = this.optionsToDisplay[0];\n        }\n        this.selectedOptionUpdated = true;\n    };\n    Dropdown.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Dropdown.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Dropdown.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Dropdown.prototype.updateDimensions = function () {\n        if (this.autoWidth && this.el.nativeElement && this.el.nativeElement.children[0]) {\n            var select = this.domHandler.findSingle(this.el.nativeElement, 'select');\n            if (select && !this.style || (this.style && (!this.style['width'] && !this.style['min-width']))) {\n                this.el.nativeElement.children[0].style.width = select.offsetWidth + 30 + 'px';\n            }\n        }\n    };\n    Dropdown.prototype.onMouseclick = function (event) {\n        var _this = this;\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        this.onClick.emit(event);\n        this.selfClick = true;\n        this.clearClick = this.domHandler.hasClass(event.target, 'ui-dropdown-clear-icon');\n        if (!this.itemClick && !this.clearClick) {\n            this.focusViewChild.nativeElement.focus();\n            if (this.panelVisible)\n                this.hide();\n            else {\n                this.show();\n                if (this.filterViewChild != undefined) {\n                    setTimeout(function () {\n                        _this.filterViewChild.nativeElement.focus();\n                    }, 200);\n                }\n            }\n        }\n    };\n    Dropdown.prototype.onEditableInputClick = function (event) {\n        this.itemClick = true;\n        this.bindDocumentClickListener();\n    };\n    Dropdown.prototype.onEditableInputFocus = function (event) {\n        this.focused = true;\n        this.hide();\n    };\n    Dropdown.prototype.onEditableInputChange = function (event) {\n        this.value = event.target.value;\n        this.updateSelectedOption(this.value);\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    Dropdown.prototype.onShow = function () {\n        this.bindDocumentClickListener();\n        if (this.options && this.options.length) {\n            this.alignPanel();\n            var selectedListItem = this.domHandler.findSingle(this.itemsWrapper, '.ui-dropdown-item.ui-state-highlight');\n            if (selectedListItem) {\n                this.domHandler.scrollInView(this.itemsWrapper, selectedListItem);\n            }\n        }\n    };\n    Dropdown.prototype.show = function () {\n        if (this.appendTo) {\n            this.panel.style.minWidth = this.domHandler.getWidth(this.container) + 'px';\n        }\n        this.panel.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n        this.panelVisible = true;\n        this.shown = true;\n    };\n    Dropdown.prototype.hide = function () {\n        this.panelVisible = false;\n        if (this.filter && this.resetFilterOnHide) {\n            this.resetFilter();\n        }\n    };\n    Dropdown.prototype.alignPanel = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.panel, this.container);\n        else\n            this.domHandler.relativePosition(this.panel, this.container);\n    };\n    Dropdown.prototype.onInputFocus = function (event) {\n        this.focused = true;\n        this.onFocus.emit(event);\n    };\n    Dropdown.prototype.onInputBlur = function (event) {\n        this.focused = false;\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    };\n    Dropdown.prototype.onKeydown = function (event) {\n        if (this.readonly || !this.optionsToDisplay || this.optionsToDisplay.length === null) {\n            return;\n        }\n        switch (event.which) {\n            //down\n            case 40:\n                if (!this.panelVisible && event.altKey) {\n                    this.show();\n                }\n                else {\n                    if (this.group) {\n                        var selectedItemIndex = this.selectedOption ? this.findOptionGroupIndex(this.selectedOption.value, this.optionsToDisplay) : -1;\n                        if (selectedItemIndex !== -1) {\n                            var nextItemIndex = selectedItemIndex.itemIndex + 1;\n                            if (nextItemIndex < (this.optionsToDisplay[selectedItemIndex.groupIndex].items.length)) {\n                                this.selectItem(event, this.optionsToDisplay[selectedItemIndex.groupIndex].items[nextItemIndex]);\n                                this.selectedOptionUpdated = true;\n                            }\n                            else if (this.optionsToDisplay[selectedItemIndex.groupIndex + 1]) {\n                                this.selectItem(event, this.optionsToDisplay[selectedItemIndex.groupIndex + 1].items[0]);\n                                this.selectedOptionUpdated = true;\n                            }\n                        }\n                        else {\n                            this.selectItem(event, this.optionsToDisplay[0].items[0]);\n                        }\n                    }\n                    else {\n                        var selectedItemIndex = this.selectedOption ? this.findOptionIndex(this.selectedOption.value, this.optionsToDisplay) : -1;\n                        var nextItemIndex = selectedItemIndex + 1;\n                        if (nextItemIndex != (this.optionsToDisplay.length)) {\n                            this.selectItem(event, this.optionsToDisplay[nextItemIndex]);\n                            this.selectedOptionUpdated = true;\n                        }\n                        else {\n                            this.selectItem(event, this.optionsToDisplay[0]);\n                        }\n                    }\n                }\n                event.preventDefault();\n                break;\n            //up\n            case 38:\n                if (this.group) {\n                    var selectedItemIndex = this.selectedOption ? this.findOptionGroupIndex(this.selectedOption.value, this.optionsToDisplay) : -1;\n                    if (selectedItemIndex !== -1) {\n                        var prevItemIndex = selectedItemIndex.itemIndex - 1;\n                        if (prevItemIndex >= 0) {\n                            this.selectItem(event, this.optionsToDisplay[selectedItemIndex.groupIndex].items[prevItemIndex]);\n                            this.selectedOptionUpdated = true;\n                        }\n                        else if (prevItemIndex < 0) {\n                            var prevGroup = this.optionsToDisplay[selectedItemIndex.groupIndex - 1];\n                            if (prevGroup) {\n                                this.selectItem(event, prevGroup.items[prevGroup.items.length - 1]);\n                                this.selectedOptionUpdated = true;\n                            }\n                        }\n                    }\n                }\n                else {\n                    var selectedItemIndex = this.selectedOption ? this.findOptionIndex(this.selectedOption.value, this.optionsToDisplay) : -1;\n                    if (selectedItemIndex > 0) {\n                        var prevItemIndex = selectedItemIndex - 1;\n                        this.selectItem(event, this.optionsToDisplay[prevItemIndex]);\n                        this.selectedOptionUpdated = true;\n                    }\n                }\n                event.preventDefault();\n                break;\n            //space\n            case 32:\n            case 32:\n                if (!this.panelVisible) {\n                    this.show();\n                    event.preventDefault();\n                }\n                break;\n            //enter\n            case 13:\n                if (!this.filter || (this.optionsToDisplay && this.optionsToDisplay.length > 0)) {\n                    this.hide();\n                }\n                event.preventDefault();\n                break;\n            //escape and tab\n            case 27:\n            case 9:\n                this.hide();\n                break;\n        }\n    };\n    Dropdown.prototype.findOptionIndex = function (val, opts) {\n        var index = -1;\n        if (opts) {\n            for (var i = 0; i < opts.length; i++) {\n                if ((val == null && opts[i].value == null) || this.objectUtils.equals(val, opts[i].value, this.dataKey)) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    Dropdown.prototype.findOptionGroupIndex = function (val, opts) {\n        var groupIndex, itemIndex;\n        if (opts) {\n            for (var i = 0; i < opts.length; i++) {\n                groupIndex = i;\n                itemIndex = this.findOptionIndex(val, opts[i].items);\n                if (itemIndex !== -1) {\n                    break;\n                }\n            }\n        }\n        if (itemIndex !== -1) {\n            return { groupIndex: groupIndex, itemIndex: itemIndex };\n        }\n        else {\n            return -1;\n        }\n    };\n    Dropdown.prototype.findOption = function (val, opts, inGroup) {\n        if (this.group && !inGroup) {\n            var opt = void 0;\n            if (opts && opts.length) {\n                for (var _i = 0, opts_1 = opts; _i < opts_1.length; _i++) {\n                    var optgroup = opts_1[_i];\n                    opt = this.findOption(val, optgroup.items, true);\n                    if (opt) {\n                        break;\n                    }\n                }\n            }\n            return opt;\n        }\n        else {\n            var index = this.findOptionIndex(val, opts);\n            return (index != -1) ? opts[index] : null;\n        }\n    };\n    Dropdown.prototype.onFilter = function (event) {\n        var inputValue = event.target.value.toLowerCase();\n        if (inputValue && inputValue.length) {\n            this.filterValue = inputValue;\n            this.activateFilter();\n        }\n        else {\n            this.filterValue = null;\n            this.optionsToDisplay = this.options;\n        }\n        this.optionsChanged = true;\n    };\n    Dropdown.prototype.activateFilter = function () {\n        var searchFields = this.filterBy.split(',');\n        if (this.options && this.options.length) {\n            if (this.group) {\n                var filteredGroups = [];\n                for (var _i = 0, _a = this.options; _i < _a.length; _i++) {\n                    var optgroup = _a[_i];\n                    var filteredSubOptions = this.objectUtils.filter(optgroup.items, searchFields, this.filterValue);\n                    if (filteredSubOptions && filteredSubOptions.length) {\n                        filteredGroups.push({\n                            label: optgroup.label,\n                            value: optgroup.value,\n                            items: filteredSubOptions\n                        });\n                    }\n                }\n                this.optionsToDisplay = filteredGroups;\n            }\n            else {\n                this.optionsToDisplay = this.objectUtils.filter(this.options, searchFields, this.filterValue);\n            }\n            this.optionsChanged = true;\n        }\n    };\n    Dropdown.prototype.applyFocus = function () {\n        if (this.editable)\n            this.domHandler.findSingle(this.el.nativeElement, '.ui-dropdown-label.ui-inputtext').focus();\n        else\n            this.domHandler.findSingle(this.el.nativeElement, 'input[readonly]').focus();\n    };\n    Dropdown.prototype.focus = function () {\n        this.applyFocus();\n    };\n    Dropdown.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.selfClick && !_this.itemClick) {\n                    _this.panelVisible = false;\n                    _this.unbindDocumentClickListener();\n                }\n                _this.selfClick = false;\n                _this.itemClick = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    Dropdown.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    Dropdown.prototype.updateFilledState = function () {\n        this.filled = (this.selectedOption != null);\n    };\n    Dropdown.prototype.clear = function (event) {\n        this.clearClick = true;\n        this.value = null;\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n        this.updateSelectedOption(this.value);\n        this.updateEditableLabel();\n        this.updateFilledState();\n    };\n    Dropdown.prototype.ngOnDestroy = function () {\n        this.initialized = false;\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panel);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"filter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dropdown.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dropdown.prototype, \"panelStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"panelStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"autoWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"editable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dropdown.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dropdown.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"filterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"filterBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"autofocus\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"resetFilterOnHide\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"dropdownIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"optionLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"autoDisplayFirst\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"group\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dropdown.prototype, \"showClear\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dropdown.prototype, \"emptyFilterMessage\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dropdown.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dropdown.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dropdown.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dropdown.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('panel'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"panelViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('itemswrapper'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"itemsWrapperViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('filter'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"filterViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('in'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"focusViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('editableInput'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dropdown.prototype, \"editableInputViewChild\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Dropdown.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Dropdown.prototype, \"options\", null);\n    Dropdown = __decorate([\n        core_1.Component({\n            selector: 'p-dropdown',\n            template: \"\\n         <div #container [ngClass]=\\\"{'ui-dropdown ui-widget ui-state-default ui-corner-all ui-helper-clearfix':true,\\n            'ui-state-disabled':disabled,'ui-dropdown-open':panelVisible,'ui-state-focus':focused, 'ui-dropdown-clearable': showClear && !disabled}\\\"\\n            (click)=\\\"onMouseclick($event)\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\" *ngIf=\\\"autoWidth\\\">\\n                <select [required]=\\\"required\\\" [attr.name]=\\\"name\\\" [attr.aria-label]=\\\"selectedOption ? selectedOption.label : ' '\\\" tabindex=\\\"-1\\\" aria-hidden=\\\"true\\\">\\n                    <option *ngIf=\\\"placeholder\\\">{{placeholder}}</option>\\n                    <ng-container *ngIf=\\\"group\\\">\\n                        <optgroup *ngFor=\\\"let option of options\\\" [attr.label]=\\\"option.label\\\">\\n                            <option *ngFor=\\\"let option of option.items\\\" [value]=\\\"option.value\\\" [selected]=\\\"selectedOption == option\\\">{{option.label}}</option>\\n                        <optgroup>\\n                    </ng-container>\\n                    <ng-container *ngIf=\\\"!group\\\">\\n                        <option *ngFor=\\\"let option of options\\\" [value]=\\\"option.value\\\" [selected]=\\\"selectedOption == option\\\">{{option.label}}</option>\\n                    </ng-container>\\n                </select>\\n            </div>\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #in [attr.id]=\\\"inputId\\\" type=\\\"text\\\" [attr.aria-label]=\\\"selectedOption ? selectedOption.label : ' '\\\" readonly (focus)=\\\"onInputFocus($event)\\\" role=\\\"listbox\\\"\\n                    (blur)=\\\"onInputBlur($event)\\\" (keydown)=\\\"onKeydown($event)\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\" [attr.autofocus]=\\\"autofocus\\\">\\n            </div>\\n            <label [ngClass]=\\\"{'ui-dropdown-label ui-inputtext ui-corner-all':true,'ui-dropdown-label-empty':(label == null || label.length === 0)}\\\" *ngIf=\\\"!editable && (label != null)\\\">\\n                <ng-container *ngIf=\\\"!selectedItemTemplate\\\">{{label||'empty'}}</ng-container>\\n                <ng-container *ngTemplateOutlet=\\\"selectedItemTemplate; context: {$implicit: selectedOption}\\\"></ng-container>\\n            </label>\\n            <label [ngClass]=\\\"{'ui-dropdown-label ui-inputtext ui-corner-all ui-placeholder':true,'ui-dropdown-label-empty': (placeholder == null || placeholder.length === 0)}\\\" *ngIf=\\\"!editable && (label == null)\\\">{{placeholder||'empty'}}</label>\\n            <input #editableInput type=\\\"text\\\" [attr.aria-label]=\\\"selectedOption ? selectedOption.label : ' '\\\" class=\\\"ui-dropdown-label ui-inputtext ui-corner-all\\\" *ngIf=\\\"editable\\\" [disabled]=\\\"disabled\\\" [attr.placeholder]=\\\"placeholder\\\"\\n                        (click)=\\\"onEditableInputClick($event)\\\" (input)=\\\"onEditableInputChange($event)\\\" (focus)=\\\"onEditableInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\">\\n            <i class=\\\"ui-dropdown-clear-icon fa fa-close\\\" (click)=\\\"clear($event)\\\" *ngIf=\\\"value != null && showClear && !disabled\\\"></i>\\n            <div class=\\\"ui-dropdown-trigger ui-state-default ui-corner-right\\\">\\n                <span class=\\\"ui-dropdown-trigger-icon ui-clickable\\\" [ngClass]=\\\"dropdownIcon\\\"></span>\\n            </div>\\n            <div #panel [ngClass]=\\\"'ui-dropdown-panel ui-widget-content ui-corner-all ui-shadow'\\\" [@panelState]=\\\"panelVisible ? 'visible' : 'hidden'\\\"\\n                [style.display]=\\\"panelVisible ? 'block' : 'none'\\\" [ngStyle]=\\\"panelStyle\\\" [class]=\\\"panelStyleClass\\\">\\n                <div *ngIf=\\\"filter\\\" class=\\\"ui-dropdown-filter-container\\\" (input)=\\\"onFilter($event)\\\" (click)=\\\"$event.stopPropagation()\\\">\\n                    <input #filter type=\\\"text\\\" autocomplete=\\\"off\\\" class=\\\"ui-dropdown-filter ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [attr.placeholder]=\\\"filterPlaceholder\\\"\\n                    (keydown.enter)=\\\"$event.preventDefault()\\\" (keydown)=\\\"onKeydown($event)\\\">\\n                    <span class=\\\"ui-dropdown-filter-icon fa fa-search\\\"></span>\\n                </div>\\n                <div #itemswrapper class=\\\"ui-dropdown-items-wrapper\\\" [style.max-height]=\\\"scrollHeight||'auto'\\\">\\n                    <ul class=\\\"ui-dropdown-items ui-dropdown-list ui-widget-content ui-widget ui-corner-all ui-helper-reset\\\" *ngIf=\\\"lazy ? panelVisible : true\\\">\\n                        <ng-container *ngIf=\\\"group\\\">\\n                            <ng-template ngFor let-optgroup [ngForOf]=\\\"optionsToDisplay\\\">\\n                                <li class=\\\"ui-dropdown-item-group\\\">\\n                                    <span *ngIf=\\\"!groupTemplate\\\">{{optgroup.label||'empty'}}</span>\\n                                    <ng-container *ngTemplateOutlet=\\\"groupTemplate; context: {$implicit: optgroup}\\\"></ng-container>\\n                                </li>\\n                                <ng-container *ngTemplateOutlet=\\\"itemslist; context: {$implicit: optgroup.items, selectedOption: selectedOption}\\\"></ng-container>\\n                            </ng-template>\\n                        </ng-container>\\n                        <ng-container *ngIf=\\\"!group\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"itemslist; context: {$implicit: optionsToDisplay, selectedOption: selectedOption}\\\"></ng-container>\\n                        </ng-container>\\n                        <ng-template #itemslist let-options let-selectedOption=\\\"selectedOption\\\">\\n                            <li *ngFor=\\\"let option of options;let i=index\\\" [ngClass]=\\\"{'ui-dropdown-item ui-corner-all':true, 'ui-state-highlight':(selectedOption == option), 'ui-dropdown-item-empty':!option.label||option.label.length === 0}\\\" \\n                                    (click)=\\\"onItemClick($event, option)\\\">\\n                                <span *ngIf=\\\"!itemTemplate\\\">{{option.label||'empty'}}</span>\\n                                <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option}\\\"></ng-container>\\n                            </li>\\n                        </ng-template>\\n                        <li *ngIf=\\\"filter && optionsToDisplay && optionsToDisplay.length === 0\\\">{{emptyFilterMessage}}</li>\\n                    </ul>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focused'\n            },\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils, exports.DROPDOWN_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef,\n            objectutils_1.ObjectUtils, core_1.NgZone])\n    ], Dropdown);\n    return Dropdown;\n}());\nexports.Dropdown = Dropdown;\nvar DropdownModule = /** @class */ (function () {\n    function DropdownModule() {\n    }\n    DropdownModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [Dropdown, shared_1.SharedModule],\n            declarations: [Dropdown]\n        })\n    ], DropdownModule);\n    return DropdownModule;\n}());\nexports.DropdownModule = DropdownModule;\n//# sourceMappingURL=dropdown.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/dropdown/dropdown.js\n// module id = 233\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar Draggable = /** @class */ (function () {\n    function Draggable(el, domHandler, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.zone = zone;\n        this.onDragStart = new core_1.EventEmitter();\n        this.onDragEnd = new core_1.EventEmitter();\n        this.onDrag = new core_1.EventEmitter();\n    }\n    Draggable.prototype.ngAfterViewInit = function () {\n        this.bindMouseListeners();\n    };\n    Draggable.prototype.bindDragListener = function () {\n        var _this = this;\n        if (!this.dragListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.dragListener = _this.drag.bind(_this);\n                _this.el.nativeElement.addEventListener('drag', _this.dragListener);\n            });\n        }\n    };\n    Draggable.prototype.unbindDragListener = function () {\n        var _this = this;\n        if (this.dragListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.el.nativeElement.removeEventListener('drag', _this.dragListener);\n                _this.dragListener = null;\n            });\n        }\n    };\n    Draggable.prototype.bindMouseListeners = function () {\n        var _this = this;\n        if (!this.mouseDownListener && !this.mouseUpListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.mouseDownListener = _this.mousedown.bind(_this);\n                _this.mouseUpListener = _this.mouseup.bind(_this);\n                _this.el.nativeElement.addEventListener('mousedown', _this.mouseDownListener);\n                _this.el.nativeElement.addEventListener('mouseup', _this.mouseUpListener);\n            });\n        }\n    };\n    Draggable.prototype.unbindMouseListeners = function () {\n        var _this = this;\n        if (this.mouseDownListener && this.mouseUpListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.el.nativeElement.removeEventListener('mousedown', _this.mouseDownListener);\n                _this.el.nativeElement.removeEventListener('mouseup', _this.mouseUpListener);\n                _this.mouseDownListener = null;\n                _this.mouseUpListener = null;\n            });\n        }\n    };\n    Draggable.prototype.drag = function (event) {\n        this.onDrag.emit(event);\n    };\n    Draggable.prototype.dragStart = function (event) {\n        if (this.allowDrag()) {\n            if (this.dragEffect) {\n                event.dataTransfer.effectAllowed = this.dragEffect;\n            }\n            event.dataTransfer.setData('text', this.scope);\n            this.onDragStart.emit(event);\n            this.bindDragListener();\n        }\n        else {\n            event.preventDefault();\n        }\n    };\n    Draggable.prototype.dragEnd = function (event) {\n        this.onDragEnd.emit(event);\n        this.unbindDragListener();\n    };\n    Draggable.prototype.mousedown = function (event) {\n        this.handle = event.target;\n    };\n    Draggable.prototype.mouseup = function (event) {\n        this.handle = null;\n    };\n    Draggable.prototype.allowDrag = function () {\n        if (this.dragHandle && this.handle)\n            return this.domHandler.matches(this.handle, this.dragHandle);\n        else\n            return true;\n    };\n    Draggable.prototype.ngOnDestroy = function () {\n        this.unbindDragListener();\n        this.unbindMouseListeners();\n    };\n    __decorate([\n        core_1.Input('pDraggable'),\n        __metadata(\"design:type\", String)\n    ], Draggable.prototype, \"scope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Draggable.prototype, \"dragEffect\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Draggable.prototype, \"dragHandle\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Draggable.prototype, \"onDragStart\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Draggable.prototype, \"onDragEnd\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Draggable.prototype, \"onDrag\", void 0);\n    __decorate([\n        core_1.HostListener('dragstart', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Draggable.prototype, \"dragStart\", null);\n    __decorate([\n        core_1.HostListener('dragend', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Draggable.prototype, \"dragEnd\", null);\n    Draggable = __decorate([\n        core_1.Directive({\n            selector: '[pDraggable]',\n            host: {\n                '[draggable]': 'true'\n            },\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.NgZone])\n    ], Draggable);\n    return Draggable;\n}());\nexports.Draggable = Draggable;\nvar Droppable = /** @class */ (function () {\n    function Droppable(el, domHandler, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.zone = zone;\n        this.onDragEnter = new core_1.EventEmitter();\n        this.onDragLeave = new core_1.EventEmitter();\n        this.onDrop = new core_1.EventEmitter();\n    }\n    Droppable.prototype.ngAfterViewInit = function () {\n        this.bindDragOverListener();\n    };\n    Droppable.prototype.bindDragOverListener = function () {\n        var _this = this;\n        if (!this.dragOverListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.dragOverListener = _this.dragOver.bind(_this);\n                _this.el.nativeElement.addEventListener('dragover', _this.dragOverListener);\n            });\n        }\n    };\n    Droppable.prototype.unbindDragOverListener = function () {\n        var _this = this;\n        if (this.dragOverListener) {\n            this.zone.runOutsideAngular(function () {\n                _this.el.nativeElement.removeEventListener('dragover', _this.dragOverListener);\n                _this.dragOverListener = null;\n            });\n        }\n    };\n    Droppable.prototype.dragOver = function (event) {\n        event.preventDefault();\n    };\n    Droppable.prototype.drop = function (event) {\n        if (this.allowDrop(event)) {\n            event.preventDefault();\n            this.onDrop.emit(event);\n        }\n    };\n    Droppable.prototype.dragEnter = function (event) {\n        event.preventDefault();\n        if (this.dropEffect) {\n            event.dataTransfer.dropEffect = this.dropEffect;\n        }\n        this.onDragEnter.emit(event);\n    };\n    Droppable.prototype.dragLeave = function (event) {\n        event.preventDefault();\n        this.onDragLeave.emit(event);\n    };\n    Droppable.prototype.allowDrop = function (event) {\n        var dragScope = event.dataTransfer.getData('text');\n        if (typeof (this.scope) == \"string\" && dragScope == this.scope) {\n            return true;\n        }\n        else if (this.scope instanceof Array) {\n            for (var j = 0; j < this.scope.length; j++) {\n                if (dragScope == this.scope[j]) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    Droppable.prototype.ngOnDestroy = function () {\n        this.unbindDragOverListener();\n    };\n    __decorate([\n        core_1.Input('pDroppable'),\n        __metadata(\"design:type\", Object)\n    ], Droppable.prototype, \"scope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Droppable.prototype, \"dropEffect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Droppable.prototype, \"onDragEnter\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Droppable.prototype, \"onDragLeave\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Droppable.prototype, \"onDrop\", void 0);\n    __decorate([\n        core_1.HostListener('drop', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Droppable.prototype, \"drop\", null);\n    __decorate([\n        core_1.HostListener('dragenter', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Droppable.prototype, \"dragEnter\", null);\n    __decorate([\n        core_1.HostListener('dragleave', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Droppable.prototype, \"dragLeave\", null);\n    Droppable = __decorate([\n        core_1.Directive({\n            selector: '[pDroppable]',\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.NgZone])\n    ], Droppable);\n    return Droppable;\n}());\nexports.Droppable = Droppable;\nvar DragDropModule = /** @class */ (function () {\n    function DragDropModule() {\n    }\n    DragDropModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Draggable, Droppable],\n            declarations: [Draggable, Droppable]\n        })\n    ], DragDropModule);\n    return DragDropModule;\n}());\nexports.DragDropModule = DragDropModule;\n//# sourceMappingURL=dragdrop.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/dragdrop/dragdrop.js\n// module id = 234\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar messageservice_1 = require(\"../common/messageservice\");\nvar Messages = /** @class */ (function () {\n    function Messages(messageService) {\n        this.messageService = messageService;\n        this.closable = true;\n        this.enableService = true;\n        this.valueChange = new core_1.EventEmitter();\n    }\n    Messages.prototype.ngOnInit = function () {\n        var _this = this;\n        if (this.messageService && this.enableService) {\n            this.subscription = this.messageService.messageObserver.subscribe(function (messages) {\n                if (messages) {\n                    if (messages instanceof Array) {\n                        var filteredMessages = messages.filter(function (m) { return _this.key === m.key; });\n                        _this.value = _this.value ? _this.value.concat(filteredMessages) : filteredMessages.slice();\n                    }\n                    else if (_this.key === messages.key) {\n                        _this.value = _this.value ? _this.value.concat([messages]) : [messages];\n                    }\n                }\n                else {\n                    _this.value = null;\n                }\n            });\n        }\n    };\n    Messages.prototype.hasMessages = function () {\n        return this.value && this.value.length > 0;\n    };\n    Messages.prototype.getSeverityClass = function () {\n        return this.value[0].severity;\n    };\n    Messages.prototype.clear = function (event) {\n        this.value = [];\n        this.valueChange.emit(this.value);\n        event.preventDefault();\n    };\n    Object.defineProperty(Messages.prototype, \"icon\", {\n        get: function () {\n            var icon = null;\n            if (this.hasMessages()) {\n                var msg = this.value[0];\n                switch (msg.severity) {\n                    case 'success':\n                        icon = 'fa-check';\n                        break;\n                    case 'info':\n                        icon = 'fa-info-circle';\n                        break;\n                    case 'error':\n                        icon = 'fa-close';\n                        break;\n                    case 'warn':\n                        icon = 'fa-warning';\n                        break;\n                    default:\n                        icon = 'fa-info-circle';\n                        break;\n                }\n            }\n            return icon;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Messages.prototype.ngOnDestroy = function () {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Messages.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Messages.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Messages.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Messages.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Messages.prototype, \"enableService\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Messages.prototype, \"key\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Messages.prototype, \"valueChange\", void 0);\n    Messages = __decorate([\n        core_1.Component({\n            selector: 'p-messages',\n            template: \"\\n        <div *ngIf=\\\"hasMessages()\\\" class=\\\"ui-messages ui-widget ui-corner-all\\\" style=\\\"display:block\\\"\\n                    [ngClass]=\\\"{'ui-messages-info':(value[0].severity === 'info'),\\n                    'ui-messages-warn':(value[0].severity === 'warn'),\\n                    'ui-messages-error':(value[0].severity === 'error'),\\n                    'ui-messages-success':(value[0].severity === 'success')}\\\"\\n                    [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <a href=\\\"#\\\" class=\\\"ui-messages-close\\\" (click)=\\\"clear($event)\\\" *ngIf=\\\"closable\\\">\\n                <i class=\\\"fa fa-close\\\"></i>\\n            </a>\\n            <span class=\\\"ui-messages-icon fa fa-fw fa-2x\\\" [ngClass]=\\\"icon\\\"></span>\\n            <ul>\\n                <li *ngFor=\\\"let msg of value\\\">\\n                    <span *ngIf=\\\"msg.summary\\\" class=\\\"ui-messages-summary\\\" [innerHTML]=\\\"msg.summary\\\"></span>\\n                    <span *ngIf=\\\"msg.detail\\\" class=\\\"ui-messages-detail\\\" [innerHTML]=\\\"msg.detail\\\"></span>\\n                </li>\\n            </ul>\\n        </div>\\n    \"\n        }),\n        __param(0, core_1.Optional()),\n        __metadata(\"design:paramtypes\", [messageservice_1.MessageService])\n    ], Messages);\n    return Messages;\n}());\nexports.Messages = Messages;\nvar MessagesModule = /** @class */ (function () {\n    function MessagesModule() {\n    }\n    MessagesModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Messages],\n            declarations: [Messages]\n        })\n    ], MessagesModule);\n    return MessagesModule;\n}());\nexports.MessagesModule = MessagesModule;\n//# sourceMappingURL=messages.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/messages/messages.js\n// module id = 235\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar Subject_1 = require(\"rxjs/Subject\");\nvar MessageService = /** @class */ (function () {\n    function MessageService() {\n        this.messageSource = new Subject_1.Subject();\n        this.messageObserver = this.messageSource.asObservable();\n    }\n    MessageService.prototype.add = function (message) {\n        if (message) {\n            this.messageSource.next(message);\n        }\n    };\n    MessageService.prototype.addAll = function (messages) {\n        if (messages && messages.length) {\n            this.messageSource.next(messages);\n        }\n    };\n    MessageService.prototype.clear = function () {\n        this.messageSource.next(null);\n    };\n    MessageService = __decorate([\n        core_1.Injectable()\n    ], MessageService);\n    return MessageService;\n}());\nexports.MessageService = MessageService;\n//# sourceMappingURL=messageservice.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/common/messageservice.js\n// module id = 236\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar ProgressBar = /** @class */ (function () {\n    function ProgressBar() {\n        this.showValue = true;\n        this.unit = '%';\n        this.mode = 'determinate';\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ProgressBar.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ProgressBar.prototype, \"showValue\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ProgressBar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressBar.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressBar.prototype, \"unit\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressBar.prototype, \"mode\", void 0);\n    ProgressBar = __decorate([\n        core_1.Component({\n            selector: 'p-progressBar',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" role=\\\"progressbar\\\" aria-valuemin=\\\"0\\\" [attr.aria-valuenow]=\\\"value\\\" aria-valuemax=\\\"100\\\"\\n            [ngClass]=\\\"{'ui-progressbar ui-widget ui-widget-content ui-corner-all': true, 'ui-progressbar-determinate': (mode === 'determinate'), 'ui-progressbar-indeterminate': (mode === 'indeterminate')}\\\">\\n            <div class=\\\"ui-progressbar-value ui-progressbar-value-animate ui-widget-header ui-corner-all\\\" [style.width]=\\\"value + '%'\\\" style=\\\"display:block\\\"></div>\\n            <div class=\\\"ui-progressbar-label\\\" [style.display]=\\\"value != null ? 'block' : 'none'\\\" *ngIf=\\\"showValue\\\">{{value}}{{unit}}</div>\\n        </div>\\n    \"\n        })\n    ], ProgressBar);\n    return ProgressBar;\n}());\nexports.ProgressBar = ProgressBar;\nvar ProgressBarModule = /** @class */ (function () {\n    function ProgressBarModule() {\n    }\n    ProgressBarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ProgressBar],\n            declarations: [ProgressBar]\n        })\n    ], ProgressBarModule);\n    return ProgressBarModule;\n}());\nexports.ProgressBarModule = ProgressBarModule;\n//# sourceMappingURL=progressbar.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/progressbar/progressbar.js\n// module id = 237\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/*\n    Port of jQuery MaskedInput by DigitalBush as a Native Angular2 Component in Typescript without jQuery\n    https://github.com/digitalBush/jquery.maskedinput/\n\n    Copyright (c) 2007-2014 Josh Bush (digitalbush.com)\n\n    Permission is hereby granted, free of charge, to any person\n    obtaining a copy of this software and associated documentation\n    files (the \"Software\"), to deal in the Software without\n    restriction, including without limitation the rights to use,\n    copy, modify, merge, publish, distribute, sublicense, and/or sell\n    copies of the Software, and to permit persons to whom the\n    Software is furnished to do so, subject to the following\n    conditions:\n\n    The above copyright notice and this permission notice shall be\n    included in all copies or substantial portions of the Software.\n\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\n    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\n    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\n    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\n    OTHER DEALINGS IN THE SOFTWARE.\n*/\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar inputtext_1 = require(\"../inputtext/inputtext\");\nvar forms_1 = require(\"@angular/forms\");\nexports.INPUTMASK_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return InputMask; }),\n    multi: true\n};\nvar InputMask = /** @class */ (function () {\n    function InputMask(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.type = 'text';\n        this.slotChar = '_';\n        this.autoClear = true;\n        this.characterPattern = '[A-Za-z]';\n        this.onComplete = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    InputMask.prototype.ngOnInit = function () {\n        var ua = this.domHandler.getUserAgent();\n        this.androidChrome = /chrome/i.test(ua) && /android/i.test(ua);\n        this.initMask();\n    };\n    Object.defineProperty(InputMask.prototype, \"mask\", {\n        get: function () {\n            return this._mask;\n        },\n        set: function (val) {\n            this._mask = val;\n            this.initMask();\n            this.writeValue('');\n            this.onModelChange(this.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    InputMask.prototype.initMask = function () {\n        this.tests = [];\n        this.partialPosition = this.mask.length;\n        this.len = this.mask.length;\n        this.firstNonMaskPos = null;\n        this.defs = {\n            '9': '[0-9]',\n            'a': this.characterPattern,\n            '*': this.characterPattern + \"|[0-9]\"\n        };\n        var maskTokens = this.mask.split('');\n        for (var i = 0; i < maskTokens.length; i++) {\n            var c = maskTokens[i];\n            if (c == '?') {\n                this.len--;\n                this.partialPosition = i;\n            }\n            else if (this.defs[c]) {\n                this.tests.push(new RegExp(this.defs[c]));\n                if (this.firstNonMaskPos === null) {\n                    this.firstNonMaskPos = this.tests.length - 1;\n                }\n                if (i < this.partialPosition) {\n                    this.lastRequiredNonMaskPos = this.tests.length - 1;\n                }\n            }\n            else {\n                this.tests.push(null);\n            }\n        }\n        this.buffer = [];\n        for (var i = 0; i < maskTokens.length; i++) {\n            var c = maskTokens[i];\n            if (c != '?') {\n                if (this.defs[c])\n                    this.buffer.push(this.getPlaceholder(i));\n                else\n                    this.buffer.push(c);\n            }\n        }\n        this.defaultBuffer = this.buffer.join('');\n    };\n    InputMask.prototype.writeValue = function (value) {\n        this.value = value;\n        if (this.inputViewChild.nativeElement) {\n            if (this.value == undefined || this.value == null)\n                this.inputViewChild.nativeElement.value = '';\n            else\n                this.inputViewChild.nativeElement.value = this.value;\n            this.checkVal();\n            this.focusText = this.inputViewChild.nativeElement.value;\n            this.updateFilledState();\n        }\n    };\n    InputMask.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    InputMask.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    InputMask.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    InputMask.prototype.caret = function (first, last) {\n        var range, begin, end;\n        if (!this.inputViewChild.nativeElement.offsetParent || this.inputViewChild.nativeElement !== document.activeElement) {\n            return;\n        }\n        if (typeof first == 'number') {\n            begin = first;\n            end = (typeof last === 'number') ? last : begin;\n            if (this.inputViewChild.nativeElement.setSelectionRange) {\n                this.inputViewChild.nativeElement.setSelectionRange(begin, end);\n            }\n            else if (this.inputViewChild.nativeElement['createTextRange']) {\n                range = this.inputViewChild.nativeElement['createTextRange']();\n                range.collapse(true);\n                range.moveEnd('character', end);\n                range.moveStart('character', begin);\n                range.select();\n            }\n        }\n        else {\n            if (this.inputViewChild.nativeElement.setSelectionRange) {\n                begin = this.inputViewChild.nativeElement.selectionStart;\n                end = this.inputViewChild.nativeElement.selectionEnd;\n            }\n            else if (document['selection'] && document['selection'].createRange) {\n                range = document['selection'].createRange();\n                begin = 0 - range.duplicate().moveStart('character', -100000);\n                end = begin + range.text.length;\n            }\n            return { begin: begin, end: end };\n        }\n    };\n    InputMask.prototype.isCompleted = function () {\n        var completed;\n        for (var i = this.firstNonMaskPos; i <= this.lastRequiredNonMaskPos; i++) {\n            if (this.tests[i] && this.buffer[i] === this.getPlaceholder(i)) {\n                return false;\n            }\n        }\n        return true;\n    };\n    InputMask.prototype.getPlaceholder = function (i) {\n        if (i < this.slotChar.length) {\n            return this.slotChar.charAt(i);\n        }\n        return this.slotChar.charAt(0);\n    };\n    InputMask.prototype.seekNext = function (pos) {\n        while (++pos < this.len && !this.tests[pos])\n            ;\n        return pos;\n    };\n    InputMask.prototype.seekPrev = function (pos) {\n        while (--pos >= 0 && !this.tests[pos])\n            ;\n        return pos;\n    };\n    InputMask.prototype.shiftL = function (begin, end) {\n        var i, j;\n        if (begin < 0) {\n            return;\n        }\n        for (i = begin, j = this.seekNext(end); i < this.len; i++) {\n            if (this.tests[i]) {\n                if (j < this.len && this.tests[i].test(this.buffer[j])) {\n                    this.buffer[i] = this.buffer[j];\n                    this.buffer[j] = this.getPlaceholder(j);\n                }\n                else {\n                    break;\n                }\n                j = this.seekNext(j);\n            }\n        }\n        this.writeBuffer();\n        this.caret(Math.max(this.firstNonMaskPos, begin));\n    };\n    InputMask.prototype.shiftR = function (pos) {\n        var i, c, j, t;\n        for (i = pos, c = this.getPlaceholder(pos); i < this.len; i++) {\n            if (this.tests[i]) {\n                j = this.seekNext(i);\n                t = this.buffer[i];\n                this.buffer[i] = c;\n                if (j < this.len && this.tests[j].test(t)) {\n                    c = t;\n                }\n                else {\n                    break;\n                }\n            }\n        }\n    };\n    InputMask.prototype.handleAndroidInput = function (e) {\n        var _this = this;\n        var curVal = this.inputViewChild.nativeElement.value;\n        var pos = this.caret();\n        if (this.oldVal && this.oldVal.length && this.oldVal.length > curVal.length) {\n            // a deletion or backspace happened\n            this.checkVal(true);\n            while (pos.begin > 0 && !this.tests[pos.begin - 1])\n                pos.begin--;\n            if (pos.begin === 0) {\n                while (pos.begin < this.firstNonMaskPos && !this.tests[pos.begin])\n                    pos.begin++;\n            }\n            setTimeout(function () {\n                _this.caret(pos.begin, pos.begin);\n                _this.updateModel(e);\n                if (_this.isCompleted()) {\n                    _this.onComplete.emit();\n                }\n            }, 0);\n        }\n        else {\n            this.checkVal(true);\n            while (pos.begin < this.len && !this.tests[pos.begin])\n                pos.begin++;\n            setTimeout(function () {\n                _this.caret(pos.begin, pos.begin);\n                _this.updateModel(e);\n                if (_this.isCompleted()) {\n                    _this.onComplete.emit();\n                }\n            }, 0);\n        }\n    };\n    InputMask.prototype.onInputBlur = function (e) {\n        this.focus = false;\n        this.onModelTouched();\n        this.checkVal();\n        this.updateFilledState();\n        this.onBlur.emit(e);\n        if (this.inputViewChild.nativeElement.value != this.focusText) {\n            this.updateModel(e);\n            var event_1 = document.createEvent('HTMLEvents');\n            event_1.initEvent('change', true, false);\n            this.inputViewChild.nativeElement.dispatchEvent(event_1);\n        }\n    };\n    InputMask.prototype.onKeyDown = function (e) {\n        if (this.readonly) {\n            return;\n        }\n        var k = e.which || e.keyCode, pos, begin, end;\n        var iPhone = /iphone/i.test(this.domHandler.getUserAgent());\n        this.oldVal = this.inputViewChild.nativeElement.value;\n        //backspace, delete, and escape get special treatment\n        if (k === 8 || k === 46 || (iPhone && k === 127)) {\n            pos = this.caret();\n            begin = pos.begin;\n            end = pos.end;\n            if (end - begin === 0) {\n                begin = k !== 46 ? this.seekPrev(begin) : (end = this.seekNext(begin - 1));\n                end = k === 46 ? this.seekNext(end) : end;\n            }\n            this.clearBuffer(begin, end);\n            this.shiftL(begin, end - 1);\n            this.updateModel(e);\n            e.preventDefault();\n        }\n        else if (k === 13) {\n            this.onInputBlur(e);\n            this.updateModel(e);\n        }\n        else if (k === 27) {\n            this.inputViewChild.nativeElement.value = this.focusText;\n            this.caret(0, this.checkVal());\n            this.updateModel(e);\n            e.preventDefault();\n        }\n    };\n    InputMask.prototype.onKeyPress = function (e) {\n        var _this = this;\n        if (this.readonly) {\n            return;\n        }\n        var k = e.which || e.keyCode, pos = this.caret(), p, c, next, completed;\n        if (e.ctrlKey || e.altKey || e.metaKey || k < 32 || (k > 34 && k < 41)) {\n            return;\n        }\n        else if (k && k !== 13) {\n            if (pos.end - pos.begin !== 0) {\n                this.clearBuffer(pos.begin, pos.end);\n                this.shiftL(pos.begin, pos.end - 1);\n            }\n            p = this.seekNext(pos.begin - 1);\n            if (p < this.len) {\n                c = String.fromCharCode(k);\n                if (this.tests[p].test(c)) {\n                    this.shiftR(p);\n                    this.buffer[p] = c;\n                    this.writeBuffer();\n                    next = this.seekNext(p);\n                    if (/android/i.test(this.domHandler.getUserAgent())) {\n                        //Path for CSP Violation on FireFox OS 1.1\n                        var proxy = function () {\n                            _this.caret(next);\n                        };\n                        setTimeout(proxy, 0);\n                    }\n                    else {\n                        this.caret(next);\n                    }\n                    if (pos.begin <= this.lastRequiredNonMaskPos) {\n                        completed = this.isCompleted();\n                    }\n                }\n            }\n            e.preventDefault();\n        }\n        this.updateModel(e);\n        this.updateFilledState();\n        if (completed) {\n            this.onComplete.emit();\n        }\n    };\n    InputMask.prototype.clearBuffer = function (start, end) {\n        var i;\n        for (i = start; i < end && i < this.len; i++) {\n            if (this.tests[i]) {\n                this.buffer[i] = this.getPlaceholder(i);\n            }\n        }\n    };\n    InputMask.prototype.writeBuffer = function () {\n        this.inputViewChild.nativeElement.value = this.buffer.join('');\n    };\n    InputMask.prototype.checkVal = function (allow) {\n        //try to place characters where they belong\n        var test = this.inputViewChild.nativeElement.value, lastMatch = -1, i, c, pos;\n        for (i = 0, pos = 0; i < this.len; i++) {\n            if (this.tests[i]) {\n                this.buffer[i] = this.getPlaceholder(i);\n                while (pos++ < test.length) {\n                    c = test.charAt(pos - 1);\n                    if (this.tests[i].test(c)) {\n                        this.buffer[i] = c;\n                        lastMatch = i;\n                        break;\n                    }\n                }\n                if (pos > test.length) {\n                    this.clearBuffer(i + 1, this.len);\n                    break;\n                }\n            }\n            else {\n                if (this.buffer[i] === test.charAt(pos)) {\n                    pos++;\n                }\n                if (i < this.partialPosition) {\n                    lastMatch = i;\n                }\n            }\n        }\n        if (allow) {\n            this.writeBuffer();\n        }\n        else if (lastMatch + 1 < this.partialPosition) {\n            if (this.autoClear || this.buffer.join('') === this.defaultBuffer) {\n                // Invalid value. Remove it and replace it with the\n                // mask, which is the default behavior.\n                if (this.inputViewChild.nativeElement.value)\n                    this.inputViewChild.nativeElement.value = '';\n                this.clearBuffer(0, this.len);\n            }\n            else {\n                // Invalid value, but we opt to show the value to the\n                // user and allow them to correct their mistake.\n                this.writeBuffer();\n            }\n        }\n        else {\n            this.writeBuffer();\n            this.inputViewChild.nativeElement.value = this.inputViewChild.nativeElement.value.substring(0, lastMatch + 1);\n        }\n        return (this.partialPosition ? i : this.firstNonMaskPos);\n    };\n    InputMask.prototype.onInputFocus = function (event) {\n        var _this = this;\n        if (this.readonly) {\n            return;\n        }\n        this.focus = true;\n        clearTimeout(this.caretTimeoutId);\n        var pos;\n        this.focusText = this.inputViewChild.nativeElement.value;\n        pos = this.checkVal();\n        this.caretTimeoutId = setTimeout(function () {\n            if (_this.inputViewChild.nativeElement !== document.activeElement) {\n                return;\n            }\n            _this.writeBuffer();\n            if (pos == _this.mask.replace(\"?\", \"\").length) {\n                _this.caret(0, pos);\n            }\n            else {\n                _this.caret(pos);\n            }\n        }, 10);\n        this.onFocus.emit(event);\n    };\n    InputMask.prototype.onInput = function (event) {\n        if (this.androidChrome)\n            this.handleAndroidInput(event);\n        else\n            this.handleInputChange(event);\n    };\n    InputMask.prototype.handleInputChange = function (event) {\n        var _this = this;\n        if (this.readonly) {\n            return;\n        }\n        setTimeout(function () {\n            var pos = _this.checkVal(true);\n            _this.caret(pos);\n            _this.updateModel(event);\n            if (_this.isCompleted()) {\n                _this.onComplete.emit();\n            }\n        }, 0);\n    };\n    InputMask.prototype.getUnmaskedValue = function () {\n        var unmaskedBuffer = [];\n        for (var i = 0; i < this.buffer.length; i++) {\n            var c = this.buffer[i];\n            if (this.tests[i] && c != this.getPlaceholder(i)) {\n                unmaskedBuffer.push(c);\n            }\n        }\n        return unmaskedBuffer.join('');\n    };\n    InputMask.prototype.updateModel = function (e) {\n        var updatedValue = this.unmask ? this.getUnmaskedValue() : e.target.value;\n        if (updatedValue !== null || updatedValue !== undefined) {\n            this.value = updatedValue;\n            this.onModelChange(this.value);\n        }\n    };\n    InputMask.prototype.updateFilledState = function () {\n        this.filled = this.inputViewChild.nativeElement && this.inputViewChild.nativeElement.value != '';\n    };\n    InputMask.prototype.ngOnDestroy = function () {\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"slotChar\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"autoClear\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputMask.prototype, \"size\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputMask.prototype, \"maxlength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"unmask\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputMask.prototype, \"characterPattern\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputMask.prototype, \"autoFocus\", void 0);\n    __decorate([\n        core_1.ViewChild('input'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], InputMask.prototype, \"inputViewChild\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputMask.prototype, \"onComplete\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputMask.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputMask.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], InputMask.prototype, \"mask\", null);\n    InputMask = __decorate([\n        core_1.Component({\n            selector: 'p-inputMask',\n            template: \"<input #input pInputText [attr.id]=\\\"inputId\\\" [attr.type]=\\\"type\\\" [attr.name]=\\\"name\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"styleClass\\\" [attr.placeholder]=\\\"placeholder\\\"\\n        [attr.size]=\\\"size\\\" [attr.maxlength]=\\\"maxlength\\\" [attr.tabindex]=\\\"tabindex\\\" [disabled]=\\\"disabled\\\" [readonly]=\\\"readonly\\\" [attr.required]=\\\"required\\\"\\n        (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" (keydown)=\\\"onKeyDown($event)\\\" (keypress)=\\\"onKeyPress($event)\\\" [attr.autofocus]=\\\"autoFocus\\\"\\n        (input)=\\\"onInput($event)\\\" (paste)=\\\"handleInputChange($event)\\\">\",\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [exports.INPUTMASK_VALUE_ACCESSOR, domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], InputMask);\n    return InputMask;\n}());\nexports.InputMask = InputMask;\nvar InputMaskModule = /** @class */ (function () {\n    function InputMaskModule() {\n    }\n    InputMaskModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, inputtext_1.InputTextModule],\n            exports: [InputMask],\n            declarations: [InputMask]\n        })\n    ], InputMaskModule);\n    return InputMaskModule;\n}());\nexports.InputMaskModule = InputMaskModule;\n//# sourceMappingURL=inputmask.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/inputmask/inputmask.js\n// module id = 238\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar forms_1 = require(\"@angular/forms\");\nexports.KEYFILTER_VALIDATOR = {\n    provide: forms_1.NG_VALIDATORS,\n    useExisting: core_1.forwardRef(function () { return KeyFilter; }),\n    multi: true\n};\nvar KeyFilter = /** @class */ (function () {\n    function KeyFilter(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n    }\n    KeyFilter_1 = KeyFilter;\n    Object.defineProperty(KeyFilter.prototype, \"pattern\", {\n        get: function () {\n            return this._pattern;\n        },\n        set: function (_pattern) {\n            this._pattern = _pattern;\n            this.regex = KeyFilter_1.DEFAULT_MASKS[this._pattern] || this._pattern;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    KeyFilter.prototype.isNavKeyPress = function (e) {\n        var k = e.keyCode;\n        k = this.domHandler.getBrowser().safari ? (KeyFilter_1.SAFARI_KEYS[k] || k) : k;\n        return (k >= 33 && k <= 40) || k == KeyFilter_1.KEYS.RETURN || k == KeyFilter_1.KEYS.TAB || k == KeyFilter_1.KEYS.ESC;\n    };\n    ;\n    KeyFilter.prototype.isSpecialKey = function (e) {\n        var k = e.keyCode;\n        var c = e.charCode;\n        return k == 9 || k == 13 || k == 27 || k == 16 || k == 17 || (k >= 18 && k <= 20) ||\n            (this.domHandler.getBrowser().opera && !e.shiftKey && (k == 8 || (k >= 33 && k <= 35) || (k >= 36 && k <= 39) || (k >= 44 && k <= 45)));\n    };\n    KeyFilter.prototype.getKey = function (e) {\n        var k = e.keyCode || e.charCode;\n        return this.domHandler.getBrowser().safari ? (KeyFilter_1.SAFARI_KEYS[k] || k) : k;\n    };\n    KeyFilter.prototype.getCharCode = function (e) {\n        return e.charCode || e.keyCode || e.which;\n    };\n    ;\n    KeyFilter.prototype.onKeyPress = function (e) {\n        if (this.pValidateOnly) {\n            return;\n        }\n        var browser = this.domHandler.getBrowser();\n        if (e.ctrlKey || e.altKey) {\n            return;\n        }\n        var k = this.getKey(e);\n        if (browser.mozilla && (this.isNavKeyPress(e) || k == KeyFilter_1.KEYS.BACKSPACE || (k == KeyFilter_1.KEYS.DELETE && e.charCode == 0))) {\n            return;\n        }\n        var c = this.getCharCode(e);\n        var cc = String.fromCharCode(c);\n        var ok = true;\n        if (browser.mozilla && (this.isSpecialKey(e) || !cc)) {\n            return;\n        }\n        ok = this.regex.test(cc);\n        if (!ok) {\n            e.preventDefault();\n        }\n    };\n    KeyFilter.prototype.validate = function (c) {\n        if (this.pValidateOnly) {\n            var value = this.el.nativeElement.value;\n            if (value && !this.regex.test(value)) {\n                return {\n                    validatePattern: false\n                };\n            }\n        }\n    };\n    KeyFilter.DEFAULT_MASKS = {\n        pint: /[\\d]/,\n        'int': /[\\d\\-]/,\n        pnum: /[\\d\\.]/,\n        money: /[\\d\\.\\s,]/,\n        num: /[\\d\\-\\.]/,\n        hex: /[0-9a-f]/i,\n        email: /[a-z0-9_\\.\\-@]/i,\n        alpha: /[a-z_]/i,\n        alphanum: /[a-z0-9_]/i\n    };\n    KeyFilter.KEYS = {\n        TAB: 9,\n        RETURN: 13,\n        ESC: 27,\n        BACKSPACE: 8,\n        DELETE: 46\n    };\n    KeyFilter.SAFARI_KEYS = {\n        63234: 37,\n        63235: 39,\n        63232: 38,\n        63233: 40,\n        63276: 33,\n        63277: 34,\n        63272: 46,\n        63273: 36,\n        63275: 35 // end\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], KeyFilter.prototype, \"pValidateOnly\", void 0);\n    __decorate([\n        core_1.Input('pKeyFilter'),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], KeyFilter.prototype, \"pattern\", null);\n    __decorate([\n        core_1.HostListener('keypress', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [KeyboardEvent]),\n        __metadata(\"design:returntype\", void 0)\n    ], KeyFilter.prototype, \"onKeyPress\", null);\n    KeyFilter = KeyFilter_1 = __decorate([\n        core_1.Directive({\n            selector: '[pKeyFilter]',\n            providers: [domhandler_1.DomHandler, exports.KEYFILTER_VALIDATOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], KeyFilter);\n    return KeyFilter;\n    var KeyFilter_1;\n}());\nexports.KeyFilter = KeyFilter;\nvar KeyFilterModule = /** @class */ (function () {\n    function KeyFilterModule() {\n    }\n    KeyFilterModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [KeyFilter],\n            declarations: [KeyFilter]\n        })\n    ], KeyFilterModule);\n    return KeyFilterModule;\n}());\nexports.KeyFilterModule = KeyFilterModule;\n//# sourceMappingURL=keyfilter.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/keyfilter/keyfilter.js\n// module id = 239\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar Password = /** @class */ (function () {\n    function Password(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.promptLabel = 'Please enter a password';\n        this.weakLabel = 'Weak';\n        this.mediumLabel = 'Medium';\n        this.strongLabel = 'Strong';\n        this.feedback = true;\n    }\n    Password.prototype.ngAfterViewInit = function () {\n        this.panel = document.createElement('div');\n        this.panel.className = 'ui-password-panel ui-widget ui-state-highlight ui-corner-all ui-helper-hidden ui-password-panel-overlay';\n        this.meter = document.createElement('div');\n        this.meter.className = 'ui-password-meter';\n        this.info = document.createElement('div');\n        this.info.className = 'ui-password-info';\n        this.info.textContent = this.promptLabel;\n        if (this.feedback) {\n            this.panel.appendChild(this.meter);\n            this.panel.appendChild(this.info);\n            document.body.appendChild(this.panel);\n        }\n    };\n    Password.prototype.ngDoCheck = function () {\n        this.updateFilledState();\n    };\n    //To trigger change detection to manage ui-state-filled for material labels when there is no value binding\n    Password.prototype.onInput = function (e) {\n        this.updateFilledState();\n    };\n    Password.prototype.updateFilledState = function () {\n        this.filled = this.el.nativeElement.value && this.el.nativeElement.value.length;\n    };\n    Password.prototype.onFocus = function (e) {\n        this.panel.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n        this.domHandler.removeClass(this.panel, 'ui-helper-hidden');\n        this.domHandler.absolutePosition(this.panel, this.el.nativeElement);\n        this.domHandler.fadeIn(this.panel, 250);\n    };\n    Password.prototype.onBlur = function (e) {\n        this.domHandler.addClass(this.panel, 'ui-helper-hidden');\n    };\n    Password.prototype.onKeyup = function (e) {\n        var value = e.target.value, label = null, meterPos = null;\n        if (value.length === 0) {\n            label = this.promptLabel;\n            meterPos = '0px 0px';\n        }\n        else {\n            var score = this.testStrength(value);\n            if (score < 30) {\n                label = this.weakLabel;\n                meterPos = '0px -10px';\n            }\n            else if (score >= 30 && score < 80) {\n                label = this.mediumLabel;\n                meterPos = '0px -20px';\n            }\n            else if (score >= 80) {\n                label = this.strongLabel;\n                meterPos = '0px -30px';\n            }\n        }\n        this.meter.style.backgroundPosition = meterPos;\n        this.info.textContent = label;\n    };\n    Password.prototype.testStrength = function (str) {\n        var grade = 0;\n        var val;\n        val = str.match('[0-9]');\n        grade += this.normalize(val ? val.length : 1 / 4, 1) * 25;\n        val = str.match('[a-zA-Z]');\n        grade += this.normalize(val ? val.length : 1 / 2, 3) * 10;\n        val = str.match('[!@#$%^&*?_~.,;=]');\n        grade += this.normalize(val ? val.length : 1 / 6, 1) * 35;\n        val = str.match('[A-Z]');\n        grade += this.normalize(val ? val.length : 1 / 6, 1) * 30;\n        grade *= str.length / 8;\n        return grade > 100 ? 100 : grade;\n    };\n    Password.prototype.normalize = function (x, y) {\n        var diff = x - y;\n        if (diff <= 0)\n            return x / y;\n        else\n            return 1 + 0.5 * (x / (x + y / 4));\n    };\n    Object.defineProperty(Password.prototype, \"disabled\", {\n        get: function () {\n            return this.el.nativeElement.disabled;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Password.prototype.ngOnDestroy = function () {\n        if (!this.feedback)\n            return;\n        this.panel.removeChild(this.meter);\n        this.panel.removeChild(this.info);\n        document.body.removeChild(this.panel);\n        this.panel = null;\n        this.meter = null;\n        this.info = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Password.prototype, \"promptLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Password.prototype, \"weakLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Password.prototype, \"mediumLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Password.prototype, \"strongLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Password.prototype, \"feedback\", void 0);\n    __decorate([\n        core_1.HostListener('input', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Password.prototype, \"onInput\", null);\n    __decorate([\n        core_1.HostListener('focus', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Password.prototype, \"onFocus\", null);\n    __decorate([\n        core_1.HostListener('blur', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Password.prototype, \"onBlur\", null);\n    __decorate([\n        core_1.HostListener('keyup', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], Password.prototype, \"onKeyup\", null);\n    Password = __decorate([\n        core_1.Directive({\n            selector: '[pPassword]',\n            host: {\n                '[class.ui-inputtext]': 'true',\n                '[class.ui-corner-all]': 'true',\n                '[class.ui-state-default]': 'true',\n                '[class.ui-widget]': 'true',\n                '[class.ui-state-filled]': 'filled'\n            },\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Password);\n    return Password;\n}());\nexports.Password = Password;\nvar PasswordModule = /** @class */ (function () {\n    function PasswordModule() {\n    }\n    PasswordModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Password],\n            declarations: [Password]\n        })\n    ], PasswordModule);\n    return PasswordModule;\n}());\nexports.PasswordModule = PasswordModule;\n//# sourceMappingURL=password.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/password/password.js\n// module id = 240\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar inputtext_1 = require(\"../inputtext/inputtext\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar forms_1 = require(\"@angular/forms\");\nexports.SPINNER_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Spinner; }),\n    multi: true\n};\nvar Spinner = /** @class */ (function () {\n    function Spinner(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.onChange = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.step = 1;\n        this.decimalSeparator = '.';\n        this.thousandSeparator = ',';\n        this.formatInput = true;\n        this.type = 'text';\n        this.valueAsString = '';\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.keyPattern = /[0-9\\+\\-]/;\n        this.negativeSeparator = '-';\n    }\n    Spinner.prototype.ngOnInit = function () {\n        if (Math.floor(this.step) === 0) {\n            this.precision = this.step.toString().split(/[,]|[.]/)[1].length;\n        }\n    };\n    Spinner.prototype.repeat = function (event, interval, dir) {\n        var _this = this;\n        var i = interval || 500;\n        this.clearTimer();\n        this.timer = setTimeout(function () {\n            _this.repeat(event, 40, dir);\n        }, i);\n        this.spin(event, dir);\n    };\n    Spinner.prototype.spin = function (event, dir) {\n        var step = this.step * dir;\n        var currentValue = this.value || 0;\n        var newValue = null;\n        if (this.precision)\n            this.value = parseFloat(this.toFixed(currentValue + step, this.precision));\n        else\n            this.value = currentValue + step;\n        if (this.maxlength !== undefined && this.value.toString().length > this.maxlength) {\n            this.value = currentValue;\n        }\n        if (this.min !== undefined && this.value < this.min) {\n            this.value = this.min;\n        }\n        if (this.max !== undefined && this.value > this.max) {\n            this.value = this.max;\n        }\n        this.formatValue();\n        this.onModelChange(this.value);\n        this.onChange.emit(event);\n    };\n    Spinner.prototype.toFixed = function (value, precision) {\n        var power = Math.pow(10, precision || 0);\n        return String(Math.round(value * power) / power);\n    };\n    Spinner.prototype.onUpButtonMousedown = function (event) {\n        if (!this.disabled) {\n            this.inputfieldViewChild.nativeElement.focus();\n            this.repeat(event, null, 1);\n            this.updateFilledState();\n            event.preventDefault();\n        }\n    };\n    Spinner.prototype.onUpButtonMouseup = function (event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    };\n    Spinner.prototype.onUpButtonMouseleave = function (event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    };\n    Spinner.prototype.onDownButtonMousedown = function (event) {\n        if (!this.disabled) {\n            this.inputfieldViewChild.nativeElement.focus();\n            this.repeat(event, null, -1);\n            this.updateFilledState();\n            event.preventDefault();\n        }\n    };\n    Spinner.prototype.onDownButtonMouseup = function (event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    };\n    Spinner.prototype.onDownButtonMouseleave = function (event) {\n        if (!this.disabled) {\n            this.clearTimer();\n        }\n    };\n    Spinner.prototype.onInputKeydown = function (event) {\n        if (event.which == 38) {\n            this.spin(event, 1);\n            event.preventDefault();\n        }\n        else if (event.which == 40) {\n            this.spin(event, -1);\n            event.preventDefault();\n        }\n    };\n    Spinner.prototype.onInputKeyPress = function (event) {\n        var inputChar = String.fromCharCode(event.charCode);\n        if (!this.keyPattern.test(inputChar) && inputChar != this.decimalSeparator && event.keyCode != 9 && event.keyCode != 8 && event.keyCode != 37 && event.keyCode != 39 && event.keyCode != 46) {\n            event.preventDefault();\n        }\n    };\n    Spinner.prototype.onInputKeyup = function (event) {\n        var inputValue = event.target.value;\n        if (event.key !== this.decimalSeparator && event.key !== this.thousandSeparator && event.key !== this.negativeSeparator) {\n            this.value = this.parseValue(inputValue);\n            this.formatValue();\n        }\n        this.onModelChange(this.value);\n        this.updateFilledState();\n    };\n    Spinner.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        this.restrictValue();\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    };\n    Spinner.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        this.onFocus.emit(event);\n    };\n    Spinner.prototype.parseValue = function (val) {\n        var value;\n        if (this.formatInput) {\n            val = val.split(this.thousandSeparator).join('');\n        }\n        if (val.trim() === '') {\n            value = null;\n        }\n        else {\n            if (this.precision) {\n                value = parseFloat(val.replace(',', '.'));\n            }\n            else {\n                value = parseInt(val);\n            }\n            if (isNaN(value)) {\n                value = null;\n            }\n        }\n        return value;\n    };\n    Spinner.prototype.restrictValue = function () {\n        var restricted;\n        if (this.max !== undefined && this.value > this.max) {\n            this.value = this.max;\n            restricted = true;\n        }\n        if (this.min !== undefined && this.value < this.min) {\n            this.value = this.min;\n            restricted = true;\n        }\n        if (restricted) {\n            this.onModelChange(this.value);\n            this.formatValue();\n        }\n    };\n    Spinner.prototype.formatValue = function () {\n        if (this.value !== null && this.value !== undefined) {\n            var textValue = String(this.value).replace('.', this.decimalSeparator);\n            if (this.formatInput) {\n                var parts = textValue.split(this.decimalSeparator);\n                parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, this.thousandSeparator);\n                textValue = parts.join(this.decimalSeparator);\n            }\n            this.valueAsString = textValue;\n        }\n        else {\n            this.valueAsString = '';\n        }\n        this.inputfieldViewChild.nativeElement.value = this.valueAsString;\n    };\n    Spinner.prototype.handleChange = function (event) {\n        this.onChange.emit(event);\n    };\n    Spinner.prototype.clearTimer = function () {\n        if (this.timer) {\n            clearInterval(this.timer);\n        }\n    };\n    Spinner.prototype.writeValue = function (value) {\n        this.value = value;\n        this.formatValue();\n        this.updateFilledState();\n    };\n    Spinner.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Spinner.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Spinner.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Spinner.prototype.updateFilledState = function () {\n        this.filled = (this.value !== undefined && this.value != null);\n    };\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Spinner.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Spinner.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Spinner.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"step\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"min\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"max\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"maxlength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"size\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Spinner.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Spinner.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"decimalSeparator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"thousandSeparator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Spinner.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Spinner.prototype, \"formatInput\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Spinner.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"inputStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Spinner.prototype, \"inputStyleClass\", void 0);\n    __decorate([\n        core_1.ViewChild('inputfield'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Spinner.prototype, \"inputfieldViewChild\", void 0);\n    Spinner = __decorate([\n        core_1.Component({\n            selector: 'p-spinner',\n            template: \"\\n        <span class=\\\"ui-spinner ui-widget ui-corner-all\\\">\\n            <input #inputfield [attr.type]=\\\"type\\\" [attr.id]=\\\"inputId\\\" [value]=\\\"valueAsString\\\" [attr.name]=\\\"name\\\"\\n            [attr.size]=\\\"size\\\" [attr.maxlength]=\\\"maxlength\\\" [attr.tabindex]=\\\"tabindex\\\" [attr.placeholder]=\\\"placeholder\\\" [disabled]=\\\"disabled\\\" [attr.readonly]=\\\"readonly\\\" [attr.required]=\\\"required\\\"\\n            (keydown)=\\\"onInputKeydown($event)\\\" (keyup)=\\\"onInputKeyup($event)\\\" (keypress)=\\\"onInputKeyPress($event)\\\" (blur)=\\\"onInputBlur($event)\\\" (change)=\\\"handleChange($event)\\\" (focus)=\\\"onInputFocus($event)\\\"\\n            [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\" [ngClass]=\\\"'ui-spinner-input ui-inputtext ui-widget ui-state-default ui-corner-all'\\\">\\n            <button type=\\\"button\\\" [ngClass]=\\\"{'ui-spinner-button ui-spinner-up ui-corner-tr ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}\\\" [disabled]=\\\"disabled\\\" [attr.readonly]=\\\"readonly\\\"\\n                (mouseleave)=\\\"onUpButtonMouseleave($event)\\\" (mousedown)=\\\"onUpButtonMousedown($event)\\\" (mouseup)=\\\"onUpButtonMouseup($event)\\\">\\n                <span class=\\\"ui-spinner-button-icon fa fa-caret-up ui-clickable\\\"></span>\\n            </button>\\n            <button type=\\\"button\\\" [ngClass]=\\\"{'ui-spinner-button ui-spinner-down ui-corner-br ui-button ui-widget ui-state-default':true,'ui-state-disabled':disabled}\\\" [disabled]=\\\"disabled\\\" [attr.readonly]=\\\"readonly\\\"\\n                (mouseleave)=\\\"onDownButtonMouseleave($event)\\\" (mousedown)=\\\"onDownButtonMousedown($event)\\\" (mouseup)=\\\"onDownButtonMouseup($event)\\\">\\n                <span class=\\\"ui-spinner-button-icon fa fa-caret-down ui-clickable\\\"></span>\\n            </button>\\n        </span>\\n    \",\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [domhandler_1.DomHandler, exports.SPINNER_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Spinner);\n    return Spinner;\n}());\nexports.Spinner = Spinner;\nvar SpinnerModule = /** @class */ (function () {\n    function SpinnerModule() {\n    }\n    SpinnerModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, inputtext_1.InputTextModule],\n            exports: [Spinner],\n            declarations: [Spinner]\n        })\n    ], SpinnerModule);\n    return SpinnerModule;\n}());\nexports.SpinnerModule = SpinnerModule;\n//# sourceMappingURL=spinner.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/spinner/spinner.js\n// module id = 241\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar Tooltip = /** @class */ (function () {\n    function Tooltip(el, domHandler, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.zone = zone;\n        this.tooltipPosition = 'right';\n        this.tooltipEvent = 'hover';\n        this.appendTo = 'body';\n        this.tooltipZIndex = 'auto';\n        this.escape = true;\n    }\n    Tooltip.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            if (_this.tooltipEvent === 'hover') {\n                _this.mouseEnterListener = _this.onMouseEnter.bind(_this);\n                _this.mouseLeaveListener = _this.onMouseLeave.bind(_this);\n                _this.clickListener = _this.onClick.bind(_this);\n                _this.el.nativeElement.addEventListener('mouseenter', _this.mouseEnterListener);\n                _this.el.nativeElement.addEventListener('mouseleave', _this.mouseLeaveListener);\n                _this.el.nativeElement.addEventListener('click', _this.clickListener);\n            }\n            else if (_this.tooltipEvent === 'focus') {\n                _this.focusListener = _this.onFocus.bind(_this);\n                _this.blurListener = _this.onBlur.bind(_this);\n                _this.el.nativeElement.addEventListener('focus', _this.focusListener);\n                _this.el.nativeElement.addEventListener('blur', _this.blurListener);\n            }\n        });\n    };\n    Tooltip.prototype.onMouseEnter = function (e) {\n        if (!this.container && !this.showTimeout) {\n            this.activate();\n        }\n    };\n    Tooltip.prototype.onMouseLeave = function (e) {\n        this.deactivate();\n    };\n    Tooltip.prototype.onFocus = function (e) {\n        this.activate();\n    };\n    Tooltip.prototype.onBlur = function (e) {\n        this.deactivate();\n    };\n    Tooltip.prototype.onClick = function (e) {\n        this.deactivate();\n    };\n    Tooltip.prototype.activate = function () {\n        var _this = this;\n        this.active = true;\n        this.clearHideTimeout();\n        if (this.showDelay)\n            this.showTimeout = setTimeout(function () { _this.show(); }, this.showDelay);\n        else\n            this.show();\n        if (this.life) {\n            var duration = this.showDelay ? this.life + this.showDelay : this.life;\n            this.hideTimeout = setTimeout(function () { _this.hide(); }, duration);\n        }\n    };\n    Tooltip.prototype.deactivate = function () {\n        var _this = this;\n        this.active = false;\n        this.clearShowTimeout();\n        if (this.hideDelay) {\n            this.clearHideTimeout(); //life timeout\n            this.hideTimeout = setTimeout(function () { _this.hide(); }, this.hideDelay);\n        }\n        else {\n            this.hide();\n        }\n    };\n    Object.defineProperty(Tooltip.prototype, \"text\", {\n        get: function () {\n            return this._text;\n        },\n        set: function (text) {\n            this._text = text;\n            if (this.active) {\n                if (this._text) {\n                    if (this.container && this.container.offsetParent)\n                        this.updateText();\n                    else\n                        this.show();\n                }\n                else {\n                    this.hide();\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Tooltip.prototype.create = function () {\n        this.container = document.createElement('div');\n        var tooltipArrow = document.createElement('div');\n        tooltipArrow.className = 'ui-tooltip-arrow';\n        this.container.appendChild(tooltipArrow);\n        this.tooltipText = document.createElement('div');\n        this.tooltipText.className = 'ui-tooltip-text ui-shadow ui-corner-all';\n        this.updateText();\n        if (this.positionStyle) {\n            this.container.style.position = this.positionStyle;\n        }\n        this.container.appendChild(this.tooltipText);\n        if (this.appendTo === 'body')\n            document.body.appendChild(this.container);\n        else if (this.appendTo === 'target')\n            this.domHandler.appendChild(this.container, this.el.nativeElement);\n        else\n            this.domHandler.appendChild(this.container, this.appendTo);\n        this.container.style.display = 'inline-block';\n    };\n    Tooltip.prototype.show = function () {\n        if (!this.text || this.disabled) {\n            return;\n        }\n        this.create();\n        this.align();\n        this.domHandler.fadeIn(this.container, 250);\n        if (this.tooltipZIndex === 'auto')\n            this.container.style.zIndex = ++domhandler_1.DomHandler.zindex;\n        else\n            this.container.style.zIndex = this.tooltipZIndex;\n        this.bindDocumentResizeListener();\n    };\n    Tooltip.prototype.hide = function () {\n        this.remove();\n    };\n    Tooltip.prototype.updateText = function () {\n        if (this.escape) {\n            this.tooltipText.innerHTML = '';\n            this.tooltipText.appendChild(document.createTextNode(this._text));\n        }\n        else {\n            this.tooltipText.innerHTML = this._text;\n        }\n    };\n    Tooltip.prototype.align = function () {\n        var position = this.tooltipPosition;\n        switch (position) {\n            case 'top':\n                this.alignTop();\n                if (this.isOutOfBounds()) {\n                    this.alignBottom();\n                }\n                break;\n            case 'bottom':\n                this.alignBottom();\n                if (this.isOutOfBounds()) {\n                    this.alignTop();\n                }\n                break;\n            case 'left':\n                this.alignLeft();\n                if (this.isOutOfBounds()) {\n                    this.alignRight();\n                    if (this.isOutOfBounds()) {\n                        this.alignTop();\n                        if (this.isOutOfBounds()) {\n                            this.alignBottom();\n                        }\n                    }\n                }\n                break;\n            case 'right':\n                this.alignRight();\n                if (this.isOutOfBounds()) {\n                    this.alignLeft();\n                    if (this.isOutOfBounds()) {\n                        this.alignTop();\n                        if (this.isOutOfBounds()) {\n                            this.alignBottom();\n                        }\n                    }\n                }\n                break;\n        }\n    };\n    Tooltip.prototype.getHostOffset = function () {\n        if (this.appendTo === 'body' || this.appendTo === 'target') {\n            var offset = this.el.nativeElement.getBoundingClientRect();\n            var targetLeft = offset.left + this.domHandler.getWindowScrollLeft();\n            var targetTop = offset.top + this.domHandler.getWindowScrollTop();\n            return { left: targetLeft, top: targetTop };\n        }\n        else {\n            return { left: 0, top: 0 };\n        }\n    };\n    Tooltip.prototype.alignRight = function () {\n        this.preAlign('right');\n        var hostOffset = this.getHostOffset();\n        var left = hostOffset.left + this.domHandler.getOuterWidth(this.el.nativeElement);\n        var top = hostOffset.top + (this.domHandler.getOuterHeight(this.el.nativeElement) - this.domHandler.getOuterHeight(this.container)) / 2;\n        this.container.style.left = left + 'px';\n        this.container.style.top = top + 'px';\n    };\n    Tooltip.prototype.alignLeft = function () {\n        this.preAlign('left');\n        var hostOffset = this.getHostOffset();\n        var left = hostOffset.left - this.domHandler.getOuterWidth(this.container);\n        var top = hostOffset.top + (this.domHandler.getOuterHeight(this.el.nativeElement) - this.domHandler.getOuterHeight(this.container)) / 2;\n        this.container.style.left = left + 'px';\n        this.container.style.top = top + 'px';\n    };\n    Tooltip.prototype.alignTop = function () {\n        this.preAlign('top');\n        var hostOffset = this.getHostOffset();\n        var left = hostOffset.left + (this.domHandler.getOuterWidth(this.el.nativeElement) - this.domHandler.getOuterWidth(this.container)) / 2;\n        var top = hostOffset.top - this.domHandler.getOuterHeight(this.container);\n        this.container.style.left = left + 'px';\n        this.container.style.top = top + 'px';\n    };\n    Tooltip.prototype.alignBottom = function () {\n        this.preAlign('bottom');\n        var hostOffset = this.getHostOffset();\n        var left = hostOffset.left + (this.domHandler.getOuterWidth(this.el.nativeElement) - this.domHandler.getOuterWidth(this.container)) / 2;\n        var top = hostOffset.top + this.domHandler.getOuterHeight(this.el.nativeElement);\n        this.container.style.left = left + 'px';\n        this.container.style.top = top + 'px';\n    };\n    Tooltip.prototype.preAlign = function (position) {\n        this.container.style.left = -999 + 'px';\n        this.container.style.top = -999 + 'px';\n        var defaultClassName = 'ui-tooltip ui-widget ui-tooltip-' + position;\n        this.container.className = this.tooltipStyleClass ? defaultClassName + ' ' + this.tooltipStyleClass : defaultClassName;\n    };\n    Tooltip.prototype.isOutOfBounds = function () {\n        var offset = this.container.getBoundingClientRect();\n        var targetTop = offset.top;\n        var targetLeft = offset.left;\n        var width = this.domHandler.getOuterWidth(this.container);\n        var height = this.domHandler.getOuterHeight(this.container);\n        var viewport = this.domHandler.getViewport();\n        return (targetLeft + width > viewport.width) || (targetLeft < 0) || (targetTop < 0) || (targetTop + height > viewport.height);\n    };\n    Tooltip.prototype.onWindowResize = function (e) {\n        this.hide();\n    };\n    Tooltip.prototype.bindDocumentResizeListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.resizeListener = _this.onWindowResize.bind(_this);\n            window.addEventListener('resize', _this.resizeListener);\n        });\n    };\n    Tooltip.prototype.unbindDocumentResizeListener = function () {\n        if (this.resizeListener) {\n            window.removeEventListener('resize', this.resizeListener);\n            this.resizeListener = null;\n        }\n    };\n    Tooltip.prototype.unbindEvents = function () {\n        if (this.tooltipEvent === 'hover') {\n            this.el.nativeElement.removeEventListener('mouseenter', this.mouseEnterListener);\n            this.el.nativeElement.removeEventListener('mouseleave', this.mouseLeaveListener);\n            this.el.nativeElement.removeEventListener('click', this.clickListener);\n        }\n        else if (this.tooltipEvent === 'focus') {\n            this.el.nativeElement.removeEventListener('focus', this.focusListener);\n            this.el.nativeElement.removeEventListener('blur', this.blurListener);\n        }\n        this.unbindDocumentResizeListener();\n    };\n    Tooltip.prototype.remove = function () {\n        if (this.container && this.container.parentElement) {\n            if (this.appendTo === 'body')\n                document.body.removeChild(this.container);\n            else if (this.appendTo === 'target')\n                this.el.nativeElement.removeChild(this.container);\n            else\n                this.domHandler.removeChild(this.container, this.appendTo);\n        }\n        this.unbindDocumentResizeListener();\n        this.clearTimeouts();\n        this.container = null;\n    };\n    Tooltip.prototype.clearShowTimeout = function () {\n        if (this.showTimeout) {\n            clearTimeout(this.showTimeout);\n            this.showTimeout = null;\n        }\n    };\n    Tooltip.prototype.clearHideTimeout = function () {\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n    };\n    Tooltip.prototype.clearTimeouts = function () {\n        this.clearShowTimeout();\n        this.clearHideTimeout();\n    };\n    Tooltip.prototype.ngOnDestroy = function () {\n        this.unbindEvents();\n        this.remove();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"tooltipPosition\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"tooltipEvent\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tooltip.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"positionStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"tooltipStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tooltip.prototype, \"tooltipZIndex\", void 0);\n    __decorate([\n        core_1.Input(\"tooltipDisabled\"),\n        __metadata(\"design:type\", Boolean)\n    ], Tooltip.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tooltip.prototype, \"escape\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Tooltip.prototype, \"showDelay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Tooltip.prototype, \"hideDelay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Tooltip.prototype, \"life\", void 0);\n    __decorate([\n        core_1.Input('pTooltip'),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], Tooltip.prototype, \"text\", null);\n    Tooltip = __decorate([\n        core_1.Directive({\n            selector: '[pTooltip]',\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.NgZone])\n    ], Tooltip);\n    return Tooltip;\n}());\nexports.Tooltip = Tooltip;\nvar TooltipModule = /** @class */ (function () {\n    function TooltipModule() {\n    }\n    TooltipModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Tooltip],\n            declarations: [Tooltip]\n        })\n    ], TooltipModule);\n    return TooltipModule;\n}());\nexports.TooltipModule = TooltipModule;\n//# sourceMappingURL=tooltip.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/tooltip/tooltip.js\n// module id = 242\n// module chunks = 0","// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n\n/**\n * Check and return true if an object is type of string\n */\nexport function isString(obj:any) {\n    return typeof obj === \"string\";\n}\n\n/**\n * Check and return true if an object not undefined or null\n */\nexport function isPresent(obj: any) {\n    return obj !== undefined && obj !== null;\n}\n\n/**\n * Check and return true if an object is type of Function\n */\nexport function isFunction(obj: any) {\n    return typeof obj === \"function\";\n}\n\n/**\n * Create Image element with specified url string\n */\nexport function createImage(src: string) {\n    let img:HTMLImageElement = new HTMLImageElement();\n    img.src = src;\n    return img;\n}\n\n/**\n * Call the function\n */\nexport function callFun(fun: Function) {\n    return fun();\n}\n\n\n// WEBPACK FOOTER //\n// ts/src/dnd.utils.ts","// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n\nimport {Injectable, EventEmitter} from '@angular/core';\n\nimport {DragDropConfig} from './dnd.config';\nimport {isPresent} from './dnd.utils';\nimport {SortableContainer} from './sortable.component';\n\nexport class DragDropData {\n    dragData: any;\n    mouseEvent: MouseEvent;\n}\n\nexport function dragDropServiceFactory(): DragDropService  {\n    return new DragDropService();\n}\n\n@Injectable()\nexport class DragDropService {\n    allowedDropZones: Array<string> = [];\n    onDragSuccessCallback: EventEmitter<DragDropData>;\n    dragData: any;\n    isDragged: boolean;\n}\n\nexport function dragDropSortableServiceFactory(config: DragDropConfig): DragDropSortableService  {\n    return new DragDropSortableService(config);\n}\n\n@Injectable()\nexport class DragDropSortableService {\n    index: number;\n    sortableContainer: SortableContainer;\n    isDragged: boolean;\n\n    private _elem: HTMLElement;\n    public get elem(): HTMLElement {\n        return this._elem;\n    }\n\n    constructor(private _config:DragDropConfig) {}\n\n    markSortable(elem: HTMLElement) {\n        if (isPresent(this._elem)) {\n            this._elem.classList.remove(this._config.onSortableDragClass);\n        }\n        if (isPresent(elem)) {\n            this._elem = elem;\n            this._elem.classList.add(this._config.onSortableDragClass);\n        }\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ts/src/dnd.service.ts","// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n\nimport {isString} from './dnd.utils';\n\nexport class DataTransferEffect {\n\n    static COPY = new DataTransferEffect('copy');\n    static LINK = new DataTransferEffect('link');\n    static MOVE = new DataTransferEffect('move');\n    static NONE = new DataTransferEffect('none');\n\n    constructor(public name: string) { }\n}\n\nexport class DragImage {\n    constructor(\n        public imageElement: any,\n        public x_offset: number = 0,\n        public y_offset: number = 0) {\n            if (isString(this.imageElement)) {\n                // Create real image from string source\n                let imgScr: string = <string>this.imageElement;\n                this.imageElement = new HTMLImageElement();\n                (<HTMLImageElement>this.imageElement).src = imgScr;\n            }\n        }\n}\n\nexport class DragDropConfig {\n    public onDragStartClass: string = \"dnd-drag-start\";\n    public onDragEnterClass: string = \"dnd-drag-enter\";\n    public onDragOverClass: string = \"dnd-drag-over\";\n    public onSortableDragClass: string = \"dnd-sortable-drag\";\n\n    public dragEffect: DataTransferEffect = DataTransferEffect.MOVE;\n    public dropEffect: DataTransferEffect = DataTransferEffect.MOVE;\n    public dragCursor: string = \"move\";\n    public dragImage: DragImage;\n    public defaultCursor: string = \"pointer\";\n}\n\n\n// WEBPACK FOOTER //\n// ts/src/dnd.config.ts","// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n\nimport {Injectable, ChangeDetectorRef, ViewRef} from '@angular/core';\nimport {ElementRef} from '@angular/core';\n\nimport { DragDropConfig, DragImage } from './dnd.config';\nimport { DragDropService } from './dnd.service';\nimport { isString, isFunction, isPresent, createImage, callFun } from './dnd.utils';\n\n@Injectable()\nexport abstract class AbstractComponent {\n    _elem: HTMLElement;\n    _dragHandle: HTMLElement;\n    _dragHelper: HTMLElement;\n    _defaultCursor: string;\n\n    /**\n     * Last element that was mousedown'ed\n     */\n    _target: EventTarget;\n\n    /**\n     * Whether the object is draggable. Default is true.\n     */\n    private _dragEnabled: boolean = false;\n    set dragEnabled(enabled: boolean) {\n        this._dragEnabled = !!enabled;\n        this._elem.draggable = this._dragEnabled;\n    }\n    get dragEnabled(): boolean {\n        return this._dragEnabled;\n    }\n\n    /**\n     * Allows drop on this element\n     */\n    dropEnabled: boolean = false;\n    /**\n     * Drag effect\n     */\n    effectAllowed: string;\n    /**\n     * Drag cursor\n     */\n    effectCursor: string;\n\n    /**\n     * Restrict places where a draggable element can be dropped. Either one of\n     * these two mechanisms can be used:\n     *\n     * - dropZones: an array of strings that permits to specify the drop zones\n     *   associated with this component. By default, if the drop-zones attribute\n     *   is not specified, the droppable component accepts drop operations by\n     *   all the draggable components that do not specify the allowed-drop-zones\n     *\n     * - allowDrop: a boolean function for droppable components, that is checked\n     *   when an item is dragged. The function is passed the dragData of this\n     *   item.\n     *   - if it returns true, the item can be dropped in this component\n     *   - if it returns false, the item cannot be dropped here\n     */\n    allowDrop: (dropData: any) => boolean;\n    dropZones: string[] = [];\n\n    /**\n     * Here is the property dragImage you can use:\n     * - The string value as url to the image\n     *   <div class=\"panel panel-default\"\n     *        dnd-draggable [dragEnabled]=\"true\"\n     *        [dragImage]=\"/images/simpler.png\">\n     * ...\n     * - The DragImage value with Image and optional offset by x and y:\n     *   let myDragImage: DragImage = new DragImage(\"/images/simpler1.png\", 0, 0);\n     * ...\n     *   <div class=\"panel panel-default\"\n     *        dnd-draggable [dragEnabled]=\"true\"\n     *        [dragImage]=\"myDragImage\">\n     * ...\n     * - The custom function to return the value of dragImage programmatically:\n     *   <div class=\"panel panel-default\"\n     *        dnd-draggable [dragEnabled]=\"true\"\n     *        [dragImage]=\"getDragImage(someData)\">\n     * ...\n     *   getDragImage(value:any): string {\n     *     return value ? \"/images/simpler1.png\" : \"/images/simpler2.png\"\n     *   }\n     */\n    dragImage: string | DragImage | Function;\n\n    cloneItem: boolean = false;\n\n    constructor(elemRef: ElementRef, public _dragDropService: DragDropService, public _config: DragDropConfig,\n        private _cdr: ChangeDetectorRef) {\n\n        // Assign default cursor unless overridden\n        this._defaultCursor = _config.defaultCursor;\n        this._elem = elemRef.nativeElement;\n        this._elem.style.cursor = this._defaultCursor;  // set default cursor on our element\n        //\n        // DROP events\n        //\n        this._elem.ondragenter = (event: Event) => {\n            this._onDragEnter(event);\n        };\n        this._elem.ondragover = (event: DragEvent) => {\n            this._onDragOver(event);\n            //\n            if (event.dataTransfer != null) {\n                event.dataTransfer.dropEffect = this._config.dropEffect.name;\n            }\n\n            return false;\n        };\n        this._elem.ondragleave = (event: Event) => {\n            this._onDragLeave(event);\n        };\n        this._elem.ondrop = (event: Event) => {\n            this._onDrop(event);\n        };\n        //\n        // Drag events\n        //\n        this._elem.onmousedown = (event: MouseEvent) => {\n            this._target = event.target;\n        };\n        this._elem.ondragstart = (event: DragEvent) => {\n            if (this._dragHandle) {\n                if (!this._dragHandle.contains(<Element>this._target)) {\n                    event.preventDefault();\n                    return;\n                }\n            }\n\n            this._onDragStart(event);\n            //\n            if (event.dataTransfer != null) {\n                event.dataTransfer.setData('text', '');\n                // Change drag effect\n                event.dataTransfer.effectAllowed = this.effectAllowed || this._config.dragEffect.name;\n                // Change drag image\n                if (isPresent(this.dragImage)) {\n                    if (isString(this.dragImage)) {\n                        (<any>event.dataTransfer).setDragImage(createImage(<string>this.dragImage));\n                    } else if (isFunction(this.dragImage)) {\n                        (<any>event.dataTransfer).setDragImage(callFun(<Function>this.dragImage));\n                    } else {\n                        let img: DragImage = <DragImage>this.dragImage;\n                        (<any>event.dataTransfer).setDragImage(img.imageElement, img.x_offset, img.y_offset);\n                    }\n                } else if (isPresent(this._config.dragImage)) {\n                    let dragImage: DragImage = this._config.dragImage;\n                    (<any>event.dataTransfer).setDragImage(dragImage.imageElement, dragImage.x_offset, dragImage.y_offset);\n                } else if (this.cloneItem) {\n                    this._dragHelper = <HTMLElement>this._elem.cloneNode(true);\n                    this._dragHelper.classList.add('dnd-drag-item');\n                    this._dragHelper.style.position = \"absolute\";\n                    this._dragHelper.style.top = \"0px\";\n                    this._dragHelper.style.left = \"-1000px\";\n                    this._elem.parentElement.appendChild(this._dragHelper);\n                    (<any>event.dataTransfer).setDragImage(this._dragHelper, event.offsetX, event.offsetY);\n                }\n\n                // Change drag cursor\n                let cursorelem = (this._dragHandle) ? this._dragHandle : this._elem;\n\n                if (this._dragEnabled) {\n                    cursorelem.style.cursor = this.effectCursor ? this.effectCursor : this._config.dragCursor;\n                } else {\n                    cursorelem.style.cursor = this._defaultCursor;\n                }\n            }\n        };\n\n        this._elem.ondragend = (event: Event) => {\n            if (this._elem.parentElement && this._dragHelper) {\n                this._elem.parentElement.removeChild(this._dragHelper);\n            }\n            // console.log('ondragend', event.target);\n            this._onDragEnd(event);\n            // Restore style of dragged element\n            let cursorelem = (this._dragHandle) ? this._dragHandle : this._elem;\n            cursorelem.style.cursor = this._defaultCursor;\n        };\n    }\n\n    public setDragHandle(elem: HTMLElement) {\n        this._dragHandle = elem;\n    }\n    /******* Change detection ******/\n\n    detectChanges () {\n        // Programmatically run change detection to fix issue in Safari\n        setTimeout(() => {\n            if ( this._cdr && !(this._cdr as ViewRef).destroyed ) {\n                this._cdr.detectChanges();\n            }\n        }, 250);\n    }\n\n    //****** Droppable *******//\n    private _onDragEnter(event: Event): void {\n        // console.log('ondragenter._isDropAllowed', this._isDropAllowed);\n        if (this._isDropAllowed(event)) {\n            // event.preventDefault();\n            this._onDragEnterCallback(event);\n        }\n    }\n\n    private _onDragOver(event: Event) {\n        // // console.log('ondragover._isDropAllowed', this._isDropAllowed);\n        if (this._isDropAllowed(event)) {\n            // The element is over the same source element - do nothing\n            if (event.preventDefault) {\n                // Necessary. Allows us to drop.\n                event.preventDefault();\n            }\n\n            this._onDragOverCallback(event);\n        }\n    }\n\n    private _onDragLeave(event: Event): void {\n        // console.log('ondragleave._isDropAllowed', this._isDropAllowed);\n        if (this._isDropAllowed(event)) {\n            // event.preventDefault();\n            this._onDragLeaveCallback(event);\n        }\n    }\n\n    private _onDrop(event: Event): void {\n        // console.log('ondrop._isDropAllowed', this._isDropAllowed);\n        if (this._isDropAllowed(event)) {\n            // Necessary. Allows us to drop.\n            this._preventAndStop(event);\n\n            this._onDropCallback(event);\n\n            this.detectChanges();\n        }\n    }\n\n    private _isDropAllowed(event: any): boolean {\n        if ((this._dragDropService.isDragged || (event.dataTransfer && event.dataTransfer.files)) && this.dropEnabled) {\n            // First, if `allowDrop` is set, call it to determine whether the\n            // dragged element can be dropped here.\n            if (this.allowDrop) {\n                return this.allowDrop(this._dragDropService.dragData);\n            }\n\n            // Otherwise, use dropZones if they are set.\n            if (this.dropZones.length === 0 && this._dragDropService.allowedDropZones.length === 0) {\n                return true;\n            }\n            for (let i: number = 0; i < this._dragDropService.allowedDropZones.length; i++) {\n                let dragZone: string = this._dragDropService.allowedDropZones[i];\n                if (this.dropZones.indexOf(dragZone) !== -1) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    }\n\n    private _preventAndStop(event: Event): any {\n        if (event.preventDefault) {\n            event.preventDefault();\n        }\n        if (event.stopPropagation) {\n            event.stopPropagation();\n        }\n    }\n\n    //*********** Draggable **********//\n\n    private _onDragStart(event: Event): void {\n        //console.log('ondragstart.dragEnabled', this._dragEnabled);\n        if (this._dragEnabled) {\n            this._dragDropService.allowedDropZones = this.dropZones;\n            // console.log('ondragstart.allowedDropZones', this._dragDropService.allowedDropZones);\n            this._onDragStartCallback(event);\n        }\n    }\n\n    private _onDragEnd(event: Event): void {\n        this._dragDropService.allowedDropZones = [];\n        // console.log('ondragend.allowedDropZones', this._dragDropService.allowedDropZones);\n        this._onDragEndCallback(event);\n    }\n\n    //**** Drop Callbacks ****//\n    _onDragEnterCallback(event: Event) { }\n    _onDragOverCallback(event: Event) { }\n    _onDragLeaveCallback(event: Event) { }\n    _onDropCallback(event: Event) { }\n\n    //**** Drag Callbacks ****//\n    _onDragStartCallback(event: Event) { }\n    _onDragEndCallback(event: Event) { }\n}\n\nexport class AbstractHandleComponent {\n    _elem: HTMLElement;\n    constructor(elemRef: ElementRef, public _dragDropService: DragDropService, public _config: DragDropConfig,\n        private _Component: AbstractComponent, private _cdr: ChangeDetectorRef) {\n        this._elem = elemRef.nativeElement;\n        this._Component.setDragHandle(this._elem);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ts/src/abstract.component.ts","// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n\nimport {ChangeDetectorRef} from '@angular/core';\nimport {Directive, Input, Output, EventEmitter, ElementRef} from '@angular/core';\n\nimport {AbstractComponent, AbstractHandleComponent} from './abstract.component';\nimport {DragDropConfig, DragImage} from './dnd.config';\nimport {DragDropService, DragDropData} from './dnd.service';\n\n@Directive({ selector: '[dnd-draggable]' })\nexport class DraggableComponent extends AbstractComponent {\n\n    @Input(\"dragEnabled\") set draggable(value:boolean) {\n        this.dragEnabled = !!value;\n    }\n\n    /**\n     * Callback function called when the drag actions happened.\n     */\n    @Output() onDragStart: EventEmitter<DragDropData> = new EventEmitter<DragDropData>();\n    @Output() onDragEnd: EventEmitter<DragDropData> = new EventEmitter<DragDropData>();\n\n    /**\n     * The data that has to be dragged. It can be any JS object\n     */\n    @Input() dragData: any;\n\n    /**\n     * Callback function called when the drag action ends with a valid drop action.\n     * It is activated after the on-drop-success callback\n     */\n    @Output(\"onDragSuccess\") onDragSuccessCallback: EventEmitter<any> = new EventEmitter<any>();\n\n    @Input(\"dropZones\") set dropzones(value:Array<string>) {\n        this.dropZones = value;\n    }\n\n    /**\n     * Drag allowed effect\n     */\n    @Input(\"effectAllowed\") set effectallowed(value: string) {\n        this.effectAllowed = value;\n    }\n\n    /**\n     * Drag effect cursor\n     */\n    @Input(\"effectCursor\") set effectcursor(value: string) {\n        this.effectCursor = value;\n    }\n\n    /**\n     * Here is the property dragImage you can use:\n     * - The string value as url to the image\n     *   <div class=\"panel panel-default\"\n     *        dnd-draggable [dragEnabled]=\"true\"\n     *        [dragImage]=\"/images/simpler.png\">\n     * ...\n     * - The DragImage value with Image and offset by x and y:\n     *   let myDragImage: DragImage = new DragImage(\"/images/simpler1.png\", 0, 0);\n     * ...\n     *   <div class=\"panel panel-default\"\n     *        dnd-draggable [dragEnabled]=\"true\"\n     *        [dragImage]=\"myDragImage\">\n     * ...\n     * - The custom function to return the value of dragImage programmatically:\n     *   <div class=\"panel panel-default\"\n     *        dnd-draggable [dragEnabled]=\"true\"\n     *        [dragImage]=\"getDragImage(someData)\">\n     * ...\n     *   getDragImage(value:any): string {\n     *     return value ? \"/images/simpler1.png\" : \"/images/simpler2.png\"\n     *   }\n     */\n    @Input() dragImage: string | DragImage | Function;\n\n    \n    @Input() cloneItem: boolean;\n\n    constructor(elemRef: ElementRef, dragDropService: DragDropService, config:DragDropConfig,\n        cdr:ChangeDetectorRef) {\n\n        super(elemRef, dragDropService, config, cdr);\n        this._defaultCursor = this._elem.style.cursor;\n        this.dragEnabled = true;\n    }\n\n    _onDragStartCallback(event: MouseEvent) {\n        this._dragDropService.isDragged = true;\n        this._dragDropService.dragData = this.dragData;\n        this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;\n        this._elem.classList.add(this._config.onDragStartClass);\n        //\n        this.onDragStart.emit({dragData: this.dragData, mouseEvent: event});\n    }\n\n    _onDragEndCallback(event: MouseEvent) {\n        this._dragDropService.isDragged = false;\n        this._dragDropService.dragData = null;\n        this._dragDropService.onDragSuccessCallback = null;\n        this._elem.classList.remove(this._config.onDragStartClass);\n        //\n        this.onDragEnd.emit({dragData: this.dragData, mouseEvent: event});\n    }\n}\n\n\n@Directive({ selector: '[dnd-draggable-handle]' })\nexport class DraggableHandleComponent extends AbstractHandleComponent {\n    constructor(elemRef: ElementRef, dragDropService: DragDropService, config:DragDropConfig, _Component: DraggableComponent,\n        cdr:ChangeDetectorRef) {\n\n        super(elemRef, dragDropService, config, _Component, cdr);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ts/src/draggable.component.ts","// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n\nimport {ChangeDetectorRef} from '@angular/core';\nimport {Directive, Input, Output, EventEmitter, ElementRef} from '@angular/core';\n\nimport {AbstractComponent} from './abstract.component';\nimport {DragDropConfig} from './dnd.config';\nimport {DragDropService, DragDropData} from './dnd.service';\n\n@Directive({ selector: '[dnd-droppable]' })\nexport class DroppableComponent extends AbstractComponent {\n\n    @Input(\"dropEnabled\") set droppable(value:boolean) {\n        this.dropEnabled = !!value;\n    }\n\n    /**\n     * Callback function called when the drop action completes correctly.\n     * It is activated before the on-drag-success callback.\n     */\n    @Output() onDropSuccess: EventEmitter<DragDropData> = new EventEmitter<DragDropData>();\n    @Output() onDragEnter: EventEmitter<DragDropData> = new EventEmitter<DragDropData>();\n    @Output() onDragOver: EventEmitter<DragDropData> = new EventEmitter<DragDropData>();\n    @Output() onDragLeave: EventEmitter<DragDropData> = new EventEmitter<DragDropData>();\n\n    @Input(\"allowDrop\") set allowdrop(value: (dropData: any) => boolean) {\n        this.allowDrop = value;\n    }\n\n    @Input(\"dropZones\") set dropzones(value:Array<string>) {\n        this.dropZones = value;\n    }\n\n    /**\n     * Drag allowed effect\n     */\n    @Input(\"effectAllowed\") set effectallowed(value: string) {\n        this.effectAllowed = value;\n    }\n\n    /**\n     * Drag effect cursor\n     */\n    @Input(\"effectCursor\") set effectcursor(value: string) {\n        this.effectCursor = value;\n    }\n\n    constructor(elemRef: ElementRef, dragDropService: DragDropService, config:DragDropConfig,\n        cdr:ChangeDetectorRef) {\n\n        super(elemRef, dragDropService, config, cdr);\n\n        this.dropEnabled = true;\n    }\n\n    _onDragEnterCallback(event: MouseEvent) {\n        if (this._dragDropService.isDragged) {\n            this._elem.classList.add(this._config.onDragEnterClass);\n            this.onDragEnter.emit({dragData: this._dragDropService.dragData, mouseEvent: event});\n        }\n    }\n\n    _onDragOverCallback (event: MouseEvent) {\n        if (this._dragDropService.isDragged) {\n            this._elem.classList.add(this._config.onDragOverClass);\n            this.onDragOver.emit({dragData: this._dragDropService.dragData, mouseEvent: event});\n        }\n    };\n\n    _onDragLeaveCallback (event: MouseEvent) {\n        if (this._dragDropService.isDragged) {\n            this._elem.classList.remove(this._config.onDragOverClass);\n            this._elem.classList.remove(this._config.onDragEnterClass);\n            this.onDragLeave.emit({dragData: this._dragDropService.dragData, mouseEvent: event});\n        }\n    };\n\n    _onDropCallback (event: MouseEvent) {\n        let dataTransfer = (event as any).dataTransfer;\n        if (this._dragDropService.isDragged || (dataTransfer && dataTransfer.files)) {\n            this.onDropSuccess.emit({dragData: this._dragDropService.dragData, mouseEvent: event});\n            if (this._dragDropService.onDragSuccessCallback) {\n                this._dragDropService.onDragSuccessCallback.emit({dragData: this._dragDropService.dragData, mouseEvent: event});\n            }\n            this._elem.classList.remove(this._config.onDragOverClass);\n            this._elem.classList.remove(this._config.onDragEnterClass);\n        }\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ts/src/droppable.component.ts","// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n\nimport {ChangeDetectorRef} from '@angular/core';\nimport {Directive, Input, Output, EventEmitter, ElementRef} from '@angular/core';\nimport {FormArray} from '@angular/forms';\n\nimport {AbstractComponent, AbstractHandleComponent} from './abstract.component';\nimport {DragDropConfig} from './dnd.config';\nimport {DragDropService, DragDropSortableService} from './dnd.service';\n\n@Directive({ selector: '[dnd-sortable-container]' })\nexport class SortableContainer extends AbstractComponent {\n\n    @Input(\"dragEnabled\") set draggable(value:boolean) {\n        this.dragEnabled = !!value;\n    }\n\n    private _sortableData: Array<any>|FormArray = [];\n    private sortableHandler: SortableFormArrayHandler|SortableArrayHandler;\n\n    @Input() set sortableData(sortableData: Array<any>|FormArray) {\n        this._sortableData = sortableData;\n        if (sortableData instanceof FormArray) {\n            this.sortableHandler = new SortableFormArrayHandler();\n        } else {\n            this.sortableHandler = new SortableArrayHandler();\n        }\n        //\n        this.dropEnabled = !!this._sortableData;\n        // console.log(\"collection is changed, drop enabled: \" + this.dropEnabled);\n    }\n    get sortableData(): Array<any>|FormArray {\n        return this._sortableData;\n    }\n\n    @Input(\"dropZones\") set dropzones(value:Array<string>) {\n        this.dropZones = value;\n    }\n\n    constructor(elemRef: ElementRef, dragDropService: DragDropService, config:DragDropConfig, cdr:ChangeDetectorRef,\n        private _sortableDataService: DragDropSortableService) {\n\n        super(elemRef, dragDropService, config, cdr);\n        this.dragEnabled = false;\n    }\n\n    _onDragEnterCallback(event: Event) {\n        if (this._sortableDataService.isDragged) {\n            let item:any = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);\n            // Check does element exist in sortableData of this Container\n            if (this.indexOf(item) === -1) {\n                // Let's add it\n                // console.log('Container._onDragEnterCallback. drag node [' + this._sortableDataService.index.toString() + '] over parent node');\n                // Remove item from previouse list\n                this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);\n                if (this._sortableDataService.sortableContainer._sortableData.length === 0) {\n                    this._sortableDataService.sortableContainer.dropEnabled = true;\n                }\n                // Add item to new list\n                this.insertItemAt(item, 0);\n                this._sortableDataService.sortableContainer = this;\n                this._sortableDataService.index = 0;\n            }\n            // Refresh changes in properties of container component\n            this.detectChanges();\n        }\n    }\n\n    getItemAt(index: number): any {\n        return this.sortableHandler.getItemAt(this._sortableData, index);\n    }\n\n    indexOf(item: any): number {\n        return this.sortableHandler.indexOf(this._sortableData, item);\n    }\n\n    removeItemAt(index: number): void {\n        this.sortableHandler.removeItemAt(this._sortableData, index);\n    }\n\n    insertItemAt(item: any, index: number) {\n        this.sortableHandler.insertItemAt(this._sortableData, item, index);\n    }\n}\n\nclass SortableArrayHandler {\n    getItemAt(sortableData: any, index: number): any {\n        return sortableData[index];\n    }\n\n    indexOf(sortableData: any, item: any): number {\n        return sortableData.indexOf(item);\n    }\n\n    removeItemAt(sortableData: any, index: number) {\n        sortableData.splice(index, 1);\n    }\n\n    insertItemAt(sortableData: any, item: any, index: number) {\n        sortableData.splice(index, 0, item);\n    }\n}\n\nclass SortableFormArrayHandler {\n    getItemAt(sortableData: any, index: number): any {\n        return sortableData.at(index);\n    }\n\n    indexOf(sortableData: any, item: any): number {\n        return sortableData.controls.indexOf(item);\n    }\n\n    removeItemAt(sortableData: any, index: number) {\n        sortableData.removeAt(index);\n    }\n\n    insertItemAt(sortableData: any, item: any, index: number) {\n        sortableData.insert(index, item);\n    }\n}\n\n@Directive({ selector: '[dnd-sortable]' })\nexport class SortableComponent extends AbstractComponent {\n\n    @Input('sortableIndex') index: number;\n\n    @Input(\"dragEnabled\") set draggable(value:boolean) {\n        this.dragEnabled = !!value;\n    }\n\n    @Input(\"dropEnabled\") set droppable(value:boolean) {\n        this.dropEnabled = !!value;\n    }\n\n    /**\n     * The data that has to be dragged. It can be any JS object\n     */\n    @Input() dragData: any;\n\n    /**\n     * Drag allowed effect\n     */\n    @Input(\"effectAllowed\") set effectallowed(value: string) {\n        this.effectAllowed = value;\n    }\n\n    /**\n     * Drag effect cursor\n     */\n    @Input(\"effectCursor\") set effectcursor(value: string) {\n        this.effectCursor = value;\n    }\n\n    /**\n     * Callback function called when the drag action ends with a valid drop action.\n     * It is activated after the on-drop-success callback\n     */\n    @Output(\"onDragSuccess\") onDragSuccessCallback: EventEmitter<any> = new EventEmitter<any>();\n\n    @Output(\"onDragStart\") onDragStartCallback: EventEmitter<any> = new EventEmitter<any>();\n    @Output(\"onDragOver\") onDragOverCallback: EventEmitter<any> = new EventEmitter<any>();\n    @Output(\"onDragEnd\") onDragEndCallback: EventEmitter<any> = new EventEmitter<any>();\n    @Output(\"onDropSuccess\") onDropSuccessCallback: EventEmitter<any> = new EventEmitter<any>();\n\n    constructor(elemRef: ElementRef, dragDropService: DragDropService, config:DragDropConfig,\n        private _sortableContainer: SortableContainer,\n        private _sortableDataService: DragDropSortableService,\n        cdr:ChangeDetectorRef) {\n        super(elemRef, dragDropService, config, cdr);\n        this.dropZones = this._sortableContainer.dropZones;\n        this.dragEnabled = true;\n        this.dropEnabled = true;\n    }\n\n    _onDragStartCallback(event: Event) {\n        // console.log('_onDragStartCallback. dragging elem with index ' + this.index);\n        this._sortableDataService.isDragged = true;\n        this._sortableDataService.sortableContainer = this._sortableContainer;\n        this._sortableDataService.index = this.index;\n        this._sortableDataService.markSortable(this._elem);\n        // Add dragData\n        this._dragDropService.isDragged = true;\n        this._dragDropService.dragData = this.dragData;\n        this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;\n        //\n        this.onDragStartCallback.emit(this._dragDropService.dragData);\n    }\n\n    _onDragOverCallback(event: Event) {\n        if (this._sortableDataService.isDragged && this._elem !== this._sortableDataService.elem) {\n            // console.log('_onDragOverCallback. dragging elem with index ' + this.index);\n            this._sortableDataService.sortableContainer = this._sortableContainer;\n            this._sortableDataService.index = this.index;\n            this._sortableDataService.markSortable(this._elem);\n            this.onDragOverCallback.emit(this._dragDropService.dragData);\n        }\n    }\n\n    _onDragEndCallback(event: Event) {\n        // console.log('_onDragEndCallback. end dragging elem with index ' + this.index);\n        this._sortableDataService.isDragged = false;\n        this._sortableDataService.sortableContainer = null;\n        this._sortableDataService.index = null;\n        this._sortableDataService.markSortable(null);\n        // Add dragGata\n        this._dragDropService.isDragged = false;\n        this._dragDropService.dragData = null;\n        this._dragDropService.onDragSuccessCallback = null;\n        //\n        this.onDragEndCallback.emit(this._dragDropService.dragData);\n    }\n\n    _onDragEnterCallback(event: Event) {\n        if (this._sortableDataService.isDragged) {\n            this._sortableDataService.markSortable(this._elem);\n            if ((this.index !== this._sortableDataService.index) ||\n                (this._sortableDataService.sortableContainer.sortableData !== this._sortableContainer.sortableData)) {\n                // console.log('Component._onDragEnterCallback. drag node [' + this.index + '] over node [' + this._sortableDataService.index + ']');\n                // Get item\n                let item:any = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);\n                // Remove item from previouse list\n                this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);\n                if (this._sortableDataService.sortableContainer.sortableData.length === 0) {\n                    this._sortableDataService.sortableContainer.dropEnabled = true;\n                }\n                // Add item to new list\n                this._sortableContainer.insertItemAt(item, this.index);\n                if (this._sortableContainer.dropEnabled) {\n                    this._sortableContainer.dropEnabled = false;\n                }\n                this._sortableDataService.sortableContainer = this._sortableContainer;\n                this._sortableDataService.index = this.index;\n                this.detectChanges();\n            }\n        }\n    }\n\n    _onDropCallback (event: Event) {\n        if (this._sortableDataService.isDragged) {\n            // console.log('onDropCallback.onDropSuccessCallback.dragData', this._dragDropService.dragData);\n            this.onDropSuccessCallback.emit(this._dragDropService.dragData);\n            if (this._dragDropService.onDragSuccessCallback) {\n                // console.log('onDropCallback.onDragSuccessCallback.dragData', this._dragDropService.dragData);\n                this._dragDropService.onDragSuccessCallback.emit(this._dragDropService.dragData);\n            }\n            // Refresh changes in properties of container component\n            this._sortableContainer.detectChanges();\n        }\n    }\n}\n\n@Directive({ selector: '[dnd-sortable-handle]' })\nexport class SortableHandleComponent extends AbstractHandleComponent {\n    constructor(elemRef: ElementRef, dragDropService: DragDropService, config:DragDropConfig, _Component: SortableComponent,\n        cdr:ChangeDetectorRef) {\n\n        super(elemRef, dragDropService, config, _Component, cdr);\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ts/src/sortable.component.ts","// Copyright (C) 2016-2018 Sergey Akopkokhyants\n// This project is licensed under the terms of the MIT license.\n// https://github.com/akserg/ng2-dnd\n\nimport { NgModule, ModuleWithProviders } from \"@angular/core\";\n\nimport {DragDropConfig} from './dnd.config';\nimport {DragDropService, DragDropSortableService, dragDropServiceFactory, dragDropSortableServiceFactory} from './dnd.service';\nimport {DraggableComponent, DraggableHandleComponent} from './draggable.component';\nimport {DroppableComponent} from './droppable.component';\nimport {SortableContainer, SortableComponent, SortableHandleComponent} from './sortable.component';\n\nexport * from './abstract.component';\nexport * from './dnd.config';\nexport * from './dnd.service';\nexport * from './draggable.component';\nexport * from './droppable.component';\nexport * from './sortable.component';\n\nexport let providers = [\n    DragDropConfig,\n    { provide: DragDropService, useFactory: dragDropServiceFactory },\n    { provide: DragDropSortableService, useFactory: dragDropSortableServiceFactory, deps: [DragDropConfig] }\n];\n\n@NgModule({\n  declarations: [DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableContainer, SortableComponent, SortableHandleComponent],\n  exports : [DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableContainer, SortableComponent, SortableHandleComponent],\n\n})\nexport class DndModule {\n  static forRoot(): ModuleWithProviders {\n        return {\n            ngModule: DndModule,\n            providers: providers\n        };\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ts/src/dnd.module.ts","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nexports.RECAPTCHA_SETTINGS = new core_1.InjectionToken('recaptcha-settings');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ng-recaptcha/recaptcha/recaptcha-settings.js\n// module id = 244\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar common_1 = require(\"@angular/common\");\nvar core_1 = require(\"@angular/core\");\nvar rxjs_1 = require(\"rxjs\");\nvar recaptcha_loader_service_1 = require(\"./recaptcha-loader.service\");\nexports.RECAPTCHA_V3_SITE_KEY = new core_1.InjectionToken('recaptcha-v3-site-key');\n/**\n * The main service for working with reCAPTCHA v3 APIs.\n *\n * Use the `execute` method for executing a single action, and\n * `onExecute` observable for listening to all actions at once.\n */\nvar ReCaptchaV3Service = /** @class */ (function () {\n    function ReCaptchaV3Service(zone, siteKey, \n    // tslint:disable-next-line:no-any\n    platformId, baseUrl, nonce) {\n        var _this = this;\n        /** @internal */\n        this.onLoadComplete = function (grecaptcha) {\n            _this.grecaptcha = grecaptcha;\n            if (_this.actionBacklog && _this.actionBacklog.length > 0) {\n                _this.actionBacklog.forEach(function (_a) {\n                    var action = _a[0], subject = _a[1];\n                    return _this.executeActionWithSubject(action, subject);\n                });\n                _this.actionBacklog = undefined;\n            }\n        };\n        this.zone = zone;\n        this.isBrowser = common_1.isPlatformBrowser(platformId);\n        this.siteKey = siteKey;\n        this.nonce = nonce;\n        this.baseUrl = baseUrl;\n        this.init();\n    }\n    Object.defineProperty(ReCaptchaV3Service.prototype, \"onExecute\", {\n        get: function () {\n            if (!this.onExecuteSubject) {\n                this.onExecuteSubject = new rxjs_1.Subject();\n                this.onExecuteObservable = this.onExecuteSubject.asObservable();\n            }\n            return this.onExecuteObservable;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Executes the provided `action` with reCAPTCHA v3 API.\n     * Use the emitted token value for verification purposes on the backend.\n     *\n     * For more information about reCAPTCHA v3 actions and tokens refer to the official documentation at\n     * https://developers.google.com/recaptcha/docs/v3.\n     *\n     * @param {string} action the action to execute\n     * @returns {Observable<string>} an `Observable` that will emit the reCAPTCHA v3 string `token` value whenever ready.\n     * The returned `Observable` completes immediately after emitting a value.\n     */\n    /**\n       * Executes the provided `action` with reCAPTCHA v3 API.\n       * Use the emitted token value for verification purposes on the backend.\n       *\n       * For more information about reCAPTCHA v3 actions and tokens refer to the official documentation at\n       * https://developers.google.com/recaptcha/docs/v3.\n       *\n       * @param {string} action the action to execute\n       * @returns {Observable<string>} an `Observable` that will emit the reCAPTCHA v3 string `token` value whenever ready.\n       * The returned `Observable` completes immediately after emitting a value.\n       */\n    ReCaptchaV3Service.prototype.execute = /**\n       * Executes the provided `action` with reCAPTCHA v3 API.\n       * Use the emitted token value for verification purposes on the backend.\n       *\n       * For more information about reCAPTCHA v3 actions and tokens refer to the official documentation at\n       * https://developers.google.com/recaptcha/docs/v3.\n       *\n       * @param {string} action the action to execute\n       * @returns {Observable<string>} an `Observable` that will emit the reCAPTCHA v3 string `token` value whenever ready.\n       * The returned `Observable` completes immediately after emitting a value.\n       */\n    function (action) {\n        var subject = new rxjs_1.Subject();\n        if (this.isBrowser) {\n            if (!this.grecaptcha) {\n                // todo: add to array of later executions\n                if (!this.actionBacklog) {\n                    this.actionBacklog = [];\n                }\n                this.actionBacklog.push([action, subject]);\n            }\n            else {\n                this.executeActionWithSubject(action, subject);\n            }\n        }\n        return subject.asObservable();\n    };\n    /** @internal */\n    /** @internal */\n    ReCaptchaV3Service.prototype.executeActionWithSubject = /** @internal */\n    function (action, subject) {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            // tslint:disable-next-line:no-any\n            // tslint:disable-next-line:no-any\n            _this.grecaptcha.execute(_this.siteKey, { action: action }).then(function (token) {\n                _this.zone.run(function () {\n                    subject.next(token);\n                    subject.complete();\n                    if (_this.onExecuteSubject) {\n                        _this.onExecuteSubject.next({ action: action, token: token });\n                    }\n                });\n            });\n        });\n    };\n    /** @internal */\n    /** @internal */\n    ReCaptchaV3Service.prototype.init = /** @internal */\n    function () {\n        if (this.isBrowser) {\n            if ('grecaptcha' in window) {\n                this.grecaptcha = grecaptcha;\n            }\n            else {\n                recaptcha_loader_service_1.loadScript(this.siteKey, this.onLoadComplete, '', this.baseUrl, this.nonce);\n            }\n        }\n    };\n    ReCaptchaV3Service.decorators = [\n        { type: core_1.Injectable },\n    ];\n    /** @nocollapse */\n    ReCaptchaV3Service.ctorParameters = function () { return [\n        { type: core_1.NgZone, },\n        { type: undefined, decorators: [{ type: core_1.Inject, args: [exports.RECAPTCHA_V3_SITE_KEY,] },] },\n        { type: undefined, decorators: [{ type: core_1.Inject, args: [core_1.PLATFORM_ID,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [recaptcha_loader_service_1.RECAPTCHA_BASE_URL,] },] },\n        { type: undefined, decorators: [{ type: core_1.Optional }, { type: core_1.Inject, args: [recaptcha_loader_service_1.RECAPTCHA_NONCE,] },] },\n    ]; };\n    return ReCaptchaV3Service;\n}());\nexports.ReCaptchaV3Service = ReCaptchaV3Service;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ng-recaptcha/recaptcha/recaptcha-v3.service.js\n// module id = 245\n// module chunks = 0","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class NotificationService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getMyVersionControl() {\n        var token = localStorage.getItem('token');\n        var params = {\n            module: \"notifications\",\n            action: \"myversioncontrol\",\n            token: token\n        }\n        return this.http.post(params).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/notification.service.js","import { Injectable } from \"@angular/core\";\nimport { HttpService } from \"./http.service\";\n\n@Injectable()\nexport class ConstantService {\n  constructor(http: HttpService) {\n    this.http = http;\n  }\n\n  getConstants() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"constant\",\n      action: \"get\",\n      token: token\n    };\n    return this.http.post(params).map(res => {\n      return res;\n    });\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/services/constant.service.js","import { Injectable } from '@angular/core';\nimport { HttpService } from './http.service';\n\n@Injectable()\nexport class AppService {\n\n    constructor(http: HttpService) {\n        this.http = http;\n    }\n\n    getBurndown(data) {\n        var token = localStorage.getItem('token');\n        data.token = token;\n\n        return this.http.post(data).map(res => {\n            return res;\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/services/app.service.js","import {Injectable} from '@angular/core';\nimport {HttpService} from './http.service';\n\n@Injectable()\nexport class WhiteboardService {\n    constructor(httpService: HttpService) {\n        this._http = httpService;\n    }\n\n    getMessage() {\n        var token = localStorage.getItem(\"token\");\n        var params = {\n          module: \"whiteboard\",\n          action: \"message\",\n          token: token\n        };\n        return this._http.post(params).map(res => {\n          return res;\n        });\n    }\n\n  getGroups() {\n    var token = localStorage.getItem(\"token\");\n    var params = {\n      module: \"whiteboard\",\n      action: \"groups\",\n      token: token\n    };\n    return this._http.post(params).map(res => {\n      return res;\n    });\n  }\n    putMessage(messages) {\n        var token = localStorage.getItem('token');\n        messages.module = \"whiteboard\";\n        messages.action = \"insert\";\n        messages.token = token;\n        return this._http.post(messages).map(res => {\n          return res;\n        });\n    }\n    putComments(comments) {\n        var token = localStorage.getItem('token');\n        comments.module = \"whiteboard\";\n        comments.action = \"insertcomments\";\n        comments.token = token;\n        return this._http.post(comments).map(res => {\n          return res;\n        });\n    }\n    putLikes(newlike) {\n        var token = localStorage.getItem('token');\n        newlike.module = \"whiteboard\";\n        newlike.action = \"insertlikes\";\n        newlike.token = token;\n        return this._http.post(newlike).map(res => {\n          return res;\n        });\n    }\n    putLove(newlove) {\n        var token = localStorage.getItem('token');\n        newlove.module = \"whiteboard\";\n        newlove.action = \"insertlove\";\n        newlove.token = token;\n        return this._http.post(newlove).map(res => {\n          return res;\n        });\n    }\n    putAngry(newangry) {\n        var token = localStorage.getItem('token');\n        newangry.module = \"whiteboard\";\n        newangry.action = \"insertangry\";\n        newangry.token = token;\n        return this._http.post(newangry).map(res => {\n          return res;\n        });\n    }\n    putFun(newfun) {\n        var token = localStorage.getItem('token');\n        newfun.module = \"whiteboard\";\n        newfun.action = \"insertfun\";\n        newfun.token = token;\n        return this._http.post(newfun).map(res => {\n          return res;\n        });\n    }\n    putWow(newfun) {\n        var token = localStorage.getItem('token');\n        newfun.module = \"whiteboard\";\n        newfun.action = \"insertwow\";\n        newfun.token = token;\n        return this._http.post(newfun).map(res => {\n          return res;\n        });\n    }\n    deletePost(deletepost) {\n          var token = localStorage.getItem('token');\n          deletepost.module = \"whiteboard\";\n          deletepost.action = \"deletepost\";\n          deletepost.token = token;\n          return this._http.post(deletepost).map(res => {\n            return res;\n      });\n    }\n\n    \n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/services/whiteboard.service.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { Meta } from \"@angular/platform-browser\";\nimport { Title } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\n\nimport { LoginService } from \"../../services/login.service\";\nimport template from \"./login.template.html\";\n\n@Component({\n  selector: \"login\",\n  template: template,\n  styles: [\n    \"input[type=text] { width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border: none; border-bottom: 2px solid #0fafde; text-align: center; }\",\n    \"input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border: none; border-bottom: 2px solid #0fafde; text-align: center; }\",\n    \"::-webkit-input-placeholder { color:#0fafde; font-size:20px; top:5px; }\",\n    \"::-moz-placeholder { color:#0fafde; font-size:20px; top:5px; }\",\n    \":-ms-input-placeholder { color:#0fafde; font-size:20px; top:5px; }\",\n    \"input:-moz-placeholder { color:#0fafde; font-size:20px; top:5px; }\"\n  ]\n})\nexport class LoginComponent {\n  constructor(\n    title: Title,\n    meta: Meta,\n    loginService: LoginService,\n    route: Router,\n    toastr: ToastrService\n  ) {\n    this._title = title;\n    this._meta = meta;\n    this._route = route;\n    this._login = loginService;\n    this.toastr = toastr;    \n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.loading = false;\n    this.captcha = 0;\n    this.sitkey = 0;\n    this.forgotPassword =\n      window.location.href.split(\"/login\")[0] + \"/passwordrecovery\";\n    this.mainLogo = \"mainlogoW.svg\";\n    this.myLoginStyle = {\n      background: \"url('img/loginback.jpg') no-repeat fixed center / cover\",\n      height: \"100%\",\n      width: \"100%\",\n      \"overflow-y\": \"hidden\",\n      \"-webkit-background-size\": \"cover\",\n      \"-moz-background-size\": \"cover\",\n      \"-o-background-size\": \"cover\"\n    };\n    this._login.getLoginBack().subscribe(res => {\n      this.myLoginStyle = {\n        background:\n          \"url('img/\" +\n          res.data.loginback +\n          \"') no-repeat fixed center / cover\",\n        height: \"100%\",\n        width: \"100%\",\n        \"overflow-y\": \"hidden\",\n        \"-webkit-background-size\": \"cover\",\n        \"-moz-background-size\": \"cover\",\n        \"-o-background-size\": \"cover\"\n      };\n      this.mainLogo = res.data.mainlogo;\n    });\n    this.times = 0;\n    // this.log = { user: \"\", pwd: \"\", key: \"\", token: \"\", response: \"\" };\n    this.log = {};\n    localStorage.clear();\n    this._login.getCookie().subscribe(res => {\n      this.captcha = res.intentos;\n      this.log.key = res.cookie.keyPub;\n      localStorage.setItem(\"token\", res.cookie.token);\n      localStorage.setItem(\"title\", res.title);\n      this._title.setTitle(\".:: \" + res.title + \" : Login ::.\");\n    });\n\n    this.sitekey();\n    this.captchaForever();\n  }\n\n  ngOnInit() {}\n\n  sitekey(){\n    this._login.siteKey().subscribe(res => {\n      this.sitkey = res.data;\n      this.sitkey = this.sitkey.trim();\n    });\n  }\n\n  captchaForever(){\n    this._login.captchaforever().subscribe(res => {\n      this.captchaforever = res.data;\n    });\n  }\n  \n  getAuth() {\n    this.loading = true;\n    this.log.token = localStorage.getItem(\"token\");\n    this.log.captchaforever = this.captchaforever;\n    this._login.getAuth(this.log).subscribe(res => {\n      this.times++;\n      localStorage.setItem(\"token\", res.data.token);\n      \n      if (res.data.status === \"error\") {\n        this.captcha = res.data.attempts;\n        this.loading = false;\n        if (res.message === \"Session has Expired\" && this.times <= 4) {\n          this._login.getCookie().subscribe(rx => {\n            this.log.key = rx.cookie.keyPub;\n            localStorage.setItem(\"token\", rx.cookie.token);\n            this.getAuth();\n          });\n        }\n        if (this.times > 4) {\n          setTimeout(function() {\n            location.reload();\n          }, 1000);\n        }\n        if(res.message != \"Session has Expired\"){\n          this.toastr.error(res.message,\"Error!\");\n        }\n        \n        if(this.log.response && this.captcha > 0){\n          grecaptcha.reset();\n        }\n      } else {\n\n        this.loading = false;\n        this.toastr.success(res.message);\n        this._route.navigate([\"/whiteboard\"]);\n      }\n    });\n  }\n  getAuthBeta() {\n    this.loading = true;\n    this.log.token = localStorage.getItem(\"token\");\n    this._login.getAuth(this.log).subscribe(res => {\n      this.times++;\n      localStorage.setItem(\"token\", res.data.token);\n      if (res.data === \"error\") {\n        this.loading = false;\n        if (res.message === \"Session has Expired\" && this.times <= 4) {\n          this._login.getCookie().subscribe(res => {\n            this.log.key = res.cookie.keyPub;\n            localStorage.setItem(\"token\", res.cookie.token);\n            this.getAuthBeta();\n          });\n        }\n        if (this.times > 4) {\n          setTimeout(function() {\n            location.reload();\n          }, 1000);\n        }\n      } else {\n        this.loading = false;\n        this.toastr.success(res.message);\n        window.location.href = window.location.href.replace(\n          \"login\",\n          \"beta/dashboard\"\n        );\n      }\n    });\n  }\n  validate() {\n    if(this.captcha > '0' || this.captchaforever == 1){\n        return (\n          !this.log.user ||\n          this.log.user.trim() == \"\" ||\n          !this.log.pwd ||\n          this.log.pwd.trim() == \"\" ||\n          !this.log.response ||\n          this.log.response.trim() == \"\" \n        );\n    }else{\n      return (\n        !this.log.user ||\n        this.log.user.trim() == \"\" ||\n        !this.log.pwd ||\n        this.log.pwd.trim() == \"\"\n      );\n    }\n  }\n  resolved(captchaResponse) {\n    this.log.response = captchaResponse;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/login/login.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { DashboardService } from \"../../services/dashboard.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { DailyService } from \"../../services/daily.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { NotificationService } from \"../../services/notification.service\";\nimport { HeaderService } from \"../../services/header.service\";\nimport { SchedulerService } from \"../../services/scheduler.service\";\nimport { EventsService } from \"../../services/events.service\";\nimport { TodolistService } from \"../../services/todolist.service\";\n\nimport { DndModule } from \"ng2-dnd\";\n\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\n\nimport template from \"./dashboard.template.html\";\n\n@Component({\n  selector: \"dashboard\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe]\n})\nexport class DashboardComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    groupService: GroupService,\n    dashboardService: DashboardService,\n    taskService: TaskService,\n    dailyService: DailyService,\n    usersService: UsersService,\n    ProjectService: ProjectService,\n    productService: ProductService,\n    noteService: NoteService,\n    notificationService: NotificationService,\n    toastr: ToastrService,\n    headerService: HeaderService,\n    eventsService: EventsService,\n    schedulerService: SchedulerService,\n    todolistService: TodolistService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._events = eventsService;\n    this._dashBoard = dashboardService;\n    this._tasks = taskService;\n    this._projects = ProjectService;\n    this._notes = noteService;\n    this._notifications = notificationService;\n    this._daily = dailyService;\n    this._user = usersService;\n    this._products = productService;\n    this._dailys = dailyService;\n    this._sanitizer = sanitizer;\n    this._header = headerService;\n    this._scheduler = schedulerService;\n    this._todolist = todolistService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.pending = [];\n    this.note = {};\n    this.getmyProjects();\n    this.developing = [];\n    this.improving = [];\n    this.complete = [];\n    this.contacts = [];\n    this.users = [];\n    this.products = [];\n    this.notifications = [];\n    this.noti = [];\n    this.sh = {};\n    this.dayJob = \"\";\n    this.status = {\n      sprint: { closedpoints: 0, devpoints: 0, delpoints: 0 },\n      closed: [],\n      delayed: [],\n      developing: [],\n      pending: []\n    };\n    this.search = \"\";\n    this.searchuser = \"\";\n    this.searchtask = \"\";\n    this.posState = \"user_asigned\";\n    this.posDState = \"user_id\";\n    this.mdT = { project: {} };\n    this.mcT = { project: {} };\n    this.daily = [];\n    this.selectedUsers = [];\n    this.task = { project: {}, attachments: [] };\n    this.dayView = [];\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.extra = { points: 0, text: \"\", delivery: \"\" };\n    this.catdaily = [];\n    this.todaypts = 0;\n    this.chartHtml = \"\";\n    this.chartUser = \"\";\n    this.mychart = \"\";\n    this.myUsers = [];\n    this.contactsTree = [];\n    this.burndownData = {};\n    this.events = [];\n    this.groups = [];\n    this.lblgroups = [];\n    this.taskid = 0;\n    this.idtk = [];\n    this.statustasks = [];\n    this.scheduler = {};\n    this.plsch = [];\n    this.stssche = [];\n    this.catsche = [];\n    this.items = [];\n    this.selectedNodes = [];\n    this.meeting = { usershared: [] };\n    this.userslbl = [];\n    this.cant_pend = 0;\n    this.cant_deve = 0;\n    this.cant_imp = 0;\n    this.cant_expi = 0;\n    this.cant_back = 0;\n    this.percentage_pend = 0;\n    this.percentage_deve = 0;\n    this.percentage_deve_aprox = 0;\n    this.percentage_impr = 0;\n    this.percentage_impr_aprox = 0;\n    this.percentage_expi = 0;\n    this.percentage_expi_aprox = 0;\n    this.percentage_back = 0;\n    this.todolist = [];\n    this.selectList = [];\n    this.add_items = [];\n    this.project = { users: [], attachments: [] };\n    this.limitpagetd = 0;\n    this.itemcounttd = 0;\n    this.currentpagetd = 1;\n    this.textGroup = \"\";\n    this.taskattch = { attachments: [] };\n    this.developing = [];\n    this.dailynew = 0;\n    this.spinner = false;\n    this.mytask = [];\n    this.totalp = 0;\n    this.taskbystatus = [];\n    this.stTitle = \"Squadlinx\";\n    this.tasksMySprint = [];\n    this.myMeetings = [];\n    this.mySchedulers = [];\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : DashBoard ::.\");\n    this.taskInDeveloping = false;\n    this.taskInPending = false;\n    this.getTasksMySprint();\n    this.getMyMeetings();\n    this.getMySchedulers();\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n\n    this.task = [];\n    this._tasks.getPercentage().subscribe(res => {\n      this.task = res.data;\n\n      for (let a of res.data) {\n        if (a.tkstatus == \"pending\") {\n          this.cant_pend = a.quantity;\n          this.percentage_pend = a.percentage;\n        }\n        if (a.tkstatus == \"developing\") {\n          this.cant_deve = a.quantity;\n          this.percentage_deve = a.percentage;\n\n          this.percentage_deve_aprox = Math.ceil(this.percentage_deve);\n        }\n        if (a.tkstatus == \"improving\") {\n          this.cant_imp = a.quantity;\n          this.percentage_impr = a.percentage;\n          this.percentage_impr_aprox = Math.ceil(this.percentage_impr);\n        }\n        if (a.tkstatus == \"expiring\") {\n          this.cant_expi = a.quantity;\n          this.percentage_expi = a.percentage;\n          this.percentage_expi_aprox = Math.ceil(this.percentage_expi);\n        }\n        if (a.tkstatus == \"backlog\") {\n          this.cant_back = a.quantity;\n          this.percentage_back = a.percentage;\n        }\n      }\n    });\n\n    this._daily.getCategories().subscribe(data => {\n      this.catdaily = [];\n      for (let c of data.data) {\n        this.catdaily.push({ label: c.cada_name, value: c.para_category });\n      }\n    });\n    this.categories = [];\n    this._projects.getCategories().subscribe(data => {\n      for (let c of data.data) {\n        this.categories.push({ label: c.para_name, value: c.para_id });\n      }\n    });\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this.applicantlbl = [];\n    this._user.getEmailList().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.applicantlbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._scheduler.getSchedulerCategory().subscribe(res => {\n      for (let c of res.data) {\n        this.catsche.push({ label: c.para_name, value: c.para_id });\n      }\n    });\n    this._scheduler.getSchedulerStatus().subscribe(res => {\n      // this.category = [];\n      for (let c of res.data) {\n        this.stssche.push({ label: c.para_name, value: c.para_id });\n      }\n    });\n    this._scheduler.getSchedulerPlaces().subscribe(res => {\n      for (let c of res.data) {\n        this.plsch.push({ label: c.para_name, value: c.para_id });\n      }\n    });\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n    this.usersCRM = [];\n    this.usersCRMa = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.usersCRM = data.data;\n      this.usersCRMa = data.data;\n    });\n\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n      this.selectedUsers.push(this.myuser);\n      this.selectedNodes.push(this.myuser);\n    });\n    this.getDevtask();\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.catdaily = [];\n    this._daily.getCategories().subscribe(data => {\n      this.catdaily = [];\n      for (let c of data.data) {\n        this.catdaily.push({ label: c.para_name, value: c.para_codigo });\n      }\n    });\n    this.versionControl = \"\";\n  }\n\n\n  showModaltk(tkid) {\n    $(\"#myTask\" + tkid).click();\n  }\n\n  ngOnInit() {\n    this.header = {\n      left: \"prev,next\",\n      center: \"title\",\n      right: \"month,agendaWeek,agendaDay\"\n    };\n    this.items = [\n      { label: \"New Scheduler\", icon: \"fa-link\", url: \"http://angular.io\" },\n      { label: \"New Meeting\", icon: \"fa-paint-brush\", url: \"http://google.com\" }\n    ];\n    this._notifications.getMyVersionControl().subscribe(res => {\n      if (res.data.advc_description) {\n        this.versionControl = res.data.advc_description;\n        $(\"#mdVersionControl\").modal(\"show\");\n      }\n    });\n  }\n\n\n  getmyProjects() {\n    this.myProjects = [];\n    this.selectedprojects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      this.selectedprojects = [0];\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n    });\n  }\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpagetd + 1 : this.currentpagetd - 1;\n    if (cur <= 0) {\n      this.currentpagetd = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpagetd - this.limitpagetd + 1 <=\n        this.itemcounttd + this.limitpagetd\n      ) {\n        this.currentpagetd = cur;\n      }\n    }\n  }\n  setGroupList(state) {\n    this.textGroup = state;\n    this.currentpagetd = 1;\n    this.limitpagetd = this.todolist.length > 8 ? 8 : this.todolist.length;\n    this.itemcounttd = this.todolist.length;\n  }\n\n  verifyLevels() {\n    this._todolist.getTodolist().subscribe(res => {\n      this.todolist = res.data;\n      let c = 0;\n      let m = 0;\n      let level_next = 0;\n      let task_id_m = 0;\n      let level_m = 0;\n      let level_correct = 0;\n      let n = 0;\n      let total_items = this.todolist.length;\n      for (var i in this.todolist) {\n        if (this.todolist[i].task_level == 0) {\n          c++;\n        }\n        n = i;\n        n++;\n        if (n != this.todolist[i].task_level) {\n          m++;\n          task_id_m = this.todolist[i].task_id;\n          level_correct = n;\n          level_m++;\n          this._todolist\n            .setLevel(this.todolist[i].task_id, n)\n            .subscribe(data => { });\n        } else {\n        }\n        n = 0;\n      }\n      if (c > 0) {\n        level_next = total_items - c;\n        if (level_next == 0) {\n          level_next++;\n        } else {\n          level_next++;\n        }\n        for (var x in this.todolist) {\n          if (this.todolist[x].task_level == 0) {\n            this._todolist\n              .setLevel(this.todolist[x].task_id, level_next)\n              .subscribe(data => { });\n            level_next++;\n          }\n        }\n      } else {\n      }\n      this._todolist.getTodolist().subscribe(res => {\n        this.todolist = res.data;\n      });\n    });\n  }\n  addItem() {\n    this.selectList = [];\n    this.add_items = [];\n    this._todolist.getSelectlist().subscribe(res => {\n      this.selectList = res.data;\n    });\n    $(\"#mdAddItem\").modal(\"show\");\n  }\n\n  selectAll() {\n    if (this.add_items.length > 0) {\n      this.add_items = [];\n    } else {\n      this.add_items = [];\n      for (var t in this.selectList) {\n        this.add_items.push(this.selectList[t].task_id);\n      }\n    }\n  }\n\n  save() {\n    this.msgs = [];\n    this.msgs.push({\n      severity: \"info\",\n      summary: \"Success\",\n      detail: \"Data Saved\"\n    });\n  }\n  ngAfterViewInit() {\n    this.getNotifications();\n    this.getBurnDown();\n    this.getTree();\n    this._user.getMyUsers().subscribe(data => {\n      this.contacts = data.data;\n    });\n\n\n    this.getMySchedule();\n  }\n  getMySchedule() {\n    this.events = [];\n    this._scheduler.getMySchedule().subscribe(data => {\n      if (data.data.length > 0) {\n        for (let c of data.data) {\n          if (c.para_name != \"Meeting\") {\n            let part1 = c.sche_start.split(\" \");\n            c.sche_start = part1[0];\n            let part2 = c.sche_end.split(\" \");\n            c.sche_end = part2[0];\n            this.events.push({\n              tittle: c.sche_title,\n              start: c.sche_start,\n              end: c.sche_end,\n              place: c.place,\n              description: c.sche_description,\n              category: c.para_name,\n              user: c.completename\n            });\n          }\n          this.events.push({\n            tittle: c.sche_title,\n            start: c.sche_start,\n            place: c.place,\n            description: c.sche_description,\n            category: c.para_name,\n            user: c.completename\n          });\n        }\n      }\n    });\n    this.statustasks = [];\n    this._dashBoard.getStatusTasksUser().subscribe(data => {\n      for (let c of data.data) {\n        let x = Math.round((c.pointsdone * 100) / c.pointstk);\n        this.statustasks.push({\n          points: x,\n          datedelivery: c.datedelivery,\n          task: c.task_id,\n          subject: c.task_subject\n        });\n      }\n    });\n  }\n  showburndown() {\n    this.getTree();\n    $(\"#mdBurndown\").modal(\"show\");\n  }\n\n  getNameUser(user_name, user_lastname) {\n    if (user_name && user_lastname) {\n      let names = user_name;\n      let surnames = user_lastname;\n      let ellipsis = \"…\";\n      let fullName = names + ' ' + surnames;\n\n      if (fullName.length <= 14) {\n        return fullName;\n      } else {\n\n        if (names.length <= 14 && surnames.length <= 14) {\n          fullName = names + ' ' + surnames;\n        }\n\n        if (names.length <= 14 && surnames.length > 14) {\n          surnames = surnames.substring(0, 14) + ellipsis;\n          fullName = names + ' ' + surnames;\n        }\n\n        if (names.length > 14 && surnames.length <= 14) {\n          let arrayNames = names.split(' ');\n          let firstName = arrayNames[0];\n          fullName = firstName + ' ' + surnames;\n        }\n\n        if (names.length > 14 && surnames.length > 14) {\n          let arrayNames = names.split(' ');\n          let firstName = arrayNames[0];\n          surnames = surnames.substring(0, 14) + ellipsis;\n          fullName = firstName + ' ' + surnames;\n        }\n\n        return fullName;\n      }\n    } else {\n      return \"\";\n    }\n  }\n\n  getTree() {\n    this.myUsers = [];\n    this.contactsTree = [];\n    this._user.getMyUsers().subscribe(data => {\n      this.contacts = data.data;\n      let group = \"0\";\n      let groupname = \"\";\n      let children = [];\n\n      for (let u of data.data) {\n        this.myUsers.push(u.user_id);\n        if (group != u.grop_id) {\n          if (group != \"0\") {\n            this.contactsTree.push({\n              label: groupname,\n              data: group,\n              expanded: true,\n              children: children\n            });\n          }\n          groupname = u.groupname;\n          group = u.grop_id;\n          children = [];\n        }\n        children.push({\n          label: this.getNameUser(u.user_name, u.user_lastname),\n          data: u.user_id\n        });\n      }\n      if (group != \"0\") {\n        this.contactsTree.push({\n          label: groupname,\n          data: group,\n          expanded: true,\n          children: children\n        });\n      }\n    });\n  }\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n  onChangeT(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n  onChangeP(event) {\n    var files = event.srcElement.files;\n    this.project.attachments.push(files[0]);\n  }\n  selectAllItems() {\n    if (this.selectedNodes.length > 0) {\n      this.selectedNodes = [];\n    } else {\n      this.selectedNodes = [];\n      for (var t in this.contactsTree) {\n        this.selectedNodes.push(this.contactsTree[t].data);\n        if (this.contactsTree[t].children.length > 0) {\n          for (var c in this.contactsTree[t].children) {\n            this.selectedNodes.push(this.contactsTree[t].children[c].data);\n          }\n        }\n      }\n    }\n\n    this.updateSelect(event);\n  }\n\n  selectAllChildrens(childrens, idparent) {\n    let m = 0;\n    let n = 0;\n    for (var x in this.selectedNodes) {\n      if (this.selectedNodes[x] == idparent) {\n        m++;\n      } else {\n        n++;\n      }\n    }\n\n    if (m == 1 && n == 0) {\n      this.selectedNodes = [];\n      this.selectedNodes.push(idparent);\n      if (childrens.length > 0) {\n        for (var c in childrens) {\n          if (m == 1) {\n            this.selectedNodes.push(childrens[c].data);\n          }\n        }\n      }\n    } else {\n      this.selectedNodes = [];\n    }\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n  showProject(projid) {\n    this.note = {};\n    this._projects.getproject(projid).subscribe(data => {\n      this.project = data.data;\n      this.getMessages(projid);\n      $(\"#mdprojectView\").modal(\"show\");\n    });\n  }\n  sendMessage(projid) {\n    this.note.proj_id = this.project.proj_id;\n    this._notes.putNote(this.note).subscribe(data => {\n      this.getMessages(projid);\n      this.note = { attachments: [] };\n    });\n  }\n  getMessages(projid) {\n    this._projects.getprojectNotes(projid).subscribe(data => {\n      this.project.messages = data.data;\n    });\n  }\n\n  updateSelect(event) {\n    this.selectedUsers = [];\n    for (let c of this.selectedNodes) {\n      if (!c.children) {\n        this.selectedUsers.push(c);\n      }\n    }\n    this.getBurnDown();\n  }\n  updateSelectA(event, children, idparent) {\n    this.selectAllChildrens(children, idparent);\n    this.selectedUsers = [];\n    for (let c of this.selectedNodes) {\n      if (!c.children) {\n        this.selectedUsers.push(c);\n      }\n    }\n    this.getBurnDown();\n  }\n\n  getBurnDown() {\n    this._dashBoard.getBurndown(0).subscribe(res => {\n      if (res) {\n        var datasets = [];\n        for (let u in res.data.users) {\n          if (this.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n            datasets.push({\n              label: res.data.users[u].label,\n              data: res.data.users[u].data,\n              fill: false,\n              borderColor: res.data.users[u].color,\n              backgroundColor: res.data.users[u].color,\n              user: res.data.users[u].user_id\n            });\n          }\n        }\n        datasets.push({\n          label: res.data.users[0].label,\n          data: res.data.users[0].data,\n          fill: false,\n          borderColor: res.data.users[0].color,\n          backgroundColor: res.data.users[0].color\n        });\n        this.burndownData = {\n          labels: res.data.days,\n          datasets: datasets,\n          options: { legend: { boxWidth: 40 } },\n          daily: res.data.daily\n        };\n      }\n    });\n  }\n\n  chartClicked(event) {\n    this.dayJob = this.burndownData.daily[event.element._index];\n    this._daily\n      .getDay4Usr(\n        this.burndownData.datasets[event.element._datasetIndex].user,\n        this.burndownData.daily[event.element._index]\n      )\n      .subscribe(res => {\n        this.dayView = res.data;\n        this.totalp = 0;\n        var totalp = 0;\n        var a = 0;\n        for (var i = 0; i < this.dayView.length; i++) {\n          a = parseFloat(this.dayView[i].dail_points);\n          totalp += parseFloat(a);\n        }\n        this.totalp = totalp.toFixed(2);\n        $(\"#mdDayView\").modal(\"show\");\n      });\n  }\n\n  handleDayClick(e) {\n\n  }\n  handleEventClick(e) {\n    if (e.calEvent) {\n      this.sh = e.calEvent;\n      document.getElementById(\"openschedule\").click();\n    }\n  }\n  deleteAttachment(att) {\n    var pos = this.task.attachments.indexOf(att.name);\n    this.task.attachments.splice(pos, 1);\n  }\n  showNoti(n) {\n    this.noti = n;\n    this._header.setCatNotification(this.noti.para_id, 18).subscribe(res => {\n      this.getNotifications();\n      // this._tasks.getTaskNotification(this.noti.noti_id).subscribe(res => {});\n    });\n  }\n\n  getNotifications() {\n    this._header.getDeskNotificatons().subscribe(res => {\n      this.notifications = res.data;\n    });\n  }\n\n  clearNotif() {\n    this._header.clearNotificatons().subscribe(res => {\n      this.notifications = [];\n    });\n  }\n  reloadComments(tkid) {\n    this._tasks.getComments(tkid).subscribe(res => {\n      this.mdT.comments = res.data;\n      var elem = document.getElementById(\"mdTComments\");\n      if (elem) {\n        elem.scrollTop = elem.scrollHeight;\n      }\n    });\n  }\n  addScheduler() {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.scheduler = { scheduler: {} };\n  }\n\n  saveScheduler() {\n    this.scheduler.sche_start = new Date(this.scheduler.sche_start);\n    this.scheduler.sche_start =\n      this.scheduler.sche_start.getFullYear() +\n      \"-\" +\n      (this.scheduler.sche_start.getMonth() + 1) +\n      \"-\" +\n      this.scheduler.sche_start.getDate();\n    this.scheduler.sche_end = new Date(this.scheduler.sche_end);\n    this.scheduler.sche_end =\n      this.scheduler.sche_end.getFullYear() +\n      \"-\" +\n      (this.scheduler.sche_end.getMonth() + 1) +\n      \"-\" +\n      this.scheduler.sche_end.getDate();\n    this._scheduler.putScheduler(this.scheduler).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Good news!\");\n      } else {\n        this.toastr.success(data.message, \"Scheduler updated successfully\");\n      }\n      this.ngOnInit();\n      this.getMySchedule();\n    });\n  }\n\n  saveMeeting() {\n    let usarr = [];\n    for (let x in this.meeting.usershared) {\n      if (this.meeting.usershared[x].user_id) {\n        usarr.push(this.meeting.usershared[x].user_id);\n      }\n      if (this.meeting.usershared[x].user_id) {\n        usarr.push(this.meeting.usershared[x].user_id);\n      }\n    }\n    this.meeting.users = usarr;\n    this.meeting.meet_date =\n      this.meeting.datetime.getFullYear() +\n      \"-\" +\n      this.lpad(this.meeting.datetime.getMonth() + 1, 2) +\n      \"-\" +\n      this.lpad(this.meeting.datetime.getDate(), 2) +\n      \" \" +\n      this.lpad(this.meeting.datetime.getHours(), 2) +\n      \":\" +\n      this.lpad(this.meeting.datetime.getMinutes(), 2) +\n      \":\" +\n      this.lpad(this.meeting.datetime.getSeconds(), 2);\n    this._events.putMeeting(this.meeting).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Error\");\n      } else {\n        this.toastr.success(data.message, \"Meeting Saved successfully\");\n      }\n      this.ngOnInit();\n      this.getMySchedule();\n    });\n  }\n\n  getForm(task) {\n    this._tasks.getTaskFields(task).subscribe(res => {\n      this.mdT.form = res.data;\n    });\n  }\n\n  noteAdd(idtask, type) {\n    this.note.task_id = idtask;\n    if (\n      this.note.note_text == undefined &&\n      this.note_text != null &&\n      this.note_text != \"\"\n    ) {\n      this.note.note_text = this.note_text;\n    }\n    this._notes.putNote(this.note).subscribe(data => { });\n    this.getComments(idtask);\n    this.getTimelinetk(idtask);\n  }\n\n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  showCreateTask() {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.task = { attachments: [] };\n    $(\"#mdAddTask\").modal(\"show\");\n  }\n\n  showCreateProject() {\n    this.project = { attachments: [] };\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    $(\"#mdproject\").modal(\"show\");\n  }\n\n  saveTask() {\n    if (\n      (this.task_description != \"\" || this.task_description != null) &&\n      this.task.task_description == undefined\n    ) {\n      this.task.task_description = this.task_description;\n    }\n\n    this.task.task_description = this.task.task_description\n      .split(\"\\t\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\n\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\r\")\n      .join(\"\");\n    this.task.task_delivery = new Date(this.task.task_delivery);\n    this.task.task_delivery =\n      this.task.task_delivery.getFullYear() +\n      \"-\" +\n      (this.task.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.task.task_delivery.getDate();\n    this._tasks.putTask(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Good news!\");\n      } else {\n        this.toastr.success(data.message, \"Task saved successfully\");\n      }\n      // this.reload();\n      this.task = { attachments: [] };\n    });\n  }\n\n  saveproject() {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    let usarr = [];\n    for (let x in this.project.users) {\n      usarr.push(this.project.users[x].user_id);\n    }\n    this.project.users = usarr;\n    this._projects.putproject(this.project).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Attention!\");\n      } else {\n        this.toastr.success(data.message, \"project saved successfully\");\n      }\n      // this.reload();\n    });\n    this.project = { users: [], attachments: [] };\n  }\n\n  validateProj() {\n    return (\n      !this.project.proj_subject ||\n      this.project.proj_subject.trim() == \"\" ||\n      !this.project.proj_description ||\n      this.project.proj_description.trim() == \"\" ||\n      !this.project.para_category ||\n      this.project.para_category.trim() == \"\" ||\n      !this.project.prod_id ||\n      this.project.prod_id.trim() == \"\" ||\n      !this.project.group_assigned ||\n      this.project.group_assigned.trim() == \"\" ||\n      !this.project.user_applicant ||\n      this.project.user_applicant.trim() == \"\" ||\n      !this.project.proj_end ||\n      this.project.proj_end == \"\" ||\n      this.project.proj_end == \"undefined\" ||\n      !this.project.proj_propoints ||\n      this.project.proj_propoints == \"\" ||\n      this.project.proj_propoints == \"undefined\"\n    );\n  }\n\n  lpad(n, width, z) {\n    z = z || \"0\";\n    n = n || \"0\";\n    n = n + \"\";\n    return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n  }\n  parseFloat(pts) {\n    return parseFloat(pts);\n  }\n\n  round(value, n) {\n    if (!n || n == 0) {\n      n = 1;\n    } else {\n      n = 10 * n;\n    }\n    return Math.round(value * n) / n;\n  }\n\n  getCurdate() {\n    var today = new Date();\n    var dd = today.getDate();\n    var mm = today.getMonth() + 1;\n    var yyyy = today.getFullYear();\n\n    if (dd < 10) {\n      dd = \"0\" + dd;\n    }\n\n    if (mm < 10) {\n      mm = \"0\" + mm;\n    }\n\n    return yyyy + \"-\" + mm + \"-\" + dd;\n  }\n\n  validateDaily(type) {\n    if (type == \"1\") {\n      return (\n        !this.day.dail_text ||\n        this.day.dail_text.trim() == \"\" ||\n        !this.day.dail_points ||\n        this.day.dail_points <= 0 ||\n        this.day.dail_points == \"undefined\" ||\n        !this.day.dail_date ||\n        this.day.dail_date == \"\" ||\n        this.day.dail_date == \"undefined\" ||\n        parseFloat(this.mytask.task_pointsd) +\n        parseFloat(this.day.dail_points) >\n        parseFloat(this.mytask.task_points)\n      );\n    }\n    if (type == \"2\") {\n      return (\n        !this.day.para_category ||\n        !this.day.prod_id ||\n        !this.day.dail_text_2 ||\n        this.day.dail_text_2.trim() == \"\" ||\n        !this.day.dail_points_2 ||\n        this.day.dail_points_2 <= 0 ||\n        this.day.dail_points_2 == \"undefined\" ||\n        !this.day.dail_date_2 ||\n        this.day.dail_date_2 == \"\" ||\n        this.day.dail_date_2 == \"undefined\"\n      );\n    }\n  }\n\n  saveDaily(dv, idtask) {\n    if (this.dailynew == 0) {\n      dv.dail_date = dv.dail_date_2;\n      dv.dail_points = dv.dail_points_2;\n      dv.dail_text = dv.dail_text_2;\n    }\n    dv.task_id = idtask;\n    dv.dail_date =\n      dv.dail_date.getFullYear() +\n      \"-\" +\n      (dv.dail_date.getMonth() + 1) +\n      \"-\" +\n      dv.dail_date.getDate();\n    if (\n      parseInt(this.mytask.task_pointsd) + parseInt(dv.dail_points) >\n      this.mytask.task_points\n    ) {\n      this.toastr.error(\n        \"Points selected exceed current task duration\",\n        \"Error!\"\n      );\n    } else {\n      this._daily.putDaily(dv).subscribe(data => {\n        if (data.data == \"OK\") {\n          this.toastr.success(data.message, \"Daily saved Successfully\");\n        } else {\n          this.toastr.error(data.message, \"Error!\");\n        }\n        this.day = { dail_points: 1 };\n        this.setMytask(0);\n      });\n    }\n  }\n\n  setMytask(num) {\n    this.dailynew = 0;\n    this.mytask = 0;\n    this.day = { dail_points_2: 1, dail_text_2: \"\" };\n  }\n\n  getDevtask() {\n    this._daily.getDevtasks().subscribe(data => {\n      var developingx = [];\n      this.tasks = data.data;\n      if (this.tasks[38]) {\n        developingx = developingx.concat(this.tasks[38]);\n      }\n      this.developing = developingx;\n      this.dailynew == 0;\n      this.spinner = false;\n    });\n  }\n\n  addDaily() {\n    this.lblmytasks = [];\n    this._tasks.getTasksbyMe().subscribe(data => {\n      this.myTasks = data.data;\n      for (let c of data.data) {\n        this.lblmytasks.push({ label: \"#\" + c.task_id + \" \" + c.task_subject, value: c.task_id });\n      }\n    });\n    $(\"#mdDailyTask\").modal(\"show\");\n  }\n\n  showInfo(idtk) {\n    this.dailynew = -1;\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.mytask = idtk;\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n\n  doneFilter() {\n    this.searchuser = \"\";\n  }\n\n  setNotify(idn) {\n    this._header.setCatNotification(idn, 18).subscribe(res => { });\n  }\n\n  showDetail(state) {\n    $('[data-toggle=\"tooltip\"]').tooltip('hide');\n    this._tasks.getPercentageDetail(state).subscribe(res => {\n      this.taskbystatus = res.data;\n    });\n    $(\"#mdTaskStatus\").modal(\"show\");\n  }\n\n  showModal(id) {\n    if (id == 1) {\n      this.scheduler = { scheduler: {} };\n      $(\"#mdAddScheduler\").modal(\"show\");\n    } else {\n      this.meeting = { usershared: [] };\n      $(\"#mdAddMeeting\").modal(\"show\");\n    }\n  }\n\n  showModaltk(tkid) {\n    $(\"#myTask\" + tkid).click();\n  }\n\n  getTasksMySprint() {\n    let ellipsis = \"…\";\n    this._todolist.getTasksMySprint().subscribe(res => {\n\n      this.tasksMySprint = res.data;\n\n      for (let i = 0; i < this.tasksMySprint.length; i++) {\n        if (this.tasksMySprint[i].task_subject.length > 80) {\n          this.tasksMySprint[i].task_subject = this.tasksMySprint[i].task_subject.substring(0, 80) + ellipsis;\n        }\n        if (this.tasksMySprint[i].para_status == 38) {\n          this.taskInDeveloping = true;\n        }\n        if (this.tasksMySprint[i].para_status == 35 || this.tasksMySprint[i].para_status == 36 || this.tasksMySprint[i].para_status == 37) {\n          this.taskInPending = true;\n        }\n      }\n    });\n  }\n\n  getMyMeetings() {\n    let ellipsis = \"…\";\n    this._todolist.getMyMeetings().subscribe(res => {\n\n      this.myMeetings = res.data;\n\n      for (let i = 0; i < this.myMeetings.length; i++) {\n        if (this.myMeetings[i].meet_text.length > 80) {\n          this.myMeetings[i].meet_text = this.myMeetings[i].meet_text.substring(0, 80) + ellipsis;\n        }\n      }\n    });\n  }\n\n  getMySchedulers() {\n    let ellipsis = \"…\";\n    this._todolist.getMySchedulers().subscribe(res => {\n\n      this.mySchedulers = res.data;\n\n      for (let i = 0; i < this.mySchedulers.length; i++) {\n        if (this.mySchedulers[i].sche_title.length > 80) {\n          this.mySchedulers[i].sche_title = this.mySchedulers[i].sche_title.substring(0, 80) + ellipsis;\n        }\n      }\n\n    });\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/dashboard/dashboard.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { LoginService } from \"../../services/login.service\";\nimport { DashboardService } from \"../../services/dashboard.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { DailyService } from \"../../services/daily.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { CategoriesService } from \"../../services/categories.service\";\nimport { HeaderService } from \"../../services/header.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { RequestService } from \"../../services/request.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { UnitsService } from \"../../services/units.service\";\nimport { FilterPipe, CalculatePipe } from \"../../pipes\";\n\nimport template from \"./taskboard.template.html\";\n\n@Component({\n  selector: \"taskboard\",\n  template: template,\n  pipes: [FilterPipe, CalculatePipe],\n  providers: [ConfirmationService]\n})\nexport class TaskboardComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    dashboardService: DashboardService,\n    taskService: TaskService,\n    dailyService: DailyService,\n    userService: UsersService,\n    ProjectService: ProjectService,\n    productService: ProductService,\n    noteService: NoteService,\n    toastr: ToastrService,\n    headerService: HeaderService,\n    categoriesService: CategoriesService,\n    sprintService: SprintService,\n    RequestService: RequestService,\n    groupService: GroupService,\n    confirmationService: ConfirmationService,\n    unitsService: UnitsService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._dashBoard = dashboardService;\n    this._tasks = taskService;\n    this._projects = ProjectService;\n    this._notes = noteService;\n    this._daily = dailyService;\n    this._user = userService;\n    this._products = productService;\n    this._dailys = dailyService;\n    this._sanitizer = sanitizer;\n    this._header = headerService;\n    this._categories = categoriesService;\n    this._sprint = sprintService;\n    this.confirm = confirmationService;\n    this._event = RequestService;\n    this.toastr = toastr;\n    this._groups = groupService;\n    this._units = unitsService;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.draggedTask = {};\n    this.status = {};\n    this.events = [];\n    this.pending = [];\n    this.developing = [];\n    this.improving = [];\n    this.complete = [];\n    // this.backlog = [];\n    this.close = [];\n    this.users = [];\n    this.products = [];\n    this.notifications = [];\n    this.lblgroups = [];\n    this.note = { attachments: [] };\n    this.status = {\n      sprint: { closedpoints: 0, devpoints: 0, delpoints: 0 },\n      closed: [],\n      delayed: [],\n      developing: [],\n      pending: []\n    };\n    this.searching = \"\";\n    this.searchproduct = \"\";\n    this.searchuser = \"\";\n    this.searchproject = \"\";\n    this.posState = \"user_asigned\";\n    this.posDState = \"user_id\";\n    this.posCreator = \"user_creator\";\n    this.posProduct = \"prod_id\";\n    this.mdT = { project: {}, comments: [] };\n    this.mcT = { project: {} };\n    this.sumdv = 0;\n    this.sumdv_d = 0;\n    this.sumcp = 0;\n    this.sumimp = 0;\n    this.sumcl = 0;\n    this.rjtask = {};\n    this.selectedNodes = [];\n    this.selectedUsers = [];\n    this.selectedProduct = [];\n    this.selectedProduct_new = [];\n    this.selectedprojects = [];\n    this.selectedprojects_new = [];\n    this.task = { project: {}, attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.dayView = {};\n    this.day = { dail_points: \"\", dail_text: \"\" };\n    this.extra = { points: 0, text: \"\", delivery: \"\" };\n    this.catdaily = [];\n    this.todaypts = 0;\n    this.chartHtml = \"\";\n    this.chartUser = \"\";\n    this.mychart = \"\";\n    this.byme = false;\n    this.myUsers = [];\n    this.myProjects = [];\n    this.userslbl = [];\n    this.contactsTree = [];\n    this.categoryMenu = [];\n    this.note_text = \"\";\n    this.categories = [];\n    this.selectedCategory = {};\n    this.mytags = [];\n    this.tagsbytask = [];\n    this.keylist = [];\n    this.regexFromMyArray = [];\n    this.counterElements = 0;\n    this.notes = [];\n    this.taskslist = [];\n    this.globalist = {};\n    this.spinner = false;\n    this.posAsigned = \"asigned\";\n    this.selectedParents = [];\n    this.filter_projects = 0;\n    this.myuser = 0;\n    this.mdT.sprint = [];\n    this.mysprint = [];\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.cpimptask = {};\n    this.myrequest = 0;\n    this.requests = [];\n    this.showt = 0;\n    this.myteam = {};\n    this.textState = [\"\"];\n    this.infodone = false;\n    this.team = [];\n    this.tasks = [];\n    this.mysprints = [];\n    this.mysprint.spri_id = 0;\n    this.tagMenux = 1;\n    this.minDateDaily = null;\n    this.maxDateDaily = new Date();\n    this.tagbytask = {};\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : TaskBoard ::.\");\n    //document.getElementById (\"list-item\").addEventListener (\"click\", kkk, false);\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprintsgroup = res.data;\n      this.mysprintsgroup.push({\n        spri_id: \"0\",\n        spri_init: \"-\",\n        spri_end: \"-\",\n        spri_description: \"None (Backlog)\"\n      });\n    });\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n      if (data.data[0].user_id.head != 0) {\n        this.headteam = data.data[0].head;\n      } else {\n        this.headteam = 0;\n      }\n      this.selectedUsers.push(this.myuser);\n      this.selectedNodes.push(this.myuser);\n      this.getMyTeam(data.data[0].grop_id);\n    });\n\n    this._user.getMyUsers().subscribe(data => {\n      let group = \"0\";\n      let groupname = \"\";\n      let children = [];\n      for (let u of data.data) {\n        this.myUsers.push(u.user_id);\n        if (group != u.grop_id) {\n          if (group != \"0\") {\n            this.contactsTree.push({\n              label: groupname,\n              data: group,\n              expanded: true,\n              children: children\n            });\n          }\n          groupname = u.groupname;\n          group = u.grop_id;\n          children = [];\n        }\n        children.push({\n          label: this.getNameUser(u.user_name, u.user_lastname),\n          data: u.user_id\n        });\n      }\n      if (group != \"0\") {\n        this.contactsTree.push({\n          label: groupname,\n          data: group,\n          expanded: true,\n          children: children\n        });\n      }\n    });\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._daily.getCategories().subscribe(data => {\n      this.catdaily = [];\n      for (let c of data.data) {\n        this.catdaily.push({ label: c.para_name, value: c.para_codigo });\n      }\n    });\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n        this.selectedProduct.push(c.prod_id);\n      }\n    });\n    this.mytsk = 0;\n    this.getRequests();\n    this.getCategories();\n    this.getMyProjects();\n    this.getTaskboard(0);\n    this.loadSprint();\n    // this.getMyTaggedTasks();\n    this._units.getUnits().subscribe(res => {\n      this.units = [];\n      for (let c of res.data) {\n        this.units.push({ label: c.unit_desc, value: c.unit_id });\n      }\n    });\n  }\n\n  reloadTaskboard() {\n    $(\"#mdRequestTask\").modal(\"hide\");\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprintsgroup = res.data;\n      this.mysprintsgroup.push({\n        spri_id: \"0\",\n        spri_init: \"-\",\n        spri_end: \"-\",\n        spri_description: \"None (Backlog)\"\n      });\n    });\n\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n      if (data.data[0].user_id.head != 0) {\n        this.headteam = data.data[0].head;\n      } else {\n        this.headteam = 0;\n      }\n      this.selectedUsers.push(this.myuser);\n      this.selectedNodes.push(this.myuser);\n      this.getMyTeam(data.data[0].grop_id);\n    });\n  }\n\n  getNameUser(user_name, user_lastname) {\n    if (user_name && user_lastname) {\n      let names = user_name;\n      let surnames = user_lastname;\n      let ellipsis = \"…\";\n      let fullName = names + ' ' + surnames;\n\n      if (fullName.length <= 12) {\n        return fullName;\n      } else {\n\n        if (names.length <= 12 && surnames.length <= 12) {\n          fullName = names + ' ' + surnames;\n        }\n\n        if (names.length <= 12 && surnames.length > 12) {\n          surnames = surnames.substring(0, 14) + ellipsis;\n          fullName = names + ' ' + surnames;\n        }\n\n        if (names.length > 12 && surnames.length <= 12) {\n          let arrayNames = names.split(' ');\n          let firstName = arrayNames[0];\n          fullName = firstName + ' ' + surnames;\n        }\n\n        if (names.length > 12 && surnames.length > 12) {\n          let arrayNames = names.split(' ');\n          let firstName = arrayNames[0];\n          surnames = surnames.substring(0, 12) + ellipsis;\n          fullName = firstName + ' ' + surnames;\n        }\n\n        return fullName;\n      }\n    } else {\n      return \"\";\n    }\n  }\n\n  updateSelect(event) {\n    this.selectedUsers = [];\n    for (let c of this.selectedNodes) {\n      if (!c.children) {\n        this.selectedUsers.push(c);\n      }\n    }\n  }\n\n  updateSelectA(event, children, idparent) {\n    this.selectAllChildrens(children, idparent);\n\n    this.selectedUsers = [];\n    for (let c of this.selectedNodes) {\n      if (!c.children) {\n        this.selectedUsers.push(c);\n      }\n    }\n  }\n\n  changeStatus(pd, status) {\n    this.confirm.confirm({\n      message: \"Do you want to proceed?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (pd.task_approved == 1) {\n          this._tasks.setStatusTask(pd.task_id, status).subscribe(data => {\n            if (data.data != \"OK\") {\n              this.toastr.warning(data.message, \"Attention\");\n            } else {\n              this.toastr.success(\n                data.message,\n                \"Task status changed successfully\"\n              );\n            }\n            this.getTaskboard(this.myteam.grop_id);\n          });\n        } else {\n          this.toastr.warning(\n            \"Action not allowed. This task must be accepted first by a manager.\",\n            \"Attention\"\n          );\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  showCpImp(cp) {\n    this.cpimptask.task_id = cp.task_id;\n    this.cpimptask.retk_description = \"\";\n    $(\"#mdCpImp\").modal(\"show\");\n  }\n\n  cpimpTask() {\n    this._tasks\n      .impTask(this.cpimptask.task_id, this.cpimptask.retk_description)\n      .subscribe(data => {\n        if (data.data != \"OK\") {\n          this.toastr.warning(data.message, \"Warning!\");\n        } else {\n          this.toastr.success(data.message, \"Task moved to improving\");\n        }\n        this.getTaskboard(this.myteam.grop_id);\n      });\n  }\n\n  showReject(dv) {\n    this.rjtask.task_id = dv.task_id;\n    this.rjtask.retk_description = \"\";\n  }\n\n  sendBack(pd) {\n    this.confirm.confirm({\n      message: \"Do you want to proceed?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        this._tasks.setStatusTask(pd.task_id, 44).subscribe(data => {\n          if (data.data != \"OK\") {\n            this.toastr.warning(data.message, \"Attention\");\n          } else {\n            this.toastr.success(data.message, \"Task sent successfully\");\n          }\n          this.getTaskboard(this.myteam.grop_id);\n        });\n      },\n      reject: () => { }\n    });\n  }\n\n  rejectTask() {\n    this._tasks\n      .rejectTask(this.rjtask.task_id, this.rjtask.retk_description)\n      .subscribe(data => {\n        if (data.data != \"OK\") {\n          this.toastr.warning(data.message, \"Warning!\");\n        } else {\n          this.toastr.success(data.message, \"Task rejected\");\n        }\n        this.getTaskboard(this.myteam.grop_id);\n      });\n  }\n\n  collapseColumn(classC) {\n    var el = $(\".collapsed-box.\" + classC);\n    if (el.length > 0) {\n      $(\".collapsed-box.\" + classC).removeClass(\"collapsed-box\");\n    } else {\n      $(\".\" + classC).addClass(\"collapsed-box\");\n    }\n  }\n\n  getMyProjects() {\n    this.myProjects = [];\n    this.selectedprojects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      this.selectedprojects = [0];\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n    });\n  }\n\n  getTaskboard(grop_id) {\n    this.spinner = true;\n    if (grop_id != 0 && this.mysprint.spri_id != 0) {\n      this._dashBoard.getTaskboard(this.mysprint.spri_id).subscribe(data => {\n        var pendingx = [];\n        var developingx = [];\n        var improvingx = [];\n        var completex = [];\n        var closex = [];\n        this.tasks = data.data;\n        if (this.tasks[42]) {\n          closex = closex.concat(this.tasks[42]);\n        }\n        this.close = closex;\n        if (this.tasks[35]) {\n          pendingx = pendingx.concat(this.tasks[35]);\n        }\n        if (this.tasks[36]) {\n          pendingx = pendingx.concat(this.tasks[36]);\n        }\n        if (this.tasks[37]) {\n          pendingx = pendingx.concat(this.tasks[37]);\n        }\n        this.pending = pendingx;\n        if (this.tasks[38]) {\n          developingx = developingx.concat(this.tasks[38]);\n        }\n        if (this.tasks[39]) {\n          developingx = developingx.concat(this.tasks[39]);\n        }\n        this.developing = developingx;\n        if (this.tasks[41]) {\n          improvingx = improvingx.concat(this.tasks[41]);\n        }\n        this.improving = improvingx;\n        if (this.tasks[40]) {\n          completex = completex.concat(this.tasks[40]);\n        }\n        this.complete = completex;\n        this.spinner = false;\n        this.getMyTaggedTasks();\n      });\n      this.events = [];\n      this._dailys.getPtsToday().subscribe(res => {\n        this.todaypts = res.data;\n      });\n\n    } else {\n      this.spinner = false;\n      this.tasks = [];\n    }\n  }\n\n  addEvent() {\n    this.task = { project: {}, attachments: [] };\n    $(\"#mdAddTask\").modal(\"show\");\n  }\n\n  onChangeNT(event) {\n    var files = event.srcElement.files;\n    this.note.attachments.push(files[0]);\n  }\n\n  deleteAttachmentNT(att) {\n    for (var i in this.note.attachments) {\n      if (this.note.attachments[i] === att) {\n        this.note.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  onChangeTask(event, action) {\n    if (action == \"new\") {\n      var files = event.files;\n      if (this.taskattch.attachments.length > 0) {\n        for (let c of this.taskattch.attachments) {\n          if (files[0][\"name\"] == c.name) {\n          } else {\n            this.taskattch.attachments.push(files[0]);\n          }\n        }\n      } else {\n        this.taskattch.attachments.push(files[0]);\n      }\n    } else if (action == \"delete\") {\n      var file = event.file;\n      for (let c of this.taskattch.attachments) {\n        if (file[\"name\"] == c.name) {\n          var posattch = this.taskattch.attachments.indexOf(c);\n          this.taskattch.attachments.splice(posattch);\n        }\n      }\n    }\n  }\n\n  onUploadAttachment(taskid) {\n    if (taskid) {\n      this.taskattch.task_id = taskid;\n      this._tasks.putAttachments(this.taskattch).subscribe(res => {\n        if (res.data === \"\" || res.data === \"0\") {\n          this.toastr.error(res.message, \"Error!\");\n        } else {\n          this.toastr.success(res.message, \"Attachments uploaded successfully\");\n          this.taskattch.attachments = [];\n          this.getAttachments(taskid);\n        }\n      });\n    }\n  }\n\n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  getAttachments(taskid) {\n    this._tasks.getAttachments(taskid).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n\n  editModal(ev) {\n    if (!ev.attachments) {\n      ev.attachments = [];\n    }\n    this.note = { attachments: [] };\n    this.task = ev;\n    this.getAttachments(ev.task_id);\n    this.getComments(ev.task_id);\n    $(\"#addDescription\").removeClass(\"in\");\n  }\n\n  getComments(tk) {\n    this.mdT.comments = [];\n    this._tasks.getComments(tk).subscribe(res => {\n      this.task.comments = res.data;\n      this.mdT.comments = res.data;\n      var elem = document.getElementById(\"mdTComments\");\n      var elem2 = document.getElementById(\"taskComments\");\n      if (elem && elem2) {\n        elem.scrollTop = elem.scrollHeight;\n        elem2.scrollTop = elem2.scrollHeight;\n      }\n      return res.data;\n    });\n    this.note_text = \"\";\n    this.note = { attachments: [] };\n  }\n\n  setTime(tk) {\n    this.showCurrentDate();\n    this.extra.task_id = tk.task_id;\n    this.extra.old_points = tk.task_points;\n    this.task = tk;\n  }\n\n  saveExtra() {\n    this.extra.delivery =\n      this.extra.delivery.getFullYear() +\n      \"-\" +\n      (this.extra.delivery.getMonth() + 1) +\n      \"-\" +\n      this.extra.delivery.getDate();\n    let points_diff = parseFloat(this.extra.old_points) + parseFloat(this.extra.points);\n    if (points_diff > 0) {\n      this._tasks.putExtra(this.extra).subscribe(res => {\n        if (res.message == \"OK\") {\n          this.toastr.success(res.message, \"Task adjusted\");\n        } else {\n          this.toastr.error(res.message, \"Error!\");\n        }\n        this.extra = { points: 1, text: \"\", delivery: \"\" };\n        this.getTaskboard(this.myteam.grop_id);\n      });\n    } else {\n      this.toastr.error(\n        \"Invalid adjustment. Duration can not equal to zero\",\n        \"Error!\"\n      );\n    }\n  }\n\n  compareDate(date){\n    if (this.day.dail_date != undefined && this.day.dail_date != \"\" && typeof this.day.dail_date != \"string\" && date != undefined) {\n      let date_aux = new Date(date.replace(\"-\",\"/\"));\n\n      if (this.day.dail_date.getTime() > date_aux.getTime() ) {\n        return 1;\n      } else if (this.day.dail_date.getTime() < date_aux.getTime() ) {\n        return -1;\n      } else {\n        return 0;\n      }    \n    } else {\n      return false;\n    }   \n  }\n\n  setTask(idtk) {\n    this.day = { dail_date: \"\", dail_points: \"\" };\n    this.mcT = { project: {} };\n    this.maxDateDaily = new Date();\n    this.minDateDaily = null;\n\n    this.minDateDaily = new Date(idtk.spri_init.replace(\"-\",\"/\"));\n    let spri_end = new Date(idtk.spri_end.replace(\"-\",\"/\"));\n\n    if (spri_end.getTime() < this.maxDateDaily.getTime()) {\n      this.maxDateDaily = spri_end;\n    }\n\n    this.day.dail_points = parseFloat(idtk.task_points - idtk.task_pointsd).toFixed(2);\n    if(idtk.unit_points){\n      this.day.unit_points = idtk.unit_points - idtk.unit_pointsd;\n      this.day.unit_id = idtk.unit_id;\n    }\n    if (!idtk.proj_id) {\n      this.mcT = idtk;\n    } else {\n      this._projects.getproject(idtk.proj_id).subscribe(res => {\n        this.mcT = idtk;\n        this.mcT.project = res.data;\n      });\n    }\n  }\n\n  saveTask() {\n    if (this.task.task_description2) {\n      this.task.task_description = this.task.task_description2;\n    }\n    if (this.task.task_description) {\n      this.task.task_description = this.task.task_description\n        .split(\"\\t\")\n        .join(\"\");\n      this.task.task_description = this.task.task_description\n        .split(\"\\n\")\n        .join(\"\");\n      this.task.task_description = this.task.task_description\n        .split(\"\\r\")\n        .join(\"\");\n    }\n    if (this.task.task_delivery) {\n      this.task.task_delivery =\n        this.task.task_delivery.getFullYear() +\n        \"-\" +\n        (this.task.task_delivery.getMonth() + 1) +\n        \"-\" +\n        this.task.task_delivery.getDate();\n    }\n    this._tasks.putTask(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.error(data.message, \"Error!\");\n      } else {\n        this.task.task_id = data.data;\n        if (this.taskattch.attachments.length > 0) {\n          this.taskattch.task_id = this.task.task_id;\n          this._tasks.putAttachments(this.taskattch).subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.taskattch.attachments = [];\n            }\n          });\n        }\n        this.toastr.success(data.message, \"Task saved successfully\");\n        // $(\"#mdRequestTask\").modal(\"hide\");\n        // this.reloadTaskboard();\n      }\n      $(\"#clform2\").click();\n      // this.getTaskboard();\n      this.getRequests();\n      this.task = { project: {}, attachments: [] };\n    });\n  }\n\n  saveproject() {\n    if (this.task.task_description) {\n      this.task.task_description = this.task.task_description\n        .split(\"\\n\")\n        .join(\"\");\n      this.task.task_description = this.task.task_description\n        .split(\"\\r\")\n        .join(\"\");\n    }\n    if (this.task.task_delivery) {\n      this.task.task_delivery =\n        this.task.task_delivery.getFullYear() +\n        \"-\" +\n        (this.task.task_delivery.getMonth() + 1) +\n        \"-\" +\n        this.task.task_delivery.getDate();\n    }\n    this._projects.putFromEvent(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.error(data.message, \"Error!\");\n      } else {\n        this.toastr.success(data.message, \"Saved Successfully\");\n      }\n      this.getMyProjects();\n      this.task = { project: {}, attachments: [] };\n    });\n  }\n\n  saveDaily(dv, idtask) {\n\n    if (dv.dail_date && dv.dail_date != \"\" && dv.dail_date != undefined\n      && dv.dail_text && dv.dail_text.trim() != \"\" && dv.dail_points && dv.dail_points != null && dv.dail_points > 0) {\n\n      dv.task_id = idtask;\n      dv.dail_date =\n        dv.dail_date.getFullYear() +\n        \"-\" +\n        (dv.dail_date.getMonth() + 1) +\n        \"-\" +\n        dv.dail_date.getDate();\n      if (\n        parseInt(this.mcT.task_pointsd) + parseInt(dv.dail_points) >\n        this.mcT.task_points\n      ) {\n        this.toastr.error(\n          \"Points selected exceed current task duration\",\n          \"Error!\"\n        );\n      } else {\n        this._daily.putDaily(dv).subscribe(data => {\n          if (data.data == \"OK\") {\n            this.toastr.success(data.message, \"Daily saved Successfully\");\n          } else {\n            this.toastr.warning(data.message, \"Action not allowed\");\n          }\n          this.day = { dail_date: \"\", dail_points: \"\" };\n          this.mcT = { project: {} };\n          this.maxDateDaily = new Date();\n          this.minDateDaily = null;\n          this.getTaskboard(this.myteam.grop_id);\n        });\n      }\n    }\n    else {\n      this.toastr.warning(\"¡ Empty fields !\");\n    }\n  }\n\n  closeDaily() {\n    this.day = { dail_date: \"\", dail_points: \"\" };\n    this.mcT = { project: {} };\n    this.maxDateDaily = new Date();\n    this.minDateDaily = null;\n  }\n\n  closeTask(tk) {\n    this._tasks.setStatusTask(tk.task_id, 42).subscribe(data => {\n      if (data.data != \"OK\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this.toastr.success(data.message, \"Task closed successfully\");\n        this.getTaskboard(this.myteam.grop_id);\n      }\n    });\n  }\n\n  parseFloat(pts) {\n    return Math.round(parseFloat(pts) * 100) / 100;\n  }\n\n  getBackground(idproject) {\n    if (idproject) {\n      for (let t of this.myProjects) {\n        if (t.value == idproject) {\n          return t.idcolor;\n        }\n      }\n    }\n    return \"#fff\";\n  }\n\n  round(value, n) {\n    if (!n || n == 0) {\n      n = 1;\n    } else {\n      n = 10 * n;\n    }\n    return Math.round(value * n) / n;\n  }\n\n  editTask() {\n    this.mdT.task_delivery = new Date(this.mdT.task_delivery);\n    this.mdT.task_delivery =\n      this.mdT.task_delivery.getFullYear() +\n      \"-\" +\n      (this.mdT.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.mdT.task_delivery.getDate();\n    this._tasks.editTask(this.mdT).subscribe(result => {\n      if (result.data == \"OK\") {\n        this.toastr.success(result.message, \"Task edited successfully\");\n      } else {\n        this.toastr.error(result.message, \"Error!\");\n      }\n      // this.mdTtask = { points: 1, text: \"\", delivery: \"\" };\n      this.getTaskboard(this.myteam.grop_id);\n    });\n  }\n\n  getCategories() {\n    this.categories = [];\n    this.catIds = [];\n    this._categories.getCategories().subscribe(res => {\n      for (let c of res.data) {\n        if (this.catIds.indexOf(c.cate_id) < 0) {\n          this.categories.push({\n            label: c.cate_desc,\n            value: c.cate_id,\n            approvalusers: [],\n            reqapproval: c.cate_appr\n          });\n          this.categoryMenu.push(c.cate_desc.toLowerCase());\n          this.catIds.push(c.cate_id);\n          for (let v = 0; v < this.categories.length; v++) {\n            if (this.categories[v].value == c.cate_id) {\n              this.categories[v].approvalusers.push({\n                label: c.user_name,\n                value: c.user_id\n              });\n            }\n          }\n        } else {\n          for (let i = 0; i < this.categories.length; i++) {\n            if (this.categories[i].value == c.cate_id) {\n              this.categories[i].approvalusers.push({\n                label: c.user_name,\n                value: c.user_id\n              });\n            }\n          }\n        }\n      }\n    });\n  }\n\n  updateCatSelect(cat) {\n    var cat_array = [];\n    this.selectedCategory.cate_id = cat;\n    for (let c of this.categories) {\n      cat_array.push(c.value);\n      if (cat_array.indexOf(cat) >= 0 && c.value == cat && c.reqapproval == 1) {\n        this.task.task_approved = 0;\n      } else if (\n        cat_array.indexOf(cat) >= 0 &&\n        c.value == cat &&\n        c.reqapproval == 0\n      ) {\n        this.task.task_approved = 1;\n      } else if (cat_array.indexOf(cat) < 0) {\n        this.task.task_approved = 1;\n      }\n    }\n  }\n\n  getMyTags() {\n    this.mytags = [];\n    var counttag = [];\n    this._tasks.getMyTags().subscribe(res => {\n      for (let c of res.data) {\n        if (c.tag_id && c.tag_id != \"\" && counttag.indexOf(c.tag_id) < 0) {\n          this.mytags.push({\n            tag_id: c.tag_id,\n            icon: c.icon,\n            color: c.color,\n            description: c.description\n          });\n          counttag.push(c.tag_id);\n        }\n      }\n    });\n  }\n\n  getTagsByTask(task_id) {\n    this.tagbytask = {};\n    this._tasks.getTagsByTask(task_id).subscribe(res => {\n      if (res) {\n        this.tagbytask = res.data;\n      }\n    });\n  }\n\n  deleteTagsByTask(task_id, tag_id) {\n    this._tasks.deleteTagsByTask(task_id, tag_id).subscribe(res => {\n      if (res.data != null) {\n        this.toastr.success(res.message, \"Tag deleted successfully\");\n        this.getTagsByTask(task_id);\n        this.getMyTaggedTasks();\n      } else {\n        this.toastr.warning(\"\", res.message);\n      }\n    });\n  }\n\n  getMyTaggedTasks() {\n    for (let e of this.events) {\n      e.tags = [];\n    }\n    for (let p of this.pending) {\n      p.tags = [];\n    }\n    for (let d of this.developing) {\n      d.tags = [];\n    }\n    for (let i of this.improving) {\n      i.tags = [];\n    }\n    for (let comp of this.complete) {\n      comp.tags = [];\n    }\n    for (let cl of this.close) {\n      cl.tags = [];\n    }\n\n    this._tasks.getMyTags().subscribe(res => {\n      for (let c of res.data) {\n        for (let e of this.events) {\n          if (e.task_id == c.task_id) {\n            if (!e.tags || e.tags.length == 0) {\n              e.tags = [];\n              e.tags.push(c);\n            } else {\n              e.tags.push(c);\n            }\n          }\n        }\n        for (let p of this.pending) {\n          if (p.task_id == c.task_id) {\n            if (!p.tags || p.tags.length == 0) {\n              p.tags = [];\n              p.tags.push(c);\n            } else {\n              p.tags.push(c);\n            }\n          }\n        }\n        for (let d of this.developing) {\n          if (d.task_id == c.task_id) {\n            if (!d.tags || d.tags.length == 0) {\n              d.tags = [];\n              d.tags.push(c);\n            } else {\n              d.tags.push(c);\n            }\n          }\n        }\n        for (let i of this.improving) {\n          if (i.task_id == c.task_id) {\n            if (!i.tags || i.tags.length == 0) {\n              i.tags = [];\n              i.tags.push(c);\n            } else {\n              i.tags.push(c);\n            }\n          }\n        }\n        for (let comp of this.complete) {\n          if (comp.task_id == c.task_id) {\n            if (!comp.tags || comp.tags.length == 0) {\n              comp.tags = [];\n              comp.tags.push(c);\n            } else {\n              comp.tags.push(c);\n            }\n          }\n        }\n        for (let cl of this.close) {\n          if (cl.task_id == c.task_id) {\n            if (!cl.tags || cl.tags.length == 0) {\n              cl.tags = [];\n              cl.tags.push(c);\n            } else {\n              cl.tags.push(c);\n            }\n          }\n        }\n      }\n    });\n  }\n\n  showTags(tk) {\n    this.getMyTags();\n    this.getTagsByTask(tk.task_id);\n    this.tagMenu = 1;\n    this.tagSubmenu = 0;\n    this.chosenTag = { pattern: \"\", color: \"\", name: \"\" };\n    this.task = tk;\n    this.patterns = [\n      \"fa fa-snowflake-o\",\n      \"fa fa-star\",\n      \"fa fa-rocket\",\n      \"fa fa-diamond\",\n      \"fa fa-headphones\",\n      \"fa fa-clock-o\",\n      \"fa fa-heart\",\n      \"fa fa-thumbs-up\",\n      \"fa fa-tree\"\n    ];\n    this.colorpalette = [\n      \"#0FB4FF\",\n      \"#007BD2\",\n      \"#BA2D65\",\n      \"#120480\",\n      \"#670983\",\n      \"#A108D9\",\n      \"#F01458\",\n      \"#D158D6\",\n      \"#F8410A\",\n      \"#F56363\",\n      \"#F85F31\",\n      \"#F78D4A\",\n      \"#92CC66\",\n      \"#CCD153\",\n      \"#FFBE2C\",\n      \"#F29E00\",\n      \"#64AF2C\",\n      \"#09C398\",\n      \"#06D9D2\",\n      \"#D50000\"\n    ];\n    $(\"#task_tag\").modal(\"show\");\n  }\n\n  setPage(opt) {\n    if (opt == 1) {\n      this.tagMenu = 1;\n      this.tagSubmenu = 0;\n    }\n    if (opt == 2) {\n      this.tagMenu = 2;\n      this.tagSubmenu = 1;\n    }\n    if (opt == 3) {\n      this.tagMenu = 3;\n      this.tagSubmenu = 0;\n    }\n  }\n\n  setPagex(opt) {\n    if (opt == 1) {\n      this.tagMenux = 1;\n    }\n    if (opt == 2) {\n      this.tagMenux = 2;\n    }\n    if (opt == 3) {\n      this.tagMenux = 3;\n    }\n    if (opt == 4) {\n      this.tagMenux = 4;\n    }\n  }\n\n  slidePage(dir) {\n    if (dir == \"prev\" && this.tagSubmenu > 1) {\n      this.tagSubmenu = this.tagSubmenu - 1;\n    } else if (dir == \"next\" && this.tagSubmenu < 3) {\n      this.tagSubmenu = this.tagSubmenu + 1;\n    }\n  }\n\n  chooseTagOption(item, type) {\n    switch (type) {\n      case 1:\n        this.chosenTag.pattern = item;\n        if ($(\".menu-tiles\").hasClass(\"chosen-option\")) {\n          $(\".menu-tiles\").removeClass(\"chosen-option\");\n        }\n        break;\n      case 2:\n        this.chosenTag.color = item;\n        if ($(\".menu-brick\").hasClass(\"chosen-option\")) {\n          $(\".menu-brick\").removeClass(\"chosen-option\");\n        }\n        break;\n      case 3:\n        this.chosenTag.name = item;\n        break;\n      case 4:\n        this.chosenTag = item;\n        if ($(\".preview-tag-medium\").hasClass(\"chosen-option\")) {\n          $(\".preview-tag-medium\").removeClass(\"chosen-option\");\n        }\n        break;\n      default:\n        break;\n    }\n  }\n\n  saveNewTag() {\n    if (\n      this.chosenTag.tag_id == \"\" ||\n      !this.chosenTag.tag_id ||\n      this.chosenTag.tag_id == null\n    ) {\n      this._tasks.saveNewTag(this.chosenTag).subscribe(res => {\n        this.chosenTag.tag_id = res.data;\n        this.chosenTag.description = this.chosenTag.name;\n        this.getMyTaggedTasks();\n        this.toastr.success(res.message, \"Tag added successfully\");\n        $(\"#task_tag\").modal(\"hide\");\n      });\n    }\n  }\n\n  setTag() {\n    var data = {\n      task_id: this.task.task_id,\n      tag_id: this.chosenTag.tag_id,\n      description: this.chosenTag.description\n    };\n    this._tasks.setTag(data).subscribe(res => {\n      if (res.data != null) {\n        this.toastr.success(\"\", res.message);\n        this.getMyTaggedTasks();\n        this.getTagsByTask(res.data.task_id);\n        $(\"#task_tag\").modal(\"hide\");\n\n      } else {\n        this.toastr.warning(\"\", res.message);\n      }\n    });\n  }\n\n  showFilter() {\n    $(\"#sq-eraser > i\").css(\"color\", \"#b3dfff\");\n    $(\"#sq-eraser > i\").css(\"cursor\", \"not-allowed\");\n  }\n\n  seek(elemen) {\n    var index = this.keylist.indexOf(elemen.target.nextSibling.innerText);\n    if (this.keylist.length > 1) {\n      this.keylist.splice(index, 1);\n      this.regexFromMyArray = new RegExp(this.keylist.join(\"|\"), \"gi\");\n    } else {\n      this.keylist = [];\n      this.regexFromMyArray = new RegExp(\"/''/\", \"gi\");\n      $(\"#crumbs\").hide();\n    }\n    setTimeout(function config() {\n      var cantidad = 0;\n      cantidad = $(\".tabInfo\").length;\n      $(\"#total\").text(cantidad + \" results\");\n\n      $(\".description\").each(function (index) {\n        var new_text = $(this)\n          .text()\n          .replace(/<\\/?.+?>/gi, \"\");\n        $(this).text(new_text);\n      });\n    }, 100);\n  }\n\n  close() { }\n\n  reset() {\n    this.keylist = [];\n    this.globalist = {};\n    this.taskslist = [];\n    $(\"#item-key\").empty();\n    $(\"#crumbs\").hide();\n    $(\".sq sq-delete\").css(\"color\", \"#b3dfff\");\n    $(\"sq sq-delete\").css(\"cursor\", \"not-allowed\");\n  }\n\n  load_globalist() {\n    $(\"#sq-eraser\").css(\"pointer-events\", \"auto\");\n    $(\"#sq-eraser > i\").css(\"color\", \"#007bd2\");\n    $(\"#sq-eraser > i\").css(\"cursor\", \"pointer\");\n    if (this.keylist.length > 0) {\n      this.regexFromMyArray = new RegExp(this.keylist.join(\"|\"), \"gi\");\n\n      $(\"#crumbs\").show();\n\n      if (this.taskslist.length > 0) {\n        this.taskslist = [];\n      }\n      var task_arr = Object.values(this.tasks);\n      for (let task_inner of task_arr) {\n        for (let task_obj of task_inner) {\n          this.taskslist.push(task_obj);\n        }\n      }\n\n      this.globalist = {\n        tasks: this.taskslist\n      };\n\n      setTimeout(function config() {\n        var cantidad = 0;\n        cantidad = $(\".tabInfo\").length;\n        $(\"#total\").text(cantidad + \" results\");\n\n        $(\".description\").each(function (index) {\n          var new_text = $(this)\n            .text()\n            .replace(/<\\/?.+?>/gi, \"\");\n          $(this).text(new_text);\n        });\n      }, 100);\n    }\n  }\n\n  showMainFilter(num) {\n    if (this.selectedProduct.length == 0) {\n      this.selectedProduct = [];\n      for (var t in this.products) {\n        this.selectedProduct.push(this.products[t].value);\n      }\n    }\n    if (this.selectedprojects.length == 0) {\n      this.selectedprojects = [];\n      for (var t in this.myProjects) {\n        this.selectedprojects.push(this.myProjects[t].value);\n      }\n    }\n    $(\"#mdMainFilter\").modal(\"show\");\n  }\n\n  searchFilter(num) { }\n\n  clearFilter() {\n    this.selectedProduct = [];\n    this.selectedprojects = [];\n    this.selectedNodes = [];\n    this.searchproject = \"\";\n    this.searchproduct = \"\";\n    this.searchuser = \"\";\n    this.updateSelect(event);\n  }\n\n  selectAllItems(num) {\n    if (num == 1) {\n      if (this.selectedProduct.length > 0) {\n        this.selectedProduct = [];\n      } else {\n        this.selectedProduct = [];\n        for (var t in this.products) {\n          this.selectedProduct.push(this.products[t].value);\n        }\n      }\n    }\n    if (num == 2) {\n      if (this.selectedprojects.length > 0) {\n        this.selectedprojects = [];\n      } else {\n        this.selectedprojects = [];\n        for (var t in this.myProjects) {\n          this.selectedprojects.push(this.myProjects[t].value);\n        }\n      }\n    }\n    if (num == 3) {\n      if (this.selectedNodes.length > 0) {\n        this.selectedNodes = [];\n      } else {\n        this.selectedNodes = [];\n        for (var t in this.contactsTree) {\n          this.selectedNodes.push(this.contactsTree[t].data);\n          if (this.contactsTree[t].children.length > 0) {\n            for (var c in this.contactsTree[t].children) {\n              this.selectedNodes.push(this.contactsTree[t].children[c].data);\n            }\n          }\n        }\n      }\n    }\n    this.updateSelect(event);\n  }\n\n  selectAllChildrens(childrens, idparent) {\n    let m = 0;\n    let n = 0;\n    for (var x in this.selectedNodes) {\n      if (this.selectedNodes[x] == idparent) {\n        m++;\n      } else {\n        n++;\n      }\n    }\n\n    if (m == 1 && n == 0) {\n      this.selectedNodes = [];\n      this.selectedNodes.push(idparent);\n      if (childrens.length > 0) {\n        for (var c in childrens) {\n          if (m == 1) {\n            this.selectedNodes.push(childrens[c].data);\n          }\n        }\n      }\n    } else {\n      this.selectedNodes = [];\n    }\n  }\n\n  seek(elemen) {\n    var index = this.keylist.indexOf(elemen.target.nextSibling.innerText);\n    if (this.keylist.length > 0) {\n      this.keylist.splice(index, 1);\n      this.regexFromMyArray = new RegExp(this.keylist.join(\"|\"), \"gi\");\n    } else {\n      this.keylist = [];\n      this.regexFromMyArray = new RegExp(\"/''/\", \"gi\");\n    }\n  }\n\n  reset() {\n    this.keylist = [];\n    $(\"#item-key\").empty();\n    $(\"#crumbs\").hide();\n    $(\"#crumbs2\").hide();\n    $(\"#crumbs3\").hide();\n  }\n\n  go() {\n    this.regexFromMyArray = new RegExp(this.keylist.join(\"|\"), \"gi\");\n    $(\"#crumbs\").show();\n    $(\"#crumbs2\").show();\n    $(\"#crumbs3\").show();\n  }\n\n  validate(value, e) {\n    if (value == 13) {\n      var tag =\n        '<span id=\"list-item-' +\n        this.counterElements +\n        '\" class=\"item-search-taskboard\" style=\"display:inline-block\" >' +\n        '<a class=\"times-item\">&times;</a>' +\n        \"<span>\" +\n        e.target.value +\n        \"</span>\" +\n        \"</span>\";\n\n      $(\"#item-key\").append(tag);\n      this.counterElements++;\n      this.keylist.push(e.target.value);\n\n      $(\"#search-input\").val(\"\");\n    }\n    $(\".times-item\").bind(\"click\", function (e) {\n      var elem = e.target.nextSibling.parentNode.id;\n      var dato = e.target.nextSibling.innerText;\n      $(\"#\" + elem).remove();\n    });\n  }\n\n  goto_component(id, key) {\n    switch (key) {\n      case 1:\n        this._router.navigateByUrl(\"/task/\" + id);\n        break;\n      case 2:\n        this._router.navigateByUrl(\"/daily\");\n        break;\n      case 3:\n        this._router.navigateByUrl(\"/daily\");\n        break;\n      case 4:\n        this._router.navigateByUrl(\"/contact/\" + id);\n        break;\n      default:\n        break;\n    }\n  }\n\n  showEditSprint(tk) {\n    this.sprintselected = [];\n    this.taskselected = [];\n    if (tk.spri_id) {\n      this.sprintselected.push(tk.spri_id);\n    } else {\n      this.sprintselected.push(\"0\");\n    }\n    this.taskselected.push(tk.task_id);\n  }\n\n  doneMdSprint() {\n    this.taskselected = [];\n    this.sprintselected = [];\n  }\n\n  showSelected(event, idtk) {\n    this.sprintselected = [];\n    this.sprintselected.push(idtk);\n  }\n\n  saveChanges() {\n    let sprintselected = this.sprintselected[0];\n    let tasks = this.taskselected;\n    this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(res => {\n      if (res.data === \"OK\") {\n        this.toastr.success(\"updated successfully\");\n      } else {\n        this.toastr.warning(data.message, \"There was an error\");\n      }\n    });\n    this.getTaskboard(this.myteam.grop_id);\n  }\n\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      text = this.escapeHtml(text);\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  dragStart(event, dgt, drg) {\n    this.draggedTask = dgt;\n    this.draggedTask.drag = drg;\n    this._tasks.status(this.draggedTask.task_id).subscribe(data => {\n      this.status = data.data;\n    });\n  }\n\n  drop(event, typ) {\n    if (typ == \"41\" && this.status[0].para_status == 38) {\n      this.showCpImp(this.draggedTask);\n    } else if (typ == \"41\" && this.status[0].para_status == 40) {\n      this.showCpImp(this.draggedTask);\n    } else if (this.draggedTask.task_approved == 1) {\n      this._tasks\n        .setStatusTask(\n          this.draggedTask.task_id,\n          typ,\n          this.draggedTask.task_approved\n        )\n        .subscribe(data => {\n          if (data.data != \"OK\") {\n            this.toastr.error(data.message, \"Error!\");\n          } else {\n            this.setPosTask(typ);\n          }\n        });\n    } else {\n      this.toastr.warning(\n        \"Action not allowed. This task must be accepted first by a manager.\",\n        \"Attention\"\n      );\n    }\n  }\n\n  setPosTask(typ) {\n    switch (typ) {\n      case \"42\":\n        this.close = [this.draggedTask, ...this.close];\n        break;\n      case \"36\":\n        this.pending = [this.draggedTask, ...this.pending];\n        break;\n      case \"38\":\n        this.developing = [this.draggedTask, ...this.developing];\n        break;\n      case \"41\":\n        this.improving = [this.draggedTask, ...this.improving];\n        break;\n      case \"40\":\n        this.complete = [this.draggedTask, ...this.complete];\n        break;\n    }\n    var draggedIndex = 0;\n    switch (this.draggedTask.drag) {\n      case \"42\":\n        draggedIndex = this.findIndex(this.close, this.draggedTask);\n        this.close = this.close.filter((val, i) => i != draggedIndex);\n        break;\n      case \"36\":\n        draggedIndex = this.findIndex(this.pending, this.draggedTask);\n        this.pending = this.pending.filter((val, i) => i != draggedIndex);\n        break;\n      case \"38\":\n        draggedIndex = this.findIndex(this.developing, this.draggedTask);\n        this.developing = this.developing.filter((val, i) => i != draggedIndex);\n        break;\n      case \"41\":\n        draggedIndex = this.findIndex(this.improving, this.draggedTask);\n        this.improving = this.improving.filter((val, i) => i != draggedIndex);\n        break;\n      case \"40\":\n        draggedIndex = this.findIndex(this.complete, this.draggedTask);\n        this.complete = this.complete.filter((val, i) => i != draggedIndex);\n        break;\n    }\n    this.draggedTask = {};\n  }\n\n  findIndex(listtk, tk) {\n    let index = -1;\n    for (let i = 0; i < listtk.length; i++) {\n      if (tk.task_id === listtk[i].task_id) {\n        index = i;\n        break;\n      }\n    }\n    return index;\n  }\n  getRequests() {\n    this._event.getRequests().subscribe(res => {\n      this.requests = res.data;\n      if (this.requests[0]) {\n        if (this.requests[0].task_description) {\n          this.requests[0].task_description2 = this.requests[0].task_description;\n        }\n        this.myrequest = this.requests[0];\n        this.task = this.requests[0];\n        this.getAttachments(this.task.task_id);\n      } else {\n        this.myrequest = {};\n        this.task = {};\n      }\n    });\n  }\n  showInfo(request) {\n    if (request.task_description) {\n      request.task_description2 = request.task_description;\n    }\n    this.myrequest = request;\n    this.task = request;\n    this.getAttachments(this.task.task_id);\n  }\n\n  showReqTask() {\n    $(\"#mdRequestTask\").modal(\"show\");\n  }\n  showInfoTask(showt) {\n    if (this.showt == 1) {\n      this.showt = 0;\n    } else {\n      this.showt = 1;\n    }\n  }\n\n  showCurrentDate() {\n    this._tasks.getCurrentDate().subscribe(data => {\n      this.currentdate = new Date(data.data[0].CURRENT_TIMESTAMP);\n    });\n  }\n  updateTeam(grop_id) {\n    this.selectedUsers = [];\n    this.selectedNodes = [];\n    this._sprint.getTeam(grop_id).subscribe(ans => {\n      this.team = ans.data;\n      let group = this.team[0];\n      let usersel = false;\n      let user = {};\n      for (let i = 0; i < ans.data.length; i++) {\n        if (ans.data[i].usersel == 1) {\n          $('#team-name').text(ans.data[i].user_name + \" \" + ans.data[i].user_lastname);\n          $('#team-profile').text(ans.data[i].role_name);\n          this.textState.push(ans.data[i].user_id);\n          usersel = true;\n          user = ans.data[i];\n        }\n      }\n      if (this.team.length > 0) {\n        if (usersel == false) {\n          this.team[0].usersel = 1;\n          this.teamInfo(group.grop_id, group.user_name, group.user_lastname, group.role_name, [group.user_id], group.user_id);\n        } else {\n          this.teamInfo(user.grop_id, user.user_name, user.user_lastname, user.role_name, [user.user_id], user.user_id);\n        }\n        $('#team-name').text(this.team[0].user_name + \" \" + this.team[0].user_lastname);\n        $('#team-profile').text(this.team[0].role_name);\n      }\n      this.getListSprints(grop_id);\n    });\n  }\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n  teamInfo(grop_id, name, lastname, profile, state, userid) {\n    this.selectedNodes = [];\n    this.selectedUsers = [];\n    if (userid == 0) {\n      //this.selectedUsers = this.selectedUsers_2;\n      //this.selectedNodes = this.selectedNodes_2;\n      for (let c of this.contactsTree) {\n        if (c.data == grop_id) {\n          // this.selectAllTeam(c.children, grop_id);\n          this.selectAllChild(c.children, grop_id);\n        }\n      }\n      this.selectedUsers = [];\n      for (let c of this.selectedNodes) {\n        if (!c.children) {\n          this.selectedUsers.push(c);\n        }\n      }\n    } else {\n      this.selectedNodes.push(userid);\n      this.selectedUsers.push(userid);\n    }\n    if (state == \"0\") {\n      this.textState = [\"\"];\n      this.posState = \"user_asigned\";\n    }\n    else {\n      this.textState = state;\n      this.posState = \"user_asigned\";\n    }\n    $('#team-name').text(name + \" \" + lastname);\n    $('#team-profile').text(profile);\n  }\n  selectAllChild(childrens, idparent) {\n    this.selectedNodes = [];\n    this.selectedNodes.push(idparent);\n    if (childrens.length > 0) {\n      for (var c in childrens) {\n        this.selectedNodes.push(childrens[c].data);\n      }\n    }\n  }\n  getMyTeam(grop_id) {\n    this._groups.getmyGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n      if (data.data.length > 0) {\n        this.myteam.grop_id = grop_id;\n        this.updateTeam(grop_id);\n        this.getListSprints(grop_id);\n      }\n      // this.getTaskboard(grop_id);\n    });\n  }\n  showModal(mytk) {\n    $(\"#myTask\" + mytk.task_id).click();\n    setTimeout(function () {\n      $('#tabsTaskview a[href=\"#ptsk' + mytk.task_id + '\"]').click();\n    }, 500);\n  }\n\n  showModalTimeLine(mytk) {\n    $(\"#myTask\" + mytk.task_id).click();\n    setTimeout(function () {\n      $('#tabsTaskview a[href=\"#taskTimeline-' + mytk.task_id + '\"]').click();\n    }, 500);\n  }\n\n  sumx(value, type) {\n    var pts = 0;\n    var ptsd = 0;\n    for (let item in value) {\n      switch (type) {\n        case \"36\":\n          pts += Number(value[item][\"task_points\"]);\n          break;\n        case \"38\":\n          pts += Number(value[item][\"task_points\"]);\n          ptsd += Number(value[item][\"task_pointsd\"]);\n          break;\n        case \"42\":\n          pts += Number(value[item][\"task_points\"]);\n          break;\n      }\n\n    }\n    switch (type) {\n      case \"36\":\n        return pts;\n        break;\n      case \"38\":\n        pts = this.round(pts, 2);\n        ptsd = this.round(ptsd, 2);\n        return ptsd + \"/\" + pts;\n        break;\n      case \"42\":\n        return pts;\n        break;\n\n    }\n\n  }\n  getListSprints(group_id) {\n    this.sprintslist = [];\n    // this.mysprint.spri_id = 0;\n    this._sprint.getListReport(group_id).subscribe(res => {\n      this.sprintslist = res.data;\n      if (this.sprintslist.length > 0) {\n        this.mysprint.spri_id = res.data[0].spri_id;\n      } else {\n        this.mysprint.spri_id = 0;\n      }\n      this.getTaskboard(group_id);\n    });\n  }\n\n  updateSprint() {\n    this.getTaskboard(this.myteam.grop_id);\n  }\n  loadSprint() {\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprints = [];\n      this.mysprints.push({\n        label: \"Backlog\",\n        value: 0\n      });\n      for (let c of res.data) {\n        this.mysprints.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n      }\n    });\n  }\nvalidateDaily(){\n  if(this.day.unit_id && this.day.unit_id != 0){\n    return (\n      !this.day.dail_text ||\n      this.day.dail_text.trim() == \"\" ||\n      !this.day.dail_points ||\n      this.day.dail_points <= 0 ||\n      this.day.dail_points == \"undefined\" ||\n      !this.day.dail_date ||\n      this.day.dail_date == \"\" ||\n      this.day.dail_date == \"undefined\" ||\n      parseFloat(this.mcT.task_pointsd) +\n      parseFloat(this.day.dail_points) >\n      parseFloat(this.mcT.task_points)||\n      !this.day.unit_points ||\n      this.day.unit_points <= 0 ||\n      this.day.unit_points == \"undefined\" || (this.compareDate(this.mcT.spri_init) === -1 || this.compareDate(this.mcT.spri_end) === 1)\n    );\n  }else{\n    return (\n      !this.day.dail_text ||\n      this.day.dail_text.trim() == \"\" ||\n      !this.day.dail_points ||\n      this.day.dail_points <= 0 ||\n      this.day.dail_points == \"undefined\" ||\n      !this.day.dail_date ||\n      this.day.dail_date == \"\" ||\n      this.day.dail_date == \"undefined\" ||\n      parseFloat(this.mcT.task_pointsd) +\n      parseFloat(this.day.dail_points) >\n      parseFloat(this.mcT.task_points) ||\n      (this.compareDate(this.mcT.spri_init) === -1 || this.compareDate(this.mcT.spri_end) === 1)\n    );\n  }\n\n}\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/taskboard/taskboard.component.js","import { Component, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { ExternalRequestService } from \"../../services/externalrequest.service\";\nimport { UnitsService } from \"../../services/units.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\nimport template from \"./tasklist.template.html\";\n\nimport { TaskViewComponent } from \"../task/task.component\";\n\n@Component({\n  selector: \"tasks\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  providers: [ConfirmationService],\n  declarations: [TaskViewComponent]\n})\nexport class TaskListComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    taskService: TaskService,\n    groupService: GroupService,\n    userService: UsersService,\n    productService: ProductService,\n    ProjectService: ProjectService,\n    noteService: NoteService,\n    sprintService: SprintService,\n    externalRequestService: ExternalRequestService,\n    confirmationService: ConfirmationService,\n    unitsService: UnitsService\n  ) {\n    this._title = title;\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._sprint = sprintService;\n    this._externalrequest = externalRequestService;\n    this._units = unitsService;\n    this.textState = \"\";\n    this.isrequest = [\"\"];\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.task = { usersShared: [], project: {}, criteriaTask: [], attachments: [] };\n    this.units = [];\n    this.seltasks = [];\n    // this.task.task_description = \"\";\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.mdT = { project: {}, comments: [] };\n    this.idtk = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.namegroup = \"ALL\";\n    this.nameTypeTask = \"allmyteam\";\n    this.typeRol = {};\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.head = [];\n    this.mysprints = [];\n    this.tasks = [];\n    this.userslbl = [];\n    this.products = [];\n    this.states = [];\n    this.myProjects = [];\n    this.tagMenu = 1;\n    this.tagMenuNew = 1;\n    this.tagMenuDupliTk = 1;\n    this.levels = [];\n    this.filter_excel = null;\n    // this.critertiaTask = [];\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem('title')) {\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Tasks ::.\");\n    this.isLoading = false;\n    this.filter = false;\n    this.usrs = [\"\"];\n    this.assig = [\"\"];\n    this.projs = [\"\"];\n    this.desc = \"\";\n    this.task_ids = [\"\"];\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.prods = [\"\"];\n    this.projs = [\"\"];\n    this.mytask = [];\n    this.usersCRM = [];\n    this.usersCRMa = [];\n    this.rjtask = {};\n    this.statusdelete = [];\n    this.getLevels();\n    this._user.getCRMUsers().subscribe(data => {\n      this.usersCRM = data.data;\n      this.usersCRMa = data.data;\n    });\n    this.productsa = [];\n    this.productsb = [];\n    this.getRolUser();\n    this._products.getProducts().subscribe(data => {\n      this.productsa = data.data;\n      this.productsb = data.data;\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this.getunits();\n  }\n\n\n  ngOnInit() { }\n\n  ngAfterViewInit() {\n    this.reload();\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n    });\n    this.states = [];\n    this._tasks.getStates().subscribe(data => {\n      this.states = data.data;\n    });\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n\n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjectsx = [];\n      this.myProjectsxb = [];\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjectsx.push(c);\n          this.myProjectsxb.push(c);\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjectsx.push(c);\n          this.myProjectsxb.push(c);\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjectsx.push(c);\n          this.myProjectsxb.push(c);\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n    });\n\n    this.userslbl = [];\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.usersShareWith = data.data;\n      this.usersShareWith_a = data.data;\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprints = [];\n      this.mysprints.push({\n        label: \"Backlog\",\n        value: 0\n      });\n      for (let c of res.data) {\n        this.mysprints.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n      }\n    });\n    this.leader = 0;\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n      this.leader = data.data[0].head;\n    });\n    // this._units.getUnits().subscribe(res => {\n    //   // this.units = [];\n    //   console.log(res);\n    //   this.units= res.data;\n    //   // for (let c of res.data) {\n    //   //   this.units.push({ label: c.unit_desc, value: c.unit_id });\n    //   // }\n    //   console.log(this.units);\n    // });\n  }\n  getunits() {\n    this._units.getUnits().subscribe(res => {\n      this.units = [];\n      for (let c of res.data) {\n        this.units.push({ label: c.unit_desc, value: c.unit_id });\n      }\n    });\n  }\n\n  getmyProjects() {\n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n    });\n  }\n\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.searchTask();\n    }\n  }\n\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n    this.searchTask();\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.searchTask();\n  }\n\n  goTo(value) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    if (value == 0) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n    } else {\n      this.currentpage = Math.round(this.itemcount / this.limitpage);\n      let mod = this.itemcount % this.limitpage;\n      if (mod > 0 && mod < 5) {\n        this.currentpage += 1;\n      }\n    }\n    this.searchTask();\n  }\n\n  reload() {\n    this.isLoading = true;\n    this.tasks = [];\n    if (this.mytask.assigned && this.mytask.assigned.length > 0) {\n      this.assig = this.mytask.assigned;\n    } else {\n      this.assig = [\"\"];\n    }\n    if (this.mytask.creators && this.mytask.creators.length > 0) {\n      this.usrs = this.mytask.creators;\n    } else {\n      this.usrs = [\"\"];\n    }\n    if (this.mytask.description && this.mytask.description != \"\") {\n      this.desc = this.mytask.description;\n    } else {\n      this.desc = \"\";\n    }\n    if (this.mytask.task_ids && this.mytask.task_ids.length > 0) {\n      this.task_ids = this.mytask.task_ids;\n    } else {\n      this.task_ids = [\"\"];\n    }\n    if (this.mytask.date_ini != null && this.mytask.date_ini != \"\" && this.mytask.date_ini != \"undefined\") {\n      if (this.date_ini != \"\" && this.date_ini != null) {\n        this.date_ini = this.formatDate(this.mytask.date_ini);\n      } else {\n        this.date_ini = this.mytask.date_ini;\n      }\n    } else {\n      this.date_ini = \"\";\n      this.date_end = \"\";\n    }\n    if (this.mytask.date_end != null && this.mytask.date_end != \"\" && this.mytask.date_end != \"undefined\") {\n      if (this.date_end != \"\" && this.date_end != null) {\n        this.date_end = this.formatDate(this.mytask.date_end);\n      } else {\n        this.date_end = this.mytask.date_end;\n      }\n    } else {\n      this.date_end = \"\";\n      this.date_ini = \"\";\n    }\n    if (this.mytask.products && this.mytask.products.length > 0) {\n      this.prods = this.mytask.products;\n    } else {\n      this.prods = [\"\"];\n    }\n    if (this.mytask.projects && this.mytask.projects.length > 0) {\n      this.projs = this.mytask.projects;\n    } else {\n      this.projs = [\"\"];\n    }\n    var filter = {\n      start: this.currentpage * this.limitpage - this.limitpage,\n      end: this.limitpage,\n      all: this.search.trim(),\n      state: this.textState,\n      group: this.textGroup,\n      orderby: this.posOrder,\n      orderdesc: this.orderDesc ? \"desc\" : \"\",\n      assigned: this.assig,\n      creators: this.usrs,\n      desc: this.desc,\n      task_ids: this.task_ids,\n      date_ini: this.date_ini,\n      date_end: this.date_end,\n      products: this.prods,\n      projects: this.projs\n      ,\n      typeTask: this.nameTypeTask\n    };\n\n    this.filter_excel = filter;\n    this._tasks.getTaskList(filter).subscribe(res => {\n      this.isLoading = false;\n      this.tasks = res.data;\n      this.itemcount = res.count;\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) {\n        this.pages.push(i);\n      }\n      if (this.pages.length == 0) {\n        this.pages = [1];\n      }\n    });\n  }\n\n  loadData() {\n    if (this.products.length == 0) {\n      this.products = [];\n      this._products.getProducts().subscribe(data => {\n        for (let c of data.data) {\n          this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      });\n    }\n    if (this.userslbl.length == 0) {\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(data => {\n        this.users = data.data;\n        for (let c of data.data) {\n          this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      });\n    }\n  }\n\n  addComment() {\n    this.notemd.task_id = this.task.task_id;\n    this._notes.putNote(note).subscribe(data => {\n      this.notemd = { note_text: \"\" };\n    });\n  }\n\n  addTask() {\n    // this.getmyProjects();\n    this.loadData();\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.task = { project: {}, attachments: [] };\n    this.task.criteriaTask = [];\n    this.task.task_description2 = \"\";\n    this.task.task_description = \"\";\n    this.task.unit_id= 0;\n    $(\"#mdAddTask\").modal(\"show\");\n    this.activeTabDescription_addTask();\n  }\n\n  showEditModal(idtk) {\n    // this.getmyProjects();\n    this.task = { usersShared: [], project: {}, attachments: [] };\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this._tasks.getTask(idtk.task_id).subscribe(res => {\n      this.task.criteriaTask = res.data.criteriaTask;\n      // if (res.data.task_description) {\n      //     res.data.task_description = this.escapeHtml(res.data.task_description);\n      // }\n      this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n        this.task.attachments = res.data;\n        this._tasks.getTaskFields(idtk.task_id).subscribe(res => {\n          this.task.form = res.data;\n        });\n      });\n      this.task = res.data;\n      this.task.task_description_e = this.task.task_description;\n      this.task.task_description = this.task.task_description_e;\n      $(\"#mdEditTask\").modal(\"show\");\n      this.activeTabDescription_editTask();\n    });\n  }\n\n  openTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to open the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n\n          this._tasks.reopenTask(idtk, 40).subscribe(data => {\n            this.searchTask();\n            this.toastr.success(\"Task opened successfully\");\n            this.reload();\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .reopenTask(this.seltasks[x], 40)\n                .subscribe(data => { });\n              this.reload();\n            }\n            this.seltasks = [];\n            this.searchTask();\n            this.toastr.success(\"Tasks opened successfully\");\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  closeTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    var contadoritclo = \"\";\n    this.contadoritclo = this.seltasks.length\n    if (this.contadoritclo == 0) {\n      this.confirm.confirm({\n        message: \"Do you want to close the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: () => {\n          if (idtk) {\n            this._tasks.setStatusTask(idtk, 42).subscribe(data => {\n              this.searchTask();\n              if (data.data == \"OK\") {\n                this.toastr.success(\"Task closed successfully\");\n\n              } else {\n                this.toastr.warning(data.message, \"There was an error\");\n              }\n              this.searchTask();\n            });\n          } else {\n            if (this.seltasks.length > 0) {\n              for (var x in this.seltasks) {\n                this._tasks\n                  .setStatusTask(this.seltasks[x], 42)\n                  .subscribe(data => {\n                    if (data.data == \"OK\") {\n                      this.toastr.success(\"Tasks closed successfully\");\n                    } else {\n                      this.toastr.warning(data.message, \"There was an error\");\n                    }\n                  });\n              }\n              this.seltasks = [];\n              this.searchTask();\n            }\n          }\n        },\n        reject: () => {\n          //\n        }\n      });\n    } else {\n      this.confirm.confirm({\n        message: \"Do you want to close the   .\" + this.contadoritclo + \".    task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: () => {\n          if (idtk) {\n            this._tasks.setStatusTask(idtk, 42).subscribe(data => {\n              this.searchTask();\n              if (data.data == \"OK\") {\n                this.toastr.success(\"Task closed successfully\");\n              } else {\n                this.toastr.warning(data.message, \"There was an error\");\n              }\n            });\n          } else {\n            if (this.seltasks.length > 0) {\n              for (var x in this.seltasks) {\n                this._tasks\n                  .setStatusTask(this.seltasks[x], 42)\n                  .subscribe(data => {\n                    if (data.data == \"OK\") {\n                      this.toastr.success(\"Tasks closed successfully\");\n                      this.searchTask();\n                    } else {\n                      this.toastr.warning(data.message, \"There was an error\");\n                    }\n                  });\n              }\n              this.seltasks = [];\n            }\n          }\n        },\n        reject: () => {\n          //\n        }\n      });\n\n    }\n  }\n\n\n  verifyStatus(id){\n\n    this.statusdelete = [];\n    for (let i = 0; i < this.tasks.length; i++) {\n      for (let j = 0; j < this.seltasks.length; j++) {\n        if(this.tasks[i].task_id == this.seltasks[j] && this.tasks[i].para_status == '43'){\n          this.statusdelete.push(this.tasks[i].task_id);\n        }\n      }\n    }\n  }\n\n  deleteTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    var contadoritdele = \"\";\n    this.contadoritdele = this.seltasks.length\n    if (this.contadoritdele == 0) {\n      this.confirm.confirm({\n        message: \"Do you want to delete the task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: () => {\n          if (idtk) {\n            this._tasks.setStatusTask(idtk, 43).subscribe(data => {\n              if (data.data == \"OK\") {\n                this.toastr.success(\"Task deleted successfully\");\n                this.searchTask();\n              } else {\n                this.toastr.error(data.message);\n              }\n            });\n          } else {\n            if (this.seltasks.length > 0) {\n              for (var x in this.seltasks) {\n                this._tasks\n                  .setStatusTask(this.seltasks[x], 43)\n                  .subscribe(data => { \n                    if (data.data == \"OK\") {\n                      this.toastr.success(\"Task deleted successfully\");\n                    } else {\n                      this.toastr.error(data.message);\n                    }\n                  });\n              }\n              this.seltasks = [];\n              this.searchTask();\n            }\n          }\n        },\n        reject: () => { }\n      });\n    } else {\n      this.confirm.confirm({\n        message: \"Do you want to delete the   .\" + this.contadoritdele + \".    task(s)?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: () => {\n          if (idtk) {\n            this._tasks.setStatusTask(idtk, 43).subscribe(data => {\n              if (data.data == \"OK\") {\n                this.toastr.success(\"Task deleted successfully\");\n                this.searchTask();\n              } else {\n                this.toastr.error(data.message);\n              }\n            });\n          } else {\n            if (this.seltasks.length > 0) {\n              for (var x in this.seltasks) {\n                this._tasks\n                  .setStatusTask(this.seltasks[x], 43)\n                  .subscribe(data => { \n                    if (data.data == \"OK\") {\n                      this.toastr.success(\"Task deleted successfully\");\n                    } else {\n                      this.toastr.error(data.message);\n                    }\n                  });\n              }\n              this.seltasks = [];\n              this.searchTask();\n            }\n          }\n        },\n        reject: () => { }\n      });\n    }\n  }\n\n  selectAll() {\n    if (this.seltasks.length > 0) {\n      this.seltasks = [];\n    } else {\n      this.seltasks = [];\n      for (var t in this.tasks) {\n        this.seltasks.push(this.tasks[t].task_id);\n      }\n    }\n  }\n\n  setStateList(state) {\n    this.textState = state;\n    this.posState = \"para_status\";\n    this.currentpage = 1;\n    this.searchTask();\n  }\n\n  setGroupList(state, name) {\n    this.namegroup = name;\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.searchTask();\n  }\n\n  typeTask(type) {\n    this.nameTypeTask = type;\n    this.currentpage = 1;\n    this.searchTask();\n  }\n\n  clearTask() {\n    this.task.task_description = \"\";\n  }\n\n  saveTask() {\n    if (this.task.task_description2 != undefined && (this.task.task_description2 != \"\" || this.task.task_description2 != null)) {\n      this.task.task_description = this.task.task_description2;\n    } else if (this.task.task_description_e != undefined && (this.task.task_description_e != \"\" || this.task.task_description_e != null)) {\n      this.task.task_description = this.task.task_description_e;\n    }\n    this.task.task_description = this.task.task_description\n      .split(\"\\t\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\n\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\r\")\n      .join(\"\");\n    this.task.task_delivery = new Date(this.task.task_delivery);\n    this.task.task_delivery =\n      this.task.task_delivery.getFullYear() +\n      \"-\" +\n      (this.task.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.task.task_delivery.getDate();\n\n    //reasignacion de la variable con un array de ids de usuarios\n    let users_share = [];\n\n    for (let user in this.task.usersShared) {\n      users_share.push(this.task.usersShared[user].user_id);\n    }\n\n    // Solve Bug Autocomplete users.   \n    let task = Object.assign({}, this.task);   \n    task.unit_points = this.task.unit_points;\n    task.unit_id = this.task.unit_id;\n    task.usersShared = users_share;\n\n    let criteria_task = [];\n    let fields_empty = false;\n\n    for (let i in this.task.criteriaTask) {\n      if (this.task.criteriaTask[i].tkcr_description && this.task.criteriaTask[i].tkcr_description.trim() != \"\") {\n        criteria_task.push(this.task.criteriaTask[i].tkcr_num + '|*|' + this.task.criteriaTask[i].tkcr_description);\n      } else {\n        fields_empty = true;\n      }\n    }\n\n    if (fields_empty == false) {\n      task.criteriaTask = criteria_task;\n      task.isrequest = \"false\";\n      this.isLoading = true;\n\n      if (this.task.unit_points == 0 || this.task.unit_points == null) {\n        task.unit_points = \"\";\n      }\n      if (this.task.unit_id == 0) {\n        task.unit_id = \"\";\n      } \n\n      this._tasks.putTask(task).subscribe(data => {\n        this.isLoading = false;\n        if (data.data === \"\" || data.data === \"0\") {\n          this.toastr.warning(data.message, \"Bad news! Error saving task\");\n        } else {\n          this.toastr.success(data.message, \"Task saved successfully\");\n        }\n        $(\"#mdAddTask\").modal(\"hide\");\n        $(\"#mdEditTask\").modal(\"hide\");\n        this.searchTask();\n        this.task = { attachments: [] };\n        this.task.task_description = \"\";\n      });\n    } else {\n      this.toastr.warning(\"Empty form fields\");\n\n    }\n  }\n\n  saveDuplicateTask() {\n    let task = {};\n    this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n    this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n    this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n    this.task.task_delivery = new Date(this.task.task_delivery);\n    this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n\n    task.task_subject = this.task.task_subject;\n    task.prod_id = this.task.prod_id;\n    task.user_asigned = this.task.user_asigned;\n    task.proj_id = this.task.proj_id;\n    task.spri_id = this.task.spri_id;\n    task.task_delivery = this.task.task_delivery;\n    task.task_points = this.task.task_points;\n    task.task_description = this.task.task_description;\n    task.attachments = this.task.attachments;\n    task.tklv_id = this.task.tklv_id;\n    task.unit_points = this.task.unit_points;\n    task.unit_id = this.task.unit_id;\n    task.isrequest = false;\n\n    if (this.task.unit_points == 0 || this.task.unit_points == null ){\n      task.unit_points = \"\";\n    } \n    if (this.task.unit_id == 0) {\n      task.unit_id = \"\";\n    } \n\n    //reasignacion de la variable con un array de ids de usuarios\n    let users_share = [];\n\n    for (let user in this.task.usersShared) {\n      users_share.push(this.task.usersShared[user].user_id);\n    }\n\n    task.usersShared = users_share;\n\n    let criteria_task = [];\n    let campos = [];\n    let fields_empty = false;\n\n    for (let i in this.task.criteriaTask) {\n      if (this.task.criteriaTask[i].tkcr_description && this.task.criteriaTask[i].tkcr_description.trim() != \"\") {\n        criteria_task.push(this.task.criteriaTask[i].tkcr_num + '|*|' + this.task.criteriaTask[i].tkcr_description);\n      } else {\n        fields_empty = true;\n      }\n    }\n\n    for (let i in this.task.form) {\n      campos.push(this.task.form[i].form_id + '|*|' + this.task.form[i].form_data);\n    }\n\n    if (fields_empty == false) {\n      task.criteriaTask = criteria_task;\n      task.form = campos;\n      this.isLoading = true;\n      this._tasks.duplicateTask(task).subscribe(res => {\n        this.isLoading = false;\n        if (res.data && res.data != null) {\n          this.toastr.success(res.message);\n          $(\"#mdDuplicateTask\").modal(\"hide\");\n          this.searchTask();\n        } else {\n          this.toastr.warning(res.message, \"Error\");\n        }\n        // this.task = { attachments: [] };\n        // this.task.task_description = \"\";\n      });\n\n    } else {\n      this.toastr.warning(\"Empty form fields\");\n\n    }\n  }\n\n  deleteFieldForm(i) {\n    this.task.criteriaTask.splice(i, 1);\n\n    let j = 1;\n\n    for (let i = 0; i < this.task.criteriaTask.length; i++) {\n      this.task.criteriaTask[i].tkcr_num = j;\n      j++;\n    }\n\n    if (this.task.criteriaTask.length == 0) {\n      this.activeTabDescription_addTask();\n    }\n\n  }\n\n  deleteFieldForm_editTask(i) {\n    this.task.criteriaTask.splice(i, 1);\n\n    let j = 1;\n\n    for (let i = 0; i < this.task.criteriaTask.length; i++) {\n      this.task.criteriaTask[i].tkcr_num = j;\n      j++;\n    }\n\n    if (this.task.criteriaTask.length == 0) {\n      this.activeTabDescription_editTask();\n    }\n\n  }\n\n  addFieldForm() {\n    let j = 1;\n    if (this.task.criteriaTask.length == 4) {\n      this.toastr.warning(\"You have reached the maximum number of criteria\");\n    } else {\n      let valor = this.task.criteriaTask.length + j;\n      this.task.criteriaTask.push({ tkcr_num: valor, tkcr_description: \"\" });\n      j++;\n    }\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n\n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n\n    if (task.attachments.length == 0) {\n      this.activeTabDescription_editTask();\n    }\n\n  }\n\n  deleteAttachment(att) {\n\n    var index = 0;\n    for (let i in this.task.attachments) {\n      if (att.name == this.task.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n    this.task.attachments.splice(index, 1);\n\n    if (this.task.attachments.length == 0) {\n      this.activeTabDescription_addTask();\n    }\n\n  }\n\n  getAttachments(taskid) {\n    this._tasks.getAttachments(taskid).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n\n  updateSprint(task) {\n    this.sprintselected = [];\n    if (task.spri_id != null) {\n      this.sprintselected.push(task.spri_id);\n    } else {\n      this.sprintselected.push(\"0\");\n    }\n    this.taskselected = [];\n    this.taskselected.push(task.task_id);\n    $(\"#mdSprints\").modal(\"show\");\n  }\n\n  doneMdSprint() {\n    this.taskselected = [];\n    this.sprintselected = [];\n  }\n\n  saveChanges() {\n    let sprintselected = this.sprintselected[0];\n    let tasks = this.taskselected;\n    this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(res => {\n      if (res.data === \"OK\") {\n        this.toastr.success(\"updated successfully\");\n      } else {\n        this.toastr.warning(\"There was an error\");\n      }\n    });\n    this.searchTask();\n  }\n\n  showSelected(event, idtk) {\n    this.sprintselected = [];\n    this.sprintselected.push(idtk);\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        // text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  validateTask() {\n    return (\n      !this.task.task_subject ||\n      this.task.task_subject.trim() == \"\" ||\n      !this.task.task_description2 ||\n      this.task.task_description2.trim() == \"\" ||\n      !this.task.prod_id ||\n      this.task.prod_id.trim() == \"\" ||\n      !this.task.user_asigned ||\n      this.task.user_asigned.trim() == \"\" ||\n      !this.task.task_delivery ||\n      this.task.task_delivery == \"\" ||\n      this.task.task_delivery == \"undefined\" ||\n      !this.task.task_points ||\n      this.task.task_points == \"\" ||\n      this.task.task_points == \"undefined\" ||\n      ((!this.task.unit_points && this.task.unit_id) || (this.task.unit_points && !this.task.unit_id) || (this.task.unit_points <= 0 && this.task.unit_id))\n    );\n  }\n\n  validateEditTask() {\n    return (\n      !this.task.task_description_e ||\n      this.task.task_description_e == '' ||\n      this.task.task_description_e == 'undefined') ||\n      (!this.task.prod_id) ||\n      (!this.task.task_points || this.task.task_points <= 0)\n      || ((!this.task.unit_points && this.task.unit_id) || (this.task.unit_points && !this.task.unit_id) || (this.task.unit_points <= 0 && this.task.unit_id));\n  }\n\n  validateDuplicateTask() {\n    return (\n      !this.task.task_subject ||\n      this.task.task_subject.trim() == \"\" ||\n      !this.task.task_description ||\n      this.task.task_description.trim() == \"\" ||\n      !this.task.prod_id ||\n      this.task.prod_id.trim() == \"\" ||\n      !this.task.task_delivery ||\n      this.task.task_delivery == \"\" ||\n      this.task.task_delivery == \"undefined\" ||\n      !this.task.task_points ||\n      this.task.task_points == \"\" ||\n      this.task.task_points == \"undefined\"\n    );\n  }\n\n  setPage(opt) {\n    if (opt == 1) {\n      this.tagMenu = 1;\n    }\n    if (opt == 2) {\n      this.tagMenu = 2;\n    }\n    if (opt == 3) {\n      this.tagMenu = 3;\n    }\n    if (opt == 4) {\n      this.tagMenu = 4;\n    }\n  }\n\n  setPageNewTask(opt) {\n    if (opt == 1) {\n      this.tagMenuNew = 1;\n    }\n    if (opt == 2) {\n      this.tagMenuNew = 2;\n    }\n    if (opt == 3) {\n      this.tagMenuNew = 3;\n    }\n  }\n\n  showModaltk(tkid) {\n    $(\"#myTask\" + tkid).click();\n  }\n\n  filterMultipleShared(event) {\n    let query = event.query;\n    this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n  }\n\n  filterShared(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  showFilter() {\n    this.search = \"\";\n    $(\"#mdSearchTask\").modal(\"show\");\n  }\n\n  formatDate(date) {\n    date = new Date(date);\n    if (date && date !== \"\") {\n      var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n      var monthIndex = (date.getMonth() + 1) < 10 ? \"0\" + (date.getMonth() + 1) : (date.getMonth() + 1);\n      var year = date.getFullYear();\n      return year + '-' + monthIndex + '-' + day;\n    } else {\n      return '';\n    }\n  }\n\n  closeFilter() {\n    this.mytask = [];\n    this.mytaskcopy = [];\n    this.search = \"\";\n    this.filter = false;\n    this.mytask.date_ini = \"\";\n    this.mytask.date_end = \"\";\n    this.usrs = [\"\"];\n    this.desc = \"\";\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.assig = [\"\"];\n    this.projs = [\"\"];\n    this.task_ids = [\"\"];\n    this.prods = [\"\"];\n    this.projs = [\"\"];\n    this.reload();\n  }\n\n  filterTask() {\n    this.filter = true;\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.searchTask();\n  }\n\n  searchTask() {\n    this.mytaskcopy = jQuery.extend(true, {}, this.mytask);\n    let copy = [];\n\n    for (let x in this.mytask.assigned) {\n      copy.push(this.mytask.assigned[x].user_id);\n    }\n    this.mytask.assigned = copy;\n    let copyc = [];\n    for (let x in this.mytask.creators) {\n      copyc.push(this.mytask.creators[x].user_id);\n    }\n    this.mytask.creators = copyc;\n    let copyp = [];\n    for (let x in this.mytask.projects) {\n      copyp.push(this.mytask.projects[x].proj_id);\n    }\n    this.mytask.projects = copyp;\n    let copypd = [];\n    for (let x in this.mytask.products) {\n      copypd.push(this.mytask.products[x].prod_id);\n    }\n    this.mytask.products = copypd;\n\n\n    if (this.mytask.date_ini != null && this.mytask.date_ini != \"\" && this.mytask.date_end != null && this.mytask.date_end != \"\") {\n\n      this.mytask.date_ini = this.formatDate(this.mytask.date_ini);\n      this.mytask.date_end = this.formatDate(this.mytask.date_end);\n    } else {\n      this.mytask.date_ini = \"\";\n      this.mytask.date_end = \"\";\n    }\n    this.reload();\n    this.mytask = this.mytaskcopy;\n  }\n\n  filterMultiple(event, num) {\n    if (num == 1) {\n      let query = event.query;\n      this.productsa = this.filterP(query, this.productsb);\n    } else if (num == 2) {\n      let query = event.query;\n      this.usersCRM = this.filterU(query, this.usersCRMa);\n    } else if (num == 3) {\n      let query = event.query;\n      this.myProjectsx = this.filterPj(query, this.myProjectsxb);\n    }\n  }\n\n  filterU(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  filterP(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.prod_name.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  filterPj(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.proj_subject.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  getFormTaskCriteria(task_id) {\n    this.task.criteriaTask = [];\n    this._tasks.getFormTaskCriteria(task_id).subscribe(res => {\n      this.task.criteriaTask = res.data.data;\n    });\n  }\n\n  getInfoTaskCriteria(task_id) {\n    this.task.criteriaTask = [];\n    this._tasks.getInfoTaskCriteria(task_id).subscribe(res => {\n      this.task.criteriaTask = res.data.data;\n    });\n  }\n\n  getRolUser() {\n    this.typeRol = {};\n    this._user.getRolUser().subscribe(res => {\n      this.typeRol = res.data.role_id;\n    });\n  }\n\n  showDuplicateTaskModal(idtk) {\n    this.task = { usersShared: [], project: {}, attachments: [] };\n    this._tasks.getTask(idtk).subscribe(res => {\n      this.task.criteriaTask = res.data.criteriaTask;\n      this._tasks.getTaskFields(idtk).subscribe(res => {\n        this.task.form = res.data;\n      });\n      this.task = res.data;\n    });\n    $(\"#mdDuplicateTask\").modal(\"show\");\n    this.activeTabDescription_duplicateTask();\n  }\n\n  setPageDupliTk(opt) {\n    if (opt == 1) {\n      this.tagMenuDupliTk = 1;\n    }\n    if (opt == 2) {\n      this.tagMenuDupliTk = 2;\n    }\n    if (opt == 3) {\n      this.tagMenuDupliTk = 3;\n    }\n    if (opt == 4) {\n      this.tagMenuDupliTk = 4;\n    }\n  }\n\n  activeTabDescription_addTask() {\n    this.tagMenuNew = 1;\n    $('#li_criteria_task').removeClass('active');\n    $('#li_attachments_task').removeClass('active');\n    $('#li_description_task').addClass('active');\n  }\n\n  activeTabDescription_editTask() {\n    this.tagMenu = 1;\n    $('#li_asocciateForm_editTask').removeClass('active');\n    $('#li_attachments_editTask').removeClass('active');\n    $('#li_criteria_editTask').removeClass('active');\n    $('#li_description_editTask').addClass('active');\n  }\n\n  activeTabDescription_duplicateTask() {\n    this.tagMenuDupliTk = 1;\n    $('#a_asocciateFormTask_duplicateTask').removeClass('active');\n    $('#li_attachments_duplicateTask').removeClass('active');\n    $('#a_criteriaTask_duplicateTask').removeClass('active');\n    $('#li_description_duplicateTask').addClass('active');\n  }\n\n  deleteFieldForm_duplicateTask(i) {\n    this.task.criteriaTask.splice(i, 1);\n\n    let j = 1;\n\n    for (let i = 0; i < this.task.criteriaTask.length; i++) {\n      this.task.criteriaTask[i].tkcr_num = j;\n      j++;\n    }\n\n    if (this.task.criteriaTask.length == 0) {\n      this.activeTabDescription_duplicateTask();\n    }\n  }\n\n  deleteAttachment_duplicateTask(att) {\n\n    var index = 0;\n    for (let i in this.task.attachments) {\n      if (att.name == this.task.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n    this.task.attachments.splice(index, 1);\n\n    if (this.task.attachments.length == 0) {\n      this.activeTabDescription_duplicateTask();\n    }\n\n  }\n\n  getLevels() {\n    this._tasks.getLevels().subscribe(res => {\n      for (let level of res.data) {\n        this.levels.push({ label: level.tklv_description, value: level.tklv_id });\n      }\n    });\n  }\n\n  showReject(task) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Reject this Task?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (task) {\n          this.rjtask.task_id = task.task_id;\n          this.rjtask.task_description = \"\";\n          $(\"#mdReject\").modal(\"show\");\n        }\n      },\n      reject: () => {\n      }\n    });\n  }\n\n  rejectTask() {\n    this._tasks.rejectTask(this.rjtask.task_id, this.rjtask.task_description).subscribe(data => {\n      if (data.data != \"OK\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this._tasks.deletesprintbytask(this.rjtask.task_id).subscribe(res => { });\n        this.toastr.success(data.message, \"Task rejected\");\n      }\n      this.reload();\n    });\n  }\n\n  showBacklog(task) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Backlog this Task?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        this._tasks.backlogTask(task.task_id).subscribe(data => {\n          if (data.data == \"OK\") {\n            this.toastr.success(\"Task move to Backlog successfully\");\n          } else {\n            this.toastr.warning(data.message, \"Warning!\");\n          }\n          this.reload();\n        });\n      },\n      reject: () => { }\n    });\n  }\n\n  exportExcel(){\n    this._tasks.getExcel(this.filter_excel).subscribe(res => {\n      var route = res.data;\n      if(res.message == 'OK' ){\n        this.toastr.success(\"report generated\");\n          //Usaremos un link para iniciar la descarga \n          var save = document.createElement('a');\n          save.href = route;\n          save.target = '_blank';\n          //Truco: así le damos el nombre al archivo\n          save.download = 'report_tasks';\n          var clicEvent = new MouseEvent('click', {\n            'view': window,\n            'bubbles': true,\n            'cancelable': true\n          });\n          //Simulamos un clic del usuario\n          save.dispatchEvent(clicEvent);\n           //Y liberamos recursos...\n          (window.URL || window.webkitURL).revokeObjectURL(save.href);\n\n      }else{\n        this.toastr.error(\"The document could not be generated\");\n      }\n    });\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/task/tasklist.component.js","import { Component, ViewEncapsulation } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ConstantService } from \"../../services/constant.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\nimport template from \"./projectlist.template.html\";\nimport { ProjectViewComponent } from \"../project/project.component\";\n\n@Component({\n  selector: \"projectlist\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  declarations: [ProjectViewComponent],\n  encapsulation: ViewEncapsulation.None\n})\nexport class ProjectListComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    toastr: ToastrService,\n    sanitizer: DomSanitizer,\n    projectService: ProjectService,\n    groupService: GroupService,\n    usersService: UsersService,\n    productService: ProductService,\n    confirmationService: ConfirmationService,\n    constantService: ConstantService\n  ) {\n    this._title = title;\n    this._route = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.confirm = confirmationService;\n    this._projects = projectService;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._user = usersService;\n    this._products = productService;\n    this._constants = constantService;\n    this.textState = \"\";\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.tagMenu = 1;\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem(\"title\")) {\n      this.stTitle = localStorage.getItem(\"title\");\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Projects ::.\");\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.project = { users: [], attachments: [] , userssh:[] };\n    this.selprojects = [];\n    this.categories = [];\n    this.states = [];\n    this.namegroup = \"ALL\";\n    this._projects.getStates().subscribe(data => {\n      this.states = data.data;\n    });\n    this._projects.getCategories().subscribe(data => {\n      for (let c of data.data) {\n        this.categories.push({ label: c.para_name, value: c.para_id });\n      }\n    });\n    this.products = [];\n    this._products.getProducts().subscribe(data => {\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this.applicantlbl = [];\n    this._user.getEmailList().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.applicantlbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this.usersCRM = [];\n    this.usersCRMa = [];\n\n    this.userslbl = [];\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n\n    this._user.getCRMUsers().subscribe(data => {\n      this.usersCRM = data.data;\n      this.usersCRMa = data.data;\n\n      this.usersShareWith= data.data;\n      this.usersShareWith_a= data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n\n    });\n    this.groups = [];\n    this.lblgroups = [];\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n    this.projects = [];\n    this._constants.getConstants().subscribe(data => {});\n    this.cont = 0;\n    this.isLoading = false;\n    this.myproj = [];\n    this.filter = false;\n    this.usrs = [\"\"];\n    this.appl = [\"\"];\n    this.projs = [\"\"];\n    this.desc = \"\";\n    this.proj_id = [\"\"];\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.prods = [\"\"];\n    this.productsa = [];\n    this.productsb = [];\n    this.statusdelete = [];\n    this._products.getProducts().subscribe(data => {\n      this.productsa = data.data;\n      this.productsb = data.data;\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n  }\n  ngAfterViewInit() {\n    this.reload();\n  }\n\n  reload() {\n    this.isLoading = true;\n    if(this.myproj.applicants && this.myproj.applicants.length > 0){\n      this.appl = this.myproj.applicants;\n    }else{\n      this.appl = [\"\"];\n    }\n    if(this.myproj.creators && this.myproj.creators.length > 0){\n      this.usrs = this.myproj.creators;\n    }else{\n      this.usrs = [\"\"];\n    }\n    if(this.myproj.projects && this.myproj.projects.length > 0){\n      this.projs = this.myproj.projects;\n    }else{\n      this.projs = [\"\"];\n    }\n    if (this.myproj.products && this.myproj.products.length > 0) {\n      this.prods = this.myproj.products;\n    } else {\n      this.prods = [\"\"];\n    }\n    if(this.myproj.description && this.myproj.description != \"\"){\n      this.desc = this.myproj.description;\n    }else{\n      this.desc = \"\";\n    }\n    if(this.myproj.proj_ids && this.myproj.proj_ids.length > 0){\n      this.proj_id = this.myproj.proj_ids;\n    }else{\n      this.proj_id = [\"\"];\n    }\n    if(this.myproj.date_ini != null && this.myproj.date_ini != \"\" && this.myproj.date_ini != \"undefined\"){\n      if(this.date_ini != \"\" && this.date_ini != null){\n        this.date_ini = this.formatDate(this.myproj.date_ini);\n      }else{\n        this.date_ini = this.myproj.date_ini;\n      } \n    }else{\n      this.date_ini = \"\";\n      this.date_end = \"\";\n    }\n    if(this.myproj.date_end != null && this.myproj.date_end != \"\" && this.myproj.date_end != \"undefined\"){\n      if(this.date_end != \"\" && this.date_end != null){\n        this.date_end = this.formatDate(this.myproj.date_end);\n      }else{\n        this.date_end = this.myproj.date_end;\n      }\n    }else{\n      this.date_end = \"\";\n      this.date_ini = \"\";\n    }\n    this.projects = [];\n    var filter = {\n      start: this.currentpage * this.limitpage - this.limitpage,\n      end: this.limitpage,\n      all: this.search.trim(),\n      state: this.textState,\n      group: this.textGroup,\n      orderby: this.posOrder,\n      orderdesc: this.orderDesc ? \"desc\" : \"\",\n      applicants: this.appl,\n      creators: this.usrs,\n      projects: this.projs,\n      desc: this.desc,\n      proj_ids: this.proj_id,\n      date_ini: this.date_ini,\n      date_end: this.date_end,\n      products: this.prods\n    };\n    this._projects.getprojectList(filter).subscribe(res => {\n      this.isLoading = false;\n      this.projects = res.data.data;\n      this.itemcount = res.data.count;\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) {\n        this.pages.push(i);\n      }\n      if (this.pages.length == 0) {\n        this.pages = [1];\n      }\n    });\n    this.cont = 0;\n  }\n\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.isLoading = true;\n      this.projects = [];\n      this.currentpage = 1;\n      this.searchProject();\n    }\n  }\n\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n    this.searchProject();\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.searchProject();\n  }\n\n  goTo(value) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    if (value == 0) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n    } else {\n      this.currentpage = Math.round(this.itemcount / this.limitpage);\n      let mod = this.itemcount % this.limitpage;\n      if (mod > 0 && mod < 5) {\n        this.currentpage += 1;\n      }\n    }\n    this.searchProject();\n  }\n\n  addComment() {\n    this.notemd.proj_id = this.project.proj_id;\n    this._notes.putNote(note).subscribe(data => {\n      this.notemd = { note_text: \"\" };\n    });\n  }\n\n  deleteAttachmentProject(proj, att) {\n    for (var i in proj.attachments) {\n      if (proj.attachments[i] === att) {\n        this._projects\n          .deleteAttachmentProject(proj.proj_id, proj.attachments[i].pjat_id)\n          .subscribe(res => {\n            if (res.data != null) {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(proj.proj_id);\n            } else {\n              this.toastr.warning(\"\", res.message);\n            }\n          });\n        proj.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  deleteAttachment(att) {\n\n    var index = 0;\n    for (let i in this.project.attachments) {\n      if (att.name == this.project.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n    this.project.attachments.splice(index, 1);\n\n  }\n\n  getAttachments(projid) {\n    this._projects.getAttachments(projid).subscribe(res => {\n      this.project.attachments = res.data;\n      for (var i = 0; i < this.project.attachments.length; i++) {\n        if (i == 0) {\n          this.project.total_attachments = 1;\n        } else {\n          this.project.total_attachments++;\n        }\n      }\n    });\n  }\n\n  addproject() {\n    this.project = { users: [], attachments: [] , userssh:[]};\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    $(\"#mdproject\").modal(\"show\");\n  }\n\n  showModalProject(idproj){\n    $(\"#myProject\"+ idproj).click();\n  }\n\n  showEditModal(idproj) {\n    this.project = { users: [], attachments: [] , userssh:[]};\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this._projects.getproject(idproj.proj_id).subscribe(res => {\n      res.data.proj_description = this.escapeHtml(res.data.proj_description);\n      this.project = res.data;\n      this._projects.getAttachments(idproj.proj_id).subscribe(res => {\n        this.project.attachments = res.data;\n      });\n      $(\"#mdproject\").modal(\"show\");\n    });\n  }\n\n  openproject(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to open the project(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._projects.setStatusproject(idtk, 2).subscribe(data => {\n            if (data.data == \"\") {\n              this.toastr.error(data.message);\n            } else {\n              this.toastr.success(\"project opened successfully\");\n            }\n            this.searchProject();\n          });\n        } else {\n          if (this.selprojects.length > 0) {\n            for (let x in this.selprojects) {\n              this._projects\n                .setStatusproject(this.selprojects[x], 2)\n                .subscribe(data => {});\n            }\n            this.selprojects = [];\n            this.searchProject();\n            this.toastr.success(\"projects opened successfully\");\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  closeproject(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to close the project(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._projects.setStatusproject(idtk, 3).subscribe(data => {\n            if (data.data == \"\") {\n              this.toastr.error(data.message);\n            } else {\n              this.toastr.success(\"project closed successfully\");\n            }\n            this.searchProject();\n          });\n        } else {\n          if (this.selprojects.length > 0) {\n            for (let x in this.selprojects) {\n              this._projects\n                .setStatusproject(this.selprojects[x], 3)\n                .subscribe(data => {});\n            }\n            this.selprojects = [];\n            this.toastr.success(\"projects closed successfully\");\n            this.searchProject();\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  verifyStatus(){\n\n    this.statusdelete = [];\n    for (let i = 0; i < this.projects.length; i++) {\n      for (let j = 0; j < this.selprojects.length; j++) {\n        if(this.projects[i].proj_id == this.selprojects[j] && this.projects[i].para_status == '5'){\n          this.statusdelete.push(this.projects[i].proj_id);\n        }\n      }\n    }\n  }\n\n  deleteproject(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to delete the project(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._projects.setStatusproject(idtk, 5).subscribe(data => {\n            if (data.data == \"\") {\n              this.toastr.error(data.message);\n            } else {\n              this.toastr.success(\"project deleted successfully\");\n            }\n            this.searchProject();\n          });\n        } else {\n          if (this.selprojects.length > 0) {\n            for (let x in this.selprojects) {\n              this._projects\n                .setStatusproject(this.selprojects[x], 5)\n                .subscribe(data => {\n                  if (data.data == \"\") {\n                    this.toastr.error(data.message);\n                  } else {\n                    this.toastr.success(\"project deleted successfully\");\n                  }\n                });\n            }\n            this.selprojects = [];\n            this.searchProject();\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  validateProj() {\n    return (\n      !this.project.proj_subject ||\n      this.project.proj_subject.trim() == \"\" ||\n      !this.project.proj_description ||\n      this.project.proj_description.trim() == \"\" ||\n      !this.project.prod_id ||\n      this.project.prod_id.trim() == \"\" ||\n      !this.project.group_assigned ||\n      this.project.group_assigned.trim() == \"\" ||\n      !this.project.user_applicant ||\n      this.project.user_applicant.trim() == \"\" ||\n      !this.project.user_creator ||\n      this.project.user_creator.trim() == \"\" ||\n      !this.project.proj_end ||\n      this.project.proj_end == \"\" ||\n      this.project.proj_end == \"undefined\" ||\n      !this.project.proj_propoints ||\n      this.project.proj_propoints == \"\" ||\n      this.project.proj_propoints == \"undefined\"\n    );\n  }\n\n  saveproject() {\n\n    this.project.proj_end = new Date(this.project.proj_end);\n    this.project.proj_end =\n      this.project.proj_end.getFullYear() +\n      \"-\" +\n      (this.project.proj_end.getMonth() + 1) +\n      \"-\" +\n      this.project.proj_end.getDate();\n\n    let users_share = [];\n\n    for (let user in this.project.userssh) {\n      users_share.push(this.project.userssh[user].user_id);\n    }\n\n    let project = Object.assign({}, this.project);\n    project.users = users_share;\n    this.isLoading = true;\n\n    this._projects.putproject(project).subscribe(data => {\n      this.isLoading = false;\n      if (data.data === \"\" || data.data === \"0\" || data.data == null) {\n        this.toastr.warning(data.message, \"Attention!\");\n      } else {\n        this.toastr.success(data.message, \"project saved successfully\");\n        $(\"#mdproject\").modal(\"hide\");\n        this.reload();\n        this.project = { attachments: [] };\n      }\n    });\n  }\n\n  selectAll() {\n    if (this.selprojects.length > 0) {\n      this.selprojects = [];\n    } else {\n      this.selprojects = [];\n      for (let t in this.projects) {\n        this.selprojects.push(this.projects[t].proj_id);\n      }\n    }\n  }\n\n  setStateList(state) {\n    this.textState = state;\n    this.posState = \"para_status\";\n    this.currentpage = 1;\n    this.searchProject();\n  }\n\n  setGroupList(state, name) {\n    this.namegroup = name;\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.searchProject();\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.project.attachments.push(files[0]);\n  }\n\n  decode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n    var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n    if (base64test.exec(input)) {\n      return false;\n    }\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n    do {\n      enc1 = keyStr.indexOf(input.charAt(i++));\n      enc2 = keyStr.indexOf(input.charAt(i++));\n      enc3 = keyStr.indexOf(input.charAt(i++));\n      enc4 = keyStr.indexOf(input.charAt(i++));\n\n      chr1 = (enc1 << 2) | (enc2 >> 4);\n      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n      chr3 = ((enc3 & 3) << 6) | enc4;\n\n      output = output + String.fromCharCode(chr1);\n\n      if (enc3 != 64) {\n        output = output + String.fromCharCode(chr2);\n      }\n      if (enc4 != 64) {\n        output = output + String.fromCharCode(chr3);\n      }\n\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n\n    return unescape(output);\n  }\n\n  encode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    input = escape(input);\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    do {\n      chr1 = input.charCodeAt(i++);\n      chr2 = input.charCodeAt(i++);\n      chr3 = input.charCodeAt(i++);\n      enc1 = chr1 >> 2;\n      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n      enc4 = chr3 & 63;\n      if (isNaN(chr2)) {\n        enc3 = enc4 = 64;\n      } else if (isNaN(chr3)) {\n        enc4 = 64;\n      }\n      output =\n        output +\n        keyStr.charAt(enc1) +\n        keyStr.charAt(enc2) +\n        keyStr.charAt(enc3) +\n        keyStr.charAt(enc4);\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n    return output;\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    return text;\n  }\n\n  setPage(opt) {\n    if (opt == 1) {\n      this.tagMenu = 1;\n    }\n    if (opt == 2) {\n      this.tagMenu = 2;\n    }\n    if (opt == 3) {\n      this.tagMenu = 3;\n    }\n  }\n\n  showFilter() {\n    //this.mydaily = [];\n    this.search = \"\";\n    $(\"#mdSearchProject\").modal(\"show\");\n  }\n\n  filterProject(){\n    this.filter = true;\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.searchProject();\n  }\n\n  searchProject(){\n    this.myprojcopy = jQuery.extend(true, {}, this.myproj);\n    let copy = [];\n    for (let x in this.myproj.applicants) {\n      copy.push(this.myproj.applicants[x].user_id);\n    }\n    this.myproj.applicants = copy;\n    let copya = [];\n    for (let x in this.myproj.creators) {\n      copya.push(this.myproj.creators[x].user_id);\n    }\n    this.myproj.creators = copya;\n    let copyp = [];\n    for (let x in this.myproj.projects) {\n      copyp.push(this.myproj.projects[x].proj_id);\n    }\n    this.myproj.projects = copyp;\n    let copypd = [];\n    for (let x in this.myproj.products) {\n      copypd.push(this.myproj.products[x].prod_id);\n    }\n    this.myproj.products = copypd;\n    if(this.myproj.date_ini != null && this.myproj.date_ini != \"\" && this.myproj.date_end != null && this.myproj.date_end != \"\"){\n      this.myproj.date_ini = this.formatDate(this.myproj.date_ini);\n      this.myproj.date_end = this.formatDate(this.myproj.date_end);\n    }else{\n      this.myproj.date_ini = \"\";\n      this.myproj.date_end = \"\";\n    }\n    this.reload();\n    this.myproj = this.myprojcopy;\n  }\n\n  formatDate(date) {\n    date = new Date(date);\n    if(date && date !== \"\"){\n      var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n      var monthIndex = (date.getMonth() + 1) < 10 ? \"0\" + (date.getMonth() + 1) : (date.getMonth() + 1);\n      var year = date.getFullYear();\n      return year + '-' + monthIndex+ '-' + day;\n    }else{\n      return '';\n    }\n  }\n\n  closeFilter(){\n    this.myproj = [];\n    this.myprojcopy =[];\n    this.search = \"\";\n    this.filter = false;\n    this.myproj.date_ini = \"\";\n    this.myproj.date_end = \"\";\n    this.usrs = [\"\"];\n    this.desc = \"\";\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.appl = [\"\"];\n    this.projs = [\"\"];\n    this.proj_id = [\"\"];\n    this.prods = [\"\"];\n    this.reload();\n  }\n\n  filterMultiple(event, num) {\n    if(num == 1){\n      let query = event.query;\n      this.productsa = this.filterP(query, this.productsb);\n    }else if(num == 2){\n      let query = event.query;\n      this.usersCRM = this.filterU(query, this.usersCRMa);\n    }else if(num == 3){\n      let query = event.query;\n      this.myProjects = this.filterPj(query, this.myProjectsb);\n    }\n  }\n\n  filterU(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  filterP(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.prod_name.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  filterPj(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.proj_subject.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  filterMultipleShared(event) {\n    let query = event.query;\n    this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n  }\n\n  filterShared(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n          country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/project/projectlist.component.js","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ToastrService } from 'ngx-toastr';\nimport { ConfirmationService } from 'primeng/primeng';\nimport { ViewChild, ElementRef, AfterViewInit } from '@angular/core';\n\nimport { ProjectService } from '../../services/project.service';\nimport { ProductService } from '../../services/product.service';\nimport { GroupService } from '../../services/group.service';\nimport { DirectoryService } from '../../services/directory.service';\nimport { MailService } from '../../services/mail.service';\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from '../../pipes';\n\nimport template from './mailbox.template.html';\nimport { isArray } from 'util';\n\n@Component({\n    selector: 'login',\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\n\n\n\nexport class MailboxComponent {\n\n    @ViewChild('iframe') frame = new ElementRef();\n\n    constructor(route: Router, toastr: ToastrService, mailService: MailService, sanitizer: DomSanitizer, ProjectService: ProjectService, groupService: GroupService, directoryService: DirectoryService, productService: ProductService, confirmationService: ConfirmationService) {\n        this._route = route;\n        this._inbox = mailService;\n        this.toastr = toastr;\n        this.toastr.options = {\n          \"preventDuplicates\": true,\n          \"preventOpenDuplicates\": true\n          };\n        this.confirm = confirmationService;\n        this._projects = ProjectService;\n        this._groups = groupService;\n        this._directory = directoryService;\n        this._products = productService;\n        this.currentpage = 1;\n        this.limitpage = 0;\n        this.itemcount = 0;\n        this.selmails = [];\n        this._sanitizer = sanitizer;\n        this.emails = [];\n        this.project = { users: [], attachments: [] };\n        this.mymail = { message: \"\", attachments: [] };\n        this.mail = { message: \"\", attachments: [] };\n        this.posFlag = \"mbfl_id\";\n        this.posFolder = \"mbfo_id\";\n        this.selectedNodes = [];\n        this.selectedNodesFl = [];\n        this.selectedFolders = [];\n        this.foldersTree = [];\n        this.selectedFlag = [];\n        this.flagFilter = [];\n        this.lastemail = 0;\n        this.emailsnew = [];\n        this.currmailbox = \"ALL\";\n        this.topmail = 0;\n        this.botmail = 0;\n        this.curfilter = \"\";\n        // this.getMail();\n        this.listmails = [];\n        this.listmailsa = [];\n        this.mailaccounts = [];\n        this.activemenu = 0;\n        this.maildetails = [];\n        this.accountDetails = {};\n        this.newaccount = {};\n        this.curfolder = \"INBOX\";\n        this.selection = {};\n        this.sort = \"\";\n        this.sortoptions = [{label: \"Date\",value: \"SORTARRIVAL\"},{label: \"From\", value: \"SORTFROM\"},{label: \"To\", value: \"SORTTO\"},{label: \"Size\",value: \"SORTSIZE\"},{label: \"Subject\",value: \"SORTSUBJECT\"}];\n        this.selectedOption = {label: \"Date\", value:\"SORTARRIVAL\"};\n        this.selectedOrder = {};\n        this.fromOptions = [];\n        this.tagMenuNew = 1;\n\n        switch (this.selectedOption.value) {\n            case \"SORTARRIVAL\":\n                this.sortorder = [{label: \"Oldest Message on top\", value:0},{label: \"Newest Message on top\", value: 1}];\n                break;\n            case \"SORTFROM\":\n            case \"SORTTO\":\n            case \"SORTSUBJECT\":\n                this.sortorder = [{label: \"A to Z\", value:0},{label: \"Z to A\", value: 1}];\n                break;\n            case \"SORTSIZE\":\n                this.sortorder = [{label: \"Smaller Message on top\", value: 0}, {label: \"Largest Message on top\", value:1}];\n                break;\n            default:\n                break;\n        }\n        this.newMessage = {to:[],cc:[],message:\"\",attachments:[]}\n        }\n\n    ngOnInit() {\n        this.categories = [];\n        this._projects.getCategories().subscribe(data => {\n            for (let c of data.data) {\n                this.categories.push({ label: c.cati_user_name, value: c.id_caproject });\n            }\n        });\n        this.products = [];\n        this._products.getProducts().subscribe(data => {\n            for (let c of data.data) {\n                this.products.push({ label: c.prod_name, value: c.prod_id });\n            }\n        });\n        this.applicantlbl = [];\n        this.usersCRM = [];\n        this.usersCRMa = [];\n        this.groups = [];\n        this.lblgroups = [];\n        this._groups.getGroups().subscribe(data => {\n            this.groups = data.data;\n            for (let c of data.data) {\n                this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n            }\n        });\n        this.getMyAccounts();\n        this.NewMailbox(this.currmailbox,this.lastemail,this.curfilter,this.curfolder);\n    }\n\n    addproject() {\n        this.project.proj_subject = this.mymail.mabo_subject;\n        this.project.proj_description = this.escapeHtml(this.mymail.mabo_htmlmessage);\n        this.project.attachments = [];\n        for (let i = 0; i < this.mymail.attachments.length; i++) {\n            this.mymail.attachments[i].tkat_type = this.mymail.attachments[i].type;\n            this.project.attachments.push(this.mymail.attachments[i]);\n        }\n        $('#mdAddproject').modal('show');\n    }\n\n    filterMultiple(event) {\n        let query = event.query;\n        this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n\n    filterMultipleEmails(event) {\n        let query = event.query;\n        this.listmails = this.filter(query, this.listmailsa);\n    }\n\n    filter(query, countries) {\n        let filtered = [];\n        for (let i = 0; i < countries.length; i++) {\n            let country = countries[i];\n            if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n                filtered.push(country);\n            }\n        }\n        return filtered;\n    }\n\n    saveproject() {\n        let usarr = [];\n        for (let x in this.project.users) {\n            usarr.push(this.project.users[x].user_id);\n        }\n        this.project.users = usarr;\n        this.project.id_mail_box = this.mymail.id;\n        this._projects.putproject(this.project).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message, \"Good news!\");\n            } else {\n                this.toastr.success(data.message, \"project created successfully\");\n            }\n            this.readMail(this.mymail.id);\n        });\n        this.project = { users: [], attachments: [] };\n    }\n\n    setCurPage(value) {\n        if(value == 0){\n            this.NewMailbox(this.currmailbox,this.lastemail-40,this.curfilter,this.curfolder);\n        }else if(value == 1) {\n            this.NewMailbox(this.currmailbox,this.lastemail,this.curfilter,this.curfolder);\n        }\n    }\n\n    calculateTime(dateString) {\n        if (dateString) {\n            var months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\n            var dt = dateString.split(/\\-|\\s/);\n            var ndt = new Date(dt[0], dt[1] - 1, dt[2]);\n            var today = new Date();\n            if (today.getFullYear() == ndt.getFullYear()) {\n                if (today.getMonth() == ndt.getMonth()) {\n                    if (today.getDate() == ndt.getDate()) {\n                        return dt[3];\n                    }\n                }\n                return dt[2] + \" \" + months[ndt.getMonth()];\n            } else {\n                return dt[2] + \" \" + months[ndt.getMonth()] + \" \" + ndt.getFullYear();\n            }\n        } else {\n            return dateString;\n        }\n    }\n\n    decode64(input) {\n        var keyStr = \"ABCDEFGHIJKLMNOP\" +\n            \"QRSTUVWXYZabcdef\" +\n            \"ghijklmnopqrstuv\" +\n            \"wxyz0123456789+/\" +\n            \"=\";\n        var output = \"\";\n        var chr1, chr2, chr3 = \"\";\n        var enc1, enc2, enc3, enc4 = \"\";\n        var i = 0;\n\n        // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (base64test.exec(input)) {\n            return false;\n        }\n        input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n        do {\n            enc1 = keyStr.indexOf(input.charAt(i++));\n            enc2 = keyStr.indexOf(input.charAt(i++));\n            enc3 = keyStr.indexOf(input.charAt(i++));\n            enc4 = keyStr.indexOf(input.charAt(i++));\n\n            chr1 = (enc1 << 2) | (enc2 >> 4);\n            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n            chr3 = ((enc3 & 3) << 6) | enc4;\n\n            output = output + String.fromCharCode(chr1);\n\n            if (enc3 != 64) {\n                output = output + String.fromCharCode(chr2);\n            }\n            if (enc4 != 64) {\n                output = output + String.fromCharCode(chr3);\n            }\n\n            chr1 = chr2 = chr3 = \"\";\n            enc1 = enc2 = enc3 = enc4 = \"\";\n\n        } while (i < input.length);\n\n        return unescape(output);\n    }\n\n    encode64(input) {\n        var keyStr = \"ABCDEFGHIJKLMNOP\" +\n            \"QRSTUVWXYZabcdef\" +\n            \"ghijklmnopqrstuv\" +\n            \"wxyz0123456789+/\" +\n            \"=\";\n        input = escape(input);\n        var output = \"\";\n        var chr1, chr2, chr3 = \"\";\n        var enc1, enc2, enc3, enc4 = \"\";\n        var i = 0;\n\n        do {\n            chr1 = input.charCodeAt(i++);\n            chr2 = input.charCodeAt(i++);\n            chr3 = input.charCodeAt(i++);\n            enc1 = chr1 >> 2;\n            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n            enc4 = chr3 & 63;\n            if (isNaN(chr2)) {\n                enc3 = enc4 = 64;\n            } else if (isNaN(chr3)) {\n                enc4 = 64;\n            }\n            output = output +\n                keyStr.charAt(enc1) +\n                keyStr.charAt(enc2) +\n                keyStr.charAt(enc3) +\n                keyStr.charAt(enc4);\n            chr1 = chr2 = chr3 = \"\";\n            enc1 = enc2 = enc3 = enc4 = \"\";\n        } while (i < input.length);\n        return output;\n    }\n\n    sanitizeHtml(text) {\n        if (text) {\n            var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n            if (!base64test.exec(text)) {\n                text = this.decode64(text);\n            }\n            text = this.escapeHtml(text);\n            text = this._sanitizer.bypassSecurityTrustHtml(text);\n            if (text.changingThisBreaksApplicationSecurity) {\n                text = text.changingThisBreaksApplicationSecurity;\n            }\n            return text;\n        } else {\n            return \"\";\n        }\n    }\n\n    escapeHtml(text) {\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n\n    encodeHtml(text) {\n        return text\n            .replace(\"&\", \"&amp;\")\n            .replace(\"<\", \"&lt;\")\n            .replace(\">\", \"&gt;\")\n            .replace('\"', \"&quot;\")\n            .replace(\"'\", \"&#039;\");\n    }\n\n    setFlag(idmail, idflag) {\n        this._inbox.setFlag(idmail, idflag).subscribe(data => {\n            this.getMail();\n            if (data.data != \"OK\") {\n                this.toastr.error(data.message, \"Error\");\n            } else {\n                this.toastr.success(data.message, \"Flag assigned\");\n            }\n        });\n    }\n\n    setFolder(idmail, idfolder) {\n        this._inbox.setFolder(idmail, idfolder).subscribe(data => {\n            this.getMail();\n            if (data.data != \"OK\") {\n                this.toastr.error(data.message, \"Error\");\n            } else {\n                this.toastr.success(data.message, \"Folder changed\");\n            }\n        });\n    }\n\n    updateSelect(event) {\n        this.selectedFolders = [];\n        for (let c of this.selectedNodes) {\n            this.selectedFolders.push(c.value);\n        }\n    }\n\n    selectAll() {\n        if (this.selmails.length > 0) {\n            this.selmails = [];\n            this.selection = {};\n        } else {\n            this.selmails = [];\n            this.selection = {emails:[],action:\"\"};\n            for (var t in this.emails) {\n                this.selmails.push(this.emails[t].number);\n                this.selection.emails.push({number:this.emails[t].number,account:this.emails[t].accountid});\n            }\n        }\n    }\n\n    NewMailbox(mbox,lastemail,criteria,folder){\n        this.spinner = true;\n        if(this.activemenu == 1){\n            this.activemenu = 0;\n        }\n        this.totalmsg = 0;\n        this.currmailbox = mbox;\n        this.emails = [];\n        this.curfolder = folder;\n        if(lastemail > 0){\n            lastemail = lastemail + 1;\n        }\n        var emailrequest = {mbox:this.currmailbox,lmail:lastemail,criteria:criteria,folder:folder,order:this.selectedOrder.value};\n\n        this._inbox.NewMailbox(emailrequest).subscribe(res => {\n            for( let c of res.data){\n                var totalaccounts = res.data.length;\n                for(var i = 0; i<c.length; i++){\n                    if(i==0){\n                        this.lastemail = c[i][\"idx\"];\n                        this.totalmsg += c[i][\"total_msg\"];\n                        this.topmail = (totalaccounts*(this.lastemail - 19)) + 1;\n                        this.botmail = totalaccounts*(this.lastemail + 1);\n                    }else{\n                        this.emails.push({subject:c[i].subject,sender:c[i].sender.sender_personal,date:c[i].date,number:c[i].number,usem_id:c[i].usem_id,status:c[i].status,attachments:c[i].attachments});\n                    }\n                }\n            }\n            if(this.topmail < 0){\n                this.topmail = 1;\n                this.botmail = this.emails.length;\n            }\n            if(this.lastemail+1 == this.totalmsg){\n                this.topmail = this.totalmsg - (this.emails.length-1);\n            }\n            this.spinner = false;\n        });\n\n    }\n\n    streamMessage(email){\n        if($(\"#mail-\"+email.number+\"acc-\"+email.usem_id).hasClass(\"email_unread\")){\n            $(\"#mail-\"+email.number+\"acc-\"+email.usem_id).removeClass(\"email_unread\")\n            $(\"#unread\"+email.number+email.usem_id).toggle();\n        };\n\n        this.spinner = true;\n        \n        if($(\".email_element\").hasClass(\"email_selected\")){\n            $(\".email_selected\").removeClass(\"email_selected\");\n        }\n        if($(this).hasClass(\"email_element\")){\n            $(this).addClass(\"email_selected\")\n        }else if($(this).parent().hasClass(\"email_element\")){\n            $(this).parent().addClass(\"email_selected\");\n        }else if($(this).parent().parent().hasClass(\"email_element\")){\n            $(this).parent().parent().addClass(\"email_selected\");\n        }\n\n        if(this.mymail.htmlmsg){\n            this.mymail = { message: \"\", attachments: [] };\n        }\n        this._inbox.streamMessage(email.number,email.usem_id,this.curfolder).subscribe(res => {\n            this.mymail = res.data;\n            this.mymail.sender_personal = email.sender;\n            this.mymail.htmlmsg = this.sanitizeHtml(this.mymail.htmlmsg);\n            this.mymail.htmlmsg = this.escapeHtml(this.mymail.htmlmsg);\n            if(this.mymail.htmlmsg != \"\"){\n                setTimeout(() => {\n                   this.loadHTML(); \n                }, 0);\n            }else{\n                this.mymail.htmlmsg = \"<h3>This email has no content</h3>\";\n                setTimeout(() => {\n                    this.loadHTML(); \n                }, 0);\n            }\n            this.mymail.to = \"\";\n            if(this.mymail.recipients.length > 0){\n                this.mymail.to = this.mymail.recipients[0].mailbox+'@'+this.mymail.recipients[0].host;\n            }\n            if(this.mymail.recipients.length > 1){\n                for(let i = 1; i < this.mymail.recipients.length; i++){\n                    this.mymail.to += ','+this.mymail.recipients[i].mailbox+'@'+this.mymail.recipients[i].host;\n                }\n            }\n        });\n    }\n\n    searchEmail(text){\n        text = text.replace(/['\"]+/g, '');\n        this.NewMailbox(0,text);\n        this.curfilter = text;\n    }\n\n    showSortMenu(){\n        $(\"#sort-menu\").toggle();\n    }\n\n    showChildsMenu(e){\n    var menu = e.srcElement.id;\n    switch (menu) {\n        case \"inbox-email\":\n            $(\"#inbox-children\").toggle();            \n            break;\n        case \"draft-email\":\n            $(\"#draft-children\").toggle();            \n            break;\n        case \"sent-email\":\n            $(\"#sent-children\").toggle();            \n            break;\n        case \"junk-email\":\n            $(\"#junk-children\").toggle();            \n            break;\n        case \"trash-email\":\n            $(\"#trash-children\").toggle();            \n            break;\n        default:\n            break;\n        }\n    }\n\n    getMyAccounts(){\n        this.mailaccounts = [];\n        this.maildetails = [];\n        this._inbox.getMyAccounts().subscribe(res => {\n            this.maildetails = res.data;\n            for(let c of res.data){\n                this.fromOptions.push({label:c.mbac_email,value:c.mbus_mailacc});\n                if(c.status == \"ONLINE\"){\n                    this.mailaccounts.push({name:c.usem_title,id:c.mbus_mailacc,status:\"#92cc66\"});\n                }else if(c.status == \"OFFLINE\"){\n                    this.mailaccounts.push({name:c.usem_title,id:c.mbus_mailacc,status:\"#f01458\"});\n                }\n            }\n        });\n    }\n    \n    showSettings(option){\n        this.getMyAccounts();\n        if(option == 1 && this.activemenu == 0){\n            this.activemenu = option;\n        }else if(option == 0 && this.activemenu == 1){\n            this.activemenu = option;\n        }\n    }\n\n    getAccountDetails(account){\n        for(let c of this.maildetails){\n            if(c.mbus_mailacc == account.id){\n                this.accountDetails = c;\n            }\n        }\n    }\n\n    saveNewAccount(account){\n        this._inbox.saveNewAccount(account).subscribe(res => {\n            if(res.data == \"OK\"){\n                this.toastr.success(\"Email account added successfully\");\n                $('#newMailAcccount').modal('hide');\n                this.getMyAccounts();\n            }else{\n                this.toastr.error(\"There was an error, please try again\");\n                $('#newMailAcccount').modal('hide');\n            }\n        });\n    }\n\n    showActionMenu(){\n        $(\"#action-menu\").toggle();\n    }\n\n    emailAction(action){\n        this.selection.action = action;\n        this.selection.folder = this.curfolder;\n        var data = JSON.stringify(this.selection);\n        this._inbox.emailAction(data).subscribe(res => {\n\n        });\n    }\n\n    editAccount(){\n        this._inbox.editAccount(this.accountDetails).subscribe(res => {\n            if(res.data == \"OK\"){\n                this.toastr.success(\"Email Updated\");\n                this.getMyAccounts();\n            }\n        });\n    }\n\n    deleteAccount(){\n        this._inbox.deleteAccount(this.accountDetails).subscribe(res => {\n            if(res.data == \"OK\"){\n                this.toastr.success(\"Email deleted successfully\");\n                this.getMyAccounts();\n            }\n        });\n    }\n\n    changeSortOption(sortoption){\n        this.curfilter = sortoption.value;\n        this.NewMailbox(this.currmailbox,0, this.curfilter,this.curfolder); \n        switch (this.selectedOption.value) {\n            case \"SORTARRIVAL\":\n                this.sortorder = [{label: \"Oldest Message on top\", value:0},{label: \"Newest Message on top\", value: 1}];\n                break;\n            case \"SORTFROM\":\n            case \"SORTTO\":\n            case \"SORTSUBJECT\":\n                this.sortorder = [{label: \"A to Z\", value:0},{label: \"Z to A\", value: 1}];\n                break;\n            case \"SORTSIZE\":\n                this.sortorder = [{label: \"Smaller Message on top\", value: 0}, {label: \"Largest Message on top\", value:1}];\n                break;\n            default:\n                break;\n        }\n    }\n\n    showNewMessage(){\n        this.newMessage = {to:[],cc:[],message:\"\",attachments:[]}\n        $('#NewMessage').modal('show');\n    }\n\n    sendMail(email){\n        \n        if (email.to.indexOf(',') > -1) { \n            this.newMessage.to = email.to.split(',');\n            for(let v of this.newMessage.to){\n                v.trim();\n            }\n        }else{\n            this.newMessage.to = [email.to];\n        }\n\n        if (email.cc.indexOf(',') > -1 ){\n            this.newMessage.cc = email.cc.split(',');\n        }else{\n            if(email.cc != \"\"|| email.cc != null){\n                this.newMessage.cc = [email.cc];\n            }\n        }\n        \n        this._inbox.sendEmail(this.newMessage).subscribe( res => {\n            if(res.data == \"OK\"){\n                this.toastr.success(\"Email sent successfully\");\n                $('#NewMessage').modal('hide');\n            }else{\n                this.toastr.error(\"There's an error with your email. Please try again.\");\n            }\n        });\n\n    }\n\n    changeFromOption(e){\n        e.value = [e.itemValue];\n        this.newMessage.from = [e.itemValue];\n    }\n\n    loadHTML(){\n        var result = this.mymail.htmlmsg.match(/<head([\\s\\S]*?)<\\/head>/g);\n        var rstyle = this.mymail.htmlmsg.match(/<style([\\s\\S]*?)<\\/style>/g);\n        var rbody = this.mymail.htmlmsg.match(/<body([\\s\\S]*?)<\\/body>/g);\n        var head = document.getElementById('someFrame').contentDocument.getElementsByTagName('head');\n        var body = document.getElementById('someFrame').contentDocument.getElementsByTagName('body');\n        if(result){\n            head[0].innerHTML = result[0];\n            if(!rstyle){\n                result[0] = result[0].replace(/<head([\\s\\S]*?)<\\/head>/g, \"\");\n           //     head[0].innerHTML = result[0]+\"<link href='https://fonts.googleapis.com/css?family=Quicksand' rel='stylesheet'><link href='style.bundle.css' rel='stylesheet'>\";\n           head[0].innerHTML = result[0];\n            }\n        } else {\n          //  head[0].innerHTML = \"<link href='https://fonts.googleapis.com/css?family=Quicksand' rel='stylesheet'><link href='style.bundle.css' rel='stylesheet'>\";\n        }\n        if(rbody){\n            body[0].innerHTML = rbody[0];\n        } else {\n            body[0].innerHTML = this.encodeHtml(this.mymail.htmlmsg).replace(\"\\t\",\"    \");\n        }\n    }\n    onChange(event) {\n        var files = event.srcElement.files;\n        this.newMessage.attachments.push(files[0]);\n      }\n      \n    setPageNewEmail(opt) {\n        if (opt == 1) {\n            this.tagMenuNew = 1;\n        }\n        if (opt == 2) {\n            this.tagMenuNew = 2;\n        }\n        if(opt == 3) {\n            this.tagMenuNew = 3;\n        }\n    }\n    activeTabDescription_addEmail() {\n        this.tagMenuNew = 1;\n        $('#li_attachments_email').removeClass('active');\n        $('#li_description_email').addClass('active');\n    }\n    deleteAttachment(att) {\n        var index = 0;\n        for (let i in this.newMessage.attachments) {\n          if (att.name == this.newMessage.attachments[i].name) {\n            index = i;\n            break;\n          }\n        }\n        this.newMessage.attachments.splice(index, 1);\n    \n        if (this.newMessage.attachments.length == 0) {\n          this.activeTabDescription_addEmail();\n        }\n      }\n\n}\n\n\n\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/mail/mailbox.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\"\n\nimport { DirectoryService } from \"../../services/directory.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe\n} from \"../../pipes\";\nimport template from \"./directory.template.html\";\n\n@Component({\n  selector: \"directory\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe],\n  styles: [\n    \".container-photo { position: relative; margin-top: 50px; width: 500px; height: 300px; }, .myimg { position: absolute; height: 120px; width: 120px; left: 0; }, .labelbutton { border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer; position: absolute; width: 500px; left:0; top: 180px; text-align: center; opacity: 0; transition: opacity .35s ease; }\",\n    \".labelbutton a { width: 200px; padding: 12px 48px; text-align: center; color: white; border: solid 2px white; z-index: 1; }, .container-photo:hover .labelbutton { opacity: 1; } \"\n  ]\n})\nexport class DirectoryComponent {\n  angularxQrCode: string = null;\n  constructor(\n    route: Router,\n    toastr: ToastrService,\n    directoryService: DirectoryService,\n    confirmationService: ConfirmationService\n  ) {\n    this._route = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.confirm = confirmationService;\n    this._contacts = directoryService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 12;\n    this.itemcount = 0;\n    this.textState = [\"\"];\n    this.posState = \"\";\n    this.contact = { usersShared: []};\n    this.contacts = [];\n    this.contactList = [];\n    this.profilepic = {};\n    this.user = [];\n\n  }\n\n\n  ngOnInit() { }\n  ngAfterViewInit() {\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n    this._contacts.getGroups().subscribe(data => {\n      this.usersShareWith = data.data;\n      this.usersShareWith_a = data.data;\n    });\n    this.reload();\n  }\n  opensavecontact() {\n    this.contact = [];\n    $(\"#opensavecontact\").modal(\"show\");\n  }\n  quickciew(cont_id) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.contact = [];\n    this._contacts.getContact(cont_id).subscribe(data => {\n      this.contact = data.data;\n      $(\"#quickciew\").modal(\"show\");\n    });\n  }\n  openuppcontact(cont_id) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.contact = [];\n    this._contacts.getContact(cont_id).subscribe(data => {\n      this.contact = data.data;\n      $(\"#openuppcontact\").modal(\"show\");\n    });\n  }\n  openQrcode(user) {\n    this.user = user;\n    $('#output').empty();\n    user = this.qrCode(user);\n    $('#mdqrcode').modal('show');\n  }\n  qrCode(user) {\n    var textVcard = \"BEGIN:VCARD VERSION:3.0\" +\n      \"N:\" + user.cont_lastname + \";\" + cont_firstname + \"\\n\" +\n      \"FN:\" + user.cont_firstname + \" \" + user.cont_lastname + \"\\n\" +\n      // +\"ORG:MDCloudPS\\n\"+ \n      \"TITLE: \" + user.cont_cargo + \"/\" + user.cont_cargo + \"\\n\" +\n      \"TEL;TYPE=WORK,VOICE:\" + user.cont_cellphone + \"\\n\" +\n      // \"TEL;TYPE=HOME,VOICE:\" + user.telefonoA + \"\\n\" + \n      // \"TEL;TYPE=HOME,VOICE:\" + user.telefonoB + \"\\n\" + \n      \"EMAIL;TYPE=PREF,INTERNET:\" + user.cont_email + \"\\n\" +\n      \"ADR;TYPE=intl,home,postal,parcel:;;\" + user.cont_workaddress + \";;;;\\n\" +\n      // +\"URL:mdcloudps.com\\n\"+ \n      // +\"REV:20111013T195243Z\\n\"+ \n      \"END:VCARD\";\n    $(\"#output\").qrcode({\n      render: \"canvas\",\n      text: textVcard,\n      width: 250,\n      height: 250,\n      background: \"#ffffff\",\n      foreground: \"#3092E9\",\n      // src: \"../../../assets/img/mdtext.svg\",\n      src: \"img/LogoSquadlinxQR.png\",\n      imgWidth: 90,\n      imgHeight: 90\n    });\n  }\n  UploadAddUser(event, type) {\n    if (type == \"profile\") {\n      this.profilepic = event.target.files[0];\n    }\n\n    if (event.target.files && event.target.files[0]) {\n      var files = event.target.files;\n      if (files[0].size / 1024 / 1024 > 4) {\n        this.toastr.error(\"File size exceeds 4 MB\");\n      } else {\n        var reader = new FileReader();\n        reader.onload = function(e) {\n          if (type == \"profile\") {\n            $(\"#profile-img\").attr(\"src\", e.target.result);\n          }\n        };\n        reader.readAsDataURL(event.target.files[0]);\n      }\n    }\n  }\n\n  ChangeAddUser(type) {\n    if (type == \"profile\") {\n      $(\"#change-profileUser\").toggle();\n    }\n  }\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.contact.photo = files[0];\n    var reader = new FileReader();\n    reader.onload = event => {\n      this.myImg = event.target.result;\n    };\n\n    reader.readAsDataURL(event.target.files[0]);\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.reload();\n  }\n\n  goTo(value) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    if (value == 0) {\n      this.currentpage = 1;\n      this.limitpage = 12;\n    } else {\n      this.currentpage = Math.round(this.itemcount / this.limitpage);\n      let mod = this.itemcount % this.limitpage;\n      if (mod > 0 && mod < 5) {\n        this.currentpage += 1;\n      }\n    }\n    this.reload();\n  }\n  saveContact(contact) {\n    if (this.profilepic != {}) {\n      this.contact.cont_photo = this.profilepic;\n    }\n    this.contact.cont_birthday = new Date(this.contact.cont_birthday);\n    this.contact.cont_birthday =\n      this.contact.cont_birthday.getFullYear() +\n      \"-\" +\n      (this.contact.cont_birthday.getMonth() + 1) +\n      \"-\" +\n      this.contact.cont_birthday.getDate();\n     //reasignacion de la variable con un array de ids de usuarios\n     let users_share = [];\n\n     for(let user in this.contact.usersShared) {\n       users_share.push(this.contact.usersShared[user].value);\n     }\n \n     // Solve Bug Autocomplete users.\n     let contactaa = Object.assign({}, this.contact);\n     contact.usersShared = users_share;\n    this._contacts.saveContact(this.contact).subscribe(data => {\n      if (data.data == \"OK\") {\n        $('#addUser').modal('hide');\n        this.toastr.success(\"User has been created successfully\");\n        this.isLoadingcontact = false;\n        this.isLoadingpagination = false;\n        this.ngAfterViewInit();\n        this.contact = {};\n      } else {\n        this.toastr.error(data.message, \"Error!\");\n      }\n    });\n    this.reload();\n  }\n  verifyEmaild(email) {\n    this._contacts.verifyEmaild(email).subscribe(data => {\n      if (data.data == true) {\n        this.toastr.success(\"Email valid\");\n        this.errors = 0;\n        return true;\n      } else {\n        this.toastr.error(\"email invalid!\");\n        this.errors = 1;\n        return false;\n      }\n    });\n  }\n  updateContact(contact) {\n    this.contact.cont_birthday = new Date(this.contact.cont_birthday);\n    this.contact.cont_birthday =\n      this.contact.cont_birthday.getFullYear() +\n      \"-\" +\n      (this.contact.cont_birthday.getMonth() + 1) +\n      \"-\" +\n      this.contact.cont_birthday.getDate();\n    this._contacts.updateContact(this.contact).subscribe(data => {\n      if (data.data == \"OK\") {\n        $('#addUser').modal('hide');\n        this.toastr.success(\"User has been update successfully\");\n        this.isLoadingcontact = false;\n        this.isLoadingpagination = false;\n        this.ngAfterViewInit();\n        this.contact = [];\n      } else {\n        this.toastr.error(data.message, \"Error!\");\n      }\n    });\n    this.reload();\n  }\n  deleteContact(ct) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to delete this Contact?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        this._contacts.deleteContact(ct.cont_id).subscribe(data => {\n          if (data.data == \"OK\") {\n            this.toastr.error(data.message, \"Error!\");\n          } else {\n            this.toastr.success(\"Contact deleted successfully\");\n          }\n          this.isLoadingcontact = false;\n          this.isLoadingpagination = false;\n          this.ngAfterViewInit();\n        });\n      },\n      reject: () => { }\n    });\n  }\n  reload() {\n    this.isLoading = true;\n    this.isLoadingcontact = true;\n    this.isLoadingpagination = true;\n    var filter = {\n      start: this.currentpage * this.limitpage - this.limitpage,\n      end: this.limitpage,\n      all: this.search.trim(),\n      orderby: this.posOrder,\n      orderdesc: this.orderDesc ? \"desc\" : \"\"\n    };\n    this._contacts.getUsersx(filter).subscribe(res => {\n      this.isLoading = false;\n      this.contacts = res.data.data;\n      this.itemcount = res.data.count;\n      this.lastpage = this.itemcount / this.limitpage;\n      this.contact = [];\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) {\n        this.pages.push(i);\n      }\n      if (this.pages.length == 0) {\n        this.pages = [1];\n      }\n    });\n    this.cont = 0;\n  }\n\n  filterText() {\n    this.isLoading = true;\n    this.currentpage = 1;\n\n    var filter = {\n      start: 0,\n      end: this.limitpage,\n      all: this.search.trim(),\n      orderby: this.posOrder,\n      orderdesc: this.orderDesc ? \"desc\" : \"\"\n    };\n    this._contacts.getUsersx(filter).subscribe(res => {\n      this.isLoading = false;\n      this.contacts = res.data.data;\n      this.itemcount = res.data.count;\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) {\n        this.pages.push(i);\n      }\n      if (this.pages.length == 0) {\n        this.pages = [1];\n      }\n    });\n    this.cont = 0;\n    this.reload();\n  }\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.isLoading = true;\n      this.currentpage = 1;\n\n      var filter = {\n        start: 0,\n        end: this.limitpage,\n        all: this.search.trim(),\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\"\n      };\n      this._contacts.getUsersx(filter).subscribe(res => {\n        this.isLoading = false;\n        this.contacts = res.data.data;\n        this.itemcount = res.data.count;\n        this.lastpage = this.itemcount / this.limitpage;\n        if (this.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(this.lastpage);\n          this.lastpage = countpag;\n        }\n        this.pages = [];\n        for (let i = 1; i <= this.lastpage; i++) {\n          this.pages.push(i);\n        }\n        if (this.pages.length == 0) {\n          this.pages = [1];\n        }\n      });\n      this.cont = 0;\n      this.reload();\n\n    }\n  }\n  soloLetras(e) {\n    var key = e.keyCode || e.which;\n    var teclado = String.fromCharCode(key).toLowerCase();\n    var letras = \"áéíóúabcdefghijklmnñopqrstuvwxyz \";\n    var especiales = \"13-37-38-46-164\";\n    var teclado_especial = false\n    for (var i in especiales) {\n      if (key == especiales[i]) {\n        var teclado_especial = true;\n        break;\n      }\n    }\n    if (letras.indexOf(teclado) == -1 && !teclado_especial) {\n      return false;\n    }\n  }\n  escapeHtml(text) {\n    return text\n      ? text\n        .replace(/&amp;/g, \"&\")\n        .replace(/&lt;/g, \"<\")\n        .replace(/&gt;/g, \">\")\n        .replace(/&quot;/g, '\"')\n        .replace(/&#039;/g, \"'\")\n      : \"\";\n  }\n  filterMultipleShared(event) {\n    let query = event.query;\n    this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n  }\n\n  filterShared(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n          country.label.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/directory/directory.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { DailyService } from \"../../services/daily.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { NoteService } from \"../../services/note.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { UnitsService } from \"../../services/units.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe\n} from \"../../pipes\";\nimport template from \"./daily.template.html\";\n\n@Component({\n  selector: \"daily\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe]\n})\nexport class DailyComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    toastr: ToastrService,\n    groupService: GroupService,\n    usersService: UsersService,\n    productService: ProductService,\n    confirmationService: ConfirmationService,\n    taskService: TaskService,\n    sanitizer: DomSanitizer,\n    noteService: NoteService,\n    sprintService: SprintService,\n    ProjectService: ProjectService,\n    dailyService: DailyService,\n    unitsService: UnitsService\n  ) {\n    this._title = title;\n    this._route = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.confirm = confirmationService;\n    this._groups = groupService;\n    this._user = usersService;\n    this._products = productService;\n    this._daily = dailyService;\n    this._tasks = taskService;\n    this._sanitizer = sanitizer;\n    this._notes = noteService;\n    this._sprint = sprintService;\n    this._projects = ProjectService;\n    this._units = unitsService;\n    this.sprintslist = [];\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem(\"title\")) {\n      this.stTitle = localStorage.getItem(\"title\");\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Daily ::.\");\n    this.search = \"\";\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.pages = [1];\n    this.daily = [];\n    this.myDay = {};\n    this.seldaily = [];\n    this.products = [];\n    this.developing = [];\n    this.spinner = false;\n    this.mytask = [];\n    this.dailynew = 0;\n    this.catdaily = [];\n    this.taskid = 0;\n    this.mdT = { project: {}, comments: [] };\n    this.note = { attachments: [] };\n    this.idtk = [];\n    this.task = { project: {}, attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.namegroup = \"ALL\";\n    this.minDateDaily = null;\n    this.maxDateDaily = new Date();\n    this.getNameUser();\n    this.mydaily = [];\n    this.mydailycopy = [];\n    this._daily.getCategories().subscribe(data => {\n      this.catdaily = [];\n      for (let c of data.data) {\n        this.catdaily.push({ label: c.para_name, value: c.para_codigo });\n      }\n    });\n    this.productsa = [];\n    this.productsb = [];\n    this._products.getProducts().subscribe(data => {\n      this.productsa = data.data;\n      this.productsb = data.data;\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this.applicantlbl = [];\n    this._user.getEmailList().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.applicantlbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this.usersCRM = [];\n    this.usersCRMa = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.usersCRM = data.data;\n      this.usersCRMa = data.data;\n    });\n    this.groups = [];\n    this.lblgroups = [];\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n    this.myTasks = [];\n    this.lblmytasks = [];\n    this._tasks.getTasksbyMe().subscribe(data => {\n      this.myTasks = data.data;\n      for (let c of data.data) {\n        this.lblmytasks.push({\n          label: \"#\" + c.task_id + \" \" + c.task_subject,\n          value: c.task_id\n        });\n      }\n    });\n    this.tasks = [];\n    this.getmyProjects();\n    this.getDevtask();\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.day.task = {};\n    this.user = {};\n    this.isLoading = false;\n    this.mydaily.date_ini = \"\";\n    this.mydaily.date_end = \"\";\n    this.prods = [\"\"];\n    this.usrs = [\"\"];\n    this.projs = [\"\"];\n    this.desc = \"\";\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.filter = false;\n    this.dateActive = false;\n    this._units.getUnits().subscribe(res => {\n      this.units = [];\n      for (let c of res.data) {\n        this.units.push({ label: c.unit_desc, value: c.unit_id });\n      }\n    });\n  }\n\n  ngOnInit() {\n    this.reload();\n  }\n\n  addDaily(mDay) {\n    this.getListSprints();\n    if (mDay) {\n      this.day = mDay;\n    }\n    $(\"#mdDailyTask\").modal(\"show\");\n  }\n\n  setMytask(num) {\n    this.maxDateDaily = new Date();\n    this.minDateDaily = null;\n    this.dailynew = 0;\n    this.mytask = 0;\n    this.day = { dail_points_2: 1, dail_text_2: \"\" };\n  }\n\n  onChangeSprint(){\n    this.maxDateDaily = new Date();\n    this.minDateDaily = null;\n    this._sprint.getSprint(this.day.spri_id).subscribe(res => { \n      this.minDateDaily = new Date(res.data.spri_init.replace(\"-\",\"/\"));\n      let spri_end = new Date(res.data.spri_end.replace(\"-\",\"/\"));\n\n      if (spri_end.getTime() < this.maxDateDaily.getTime()) {\n        this.maxDateDaily = spri_end;\n      }\n      this.day.spri_init = res.data.spri_init;\n      this.day.spri_end = res.data.spri_end;\n    });\n    this.day.dail_date_2 = \"\";\n  }\n\n  saveDaily(dv, idtask) {\n\n    if (this.dailynew == 0) {\n      dv.dail_points = dv.dail_points_2;\n      dv.dail_text = dv.dail_text_2;\n      dv.dail_date = dv.dail_date_2;\n    }\n    dv.task_id = idtask;\n    dv.dail_date = new Date(dv.dail_date);\n    dv.dail_date =\n      dv.dail_date.getFullYear() +\n      \"-\" +\n      (dv.dail_date.getMonth() + 1) +\n      \"-\" +\n      dv.dail_date.getDate();\n    if (\n      parseInt(this.mytask.task_pointsd) + parseInt(dv.dail_points) >\n      this.mytask.task_points\n    ) {\n      this.toastr.error(\n        \"Points selected exceed current task duration\",\n        \"Error!\"\n      );\n    } else {\n      this._daily.putDaily(dv).subscribe(data => {\n        if (data.data == \"OK\") {\n          this.toastr.success(data.message, \"Daily saved Successfully\");\n          this.getDevtask();\n        } else {\n          this.toastr.warning(data.message, \"Action not allowed\");\n        }\n        this.day = { dail_points: 1 };\n        this.setMytask(0);\n        this.searchDaily();\n      });\n    }\n  }\n\n  showInfo(idtk) {\n    this.maxDateDaily = new Date();\n    this.minDateDaily = null;\n\n    this.minDateDaily = new Date(idtk.spri_init.replace(\"-\",\"/\"));\n    let spri_end = new Date(idtk.spri_end.replace(\"-\",\"/\"));\n\n    if (spri_end.getTime() < this.maxDateDaily.getTime()) {\n      this.maxDateDaily = spri_end;\n    }\n    this.dailynew = -1;\n    if(idtk.unit_id && idtk.unit_id > 0){\n      this.day = { dail_points: 1, unit_points: idtk.unit_points - idtk.unit_pointsd, unit_id: idtk.unit_id, dail_text: \"\" };\n    }else{\n      this.day = { dail_points: 1, dail_text: \"\" };\n    }\n    this.day.spri_init = idtk.spri_init;\n    this.day.spri_end = idtk.spri_end;\n    this.mytask = idtk;\n  }\n\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n    this.searchDaily();\n  }\n  \n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.searchDaily();\n  }\n\n  goTo(value) {\n    if (value == 0) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n    } else {\n      this.currentpage = Math.round(this.itemcount / this.limitpage);\n      let mod = this.itemcount % this.limitpage;\n      if (mod > 0 && mod < 5) {\n        this.currentpage += 1;\n      }\n    }\n    this.searchDaily();\n  }\n\n  reload() {\n    this.isLoading = true;\n    if(this.mydaily.products && this.mydaily.products.length > 0){\n      this.prods = this.mydaily.products;\n    }else{\n      this.prods = [\"\"];\n    }\n    if(this.mydaily.creators && this.mydaily.creators.length > 0){\n      this.usrs = this.mydaily.creators;\n    }else{\n      this.usrs = [\"\"];\n    }\n    if(this.mydaily.projects && this.mydaily.projects.length > 0){\n      this.projs = this.mydaily.projects;\n    }else{\n      this.projs = [\"\"];\n    }\n    if(this.mydaily.description && this.mydaily.description != \"\"){\n      this.desc = this.mydaily.description;\n    }else{\n      this.desc = \"\";\n    }\n    if(this.mydaily.date_ini != null && this.mydaily.date_ini != \"\" && this.mydaily.date_ini != \"undefined\"){\n      if(this.date_ini != \"\" && this.date_ini != null){\n        this.date_ini = this.mydaily.date_ini;\n      }else{\n        this.date_ini = this.mydaily.date_ini;\n      } \n    }else{\n      this.date_ini = \"\";\n      this.date_end = \"\";\n    }\n    if(this.mydaily.date_end != null && this.mydaily.date_end != \"\" && this.mydaily.date_end != \"undefined\"){\n      if(this.date_end != \"\" && this.date_end != null){\n        this.date_end = this.mydaily.date_end;\n      }else{\n        this.date_end = this.mydaily.date_end;\n      }\n    }else{\n      this.date_end = \"\";\n      this.date_ini = \"\";\n    }\n    var filter = {\n      start: this.currentpage * this.limitpage - this.limitpage,\n      end: this.limitpage,\n      all: this.search.trim(),\n      group: this.textGroup,\n      orderby: this.posOrder,\n      orderdesc: this.orderDesc ? \"desc\" : \"\",\n      products: this.prods,\n      creators: this.usrs,\n      projects: this.projs,\n      desc: this.desc,\n      date_ini: this.date_ini,\n      date_end: this.date_end\n    };\n    this._daily.getDailyList(filter).subscribe(res => {\n      this.isLoading = false;\n      this.daily = res.data.data;\n      this.itemcount = res.data.count;\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) {\n        this.pages.push(i);\n      }\n      if (this.pages.length == 0) {\n        this.pages = [1];\n      }\n    });\n  }\n\n  showModal(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.myDay = idtk;\n    $(\"#mdDayView\").modal(\"show\");\n  }\n\n  showModalUser(user_id) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.user = {};\n    this._user.getUserInfo(user_id).subscribe(res => {\n      this.user = res.data;\n    });\n    $(\"#mdUser\").modal(\"show\");\n  }\n\n  deleteDay(da) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to delete this daily?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        this._daily.deleteDay(da.dail_id).subscribe(data => {\n          if (data.data == \"OK\") {\n            this.toastr.success(\"Daily deleted successfully\");\n          } else {\n            this.toastr.error(data.message, \"Error!\");\n          }\n          this.searchDaily();\n        });\n      },\n      reject: () => {}\n    });\n  }\n\n  validateDaily(type) {\n    if (type == \"1\") {\n      if(this.day.unit_id && this.day.unit_id > 0){\n        return (\n          !this.day.dail_text ||\n          this.day.dail_text.trim() == \"\" ||\n          !this.day.dail_points ||\n          this.day.dail_points <= 0 ||\n          this.day.dail_points == \"undefined\" ||\n          !this.day.dail_date ||\n          this.day.dail_date == \"\" ||\n          this.day.dail_date == \"undefined\" ||\n          parseFloat(this.mytask.task_pointsd) +\n          parseFloat(this.day.dail_points) >\n          parseFloat(this.mytask.task_points)||\n          !this.day.unit_points ||\n          this.day.unit_points <= 0 ||\n          this.day.unit_points == \"undefined\" ||\n          (this.compareDate(this.day.spri_init) === -1 || this.compareDate(this.day.spri_end) === 1)\n        );\n      }else{\n        return (\n          !this.day.dail_text ||\n          this.day.dail_text.trim() == \"\" ||\n          !this.day.dail_points ||\n          this.day.dail_points <= 0 ||\n          this.day.dail_points == \"undefined\" ||\n          !this.day.dail_date ||\n          this.day.dail_date == \"\" ||\n          this.day.dail_date == \"undefined\" ||\n          parseFloat(this.mytask.task_pointsd) +\n          parseFloat(this.day.dail_points) >\n          parseFloat(this.mytask.task_points) ||\n          (this.compareDate(this.day.spri_init) === -1 || this.compareDate(this.day.spri_end) === 1)\n        );\n      }\n    }\n    if (type == \"2\") {\n      return (\n        !this.day.para_category ||\n        !this.day.prod_id ||\n        !this.day.dail_text_2 ||\n        this.day.dail_text_2.trim() == \"\" ||\n        !this.day.dail_points_2 ||\n        this.day.dail_points_2 <= 0 ||\n        this.day.dail_points_2 == \"undefined\" ||\n        !this.day.dail_date_2 ||\n        this.day.dail_date_2 == \"\" ||\n        this.day.dail_date_2 == \"undefined\" ||\n        (this.compareDate2(this.day.spri_init) === -1 || this.compareDate2(this.day.spri_end) === 1)\n      );\n    }\n    if (type == \"3\") {\n      if(this.day.unit_id && this.day.unit_id != 0){\n        return (\n          !this.day.dail_text ||\n          this.day.dail_text.trim() == \"\" ||\n          !this.day.dail_points ||\n          this.day.dail_points <= 0 ||\n          this.day.dail_points == \"undefined\" ||\n          !this.day.dail_date ||\n          this.day.dail_date == \"\" ||\n          this.day.dail_date == \"undefined\" ||\n          this.day.dail_points > this.day.pointsr ||\n          !this.day.unit_points ||\n          this.day.unit_points <= 0 ||\n          this.day.unit_points == \"undefined\" ||\n          (this.compareDate(this.day.spri_init) === -1 || this.compareDate(this.day.spri_end) === 1)\n        );\n      }else{\n        return (\n          !this.day.dail_text ||\n          this.day.dail_text.trim() == \"\" ||\n          !this.day.dail_points ||\n          this.day.dail_points <= 0 ||\n          this.day.dail_points == \"undefined\" ||\n          !this.day.dail_date ||\n          this.day.dail_date == \"\" ||\n          this.day.dail_date == \"undefined\" ||\n          (this.compareDate(this.day.spri_init) === -1 || this.compareDate(this.day.spri_end) === 1)\n        );\n      }\n    }\n    if (type == \"4\") {\n      return (\n        !this.day.para_category ||\n        !this.day.prod_id ||\n        !this.day.dail_text ||\n        this.day.dail_text.trim() == \"\" ||\n        !this.day.dail_points ||\n        this.day.dail_points <= 0 ||\n        this.day.dail_points == \"undefined\" ||\n        !this.day.dail_date ||\n        this.day.dail_date == \"\" ||\n        this.day.dail_date == \"undefined\"\n      );\n    }\n  }\n\n  setGroupList(state, name) {\n    this.namegroup = name;\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.searchDaily();\n  }\n\n  filterMultiple(event, num) {\n    if(num == 1){\n      let query = event.query;\n      this.productsa = this.filterP(query, this.productsb);\n    }else if(num == 2){\n      let query = event.query;\n      this.usersCRM = this.filterU(query, this.usersCRMa);\n    }else if(num == 3){\n      let query = event.query;\n      this.myProjects = this.filterPj(query, this.myProjectsb);\n    }\n  }\n  \n  filterU(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n  filterP(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.prod_name.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n  filterPj(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.proj_subject.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  editDaily(mDay) {\n    this.day = {};\n    this.maxDateDaily = new Date();\n    this.minDateDaily = null;\n    this.dateActive = false;\n\n    this.minDateDaily = new Date(mDay.spri_init.replace(\"-\",\"/\"));\n    let spri_end = new Date(mDay.spri_end.replace(\"-\",\"/\"));\n\n    if (spri_end.getTime() < this.maxDateDaily.getTime()) {\n      this.maxDateDaily = spri_end;\n    }\n\n    this._daily.getDaily(mDay.dail_id).subscribe(res => {\n      res.data.dail_text = this.escapeHtml(res.data.dail_text);\n      this.day.task = {};\n      if (mDay) {\n        this.day = res.data;\n        this.day.spri_init = mDay.spri_init;\n        this.day.spri_end = mDay.spri_end;\n        this._tasks.getTask(mDay.task_id).subscribe(res => {\n          this.day.task = res.data;\n          let a = this.day.dail_points;\n          let b = this.day.task.task_pointsd;\n          let c = this.day.task.task_points;\n          if (b - c == 0) {\n            this.day.pointsr = a;\n          } else {\n            this.day.pointsr = a + (c - b);\n          }\n          if(this.day.task.unit_id && this.day.task.unit_id > 0){\n            this.day.unit_id = this.day.task.unit_id;\n            let ax = this.day.unit_points;\n            let bx = this.day.task.unit_pointsd;\n            let cx = this.day.task.unit_points;\n            if (bx - cx == 0) {\n              this.day.pointsru = ax;\n            } else {\n              this.day.pointsru = ax + (cx - bx);\n            }\n          }\n        });\n      }\n      $(\"#mdEditDailyTask\").modal(\"show\");\n    });\n  }\n\n  compareDate2(date){\n    if (this.day.dail_date_2 != undefined && this.day.dail_date_2 != \"\" && typeof this.day.dail_date_2 != \"string\" && date != undefined) {\n      let date_aux = new Date(date.replace(\"-\",\"/\"));\n\n      if (this.day.dail_date_2.getTime() > date_aux.getTime() ) {\n        return 1;\n      } else if (this.day.dail_date_2.getTime() < date_aux.getTime() ) {\n        return -1;\n      } else {\n        return 0;\n      }    \n    } else {\n      return false;\n    }   \n  }\n  compareDate(date){\n    if (this.day.dail_date != undefined && this.day.dail_date != \"\" && typeof this.day.dail_date != \"string\" && date != undefined) {\n      let date_aux = new Date(date.replace(\"-\",\"/\"));\n\n      if (this.day.dail_date.getTime() > date_aux.getTime() ) {\n        return 1;\n      } else if (this.day.dail_date.getTime() < date_aux.getTime() ) {\n        return -1;\n      } else {\n        return 0;\n      }    \n    } else {\n      return false;\n    }   \n  }\n\n  lpad(n, width, z) {\n    z = z || \"0\";\n    n = n || \"0\";\n    n = n + \"\";\n    return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n  }\n\n  onChangeDate(type){\n    if(type){\n      this.dateActive = true;\n    }\n  }\n\n  onInputDate(type){\n    if(type){\n      this.dateActive = true;\n    }\n  }\n\n  updateDaily(dv, type) {\n\n    if(this.dateActive) {\n      dv.dail_date = new Date(dv.dail_date);\n      dv.dail_date =\n      dv.dail_date.getFullYear() +\n      \"-\" +\n      this.lpad(dv.dail_date.getMonth() + 1, 2) +\n      \"-\" +\n      this.lpad(dv.dail_date.getDate(), 2) +\n      \" \" +\n      this.lpad(dv.dail_date.getHours(), 2) +\n      \":\" +\n      this.lpad(dv.dail_date.getMinutes(), 2) +\n      \":\" +\n      this.lpad(dv.dail_date.getSeconds(), 2);\n    }\n    \n\n    if (dv.dail_points > this.day.pointsr) {\n      this.toastr.error(\n        \"Points selected exceed current task duration\",\n        \"Error!\"\n      );\n    } else {\n      dv.type = \"update\";\n      this._daily.putDaily(dv).subscribe(data => {\n        if (data.data == \"OK\") {\n          this.toastr.success(data.message, \"Daily saved Successfully\");\n          this.getDevtask();\n        } else {\n          this.toastr.warning(data.message, \"Action not allowed\");\n        }\n        this.day = { dail_points: 1 };\n        this.searchDaily();\n      });\n    }\n  }\n\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.searchDaily();\n    }\n  }\n\n  getDevtask() {\n    this.tasks = [];\n    this._daily.getDevtasks().subscribe(data => {\n      var developingx = [];\n      this.tasks = data.data;\n      if (this.tasks[35]) {\n        developingx = developingx.concat(this.tasks[35]);\n      }\n      if (this.tasks[36]) {\n        developingx = developingx.concat(this.tasks[36]);\n      }\n      if (this.tasks[37]) {\n        developingx = developingx.concat(this.tasks[37]);\n      }\n      if (this.tasks[38]) {\n        developingx = developingx.concat(this.tasks[38]);\n      }\n      this.developing = developingx;\n      this.dailynew = 0;\n      this.spinner = false;\n    });\n  }\n\n  getNameUser(user_name, user_lastname) {\n    if (user_name && user_lastname) {\n      let names = user_name;\n      let surnames = user_lastname;\n      let ellipsis = \"…\";\n      let fullName = names + \" \" + surnames;\n\n      if (fullName.length <= 14) {\n        return fullName;\n      } else {\n        if (names.length <= 14 && surnames.length <= 14) {\n          fullName = names + \" \" + surnames;\n        }\n\n        if (names.length <= 14 && surnames.length > 14) {\n          surnames = surnames.substring(0, 14) + ellipsis;\n          fullName = names + \" \" + surnames;\n        }\n\n        if (names.length > 14 && surnames.length <= 14) {\n          let arrayNames = names.split(\" \");\n          let firstName = arrayNames[0];\n          fullName = firstName + \" \" + surnames;\n        }\n\n        if (names.length > 14 && surnames.length > 14) {\n          let arrayNames = names.split(\" \");\n          let firstName = arrayNames[0];\n          surnames = surnames.substring(0, 14) + ellipsis;\n          fullName = firstName + \" \" + surnames;\n        }\n\n        return fullName;\n      }\n    } else {\n      return \"\";\n    }\n  }\n\n  parseFloat(pts) {\n    return parseFloat(pts);\n  }\n\n  showModaltk(tkid) {\n    $(\"#myTask\" + tkid).click();\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n  showFilter() {\n    //this.mydaily = [];\n    this.search = \"\";\n    $(\"#mdSearchDaily\").modal(\"show\");\n  }\n  filterDaily(){\n    this.filter = true;\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.searchDaily();\n  }\n  searchDaily(){\n    this.mydailycopy = jQuery.extend(true, {}, this.mydaily);\n    let copy = [];\n    for (let x in this.mydaily.products) {\n      copy.push(this.mydaily.products[x].prod_id);\n    }\n    this.mydaily.products = copy;\n    copy = [];\n    for (let x in this.mydaily.creators) {\n      copy.push(this.mydaily.creators[x].user_id);\n    }\n    this.mydaily.creators = copy;\n    copy = [];\n    for (let x in this.mydaily.projects) {\n      copy.push(this.mydaily.projects[x].proj_id);\n    }\n    this.mydaily.projects = copy;\n    if(this.mydaily.date_ini != null && this.mydaily.date_ini != \"\" && this.mydaily.date_end != null && this.mydaily.date_end != \"\"){\n      this.mydaily.date_ini = this.formatDate(this.mydaily.date_ini);\n      this.mydaily.date_end = this.formatDate(this.mydaily.date_end);\n    }else{\n      this.mydaily.date_ini = \"\";\n      this.mydaily.date_end = \"\";\n    }\n    this.reload();\n    this.mydaily = this.mydailycopy;\n  }\n  formatDate(date) {\n    date = new Date(date);\n    if(date && date !== \"\"){\n      var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n      var monthIndex = (date.getMonth() + 1) < 10 ? \"0\" + (date.getMonth() + 1) : (date.getMonth() + 1);\n      var year = date.getFullYear();\n      return year + '-' + monthIndex+ '-' + day;\n    }else{\n      return '';\n    }\n  }\n  getmyProjects() {\n    this.myProjects = [];\n    this.myProjectsb = [];\n    this._projects.getmyProjects().subscribe(res => {\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push(c);\n          this.myProjectsb.push(c);\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push(c);\n          this.myProjectsb.push(c);\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push(c);\n          this.myProjectsb.push(c);\n        }\n      }\n    });\n  }\n\n  getListSprints() {\n    this.sprintslist = [];\n    this._sprint.getListSprints().subscribe(res => {\n      this.sprintslist = [];\n      for (let c of res.data) {\n        this.sprintslist.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n      }\n    });\n  }\n\n  closeFilter(){\n    this.mydaily = [];\n    this.mydailycopy =[];\n    this.search = \"\";\n    this.filter = false;\n    this.mydaily.date_ini = \"\";\n    this.mydaily.date_end = \"\";\n    this.prods = [\"\"];\n    this.usrs = [\"\"];\n    this.projs = [\"\"];\n    this.desc = \"\";\n    this.date_ini = \"\";\n    this.date_end = \"\";\n    this.reload();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/daily/daily.component.js","import { Component } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ToastrService } from 'ngx-toastr';\n\nimport { DirectoryService } from '../../services/directory.service';\n\nimport template from './contact.template.html';\n\n@Component({\n    selector: 'contact',\n    template: template\n})\nexport class ContactComponent {\n    constructor(route: Router, toastr: ToastrService, sanitizer: DomSanitizer, arouter: ActivatedRoute, directoryService: DirectoryService) {\n        this._route = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n          \"preventDuplicates\": true,\n          \"preventOpenDuplicates\": true\n          };\n        this._aroute = arouter;\n        this._sanitizer = sanitizer;\n        this._directory = directoryService;\n        this.contact = {};\n        this.editcontact = {grupsShared: []};\n        this.id_cont = 0;\n        this.tabActive = 'activity';\n        this.reload();\n\n    }\n\n    ngOnInit() {\n\n    }\n    ngAfterViewInit() {\n        this.usersShareWith= [];\n        this.usersShareWith_a = [];\n        this._directory.getGroups().subscribe(data => {\n          this.usersShareWith= data.data;\n          this.usersShareWith_a = data.data;\n        });\n        this.reload();\n      }\n\n    reload() {\n        \n        this._aroute.params.forEach(params => {\n            this._directory.getContact(params.idcontact).subscribe(res => {\n                this.contact = res.data;\n                this.id_cont = this.contact.cont_id;\n            });\n        });\n    }\n\n    registerTab(tab, click){\n        this.tabActive = tab;\n        if(tab == 'profile'){\n            this._directory.getContact(this.contact.cont_id).subscribe(res => {\n                this.editcontact = res.data;\n            });\n        }\n    }\n    updateContact() {\n        //reasignacion de la variable con un array de ids de usuarios\n     let users_share = [];\n\n     for(let user in this.editcontact.grupsShared) {\n       users_share.push(this.editcontact.grupsShared[user].value);\n     }\n \n     // Solve Bug Autocomplete users.\n     let editcontactt = Object.assign({}, this.editcontact);\n     this.editcontact.grupsShared = users_share;\n        this._directory.updateContact(this.editcontact).subscribe(data => {\n          if (data.data == \"OK\") {\n            this.toastr.success(\"User has been update successfully\");\n          } else {\n            this.toastr.error(data.message, \"Error!\");\n          }\n        });\n        this.reload();\n        this.registerTab(this.tabActive);\n      }\n\n    validate(){\n        return (\n            !this.editcontact.cont_firstname || this.editcontact.cont_firstname.trim() == \"\" || \n            !this.editcontact.cont_lastname || this.editcontact.cont_lastname.trim() == \"\" ||\n            !this.editcontact.cont_birthday || this.editcontact.cont_birthday.trim() == \"\" ||\n            !this.editcontact.cont_cellphone ||  this.editcontact.cont_cellphone.trim() == \"\" ||\n            !this.editcontact.cont_email ||  this.editcontact.cont_email.trim() == \"\" ||\n            !this.editcontact.cont_workaddress || this.editcontact.cont_workaddress.trim() == \"\" ||\n            !this.editcontact.cont_cargo ||  this.editcontact.cont_cargo.trim() == \"\" ||\n            !this.editcontact.cont_workphone ||  this.editcontact.cont_workphone.trim() == \"\" ||\n            !this.editcontact.cont_homeaddress ||  this.editcontact.cont_homeaddress.trim() == \"\" ||\n            !this.editcontact.cont_homephone ||  this.editcontact.cont_homephone.trim() == \"\" ||\n            !this.editcontact.cont_personalemail || this.editcontact.cont_personalemail.trim() == \"\" \n        );\n    }\n    sanitizeHtml(text) {\n        if (text) {\n            var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n            if (!base64test.exec(text)) {\n                text = this.decode64(text);\n            }\n            text = this._sanitizer.bypassSecurityTrustHtml(text);\n            if (text.changingThisBreaksApplicationSecurity) {\n                text = text.changingThisBreaksApplicationSecurity;\n            }\n            return text;\n        } else {\n            return \"\";\n        }\n    }\n\n    decode64(input) {\n        var keyStr = \"ABCDEFGHIJKLMNOP\" +\n            \"QRSTUVWXYZabcdef\" +\n            \"ghijklmnopqrstuv\" +\n            \"wxyz0123456789+/\" +\n            \"=\";\n        var output = \"\";\n        var chr1, chr2, chr3 = \"\";\n        var enc1, enc2, enc3, enc4 = \"\";\n        var i = 0;\n\n        // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n        var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n        if (base64test.exec(input)) {\n            return false;\n        }\n        input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n        do {\n            enc1 = keyStr.indexOf(input.charAt(i++));\n            enc2 = keyStr.indexOf(input.charAt(i++));\n            enc3 = keyStr.indexOf(input.charAt(i++));\n            enc4 = keyStr.indexOf(input.charAt(i++));\n\n            chr1 = (enc1 << 2) | (enc2 >> 4);\n            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n            chr3 = ((enc3 & 3) << 6) | enc4;\n\n            output = output + String.fromCharCode(chr1);\n\n            if (enc3 != 64) {\n                output = output + String.fromCharCode(chr2);\n            }\n            if (enc4 != 64) {\n                output = output + String.fromCharCode(chr3);\n            }\n\n            chr1 = chr2 = chr3 = \"\";\n            enc1 = enc2 = enc3 = enc4 = \"\";\n\n        } while (i < input.length);\n\n        return unescape(output);\n    }\n\n    encode64(input) {\n        var keyStr = \"ABCDEFGHIJKLMNOP\" +\n            \"QRSTUVWXYZabcdef\" +\n            \"ghijklmnopqrstuv\" +\n            \"wxyz0123456789+/\" +\n            \"=\";\n        input = escape(input);\n        var output = \"\";\n        var chr1, chr2, chr3 = \"\";\n        var enc1, enc2, enc3, enc4 = \"\";\n        var i = 0;\n\n        do {\n            chr1 = input.charCodeAt(i++);\n            chr2 = input.charCodeAt(i++);\n            chr3 = input.charCodeAt(i++);\n            enc1 = chr1 >> 2;\n            enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n            enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n            enc4 = chr3 & 63;\n            if (isNaN(chr2)) {\n                enc3 = enc4 = 64;\n            } else if (isNaN(chr3)) {\n                enc4 = 64;\n            }\n            output = output +\n                keyStr.charAt(enc1) +\n                keyStr.charAt(enc2) +\n                keyStr.charAt(enc3) +\n                keyStr.charAt(enc4);\n            chr1 = chr2 = chr3 = \"\";\n            enc1 = enc2 = enc3 = enc4 = \"\";\n        } while (i < input.length);\n        return output;\n    }\n\n    escapeHtml(text) {\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n    filterMultipleShared(event) {\n        let query = event.query;\n        this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n      }\n    \n      filterShared(query, countries) {\n        let filtered = [];\n        for (let i = 0; i < countries.length; i++) {\n          let country = countries[i];\n          if (\n              country.label.toLowerCase().indexOf(query.toLowerCase()) >= 0\n          ) {\n            filtered.push(country);\n          }\n        }\n        return filtered;\n      }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/directory/contact.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport template from \"./sprint.template.html\";\nimport { TaskService } from \"../../services/task.service\";\nimport { DailyService } from \"../../services/daily.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { MailService } from \"../../services/mail.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { UsersService } from '../../services/users.service';\nimport { DashboardService } from \"../../services/dashboard.service\";\nimport { UnitsService } from \"../../services/units.service\";\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from '../../pipes';\nimport { ProductService } from '../../services/product.service';\n\n\n@Component({\n    selector: \"sprint\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe]\n})\nexport class SprintComponent {\n    constructor(\n        title: Title,\n        router: Router,\n        sanitizer: DomSanitizer,\n        arouter: ActivatedRoute,\n        taskService: TaskService,\n        groupService: GroupService,\n        sprintService: SprintService,\n        mailService: MailService,\n        ProjectService: ProjectService,\n        productService: ProductService,\n        noteService: NoteService,\n        userService: UsersService,\n        toastr: ToastrService,\n        dailyService: DailyService,\n        confirmationService: ConfirmationService,\n        dashboardService: DashboardService,\n        unitsService: UnitsService\n    ) {\n        this._title = title;\n        this._router = router;\n        this._sanitizer = sanitizer;\n        this._groups = groupService;\n        this._sprint = sprintService;\n        this._tasks = taskService;\n        this._projects = ProjectService;\n        this._notes = noteService;\n        this.confirm = confirmationService;\n        this._aroute = arouter;\n        this._dashBoard = dashboardService;\n        this._daily = dailyService;\n        this._products = productService;\n        this._user = userService;\n        this._projects = ProjectService;\n        this._units = unitsService;\n        this.search = \"\";\n        this.searchtask = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.limitpage = 10;\n        this.itemcount = 0;\n        this.groups = [];\n        this.lblgroups = [];\n        this.sptasks = [];\n        this.subtask = { attachments: [] };\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this.mail = { attachments: [] };\n        this.note = { attachments: [] };\n        this.mails = [];\n        this.searchMail = \"\";\n        this.listmails = [];\n        this.listmailsa = [];\n        this.sprints = [];\n        this.sprint = [];\n        this.team = [];\n        this.sprintTask = [];\n        this.mdT = { project: {} };\n        this.mcT = { project: {} };\n        this.selectedprojects = [];\n        this.task = { usersShared: [], project: {}, criteriaTask: [], attachments: [] };\n        this.mysprints = [];\n        this.myProjects = [];\n        this.sprintselected = \"\";\n        this.seltasks = [];\n        this.sprintn = [];\n        this.note = { attachments: [] };\n        this.mdT.total_adjusted = [];\n        this.mdT = { project: {}, comments: [] };\n        this.taskattch = { attachments: [] };\n        this.textState = [\"\"];\n        this.posState = \"user_asigned\";\n        this.getmyProjects();\n        this.sumpoints = [];\n        this.totalpoints_p = 0;\n        this.totalpoints_d = 0;\n        this.burndownData = {};\n        this.myUsers = [];\n        this.contactsTree = [];\n        this.contacts = [];\n        this.searchuser = \"\";\n        this.selectedNodes = [];\n        this.selectedUsers = [];\n        this.dayJob = \"\";\n        this.isLoading = false;\n        this.sprintrefs = true;\n        this.dayView = [];\n        this.pointssum = 0;\n        this.totalp = 0;\n        this.tagMenu = 1;\n        this.levels = [];\n        this.endSprind = 0;\n        this.getLevels();\n        this.getProducts();\n        this.getSprintDetail();\n        this.getSprint();\n        this.getAllMyUsers();\n        this.getMyUserData();\n        this.getCRMUsers();\n        this.getMySpri();\n\n    }\n\n    ngAfterViewChecked(){\n        this.isLoading = false;\n        this.sprintrefs = true;\n    }\n    \n    ngAfterViewInit() {\n        this._units.getUnits().subscribe(res => {\n            this.units = [];\n            for (let c of res.data) {\n              this.units.push({ label: c.unit_desc, value: c.unit_id });\n            }\n          });\n    }\n\n    getProducts() {\n        this._products.getProducts().subscribe(data => {\n            this.isLoading = false;\n            this.sprintrefs = true;\n            this.products = [];\n            for (let c of data.data) {\n                this.products.push({ label: c.prod_name, value: c.prod_id });\n            }\n\n        });\n    }\n\n    getAllMyUsers() {\n        this.userslbl = [];\n        this._user.getMyUsers().subscribe(data => {\n            this.isLoading = false;\n            this.sprintrefs = true;\n            this.users = data.data;\n            for (let c of data.data) {\n                this.userslbl.push({ label: c.user_lastname + \", \" + c.user_name, value: c.user_id });\n            }\n        });\n    }\n    showModalProject(idproj) {\n        $(\"#myProject\" + idproj).click();\n    }\n    getMyUserData() {\n        this._user.getMyUserData().subscribe(data => {\n            this.isLoading = false;\n            this.sprintrefs = true;\n            this.myuser = data.data[0].user_id;\n        });\n    }\n\n    getCRMUsers() {\n        this.userslblShareWith = [];\n        this.usersShareWith = [];\n        this.usersShareWith_a = [];\n        this._user.getCRMUsers().subscribe(data => {\n            this.isLoading = false;\n            this.sprintrefs = true;\n            this.usersShareWith = data.data;\n            this.usersShareWith_a = data.data;\n            this.users = data.data;\n            for (let c of data.data) {\n                this.userslblShareWith.push({\n                    label: c.user_lastname + \", \" + c.user_name,\n                    value: c.user_id\n                });\n            }\n        });\n    }\n\n    getMySpri() {\n        this._sprint.getMySpri().subscribe(res => {\n            this.isLoading = false;\n            this.sprintrefs = true;\n            this.mysprints = [];\n            this.mysprints.push({\n                label: \"Backlog\",\n                value: 0\n            });\n            let cont = 0;\n            for (let c of res.data) {\n                if (cont == 0) {\n                    this.endSprind = c.spri_end;\n\n                }\n                this.mysprints.push({\n                    label: c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n                    value: c.spri_id\n                });\n                cont++;\n            }\n        });\n        return this.endSprind;\n    }\n\n\n\n    reload() {\n        this.isLoading = true;\n        this.sprintrefs = false;\n        this.getProducts();\n        this.getSprintDetail();\n        this.getSprint();\n        this.getAllMyUsers();\n        this.getMyUserData();\n        this.getCRMUsers();\n        this.getMySpri();\n    }\n\n    getmyProjects() {\n        this.myProjects = [];\n        this.selectedprojects = [];\n        this._projects.getmyProjects().subscribe(res => {\n            this.myProjects.push({ label: \" Untracked\", value: \"0\", idcolor: \"#fff\" });\n            this.selectedprojects = [0];\n            for (var i in res.data) {\n                for (let c of res.data[i]) {\n                    this.myProjects.push({ label: c.proj_subject, value: c.proj_id, idcolor: c.idcolor });\n                    this.selectedprojects.push(c.proj_id);\n                }\n            }\n\n        });\n    }\n\n    getSprintDetail() {\n        this.seltasks = [];\n        this._aroute.params.forEach(params => {\n            this._sprint.getSprintDetail(params.idsprint).subscribe(res => {\n                this.sprints = res.data;\n                this.sprintselected = params.idsprint;\n                this.updatePoints(params.idsprint);\n            });\n        });\n    }\n\n    updatePoints(spri_id) {\n        this._sprint.getSum(spri_id).subscribe(res => {\n            this.sumpoints = res.data;\n            this.showPoints(this.textState);\n        });\n    }\n\n    updateList(sptsel) {\n        if (this.textState[0] != \"\") {\n            this.updatePoints(sptsel);\n            this.showPoints(this.textState);\n        }\n    }\n\n    getSprint() {\n        this._aroute.params.forEach(params => {\n            this._sprint.getSprint(params.idsprint).subscribe(res => {\n                this.stTitle = \"Squadlinx\";\n                if (localStorage.getItem('title')) {\n                    this.stTitle = localStorage.getItem('title');\n                }\n                this._title.setTitle(\".:: \" + this.stTitle + \" : Sprint #\" + params.idsprint + \" ::.\");\n                this.sprint = res.data;\n                this._sprint.getTeam(this.sprint.grop_id).subscribe(ans => {\n                    this.team = ans.data;\n                    for (let i = 0; i < ans.data.length; i++) {\n                        // if ( ans.data[i].user_id != this.team[1].user_id ){\n                        this.selectedUsers.push(ans.data[i].user_id);\n                        this.selectedNodes.push(ans.data[i].user_id);\n                        // }\n                        this.selectedUsers_2 = this.selectedUsers;\n                        this.selectedNodes_2 = this.selectedNodes;\n                    }\n                    if (this.team.length > 0) {\n                        $('#team-name').text(this.team[0].user_name + \" \" + this.team[0].user_lastname);\n                        $('#team-profile').text(this.team[0].role_name);\n                    }\n                    this.getBurnDown(this.sprint.spri_id);\n                });\n            });\n        });\n    }\n\n    teamInfo(name, lastname, profile, state, userid) {\n        this.pointssum = 0;\n        this.selectedNodes = [];\n        this.selectedUsers = [];\n        if (userid == 0) {\n            this.selectedUsers = this.selectedUsers_2;\n            this.selectedNodes = this.selectedNodes_2;\n        } else {\n            this.selectedNodes.push(userid);\n            this.selectedUsers.push(userid);\n        }\n        this.getBurnDown(this.sprintselected);\n        this.totalpoints_p = 0;\n        this.totalpoints_d = 0;\n        if (state == \"0\") {\n            this.textState = [\"\"];\n            this.posState = \"user_asigned\";\n\n        } else {\n            this.textState = state;\n            this.posState = \"user_asigned\";\n            this.showPoints(state);\n        }\n        $('#team-name').text(name + \" \" + lastname);\n        $('#team-profile').text(profile);\n    }\n\n    showPoints(st) {\n        for (var i = 0; i < this.sumpoints.length; i++) {\n            if (this.sumpoints[i].user_id == st) {\n                for (var j = 0; j < this.sumpoints[i].points.length; j++) {\n                    if (this.sumpoints[i].points[j].sum_p != null) {\n                        this.totalpoints_p = this.sumpoints[i].points[j].sum_p;\n                        this.totalpoints_d = this.sumpoints[i].points[j].sum_d;\n                        this.totalpoints_pending = this.sumpoints[i].points[j].pendpoints;\n                    }\n                }\n            }\n        }\n    }\n\n    getBurnDown(sp) {\n        this._dashBoard.getBurndown(sp).subscribe(res => {\n            if (res) {\n                var datasets = [];\n                for (let u in res.data.users) {\n                    if (this.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n                        datasets.push({\n                            label: res.data.users[u].label,\n                            data: res.data.users[u].data,\n                            fill: false,\n                            borderColor: res.data.users[u].color,\n                            backgroundColor: res.data.users[u].color,\n                            user: res.data.users[u].user_id\n                        });\n                    }\n                }\n                datasets.push({\n                    label: res.data.users[0].label,\n                    data: res.data.users[0].data,\n                    fill: false,\n                    borderColor: res.data.users[0].color,\n                    backgroundColor: res.data.users[0].color\n                });\n                this.burndownData = {\n                    labels: res.data.days,\n                    datasets: datasets,\n                    options: { legend: { boxWidth: 40 } },\n                    daily: res.data.daily\n                };\n            }\n        });\n    }\n\n    chartClicked(event) {\n        this.dayJob = this.burndownData.daily[event.element._index];\n        this._daily\n            .getDay4Usr(\n                this.burndownData.datasets[event.element._datasetIndex].user,\n                this.burndownData.daily[event.element._index]\n            )\n            .subscribe(res => {\n                this.dayView = res.data;\n                this.totalp = 0;\n                var totalp = 0;\n                var a = 0;\n                for (var i = 0; i < this.dayView.length; i++) {\n                    a = parseFloat(this.dayView[i].dail_points);\n                    totalp += parseFloat(a);\n                }\n                this.totalp = totalp.toFixed(2);\n                $(\"#mdDayView\").modal(\"show\");\n            });\n    }\n\n    showburndown() {\n        this.getTree();\n        $(\"#mdBurndown\").modal(\"show\");\n    }\n\n    getNameUser(user_name, user_lastname) {\n        if (user_name && user_lastname) {\n            let names = user_name;\n            let surnames = user_lastname;\n            let ellipsis = \"…\";\n            let fullName = names + ' ' + surnames;\n\n            if (fullName.length <= 14) {\n                return fullName;\n            } else {\n\n                if (names.length <= 14 && surnames.length <= 14) {\n                    fullName = names + ' ' + surnames;\n                }\n\n                if (names.length <= 14 && surnames.length > 14) {\n                    surnames = surnames.substring(0, 14) + ellipsis;\n                    fullName = names + ' ' + surnames;\n                }\n\n                if (names.length > 14 && surnames.length <= 14) {\n                    let arrayNames = names.split(' ');\n                    let firstName = arrayNames[0];\n                    fullName = firstName + ' ' + surnames;\n                }\n\n                if (names.length > 14 && surnames.length > 14) {\n                    let arrayNames = names.split(' ');\n                    let firstName = arrayNames[0];\n                    surnames = surnames.substring(0, 14) + ellipsis;\n                    fullName = firstName + ' ' + surnames;\n                }\n\n                return fullName;\n            }\n        } else {\n            return \"\";\n        }\n    }\n\n    getTree() {\n        this.myUsers = [];\n        this.contactsTree = [];\n        this._user.getMyUsers().subscribe(data => {\n            this.contacts = data.data;\n            let group = \"0\";\n            let groupname = \"\";\n            let children = [];\n\n            for (let u of data.data) {\n                this.myUsers.push(u.user_id);\n                if (group != u.grop_id) {\n                    if (group != \"0\") {\n                        this.contactsTree.push({\n                            \"label\": groupname,\n                            \"data\": group,\n                            \"expanded\": true,\n                            \"children\": children\n                        });\n                    }\n                    groupname = u.groupname;\n                    group = u.grop_id;\n                    children = [];\n                }\n                children.push({\n                    \"label\": this.getNameUser(u.user_name, u.user_lastname),\n                    \"data\": u.user_id\n                });\n            }\n            if (group != \"0\") {\n                this.contactsTree.push({\n                    \"label\": groupname,\n                    \"data\": group,\n                    \"expanded\": true,\n                    \"children\": children\n                });\n            }\n        });\n    }\n\n    updateSelect(event) {\n        this.selectedUsers = [];\n        for (let c of this.selectedNodes) {\n            if (!c.children) {\n                this.selectedUsers.push(c);\n            }\n        }\n        this.getBurnDown(this.sprintselected);\n    }\n\n    doneFilter() {\n        this.searchuser = \"\";\n    }\n\n    selectAllItems() {\n\n        if (this.selectedNodes.length > 0) {\n            this.selectedNodes = [];\n        } else {\n            this.selectedNodes = [];\n            for (var t in this.contactsTree) {\n                this.selectedNodes.push(this.contactsTree[t].data);\n                if (this.contactsTree[t].children.length > 0) {\n                    for (var c in this.contactsTree[t].children) {\n                        this.selectedNodes.push(this.contactsTree[t].children[c].data);\n                    }\n                }\n            }\n        }\n\n        this.updateSelect(event);\n    }\n\n    selectAllChildrens(childrens, idparent) {\n        let m = 0;\n        let n = 0;\n        for (var x in this.selectedNodes) {\n            if (this.selectedNodes[x] == idparent) {\n                m++;\n            } else {\n                n++;\n            }\n        }\n\n        if (m == 1 && n == 0) {\n            this.selectedNodes = [];\n            this.selectedNodes.push(idparent);\n            if (childrens.length > 0) {\n                for (var c in childrens) {\n                    if (m == 1) {\n                        this.selectedNodes.push(childrens[c].data);\n                    }\n                }\n            }\n        } else {\n            this.selectedNodes = [];\n        }\n    }\n\n    updateSelectA(event, children, idparent) {\n        this.selectAllChildrens(children, idparent);\n        this.selectedUsers = [];\n        for (let c of this.selectedNodes) {\n            if (!c.children) {\n                this.selectedUsers.push(c);\n            }\n        }\n        this.getBurnDown(this.sprintselected);\n    }\n\n    getSprintTk(idsprint) {\n        this._sprint.getSprint(idsprint).subscribe(res => {\n            this.mdT.sprint = res.data;\n        });\n    }\n\n    getAttachments(taskid) {\n        this._tasks.getAttachments(taskid).subscribe(res => {\n            this.mdT.attachments = res.data;\n            this.task.attachments = res.data;\n            for (var i = 0; i < this.mdT.attachments.length; i++) {\n                if (i == 0) {\n                    this.mdT.total_attachments = 1;\n                } else {\n                    this.mdT.total_attachments++;\n                }\n            }\n            for (var i = 0; i < this.task.attachments.length; i++) {\n                if (i == 0) {\n                    this.task.total_attachments = 1;\n                } else {\n                    this.task.total_attachments++;\n                }\n            }\n        });\n    }\n\n    addSpTask() {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.seltasks = [];\n        this.currentpage = 1;\n        this.task_description = \"\";\n        this.getList();\n        $(\"#mdAddSpTask\").modal(\"show\");\n    }\n\n    getList() {\n        if (this.currentpage == 0) {\n            this.currentpage = 1;\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.searchtask.trim()\n            };\n        } else {\n            var filter = {\n                start: this.currentpage * this.limitpage - this.limitpage,\n                end: this.limitpage,\n                all: this.searchtask.trim()\n            };\n        }\n\n        this._sprint.getTasksWoSp(filter).subscribe(data => {\n            this.sprintTask = data.data.data;\n            this.itemcount = data.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n        this.cont = 0;\n    }\n\n    changedExtraHandler(event) {\n        if (event.keyCode == 13) {\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.searchtask.trim()\n            };\n            this._sprint.getTasksWoSp(filter).subscribe(data => {\n                this.sprintTask = data.data.data;\n                this.itemcount = data.data.count;\n                this.lastpage = this.itemcount / this.limitpage;\n                if (this.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(this.lastpage);\n                    this.lastpage = countpag;\n                }\n                this.pages = [];\n                for (let i = 1; i <= this.lastpage; i++) {\n                    this.pages.push(i);\n                }\n                if (this.pages.length == 0) {\n                    this.pages = [1];\n                }\n            });\n            this.cont = 0;\n\n        }\n    }\n\n    filterText() {\n\n        this.currentpage = 1;\n\n        var filter = {\n            start: 0,\n            end: this.limitpage,\n            all: this.searchtask.trim()\n        };\n        this._sprint.getTasksWoSp(filter).subscribe(data => {\n            this.sprintTask = data.data.data;\n            this.itemcount = data.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n        this.cont = 0;\n\n    }\n\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.getList();\n    }\n\n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 10;\n        } else {\n            this.currentpage = Math.round(this.itemcount / this.limitpage);\n            let mod = this.itemcount % this.limitpage;\n            if (mod > 0 && mod < 5) {\n                this.currentpage += 1;\n            }\n        }\n        this.getList();\n    }\n\n    saveSpTask(tasks) {\n        if(tasks.length){\n            let sprintselected = this.sprintselected;\n            this.searchtask = \"\";\n            this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(res => {\n                if (res.data === \"OK\") {\n                    this.toastr.success(\"task(s) added successfully\");\n                    this.getSprintDetail();\n                    this.updateList(sprintselected);\n                } else {\n                    this.toastr.warning(data.message, \"There was an error\");\n                }\n            });\n        } \n        this.showPoints(this.textState);\n    }\n\n    delTaskToSprint(idtk) {\n        let ts = 0;\n        let sprintselected = this.sprintselected;\n        $('[data-toggle=\"tooltip\"]').tooltip('hide');\n        this.confirm.confirm({\n            message: 'Do you want to proceed?',\n            header: 'Confirmation',\n            icon: 'fa fa-question-circle',\n            accept: () => {\n                if (idtk) {\n                    this.seltasks = [];\n                    this.seltasks.push(idtk);\n                    ts = this.seltasks;\n                } else {\n                    ts = this.seltasks;\n                }\n                this._sprint.delSprintTasks(sprintselected, ts).subscribe(res => {\n                    if (res.data == \"OK\") {\n                        this.toastr.success(res.data.message, \"Task deleted successfully\");\n                        this.getSprintDetail();\n                        this.updateList(sprintselected);\n                    } else {\n                        this.toastr.error(res.message, \"You don't have permits for this action\");\n                    }\n                    this.seltasks = [];\n                    this.pointssum = 0;\n                });\n            },\n            reject: () => { }\n        });\n\n    }\n\n    saveTaskToSprint(idSprint) {\n        if ((this.task_description != \"\" || this.task_description != null) && this.task.task_description == undefined) {\n            this.task.task_description = this.task_description;\n        }\n        this.task.spri_id = idSprint;\n        this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n        this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n        this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n        this.task.task_delivery = new Date(this.task.task_delivery);\n        this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n        //reasignacion de la variable con un array de ids de usuarios\n        let users_share = [];\n\n        for (let user in this.task.usersShared) {\n            users_share.push(this.task.usersShared[user].user_id);\n        }\n\n        let task = Object.assign({}, this.task);\n        task.unit_points = this.task.unit_points;\n        task.unit_id = this.task.unit_id;\n        task.usersShared = users_share;\n        task.isrequest = false;\n        let criteria_task = [];\n        let fields_empty = false;\n\n        for (let i in this.task.criteriaTask) {\n            if (this.task.criteriaTask[i].tkcr_description && this.task.criteriaTask[i].tkcr_description.trim() != \"\") {\n                criteria_task.push(this.task.criteriaTask[i].tkcr_num + '|*|' + this.task.criteriaTask[i].tkcr_description);\n            } else {\n                fields_empty = true;\n            }\n        }\n\n        if (this.task.unit_points == 0 || this.task.unit_points == null) {\n            task.unit_points = \"\";\n        }\n        if (this.task.unit_id == 0) {\n            task.unit_id = \"\";\n        }\n\n        if (fields_empty == false) {\n            task.criteriaTask = criteria_task;\n            this.isLoading = true;\n            this._tasks.putTask(task).subscribe(data => {\n                this.isLoading = false;\n                if (data.data === \"\" || data.data === \"0\") {\n                    this.toastr.warning(data.message, \"Bad news! Error saving task\");\n                } else {\n                    this.toastr.success(data.message, \"Task saved successfully\");\n                }\n                $(\"#mdAddTaskToSprint\").modal(\"hide\");\n                this.getSprintDetail();\n                this.task = { attachments: [] };\n            });\n        } else {\n            this.toastr.warning(\"Empty form fields\");\n        }\n        this.pointssum = 0;\n    }\n\n    selectAll(type) {\n        if (type == 1) {\n            var items = this.sprints;\n        } else {\n            var items = this.sprintTask;\n        }\n        if (this.seltasks.length > 0) {\n            this.seltasks = [];\n        } else {\n            this.seltasks = [];\n            items\n            for (var t in items) {\n                this.seltasks.push(items[t].task_id);\n            }\n        }\n    }\n\n    filterMultiple(event) {\n        let query = event.query;\n        this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n\n    filter(query, countries) {\n        let filtered = [];\n        for (let i = 0; i < countries.length; i++) {\n            let country = countries[i];\n            if (\n                country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n            ) {\n                filtered.push(country);\n            }\n        }\n        return filtered;\n    }\n\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        var temporal = document.createElement(\"div\");\n        temporal.innerHTML = text;\n        var text = temporal.textContent || temporal.innerText || \"\";\n\n        return text;\n    }\n\n    sanitizeHtml(text) {\n        if (text) {\n            var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n            if (!base64test.exec(text)) {\n                text = this.decode64(text);\n            }\n            text = this._sanitizer.bypassSecurityTrustHtml(text);\n            if (text.changingThisBreaksApplicationSecurity) {\n                text = text.changingThisBreaksApplicationSecurity;\n            }\n            return text;\n        } else {\n            return \"\";\n        }\n    }\n\n    onChangeTask(event, action) {\n        if (action == \"new\") {\n            var files = event.files;\n            if (this.taskattch.attachments.length > 0) {\n                for (let c of this.taskattch.attachments) {\n                    if (files[0][\"name\"] == c.name) { } else {\n                        this.taskattch.attachments.push(files[0]);\n                    }\n                }\n            } else {\n                this.taskattch.attachments.push(files[0]);\n            }\n        } else if (action == \"delete\") {\n            var file = event.file;\n            for (let c of this.taskattch.attachments) {\n                if (file[\"name\"] == c.name) {\n                    var posattch = this.taskattch.attachments.indexOf(c);\n                    this.taskattch.attachments.splice(posattch);\n                }\n            }\n        }\n    }\n\n    onUploadAttachment(taskid, form) {\n        this.task.task_id = taskid;\n        this._tasks.putAttachments(this.task).subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n                this.toastr.error(res.message, \"Error!\");\n            } else {\n                this.toastr.success(res.message, \"Attachments uploaded successfully\");\n                this.task.attachments = [];\n                this.getAttachments(taskid);\n                form.clear();\n            }\n        });\n    }\n\n    addTaskToSprint() {\n        this.task_description = \"\";\n        this.task = { usersShared: [], project: {}, attachments: [] };\n        this.task.criteriaTask = [];\n        this.activeTabDescription();\n        \n    }\n\n    addTask() {\n        this.task = { project: {}, attachments: [] };\n        this.task.criteriaTask = [];\n        this.task.task_description = \"\";\n        this.task.unit_id = 0;\n        $('#mdAddTaskToSprint').modal('show');\n        this.activeTabDescription();\n    }\n\n\n    editTask(idtk) {\n        this.task = { project: {}, attachments: [] };\n        this._tasks.getTask(idtk.task_id).subscribe(res => {\n            this.task.criteriaTask = res.data.criteriaTask;\n            // res.data.task_description = this.escapeHtml(res.data.task_description);\n            this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n                this.task.attachments = res.data;\n                this._tasks.getTaskFields(idtk.task_id).subscribe(res => {\n                    this.task.form = res.data;\n                });\n            });\n            this.task = res.data;\n            $('#mdAddTaskToSprint').modal('show');\n            this.activeTabDescription();\n        });\n    }\n\n    onChange(event) {\n        var files = event.srcElement.files;\n        this.task.attachments.push(files[0]);\n    }\n\n    deleteAttachment(att) {\n        var pos = this.task.attachments.indexOf(att.name);\n        this.task.attachments.splice(pos, 1);\n    }\n\n    deleteAttachmentNT(att) {\n        for (var i in this.note.attachments) {\n            if (this.note.attachments[i] === att) {\n                this.note.attachments.splice(i, 1);\n                break;\n            }\n        }\n    }\n\n    deleteAttachment_editTask(task, att) {\n        for (var i in task.attachments) {\n            if (task.attachments[i] === att) {\n                this._tasks\n                    .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n                    .subscribe(res => {\n                        if (res.data === \"\" || res.data === \"0\") {\n                            this.toastr.error(res.message, \"Error!\");\n                        } else {\n                            this.toastr.success(\n                                res.message,\n                                \"Attachment deleted successfully\"\n                            );\n                            this.getAttachments(task.task_id);\n                        }\n                    });\n                task.attachments.splice(i, 1);\n                break;\n            }\n        }\n\n        if (task.attachments.length == 0) {\n            this.activeTabDescription();\n        }\n\n    }\n\n    deleteAttachment_newTask(att) {\n\n        var index = 0;\n        for (let i in this.task.attachments) {\n            if (att.name == this.task.attachments[i].name) {\n                index = i;\n                break;\n            }\n        }\n\n        this.task.attachments.splice(index, 1);\n\n        if (this.task.attachments.length == 0) {\n            this.activeTabDescription();\n        }\n\n    }\n\n    round(value, n) {\n        if (!n || n == 0) {\n            n = 1;\n        } else {\n            n = 10 * n;\n        }\n        return Math.round(value * n) / n;\n    }\n\n    closeModal() {\n        this.searchtask = \"\";\n    }\n\n    validateTask() {\n        return (!this.task.task_subject ||\n            this.task.task_subject.trim() == \"\" ||\n            !this.task.task_description ||\n            this.task.task_description.trim() == \"\" ||\n            !this.task.prod_id ||\n            this.task.prod_id.trim() == \"\" ||\n            !this.task.user_asigned ||\n            this.task.user_asigned.trim() == \"\" ||\n            !this.task.task_delivery ||\n            this.task.task_delivery == \"\" ||\n            this.task.task_delivery == \"undefined\" ||\n            !this.task.task_points ||\n            this.task.task_points == \"\" ||\n            this.task.task_points == \"undefined\" ||\n            ((!this.task.unit_points && this.task.unit_id) || (this.task.unit_points && !this.task.unit_id) || (this.task.unit_points <= 0 && this.task.unit_id))\n        );\n    }\n\n    setPage(opt) {\n        if (opt == 1) {\n            this.tagMenu = 1;\n        }\n        if (opt == 2) {\n            this.tagMenu = 2;\n        }\n        if (opt == 3) {\n            this.tagMenu = 3;\n        }\n        if (opt == 4) {\n            this.tagMenu = 4;\n        }\n    }\n\n    showModaltk(tkid) {\n        $(\"#myTask\" + tkid).click();\n    }\n\n    //Eliminar un criterio de aceptacion\n    deleteFieldForm(i) {\n        this.task.criteriaTask.splice(i, 1);\n\n        let j = 1;\n\n        for (let i = 0; i < this.task.criteriaTask.length; i++) {\n            this.task.criteriaTask[i].tkcr_num = j;\n            j++;\n        }\n\n        if (this.task.criteriaTask.length == 0) {\n            this.activeTabDescription();\n        }\n    }\n\n    //Obtener formulario new task para registrar los criterios de aceptacion\n    getFormTaskCriteria(task_id) {\n        this.task.criteriaTask = [];\n        this._tasks.getFormTaskCriteria(task_id).subscribe(res => {\n\n            this.task.criteriaTask = res.data.data;\n\n        });\n    }\n\n    //Añadir un nuevo criterio de aceptacion\n    addFieldForm() {\n        let j = 1;\n        if (this.task.criteriaTask.length == 4) {\n            this.toastr.warning(\"You have reached the maximum number of criteria\");\n        } else {\n            let valor = this.task.criteriaTask.length + j;\n            this.task.criteriaTask.push({ tkcr_num: valor, tkcr_description: \"\" });\n            j++;\n        }\n    }\n\n    //Mostrar ventana duplicar tarea, con los datos de la tarea seleccionada\n    showDuplicateTaskModal(idtk) {\n        this.task = { usersShared: [], project: {}, attachments: [] };\n        this._tasks.getTask(idtk).subscribe(res => {\n            this.task.criteriaTask = res.data.criteriaTask;\n            this._tasks.getTaskFields(idtk).subscribe(res => {\n                this.task.form = res.data;\n            });\n            this.task = res.data;\n            this.task.task_description_d = this.task.task_description;\n            this.task.task_delivery = this.endSprind;\n        });\n        $(\"#mdDuplicateTask\").modal(\"show\");\n        this.activeTabDescription_duplicateTask();\n    }\n\n    validateDuplicateTask() {\n        return (!this.task.task_subject ||\n            this.task.task_subject.trim() == \"\" ||\n            !this.task.task_description ||\n            this.task.task_description.trim() == \"\" ||\n            !this.task.prod_id ||\n            this.task.prod_id.trim() == \"\" ||\n            !this.task.task_delivery ||\n            this.task.task_delivery == \"\" ||\n            this.task.task_delivery == \"undefined\" ||\n            !this.task.task_points ||\n            this.task.task_points == \"\" ||\n            this.task.task_points == \"undefined\"\n        );\n    }\n\n    saveDuplicateTask() {\n\n        let task = {};\n        this.task.task_description_d = this.task.task_description_d.split(\"\\t\").join(\"\");\n        this.task.task_description_d = this.task.task_description_d.split(\"\\n\").join(\"\");\n        this.task.task_description_d = this.task.task_description_d.split(\"\\r\").join(\"\");\n        this.task.task_delivery = new Date(this.task.task_delivery);\n        this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n\n        task.task_subject = this.task.task_subject;\n        task.prod_id = this.task.prod_id;\n        task.user_asigned = this.task.user_asigned;\n        task.proj_id = this.task.proj_id;\n        task.spri_id = this.task.spri_id;\n        task.task_delivery = this.task.task_delivery;\n        task.task_points = this.task.task_points;\n        task.task_description = this.task.task_description_d;\n        task.attachments = this.task.attachments;\n        task.tklv_id = this.task.tklv_id;\n        task.unit_points = this.task.unit_points;\n        task.unit_id = this.task.unit_id;\n        task.isrequest = false;\n\n        if (this.task.unit_points == 0 || this.task.unit_points == null) {\n            task.unit_points = \"\";\n        }\n        if (this.task.unit_id == 0) {\n            task.unit_id = \"\";\n        } \n\n        //reasignacion de la variable con un array de ids de usuarios\n        let users_share = [];\n\n        for (let user in this.task.usersShared) {\n            users_share.push(this.task.usersShared[user].user_id);\n        }\n\n        task.usersShared = users_share;\n\n        let criteria_task = [];\n        let campos = [];\n        let fields_empty = false;\n\n        for (let i in this.task.criteriaTask) {\n            if (this.task.criteriaTask[i].tkcr_description && this.task.criteriaTask[i].tkcr_description.trim() != \"\") {\n                criteria_task.push(this.task.criteriaTask[i].tkcr_num + '|*|' + this.task.criteriaTask[i].tkcr_description);\n            } else {\n                fields_empty = true;\n            }\n        }\n\n        for (let i in this.task.form) {\n            campos.push(this.task.form[i].form_id + '|*|' + this.task.form[i].form_data);\n        }\n\n        if (fields_empty == false) {\n            task.criteriaTask = criteria_task;\n            task.form = campos;\n            this.isLoading = true;\n\n            this._tasks.duplicateTask(task).subscribe(res => {\n                this.isLoading = false;\n                if (res.data && res.data != null) {\n                    this.toastr.success(res.message);\n                    $(\"#mdDuplicateTask\").modal(\"hide\");\n                    this.getSprintDetail();\n                } else {\n                    this.toastr.warning(res.message, \"Error\");\n                }\n                // this.task = { attachments: [] };\n                // this.task.task_description = \"\";\n            });\n\n        } else {\n            this.toastr.warning(\"Empty form fields\");\n\n        }\n    }\n\n    setPageDupliTk(opt) {\n        if (opt == 1) {\n            this.tagMenuDupliTk = 1;\n        }\n        if (opt == 2) {\n            this.tagMenuDupliTk = 2;\n        }\n        if (opt == 3) {\n            this.tagMenuDupliTk = 3;\n        }\n    }\n\n    filterMultipleShared(event) {\n        let query = event.query;\n        this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n    }\n\n    filterShared(query, countries) {\n        let filtered = [];\n        for (let i = 0; i < countries.length; i++) {\n            let country = countries[i];\n            if (\n                country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n            ) {\n                filtered.push(country);\n            }\n        }\n        return filtered;\n    }\n\n\n    deleteAttachmentDuplicateTask(task, att) {\n\n        var index = 0;\n        for (let i in this.task.attachments) {\n            if (att.name == this.task.attachments[i].name) {\n                index = i;\n                break;\n            }\n        }\n\n        this.task.attachments.splice(index, 1);\n\n        if (this.task.attachments.length == 0) {\n            this.activeTabDescription_duplicateTask();\n        }\n\n    }\n\n    deleteFieldFormDuplicateTask(i) {\n        this.task.criteriaTask.splice(i, 1);\n\n        let j = 1;\n\n        for (let i = 0; i < this.task.criteriaTask.length; i++) {\n            this.task.criteriaTask[i].tkcr_num = j;\n            j++;\n        }\n\n        if (this.task.criteriaTask.length == 0) {\n            this.activeTabDescription_duplicateTask();\n        }\n    }\n\n    activeTabDescription() {\n        this.tagMenu = 1;\n        $('#li_criteria_sprint_newTask').removeClass('active');\n        $('#associateFormTask_AddTaskToSprint').removeClass('active');\n        $('#li_attachments_sprint_newtask').removeClass('active');\n        $('#descriptionTask_AddTaskToSprint').addClass('active');\n    }\n\n    activeTabDescription_duplicateTask() {\n        this.tagMenuDupliTk = 1;\n        $('#li_criteria_duplicateTask').removeClass('active');\n        $('#li_attachments_duplicateTask').removeClass('active');\n        $('#li_description_duplicateTask').addClass('active');\n    }\n\n    getLevels() {\n        this._tasks.getLevels().subscribe(res => {\n            for (let level of res.data) {\n                this.levels.push({ label: level.tklv_description, value: level.tklv_id });\n            }\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/sprint/sprint.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\nimport template from \"./sprints.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\n\n@Component({\n  selector: \"sprints\",\n  template: template\n})\nexport class SprintsComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    groupService: GroupService,\n    sprintService: SprintService,\n    toastr: ToastrService,\n    confirmationService: ConfirmationService\n  ) {\n    this._title = title;\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n      };\n    this.confirm = confirmationService;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._sprint = sprintService;\n    this.search = \"\";\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Sprints ::.\");\n    this.posOrder = \"\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.textState = [\"\"];\n    this.posState = \"para_status\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 16;\n    this.groups = [];\n    this.lblgroups = [];\n    this.sprint = [];\n    this.newSprint = [];\n    this.sprintdays = [];\n    this.sprints = [];\n    this.editvalue = false;\n    this.seletedDaysSprint = [];\n    this._groups.getmyGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n  }\n\n  ngOnInit() {\n    this.getMySprints();\n  }\n\n  changedExtraHandler(changes) {\n    localStorage.setItem(\"sprisearch\", changes);\n  }\n\n  edit(spr) {\n    this._sprint.getSprintFull(spr.spri_id).subscribe(res => {\n      this.newSprint = res.data;\n      this.seletedDaysSprint = [];\n      this.currSprintPts = 0;\n      this.currSprintPts_e = 0;\n      for (var i = 0; i < this.newSprint.spdays.length; i++) {\n        this.seletedDaysSprint.push(this.newSprint.spdays[i].spdy_date);\n        this.currSprintPts += parseFloat(this.newSprint.spdays[i].spdy_value);\n        this.newSprint.spdays[i].spdy_status = true;\n      }\n      this.currSprintPts_e += this.currSprintPts;\n      $(\"#mdAddSprint\").modal(\"show\");\n    });\n  }\n\n  getMySprints() {\n    this._sprint.getListSprints().subscribe(data => {\n      this.sprints = data.data;\n      this.limitpage = this.sprints.length > 16 ? 16 : this.sprints.length;\n      this.itemcount = this.sprints.length;\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n    });\n    var items = document.querySelectorAll(\".group-item\");\n    $(items[0]).css(\"border-right\", \"5px solid #007bd2\");\n  }\n\n  updateTotal(points) {\n\n    var selectdays = this.newSprint.spdays.filter((value) => {\n      return value.spdy_status;\n    });\n    this.editvalue = false;\n    var defaultDur = points / selectdays.length;\n    var defaultDurrounded = Math.round(defaultDur * 10) / 10;\n\n    for (var i = 0; i < this.newSprint.spdays.length; i++) {\n      if (this.newSprint.spdays[i].spdy_status) {\n        this.newSprint.spdays[i].spdy_value = parseFloat(defaultDurrounded);\n      } else {\n        this.newSprint.spdays[i].spdy_value = 0;\n      }\n    }\n    this.calculateTotal();\n  }\n\n  setGroupList(state) {\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.limitpage = this.sprints.length > 16 ? 16 : this.sprints.length;\n    this.itemcount = this.sprints.length;\n  }\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n  }\n  showModal(spr) {\n    this.sprint = spr;\n    $(\"#mdSprint\").modal(\"show\");\n  }\n  delete(spr) {\n    let ts = 0;\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to proceed?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        this._sprint.deleteSprint(spr.spri_id).subscribe(res => {\n          if (res.data == \"OK\") {\n            this.toastr.success(\n              res.data.message,\n              \"Sprint deleted successfully\"\n            );\n          } else {\n            this.toastr.error(\n              res.message,\n              \"The Sprint has one or more associated Tasks! \"\n            );\n          }\n          this.getMySprints();\n        });\n      },\n      reject: () => {}\n    });\n  }\n\n  addSprint() {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.newSprint = {\n      spri_init: \"\",\n      spri_end: \"\",\n      grop_id: \"\",\n      default: \"\",\n      spri_description: \"\",\n      spri_points: \"\",\n      spdays: []\n    };\n    this.currSprintPts = 0;\n  }\n\n  calculateDays(a, b, c) {\n    this.seletedDaysSprint = [];\n    if (\n      !a ||\n      !b ||\n      !c ||\n      a == 0 ||\n      a == null ||\n      a == \"\" ||\n      b == 0 ||\n      b == null ||\n      b == \"\" ||\n      c == 0 ||\n      c == null ||\n      c == \"\"\n    ) {\n      this.toastr.warning(\n        \"Action restricted. There are incomplete fields.\",\n        \"Warning!\"\n      );\n      return false;\n    }\n    if (typeof(a) == \"string\") {\n      let parts = a.split('-');\n      a = new Date(parts[0], parts[1] - 1, parts[2]); \n    }\n    if (typeof(b) == \"string\") {\n      let parts = b.split('-');\n      b = new Date(parts[0], parts[1] - 1, parts[2]); \n    }\n    this.newSprint.spdays = [];\n    this.currSprintPts = 0;\n    this.currSprintPts_e = 0;\n    var msToDay = 1000 * 3600 * 24;\n    var days = (b - a) / msToDay;\n    //var defaultDur = Math.floor(c / (days + 1));\n    var defaultDur = c / (days + 1);\n    var defaultDurrounded = Math.round(defaultDur * 10) / 10;\n    var dayDuration = 0;\n    var dayname = \"\";\n    var weekday = new Array(7);\n    weekday[0] = \"Sunday\";\n    weekday[1] = \"Monday\";\n    weekday[2] = \"Tuesday\";\n    weekday[3] = \"Wednesday\";\n    weekday[4] = \"Thursday\";\n    weekday[5] = \"Friday\";\n    weekday[6] = \"Saturday\";\n    for (var i = 0; i <= days; i++) {\n      var mydate = new Date(a);\n      mydate.setDate(mydate.getDate() + i);\n      dayname = weekday[mydate.getDay()];\n      mydate =\n        mydate.getFullYear() +\n        \"-\" +\n        (mydate.getMonth() + 1) +\n        \"-\" +\n        mydate.getDate();\n      if (i == days) {\n        dayDuration =\n          Math.round(\n            (defaultDurrounded +\n              (this.newSprint.spri_points -\n                (this.currSprintPts + defaultDurrounded))) *\n              10\n          ) / 10;\n      } else {\n        dayDuration = Math.round(defaultDurrounded * 10) / 10;\n      }\n      var sday = {\n        spdy_date: mydate,\n        spdy_value: parseFloat(dayDuration),\n        spdy_day_name: dayname,\n        spdy_status: true,\n        spdy_id: i + 1 \n      };\n      this.newSprint.spdays.push(sday);\n      this.seletedDaysSprint.push(sday.spdy_date);\n      this.currSprintPts += sday.spdy_value;\n      this.currSprintPts_e += sday.spdy_value;\n    }\n    this.sprintDiff = this.newSprint.spri_points - this.currSprintPts;\n    this.sprintDiff_e = this.newSprint.spri_points - this.currSprintPts_e;\n  }\n\n  // RECALCULATES THE TOTAL POINTS FOR THE SPRINT\n  calculateTotal() {\n    this.editvalue = true;\n    this.currSprintPts_e = 0;\n    for (let days of this.newSprint.spdays) {\n      if (days.spdy_status === true) {\n        this.currSprintPts_e += days.spdy_value;\n      }\n    }\n    // this.sprintDiff = this.newSprint.spri_points - this.currSprintPts;\n    this.currSprintPts = this.currSprintPts_e;\n    this.sprintDiff_e = this.newSprint.spri_points - this.currSprintPts_e;\n  }\n\n  validateSprint() {\n    return (\n      !this.newSprint.grop_id || this.currSprintPts != this.newSprint.spri_points || \n      this.newSprint.spri_points == 0 || this.newSprint.spri_points == 'null' || \n      !this.newSprint.spri_init || this.newSprint.spri_init == 'null' ||\n      !this.newSprint.spri_end || this.newSprint.spri_end == 'null' ||\n      !this.newSprint.spri_description.trim()\n    )\n  }\n\n  saveSprint() {\n    if (\n      !this.newSprint.spri_init ||\n      !this.newSprint.spri_end ||\n      this.newSprint.spri_init == \"\" ||\n      this.newSprint.spri_end == \"\" ||\n      this.newSprint.spri_init == null ||\n      this.newSprint.spri_end == null ||\n      this.newSprint.spri_points == \"\" ||\n      this.newSprint.spri_points == null ||\n      this.newSprint.spri_points == 0 ||\n      !this.newSprint.spri_points ||\n      !this.newSprint.spri_description ||\n      this.newSprint.spri_description == \"\" ||\n      this.newSprint.spri_description == null ||\n      this.currSprintPts != this.newSprint.spri_points\n    ) {\n      this.toastr.warning(\n        \"Action restricted. There are incomplete fields.\",\n        \"Warning!\"\n      );\n      return false;\n    }\n\n    if (typeof(this.newSprint.spri_init) == \"string\") {\n      let parts = this.newSprint.spri_init.split('-');\n      this.newSprint.spri_init = new Date(parts[0], parts[1] - 1, parts[2]); \n    }\n    this.newSprint.spri_init =\n      this.newSprint.spri_init.getFullYear() +\n      \"-\" +\n      (this.newSprint.spri_init.getMonth() + 1) +\n      \"-\" +\n      this.newSprint.spri_init.getDate();\n    if (typeof(this.newSprint.spri_end) == \"string\") {\n      let parts = this.newSprint.spri_end.split('-');\n      this.newSprint.spri_end = new Date(parts[0], parts[1] - 1, parts[2]); \n    }\n    this.newSprint.spri_end =\n      this.newSprint.spri_end.getFullYear() +\n      \"-\" +\n      (this.newSprint.spri_end.getMonth() + 1) +\n      \"-\" +\n      this.newSprint.spri_end.getDate();\n    this._sprint.putSprint(this.newSprint).subscribe(data => {\n      this.sprintId = data.data;\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"ERROR\");\n      } else {\n        this.toastr.success(data.message, \"Sprint saved successfully\");\n        $(\"#mdAddSprint\").modal(\"hide\");\n      }\n      let m = true;\n      let cont = 0;\n      let total = this.newSprint.spdays.length;\n      total--;\n      for (var i = 0; i < this.newSprint.spdays.length; i++) {\n        if (this.newSprint.spdays[i].spdy_status === true) {\n          var sprintday = this.newSprint.spdays[i];\n          if (m == true) {\n            var value_aggreg = sprintday.spdy_value;\n            m = false;\n          } else {\n            value_aggreg = sprintday.spdy_value + value_aggreg;\n          }\n          var balance = this.newSprint.spri_points - value_aggreg;\n          var sprint = {\n            sprint_id: this.sprintId,\n            spday_date: sprintday.spdy_date,\n            spday_value: sprintday.spdy_value,\n            spday_balance: balance\n          };\n          this._sprint.putSprintDay(sprint).subscribe(data => {\n\n          });\n        }\n      }\n      this.getMySprints();\n    });\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/sprint/sprints.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { TaskService } from \"../../services/task.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { EventsService } from \"../../services/events.service\";\nimport { DirectoryService } from \"../../services/directory.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { SchedulerService } from \"../../services/scheduler.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { MailService } from \"../../services/mail.service\";\n\nimport template from \"./scheduler.template.html\";\n\n@Component({\n  selector: \"scheduler\",\n  template: template\n})\nexport class SchedulerComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    toastr: ToastrService,\n    eventsService: EventsService,\n    sanitizer: DomSanitizer,\n    arouter: ActivatedRoute,\n    taskService: TaskService,\n    noteService: NoteService,\n    schedulerService: SchedulerService,\n    directoryService: DirectoryService,\n    productService: ProductService,\n    mailService: MailService,\n    ProjectService: ProjectService\n  ) {\n    this._title = title;\n    // this._tasks = taskService;\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._events = eventsService;\n    this._scheduler = schedulerService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._mail = mailService;\n    this.project = { attachments: [] };\n    this.task = { attachments: [] };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.searchMail = \"\";\n    this.crmusers = [];\n    this.contacts = [];\n    this.scheduler = {};\n    this.meeting = { usershared: [] };\n  }\n\n  ngOnInit() {\n    // this._aroute.params.forEach(params => {\n    // this._title.setTitle(\".:: \" + localStorage.getItem('title') + \" : Event #\" + params.idscheduler + \" ::.\");\n    //     this._scheduler.getScheduler(params.idscheduler).subscribe(res => {\n    //         res.data.sche_description = this.sanitizeHtml(res.data.sche_description);\n    //         $(\"#someFrame\").attr(\"srcdoc\", this.escapeHtml(res.data.sche_description));\n    //         this.scheduler = res.data;\n    //     });\n    // });\n    // this._products.getProducts().subscribe(data => {\n    //     this.products = [];\n    //     for (let c of data.data) {\n    //         this.products.push({ label: c.prod_name, value: c.prod_id });\n    //     }\n    // });\n    // this.userslbl = [];\n    // this._user.getCRMUsers().subscribe(data => {\n    //     this.users = data.data;\n    //     for (let c of data.data) {\n    //         this.userslbl.push({ label: c.user_lastname + \", \" + c.user_name, value: c.user_id });\n    //     }\n    // });\n    // this.listmails = [];\n    // this.listmailsa = [];\n    // this._user.getEmailList().subscribe(data => {\n    //     this.listmails = data.data;\n    //     this.listmailsa = data.data;\n    // });\n    // this.listtasks = [];\n    // this.listtasksa = [];\n    // this._tasks.getUserList().subscribe(data => {\n    //     console.log(data.data);\n    //     this.listtasks = data.data;\n    //     this.listtasksa = data.data;\n    // });\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.project.attachments.push(files[0]);\n  }\n\n  getTimeline() {\n    this._projects.getTimeline(this.project.proj_id).subscribe(\n      function(res) {\n        this.detail = res.data;\n      }.bind(this)\n    );\n  }\n\n  enableBtn() {\n    if (this.displaybtn) {\n      $(\".task\").animate({\n        right: \"20px\"\n      });\n      $(\".comment\").animate({\n        right: \"20px\"\n      });\n      $(\".atemail\").animate({\n        right: \"20px\"\n      });\n      $(\".sendemail\").animate({\n        right: \"20px\"\n      });\n      this.displaybtn = false;\n    } else {\n      $(\".task\").animate({\n        right: \"65px\"\n      });\n      $(\".comment\").animate({\n        right: \"110px\"\n      });\n      $(\".atemail\").animate({\n        right: \"155px\"\n      });\n      $(\".sendemail\").animate({\n        right: \"200px\"\n      });\n      this.displaybtn = true;\n    }\n  }\n\n  closedt() {\n    $(\"#collapseNote\").css({ display: \"none\" });\n    this.note = { attachments: [] };\n    $(\"#collapseTask\").css({ display: \"none\" });\n    this.task = { attachments: [] };\n    $(\"#collapseMail\").css({ display: \"none\" });\n    this.mail = { attachments: [] };\n  }\n\n  addTask() {\n    if (this.displaybtn) {\n      if (this.crmusers.length == 0) {\n        this._user.getCRMUsers().subscribe(data => {\n          this.crmusers = data.data;\n        });\n      }\n      $(\"#collapseNote\").css({ display: \"none\" });\n      if ($(\"#collapseTask\").css(\"display\") == \"none\") {\n        $(\"#collapseTask\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseTask\").offset().top\n        },\n        1000\n      );\n      this.task.task_description = this.sanitizeHtml(\n        this.project.task_description\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveTask() {\n    this.task.proj_id = this.project.proj_id;\n    this.task.task_delivery =\n      this.task.task_delivery.getFullYear() +\n      \"-\" +\n      (this.task.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.task.task_delivery.getDate();\n    this._tasks.putTask(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this.toastr.success(data.message, \"Saved Successfully\");\n      }\n      this.closedt();\n      this.getTimeline();\n    });\n  }\n\n  onChangeTask(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n\n  addNote() {\n    if (this.displaybtn) {\n      $(\"#collapseTask\").css({ display: \"none\" });\n      if ($(\"#collapseNote\").css(\"display\") == \"none\") {\n        $(\"#collapseNote\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseNote\").offset().top\n        },\n        1000\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveNote() {\n    this.note.proj_id = this.project.proj_id;\n    this._notes.putNote(this.note).subscribe(data => {\n      this.toastr.success(data.message, \"Note added Successfully\");\n      this.note = { attachments: [] };\n      this.getTimeline();\n    });\n  }\n\n  onChangeNote(event) {\n    var files = event.srcElement.files;\n    this.note.attachments.push(files[0]);\n  }\n\n  showAsociateMail() {\n    this.closedt();\n    $(\"#mdAsoMail\").modal(\"show\");\n  }\n\n  addAsociateMail() {\n    for (var x in this.listmails) {\n      this._events\n        .addAsociateMail(this.listmails[x], this.ticket.proj_id)\n        .subscribe(res => {});\n    }\n    this.getTimeline();\n    this.toastr.success(\"Mail asociated successfully\");\n  }\n  srchMail() {\n    this.mails = [];\n    this.listmails = [];\n    this._mail.searchMail(this.searchMail).subscribe(data => {\n      this.mails = data.data;\n    });\n  }\n  showAsociateTask() {\n    this.closedt();\n    $(\"#mdAsoTask\").modal(\"show\");\n  }\n  addAsociateTask() {\n    for (var x in this.listtasks) {\n      this._events\n        .addAsociateTask(this.listtasks[x], this.meeting.meet_id)\n        .subscribe(res => {});\n    }\n    this.getTimeline();\n    this.toastr.success(\"Task asociated successfully\");\n  }\n\n  srchTask() {\n    this.mails = [];\n    this.listtasks = [];\n    this._mail.searchMail(this.listtasks).subscribe(data => {\n      this.mails = data.data;\n    });\n  }\n\n  addMail() {\n    if (this.displaybtn) {\n      $(\"#collapseMail\").css({ display: \"none\" });\n      if ($(\"#collapseMail\").css(\"display\") == \"none\") {\n        $(\"#collapseMail\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseMail\").offset().top\n        },\n        1000\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveMail() {\n    let mymails = [];\n    for (let x in this.mail.emails) {\n      mymails.push(this.mail.emails[x].correo);\n    }\n    this.mail.emails = mymails;\n    this.mail.content = this.mail.content.split(\"\\n\").join(\"\");\n    this.mail.content = this.mail.content.split(\"\\r\").join(\"\");\n    this.mail.proj_id = this.project.proj_id;\n    this._mail.sendMessage(this.mail).subscribe(data => {\n      this.toastr.success(data.message, \"Mail sent Successfully\");\n      this.getTimeline(this.project.proj_id);\n    });\n    this.mail = { attachments: [] };\n    this.closedt();\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.listmails = this.filter(query, this.listmailsa);\n  }\n\n  filter(query, mails) {\n    let filtered = [];\n    for (let i = 0; i < mails.length; i++) {\n      let country = mails[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  decode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n    var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n    if (base64test.exec(input)) {\n      return false;\n    }\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n    do {\n      enc1 = keyStr.indexOf(input.charAt(i++));\n      enc2 = keyStr.indexOf(input.charAt(i++));\n      enc3 = keyStr.indexOf(input.charAt(i++));\n      enc4 = keyStr.indexOf(input.charAt(i++));\n\n      chr1 = (enc1 << 2) | (enc2 >> 4);\n      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n      chr3 = ((enc3 & 3) << 6) | enc4;\n\n      output = output + String.fromCharCode(chr1);\n\n      if (enc3 != 64) {\n        output = output + String.fromCharCode(chr2);\n      }\n      if (enc4 != 64) {\n        output = output + String.fromCharCode(chr3);\n      }\n\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n\n    return unescape(output);\n  }\n\n  encode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    input = escape(input);\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    do {\n      chr1 = input.charCodeAt(i++);\n      chr2 = input.charCodeAt(i++);\n      chr3 = input.charCodeAt(i++);\n      enc1 = chr1 >> 2;\n      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n      enc4 = chr3 & 63;\n      if (isNaN(chr2)) {\n        enc3 = enc4 = 64;\n      } else if (isNaN(chr3)) {\n        enc4 = 64;\n      }\n      output =\n        output +\n        keyStr.charAt(enc1) +\n        keyStr.charAt(enc2) +\n        keyStr.charAt(enc3) +\n        keyStr.charAt(enc4);\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n    return output;\n  }\n\n  escapeHtml(text) {\n    return text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/scheduler/scheduler.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./schedulerlist.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { SchedulerService } from \"../../services/scheduler.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from \"../../pipes\";\n\n@Component({\n    selector: \"schedulerlist\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class SchedulerListComponent {\n    constructor(\n        title: Title,\n        router: Router,\n        sanitizer: DomSanitizer,\n        groupService: GroupService,\n        schedulerService: SchedulerService,\n        usersService: UsersService,\n        toastr: ToastrService,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._groups = groupService;\n        this._scheduler = schedulerService;\n        this._user = usersService;\n        this.confirm = confirmationService;\n        this.textState = [\"Active\", \"Canceled\", \"Finished\"];\n        this.posState = \"SchStatus\";\n        this.textGroup = \"\";\n        this.posGroup = \"grop_id\";\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.groups = [];\n        this.plsch = [];\n        this.categories = [];\n        this.catsche = [];\n        this.stssche = [];\n        this.schedules = [];\n        this.lblgroups = [];\n        this.selsch = [];\n        this.scheduler = {};\n        this.namegroup = \"ALL\";\n        this.itemcount = 0;\n        this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Scheduler ::.\");\n        this._scheduler.getSchedulerCategory().subscribe(res => {\n            for (let c of res.data) {\n                this.catsche.push({ label: c.para_name, value: c.para_id });\n            }\n        });\n        this._scheduler.getSchedulerStatus().subscribe(res => {\n            // this.category = [];\n            for (let c of res.data) {\n                this.stssche.push({ label: c.para_name, value: c.para_id });\n            }\n        });\n        this._scheduler.getSchedulerPlaces().subscribe(res => {\n            for (let c of res.data) {\n                this.plsch.push({ label: c.para_name, value: c.para_id });\n            }\n        });\n\n        this._groups.getGroups().subscribe(data => {\n            this.groups = data.data;\n            for (let c of data.data) {\n                this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n            }\n        });\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(data => {\n            this.users = data.data;\n            for (let c of data.data) {\n                this.userslbl.push({\n                    label: c.user_lastname + \", \" + c.user_name,\n                    value: c.user_id\n                });\n            }\n        });\n        this.reload();\n    }\n\n    setGroupList(state) {\n        this.textGroup = state;\n        this.namegroup = name;\n        this.currentpage = 1;\n        this.limitpage = this.schedules.length > 20 ? 20 : this.schedules.length;\n        this.itemcount = this.schedules.length;\n    }\n    setGroupList(state, name) {\n        this.namegroup = name;\n        this.textGroup = state;\n        this.currentpage = 1;\n        this.limitpage = this.schedules.length > 20 ? 20 : this.schedules.length;\n        this.itemcount = this.schedules.length;\n        // this.reload();\n    }\n\n    filterMultiple(event) {\n        let query = event.query;\n        this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n\n    filter(query, countries) {\n        let filtered = [];\n        for (let i = 0; i < countries.length; i++) {\n            let country = countries[i];\n            if (\n                country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n            ) {\n                filtered.push(country);\n            }\n        }\n        return filtered;\n    }\n\n    addScheduler() {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.scheduler = { scheduler: {} };\n    }\n\n    showModal(sch) {\n        this.sch = sch;\n        this.scheduler = { scheduler: {} };\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this._scheduler.getMySchedule().subscribe(res => {\n            this.scheduler = sch;\n            this.scheduler = res.data;\n            $(\"#mdScheduler\").modal(\"show\");\n        });\n    }\n\n    showEditModal(sch) {\n        this.sch = sch;\n        this.scheduler = { scheduler: {} };\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this._scheduler.getMySchedule().subscribe(res => {\n            this.scheduler = sch;\n            this.scheduler = res.data;\n            $(\"#mdEditScheduler\").modal(\"show\");\n        });\n    }\n\n    deleteScheduler(sch) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.confirm.confirm({\n            message: \"Do you want to delete the Schedule(s)?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (sch) {\n                    this._scheduler.deleteScheduler(sch).subscribe(data => {\n                        this.reload();\n                        this.toastr.success(\"Schedule deleted successfully\");\n                    });\n                } else {\n                    if (this.selsch.length > 0) {\n                        for (var x in this.selsch) {\n                            this._scheduler\n                                .deleteScheduler(this.selsch[x])\n                                .subscribe(data => {});\n                        }\n                        this.selsch = [];\n                        this.toastr.success(\"Schedules deleted successfully\");\n                        this.reload();\n                    }\n                }\n            },\n            reject: () => {}\n        });\n    }\n    selectAll() {\n        if (this.selsch.length > 0) {\n            this.selsch = [];\n        } else {\n            this.selsch = [];\n            for (var t in this.schedules) {\n                this.selsch.push(this.schedules[t].sche_id);\n            }\n        }\n    }\n    setStateList(state) {\n        if (state == \"Outstanding\") {\n            this.textState = [\"1\"];\n            this.posState = \"outst\";\n        } else {\n            this.textState = state;\n            this.posState = \"SchStatus\";\n        }\n        this.currentpage = 1;\n        this.limitpage = this.schedules.length > 20 ? 20 : this.schedules.length;\n        this.itemcount = this.schedules.length;\n    }\n    saveScheduler() {\n        this.scheduler.sche_end = new Date(this.scheduler.sche_end);\n        this.scheduler.sche_end =\n            this.scheduler.sche_end.getFullYear() +\n            \"-\" +\n            (this.scheduler.sche_end.getMonth() + 1) +\n            \"-\" +\n            this.scheduler.sche_end.getDate();\n        this.scheduler.sche_start = new Date(this.scheduler.sche_start);\n        this.scheduler.sche_start =\n            this.scheduler.sche_start.getFullYear() +\n            \"-\" +\n            (this.scheduler.sche_start.getMonth() + 1) +\n            \"-\" +\n            this.scheduler.sche_start.getDate();\n        this._scheduler.putScheduler(this.scheduler).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message, \"Good news!\");\n            } else {\n                this.toastr.success(data.message, \"Scheduler updated successfully\");\n            }\n            this.reload();\n        });\n    }\n    actScheduler(sch) {\n        sch.sche_end = new Date(sch.sche_end);\n        sch.sche_end =\n            sch.sche_end.getFullYear() +\n            \"-\" +\n            (sch.sche_end.getMonth() + 1) +\n            \"-\" +\n            sch.sche_end.getDate();\n        sch.sche_start = new Date(sch.sche_start);\n        sch.sche_start =\n            sch.sche_start.getFullYear() +\n            \"-\" +\n            (sch.sche_start.getMonth() + 1) +\n            \"-\" +\n            sch.sche_start.getDate();\n        this._scheduler.editScheduler(sch).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message, \"Good news!\");\n            } else {\n                this.toastr.success(data.message, \"Scheduler updated successfully\");\n            }\n            this.reload();\n        });\n    }\n\n\n    reload() {\n        this.isLoading = true;\n        var filter = {\n            start: this.currentpage * this.limitpage - this.limitpage,\n            end: this.limitpage,\n            all: this.search.trim(),\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n\n        this._scheduler.getMySchedule(filter).subscribe(res => {\n            this.isLoading = false;\n            this.schedules = res.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n    }\n\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n    }\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.reload();\n    }\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        var temporal = document.createElement(\"div\");\n        temporal.innerHTML = text;\n        var text = temporal.textContent || temporal.innerText || \"\";\n\n        return text;\n    }\n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n        } else {\n            this.currentpage = this.lastpage;\n        }\n        this.reload();\n    }\n\n    changedExtraHandler(event) {\n        if (event.keyCode == 13) {\n            this.isLoading = true;\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n\n            this._scheduler.getMySchedule(filter).subscribe(res => {\n                this.isLoading = false;\n                this.schedules = res.data.data;\n                this.itemcount = res.data.count;\n                this.lastpage = this.itemcount / this.limitpage;\n                if (this.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(this.lastpage);\n                    this.lastpage = countpag;\n                }\n                this.pages = [];\n                for (let i = 1; i <= this.lastpage; i++) {\n                    this.pages.push(i);\n                }\n                if (this.pages.length == 0) {\n                    this.pages = [1];\n                }\n            });\n            this.cont = 0;\n\n        }\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/scheduler/schedulerlist.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./eventslist.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { EventsService } from \"../../services/events.service\";\nimport { DirectoryService } from \"../../services/directory.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from \"../../pipes\";\n\n@Component({\n    selector: \"eventslist\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class EventsListComponent {\n    constructor(\n        title: Title,\n        router: Router,\n        sanitizer: DomSanitizer,\n        groupService: GroupService,\n        directoryService: DirectoryService,\n        toastr: ToastrService,\n        eventsService: EventsService,\n        arouter: ActivatedRoute,\n        usersService: UsersService,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._groups = groupService;\n        this._events = eventsService;\n        this._directory = directoryService;\n        this.confirm = confirmationService;\n        this._user = usersService;\n        this.textState = \"\";\n        this.posState = \"para_name\";\n        this.textGroup = \"\";\n        this.posGroup = \"grop_id\";\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.pages = [1];\n        this._aroute = arouter;\n        this.limitpage = 20;\n        this.groups = [];\n        this.categories = [];\n        this.plmt = [];\n        this.stsmt = [];\n        this.lblgroups = [];\n        this.selmee = [];\n        this.userlist = [];\n        this.meeting = { usershared: [] };\n        this.emails = [];\n        this.st_cancelled = 0;\n        this.itemcount = 0;\n        this.namegroup = \"ALL\";\n        this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Events ::.\");\n        if (localStorage.getItem(\"eventsearch\")) {\n            this.search = localStorage.getItem(\"eventsearch\");\n        }\n\n        this._events.getMeetingStatus().subscribe(res => {\n            for (let c of res.data) {\n                this.stsmt.push({ label: c.para_name, value: c.para_id });\n            }\n        });\n        this._events.getMeetingPlaces().subscribe(res => {\n            for (let c of res.data) {\n                this.plmt.push({ label: c.para_name, value: c.para_id });\n            }\n        });\n        this._groups.getGroups().subscribe(data => {\n            this.groups = data.data;\n            for (let c of data.data) {\n                this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n            }\n        });\n        this.usersCRM = [];\n        this.usersCRMa = [];\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(data => {\n            this.users = data.data;\n            this.usersCRM = data.data;\n            this.usersCRMa = data.data;\n            for (let c of data.data) {\n                this.userslbl.push({\n                    label: c.user_lastname + \", \" + c.user_name,\n                    value: c.user_id\n                });\n            }\n        });\n        this.statuslist = [];\n        this._events.getIdStatus(10, 3).subscribe(data => {\n            this.st_cancelled = data.data[0].para_id;\n\n            for (let c of data.data) {\n                this.statuslist.push({ label: c.para_name, value: c.para_codigo });\n            }\n        });\n\n        this.reload();\n    }\n\n    reload() {\n        this.isLoading = true;\n        var filter = {\n            start: this.currentpage * this.limitpage - this.limitpage,\n            end: this.limitpage,\n            all: this.search.trim(),\n            state: this.textState,\n            group: this.textGroup,\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._events.getMyMeetingsList(filter).subscribe(res => {\n            this.isLoading = false;\n            this.events = res.data.data;\n            this.itemcount = res.data.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n    }\n    changedExtraHandler(event) {\n        if (event.keyCode == 13) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n            this.reload();\n        }\n    }\n\n    // setGroupList(state) {\n    //     this.textGroup = state;\n    //     this.currentpage = 1;\n    //     // this.limitpage = this.events.length > 20 ? 20 : this.events.length;\n    //     // this.itemcount = this.events.length;\n    //     this.reload();\n    // }\n    setGroupList(state, name) {\n            this.namegroup = name;\n            this.textGroup = state;\n            this.currentpage = 1;\n            // this.limitpage = this.events.length > 20 ? 20 : this.events.length;\n            // this.itemcount = this.events.length;\n            this.reload();\n        }\n        filterMultiple(event) {\n            let query = event.query;\n            this.usersCRM = this.filter(query, this.usersCRMa);\n        }\n        filterMultipleEmails(event) {\n            let query = event.query;\n            this.listmails = this.filter(query, this.listmailsa);\n        }\n\n    filter(query, countries) {\n        let filtered = [];\n        for (let i = 0; i < countries.length; i++) {\n            let country = countries[i];\n            if (\n                country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n            ) {\n                filtered.push(country);\n            }\n        }\n        return filtered;\n    }\n\n    addMeeting() {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.meeting = { usershared: [] };\n    }\n\n    showModal(meet_id, modalname) {\n        this.meeting = { usershared: [] };\n        this._events.getMeeting(meet_id).subscribe(res => {\n            let part1 = res.data.data.meet_date.split(\" \");\n            let day = part1[0].split(\"-\");\n            let time = part1[1].split(\":\");\n            res.data.data.datetime = new Date(\n                day[0],\n                day[1] - 1,\n                day[2],\n                time[0],\n                time[1]\n            );\n            res.data.data.usershared = [];\n            this.meeting = res.data.data;\n            this._events.getUsersMeeting(meet_id).subscribe(res => {\n                for (let c of res.data) {\n                    this.meeting.usershared.push(c);\n                }\n            });\n            $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n            $(\"#\" + modalname).modal(\"show\");\n        });\n    }\n\n    saveMeeting() {\n        let usarr = [];\n        for (let x in this.meeting.usershared) {\n            if (this.meeting.usershared[x].user_id) {\n                usarr.push(this.meeting.usershared[x].user_id);\n            }\n        }\n        this.meeting.users = usarr;\n        this.meeting.meet_date =\n            this.meeting.datetime.getFullYear() +\n            \"-\" +\n            this.lpad(this.meeting.datetime.getMonth() + 1, 2) +\n            \"-\" +\n            this.lpad(this.meeting.datetime.getDate(), 2) +\n            \" \" +\n            this.lpad(this.meeting.datetime.getHours(), 2) +\n            \":\" +\n            this.lpad(this.meeting.datetime.getMinutes(), 2) +\n            \":\" +\n            this.lpad(this.meeting.datetime.getSeconds(), 2);\n        this._events.putMeeting(this.meeting).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message, \"Error\");\n            } else {\n                this.toastr.success(data.message, \"Meeting Saved successfully\");\n            }\n            this.reload();\n        });\n    }\n\n    cancelMeeting(meet_id) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.confirm.confirm({\n            message: \"Do you want to proceed?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (meet_id) {\n                    this._events\n                        .setStatusMeeting(meet_id, this.st_cancelled)\n                        .subscribe(data => {\n                            this.reload();\n                            this.toastr.success(\"The Meeting was cancelled successfully\");\n                        });\n                } else {\n                    if (this.selmee.length > 0) {\n                        for (var x in this.selmee) {\n                            this._events\n                                .setStatusMeeting(this.selmee[x], this.st_cancelled)\n                                .subscribe(data => {});\n                        }\n                        this.selmee = [];\n                        this.reload();\n                        this.toastr.success(\"The Meetings was cancelled successfully\");\n                    }\n                }\n            },\n            reject: () => {}\n        });\n    }\n\n    deleteMeeting(mt) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.confirm.confirm({\n            message: \"Do you want to proceed?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (mt) {\n                    this._events.deleteMeeting(mt).subscribe(data => {\n                        this.reload();\n                        this.toastr.success(\"Meeting deleted successfully\");\n                    });\n                } else {\n                    if (this.selmee.length > 0) {\n                        for (var x in this.selmee) {\n                            this._events.deleteMeeting(this.selmee[x]).subscribe(data => {});\n                        }\n                        this.selmee = [];\n                        this.toastr.success(\"Meeting deleted successfully\");\n                        this.reload();\n                    }\n                }\n            },\n            reject: () => {}\n        });\n    }\n\n    lpad(n, width, z) {\n        z = z || \"0\";\n        n = n || \"0\";\n        n = n + \"\";\n        return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n\n    selectAll() {\n        if (this.selmee.length > 0) {\n            this.selmee = [];\n        } else {\n            this.selmee = [];\n            for (var t in this.events) {\n                this.selmee.push(this.events[t].meet_id);\n            }\n        }\n    }\n\n    setStateList(state) {\n        this.textState = state;\n        this.posState = \"para_name\";\n        this.currentpage = 1;\n        this.reload();\n    }\n\n\n    setStateList(state) {\n        this.textState = state;\n        this.posState = \"para_name\"\n        if (state == \"Outstanding\") {\n            this.textState = [\"1\"];\n            this.posState = \"outst\";\n        } else {\n            this.textState = state;\n            this.posState = \"para_name\";\n        }\n        this.currentpage = 1;\n        this.limitpage = this.events.length > 20 ? 20 : this.events.length;\n        this.itemcount = this.events.length;\n    }\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n    }\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.reload();\n    }\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        var temporal = document.createElement(\"div\");\n        temporal.innerHTML = text;\n        var text = temporal.textContent || temporal.innerText || \"\";\n\n        return text;\n    }\n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n        } else {\n            this.currentpage = Math.round(this.itemcount / this.limitpage);\n            let mod = this.itemcount % this.limitpage;\n            if (mod > 0 && mod < 5) {\n                this.currentpage += 1;\n            }\n        }\n        this.reload();\n    }\n\n    filterText() {\n        this.isLoading = true;\n        this.currentpage = 1;\n        this.reload();\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/events/eventslist.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { TaskService } from \"../../services/task.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { EventsService } from \"../../services/events.service\";\nimport { DirectoryService } from \"../../services/directory.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { MailService } from \"../../services/mail.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\n\nimport template from \"./events.template.html\";\n\n@Component({\n  selector: \"events\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe]\n})\nexport class EventsComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    toastr: ToastrService,\n    eventsService: EventsService,\n    sanitizer: DomSanitizer,\n    arouter: ActivatedRoute,\n    taskService: TaskService,\n    noteService: NoteService,\n    directoryService: DirectoryService,\n    productService: ProductService,\n    mailService: MailService,\n    ProjectService: ProjectService\n  ) {\n    this._title = title;\n    this._route = route;\n    this._tasks = taskService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._events = eventsService;\n    this._sanitizer = sanitizer;\n    this._user = usersService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._mail = mailService;\n    this.project = { attachments: [] };\n    this.task = { attachments: [] };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.taskid = [];\n    this.searchTask = \"\";\n    this.search = \"\";\n    this.crmusers = [];\n    this.contacts = [];\n    this.listmails = [];\n    this.listmails = [];\n\n    // this.detail = [];\n    this.meeting = { usershared: [] };\n  }\n\n  ngOnInit() {\n    this.list = [];\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n\n    this.userslbl = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._user.getEmailList().subscribe(data => {\n      this.listmails = data.data;\n      this.listmailsa = data.data;\n    });\n    this._aroute.params.forEach(params => {\n      this.stTitle = \"Squadlinx\";\n      if(localStorage.getItem('title')){\n        this.stTitle = localStorage.getItem('title');\n      }\n      this._title.setTitle(\".:: \" + this.stTitle + \" : Event #\" + params.idmeeting +\" ::.\");\n      this._events.getMeeting(params.idmeeting).subscribe(res => {\n        res.data.meet_text = this.sanitizeHtml(res.data.meet_text);\n        $(\"#someFrame\").attr(\"srcdoc\", this.escapeHtml(res.data.meet_text));\n        res.data.data.usershared = [];\n        this.meeting = res.data.data;\n        this._events.getUsersMeeting(params.idmeeting).subscribe(res => {\n          for (let c of res.data) {\n            this.meeting.usershared.push(c);\n          }\n        });\n      });\n    });\n\n    this.listtasks = [];\n    this.listtasksa = [];\n    this._tasks.getUserTasks().subscribe(data => {\n      this.listtasks = data.data;\n      this.listtasksa = data.data;\n    });\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.meeting.attachments.push(files[0]);\n  }\n\n  enableBtn() {\n    if (this.displaybtn) {\n      $(\".task\").animate({\n        right: \"20px\"\n      });\n      $(\".atetask\").animate({\n        right: \"20px\"\n      });\n      $(\".comment\").animate({\n        right: \"20px\"\n      });\n      $(\".atemail\").animate({\n        right: \"20px\"\n      });\n      $(\".sendemail\").animate({\n        right: \"20px\"\n      });\n      this.displaybtn = false;\n    } else {\n      $(\".task\").animate({\n        right: \"65px\"\n      });\n      $(\".atetask\").animate({\n        right: \"110px\"\n      });\n      $(\".comment\").animate({\n        right: \"155px\"\n      });\n      $(\".atemail\").animate({\n        right: \"200px\"\n      });\n      $(\".sendemail\").animate({\n        right: \"245px\"\n      });\n      this.displaybtn = true;\n    }\n  }\n\n  closedt() {\n    $(\"#collapseNote\").css({ display: \"none\" });\n    this.note = { attachments: [] };\n    $(\"#collapseTask\").css({ display: \"none\" });\n    this.task = { attachments: [] };\n    $(\"#collapseMail\").css({ display: \"none\" });\n    this.mail = { attachments: [] };\n  }\n\n  addTask() {\n    if (this.displaybtn) {\n      if (this.crmusers.length == 0) {\n        this._user.getCRMUsers().subscribe(data => {\n          this.crmusers = data.data;\n        });\n      }\n      $(\"#collapseNote\").css({ display: \"none\" });\n      if ($(\"#collapseTask\").css(\"display\") == \"none\") {\n        $(\"#collapseTask\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseTask\").offset().top\n        },\n        1000\n      );\n      this.task.task_description = this.sanitizeHtml(\n        this.project.task_description\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveTask() {\n    this.task.meet_id = this.meeting.meet_id;\n    this.task.task_description = this.task.task_description\n      .split(\"\\n\")\n      .join(\"<br />\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\r\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description;\n    this.task.task_delivery =\n      this.task.task_delivery.getFullYear() +\n      \"-\" +\n      (this.task.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.task.task_delivery.getDate();\n    this._tasks.putTask(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this.toastr.success(data.message, \"Saved Successfully\");\n      }\n      this.closedt();\n    });\n  }\n\n  onChangeTask(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n\n  addNote() {\n    if (this.displaybtn) {\n      $(\"#collapseTask\").css({ display: \"none\" });\n      if ($(\"#collapseNote\").css(\"display\") == \"none\") {\n        $(\"#collapseNote\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseNote\").offset().top\n        },\n        1000\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveNote() {\n    this.note.meet_id = this.meeting.meet_id;\n    this._notes.putNote(this.note).subscribe(data => {\n      this.toastr.success(data.message, \"Note added Successfully\");\n      this.note = { attachments: [] };\n    });\n  }\n\n  onChangeNote(event) {\n    var files = event.srcElement.files;\n    this.note.attachments.push(files[0]);\n  }\n\n  showAsociateMail() {\n    this.closedt();\n    //$(\"#mdAsoMail\").modal('show');\n  }\n\n  addAsociateMail() {\n    for (var x in this.listmails) {\n      this._events\n        .addAsociateMail(this.listmails[x], this.meeting.meet_id)\n        .subscribe(res => {});\n    }\n    this.toastr.success(\"Mail asociated successfully\");\n  }\n\n  srchMail() {\n    this.mails = [];\n    this.listmails = [];\n    this._mail.searchMail(this.searchMail).subscribe(data => {\n      this.mails = data.data;\n    });\n  }\n  showAsociateTask() {\n    this.closedt();\n    $(\"#mdAsoTask\").modal(\"show\");\n  }\n  addAsociateTask() {\n    for (var x in this.list) {\n      this._events\n        .addAsociateTask(this.list[x], this.meeting.meet_id)\n        .subscribe(res => {});\n    }\n    this.list = [];\n  }\n\n  srchTask() {\n    this.taskid = [];\n    this.listtasks = [];\n    this._task.searchTask(this.searchTask).subscribe(data => {\n      this.listtasks = data.data;\n    });\n  }\n  addMail() {\n    if (this.displaybtn) {\n      $(\"#collapseMail\").css({ display: \"none\" });\n      if ($(\"#collapseMail\").css(\"display\") == \"none\") {\n        $(\"#collapseMail\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          //scrollTop: $(\"#collapseMail\").offset().top\n        },\n        1000\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveMail() {\n    let mymails = [];\n    for (let x in this.mail.emails) {\n      mymails.push(this.mail.emails[x].correo);\n    }\n    this.mail.emails = mymails;\n    this.mail.content = this.mail.content.split(\"\\n\").join(\"\");\n    this.mail.content = this.mail.content.split(\"\\r\").join(\"\");\n    this.mail.proj_id = this.project.proj_id;\n    this._mail.sendMessage(this.mail).subscribe(data => {\n      this.toastr.success(data.message, \"Mail sent Successfully\");\n      //this.getTimeline(this.project.proj_id);\n    });\n    this.mail = { attachments: [] };\n    this.closedt();\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.listmails = this.filter(query, this.listmailsa);\n  }\n\n  filter(query, mails) {\n    let filtered = [];\n    for (let i = 0; i < mails.length; i++) {\n      let country = mails[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  decode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n    var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n    if (base64test.exec(input)) {\n      return false;\n    }\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n    do {\n      enc1 = keyStr.indexOf(input.charAt(i++));\n      enc2 = keyStr.indexOf(input.charAt(i++));\n      enc3 = keyStr.indexOf(input.charAt(i++));\n      enc4 = keyStr.indexOf(input.charAt(i++));\n\n      chr1 = (enc1 << 2) | (enc2 >> 4);\n      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n      chr3 = ((enc3 & 3) << 6) | enc4;\n\n      output = output + String.fromCharCode(chr1);\n\n      if (enc3 != 64) {\n        output = output + String.fromCharCode(chr2);\n      }\n      if (enc4 != 64) {\n        output = output + String.fromCharCode(chr3);\n      }\n\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n\n    return unescape(output);\n  }\n\n  encode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    input = escape(input);\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    do {\n      chr1 = input.charCodeAt(i++);\n      chr2 = input.charCodeAt(i++);\n      chr3 = input.charCodeAt(i++);\n      enc1 = chr1 >> 2;\n      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n      enc4 = chr3 & 63;\n      if (isNaN(chr2)) {\n        enc3 = enc4 = 64;\n      } else if (isNaN(chr3)) {\n        enc4 = 64;\n      }\n      output =\n        output +\n        keyStr.charAt(enc1) +\n        keyStr.charAt(enc2) +\n        keyStr.charAt(enc3) +\n        keyStr.charAt(enc4);\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n    return output;\n  }\n\n  escapeHtml(text) {\n    return text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/events/events.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./roles.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { HeaderService } from \"../../services/header.service\";\nimport { RolesService } from \"../../services/roles.service\";\n\n@Component({\n  selector: \"roles\",\n  template: template,\n  providers: [ConfirmationService]\n})\nexport class RolesComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    groupService: GroupService,\n    rolesService: RolesService,\n    headerService: HeaderService,\n    confirmationService: ConfirmationService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._roles = rolesService;\n    this._groups = groupService;\n    this.confirm = confirmationService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.lblgroups = [];\n    this.selectedRole = 0;\n    this.modulesTree = [];\n    this.subModules = [];\n    this.rolesMenu = [];\n    this.submoduleChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPer = []; \n    this.selectedPermits = [];\n    this.savePermit = [];\n    this.modulesAdd = [];\n    this.obj = [];\n    this._header = headerService;\n    this.role = [];\n    this.selRole = 0;\n    this.modulesMyTree = [];\n    this.submodChk = 0;\n    this.modAdd = [];\n    this.myRol = 0;\n    this.myRolName = \"\";\n    this.parentsTree = [];\n    this.parentsTree2 = [];\n    this.children_show = [];\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Roles ::.\");\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n      }\n    });\n    this._roles.getModules(0).subscribe(res => {\n      let parents = [];\n      for (let c of res.data) {\n        if (c.parent == null) {\n          parents.push({ parentid: c.modid, parentname: c.moduleName });\n        } else {\n          for (let u of parents) {\n            if (c.parent == u.parentid) {\n              this.modulesAdd.push({ label: c.moduleName, value: c.modid });\n            }\n          }\n        }\n      }\n    });\n  }\n\n  ngOnInit() {\n    this.getRoles();\n  }\n  getAllModules() {\n    let listModChild = [];\n    this.parentsTree = [];\n    let childrens = [];\n    this.selectedPer = [];\n    let array = [];\n    this._roles.getParentModules().subscribe(res => {\n      array = res.data;\n      for (let u of res.data) {\n        this.parentsTree.push({\n          label: u.modu_name,\n          data: u.modu_id,\n          expanded: false,\n          expandedIcon: \"fa-folder-open\",\n          collapsedIcon: \"fa-folder\",\n          children: childrens,\n          selectable: false\n        });\n      }\n      for (let i = 0; i < this.parentsTree.length; i++) {\n        this.parentsTree[i].children = [];\n        this._roles.getChildModules(this.parentsTree[i].data).subscribe(res => {\n          for (let c of res.data) {\n            this.parentsTree[i].children.push({label: c.modu_name, data: c.modu_id, parent: c.modu_parent, selectable: false });\n          }\n          for(let j = 0; j < this.parentsTree[i].children.length; j++){\n            this.parentsTree[i].children[j].permits =[]; \n              this._roles.getPermModules(this.parentsTree[i].children[j].data).subscribe(res =>{\n                for (let c of res.data) {\n                  this.parentsTree[i].children[j].permits.push({ \"label\": c.perm_desc, \"data\": c.perm_id, \"parent\": c.modu_id,\"selectable\": false });\n                  \n                }\n            });\n          }\n\n\n        });\n      }\n    });\n  }\n  getModulesRole(role) {\n    this.selectedRole = role;\n    this.selectedSubmodule = [];\n    let c = 0;\n    this.parentsTree2 = [];\n    this.submoduleChk = 0;\n    this._roles.getModules(role).subscribe(res => {\n      let moduleid = \"0\";\n      let moduleName = \"\";\n      let children = [];\n      let parent = null;\n      for (let u of res.data) {\n        if (moduleid != u.modid) {\n          if (moduleid != \"0\" && parent == null) {\n            this.parentsTree2.push({\n              label: moduleName,\n              data: moduleid,\n              expanded: false,\n              expandedIcon: \"fa-folder-open\",\n              collapsedIcon: \"fa-folder\",\n              children: children,\n              selectable: false\n            });\n          }\n          moduleName = u.moduleName;\n          moduleid = u.modid;\n          children = [];\n          parent = u.parent;\n        }\n        if (parent != null) {\n          for (let v of this.parentsTree2) {\n            if (v.data == parent) {\n              v.children.push({ label: u.moduleName, data: u.modid });\n              this.selectedSubmodule.push(u.modid);\n            }\n          }\n        }\n      }\n      if (moduleid != \"0\" && parent == null) {\n        this.parentsTree2.push({\n          label: moduleName,\n          data: moduleid,\n          expanded: false,\n          expandedIcon: \"fa-folder-open\",\n          collapsedIcon: \"fa-folder\",\n          children: children,\n          selectable: false\n        });\n      }\n    });\n  }\n   \n\n\n  showModules(id_parent, children) {\n    this.children_show = [];\n    this.children_show = children;\n  }\n\n  deleteRole(role_id) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to proceed?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (role_id) {\n          this._roles.deleteRole(role_id).subscribe(data => {\n\n            if (data.data == \"OK\") {\n              this.ngOnInit();\n              this.toastr.success(\"Role deleted successfully\");\n            } else {\n              this.toastr.warning(data.message, \"Action not allowed\");\n            }            \n          });\n        }\n      },\n      reject: () => {}\n    });\n  }\n\n  editRole(role_id, rol_name, role_descr) {\n    this.myRol = role_id;\n    this.myRolName = rol_name;\n    this.getAllModules();\n    this.getModulesRole(role_id);\n    this.getPermits();\n    this.obj = {\n      role_NameNew: this.myRolName,\n      role_description: role_descr\n    };\n    $(\"#editRoleNew\").modal(\"show\");\n  }\n\n  showModal(role_id, rol_name) {\n    this.myRol = role_id;\n    this.myRolName = rol_name;\n    this.getModulesRol(this.myRol);\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    $(\"#mdRole\").modal(\"show\");\n  }\n  getModulesRol(role) {\n    this.getMyModules();\n    this.selRole = role;\n    this.modulesMyTree = [];\n    this.submodChk = 0;\n    this._roles.getModules(role).subscribe(res => {\n      let module_id = \"0\";\n      let moduleName = \"\";\n      let children = [];\n      let parent = null;\n\n      for (let u of res.data) {\n        if (module_id != u.modid) {\n          if (module_id != \"0\" && parent == null) {\n            this.modulesMyTree.push({\n              label: moduleName,\n              data: module_id,\n              expanded: false,\n              expandedIcon: \"fa-folder-open\",\n              collapsedIcon: \"fa-folder\",\n              children: children,\n              selectable: false\n            });\n          }\n          moduleName = u.moduleName;\n          module_id = u.modid;\n          children = [];\n          parent = u.parent;\n        }\n        if (parent != null) {\n          for (let v of this.modulesMyTree) {\n            if (v.data == parent) {\n              v.children.push({ label: u.moduleName, data: u.modid });\n            }\n          }\n        }\n      }\n      if (module_id != \"0\" && parent == null) {\n        this.modulesMyTree.push({\n          label: moduleName,\n          data: module_id,\n          expanded: false,\n          expandedIcon: \"fa-folder-open\",\n          collapsedIcon: \"fa-folder\",\n          children: children,\n          selectable: false\n        });\n      }\n    });\n  }\n\n  getMyModules() {\n    this._roles.getModules(0).subscribe(res => {\n      let parent = [];\n      for (let c of res.data) {\n        if (c.parent == null) {\n          parent.push({ parentid: c.modid, parentname: c.moduleName });\n        } else {\n          for (let u of parent) {\n            if (c.parent == u.parentid) {\n              this.modAdd.push({ label: c.moduleName, value: c.modid });\n            }\n          }\n        }\n      }\n    });\n  }\n\n  getRoles() {\n    this.roles = [];\n    this._roles.getRoles().subscribe(res => {\n      for (let c of res.data) {\n        this.roles.push({\n          label: c.roleName,\n          value: c.roleId,\n          description: c.roleDescription,\n          creator: c.roleCreator,\n          date: c.roleDate,\n          icon: c.role_iconname\n        });\n        this.rolesMenu.push(c.roleName.toLowerCase());\n        this.rolesMenu.push(c.roleName);\n      }\n    });\n  }\n\n  setGroupList(state) {\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.limitpage = this.sprints.length > 20 ? 20 : this.sprints.length;\n    this.itemcount = this.sprints.length;\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    return text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n  }\n\n  getPermits() {\n    this._roles.getPermits().subscribe(res => {\n      this.selectedPermits = [];\n      this.permits = [];\n      let permitverify = [];\n      if (this.submoduleChk > 0) {\n        for (let c of res.data) {\n          if (c.role == this.selectedRole) {\n            if (c.submodule == this.submoduleChk) {\n              if (permitverify.indexOf(c.permit) < 0) {\n                this.permits.push({ label: c.description, value: c.permit });\n                permitverify.push(c.permit);\n              }\n              this.selectedPermits.push(c.permit);\n            }\n          } else if (c.role == null || c.role != this.selectedRole) {\n            if (c.submodule == this.submoduleChk) {\n              if (permitverify.indexOf(c.permit) < 0) {\n                this.permits.push({ label: c.description, value: c.permit });\n                permitverify.push(c.permit);\n              }\n            }\n          }\n        }\n      }\n    });\n  }\n\n  updateSelect(sbmodule) {\n    this.submoduleChk = sbmodule;\n    this.getPermits();\n  }\n  //==== FUNCION ORIGINAL ============\n  // savePermits(permit) {\n  //   if (permit.length > 0) {\n  //     this._roles\n  //       .savePermits(permit, this.submoduleChk, this.selectedRole)\n  //       .subscribe(res => {\n  //         this.toastr.success(res.message, \"Permits saved\");\n  //         this.getPermits();\n  //       });\n  //   } else {\n  //     this._roles\n  //       .savePermits(0, this.submoduleChk, this.selectedRole)\n  //       .subscribe(res => {\n  //         this.toastr.success(res.message, \"Permits saved\");\n  //         this.getPermits();\n  //       });\n  //   }\n  // }\n\n  addRole() {\n    this.children_show = [];\n    this.selectedSubmodule = [];\n    this.obj = {\n      role_NameNew: \"\",\n      role_description: \"\"\n    };\n    this.getAllModules();\n    //this.roleNameNew = \"\";\n    this.selectedModules = [];\n    $(\"#addRole\").modal(\"show\");\n  }\n\n  saveRole(role, modules, permit) {\n    this._roles.saveRole(role, modules).subscribe(res => {\n      this.toastr.success(res.message, \"Role have been saved\");\n      this.getRoles();\n      this.role = {\n        role_NameNew: \"\",\n        role_description: \"\"\n      };\n      this.selectedModules = [];\n      this.savePermits(permit, res.data);\n    });\n  }\n  savePermits(permit, role) {\n    if (permit.length > 0) {\n      this._roles\n        .savePermits(permit, role)\n        .subscribe(res => {\n          this.toastr.success(res.message, \"Permits saved\");\n          this.getPermits();\n        });\n    } \n  }\n  updateRole(role_id, role, modules) {\n    this._roles.updateRole(role_id, role, modules).subscribe(res => {\n      this.toastr.success(res.message, \"Role have been updated\");\n      this.getRoles();\n      //this.roleNameNew = \"\";\n      this.role = {\n        role_NameNew: \"\",\n        role_description: \"\"\n      };\n      this.selectedModules = [];\n    });\n  }\n\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/roles/roles.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./rol.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { HeaderService } from \"../../services/header.service\";\nimport { RolesService } from \"../../services/roles.service\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { MailService } from \"../../services/mail.service\";\n\nimport { ProductService } from \"../../services/product.service\";\nimport { DirectoryService } from \"../../services/directory.service\";\n@Component({\n  selector: \"rol\",\n  template: template\n})\nexport class RolComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    arouter: ActivatedRoute,\n    toastr: ToastrService,\n    groupService: GroupService,\n    rolesService: RolesService,\n    headerService: HeaderService\n  ) {\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._roles = rolesService;\n    this._groups = groupService;\n    this._aroute = arouter;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.lblgroups = [];\n    this.selRole = 0;\n    this.modulesMyTree = [];\n    this.subModules = [];\n    this.rolesMenu = [];\n    this.submodChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPermits = [];\n    this.modAdd = [];\n    this.children = [];\n    this._header = headerService;\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n      }\n    });\n    this._roles.getModules(0).subscribe(res => {\n      let parent = [];\n      for (let c of res.data) {\n        if (c.parent == null) {\n          parent.push({ parentid: c.modid, parentname: c.moduleName });\n        } else {\n          for (let u of parent) {\n            if (c.parent == u.parentid) {\n              this.modAdd.push({ label: c.moduleName, value: c.modid });\n            }\n          }\n        }\n      }\n    });\n  }\n\n  ngOnInit() {\n    this._aroute.params.forEach(params => {\n      this.stTitle = \"Squadlinx\";\n      if(localStorage.getItem('title')){\n        this.stTitle = localStorage.getItem('title');\n      }\n      this._title.setTitle(\".:: \" + this.stTitle + \" : Rol #\" + params.idrole);\n      this.getModulesRol(params.idrole);\n    });\n    this.getMyRoles();\n    //this.getModules();\n  }\n\n  getModulesRol(role) {\n    //console.log(role);\n    this.selRole = role;\n    this.modulesMyTree = [];\n    this.submodChk = 0;\n    this._roles.getModules(role).subscribe(res => {\n      let module_id = \"0\";\n      let moduleName = \"\";\n      let children = [];\n      let parent = null;\n      //console.log(res);\n      for (let u of res.data) {\n        if (module_id != u.modid) {\n          if (module_id != \"0\" && parent == null) {\n            this.modulesMyTree.push({\n              label: moduleName,\n              data: module_id,\n              expanded: false,\n              expandedIcon: \"fa-folder-open\",\n              collapsedIcon: \"fa-folder\",\n              children: children,\n              selectable: false\n            });\n          }\n          moduleName = u.moduleName;\n          module_id = u.modid;\n          children = [];\n          parent = u.parent;\n        }\n        if (parent != null) {\n          for (let v of this.modulesMyTree) {\n            if (v.data == parent) {\n              v.children.push({ label: u.moduleName, data: u.modid });\n            }\n          }\n        }\n      }\n      if (module_id != \"0\" && parent == null) {\n        this.modulesMyTree.push({\n          label: moduleName,\n          data: module_id,\n          expanded: false,\n          expandedIcon: \"fa-folder-open\",\n          collapsedIcon: \"fa-folder\",\n          children: children,\n          selectable: false\n        });\n      }\n    });\n  }\n\n  getMyRoles() {\n    this.roles = [];\n    this._roles.getRoles().subscribe(res => {\n      for (let c of res.data) {\n        this.roles.push({ label: c.roleName, value: c.roleId });\n        this.rolesMenu.push(c.roleName.toLowerCase());\n        this.rolesMenu.push(c.roleName);\n      }\n    });\n  }\n\n  setGroupList(state) {\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.limitpage = this.sprints.length > 20 ? 20 : this.sprints.length;\n    this.itemcount = this.sprints.length;\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    return text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n  }\n\n  getPermits() {\n    this._roles.getPermits().subscribe(res => {\n      this.selectedPermits = [];\n      this.permits = [];\n      let permitverify = [];\n      if (this.submodChk > 0) {\n        for (let c of res.data) {\n          if (c.role == this.selRole) {\n            if (c.submodule == this.submodChk) {\n              if (permitverify.indexOf(c.permit) < 0) {\n                this.permits.push({ label: c.description, value: c.permit });\n                permitverify.push(c.permit);\n              }\n              this.selectedPermits.push(c.permit);\n            }\n          } else if (c.role == null || c.role != this.selRole) {\n            if (c.submodule == this.submodChk) {\n              if (permitverify.indexOf(c.permit) < 0) {\n                this.permits.push({ label: c.description, value: c.permit });\n                permitverify.push(c.permit);\n              }\n            }\n          }\n        }\n      }\n    });\n  }\n\n  // updateSelect(sbmodule) {\n  //   this.submodChk = sbmodule;\n  //   this.getPermits();\n  // }\n\n  savePermits(permits) {\n    if (permits.length > 0) {\n      this._roles\n        .savePermits(permits, this.submodChk, this.selRole)\n        .subscribe(res => {\n          this.toastr.success(res.message, \"Permits saved\");\n          this.getPermits();\n        });\n    } else {\n      this._roles\n        .savePermits(0, this.submodChk, this.selRole)\n        .subscribe(res => {\n          this.toastr.success(res.message, \"Permits saved\");\n          this.getPermits();\n        });\n    }\n  }\n\n  // addRole() {\n  //   this.roleNameNew = \"\";\n  //   this.selectedModules = [];\n  //   $('#addRole').modal('show');\n  // }\n\n  // saveRole(rolename,modules){\n  //   this._roles.saveRole(rolename,modules).subscribe(res =>{\n  //     this.toastr.success(res.message, \"Permits saved\");\n  //     this.getRoles();\n  //     this.roleNameNew = \"\";\n  //     this.selectedModules = [];\n  //   });\n  // }\n\n  showMyModal(idModule) {\n    if (this.modulesMyTree[idModule] === undefined) {\n      this.children = [];\n    } else {\n      this.children = this.modulesMyTree[idModule].children;\n    }\n    $(\"#mdSons\").modal(\"show\");\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/roles/rol.component.js","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ToastrService } from 'ngx-toastr';\nimport { ConfirmationService } from 'primeng/primeng';\n\nimport template from './todolist.template.html';\n\nimport { GroupService } from '../../services/group.service';\nimport { HeaderService } from '../../services/header.service';\nimport { TodolistService } from '../../services/todolist.service';\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from '../../pipes';\n\n@Component({\n    selector: 'todolist',\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class TodolistComponent {\n    constructor(router: Router, sanitizer: DomSanitizer, toastr: ToastrService, groupService: GroupService, todolistService: TodolistService, headerService: HeaderService, confirmationService: ConfirmationService) {\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this._header = headerService;\n        this._sanitizer = sanitizer;\n        this._todolist = todolistService;\n        this._groups = groupService;\n        this.confirm = confirmationService;\n        this.todolist = [];\n        this.currentpage = 1;\n        this.textGroup = \"\";\n        this.currentpage = 1;\n        this.pages = [1];\n        this.limitpage = 20;\n        this.itemcount = 0;\n        this.search = \"\";\n        this.levels = [];\n    }\n\n    ngAfterViewInit() {\n        this.reload();\n    }\n    showModaltk(tkid) {\n        $(\"#myTask\" + tkid).click();\n    }\n\n    reload() {\n\n        var filter = {\n            start: this.currentpage * this.limitpage - this.limitpage,\n            end: this.limitpage\n        };\n\n        this._todolist.getListAll(filter).subscribe(res => {\n            this.todolist = res.data.result;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n    }\n\n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n        } else {\n            this.currentpage = Math.round(this.itemcount / this.limitpage);\n            let mod = this.itemcount % this.limitpage;\n            if (mod > 0 && mod < 5) {\n                this.currentpage += 1;\n            }\n        }\n        this.reload();\n    }\n\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.reload();\n    }\n\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        var temporal = document.createElement(\"div\");\n        temporal.innerHTML = text;\n        var text = temporal.textContent || temporal.innerText || \"\";\n\n        return text;\n    }\n\n    getLevels() {\n\n        this._todolist.getLevels().subscribe(res => {\n            for (let level of res.data) {\n                this.levels.push({ label: level.tklv_level, value: level.id_level });\n            }\n        });\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/todolist/todolist.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./users.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { RolesService } from \"../../services/roles.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { HeaderService } from \"../../services/header.service\";\n\n@Component({\n    selector: \"users\",\n    template: template,\n    providers: [ConfirmationService]\n})\nexport class UsersComponent {\n    constructor(\n        title: Title,\n        router: Router,\n        sanitizer: DomSanitizer,\n        toastr: ToastrService,\n        groupService: GroupService,\n        rolesService: RolesService,\n        usersService: UsersService,\n        headerService: HeaderService,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = router;\n        this._sanitizer = sanitizer;\n        this._roles = rolesService;\n        this._groups = groupService;\n        this._users = usersService;\n        this._header = headerService;\n        this.confirm = confirmationService;\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.pages = [1];\n        this.limitpage = 20;\n        this.itemcount = 0;\n        this.groups = [];\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this.lblgroups = [];\n        this.selectedRole = 0;\n        this.modulesTree = [];\n        this.subModules = [];\n        this.roles = [];\n        this.submoduleChk = 0;\n        this.selectedSubmodule = [];\n        this.selectedPermits = [];\n        this.modulesAdd = [];\n        this.users = [];\n        this.user = [];\n        this.userList = [];\n        this.selectedUser = {};\n        this.seluser = [];\n        this.defaultpct = \"\";\n        this.errors = 0;\n        this.group = {};\n        this.validate = false;\n        this.stTitle = \"Squadlinx\";\n        this.textGroup = \"\";\n        this.namegroup = \"ALL\";\n        this.profilepic = {};\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Users ::.\");\n\n        this.isLoading = false;\n        this.filter = false;\n        this.usrs = [\"\"];\n        this.assig = [\"\"];\n        this.projs = [\"\"];\n        this.desc = \"\";\n        this.user_ids = [\"\"];\n        this.date_ini = \"\";\n        this.date_end = \"\";\n        this.prods = [\"\"];\n        this.projs = [\"\"];\n        this.myUser = [];\n        this.rjtask = {};\n\n        this.productsa = [];\n        this.productsb = [];\n    }\n    ngOnInit() {\n        this.getUsers();\n        this.getRoles();\n        this._groups.getGroups().subscribe(data => {\n            for (let c of data.data) {\n                this.groups.push({ label: c.grop_name, value: c.grop_id });\n            }\n        });\n        this.user = {};\n        this.user.user_name = \"\";\n        this.user.user_pwd = \"\";\n\n        this._groups.getGroups().subscribe(data => {\n            this.groupsFilter = data.data;\n        });\n\n    }\n\n\n    reload() {\n        this.isLoading = true;\n\n        this.users = [];\n        if (this.myUser.assigned && this.myUser.assigned.length > 0) {\n            this.assig = this.myUser.assigned;\n        } else {\n            this.assig = [\"\"];\n        }\n        if (this.myUser.creators && this.myUser.creators.length > 0) {\n            this.usrs = this.myUser.creators;\n        } else {\n            this.usrs = [\"\"];\n        }\n        if (this.myUser.description && this.myUser.description != \"\") {\n            this.desc = this.myUser.description;\n        } else {\n            this.desc = \"\";\n        }\n        if (this.myUser.user_ids && this.myUser.user_ids.length > 0) {\n            this.user_ids = this.myUser.user_ids;\n        } else {\n            this.user_ids = [\"\"];\n        }\n        if (this.myUser.date_ini != null && this.myUser.date_ini != \"\" && this.myUser.date_ini != \"undefined\") {\n            if (this.date_ini != \"\" && this.date_ini != null) {\n                this.date_ini = this.formatDate(this.myUser.date_ini);\n            } else {\n                this.date_ini = this.myUser.date_ini;\n            }\n        } else {\n            this.date_ini = \"\";\n            this.date_end = \"\";\n        }\n        if (this.myUser.date_end != null && this.myUser.date_end != \"\" && this.myUser.date_end != \"undefined\") {\n            if (this.date_end != \"\" && this.date_end != null) {\n                this.date_end = this.formatDate(this.myUser.date_end);\n            } else {\n                this.date_end = this.myUser.date_end;\n            }\n        } else {\n            this.date_end = \"\";\n            this.date_ini = \"\";\n        }\n        if (this.myUser.products && this.myUser.products.length > 0) {\n            this.prods = this.myUser.products;\n        } else {\n            this.prods = [\"\"];\n        }\n        if (this.myUser.projects && this.myUser.projects.length > 0) {\n            this.projs = this.myUser.projects;\n        } else {\n            this.projs = [\"\"];\n        }\n\n        var filter = {\n            start: this.currentpage * this.limitpage - this.limitpage,\n            end: this.limitpage,\n            all: this.search.trim(),\n            group: this.textGroup,\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\",\n            user_ids: this.user_ids,\n            date_ini: this.date_ini,\n            date_end: this.date_end,\n            products: this.prods,\n            projects: this.projs,\n            typeUser: this.nameTypeUser\n        };\n        this._users.getUsersx(filter).subscribe(res => {\n            this.isLoading = false;\n            this.userList = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n\n    }\n\n    addUser() {\n        this.errors = 0;\n        this.user = {};\n        this.profilepic = {};\n        this.user.urlimg = [];\n        $('#addUser').modal('show');\n    }\n\n\n\n\n    getUsers() {\n        this.users = [];\n        this._users.getUserList().subscribe(data => {\n            this.user = data.data;\n            for (let c of data.data) {\n                if (c.user_name) {\n                    this.users.push({\n                        label: c.user_name + \" \" + c.user_lastname,\n                        value: c.user_id\n                    });\n                }\n            }\n\n        });\n        this.reload();\n    }\n\n\n    showModal(user) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        let noGroup = this.textGroup === 'noGroup' ? true : false;\n        this._users.geteditUser(user.user_id, noGroup).subscribe(res => {\n            if (res.data) {\n                this.user = res.data;\n            }\n        });\n        $(\"#viewUser\").modal(\"show\");\n    }\n\n\n\n    showModalEditUser(user) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        let noGroup = this.textGroup === 'noGroup' ? true : false;\n        this._users.geteditUser(user.user_id, noGroup).subscribe(res => {\n            if (res.data) {\n                this.user = res.data;\n            }\n        });\n        $(\"#EditUser\").modal(\"show\");\n    }\n    getRoles() {\n        this.roles = [];\n        this._roles.getRoles().subscribe(res => {\n            for (let c of res.data) {\n                this.roles.push({ label: c.roleName, value: c.roleId });\n            }\n        });\n    }\n\n    saveUser(user) {\n\n        if(this.errors == 1){\n            this.toastr.warning(\"E-mail Address Incorrect!\");\n            return false;\n        }    \n        if(!this.user.user_phone || this.user.user_phone == ''){\n            this.validate = false;\n        }else if(this.user.user_phone  && this.user.user_phone.length <13){\n            this.toastr.warning(\"Phone Number Incorrect!\");\n            return false;\n        }else if(this.user.user_phone.length >=13){\n            this.validate = true;\n        }\n\n        if(!this.user.role_id || \n            !this.user.grop_id || \n            this.user.user_name.trim() == \"\" || \n            this.user.user_lastname.trim() == \"\" ||\n            this.user.user_email.trim() == \"\" ) {\n            this.validate = false;\n        }\n\n        if(this.validate === true){\n            if (this.profilepic != {}) {\n                user.user_newpicture = this.profilepic;\n            }\n    \n            let usrNew = false;\n            let email_e = user.user_email.toLowerCase();\n            let result_e = email_e.split(\"@\");\n            let user_name = user.user_name.trim() + \".\" + user.user_lastname.trim();\n    \n            user.user_alias = this.getUserAlias(user_name);\n            user.user_user = result_e[0].toLowerCase();\n    \n            this._users.saveUser(user).subscribe(data => {\n                if (data.data == \"OK\") {\n                    this.toastr.success(\"User has been created successfully\");\n                    $(\"#addUser\").modal(\"hide\");\n                } else {\n                    this.toastr.error(data.message, \"Error!\");\n                }\n                this.reload();\n            });\n        }else{\n            this.toastr.warning(\"Incomplete Fields!\");\n        }\n    }\n\n    getUserAlias(user) {\n        let split_user = user.toLowerCase().split(\".\");\n        let split_lastname = split_user[1].split(\" \");\n        return split_user[0].charAt(0).toUpperCase() + \".\" + this.firstUppercase(split_lastname[0]);\n    }\n\n    firstUppercase(str) {\n        return str.charAt(0).toUpperCase() + str.slice(1);\n    }\n\n    editUser(user) {\n\n        if (this.profilepic != {}) {\n            user.user_newpicture = this.profilepic;\n        }\n\n        let user_name = user.user_name.trim() + \".\" + user.user_lastname.trim();\n        user.user_alias = this.getUserAlias(user_name);\n\n        // this._users.editUser(this.user).subscribe(data => {\n        this._users.editUser(user).subscribe(data => {\n            if (data.data == \"OK\") {\n                this.toastr.success(\"User updated successfully\");\n            } else {\n                this.toastr.error(data.message, \"Error!\");\n            }\n            this.reload();\n        });\n\n    }\n\n    /*\n    Eliminar usuario\n     */\n\n    deleteUser(user) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.confirm.confirm({\n            message: \"Do you want to delete the user(s)?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (user) {\n                    this._users.deleteUser(user.user_id).subscribe(res => {\n                        if (res.data && res.data != null) {\n                            this.toastr.success(res.message);\n                        } else {\n                            this.toastr.error(res.message);\n                        }\n                        this.reload();\n                    });\n                } else {\n                    if (this.user.length > 0) {\n                        for (var x in this.user) {\n                            this._users.deleteUser(this.user[x]).subscribe(data => {\n                            });\n                        }\n                        this.user = [];\n                        this.toastr.success(\"User deleted successfully\");\n                        this.reload();\n                    }\n                }\n            },\n            reject: () => {\n            }\n        });\n    }\n\n    addPicture(event) {\n        var files = event.srcElement.files;\n        this.selectedUser.urlimg.push(files[0]);\n    }\n\n    validateEmail(email) {\n        var regexp = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n        return regexp.test(email);\n    }\n    verifyEmail(email) {\n        // $(\"#result\").text(\"\");\n        this._users.verifyEmail(email).subscribe(data => {\n            if (data.data == true) {\n                this.errors = 0;\n                return true;\n            } else {\n                this.errors = 1;\n                return false;\n            }\n        });\n    }\n    soloLetras(e) {\n        var key = e.keyCode || e.which;\n        var teclado = String.fromCharCode(key).toLowerCase();\n        var letras = \"áéíóúabcdefghijklmnñopqrstuvwxyz \";\n        var especiales = \"13-37-38-46-164\";\n        var teclado_especial = false\n        for (var i in especiales) {\n            if (key == especiales[i]) {\n                var teclado_especial = true;\n                break;\n            }\n        }\n        if (letras.indexOf(teclado) == -1 && !teclado_especial) {\n            return false;\n        }\n    }\n\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n        this.searchUser();\n    }\n\n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n        } else {\n            this.currentpage = Math.round(this.itemcount / this.limitpage);\n            let mod = this.itemcount % this.limitpage;\n            if (mod > 0 && mod < 5) {\n                this.currentpage += 1;\n            }\n        }\n        this.reload();\n    }\n\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.reload();\n    }\n\n\n    changedExtraHandler(event) {\n        if (event.keyCode == 13) {\n            this.isLoading = true;\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                group: this.textGroup,\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._users.getUsersx(filter).subscribe(res => {\n                this.isLoading = false;\n                this.userList = res.data.data;\n                this.itemcount = res.data.count;\n                this.lastpage = this.itemcount / this.limitpage;\n                if (this.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(this.lastpage);\n                    this.lastpage = countpag;\n                }\n                this.pages = [];\n                for (let i = 1; i <= this.lastpage; i++) {\n                    this.pages.push(i);\n                }\n                if (this.pages.length == 0) {\n                    this.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }\n\n    filterText() {\n        this.isLoading = true;\n        this.currentpage = 1;\n\n        var filter = {\n            start: 0,\n            end: this.limitpage,\n            all: this.search.trim(),\n            group: this.textGroup,\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._users.getUsersx(filter).subscribe(res => {\n\n            this.isLoading = false;\n            this.userList = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n        this.cont = 0;\n    }\n    refresh() {\n\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.pages = [1];\n        this.limitpage = 20;\n        this.itemcount = 0;\n\n        this.isLoading = true;\n        this.currentpage = 1;\n\n        var filter = {\n            start: 0,\n            end: this.limitpage,\n            all: this.search.trim(),\n            group: this.textGroup,\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._users.getUsersx(filter).subscribe(res => {\n            this.isLoading = false;\n            this.userList = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n        this.cont = 0;\n    }\n\n    setGroupList(state, name) {\n        this.namegroup = name;\n        this.textGroup = state;\n        this.currentpage = 1;\n        this.reload();\n\n    }\n\n    onBasicUpload(event, type) {\n        if (type == \"profile\") {\n            this.profilepic = event.target.files[0];\n        }\n\n        if (event.target.files && event.target.files[0]) {\n            var files = event.target.files;\n            if (files[0].size / 1024 / 1024 > 4) {\n                this.toastr.error(\"File size exceeds 4 MB\");\n            } else {\n                var reader = new FileReader();\n                reader.onload = function (e) {\n                    if (type == \"profile\") {\n                        $(\"#profile-img\").attr(\"src\", e.target.result);\n                    }\n                };\n                reader.readAsDataURL(event.target.files[0]);\n            }\n        }\n    }\n\n    showChangePicture(type) {\n        if (type == \"profile\") {\n            $(\"#change-profile\").toggle();\n        }\n    }\n\n    onBasicUploadUser(event, type) {\n        if (type == \"profile\") {\n            this.profilepic = event.target.files[0];\n        }\n\n        if (event.target.files && event.target.files[0]) {\n            var files = event.target.files;\n            if (files[0].size / 1024 / 1024 > 4) {\n                this.toastr.error(\"File size exceeds 4 MB\");\n            } else {\n                var reader = new FileReader();\n                reader.onload = function (e) {\n                    if (type == \"profile\") {\n                        $(\"#profile-img-user\").attr(\"src\", e.target.result);\n                    }\n                };\n                reader.readAsDataURL(event.target.files[0]);\n            }\n        }\n    }\n\n    showChangePictureUser(type) {\n        if (type == \"profile\") {\n            $(\"#change-profile-user\").toggle();\n        }\n    }\n    closeFilter() {\n        this.myUser = [];\n        this.myUsercopy = [];\n        this.search = \"\";\n        this.filter = false;\n        this.myUser.date_ini = \"\";\n        this.myUser.date_end = \"\";\n        this.usrs = [\"\"];\n        this.desc = \"\";\n        this.date_ini = \"\";\n        this.date_end = \"\";\n        this.assig = [\"\"];\n        this.projs = [\"\"];\n        this.user_ids = [\"\"];\n        this.prods = [\"\"];\n        this.projs = [\"\"];\n        this.reload();\n    }\n    searchUser() {\n        this.myUsercopy = jQuery.extend(true, {}, this.myUser);\n        let copy = [];\n        for (let x in this.myUser.assigned) {\n            copy.push(this.myUser.assigned[x].user_id);\n        }\n        this.myUser.assigned = copy;\n        let copyc = [];\n        for (let x in this.myUser.creators) {\n            copyc.push(this.myUser.creators[x].user_id);\n        }\n        this.myUser.creators = copyc;\n        let copyp = [];\n        for (let x in this.myUser.projects) {\n            copyp.push(this.myUser.projects[x].proj_id);\n        }\n        this.myUser.projects = copyp;\n        let copypd = [];\n        for (let x in this.myUser.products) {\n            copypd.push(this.myUser.products[x].prod_id);\n        }\n        this.myUser.products = copypd;\n\n\n        if (this.myUser.date_ini != null && this.myUser.date_ini != \"\" && this.myUser.date_end != null && this.myUser.date_end != \"\") {\n\n            this.myUser.date_ini = this.formatDate(this.myUser.date_ini);\n            this.myUser.date_end = this.formatDate(this.myUser.date_end);\n        } else {\n            this.myUser.date_ini = \"\";\n            this.myUser.date_end = \"\";\n        }\n        this.reload();\n        this.myUser = this.myUsercopy;\n\n    }\n\n    validateTel(e){\n\n        var tecla = (document.all) ? e.keyCode : e.which;\n        var patron = /([A-Z0-9\\s\\\\]+)/i;\n        var tecla_final = String.fromCharCode(tecla).toLowerCase();\n        return patron.test(tecla_final);\n    }\n\n    validateUser() {\n        return (\n          !this.user.role_id || \n          !this.user.grop_id || \n          this.user.user_name.trim() == \"\" || \n          this.user.user_lastname.trim() == \"\" ||\n          this.user.user_email.trim() == \"\" ||\n          !this.user.user_phone ||  \n          this.user.user_phone.trim() == \"\"\n        );\n      }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/users/users.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./usershistory.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { UsersService } from \"../../services/users.service\";\n\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from \"../../pipes\";\n\n@Component({\n    selector: \"usershistory\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class UsersHistoryComponent {\n    constructor(\n        title: Title,\n        router: Router,\n        sanitizer: DomSanitizer,\n        toastr: ToastrService,\n        groupService: GroupService,\n        usersService: UsersService,\n        arouter: ActivatedRoute,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._users = usersService;\n        this._groups = groupService;\n        this._confirm = confirmationService;\n        this._aroute = arouter;\n\n        this.stTitle = \"Squadlinx\";\n        this.seluser = [];\n        this.groups = [];\n        this.userHistories = [];\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.user_id = \"\";\n        this.user = {};\n        this.userHistory = {};\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.itemcount = 0;\n\n        this.reload();\n    }\n\n    \n    ngOnInit() { \n        this._groups.getGroups().subscribe(data => {\n            for (let c of data.data) {\n                this.groups.push({ label: c.grop_name, value: c.grop_id });\n            }\n        });\n    }\n\n    selectAll() {\n        if (this.seluser.length > 0) {\n            this.seluser = [];\n        } else {\n            this.seluser = [];\n            for (var u in this.userHistories) {\n                this.seluser.push(this.userHistories[u].value);\n            }\n        }\n    }\n\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        var temporal = document.createElement(\"div\");\n        temporal.innerHTML = text;\n        var text = temporal.textContent || temporal.innerText || \"\";\n\n        return text;\n    }\n\n    reload() {\n        this.isLoading = true;\n        this.user = {};\n        this.userHistories = [];\n\n        this._aroute.params.forEach(params => {\n            this.user_id = params.iduser;\n            this._users.getUserInfo(params.iduser).subscribe(res => {\n                this.user = res.data; \n                if (this.user == null) {\n                    this._router.navigate(['/403']);\n                }\n                this._title.setTitle(\n                    \".:: \" + localStorage.getItem(\"title\") + \" : \" + this.user.user_alias + \" ::.\"\n                );              \n            });\n\n            this._users.getUserHistory(params.iduser).subscribe(res => {\n                this.isLoading = false;\n                this.userHistories = res.data;           \n            });\n        });        \n    }\n\n    showModal(userHistory) {\n        this.userHistory = {};\n        this.userHistory = userHistory;\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        $(\"#mdDetail\").modal(\"show\");\n    }\n\n    showAddModal() {\n        this.userHistory = {};\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    }\n\n    save() {\n        this.userHistory.user_id = this.user_id;\n        this.userHistory.date_init = this.formatDate(this.userHistory.date_init);\n        this.userHistory.date_end = this.formatDate(this.userHistory.date_end);\n        this._users.saveUserHistory(this.userHistory).subscribe(res => {\n            if (res.data) {\n                this.toastr.success(res.message, \"History Group User saved successfully\");\n            } else {\n                this.toastr.warning(res.message, \"Bad news!\");                \n            }\n            $(\"#mdAdd\").modal(\"hide\");\n            this.reload();\n        });\n    }\n\n    showEditModal(userHistory) {\n        this.userHistory = userHistory;\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        $(\"#mdEdit\").modal(\"show\");\n    }\n\n    update() {\n        this.userHistory.date_init = this.formatDate(this.userHistory.date_init);\n        this.userHistory.date_end = this.formatDate(this.userHistory.date_end);\n        this._users.updateUserHistory(this.userHistory).subscribe(res => {\n            if (res.data) {\n                this.toastr.success(res.message, \"User History Group updated successfully\");\n            } else {\n                this.toastr.warning(res.message, \"Bad news!\");                \n            }\n            $(\"#mdEdit\").modal(\"hide\");\n            this.reload();\n        });\n    }\n\n    delete(grhi_id) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n\n        this._confirm.confirm({\n            message: \"Do you want to proceed?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (grhi_id) {\n                    this._users.deleteUserHistory(grhi_id).subscribe(res => {\n                        if (res.data == false) {\n                            this.toastr.error(\n                                \"The Unit have data base references, can't be deleted\"\n                            );\n                            this.reload();\n                        } else {\n                            this.reload();\n                            this.toastr.success(\"Unit deleted successfully\");\n                        }\n                    });\n                } else {\n                    if (this.seluser.length > 0) {\n                        for (var x in this.seluser) {\n                            this._users\n                                .deleteUserHistory(this.seluser[x])\n                                .subscribe(res => {\n                                    if (res.data == false) {\n                                        this.toastr.error(\n                                            \"One or more Unit have data base references, can't be deleted\"\n                                        );\n                                        this.reload();\n                                    } else {\n                                        this.seluser = [];\n                                        this.toastr.success(\"User History deleted successfully\");\n                                        this.reload();\n                                    }\n                                });\n                        }\n                    }\n                }\n            },\n            reject: () => { }\n        });\n    }\n    \n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n        } else {\n            this.currentpage = Math.round(this.itemcount / this.limitpage);\n            let mod = this.itemcount % this.limitpage;\n            if (mod > 0 && mod < 5) {\n                this.currentpage += 1;\n            }\n        }\n        this.reload();\n    }\n\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.reload();\n    }\n\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n        this.reload();\n    }\n\n    lpad(n, width, z) {\n        z = z || \"0\";\n        n = n || \"0\";\n        n = n + \"\";\n        return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n\n    formatDate(date) {\n        if(date && date !== \"\"){\n            date = new Date(date);\n            var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n            var monthIndex = (date.getMonth() + 1) < 10 ? \"0\" + (date.getMonth() + 1) : (date.getMonth() + 1);\n            var year = date.getFullYear();\n            return year + '-' + monthIndex+ '-' + day;\n        }else{\n            return '';\n        }\n    }\n\n    validateSave() {\n        return (\n          !this.userHistory.grop_id ||\n          this.userHistory.grop_id == \"\" ||\n          this.userHistory.grop_id == \"undefined\" ||        \n          !this.userHistory.date_init ||\n          this.userHistory.date_init == \"\" ||\n          this.userHistory.date_init == \"undefined\"\n        );\n      }\n\n    changedExtraHandler(event) {\n        if (event.keyCode == 13) {\n            this.reload();\n        }\n    }\n\n    filterText() {\n        this.reload();\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/users/usershistory.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ParameterService } from \"../../services/parameter.service\";\n\nimport template from \"./parameterlist.template.html\";\n\n@Component({\n  selector: \"parameterlist\",\n  template: template\n})\nexport class ParameterListComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    arouter: ActivatedRoute,\n    toastr: ToastrService,\n    paramService: ParameterService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._aroute = arouter;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._params = paramService;\n    this.posState = \"clas_id\";\n    this.textState = [\"1\"];\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.classes = [];\n    this.parameters = [];\n    this.clase = {};\n    this.classeslbl = [];\n    this.parameter = {};\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Parameters ::.\");\n  }\n\n  ngOnInit() {\n    this.load();\n  }\n\n  load() {\n    this._aroute.params.forEach(params => {\n      this._params.getParametersClass(params.idclass).subscribe(res => {\n        this.parameters = res.data;\n        this.clase = this.parameters[0];\n      });\n    });\n    this._params.getClasses().subscribe(res => {\n      this.classes = res.data;\n      for (let c of res.data) {\n        this.classeslbl.push({ label: c.clas_name, value: c.clas_id });\n      }\n    });\n  }\n  mdAddParam() {\n    this.parameter = {};\n    $(\"#mdAddParam\").modal(\"show\");\n  }\n  mdEditParam(obj_Class) {\n    this.parameter = obj_Class;\n    $(\"#mdEditParam\").modal(\"show\");\n  }\n  mdShowParam(obj_Class) {\n    $(\"#mdShowParam\").modal(\"show\");\n  }\n  saveParameter(idclas) {\n    this.parameter.clas_id = idclas;\n    this._params.putParameter(this.parameter).subscribe(res => {\n      if (res.data != \"OK\") {\n        this.toastr.warning(res.message, \"Attention\");\n      } else {\n        this.toastr.success(res.message, \"Parameter save successfully\");\n      }\n      this.load();\n    });\n  }\n\n  delParameter(paramid) {\n    this._params.delParameter(paramid).subscribe(res => {\n      if (res.data != \"OK\") {\n        this.toastr.warning(res.message, \"Attention\");\n      } else {\n        this.toastr.success(res.message, \"Parameter deleted successfully\");\n      }\n      this.load();\n    });\n  }\n\n  updateParameter(idclas, idparam) {\n    this.parameter.clas_id = idclas;\n    this.parameter.para_id = idparam;\n    this._params.updateParameter(this.parameter).subscribe(data => {\n      //console.log(data);\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Error saving Parameter!\");\n      } else {\n        this.toastr.success(data.message, \"Parameter updated successfully\");\n      }\n      this.load();\n    });\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/parameter/parameterlist.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ParameterService } from \"../../services/parameter.service\";\n\nimport template from \"./parameters.template.html\";\n\n@Component({\n  selector: \"parameters\",\n  template: template\n})\nexport class ParametersComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    paramService: ParameterService,\n    confirmationService: ConfirmationService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this.toastr = toastr;\n    this.confirm = confirmationService;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._params = paramService;\n    this.posState = \"clas_id\";\n    this.textState = [\"1\"];\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.classes = [];\n    this.parameters = [];\n    this.classeslbl = [];\n    this.parameter = {};\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Classes and Parameters ::.\");\n  }\n\n  ngOnInit() {\n    this.load();\n  }\n\n  load() {\n    this._params.getParameters().subscribe(res => {\n      this.parameters = res.data;\n    });\n    this._params.getClasses().subscribe(res => {\n      this.classes = res.data;\n      for (let c of res.data) {\n        this.classeslbl.push({ label: c.clas_name, value: c.clas_id });\n      }\n    });\n  }\n\n  saveParamter() {\n    this._params.putParameter(this.parameter).subscribe(res => {\n      if (res.data != \"OK\") {\n        this.toastr.warning(res.message, \"Attention\");\n      } else {\n        this.toastr.success(res.message, \"Parameter save successfully\");\n      }\n      this.load();\n    });\n  }\n\n  delParamter(paraid) {\n    this._params.delParameter(paraid).subscribe(res => {\n      if (res.data != \"OK\") {\n        this.toastr.warning(res.message, \"Attention\");\n      } else {\n        this.toastr.success(res.message, \"Parameter save successfully\");\n      }\n      this.load();\n    });\n  }\n\n  showClass(obj_Class) {\n    this.parameter = obj_Class;\n    $(\"#mdClass\").modal(\"show\");\n  }\n  editClass(obj_Class) {\n    this.parameter = obj_Class;\n    $(\"#mdEditClass\").modal(\"show\");\n  }\n  mdAddClass() {\n    this.parameter = {};\n    $(\"#mdAddClass\").modal(\"show\");\n  }\n  updateClass() {\n    this.parameter.clas_description = this.parameter.clas_description\n      .split(\"\\t\")\n      .join(\"\");\n    this.parameter.clas_description = this.parameter.clas_description\n      .split(\"\\n\")\n      .join(\"\");\n    this.parameter.clas_description = this.parameter.clas_description\n      .split(\"\\r\")\n      .join(\"\");\n    this._params.updateClass(this.parameter).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Error saving Class!\");\n      } else {\n        this.toastr.success(data.message, \"Class updated successfully\");\n      }\n      this.load();\n    });\n  }\n\n  delClass(id) {\n    this.confirm.confirm({\n      message: \"Do you want to proceed?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (id) {\n          this._params.delClass(id).subscribe(res => {\n            if (res.data == \"OK\") {\n              this.toastr.success(\"Class deleted successfully\");\n              this.load();\n            } else {\n              this.toastr.error(\n                \"The Class has one or more associated parameters! \"\n              );\n            }\n          });\n        } \n      },\n      reject: () => {}\n    });\n  }\n\n  saveClass() {\n    this._params.putClass(this.parameter).subscribe(res => {\n      if (res.data != \"OK\") {\n        this.toastr.warning(res.message, \"Error saving class\");\n      } else {\n        this.toastr.success(res.message, \"Class saved successfully\");\n      }\n      this.load();\n    });\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/parameter/parameters.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./categories.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { CategoriesService } from \"../../services/categories.service\";\nimport { TypeService } from \"../../services/type.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { ProductService } from \"../../services/product.service\";\n\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from \"../../pipes\";\n\n@Component({\n    selector: \"categories\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class CategoriesComponent {\n    constructor(\n        title: Title,\n        router: Router,\n        sanitizer: DomSanitizer,\n        groupService: GroupService,\n        toastr: ToastrService,\n        usersService: UsersService,\n        typeService: TypeService,\n        categoriesService: CategoriesService,\n        arouter: ActivatedRoute,\n        productService: ProductService,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._groups = groupService;\n        this._categories = categoriesService;\n        this._products = productService;\n        this.confirm = confirmationService;\n        this.textState = \"\";\n        this.posState = \"status\";\n        this.textType = \"\";\n        this.posGroup = \"grop_id\";\n        this.search = \"\";\n        this.posOrder = \"\";\n        this._types = typeService;\n        this._users = usersService;\n        this.products = [];\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this._aroute = arouter;\n        this.limitpage = 20;\n        this.itemcount = 0;\n        this.groups = [];\n        this.plmt = [];\n        this.stscat = [];\n        this.states = [];\n        this.lblgroups = [];\n        this.selcat = [];\n        this.userlist = [];\n        this.categories = [];\n        this.categorie = {\n            fields: [],\n            users: []\n        };\n        this.categoryMenu = [];\n        this.category = { approvalusers: [], fields: [], cate_appr: 0 };\n        this.emails = [];\n        this.st_deleted = 0;\n        //this.statuslist = [];\n        this.tycat = [];\n        this.tycate = [];\n        this.category.categoryNameNew = \"\";\n        // this.statuslist =[];\n        this.count = 0;\n        this.var = 0;\n        //this.categories.campos = 2;\n        this.campo = \"\";\n        // this.category.fields = [];\n        this.stTitle = \"Squadlinx\";\n        this.prodname = \"ALL\";\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Categories ::.\");\n\n        //Category status\n        this._categories.getCategoryStatus().subscribe(res => {\n            for (let c of res.data) {\n                this.stscat.push({ label: c.para_name, value: c.para_id });\n            }\n        });\n        this._types.getTypes().subscribe(res => {\n            for (let c of res.data) {\n                this.tycate.push({ label: c.type_name, value: c.type_id });\n            }\n        });\n        this._groups.getGroups().subscribe(data => {\n            this.groups = data.data;\n            for (let c of data.data) {\n                this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n            }\n        });\n\n        this.states = [];\n        this._categories.getStates().subscribe(data => {\n            this.states = data.data;\n        });\n\n        this._products.getProducts().subscribe(data => {\n          this.products = [];\n          for (let c of data.data) {\n            this.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n        });\n        this.prod_id = \"\";\n        this.usersCRM = [];\n        this.usersCRMa = [];\n        this._users.getCRMUsers().subscribe(data => {\n            this.usersCRM = data.data;\n            this.usersCRMa = data.data;\n        });\n        this.reload();\n    }\n\n    ngOnInit() { }\n\n    reload() {\n        this.isLoading = true;\n        this.categories = [];\n        var filter = {\n            start: this.currentpage * this.limitpage - this.limitpage,\n            end: this.limitpage,\n            all: this.search.trim(),\n            state: this.textState,\n            type: this.textType,\n            prod_id: this.prod_id,\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._categories.getCategoryList(filter).subscribe(res => {\n            this.isLoading = false;\n            this.categories = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n        this.cont = 0;\n    }\n\n    addCategory() {\n        // this.categories.campos = 2;\n        // this.var=0;\n        this.count = 0;\n        this.category.number = 0;\n        // this.campo = \"hola\";\n        this.category.categoryNameNew = \"\";\n        this.category = { approvalusers: [], fields: [] };\n        this.category.approvalusers = [];\n        this.category.fields = [];\n        this.selectedModules = [];\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        $(\"#AddCategory\").modal(\"show\");\n    }\n\n    createForm(c) {\n        // console.log(this.categories.campos);\n        // for (var i = 0; i <= this.categories.campos; i++) {\n        //   this.categories.fields.push(this.campo);\n        // }\n\n        //this.category.fields.push('');\n\n        c--;\n        this.category.fields = [];\n        for (var i = 0; i <= c; i++) {\n            var campo = {\n                campo_value: \"\",\n                campo_mandatory: false\n            };\n            this.category.fields.push(campo);\n        }\n        //this.category.number =0;\n        //this.category.fields.push('');\n    }\n\n    actFields(a) {\n        this.category.fields.push(a);\n    }\n\n    filterMultiple(event) {\n        let query = event.query;\n        this.usersCRM = this.filter(query, this.usersCRMa);\n    }\n\n    filterMultipleEmails(event) {\n        let query = event.query;\n        this.listmails = this.filter(query, this.listmailsa);\n    }\n\n    filter(query, countries) {\n        let filtered = [];\n        for (let i = 0; i < countries.length; i++) {\n            let country = countries[i];\n            if (\n                country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n            ) {\n                filtered.push(country);\n            }\n        }\n        return filtered;\n    }\n\n    showModal(cate) {\n        cate.approvalusers = [];\n        cate.fields = [];\n        this.category = cate;\n        this._categories.getUsersCategory(cate.cate_id).subscribe(res => {\n            for (let c of res.data) {\n                this.category.approvalusers.push(c);\n            }\n        });\n        this._categories.getFieldsCategory(cate.cate_id).subscribe(res => {\n            for (let c of res.data) {\n                this.category.fields.push(c);\n            }\n        });\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        $(\"#mdCategory\").modal(\"show\");\n    }\n\n    showModalEditCategory(cate) {\n\n        this._categories.getCategorie(cate.cate_id).subscribe(res => {\n            if (res.data) {\n                this.categorie = res.data;\n            }\n        });\n        $(\"#EditCategory\").modal(\"show\");\n    }\n\n    updateCategory() {\n        let category = {};\n\n        category.cate_id = this.categorie.cate_id;\n        category.cate_desc = this.categorie.cate_desc;\n        category.cate_appr = this.categorie.cate_appr;\n        category.para_status = this.categorie.para_status;\n        category.para_name = this.categorie.para_name;\n        category.para_type = this.categorie.para_type;\n        category.type_name = this.categorie.type_name;\n        category.prod_id = this.categorie.prod_id;\n\n        let users = [];\n        for (let i in this.categorie.users) {\n            if (this.categorie.users[i].user_id) {\n                users.push(this.categorie.users[i].user_id);\n            }\n        }\n        category.users = users;\n\n        let fields_empty = false;\n        let campos = [];\n        for (let j in this.categorie.fields) {\n            if (this.categorie.fields[j].form_field && this.categorie.fields[j].form_field.trim() != \"\") {\n                campos.push(this.categorie.fields[j].form_id + '|*|' + this.categorie.fields[j].form_field + '|*|' + this.categorie.fields[j].form_mandatory);\n            } else {\n                fields_empty = true;\n            }\n        }\n\n        if (fields_empty == false) {\n            category.fields = campos;\n\n            this._categories.updateCategory(category).subscribe(res => {\n                if (res.data && res.data != undefined && res.data == true) {\n                    this.toastr.success(res.message);\n                    $(\"#EditCategory\").modal(\"hide\");\n                    this.reload();\n                } else {\n                    this.toastr.warning(res.message, \"Error\");\n                }\n            });\n        } else {\n            this.toastr.warning(\"Empty form fields\");\n        }\n    }\n\n    deleteFieldForm(index) {\n        this.categorie.fields.splice(index, 1);\n    }\n\n    addFieldForm() {\n        this.categorie.fields.push({ form_id: 0, form_field: \"\" });\n    }\n\n    saveCategory() {\n        let usarr = [];\n        let fields_empty = false;\n        for (let x in this.category.approvalusers) {\n            if (this.category.approvalusers[x].user_id) {\n                usarr.push(this.category.approvalusers[x].user_id);\n            }\n        }\n        this.category.users = usarr;\n        let campos = [];\n        for (let y in this.category.fields) {\n            if (this.category.fields[y].campo_value && this.category.fields[y].campo_value.trim() != \"\") {\n                campos.push(this.category.fields[y].campo_value + '|*|' + this.category.fields[y].campo_mandatory);\n                fields_empty = false;\n            } else {\n                fields_empty = true;\n            }\n        }\n        if (fields_empty == false) {\n            this.category.fields = campos;\n            this._categories.putCategory(this.category).subscribe(data => {\n                if (data.data === \"\" || data.data === \"0\") {\n                    this.toastr.warning(data.message, \"Error\");\n                } else {\n                    this.toastr.success(data.message, \"Category Saved successfully\");\n                }\n                $(\"#AddCategory\").modal(\"hide\");\n                this.reload();\n            });\n        } else {\n            this.toastr.warning(\"Empty form fields\");\n        }\n    }\n\n    deleteCategory(cat) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.confirm.confirm({\n            message: \"Do you want to delete the categorie(s)?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (cat) {\n                    this._categories.deleteCategory(cat).subscribe(data => {\n                        if (data.data != null) {\n                            this.toastr.success(data.message, \"Categorie deleted successfully\");\n                            this.reload();\n                        } else {\n                            this.toastr.warning(\"\", data.message);\n                        }\n                    });\n                } else {\n                    if (this.selcat.length > 0) {\n                        for (var x in this.selcat) {\n                            this._categories\n                                .deleteCategory(this.selcat[x])\n                                .subscribe(data => { });\n                        }\n                        this.selcat = [];\n                        this.toastr.success(\"Categories deleted successfully\");\n                        this.reload();\n                    }\n                }\n            },\n            reject: () => { }\n        });\n    }\n\n    innactiveCategory(cat) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.confirm.confirm({\n            message: \"Do you want to innactive the categorie(s)?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (cat) {\n                    this._categories.innactiveCategory(cat).subscribe(data => {\n                        if (data.data != null) {\n                            this.toastr.success(data.message, \"Categorie innactived successfully\");\n                            this.reload();\n                        } else {\n                            this.toastr.warning(\"\", data.message);\n                        }\n                    });\n                } else {\n                    if (this.selcat.length > 0) {\n                        for (var x in this.selcat) {\n                            this._categories\n                                .innactiveCategory(this.selcat[x])\n                                .subscribe(data => { });\n                        }\n                        this.selcat = [];\n                        this.toastr.success(\"Categories innactived successfully\");\n                        this.reload();\n                    }\n                }\n            },\n            reject: () => { }\n        });\n    }\n\n    reactiveCategory(cat) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.confirm.confirm({\n            message: \"Do you want to reactive the categorie(s)?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (cat) {\n                    this._categories.reactiveCategory(cat).subscribe(data => {\n                        if (data.data != null) {\n                            this.toastr.success(data.message, \"Categorie reactived successfully\");\n                            this.reload();\n                        } else {\n                            this.toastr.warning(\"\", data.message);\n                        }\n                    });\n                } else {\n                    if (this.selcat.length > 0) {\n                        for (var x in this.selcat) {\n                            this._categories\n                                .reactiveCategory(this.selcat[x])\n                                .subscribe(data => { });\n                        }\n                        this.selcat = [];\n                        this.toastr.success(\"Categories reactived successfully\");\n                        this.reload();\n                    }\n                }\n            },\n            reject: () => { }\n        });\n    }\n\n    lpad(n, width, z) {\n        z = z || \"0\";\n        n = n || \"0\";\n        n = n + \"\";\n        return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n\n    selectAll() {\n        if (this.selcat.length > 0) {\n            this.selcat = [];\n        } else {\n            this.selcat = [];\n            for (var t in this.categories) {\n                this.selcat.push(this.categories[t].value);\n            }\n        }\n    }\n\n    setStateList(state) {\n        this.textState = state;\n        this.posState = \"para_status\";\n        this.currentpage = 1;\n        this.reload();\n    }\n\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n        this.reload();\n    }\n\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.reload();\n    }\n\n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n        } else {\n            this.currentpage = Math.round(this.itemcount / this.limitpage);\n            let mod = this.itemcount % this.limitpage;\n            if (mod > 0 && mod < 5) {\n                this.currentpage += 1;\n            }\n        }\n        this.reload();\n    }\n\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        var temporal = document.createElement(\"div\");\n        temporal.innerHTML = text;\n        var text = temporal.textContent || temporal.innerText || \"\";\n\n        return text;\n    }\n\n    changedExtraHandler(event) {\n        if (event.keyCode == 13) {\n            this.isLoading = true;\n            this.projects = [];\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                state: this.textState,\n                type: this.textType,\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            this._categories.getCategoryList(filter).subscribe(res => {\n                this.isLoading = false;\n                this.categories = res.data.data;\n                this.itemcount = res.data.count;\n                this.lastpage = this.itemcount / this.limitpage;\n                if (this.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(this.lastpage);\n                    this.lastpage = countpag;\n                }\n                this.pages = [];\n                for (let i = 1; i <= this.lastpage; i++) {\n                    this.pages.push(i);\n                }\n                if (this.pages.length == 0) {\n                    this.pages = [1];\n                }\n            });\n            this.cont = 0;\n        }\n    }\n\n    filterText() {\n        this.isLoading = true;\n        this.projects = [];\n        this.currentpage = 1;\n\n        var filter = {\n            start: 0,\n            end: this.limitpage,\n            all: this.search.trim(),\n            state: this.textState,\n            type: this.textType,\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._categories.getCategoryList(filter).subscribe(res => {\n            this.isLoading = false;\n            this.categories = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n        this.cont = 0;\n    }\n\n    setProductList(prodid, name) {\n        this.prodname = name;\n        this.prod_id = prodid;\n        this.currentpage = 1;\n        this.reload();\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/categories/categories.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./units.template.html\";\n\nimport { UnitsService } from \"../../services/units.service\";\n\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from \"../../pipes\";\n\n@Component({\n    selector: \"units\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class UnitsComponent {\n    constructor(\n        title: Title,\n        router: Router,\n        sanitizer: DomSanitizer,\n        toastr: ToastrService,\n        unitsService: UnitsService,\n        arouter: ActivatedRoute,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = router;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._units = unitsService;\n        this._confirm = confirmationService;\n        this._aroute = arouter;\n\n        this.stTitle = \"Squadlinx\";\n        this.selunit = [];\n        this.units = [];\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.unit = {};\n        this.currentpage = 1;\n        this.limitpage = 20;\n        this.itemcount = 0;\n\n        \n\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Units ::.\");\n        this.reload();\n    }\n\n    \n    ngOnInit() { }\n\n    selectAll() {\n        if (this.selunit.length > 0) {\n            this.selunit = [];\n        } else {\n            this.selunit = [];\n            for (var u in this.units) {\n                this.selunit.push(this.units[u].value);\n            }\n        }\n    }\n\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n        this.reload();\n    }\n\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        var temporal = document.createElement(\"div\");\n        temporal.innerHTML = text;\n        var text = temporal.textContent || temporal.innerText || \"\";\n\n        return text;\n    }\n\n    showModal(unit) {        \n        this.unit = unit;\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        $(\"#mdUnit\").modal(\"show\");\n    }\n\n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n        } else {\n            this.currentpage = Math.round(this.itemcount / this.limitpage);\n            let mod = this.itemcount % this.limitpage;\n            if (mod > 0 && mod < 5) {\n                this.currentpage += 1;\n            }\n        }\n        this.reload();\n    }\n\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.reload();\n    }\n\n    reload() {\n        this.isLoading = true;\n        this.units = [];\n        var filter = {\n            start: this.currentpage * this.limitpage - this.limitpage,\n            end: this.limitpage,\n            all: this.search.trim(),\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._units.getList(filter).subscribe(res => {\n            this.isLoading = false;\n            this.units = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n    }\n\n    showAddModal() {\n        this.unit = {};\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    }\n\n    showEditModal(unit) {\n        this.unit = {};\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this._units.getUnit(unit.unit_id).subscribe(res => { \n            if (res.data) {\n                this.unit = res.data[0];\n            } \n        });\n        $(\"#mdEditUnit\").modal(\"show\");\n    }\n\n    saveUnit() {\n        this._units.putUnit(this.unit).subscribe(res => {\n            if (res.data) {\n                this.toastr.success(res.message, \"Unit Saved successfully\");\n            } else {\n                this.toastr.warning(res.message, \"Bad news!\");                \n            }\n            $(\"#mdAddUnit\").modal(\"hide\");\n            this.reload();\n        });\n    }\n\n    updateUnit() {\n        this._units.updateUnit(this.unit).subscribe(res => {\n            if (res.data) {\n                this.toastr.success(res.message, \"Unit updated successfully\");\n            } else {\n                this.toastr.warning(res.message, \"Bad news!\");               \n            }\n            $(\"#mdEditUnit\").modal(\"hide\");\n            this.reload();\n        });\n    }\n\n    deleteUnit(unit_id) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n\n        this._confirm.confirm({\n            message: \"Do you want to proceed?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (unit_id) {\n                    this._units.deleteUnit(unit_id).subscribe(res => {\n                        if (res.data == false) {\n                            this.toastr.error(\n                                \"The Unit have data base references, can't be deleted\"\n                            );\n                            this.reload();\n                        } else {\n                            this.reload();\n                            this.toastr.success(\"Unit deleted successfully\");\n                        }\n                    });\n                } else {\n                    if (this.selunit.length > 0) {\n                        for (var x in this.selunit) {\n                            this._units\n                                .deleteUnit(this.selunit[x])\n                                .subscribe(res => {\n                                    if (res.data == false) {\n                                        this.toastr.error(\n                                            \"One or more Unit have data base references, can't be deleted\"\n                                        );\n                                        this.reload();\n                                    } else {\n                                        this.selunit = [];\n                                        this.toastr.success(\"Units deleted successfully\");\n                                        this.reload();\n                                    }\n                                });\n                        }\n                    }\n                }\n            },\n            reject: () => { }\n        });\n    }\n\n    lpad(n, width, z) {\n        z = z || \"0\";\n        n = n || \"0\";\n        n = n + \"\";\n        return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n    }\n\n    changedExtraHandler(event) {\n        if (event.keyCode == 13) {\n            this.reload();\n        }\n    }\n\n    filterText() {\n        this.reload();\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/units/units.component.js","import { Component } from '@angular/core';\n\nimport template from './notfound.template.html';\n\n@Component({\n  selector: 'notfound',\n  template: template\n})\nexport class NotfoundComponent {\n    constructor() {\n        \n    }\n\n    escapeHtml(text){\n        if (!text) {\n            text = \"\";\n        }\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/notfound/notfound.component.js","import { Component } from '@angular/core';\n\nimport template from './notpermits.template.html';\n\n@Component({\n  selector: 'notpermits',\n  template: template\n})\nexport class NotpermitsComponent {\n    constructor() {\n        \n    }\n\n    escapeHtml(text){\n        if (!text) {\n            text = \"\";\n        }\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/notfound/notpermits.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { TaskService } from \"../../services/task.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { MailService } from \"../../services/mail.service\";\n\nimport template from \"./product.template.html\";\n\n@Component({\n  selector: \"product\",\n  template: template\n})\nexport class ProductComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    toastr: ToastrService,\n    sanitizer: DomSanitizer,\n    arouter: ActivatedRoute,\n    taskService: TaskService,\n    noteService: NoteService,\n    usersService: UsersService,\n    productService: ProductService,\n    mailService: MailService\n  ) {\n    this._title = title;\n    this._route = route;\n    this._tasks = taskService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._aroute = arouter;\n    this._notes = noteService;\n    this._sanitizer = sanitizer;\n    this._user = usersService;\n    this._products = productService;\n    this._mail = mailService;\n    this.task = { attachments: [] };\n    this.subtask = { attachments: [] };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.searchMail = \"\";\n    this.listmails = [];\n    this.listmailsa = [];\n    this.crmusers = [];\n    this.contacts = [];\n  }\n\n  ngOnInit() {\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this.userslbl = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._user.getEmailList().subscribe(data => {\n      this.listmails = data.data;\n      this.listmailsa = data.data;\n    });\n    this._aroute.params.forEach(params => {\n      this._title.setTitle(\n        \".:: \" + localStorage.getItem(\"title\") + \" : Product #\" + params.idtask + \" ::.\"\n      );\n      this._tasks.getTask(params.idtask).subscribe(res => {\n        this.task = res.data;\n        this.getTimeline();\n      });\n    });\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n\n  getTimeline() {\n    this._tasks.getTimeline(this.task.task_id).subscribe(res => {\n      this.detail = res.data;\n    });\n  }\n\n  enableBtn() {\n    if (this.displaybtn) {\n      $(\".task\").animate({\n        right: \"20px\"\n      });\n      $(\".comment\").animate({\n        right: \"20px\"\n      });\n      $(\".atemail\").animate({\n        right: \"20px\"\n      });\n      $(\".sendemail\").animate({\n        right: \"20px\"\n      });\n      this.displaybtn = false;\n    } else {\n      $(\".task\").animate({\n        right: \"65px\"\n      });\n      $(\".comment\").animate({\n        right: \"110px\"\n      });\n      $(\".atemail\").animate({\n        right: \"155px\"\n      });\n      $(\".sendemail\").animate({\n        right: \"200px\"\n      });\n      this.displaybtn = true;\n    }\n  }\n\n  closedt() {\n    $(\"#collapseNote\").css({ display: \"none\" });\n    this.note = { attachments: [] };\n    $(\"#collapseTask\").css({ display: \"none\" });\n    this.subtask = { attachments: [] };\n    $(\"#collapseMail\").css({ display: \"none\" });\n    this.mail = { attachments: [] };\n  }\n\n  addTask() {\n    if (this.displaybtn) {\n      if (this.crmusers.length == 0) {\n        this._user.getCRMUsers().subscribe(data => {\n          this.crmusers = data.data;\n        });\n      }\n      $(\"#collapseNote\").css({ display: \"none\" });\n      if ($(\"#collapseTask\").css(\"display\") == \"none\") {\n        $(\"#collapseTask\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseTask\").offset().top\n        },\n        1000\n      );\n      this.subtask.task_description = this.sanitizeHtml(\n        this.task.task_description\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveTask() {\n    this.subtask.id_parentask = this.task.task_id;\n    this.subtask.task_description = this.task.task_description\n      .split(\"\\n\")\n      .join(\"<br />\");\n    this.subtask.task_description = this.task.task_description\n      .split(\"\\r\")\n      .join(\"\");\n    this.subtask.task_description = this.task.task_description;\n    this.subtask.task_delivery =\n      this.subtask.task_delivery.getFullYear() +\n      \"-\" +\n      (this.subtask.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.subtask.task_delivery.getDate();\n    this._tasks.putTask(this.subtask).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this.toastr.success(data.message, \"Saved Successfully\");\n      }\n      this.closedt();\n      this.getTimeline();\n    });\n  }\n\n  onChangeTask(event) {\n    var files = event.srcElement.files;\n    this.subtask.attachments.push(files[0]);\n  }\n\n  addNote() {\n    if (this.displaybtn) {\n      $(\"#collapseTask\").css({ display: \"none\" });\n      if ($(\"#collapseNote\").css(\"display\") == \"none\") {\n        $(\"#collapseNote\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseNote\").offset().top\n        },\n        1000\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveNote() {\n    this.note.task_id = this.task.task_id;\n    this._notes.putNote(this.note).subscribe(data => {\n      this.toastr.success(data.message, \"Note added Successfully\");\n      this.note = { attachments: [] };\n      this.getTimeline();\n    });\n  }\n\n  onChangeNote(event) {\n    var files = event.srcElement.files;\n    this.note.attachments.push(files[0]);\n  }\n\n  showAsociateMail() {\n    this.closedt();\n    $(\"#mdAsoMail\").modal(\"show\");\n  }\n\n  srchMail() {\n    this.mails = [];\n    this.listmails = [];\n    this._mail.searchMail(this.searchMail).subscribe(data => {\n      this.mails = data.data;\n    });\n  }\n\n  addMail() {\n    if (!this.loadmail) {\n      this.loadmail = true;\n      this._user.getEmailList().subscribe(data => {\n        // emails\n      });\n      /*\n            this._template.getTemplates().subscribe(data => {\n                for (var i in data.data){\n                    if (data.data[i].id_catmailtemp == \"2\") {\n                        this.signatures.push(data.data[i]);\n                    } else {\n                        this.templates.push(data.data[i]);\n                    }\n                }\n            });*/\n    }\n    if (this.displaybtn) {\n      $(\"#collapseMail\").css({ display: \"none\" });\n      if ($(\"#collapseMail\").css(\"display\") == \"none\") {\n        $(\"#collapseMail\").toggle(\"slow\");\n      }\n      $(\"html, body\").animate(\n        {\n          scrollTop: $(\"#collapseMail\").offset().top\n        },\n        1000\n      );\n      this.enableBtn();\n    }\n  }\n\n  saveMail() {\n    let mymails = [];\n    for (let x in this.mail.emails) {\n      mymails.push(this.mail.emails[x].correo);\n    }\n    this.mail.emails = mymails;\n    this.mail.content = this.mail.content.split(\"\\n\").join(\"\");\n    this.mail.content = this.mail.content.split(\"\\r\").join(\"\");\n    this.mail.task_id = this.task.task_id;\n    this._mail.sendMessage(this.mail).subscribe(data => {\n      this.toastr.success(data.message, \"Mail sent Successfully\");\n      this.getTimeline();\n    });\n    this.mail = { attachments: [] };\n    this.closedt();\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  decode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    // remove all characters that are not A-Z, a-z, 0-9, +, /, or =\n    var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n    if (base64test.exec(input)) {\n      return false;\n    }\n    input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n    do {\n      enc1 = keyStr.indexOf(input.charAt(i++));\n      enc2 = keyStr.indexOf(input.charAt(i++));\n      enc3 = keyStr.indexOf(input.charAt(i++));\n      enc4 = keyStr.indexOf(input.charAt(i++));\n\n      chr1 = (enc1 << 2) | (enc2 >> 4);\n      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n      chr3 = ((enc3 & 3) << 6) | enc4;\n\n      output = output + String.fromCharCode(chr1);\n\n      if (enc3 != 64) {\n        output = output + String.fromCharCode(chr2);\n      }\n      if (enc4 != 64) {\n        output = output + String.fromCharCode(chr3);\n      }\n\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n\n    return unescape(output);\n  }\n\n  encode64(input) {\n    var keyStr =\n      \"ABCDEFGHIJKLMNOP\" +\n      \"QRSTUVWXYZabcdef\" +\n      \"ghijklmnopqrstuv\" +\n      \"wxyz0123456789+/\" +\n      \"=\";\n    input = escape(input);\n    var output = \"\";\n    var chr1,\n      chr2,\n      chr3 = \"\";\n    var enc1,\n      enc2,\n      enc3,\n      enc4 = \"\";\n    var i = 0;\n\n    do {\n      chr1 = input.charCodeAt(i++);\n      chr2 = input.charCodeAt(i++);\n      chr3 = input.charCodeAt(i++);\n      enc1 = chr1 >> 2;\n      enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n      enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n      enc4 = chr3 & 63;\n      if (isNaN(chr2)) {\n        enc3 = enc4 = 64;\n      } else if (isNaN(chr3)) {\n        enc4 = 64;\n      }\n      output =\n        output +\n        keyStr.charAt(enc1) +\n        keyStr.charAt(enc2) +\n        keyStr.charAt(enc3) +\n        keyStr.charAt(enc4);\n      chr1 = chr2 = chr3 = \"\";\n      enc1 = enc2 = enc3 = enc4 = \"\";\n    } while (i < input.length);\n    return output;\n  }\n\n  escapeHtml(text) {\n    return text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/product/product.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProductService } from \"../../services/product.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { DirectoryService } from \"../../services/directory.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from \"../../pipes\";\n\nimport template from \"./productlist.template.html\";\n\n@Component({\n    selector: \"products\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class ProductListComponent {\n    constructor(\n        title: Title,\n        route: Router,\n        toastr: ToastrService,\n        taskService: TaskService,\n        groupService: GroupService,\n        directoryService: DirectoryService,\n        productService: ProductService,\n        ProjectService: ProjectService,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            \"preventDuplicates\": true,\n            \"preventOpenDuplicates\": true\n        };\n        this._tasks = taskService;\n        this._groups = groupService;\n        this._directory = directoryService;\n        this._projects = ProjectService;\n        this._products = productService;\n        this.confirm = confirmationService;\n        this.textState = [\n            \"New\",\n            \"Viewed\",\n            \"Accepted\",\n            \"Develop\",\n            \"Developing\",\n            \"Testing\",\n            \"Completed\",\n            \"Closed\",\n            \"Deleted\",\n            \"Backlog\"\n        ];\n        this.posState = \"status\";\n        this.textGroup = \"\";\n        this.posGroup = \"grop_id\";\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.pages = [1];\n        this.limitpage = 20;\n        this.itemcount = 0;\n        this.task = { project: {}, attachments: [] };\n        this.selproducts = [];\n        this.groups = [];\n        this.notemd = { note_text: \"\" };\n        this.product = {};\n        this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem('title')) {\n            this.stTitle = localStorage.getItem('title');\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Products ::.\");\n\n        this.selproducts = [];\n\n        this._products.getProducts().subscribe(data => {\n            this.groupsproducts = data.data;\n        });\n\n        this.groupslbl = [];\n        this._groups.getGroups().subscribe(data => {\n            this.groups = data.data;\n            for (let c of this.groups) {\n                this.groupslbl.push({ label: c.grop_name, value: c.grop_id });\n            }\n        });\n        this.reload();\n\n        this.selproducts = [];\n    }\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n    }\n\n    setCurPage(value) {\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0) {\n            this.currentpage = 1;\n        } else {\n            if (\n                (cur + 1) * this.limitpage - this.limitpage + 1 <=\n                this.itemcount + this.limitpage\n            ) {\n                this.currentpage = cur;\n            }\n        }\n        this.reload();\n    }\n\n    goTo(value) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (value == 0) {\n            this.currentpage = 1;\n            this.limitpage = 20;\n        } else {\n            this.currentpage = Math.round(this.itemcount / this.limitpage);\n            let mod = this.itemcount % this.limitpage;\n            if (mod > 0 && mod < 5) {\n                this.currentpage += 1;\n            }\n        }\n        this.reload();\n    }\n\n    changedExtraHandler(event) {\n        if (event.keyCode == 13) {\n            this.isLoading = true;\n            this.currentpage = 1;\n\n            var filter = {\n                start: 0,\n                end: this.limitpage,\n                all: this.search.trim(),\n                orderby: this.posOrder,\n                orderdesc: this.orderDesc ? \"desc\" : \"\"\n            };\n            // console.log(filter);\n            this._products.getProductsx(filter).subscribe(res => {\n                this.isLoading = false;\n                this.products = res.data.data;\n                this.itemcount = res.data.count;\n                this.lastpage = this.itemcount / this.limitpage;\n                if (this.lastpage % 1 != 0) {\n                    var countpag = 1 + parseInt(this.lastpage);\n                    this.lastpage = countpag;\n                }\n                this.pages = [];\n                for (let i = 1; i <= this.lastpage; i++) {\n                    this.pages.push(i);\n                }\n                if (this.pages.length == 0) {\n                    this.pages = [1];\n                }\n            });\n            this.cont = 0;\n\n        }\n    }\n\n    reload() {\n        this.isLoading = true;\n        var filter = {\n            start: this.currentpage * this.limitpage - this.limitpage,\n            end: this.limitpage,\n            all: this.search.trim(),\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        // console.log(filter);\n        this._products.getProductsx(filter).subscribe(res => {\n            this.isLoading = false;\n            this.products = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n    }\n\n    addProduct() {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.product = {};\n    }\n\n    showModal(idprod) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.product = {};\n        this._products.getProduct(idprod).subscribe(data => {\n            this.product = data.data[0];\n            $(\"#mdProduct\").modal(\"show\");\n        });\n    }\n\n    showEditModal(prod_id) {\n\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this._products.getProduct(prod_id).subscribe(data => {\n            this.product = data.data[0];\n            $(\"#mdEditProduct\").modal(\"show\");\n        });\n    }\n\n    deleteProduct(idprod) {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        //console.log(idprod);\n\n        this.confirm.confirm({\n            message: \"Do you want to proceed?\",\n            header: \"Confirmation\",\n            icon: \"fa fa-question-circle\",\n            accept: () => {\n                if (idprod) {\n                    this._products.deleteProduct(idprod).subscribe(data => {\n                        if (data.data == false) {\n                            this.toastr.error(\n                                \"The Product have data base references, can't be deleted\"\n                            );\n                            this.reload();\n                        } else {\n                            this.reload();\n                            this.toastr.success(\"Product deleted successfully\");\n                        }\n                    });\n                } else {\n                    if (this.selproducts.length > 0) {\n                        for (var x in this.selproducts) {\n                            this._products\n                                .deleteProduct(this.selproducts[x])\n                                .subscribe(data => {\n                                    if (data.data == false) {\n                                        this.toastr.error(\n                                            \"One or more Products have data base references, can't be deleted\"\n                                        );\n                                        this.reload();\n                                    } else {\n                                        this.selproducts = [];\n                                        this.toastr.success(\"Product deleted successfully\");\n                                        this.reload();\n                                    }\n                                });\n                        }\n                    }\n                }\n            },\n            reject: () => {}\n        });\n    }\n\n    selectAll() {\n        if (this.selproducts.length > 0) {\n            this.selproducts = [];\n        } else {\n            this.selproducts = [];\n            for (var t in this.products) {\n                this.selproducts.push(this.products[t].prod_id);\n            }\n        }\n    }\n\n    saveProduct() {\n        this._products.putProduct(this.product).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message, \"Bad news!\");\n            } else {\n                this.toastr.success(data.message, \"\");\n            }\n            this.reload();\n        });\n    }\n\n    updateProduct() {\n        this._products.updateProduct(this.product).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message, \"Bad news!\");\n            } else {\n                this.toastr.success(data.message, \"Product updated successfully\");\n            }\n            this.reload();\n        });\n    }\n\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n\n    checking() {\n        $(\"#flag\").on(\"click\", \"td\", function() {});\n    }\n\n    filterText() {\n        this.isLoading = true;\n        this.currentpage = 1;\n\n        var filter = {\n            start: 0,\n            end: this.limitpage,\n            all: this.search.trim(),\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._products.getProductsx(filter).subscribe(res => {\n            this.isLoading = false;\n            this.products = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n        this.cont = 0;\n    }\n\n    refresh() {\n\n        this.search = \"\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.currentpage = 1;\n        this.pages = [1];\n        this.limitpage = 20;\n        this.itemcount = 0;\n\n        this.isLoading = true;\n        this.currentpage = 1;\n\n        var filter = {\n            start: 0,\n            end: this.limitpage,\n            all: this.search.trim(),\n            orderby: this.posOrder,\n            orderdesc: this.orderDesc ? \"desc\" : \"\"\n        };\n        this._products.getProductsx(filter).subscribe(res => {\n            this.isLoading = false;\n            this.products = res.data.data;\n            this.itemcount = res.data.count;\n            this.lastpage = this.itemcount / this.limitpage;\n            if (this.lastpage % 1 != 0) {\n                var countpag = 1 + parseInt(this.lastpage);\n                this.lastpage = countpag;\n            }\n            this.pages = [];\n            for (let i = 1; i <= this.lastpage; i++) {\n                this.pages.push(i);\n            }\n            if (this.pages.length == 0) {\n                this.pages = [1];\n            }\n        });\n        this.cont = 0;\n    }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/product/productlist.component.js","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ToastrService } from 'ngx-toastr';\nimport { ConfirmationService } from 'primeng/primeng';\n\nimport { TypeService } from '../../services/type.service';\nimport { TaskService } from '../../services/task.service';\nimport { GroupService } from '../../services/group.service';\nimport { DirectoryService } from '../../services/directory.service';\nimport { ProjectService } from '../../services/project.service';\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n  } from '../../pipes';\n\nimport template from './typelist.template.html';\n\n@Component({\n    selector: 'typelist',\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class TypeListComponent {\n    constructor(route: Router, toastr: ToastrService, taskService: TaskService, groupService: GroupService, directoryService: DirectoryService, typeService: TypeService, ProjectService: ProjectService, confirmationService: ConfirmationService) {\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n          \"preventDuplicates\": true,\n          \"preventOpenDuplicates\": true\n          };\n        this._tasks = taskService;\n        this._groups = groupService;\n        this._directory = directoryService;\n        this._projects = ProjectService;\n        this._types = typeService;\n        this.confirm = confirmationService;\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.search = \"\";\n        this.currentpage = 1;\n        this.limitpage = 0;\n        this.task = {project: {}, attachments: []};\n        this.seltypes = [];\n        this.groups = [];\n        this.notemd = { note_text : \"\" };\n        this.types = [];  \n        this.type =[];\n        this.stscat = [];\n        this.seltypes = [];\n        this.typeMenu = [];\n        this.catIds = [];\n        this.stsmt = [];\n        this._types.getTypeStatus().subscribe(res => {\n            for (let c of res.data) {\n                this.stscat.push({ label: c.para_name, value: c.para_id });\n            }\n        });\n        \n        this.type.typeNameNew = \"\";  \n        this.reload();\n    }\n\n    ngOnInit() {\n       \n    }\n\n\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n    }\n\n    setCurPage(value){\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0){\n          this.currentpage = 1;\n        } else {\n          if ((((cur + 1) * this.limitpage) - this.limitpage + 1 ) <= this.itemcount + this.limitpage) {\n            this.currentpage = cur;\n          }\n        }\n    }\n\n    reload(){\n        this.types = [];\n        this.catIds = [];\n         this._types.getTypes().subscribe(data => {\n            for (let c of data.data){\n                if(this.catIds.indexOf(c.type_id)<0){\n                    this.typeMenu.push(c.type_name.toLowerCase());\n                }\n            }\n            this.types = data.data;\n            this.limitpage = this.types.length > 20 ? 20 : this.types.length;\n            this.itemcount = this.types.length;\n        });\n    }\n\n    addType(){\n        \n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this.type = {};  \n        this.type.typeNameNew = \"\";      \n    }\n\n    showModal(type_id) {\n        $('[data-toggle=\"tooltip\"]').tooltip('hide');\n         this.type = {};\n         this._types.getType(type_id).subscribe(data => {\n            this.type = data.data[0];\n            $('#mdType').modal('show');\n            this.limitpage = this.types.length > 20 ? 20 : this.types.length;\n            this.itemcount = this.types.length;\n        });\n         \n   \n    }\n    \n    showEditModal(type){\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this._types.getType(type.type_id).subscribe(data => {\n            this.type = data.data[0];\n            this.type.typeNameNew = this.type.type_name;\n            $('#mdEditType').modal('show');\n        });\n    }\n\n    deleteType(type_id){\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        \n        this.confirm.confirm({\n            message: 'Do you want to proceed?',\n            header: 'Confirmation',\n            icon: 'fa fa-question-circle',\n            accept: () => {\n                if(type_id){\n                    this._types.deleteType(type_id).subscribe(data => {\n                       if (data.data == false){\n                           this.toastr.error(\"The type have data base references, can't be deleted\");\n                           this.reload();\n                       }else{\n                        this.reload();\n                        this.toastr.success(\"type deleted successfully\");\n                       }\n                    });\n                } else {\n                    if(this.seltypes.length > 0){\n                        for(var x in this.seltypes){\n                          this._types.deleteType(this.seltypes[x]).subscribe(data => {\n                              if (data.data == false){\n                                this.toastr.error(\"One or more types have data base references, can't be deleted\");\n                                this.reload();\n                              }else{\n                                    this.seltypes = [];\n                                    this.toastr.success(\"type deleted successfully\");\n                                    this.reload();\n                                }\n                            });\n                        }\n                    }\n                }\n            },\n            reject: () => {\n                \n            }\n        });\n    }\n\n    selectAll(){\n        if (this.seltypes.length > 0) {\n            this.seltypes = [];\n        } else {\n            this.seltypes = [];\n            for(var t in this.types){\n                this.seltypes.push(this.types[t].type_id);\n            }\n        }\n    }\n\n    setStateList(state) {\n        if (state == \"Outstanding\") {\n            this.textState = [\"1\"];\n            this.posState = \"outst\";\n        } else {\n            this.textState = state; \n            this.posState = \"tsst_name\";\n        }\n        this.currentpage = 1;\n        this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n        this.itemcount = this.tasks.length;\n    }\n\n    setGroupList(state) {\n        this.textGroup = state;\n        this.currentpage = 1;\n        this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n        this.itemcount = this.tasks.length;\n    }\n\n    saveType() {\n         this._types.putType(this.type).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message,\"Bad news!\");\n            } else {\n                this.toastr.success(data.message,\"Type saved successfull\");\n            }\n            this.reload();\n        });\n    }\n\n    updateType() {\n         this._types.updateType(this.type).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message,\"Bad news!\");\n            } else {\n                this.toastr.success(data.message,\"Type updated successfully\");\n            }\n            this.reload();\n        });\n    }\n  \n    /*onChange(event) {\n        var files = event.srcElement.files;\n        this.task.attachments.push(files[0]);\n    }*/\n\n    escapeHtml(text){\n        if (!text){\n            text = \"\";\n        }\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n\nchecking(){\n    $(\"#flag\").on(\"click\", \"td\", function() {\n   });\n}\n    \n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/type/typelist.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\n\nimport { TypeService } from \"../../services/type.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { DirectoryService } from \"../../services/directory.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\n\nimport template from \"./code.template.html\";\n\n@Component({\n  selector: \"coder\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  providers: [ConfirmationService]\n})\nexport class CodeComponent {\n  constructor(\n    route: Router,\n    toastr: ToastrService,\n    taskService: TaskService,\n    groupService: GroupService,\n    directoryService: DirectoryService,\n    typeService: TypeService,\n    ProjectService: ProjectService,\n    confirmationService: ConfirmationService\n  ) {\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._directory = directoryService;\n    this._projects = ProjectService;\n    this._types = typeService;\n    this.confirm = confirmationService;\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.task = { project: {}, attachments: [] };\n    this.seltypes = [];\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.types = [];\n    this.type = [];\n    this.stscat = [];\n    this.seltypes = [];\n    this.typeMenu = [];\n    this.catIds = [];\n    this.stsmt = [];\n    this._types.getTypeStatus().subscribe(res => {\n      for (let c of res.data) {\n        this.stscat.push({ label: c.para_name, value: c.para_id });\n      }\n    });\n\n    this.type.typeNameNew = \"\";\n    this.reload();\n  }\n\n  ngOnInit() {}\n\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n  }\n\n  reload() {\n    this.types = [];\n    this.catIds = [];\n    this._types.getTypes().subscribe(data => {\n      for (let c of data.data) {\n        if (this.catIds.indexOf(c.type_id) < 0) {\n          this.typeMenu.push(c.type_name.toLowerCase());\n        }\n      }\n      this.types = data.data;\n      this.limitpage = this.types.length > 20 ? 20 : this.types.length;\n      this.itemcount = this.types.length;\n    });\n  }\n\n  addType() {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.type = {};\n    this.type.typeNameNew = \"\";\n  }\n\n  showFilter() {\n    $(\".filter-panel\").toggle();\n  }\n\n  showEditModal(type) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this._types.getType(type.type_id).subscribe(data => {\n      this.type = data.data[0];\n      this.type.typeNameNew = this.type.type_name;\n      $(\"#mdEditType\").modal(\"show\");\n    });\n  }\n\n  deleteType(type_id) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n\n    this.confirm.confirm({\n      message: \"Do you want to proceed?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (type_id) {\n          this._types.deleteType(type_id).subscribe(data => {\n            if (data.data == false) {\n              this.toastr.error(\n                \"The type have data base references, can't be deleted\"\n              );\n              this.reload();\n            } else {\n              this.reload();\n              this.toastr.success(\"type deleted successfully\");\n            }\n          });\n        } else {\n          if (this.seltypes.length > 0) {\n            for (var x in this.seltypes) {\n              this._types.deleteType(this.seltypes[x]).subscribe(data => {\n                if (data.data == false) {\n                  this.toastr.error(\n                    \"One or more types have data base references, can't be deleted\"\n                  );\n                  this.reload();\n                } else {\n                  this.seltypes = [];\n                  this.toastr.success(\"type deleted successfully\");\n                  this.reload();\n                }\n              });\n            }\n          }\n        }\n      },\n      reject: () => {}\n    });\n  }\n\n  selectAll() {\n    if (this.seltypes.length > 0) {\n      this.seltypes = [];\n    } else {\n      this.seltypes = [];\n      for (var t in this.types) {\n        this.seltypes.push(this.types[t].type_id);\n      }\n    }\n  }\n\n  setStateList(state) {\n    if (state == \"Outstanding\") {\n      this.textState = [\"1\"];\n      this.posState = \"outst\";\n    } else {\n      this.textState = state;\n      this.posState = \"tsst_name\";\n    }\n    this.currentpage = 1;\n    this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n    this.itemcount = this.tasks.length;\n  }\n\n  setGroupList(state) {\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n    this.itemcount = this.tasks.length;\n  }\n\n  saveType() {\n    this._types.putType(this.type).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Bad news!\");\n      } else {\n        this.toastr.success(data.message, \"Type saved successfull\");\n      }\n      this.reload();\n    });\n  }\n\n  updateType() {\n    this._types.updateType(this.type).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Bad news!\");\n      } else {\n        this.toastr.success(data.message, \"Type updated successfully\");\n      }\n      this.reload();\n    });\n  }\n\n  /*onChange(event) {\n        var files = event.srcElement.files;\n        this.task.attachments.push(files[0]);\n    }*/\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    return text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n  }\n\n  checking() {\n    $(\"#flag\").on(\"click\", \"td\", function() {});\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/code/code.component.js","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ToastrService } from 'ngx-toastr';\nimport { ConfirmationService } from 'primeng/primeng';\n\nimport { TypeService } from '../../services/type.service';\nimport { TaskService } from '../../services/task.service';\nimport { GroupService } from '../../services/group.service';\nimport { DirectoryService } from '../../services/directory.service';\nimport { ProjectService } from '../../services/project.service';\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n  } from '../../pipes';\n\nimport template from './wiki.template.html';\n\n@Component({\n    selector: 'wikit',\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class WikiComponent {\n    constructor(route: Router, toastr: ToastrService, taskService: TaskService, groupService: GroupService, directoryService: DirectoryService, typeService: TypeService, ProjectService: ProjectService, confirmationService: ConfirmationService) {\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n          \"preventDuplicates\": true,\n          \"preventOpenDuplicates\": true\n          };\n        this._tasks = taskService;\n        this._groups = groupService;\n        this._directory = directoryService;\n        this._projects = ProjectService;\n        this._types = typeService;\n        this.confirm = confirmationService;\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.search = \"\";\n        this.currentpage = 1;\n        this.limitpage = 0;\n        this.task = {project: {}, attachments: []};\n        this.seltypes = [];\n        this.groups = [];\n        this.notemd = { note_text : \"\" };\n        this.types = [];  \n        this.type =[];\n        this.stscat = [];\n        this.seltypes = [];\n        this.typeMenu = [];\n        this.catIds = [];\n        this.stsmt = [];\n        this._types.getTypeStatus().subscribe(res => {\n            for (let c of res.data) {\n                this.stscat.push({ label: c.para_name, value: c.para_id });\n            }\n        });\n        \n        this.type.typeNameNew = \"\";  \n        this.reload();\n    }\n\n    ngOnInit() {\n       \n    }\n\n\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n    }\n\n    setCurPage(value){\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0){\n          this.currentpage = 1;\n        } else {\n          if ((((cur + 1) * this.limitpage) - this.limitpage + 1 ) <= this.itemcount + this.limitpage) {\n            this.currentpage = cur;\n          }\n        }\n    }\n\n    reload(){\n        this.types = [];\n        this.catIds = [];\n         this._types.getTypes().subscribe(data => {\n            for (let c of data.data){\n                if(this.catIds.indexOf(c.type_id)<0){\n                    this.typeMenu.push(c.type_name.toLowerCase());\n                }\n            }\n            this.types = data.data;\n            this.limitpage = this.types.length > 20 ? 20 : this.types.length;\n            this.itemcount = this.types.length;\n        });\n    }\n\n    addType(){\n        \n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this.type = {};  \n        this.type.typeNameNew = \"\";      \n    }\n\n    showModal(type_id) {\n        $('[data-toggle=\"tooltip\"]').tooltip('hide');\n         this.type = {};\n         this._types.getType(type_id).subscribe(data => {\n            this.type = data.data[0];\n            $('#mdType').modal('show');\n            this.limitpage = this.types.length > 20 ? 20 : this.types.length;\n            this.itemcount = this.types.length;\n        });\n         \n   \n    }\n    \n    showEditModal(type){\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this._types.getType(type.type_id).subscribe(data => {\n            this.type = data.data[0];\n            this.type.typeNameNew = this.type.type_name;\n            $('#mdEditType').modal('show');\n        });\n    }\n\n    deleteType(type_id){\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        \n        this.confirm.confirm({\n            message: 'Do you want to proceed?',\n            header: 'Confirmation',\n            icon: 'fa fa-question-circle',\n            accept: () => {\n                if(type_id){\n                    this._types.deleteType(type_id).subscribe(data => {\n                       if (data.data == false){\n                           this.toastr.error(\"The type have data base references, can't be deleted\");\n                           this.reload();\n                       }else{\n                        this.reload();\n                        this.toastr.success(\"type deleted successfully\");\n                       }\n                    });\n                } else {\n                    if(this.seltypes.length > 0){\n                        for(var x in this.seltypes){\n                          this._types.deleteType(this.seltypes[x]).subscribe(data => {\n                              if (data.data == false){\n                                this.toastr.error(\"One or more types have data base references, can't be deleted\");\n                                this.reload();\n                              }else{\n                                    this.seltypes = [];\n                                    this.toastr.success(\"type deleted successfully\");\n                                    this.reload();\n                                }\n                            });\n                        }\n                    }\n                }\n            },\n            reject: () => {\n                \n            }\n        });\n    }\n\n    selectAll(){\n        if (this.seltypes.length > 0) {\n            this.seltypes = [];\n        } else {\n            this.seltypes = [];\n            for(var t in this.types){\n                this.seltypes.push(this.types[t].type_id);\n            }\n        }\n    }\n\n    setStateList(state) {\n        if (state == \"Outstanding\") {\n            this.textState = [\"1\"];\n            this.posState = \"outst\";\n        } else {\n            this.textState = state; \n            this.posState = \"tsst_name\";\n        }\n        this.currentpage = 1;\n        this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n        this.itemcount = this.tasks.length;\n    }\n\n    setGroupList(state) {\n        this.textGroup = state;\n        this.currentpage = 1;\n        this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n        this.itemcount = this.tasks.length;\n    }\n\n    saveType() {\n         this._types.putType(this.type).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message,\"Bad news!\");\n            } else {\n                this.toastr.success(data.message,\"Type saved successfull\");\n            }\n            this.reload();\n        });\n    }\n\n    updateType() {\n         this._types.updateType(this.type).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message,\"Bad news!\");\n            } else {\n                this.toastr.success(data.message,\"Type updated successfully\");\n            }\n            this.reload();\n        });\n    }\n  \n    /*onChange(event) {\n        var files = event.srcElement.files;\n        this.task.attachments.push(files[0]);\n    }*/\n\n    escapeHtml(text){\n        if (!text){\n            text = \"\";\n        }\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n\nchecking(){\n    $(\"#flag\").on(\"click\", \"td\", function() {\n   });\n}\n    \n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/wiki/wiki.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./requests.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { TypeService } from \"../../services/type.service\";\nimport { RequestService } from \"../../services/request.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { CategoriesService } from \"../../services/categories.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\n\n@Component({\n  selector: \"requests\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  providers: [ConfirmationService],\n  styles: [\".box-header {background-color: #c7c7c7; color: #fff;}\"]\n})\nexport class RequestsComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    sprintService: SprintService,\n    productService: ProductService,\n    groupService: GroupService,\n    usersService: UsersService,\n    toastr: ToastrService,\n    typeService: TypeService,\n    ProjectService: ProjectService,\n    RequestService: RequestService,\n    taskService: TaskService,\n    noteService: NoteService,\n    arouter: ActivatedRoute,\n    confirmationService: ConfirmationService,\n    categoriesService: CategoriesService\n  ) {\n    this._title = title;\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._request = RequestService;\n    this._categories = categoriesService;\n    this._tasks = taskService;\n    this._notes = noteService;\n    this._user = usersService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this._sprint = sprintService;\n    this.confirm = confirmationService;\n    this._types = typeService;\n    this.products = [];\n    this.textState = [\"\"];\n    this.isrequest = \"\";\n    this.posState = \"type_name\";\n    this.textCreator = [\"\"];\n    this.posCreator = \"asigned_to\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.filter_excel = null;\n    this.stTitle = \"Squadlinx\";\n    if (localStorage.getItem(\"title\")) {\n      this.stTitle = localStorage.getItem(\"title\");\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Requests ::.\");\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this._aroute = arouter;\n    this.limitpage = 20;\n    this.groups = [];\n    this.plmt = [];\n    this.stsmt = [];\n    this.lblgroups = [];\n    this.seleve = [];\n    this.userlist = [];\n    this.requests = [];\n    this.emails = [];\n    this.st_cancelled = 0;\n    this.categories = [];\n    this.catIds = [];\n    this.categoryMenu = [];\n    this.idtype = [];\n    this.tycate = [];\n    this.catlist = [];\n    this.note_text = \"\";\n    this.selectedCategory = {};\n    this.myProjects = [];\n    this.mdT = { project: {}, comments: [] };\n    this.note = { attachments: [] };\n    this.selectedprojects = [];\n    this.task = { project: {}, attachments: [] };\n    this.task_description = \"\";\n    this.userslbl = [];\n    this.taskattch = { attachments: [] };\n    this.myfilterfield = { pos: \"para_type\", text: \"4\", typetittle: \"Implementation\", icon: \"sq sq-errors\", style: { 'background': '#F01458', 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    this.taskid = 0;\n    this.idtk = [];\n    this.cant_e = 0;\n    this.cant_ia = 0;\n    this.cant_im = 0;\n    this.status = [];\n    this.position = -1;\n    this.mylist = [];\n    this.mytask = 0;\n    this.mysprints = [];\n    this.taskfields = [];\n    this.mylist.fields = [];\n    this.textInfo = [\n      \"Info\",\n      \"Project related\",\n      \"Adjustments\",\n      \"Timeline\",\n      \"Form\"\n    ];\n    this.pages = [1];\n    this.posInfo = \"info_id\";\n    this.timeline = 0;\n    this.mdT.total_adjusted = [];\n    this.task.taskid = 0;\n    this.imptask = {};\n    this.rjtask = {};\n    this.head = [];\n    this.cont = 0;\n    this.tagMenu = 1;\n    this.tagMenuRequest = 2;\n    this.results = [20, 30, 40, 50];\n    this.project = {};\n    this.rejected = false;\n    this.filterRequestRejected = '';\n    this._tasks.getStates().subscribe(data => {\n      this.status = data.data;\n    });\n    this.usersShareWith = [];\n    this.usersShareWith_a = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      this.usersShareWith = data.data;\n      this.usersShareWith_a = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n    });\n    this.groupscombo = [];\n    this._groups.getGroups().subscribe(data => {\n      for (let c of data.data) {\n        this.groups.push({ label: c.grop_name, value: c.grop_id });\n        this.groupscombo.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n\n    this.userapplicant = [];\n    this._user.getEmailList().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userapplicant.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n\n    this.types = [];\n    this._types.getTypes().subscribe(res => {\n      this.types = res.data;\n    });\n    this.loadSprint();\n    this.reload();\n    this.getCategories();\n    this.isLoading = false;\n    this.typeSelected = '1,3,4';\n    this.link = \"\";\n  }\n  ngAfterViewInit() {\n    this.reload();\n  }\n\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.searchFilter();\n    }\n  }\n\n  searchFilter() {\n    this.currentpage = 1;\n    this.reload();\n  }\n\n  filterRequest(num) {\n    this.isrequest = num;\n    this.reload();\n  }\n\n  filterRejected() {\n    this.reload()\n  }\n\n  loadSprint() {\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprints = [];\n      this.mysprints.push({\n        label: \"Backlog\",\n        value: 0\n      });\n      for (let c of res.data) {\n        this.mysprints.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n        this.selectedprojects.push(c.proj_id);\n      }\n    });\n    this.getprojects();\n  }\n\n  reload() {\n    this.isLoading = true;\n    this.requests = [];\n    var filter = {\n      start: this.currentpage * this.limitpage - this.limitpage,\n      end: this.limitpage,\n      all: this.search.trim(),\n      type: this.textState,\n      orderby: this.posOrder,\n      isrequest: this.isrequest,\n      orderdesc: this.orderDesc ? \"desc\" : \"\",\n      rejected: this.rejected\n    };\n    this.filter_excel = filter;\n    this._request.getMyRequests(filter).subscribe(res => {\n      this.requests = res.data.data;\n      this.isLoading = false;\n      if (\n        this.textState[0] == \"\" ||\n        this.textState.length == 0 ||\n        this.textState.length == 3\n      ) {\n        this.itemcount = res.data.count;\n      } else {\n        if (this.textState[0] == \"1\") {\n          this.itemcount = res.data.errors;\n        }\n        if (this.textState[0] == \"3\") {\n          this.itemcount = res.data.improving;\n        }\n        if (this.textState[0] == \"4\") {\n          this.itemcount = res.data.implementations;\n        }\n      }\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.cant_e = res.data.errors;\n      this.cant_ia = res.data.improving;\n      this.cant_im = res.data.implementations;\n\n\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) {\n        this.pages.push(i);\n      }\n      for (let i = 0; i < this.types.length; i++) {\n        if (this.types[i].type_id == 1) {\n          this.types[i].count = this.cant_e;\n        } else if (this.types[i].type_id == 3) {\n          this.types[i].count = this.cant_ia;\n        } else if (this.types[i].type_id == 4) {\n          this.types[i].count = this.cant_im;\n        }\n      }\n    });\n  }\n  getComments(tk) {\n    this.mdT.comments = [];\n    this._tasks.getComments(tk).subscribe(res => {\n      this.task.comments = res.data;\n      this.mdT.comments = res.data;\n      var elem = document.getElementById(\"mdTComments\");\n      var elem2 = document.getElementById(\"taskComments\");\n      if (elem && elem2) {\n        elem.scrollTop = elem.scrollHeight;\n        elem2.scrollTop = elem2.scrollHeight;\n      }\n    });\n    this.note_text = \"\";\n    this.note = { attachments: [] };\n  }\n  editModal(ev) {\n    if (!ev.attachments) {\n      ev.attachments = [];\n    }\n    this.note = { attachments: [] };\n    this.task = ev;\n    this.getComments(ev.task_id);\n    $(\"#addDescription\").removeClass(\"in\");\n  }\n\n  getAttachments(taskid) {\n    this._tasks.getAttachments(taskid).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n\n  onChangeTask(event, action) {\n    if (action == \"new\") {\n      var files = event.files;\n      if (this.taskattch.attachments.length > 0) {\n        for (let c of this.taskattch.attachments) {\n          if (files[0][\"name\"] == c.name) {\n          } else {\n            this.taskattch.attachments.push(files[0]);\n          }\n        }\n      } else {\n        this.taskattch.attachments.push(files[0]);\n      }\n    } else if (action == \"delete\") {\n      var file = event.file;\n      for (let c of this.taskattch.attachments) {\n        if (file[\"name\"] == c.name) {\n          var posattch = this.taskattch.attachments.indexOf(c);\n          this.taskattch.attachments.splice(posattch);\n        }\n      }\n    }\n  }\n\n  onChange(event) {\n\n    var files = event.target.files;\n    if (!this.task.attachments) {\n      this.task.attachments = [];\n    }\n    this.task.attachments.push(files[0]);\n  }\n\n  downloadFile(item, event){     \n    var file = item;      \n    var filename = item.name;      \n    var blob = new Blob([file]);\n    var url  = URL.createObjectURL(blob);\n\n    var element = event.srcElement;\n    $(element).attr({ 'download': filename, 'href': url});  \n  }\n\n  deleteAttachmentNT(att) {\n    for (var i in this.note.attachments) {\n      if (this.note.attachments[i] === att) {\n        this.note.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n  deleteAttachment(att) {\n\n    var index = 0;\n    for (let i in this.task.attachments) {\n      if (att.name == this.task.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n\n    this.task.attachments.splice(index, 1);\n\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n  filterMultipleEmails(event) {\n    let query = event.query;\n    this.listmails = this.filter(query, this.listmailsa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  addEvent(type_cod, title, background, icon) {\n    this.task = { project: {}, attachments: [] };\n    this.task.taskid = 0;\n    this.mylist.fields = [];\n    this.myfilterfield = { pos: \"para_type\", text: [type_cod], typetittle: title, icon: icon, style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    $(\"#mdEditRequest\").modal(\"show\");\n    this.activeTabDescription_editRequest();\n  }\n\n  showRequest(asigned_to, canclose, type, task_id, type_id, type_name) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.mytask = task_id;\n    if (type == \"Request\") {\n      if (asigned_to == \"forme\") {\n        this._tasks.getTask(task_id).subscribe(res => {\n          this.task = res.data;\n          this._tasks.getTaskFields(task_id).subscribe(res => {\n            // this.task.form = res.data;\n            this.task.fields = res.data;\n            this.getAttachments(task_id);\n          });\n          $(\"#mdEditTask\").modal(\"show\");\n          this.activeTabDescription_editTask();\n        });\n      } else {\n        if (canclose == 1) {\n          this._tasks.getMyTask(task_id).subscribe(res => {\n            this.task = res.data;\n            this.myfilterfield = { pos: \"para_type\", text: [this.task.para_type], typetittle: type_name, icon: this.task.icon, style: { 'background': this.task.background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n            this.task.task_description_r = this.task.task_description;\n            this.task.task_description = \"\";\n            this._tasks.getTaskFields(task_id).subscribe(res => {\n              this.task.fields = res.data;\n            });\n            $(\"#mdEditRequest\").modal(\"show\");\n            this.activeTabDescription_editRequest();\n          });\n        }\n      }\n    }\n  }\n\n  getCategories() {\n    this.categorieslbl = [];\n    this._categories.getCategories().subscribe(data => {\n      this.categories = data.data;\n      for (let c of data.data) {\n        this.categorieslbl.push({\n          label: c.cate_desc + ' - ' + c.prod_name,\n          value: c.cate_id,\n          para_type: c.para_type,\n          prod_id: c.prod_id\n        });\n      }\n    });\n  }\n\n  showCategories(type_cod, title, background, icon) {\n    this.myfilterfield = { pos: \"para_type\", text: [type_cod], typetittle: title, icon: icon, style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    $(\"#mdCategory\").modal(\"show\");\n  }\n\n  saveTask() {\n\n    let fields_valid = true;\n    for (let i in this.task.fields) {\n      if (this.task.fields[i].form_mandatory == true && (this.task.fields[i].form_data == undefined || this.task.fields[i].form_data.trim() == \"\")) {\n        fields_valid = false\n      }\n    }\n\n    if (fields_valid) {\n      if (this.task.task_description_r) {\n        this.task.task_description = this.task.task_description_r;\n      }\n      this.task.task_description = this.task.task_description\n        .split(\"\\t\")\n        .join(\"\")\n        .split(\"\\n\")\n        .join(\"\")\n        .split(\"\\r\")\n        .join(\"\");\n      if (this.task.task_delivery) {\n        this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n      }\n      this.task.isrequest = \"true\";\n      $('.addRequest').attr(\"disabled\");\n      this.isLoading = true;\n      this._tasks.putTask(this.task).subscribe(res => {\n        this.isLoading = false;\n        if (res.data == \"\" || res.data == \"0\") {\n          this.toastr.error(res.message, \"Error!\");\n        } else {\n          for (var i = 0; i < this.task.fields.length; i++) {\n            if (this.task.fields[i].form_data != undefined) {\n              this.task.fields[i].form_data = this.task.fields[i].form_data.trim();\n            }\n            if (!this.task.fields[i].task_id > 0) {\n              this.task.fields[i].task_id = res.data;\n            }\n          }\n          this._tasks.putTaskFields(this.task.task_id, this.task.fields).subscribe(rex => { });\n          this.toastr.success(res.message, \"Task saved successfully\");\n        }\n        this.task = { project: {}, attachments: [] };\n        $(\"#mdEditRequest\").modal(\"hide\");\n        $(\"#mdEditTask\").modal(\"hide\");\n        this.reload();\n      });\n      this.mytask = 0;\n    } else {\n      this.toastr.warning(\"Please fill out all required fields\");\n    }\n  }\n\n  getprojects(closure = () => { }) {\n    this.myProjects = [];\n    this.selectedprojects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      this.selectedprojects = [0];\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      closure();\n    });\n  }\n\n  noteAdd(idtask, type) {\n    this.note.task_id = idtask;\n    if (\n      this.note.note_text == undefined &&\n      this.note_text != null &&\n      this.note_text != \"\"\n    ) {\n      this.note.note_text = this.note_text;\n    }\n    this._notes.putNote(this.note).subscribe(data => {\n      if (data.data != null) {\n        this.toastr.success(data.message, \"Note added Successfully\");\n        this.getComments(idtask);\n      } else {\n        this.toastr.warning(\"\", data.message);\n        $(\".textarea-comments\").val(\"\");\n      }\n    });\n  }\n\n  createForm(catid) {\n    this.position = -1;\n    let array_list = [];\n    this.task.fields = [];\n    this._categories.getFieldsCategory(catid).subscribe(res => {\n      this.task.fields = res.data;\n      if (this.task.fields && this.task.fields.length > 0) {\n        this.tagMenuRequest = 1;\n        $('#li_description_request').removeClass('active');\n        $('#li_associate_form_request').addClass('active');\n      } else {\n        this.tagMenuRequest = 2;\n        $('#li_associate_form_request').removeClass('active');\n        $('#li_description_request').addClass('active');\n      }\n    });\n  }\n\n  activeTabs() {\n    this.tagMenuRequest = 2;\n    $('#li_associate_form_request').removeClass('active');\n    $('#li_description_request').addClass('active');\n  }\n\n  lpad(n, width, z) {\n    z = z || \"0\";\n    n = n || \"0\";\n    n = n + \"\";\n    return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n  }\n  setStateList(state) {\n    this.typeSelected = state.toString();\n    this.textState = state;\n    this.posState = \"type_name\";\n    this.currentpage = 1;\n    this.isrequest = \"\";\n    this.reload();\n  }\n  setInfoTask(info) {\n    this.timeline = info;\n    //this.textInfo = info;\n    //this.posInfo = \"info_text\";\n  }\n  closeTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Close this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 42).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Request closed successfully\");\n              this.reload();\n            } else {\n              this.toastr.error(\"This action is not allowed. Only Completed tasks can be moved to Closed\");\n            }\n          });\n        }\n      },\n      reject: () => { }\n    });\n  }\n\n  deleteTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Delete this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 43).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Request deleted successfully\");\n              this.reload();\n            } else {\n              this.toastr.error(\"\");\n            }\n          });\n        }\n      },\n      reject: () => { }\n    });\n  }\n\n  reopenTask(idtk) {\n    this.confirm.confirm({\n      message: \"Do you want to Reopen this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.reopenTask(idtk, 37).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Request reopen successfully\");\n              this.reload();\n            } else {\n              this.toastr.error(\"\");\n            }\n          });\n        }\n      },\n      reject: () => {\n      }\n    });\n  }\n\n  rejectTask() {\n    this._tasks\n      .rejectTask(this.rjtask.task_id, this.rjtask.retk_description)\n      .subscribe(data => {\n        if (data.data != \"OK\") {\n          this.toastr.warning(data.message, \"Warning!\");\n        } else {\n          this.toastr.success(data.message, \"Task rejected\");\n        }\n        this.reload();\n      });\n  }\n\n  showReject(dv) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Reject this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (dv) {\n          this.rjtask.task_id = dv.task_id;\n          this.rjtask.retk_description = \"\";\n          $(\"#mdRj\").modal(\"show\");\n        }\n      },\n      reject: () => { }\n    });\n  }\n\n  showImprov(dv) {\n    this.head = [];\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want move to Improving this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (dv) {\n          this.imptask.task_id = dv.task_id;\n          this.imptask.imtk_description = \"\";\n          $(\"#mdImp\").modal(\"show\");\n        }\n      },\n      reject: () => { }\n    });\n  }\n\n  impTask() {\n    this._tasks.impTask(this.imptask.task_id, this.rjtask.retk_description, 2).subscribe(data => {\n      if (data.data != \"OK\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this.toastr.success(data.message, \"Task moved to improving\");\n      }\n      this.reload();\n    });\n  }\n\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n    this.reload();\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.reload();\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        // text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  setPage(opt) {\n    if (opt == 1) {\n      this.tagMenu = 1;\n    }\n    if (opt == 2) {\n      this.tagMenu = 2;\n    }\n    if (opt == 3) {\n      this.tagMenu = 3;\n    }\n  }\n\n  setPageRequest(opt) {\n    if (opt == 1) {\n      this.tagMenuRequest = 1;\n    }\n    if (opt == 2) {\n      this.tagMenuRequest = 2;\n    }\n    if (opt == 3) {\n      this.tagMenuRequest = 3;\n    }\n  }\n  showModaltk(tkid) {\n    $(\"#myTask\" + tkid).click();\n  }\n\n  activeTabDescription_editTask() {\n    this.tagMenu = 1;\n    $('#li_associate_form_task').removeClass('active');\n    $('#li_attachments_editTask').removeClass('active');\n    $('#li_description_task').addClass('active');\n  }\n\n  activeTabDescription_editRequest() {\n    this.tagMenuRequest = 2;\n    $('#li_associate_form_request').removeClass('active');\n    $('#li_attachments_request').removeClass('active');\n    $('#li_description_request').addClass('active');\n  }\n\n  deleteAttachmentTask_editTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n\n    if (task.attachments.length == 0) {\n      this.activeTabDescription_editTask();\n    }\n\n  }\n\n  deleteAttachment_editTask(att) {\n\n    var index = 0;\n    for (let i in this.task.attachments) {\n      if (att.name == this.task.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n\n    this.task.attachments.splice(index, 1);\n\n    if (this.task.attachments.length == 0) {\n      this.activeTabDescription_editTask();\n    }\n\n  }\n\n  deleteAttachmentTask_editRequest(task, att) {\n\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n\n    if (task.attachments.length == 0) {\n      this.activeTabDescription_editRequest();\n    }\n\n  }\n\n  deleteAttachment_editRequest(att) {\n\n    var index = 0;\n    for (let i in this.task.attachments) {\n      if (att.name == this.task.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n\n    this.task.attachments.splice(index, 1);\n\n    if (this.task.attachments.length == 0) {\n      this.activeTabDescription_editRequest();\n    }\n\n  }\n\n  createNewProject(task) {\n\n    this.project.proj_subject = task.task_subject;\n    this.project.prod_id = task.prod_id;\n    this.project.user_applicant = task.user_asigned;\n    this.project.group_assigned = task.grop_id;\n    this.project.prod_id = task.prod_id;\n    this.project.proj_end = task.task_delivery;\n    this.project.proj_propoints = task.task_points;\n    this.project.proj_description = task.task_description;\n    this.project.attachments = task.attachments;\n\n    $('#li_description_project').addClass('active');\n    $(\"#mdproject\").modal(\"show\");\n\n  }\n\n  validateProj() {\n    return (\n      !this.project.proj_subject ||\n      this.project.proj_subject.trim() == \"\" ||\n      !this.project.proj_description ||\n      this.project.proj_description.trim() == \"\" ||\n      !this.project.prod_id ||\n      this.project.prod_id.trim() == \"\" ||\n      !this.project.group_assigned ||\n      this.project.group_assigned.trim() == \"\" ||\n      !this.project.user_applicant ||\n      this.project.user_applicant.trim() == \"\" ||\n      !this.project.proj_end ||\n      this.project.proj_end == \"\" ||\n      this.project.proj_end == \"undefined\" ||\n      !this.project.proj_propoints ||\n      this.project.proj_propoints == \"\" ||\n      this.project.proj_propoints == \"undefined\"\n    );\n  }\n\n  filterMultipleShared(event) {\n    let query = event.query;\n    this.usersShareWith = this.filterShared(query, this.usersShareWith_a);\n  }\n\n  filterShared(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  saveproject() {\n\n    let newProject = 0;\n    this.project.proj_end = new Date(this.project.proj_end);\n    this.project.proj_end =\n      this.project.proj_end.getFullYear() +\n      \"-\" +\n      (this.project.proj_end.getMonth() + 1) +\n      \"-\" +\n      this.project.proj_end.getDate();\n\n    let users_share = [];\n\n    for (let user in this.project.userssh) {\n      users_share.push(this.project.userssh[user].user_id);\n    }\n\n    let project = Object.assign({}, this.project);\n    project.users = users_share;\n\n    this.isLoading = true;\n\n    this._projects.putproject(project).subscribe(data => {\n      newProject = data.data;\n\n      this.isLoading = false;\n\n      if (data.data === \"\" || data.data === \"0\" || data.data == null) {\n        this.toastr.warning(data.message, \"Attention!\");\n      } else {\n        this.toastr.success(data.message, \"project saved successfully\");\n      }\n\n      this.getprojects(() => {\n        this.task.proj_id = newProject;\n      });\n\n      this.project = { attachments: [] };\n    });\n\n  }\n  reloadResults() {\n    this.currentpage = 1;\n    this.reload();\n  }\n\n  exportExcel(){\n    this._request.getExcel(this.filter_excel).subscribe(res => {\n      var route = res.data;\n      if(res.message == 'OK' ){\n        this.toastr.success(\"report generated\");\n          //Usaremos un link para iniciar la descarga \n          var save = document.createElement('a');\n          save.href = route;\n          save.target = '_blank';\n          //Truco: así le damos el nombre al archivo\n          save.download = 'report_request';\n          var clicEvent = new MouseEvent('click', {\n            'view': window,\n            'bubbles': true,\n            'cancelable': true\n          });\n          //Simulamos un clic del usuario\n          save.dispatchEvent(clicEvent);\n           //Y liberamos recursos...\n          (window.URL || window.webkitURL).revokeObjectURL(save.href);\n\n      }else{\n        this.toastr.error(\"The document could not be generated\");\n      }\n    });\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/request/requests.component.js","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ToastrService } from 'ngx-toastr';\nimport { ConfirmationService } from 'primeng/primeng';\n\nimport { ProjectService } from '../../services/project.service';\nimport { ProductService } from '../../services/product.service';\nimport { TaskService } from '../../services/task.service';\nimport { UsersService } from '../../services/users.service';\nimport { GroupService } from '../../services/group.service';\nimport { CategoriesService } from '../../services/categories.service';\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n  } from '../../pipes';\nimport template from './approvals.template.html';\n\n@Component({\n    selector: 'approval',\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class ApprovalsComponent  {\n    constructor(route: Router, toastr: ToastrService, taskService: TaskService, groupService: GroupService, userService: UsersService, productService: ProductService, projectService: ProjectService, confirmationService: ConfirmationService, categoriesService: CategoriesService) {\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n          \"preventDuplicates\": true,\n          \"preventOpenDuplicates\": true\n          };\n        this._categories = categoriesService;\n        this._tasks = taskService;\n        this._groups = groupService;\n        this._user = userService;\n        this._projects = projectService;\n        this._products = productService;\n        this.confirm = confirmationService;\n        this.textState = [\"New\",\"Viewed\",\"Accepted\",\"Develop\",\"Developing\",\"Testing\",\"Completed\",\"Closed\",\"Deleted\",\"Backlog\"];\n        this.posState = \"status\";\n        this.textGroup = \"\";\n        this.posGroup = \"grop_id\";\n        this.posOrder = \"\";\n        this.orderDesc = false;\n        this.search = \"\";\n        this.currentpage = 1;\n        this.limitpage = 0;\n        this.task = {ticket: {}, attachments: []};\n        this.seltasks = [];\n        this.groups = [];\n        this.notemd = { note_text : \"\" };\n        this.getmyProjects();\n        this._groups.getGroups().subscribe(data => {\n            this.groups = data.data;\n        });  \n        this._products.getProducts().subscribe(data => {\n          this.products = [];\n          for (let c of data.data) {\n            this.products.push({ label: c.prod_name, value: c.prod_id });\n          }\n          \n        });\n        this.userslbl = [];\n        this._user.getCRMUsers().subscribe(data => {\n          this.users = data.data;\n          for (let c of data.data) {\n            this.userslbl.push({ label: c.user_lastname + \", \" + c.user_name, value: c.user_id });\n          }\n        });\n        this.reload();\n    }\n\n    ngOnInit() {\n        \n    }\n\n    getmyProjects(){\n        this.myProjects = [];\n        this.selectedprojects = [];\n        this._projects.getmyProjects().subscribe(res => {\n          this.myProjects.push({ label: \" Untracked\", value: \"0\", idcolor: \"#fff\" });\n          this.selectedprojects = [0];\n\n          for (let c of res.data.planning) {\n            this.myProjects.push({ label: c.proj_id + \" \" + c.proj_subject, value: c.proj_id, idcolor: c.idcolor, productvalue: c.prod_id, productlabel: c.prod_name });\n            this.selectedprojects.push(c.proj_id);\n          }\n          for (let c of res.data.buildup) {\n            this.myProjects.push({ label: c.proj_id + \" \" + c.proj_subject, value: c.proj_id, idcolor: c.idcolor, productvalue: c.prod_id, productlabel: c.prod_name  });\n            this.selectedprojects.push(c.proj_id);\n          }\n          for (let c of res.data.implementation) {\n            this.myProjects.push({ label: c.proj_id + \" \" + c.proj_subject, value: c.proj_id, idcolor: c.idcolor, productvalue: c.prod_id, productlabel: c.prod_name  });\n            this.selectedprojects.push(c.proj_id);\n          }\n\n        });\n    }\n\n    setOrder(value) {\n        if (this.posOrder === value) {\n            this.orderDesc = !this.orderDesc;\n        }\n        this.posOrder = value;\n    }\n\n    setCurPage(value){\n        var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n        if (cur <= 0){\n          this.currentpage = 1;\n        } else {\n          if ((((cur + 1) * this.limitpage) - this.limitpage + 1 ) <= this.itemcount + this.limitpage) {\n            this.currentpage = cur;\n          }\n        }\n    }\n    \n    reload(){\n        this.tareas = [];\n        this.approvals = [];\n        this._categories.getMyApprovals().subscribe(data => {\n            for(let v of data.data){\n                this.approvals.push(v.cate_id);\n            }\n        }); \n\n        this._tasks.getTasks().subscribe(data => {\n            for(let c of data.data){\n                if(c.task_approved == 0 && c.task_closed == null && this.approvals.indexOf(c.cate_id)>= 0){\n                    this.tareas.push(c);\n                }    \n            }\n            this.tasks = this.tareas;\n            this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n            this.itemcount = this.tasks.length;\n        });\n    }\n\n    addComment(){\n        this.notemd.task_id = this.task.task_id;\n        this._notes.putNote(note).subscribe(data => {\n            this.notemd = { note_text: \"\" };\n        });\n    }\n\n    addTask(){\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this.task = {ticket: {}, attachments: []};        \n    }\n\n    showModal(idtk) {\n        // console.log(idtk);\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this.task = {ticket: {}, attachments: []};\n        if (!idtk.proj_id) {\n            this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n                idtk.attachments = res.data;\n                this.task = idtk;\n                $('#mdTask').modal('show');\n            });\n        } else {\n            this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n                idtk.attachments = res.data;\n                this.task = idtk;\n            });\n            this._projects.getTicket(idtk.proj_id).subscribe(res => {\n                this.task = idtk;\n                this.task.ticket = res.data;\n                this.task.ticket.proj_description = this._sanitizer.bypassSecurityTrustHtml(this.task.ticket.proj_description.split('\"').join(\"'\"));\n                $('#mdTask').modal('show');\n            });\n        }\n    }\n\n    showEditModal(idtk){\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n            idtk.attachments = res.data;\n            this.task = idtk;\n            $('#mdEditTask').modal('show');\n        });\n    }\n\n    openTask(idtk){\n\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this.confirm.confirm({\n            message: 'Do you want to proceed?',\n            header: 'Confirmation',\n            icon: 'fa fa-question-circle',\n            accept: () => {\n                if(idtk){\n                    this._tasks.setStatusTask(idtk, 1).subscribe(data => {\n                        this.reload();\n                        this.toastr.success(\"Task opened successfully\");\n                    });\n                } else {\n                    if(this.seltasks.length > 0){\n                        for(var x in this.seltasks){\n                            this._tasks.setStatusTask(this.seltasks[x], 1).subscribe(data => {\n                            });\n                        }\n                        this.seltasks = [];\n                        this.reload();\n                        this.toastr.success(\"Task opened successfully\");\n                    }\n                }\n            },\n            reject: () => {\n                //\n            }\n        });\n\n    }\n\n    closeTask(idtk){\n\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this.confirm.confirm({\n            message: 'Do you want to proceed?',\n            header: 'Confirmation',\n            icon: 'fa fa-question-circle',\n            accept: () => {\n                if(idtk){\n                    this._tasks.setStatusTask(idtk, 42).subscribe(data => {\n                        this.reload();\n                        this.toastr.success(\"Task closed successfully\");\n                    });\n                } else {\n                    if(this.seltasks.length > 0){\n                        for(var x in this.seltasks){\n                            this._tasks.setStatusTask(this.seltasks[x], 42).subscribe(data => {\n                            });\n                        }\n                        this.seltasks = [];\n                        this.reload();\n                        this.toastr.success(\"Task closed successfully\");\n                    }\n                }\n            },\n            reject: () => {\n                //\n            }\n        });\n\n    }\n\n    deleteTask(idtk){\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this.confirm.confirm({\n            message: 'Do you want to proceed?',\n            header: 'Confirmation',\n            icon: 'fa fa-question-circle',\n            accept: () => {\n                if(idtk){\n                    this._tasks.setStatusTask(idtk, 43).subscribe(data => {\n                        this.reload();\n                        this.toastr.success(\"Task deleted successfully\");\n                    });\n                } else {\n                    if(this.seltasks.length > 0){\n                        for(var x in this.seltasks){\n                            this._tasks.setStatusTask(this.seltasks[x], 43).subscribe(data => {\n                            });\n                        }\n                        this.seltasks = [];\n                        this.toastr.success(\"Tasks deleted successfully\");\n                        this.reload();\n                    }\n                }\n            },\n            reject: () => {\n                \n            }\n        });\n        \n    }\n\n    selectAll(){\n        if (this.seltasks.length > 0) {\n            this.seltasks = [];\n        } else {\n            this.seltasks = [];\n            for(var t in this.tasks){\n                this.seltasks.push(this.tasks[t].task_id);\n            }\n        }\n    }\n\n    setStateList(state) {\n        this.textState = state; \n        this.posState = \"tsst_name\";\n        this.currentpage = 1;\n        this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n        this.itemcount = this.tasks.length;\n    }\n\n    setGroupList(state) {\n        this.textGroup = state;\n        this.currentpage = 1;\n        this.limitpage = this.tasks.length > 20 ? 20 : this.tasks.length;\n        this.itemcount = this.tasks.length;\n    }\n\n    saveTask() {\n        this.task.task_description = this.task.task_description.split(\"\\t\").join(\"\");\n        this.task.task_description = this.task.task_description.split(\"\\n\").join(\"\");\n        this.task.task_description = this.task.task_description.split(\"\\r\").join(\"\");\n        this.task.task_delivery = new Date(this.task.task_delivery);\n        this.task.task_delivery = this.task.task_delivery.getFullYear() + \"-\" + (this.task.task_delivery.getMonth() + 1) + \"-\" + this.task.task_delivery.getDate();\n        this._tasks.putTask(this.task).subscribe(data => {\n            if (data.data === \"\" || data.data === \"0\") {\n                this.toastr.warning(data.message,\"Good news!\");\n            } else {\n                this.toastr.success(data.message,\"Task saved successfully\");\n            }\n            this.reload();\n            this.task = {attachments: []};\n        });\n    }\n  \n    onChange(event) {\n        var files = event.srcElement.files;\n        this.task.attachments.push(files[0]);\n    }\n\n    escapeHtml(text){\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n\n    acceptTask(task){\n        if(this.approvals.indexOf(task.cate_id)>=0){\n            this._tasks.acceptTask(task.task_id,task.cate_id).subscribe( data => {\n                this.toastr.success(data.message, \"Task accepted Successfully\");\n            });\n        }\n        $('[data-toggle=\"tooltip\"]').tooltip('hide'); \n        this.reload();\n    }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/approval/approvals.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { FilterPipe } from \"../../pipes\";\n\nimport template from \"./projectboard.template.html\";\nimport {ProjectViewComponent} from \"../project/project.component\";\n\n@Component({\n  selector: \"projectboard\",\n  template: template,\n  pipes: [FilterPipe],\n  providers: [ConfirmationService],\n  declarations: [ProjectViewComponent],\n  styles: [\".box-header {background-color: #c7c7c7; color: #fff;}\"]\n})\nexport class ProjectboardComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    ProjectService: ProjectService,\n    productService: ProductService,\n    noteService: NoteService,\n    confirmationService: ConfirmationService,\n    toastr: ToastrService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n      };\n    this.project = {};\n    this.note = {};\n    this.products = [];\n    this.selectedProduct = [];\n    this.selectedprojects = [];\n    this.costreport = [];\n    this.variablereport = [];\n    this.showAddItem = false;\n    this.fixedreport = [];\n    this.totalcost = 0;\n    this.totalfixed = 0;\n    this.totalvariable = 0;\n    this.totalvariablemoney = 0;\n    this.totalfixedmoney = 0;\n    this.itemTotal = \"\";\n    this.curBudget = 'fixed';\n    this.costDisplayed = {};\n    this.costtypes = [{label: 'Unit Cost', value: 'unit'},{label: 'Total Cost', value: 'total'}];\n    this.units = [];\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : ProjectBoard ::.\");\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n        this.selectedProduct.push(c.prod_id);\n      }\n    });\n    this.reload();\n  }\n  reload(){\n    this.myprojects = [];\n    this._projects.getmyProjects().subscribe(data => {\n      this.myprojects = data.data;\n    });\n  }\n\n  showProject(projid) {\n\n    $(\"#myProject\" + projid).click();\n\n  }\n\n  sendMessage(projid) {\n    this.note.proj_id = this.project.proj_id;\n    this._notes.putNote(this.note).subscribe(data => {\n      this.getMessages(projid);\n      this.note = { attachments: [] };\n    });\n  }\n\n  getMessages(projid) {\n    this._projects.getprojectNotes(projid).subscribe(data => {\n      this.project.messages = data.data;\n    });\n  }\n  escapeHtml(text){\n      return text ? text\n          .replace(/&amp;/g, \"&\")\n          .replace(/&lt;/g, \"<\")\n          .replace(/&gt;/g, \">\")\n          .replace(/&quot;/g, '\"')\n          .replace(/&#039;/g, \"'\") : \"\";\n  }\n\n  transformToMoney(number){\n    var money = '';\n    var parts = number.toString().split(\".\");\n    parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n    money = parts.join(\".\");\n    return money;\n  }\n  \n  updateUnits(type){\n    switch (type) {\n      case 'unit':\n        this.units = [{label: '$/Hour', value: 'hour'},{label: '$/Month', value: 'month'}];\n      break;\n      case 'total':\n        this.costDisplayed = {};\n        this.itemTotal = 0;\n      break;\n      default:\n        break;\n    }\n  }\n\n  displayUnits(unitSelected){\n    switch (unitSelected) {\n      case 'hour':\n        this.costDisplayed = {title:'Cost per hour',measure:'# of Hours',units: '# of Units'};\n        break;\n      case 'point':\n        this.costDisplayed = {title:'Cost per point',measure:'# of Points',units: '# of Units'};\n        break;\n      case 'month':\n        this.costDisplayed = {title:'Cost per month',measure:'# of months',units: '# of Units'};\n        break;\n      default:\n        break;\n    }\n  }\n\n  changeBudget(budget){\n    if(this.curBudget != budget){\n      this.curBudget = budget;\n      $('.tab-squadlinx').toggleClass('selected');\n    }\n  }\n\n  showAddMenu(show){\n    this.newItem = {};\n    this.showAddItem = show;\n    this.costDisplayed = {};\n  }\n  setStatusproject(project, status){\n    this._projects.setStatusproject(project.proj_id, status).subscribe(res => {\n      if (res.data != \"OK\") {\n        this.toastr.error(res.message);\n      } else {\n        this.reload();\n      }\n    });\n  }\n  getBackground(idproject) {\n    // if (idproject) {\n    //   for (let t of this.myProjects) {\n    //     if (t.value == idproject) {\n    //       return t.idcolor;\n    //     }\n    //   }\n    // }\n    return \"#fff\";\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/projectboard/projectboard.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport template from \"./static.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\n\n@Component({\n  selector: \"static\",\n  template: template\n})\nexport class StaticComponent {\n  constructor(\n    router: Router,\n    sanitizer: DomSanitizer,\n    groupService: GroupService,\n    sprintService: SprintService,\n    toastr: ToastrService,\n    confirmationService: ConfirmationService\n  ) {\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n      };\n    this.confirm = confirmationService;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._sprint = sprintService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.lblgroups = [];\n       this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n  }\n\n  \n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/statics/static.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\nimport { DashboardService } from \"../../services/dashboard.service\";\nimport { AppService } from \"../../services/app.service\";\n\n\nimport template from \"./burndown.template.html\";\n\n@Component({\n  selector: \"dashboard\",\n  template: template\n})\nexport class BurndownComponent {\n  constructor(\n    router: Router,\n    sanitizer: DomSanitizer,\n    dashboardService: DashboardService,\n    appService : AppService,\n    arouter: ActivatedRoute,\n  ) {\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._dashBoard = dashboardService;\n    this._aroute = arouter;\n    this._app = appService;\n    this.pending = [];\n    this.note = { attachments: [] };\n    this.developing = [];\n    this.improving = [];\n    this.complete = [];\n    this.contacts = [];\n    this.users = [];\n    this.products = [];\n    this.notifications = [];\n    this.noti = [];\n    this.sh = {};\n    this.dayJob = \"\";\n    this.search = \"\";\n    this.posState = \"user_asigned\";\n    this.posDState = \"id_usuario\";\n    this.mdT = { project: {} };\n    this.mcT = { project: {} };\n    this.daily = [];\n    this.selectedUsers = [1];\n    this.task = {};\n    this.dayView = [];\n    this.day = { dail_points: 1, dail_text: \"\" };\n    this.extra = { points: 0, text: \"\", delivery: \"\" };\n    this.catdaily = [];\n    this.todaypts = 0;\n    this.chartHtml = \"\";\n    this.chartUser = \"\";\n    this.mychart = \"\";\n    this.myUsers = [];\n    this.contactsTree = [];\n    this.burndownData = {};\n    this.events = [];\n    this.groups = [];\n    this.lblgroups = [];\n    this.taskid = 0;\n    this.idtk = [];\n    this.statustasks = [];\n    this.scheduler = {};\n    this.plsch = [];\n    this.stssche = [];\n    this.catsche = [];\n    this.items = [];\n    this.selectedNodes = [];\n    this.meeting = { usershared: [] };\n    this.userslbl = [];\n    this.usersCRM = [];\n    this.usersCRMa = [];\n  }\n  ngOnInit() {\n    this._aroute.params.forEach(params => {\n        this.selectedUsers = JSON.parse(params.users);\n        this.userdetail = JSON.parse(params.userdetail);\n        this.userdetail.module = params.module;\n        this.userdetail.action = params.action;\n    });\n  }\n  save() {\n    this.msgs = [];\n    this.msgs.push({\n      severity: \"info\",\n      summary: \"Success\",\n      detail: \"Data Saved\"\n    });\n  }\n  ngAfterViewInit() {\n    this.getBurnDown();\n\n    this.events = [];\n    this.statustasks = [];\n  }\n\n  getBurnDown() {\n    this._app.getBurndown(this.userdetail).subscribe(res => {\n      if (res) {\n        var datasets = [];\n        for (let u in res.data.users) {\n          if (this.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n            datasets.push({\n              label: res.data.users[u].label,\n              data: res.data.users[u].data,\n              fill: false,\n              borderColor: res.data.users[u].color,\n              backgroundColor: res.data.users[u].color,\n              user: res.data.users[u].user_id\n            });\n          }\n        }\n        datasets.push({\n          label: res.data.users[0].label,\n          data: res.data.users[0].data,\n          fill: false,\n          borderColor: res.data.users[0].color,\n          backgroundColor: res.data.users[0].color\n        });\n        this.burndownData = {\n          labels: res.data.days,\n          datasets: datasets,\n          options: { legend: { boxWidth: 40 } },\n          daily: res.data.daily\n        };\n      }\n    });\n  }\n\n  chartClicked(event) {\n    this.dayJob = this.burndownData.daily[event.element._index];\n    this._daily\n      .getDay4Usr(\n        this.burndownData.datasets[event.element._datasetIndex].user,\n        this.burndownData.daily[event.element._index]\n      )\n      .subscribe(res => {\n        this.dayView = res.data;\n        $(\"#mdDayView\").modal(\"show\");\n      });\n  }\n\n  handleDayClick(e) {}\n\n  handleEventClick(e) {\n    if (e.calEvent) {\n      this.sh = e.calEvent;\n      document.getElementById(\"openschedule\").click();\n    }\n  }\n\n  \n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/dashboard/burndown.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\n\nimport { LoginService } from \"../../services/login.service\";\nimport template from \"./passwordrecovery.template.html\";\n\n@Component({\n  selector: \"passwordrecovery\",\n  template: template,\n  styles: [\n    \"input[type=text] { width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border: none; border-bottom: 2px solid #0fafde; text-align: center; }\",\n    \"input[type=password] { width: 100%; padding: 12px 20px; margin: 8px 0; box-sizing: border-box; border: none; border-bottom: 2px solid #0fafde; text-align: center; }\",\n    \"::-webkit-input-placeholder { color:#0fafde; font-size:20px; top:5px; }\",\n    \"::-moz-placeholder { color:#0fafde; font-size:20px; top:5px; }\",\n    \":-ms-input-placeholder { color:#0fafde; font-size:20px; top:5px; }\",\n    \"input:-moz-placeholder { color:#0fafde; font-size:20px; top:5px; }\"\n  ]\n})\nexport class PasswordRecoveryComponent {\n  constructor(\n    loginService: LoginService,\n    route: Router,\n    toastr: ToastrService\n  ) {\n    this._route = route;\n    this._login = loginService;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n      };\n    /*\n    this.myLoginStyle = {\n      background: \"url('img/loginbackW.jpg') no-repeat fixed center / cover\",\n      height: \"100%\",\n      width: \"100%\",\n      \"overflow-y\": \"hidden\",\n      \"-webkit-background-size\": \"cover\",\n      \"-moz-background-size\": \"cover\",\n      \"-o-background-size\": \"cover\"\n    };\n    */\n    this.mainLogoW = \"mainLogoWhite.svg\";\n    this.loginScreen =\n      window.location.href.split(\"/passwordrecovery\")[0] + \"/login\";\n    this._login.getLoginBackW().subscribe(res => {\n      this.myLoginStyle = {\n        background:\n          \"url('img/\" +\n          res.data.loginback +\n          \"') no-repeat fixed center / cover\",\n        height: \"100%\",\n        width: \"100%\",\n        \"overflow-y\": \"hidden\",\n        \"-webkit-background-size\": \"cover\",\n        \"-moz-background-size\": \"cover\",\n        \"-o-background-size\": \"cover\"\n      };\n      this.mainLogoW = res.data.mainlogow;\n    });\n    this.mainLogo = \"mainLogoW.svg\";\n    this._login.getLoginBack().subscribe(res => {\n      this.mainLogo = res.data.mainlogo;\n    });\n    this.times = 0;\n    this.passwordmsg = [];\n    this.pwValidated = false;\n    this.log = { pwd1: \"\", pwd2: \"\" };\n    this.codeConfirmed = false;\n    this._login.getCookie().subscribe(res => {\n      // this.log.key = res.cookie.keyPub;\n      localStorage.setItem(\"token\", res.cookie.token);\n    });\n    this.validated = false;\n  }\n\n  ngOnInit() {}\n\n  validateEmail(email) {\n    this.email = email;\n    this._login.validateEmail(email).subscribe(res => {\n      if (res.data == \"OK\") {\n        this.validated = true;\n        this.toastr.success(res.message);\n      } else {\n        this.toastr.error(res.message);\n      }\n    });\n  }\n\n  changeFocus() {\n    var pincode = $(\".pin-code-pad\");\n    var curpincode = $(event.target);\n    var key = event.keyCode || event.charCode;\n    for (let i = 0; i < pincode.length; i++) {\n      if ($(event.target).is($(\".pin-code-pad\")[i])) {\n        if (\n          key != 8 &&\n          key != 46 &&\n          key != 9 &&\n          key != 20 &&\n          key != 16 &&\n          i < pincode.length - 1\n        ) {\n          $(\".pin-code-pad\")[i + 1].focus();\n          $(\".pin-code-pad\")[i + 1].select();\n        } else if (\n          key != 8 &&\n          key != 46 &&\n          key != 9 &&\n          key != 20 &&\n          key != 16 &&\n          i == pincode.length - 1\n        ) {\n          $(\".pin-code-pad\")[i].blur();\n        } else if (key == 8 || (key == 46 && i > 0)) {\n          $(\".pin-code-pad\")[i - 1].focus();\n          $(\".pin-code-pad\")[i - 1].select();\n        }\n      }\n    }\n  }\n\n  resetPassword() {\n    var pincode = $(\".pin-code-pad\");\n    var authcode = \"\";\n    for (let v of pincode) {\n      authcode += $(v).val();\n    }\n    this.authcode = authcode;\n    this._login.resetPassword(authcode, this.email).subscribe(res => {\n      if (res.data == \"OK\") {\n        this.codeConfirmed = true;\n      } else {\n        this.toastr.error(res.message);\n      }\n    });\n  }\n\n  requestNewCode() {\n    this.validated = false;\n  }\n\n  validateNewPassword() {\n    if (\n      this.log.pwd1 == \"\" ||\n      this.log.pwd1 == null ||\n      this.log.pwd1 == false\n    ) {\n      this.passwordmsg = [];\n    }\n    if (!this.log.pwd1) {\n      return false;\n    }\n    var rgx = [\n      { desc: \"eightchars\", regx: /.{8,}/ },\n      { desc: \"uppercase\", regx: /[A-Z]/ },\n      { desc: \"lowercase\", regx: /[a-z]/ },\n      { desc: \"number\", regx: /[0-9]/ },\n      { desc: \"specialchar\", regx: /[@#$&*^%!+=\\/\\\\[\\]|?.,<>)(;:'\"~`]/ }\n    ];\n    for (let c of rgx) {\n      if (c.regx.test(this.log.pwd1) === true) {\n        if (this.passwordmsg.indexOf(c.desc) < 0) {\n          this.passwordmsg.push(c.desc);\n        }\n      } else {\n        if (this.passwordmsg.indexOf(c.desc) >= 0) {\n          var index = this.passwordmsg.indexOf(c.desc);\n          this.passwordmsg.splice(index, 1);\n        }\n      }\n    }\n\n    if (this.passwordmsg.length == rgx.length) {\n      this.pwValidated = true;\n    } else {\n      this.pwValidated = false;\n    }\n  }\n\n  setNewPassword() {\n    if (this.pwValidated === true) {\n      if (this.log.pwd1 == this.log.pwd2) {\n        this._login.setPassword(this.authcode, this.log.pwd1).subscribe(res => {\n          if (res.data == \"OK\") {\n            this.toastr.success(\n              \"Your new password has been set. Redirecting to login screen.\"\n            );\n            this._route.navigate([\"/login\"]);\n          } else if (res.data == \"ERROR\") {\n            this.toastr.error(res.message);\n          }\n        });\n      } else {\n        this.toastr.error(\"Passwords don't match\");\n      }\n    } else {\n      this.toastr.error(\"Password doesn't meet the requirements\");\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/passwordrecovery/passwordrecovery.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./usersettings.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { RolesService } from \"../../services/roles.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { HeaderService } from \"../../services/header.service\";\n\n@Component({\n  selector: \"usersettings\",\n  template: template\n})\nexport class UserSettingsComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    groupService: GroupService,\n    rolesService: RolesService,\n    usersService: UsersService,\n    headerService: HeaderService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._roles = rolesService;\n    this._groups = groupService;\n    this._users = usersService;\n    this._header = headerService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this.lblgroups = [];\n    this.selectedRole = 0;\n    this.modulesTree = [];\n    this.subModules = [];\n    this.roles = [];\n    this.submoduleChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPermits = [];\n    this.modulesAdd = [];\n    this.users = [];\n    this.selectedUser = {};\n    this.userlist = [];\n    this.user = {};\n    this.editData = {};\n    this._header.getUser().subscribe(res => {\n      this.user = res.data;\n    });\n    this.passwordmsg = [];\n    this.pwValidated = false;\n    this.prev_password = \"\";\n    this.new_password = \"\";\n    this.confirmed_password = \"\";\n    this.notificationstype = [];\n    this.userPreferences = { desktop: [], email: [] };\n    this.myPreferences = [];\n    this.profilepic = {};\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : User Settings ::.\");\n  }\n\n  ngOnInit() {\n    // this.getNotificationsList();\n  }\n\n  reload() {\n    this.selectedUser = {};\n    this.filteredUsers = [];\n    this.users = [];\n  }\n\n  showChangePicture(type) {\n    if (type == \"profile\") {\n      $(\"#change-profile\").toggle();\n      $(\"#informative_message\").toggle();\n    }\n  }\n\n  validateNewPassword() {\n    if (\n      this.new_password == \"\" ||\n      this.new_password == null ||\n      this.new_password == false\n    ) {\n      this.passwordmsg = [];\n    }\n    if (!this.new_password) {\n      return false;\n    }\n    var rgx = [\n      { desc: \"sixchars\", regx: /.{6,}/ },\n      { desc: \"uppercase\", regx: /[A-Z]/ },\n      { desc: \"lowercase\", regx: /[a-z]/ },\n      { desc: \"number\", regx: /[0-9]/ },\n      { desc: \"specialchar\", regx: /[@#$&*^%!+=\\/\\\\[\\]|?.,<>)(;:'\"~`]/ }\n    ];\n    for (let c of rgx) {\n      if (c.regx.test(this.new_password) === true) {\n        if (this.passwordmsg.indexOf(c.desc) < 0) {\n          this.passwordmsg.push(c.desc);\n        }\n      } else {\n        if (this.passwordmsg.indexOf(c.desc) >= 0) {\n          var index = this.passwordmsg.indexOf(c.desc);\n          this.passwordmsg.splice(index, 1);\n        }\n      }\n    }\n    if (this.passwordmsg.length == rgx.length) {\n      this.pwValidated = true;\n    } else {\n      this.pwValidated = false;\n    }\n  }\n\n  saveNewPassword() {\n    if (this.pwValidated === true) {\n      if (this.new_password == this.confirmed_password) {\n        var pwSet = {};\n        pwSet.new_pw = this.new_password;\n        pwSet.old_pw = this.prev_password;\n        this._users.changePassword(pwSet).subscribe(res => {\n          if (res.data == \"OK\") {\n            this.toastr.success(\"Your new password has been set.\");\n            $(\"#changePassword\").modal(\"hide\");\n          } else if (res.data == \"ERROR\") {\n            this.toastr.error(res.message);\n          }\n        });\n      } else {\n        this.toastr.error(\"Passwords don't match\");\n      }\n    } else {\n      this.toastr.error(\"Password doesn't meet the requirements\");\n    }\n  }\n\n  showModalPw() {\n    this.new_password = \"\";\n    this.prev_password = \"\";\n    this.confirmed_password = \"\";\n    this.passwordmsg = [];\n  }\n\n  editUser(user) {\n    if (this.profilepic != {}) {\n      user.user_newpicture = this.profilepic;\n    }\n    this._users.editUserSettings(user).subscribe(res => {\n      if (res.data == \"OK\") {\n        this.toastr.success(res.message);\n        this._header.getUser().subscribe(res => {\n          this.user = res.data;\n        });\n      }else{\n        this.toastr.error(res.message);\n      }\n    });\n  }\n\n  getNotificationsList() {\n    this.notificationstype = [];\n    this._users.getNotificationsList().subscribe(res => {\n      for (let c of res.data) {\n        for (let v of this.myPreferences) {\n          var desktop = \"\";\n          var email = \"\";\n          if (v.id == c.para_id) {\n            desktop = v.desktop;\n            email = v.email;\n          }\n        }\n        this.notificationstype.push({\n          id: c.para_id,\n          name: c.para_name,\n          emailnotif: email,\n          desknotif: desktop\n        });\n      }\n    });\n  }\n\n  getPreferences() {\n    this.myPreferences = [];\n    this.userPreferences = { desktop: [], email: [] };\n    this._users.getPreferences().subscribe(res => {\n      for (let c of res.data) {\n        var preferences = { id: \"\", desktop: \"\", email: \"\" };\n        preferences.id = c.noti_type;\n        if (c.pref_desk == \"1\" || c.pref_desk == 1) {\n          preferences.desktop = \"desktop|\" + c.noti_type;\n          this.userPreferences.desktop.push(\"desktop|\" + c.noti_type);\n        }\n        if (c.pref_email == \"1\" || c.pref_email == 1) {\n          preferences.email = \"email|\" + c.noti_type;\n          this.userPreferences.email.push(\"email|\" + c.noti_type);\n        }\n        this.myPreferences.push(preferences);\n      }\n      this.getNotificationsList();\n    });\n  }\n\n  savePreferences() {\n    this._users.savePreferences(this.userPreferences).subscribe(res => {\n      if (res.data == \"OK\") {\n        this.toastr.success(\"Your preferences have been saved.\");\n      } else {\n        this.toastr.success(\n          \"An error occurred while trying to save your preferences.\"\n        );\n      }\n    });\n  }\n\n  onBasicUpload(event, type) {\n    if (type == \"profile\") {\n      this.profilepic = event.target.files[0];\n    }\n\n    if (event.target.files && event.target.files[0]) {\n      var files = event.target.files;\n      if (files[0].size / 1024 / 1024 > 4) {\n        this.toastr.error(\"File size exceeds 4 MB\");\n      } else {\n        var reader = new FileReader();\n        reader.onload = function(e) {\n          if (type == \"profile\") {\n            $(\"#profile-img\").attr(\"src\", e.target.result);\n          }\n        };\n        reader.readAsDataURL(event.target.files[0]);\n      }\n    }\n  }\n\n    getNameUser(user_name,user_lastname) {\n        if (user_name && user_lastname) {\n            let names = user_name;\n            let surnames = user_lastname;\n            let ellipsis = \"…\";\n            let fullName = names + ' ' + surnames;\n\n            if (fullName.length <= 14) {\n                return fullName;\n            } else {\n\n                if (names.length <= 14 && surnames.length <= 14) {\n                    fullName = names + ' ' + surnames;\n                }\n\n                if (names.length <= 14 && surnames.length > 14) {\n                    surnames = surnames.substring(0, 14) + ellipsis;\n                    fullName = names + ' ' + surnames;\n                }\n\n                if (names.length > 14 && surnames.length <= 14) {\n                    let arrayNames = names.split(' ');\n                    let firstName = arrayNames[0];\n                    fullName = firstName + ' ' + surnames;\n                }\n\n                if (names.length > 14 && surnames.length > 14) {\n                    let arrayNames = names.split(' ');\n                    let firstName = arrayNames[0];\n                    surnames = surnames.substring(0, 14) + ellipsis;\n                    fullName = firstName + ' ' + surnames;\n                }\n\n                return fullName;\n            }\n        } else {\n            return \"\";\n        }\n    }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/usersettings/usersettings.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\n\nimport template from \"./preferences.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { TypeService } from \"../../services/type.service\";\nimport { RequestService } from \"../../services/request.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { CategoriesService } from \"../../services/categories.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { DirectoryService } from \"../../services/directory.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\n\n@Component({\n  selector: \"requestsettings\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  providers: [ConfirmationService],\n  styles: [\".box-header {background-color: #c7c7c7; color: #fff;}\"]\n})\nexport class RequestsSettingsComponent {\n  constructor(router: Router, sanitizer: DomSanitizer, productService: ProductService, groupService: GroupService, directoryService: DirectoryService, toastr: ToastrService, typeService: TypeService, ProjectService: ProjectService, RequestService: RequestService, taskService: TaskService, noteService: NoteService, arouter: ActivatedRoute, confirmationService: ConfirmationService, categoriesService: CategoriesService) {\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n      };\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._event = RequestService;\n    this._categories = categoriesService;\n    this._tasks = taskService;\n    this._notes = noteService;\n    this._directory = directoryService;\n    this._products = productService;\n    this._projects = ProjectService;\n    this.confirm = confirmationService;\n    this._types = typeService;\n    this.products = [];\n    this.textState = [\"\"];\n    this.posState = \"type_name\";\n    this.textCreator = [\"\"];\n    this.posCreator = \"asigned_to\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this._aroute = arouter;\n    this.limitpage = 0;\n    this.groups = [];\n    this.plmt = [];\n    this.stsmt = [];\n    this.lblgroups = [];\n    this.seleve = [];\n    this.userlist = [];\n    this.events = [];\n    this.emails = [];\n    this.st_cancelled = 0;\n    this.categories = [];\n    this.catIds = [];\n    this.categoryMenu = [];\n    this.idtype = [];\n    this.tycate = [];\n    this.catlist = [];\n    this.note_text = \"\";\n    this.selectedCategory = {};\n    this.selectedProduct = [];\n    this.myProjects = [];\n    this.mdT = { project: {} };\n    this.note = { attachments: [] };\n    this.selectedprojects = [];\n    this.task = { project: {}, attachments: [] };\n    this.task_description = \"\";\n    this.userslbl = [];\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.idtk = [];\n    this.cant_e = 0;\n    this.cant_ia = 0;\n    this.cant_im = 0;\n    this.status = [];\n    this.mailAccounts = [];\n    this.groupRules = [];\n    this.position = -1;\n    this.mylist = [];\n    this.typetittle = \"\";\n    this.mytype = 0;\n    this.mytask = 0;\n    this.taskfields = [];\n    this.mylist.fields = [];\n    this.textInfo = [\"Info\",\"Project related\", \"Adjustments\", \"Timeline\"];\n    this.posInfo = \"info_id\";\n    this.timeline = 0;\n    this.mdT.total_adjusted =[];\n    this.newRule = {};\n    this.ruleFields = [{label: \"Subject\", value: \"SUBJECT\"},{label: \"Sender\", value: \"FROM\"}];\n    this.ruleOperators = [{label: \"Is\", value: \"IS\"},{label: \"Contains\", value: \"CONTAINS\"}];\n\n    this._categories.getActiveCategories().subscribe(res => {\n      this.cateids = [];\n      for(let c of res.data){\n        if(this.cateids.indexOf(c.cate_id) < 0){\n          this.cateids.push(c.cate_id);\n          this.categories.push({label:c.cate_desc+' ('+c.type_name+' )', value: c.cate_id });\n        }\n      }\n    });\n  }\n\n  ngOnInit(){\n    this.getMyGroupAccounts();\n    this.getMyGroupRules();\n    this.getAllGroups();\n  }\n\n  getMyGroupAccounts(){\n      this._event.getMyGroupAccounts().subscribe(res => {\n          for(let c of res.data){\n            this.mailAccounts.push({label:c.mbac_email,value:c.mbac_id});\n          }\n      });\n  }\n\n  getMyGroupRules(){\n    this.groupRules = [];\n      this._event.getMyGroupRules().subscribe(res => {\n          for(let c of res.data){\n              this.groupRules.push({ruleid: c.mbrq_ruleid, description:c.mbrq_field+\" \"+c.mbrq_operator+\": \"+c.mbrq_criteria, criteria:c.mbrq_criteria, account: c.mbac_email, type: c.type_name, assigned: c.grop_name, category: c.cate_desc});\n          }\n      });\n  }\n\n  showModalRule(){\n    $(\"#newRule\").modal(\"show\");\n    this.newRule = {};\n  }\n\n  saveRule(rule){\n      this._event.addRule(rule).subscribe(res => {\n        if(res.data == \"OK\"){\n          this.toastr.success(\"Rule created successfully\");\n          this.getMyGroupRules();\n          $(\"#newRule\").modal(\"hide\");\n        }else{\n          this.toastr.error(\"An error occurred while creating the rule. Please try again\");\n        }\n      });\n  }\n\n  runRule(rule){\n    this._event.runRule(rule.ruleid).subscribe(res => {\n      if(res.data == \"OK\"){\n        this.toastr.success(res.message);\n      }else{\n        this.toastr.warning(res.message);\n      }\n    });\n  }\n\n  getAllGroups(){\n      this._groups.getGroups().subscribe(res => {\n        for(let c of res.data){\n            this.groups.push({label:c.grop_name,value:c.grop_id});\n        }\n      });\n  }\n\n  escapeHtml(text ) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n  \n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n  deleteRule(rule){\n    this._event.deleteRule(rule.ruleid).subscribe(res => {\n      if(res.data == \"OK\"){\n        this.toastr.success(\"Rule deleted successfully\");\n      }else{\n        this.toastr.error(\"Rule couldn't be deleted\");\n      }\n    });\n  }\n\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/request/preferences.component.js","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ToastrService } from 'ngx-toastr';\n\nimport template from './clientsettings.template.html';\n\nimport { GroupService } from '../../services/group.service';\nimport { LoginService } from \"../../services/login.service\";\nimport { HeaderService } from '../../services/header.service';\nimport { UsersService } from '../../services/users.service';\n\n@Component({\n  selector: 'clientsettings',\n  template: template\n})\nexport class ClientSettingsComponent {\n  constructor(router: Router, sanitizer: DomSanitizer,toastr: ToastrService, groupService: GroupService, headerService: HeaderService, loginService: LoginService, usersService: UsersService) {\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._header = headerService;\n    this._login = loginService;\n    this._users = usersService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n      };\n    this.lblgroups = [];\n    this.selectedRole = 0;\n    this.modulesTree = [];\n    this.subModules = [];\n    this.roles = [];\n    this.submoduleChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPermits = [];\n    this.modulesAdd = [];\n    this.users = [];\n    this.selectedUser = {};\n    this.userlist = [];\n    this.user = {};\n    this.client = {};\n    this._header.getUser().subscribe(res => {\n    this.user = res.data;\n    this._login.getLoginBack().subscribe(res => {\n          this.mainLogo = \"img/\"+res.data.mainlogo;\n          this.loginBack = \"img/\"+res.data.loginback;\n          this.myLoginStyle = {\n            background: \"url('img/\" + res.data.loginback + \"') no-repeat center / cover\",\n            height: \"500px\",\n            width: \"100%\",\n            \"overflow-y\": \"hidden\",\n            \"-webkit-background-size\": \"cover\",\n            \"-moz-background-size\": \"cover\",\n            \"-o-background-size\": \"cover\",\n            position : \"relative\"\n          };\n          \n        });\n    });\n  }\n\n  ngOnInit() {\n    this.getSettings();\n  }\n  \n  showChangePicture(type){\n    if(type == 'logo'){\n      $(\"#change-logo\").toggle();\n    }else if(type == 'background'){\n      $(\"#change-background\").toggle();\n    }\n  }\n  changePicture(type){\n    if(type == 'main-logo'){\n    }\n  }\n\n  onBasicUpload(event, type){\n    if (event.target.files && event.target.files[0]) {\n      var reader = new FileReader();\n        reader.onload = function(e) {\n        if(type == 'mainlogo'){\n          var image_logo = new Image();\n          image_logo.src = e.target.result;\n          image_logo.onload = function() {\n            if(this.width == 300 && this.height == 96){\n              $('#logo-img').attr('src', e.target.result);\n              $('#preview-logo').attr('src', e.target.result);\n              return 1;\n            }else{\n              return 0;\n            }\n          };\n          if(image_logo){\n            return 0;\n          }else{\n            return 1;\n          }\n        }else if(type == 'background'){\n          var image_back = new Image();\n          image_back.src = e.target.result;\n          image_back.onload = function() {\n            if(this.width == 1920 && this.height == 1080){\n              $('#background-img').attr('src', e.target.result);\n              $('#preview-background').css('background',\"url(\" + e.target.result + \") no-repeat center / cover\");\n              // console.log(\"si\");\n              return 1;\n            }else{\n              // console.log(\"no\");\n              return 0;\n            }\n          };\n          if(image_back){\n            // console.log(\"si\");\n            return 1;\n          }else{\n            // console.log(\"no\");\n            return 0;\n          }\n        }\n      }\n      if(reader){\n        // console.log(\"SI\");\n      }else{\n        reader.readAsDataURL(event.target.files[0]);\n        if(type == 'mainlogo'){\n          this.client.logo = event.target.files[0];\n        }else if(type == 'background'){\n          this.client.background = event.target.files[0];\n        }\n        // console.log(\"no\");\n      }\n      \n    }\n    \n  }\n\n  saveCompanyDetails(){\n    var client = this.client;\n    // console.log(client);\n    this._login.saveGeneralSetting(client).subscribe(res => {\n      if(res.data == \"OK\"){\n        this.toastr.success(\"Changes saved successfully.\");\n      }\n    });\n  }\n\n  getSettings(){\n    this._login.getSettings().subscribe(res => {\n      for(let c of res.data){\n        this.client.companyname = c.companyname;\n        this.client.email = c.emailsubscription;\n        this.client.policies = c.policies;\n        this.client.id = c.id;\n        this.client.emailnotif = c.emailnotif;\n        this.client.password = c.password;\n        this.client.host = c.host;\n        this.client.imap = c.imap; \n        this.client.smtp = c.smtp; \n      }\n    });\n  }\n  validate() {\n    return (\n      !this.client.companyname ||\n      this.client.companyname.trim() == \"\" ||\n      !this.client.email ||\n      this.client.email.trim() == \"\" ||\n      !this.client.policies ||\n      this.client.policies.trim() == \"\" ||\n      !this.client.emailnotif ||\n      this.client.emailnotif.trim() == \"\" ||\n      !this.client.host ||\n      this.client.host.trim() == \"\" ||\n      !this.client.imap ||\n      this.client.imap.trim() == \"\" ||\n      !this.client.smtp ||\n      this.client.smtp.trim() == \"\"\n    );\n  }\n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/clientsettings/clientsettings.component.js","import { Component } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ToastrService } from 'ngx-toastr';\nimport { IntervalObservable } from \"rxjs/observable/IntervalObservable\";\n\nimport template from './dailyboard.template.html';\n\nimport { GroupService } from '../../services/group.service';\nimport { LoginService } from \"../../services/login.service\";\nimport { HeaderService } from '../../services/header.service';\nimport { UsersService } from '../../services/users.service';\nimport { DashboardService } from '../../services/dashboard.service';\nimport { DirectoryService } from '../../services/directory.service';\nimport { TaskService } from '../../services/task.service';\nimport { DailyService } from '../../services/daily.service';\nimport { ProjectService } from '../../services/project.service';\nimport { SprintService } from \"../../services/sprint.service\";\n\n@Component({\n  selector: 'dailyboard',\n  template: template\n})\nexport class DailyBoardComponent {\n  constructor(router: Router, sanitizer: DomSanitizer, toastr: ToastrService, groupService: GroupService, headerService: HeaderService, loginService: LoginService, usersService: UsersService, dashboardService: DashboardService, taskService: TaskService, dailyService: DailyService, directoryService: DirectoryService, projectService: ProjectService, sprintService: SprintService) {\n    this._projects = projectService;\n    this._directory = directoryService;\n    this._dailys = dailyService;\n    this._tasks = taskService;\n    this._dashBoard = dashboardService;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._header = headerService;\n    this._login = loginService;\n    this._users = usersService;\n    this._group = groupService;\n    this._sprint = sprintService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.lblgroups = [];\n    this.selectedRole = 0;\n    this.modulesTree = [];\n    this.subModules = [];\n    this.roles = [];\n    this.submoduleChk = 0;\n    this.selectedSubmodule = [];\n    this.selectedPermits = [];\n    this.modulesAdd = [];\n    this.users = [];\n    this.selectedUser = {};\n    this.userlist = [];\n    this.user = {};\n    this.groupUsers = [];\n    this.groupTasks = [];\n    this.selectedUsers = [];\n    this.burndownTeams = [];\n    this.scrollOn = false;\n    this.topDistance = 0;\n    this.teamDisplay = '';\n    this.teamDisplayIdx = 0;\n    this.mdT = { project: {} };\n    this.mdT.total_adjusted = [];\n    this.mdT.sprint = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.task = { project: {}, attachments: [] };\n\n    this._group.getGroups().subscribe(data => {\n      for (let c of data.data) {\n        this.groupUsers.push({ gropid: c.grop_id, title: c.grop_name, users: [], current_sprint: c.current_sprint, tasks: { today: [], inprogress: [], improving: [], done: [] } });\n      }\n      for (let i = 0; i < this.groupUsers.length; i++) {\n        if (i == 0) {\n          this.teamDisplay = this.groupUsers[i].title;\n          this.teamDisplayIdx = 0;\n        }\n      }\n    });\n    this._directory.getMyUsers().subscribe(data => {\n      for (let c of data.data) {\n        for (let v of this.groupUsers) {\n          if (v.gropid == c.grop_id) {\n            v.users.push(c.user_id);\n          }\n        }\n      }\n      for (let grp of this.groupUsers) {\n        this.getBurnDown(grp);\n      }\n    });\n\n    this.subscriber2 = IntervalObservable.create((2 * this.groupUsers.length) * 15000)\n      // .takeWhile(n => this.scrollOn) // only fires when component is alive\n      .subscribe(n => {\n\n      });\n    this.subscriber = IntervalObservable.create(15000)\n      // .takeWhile(n => this.scrollOn) // only fires when component is alive\n      .subscribe(n => {\n        if (this.scrollOn) {\n          this.prevScroll = $('.body-dailyboard')[1].scrollTop;\n          if (this.prevScroll + 320 < this.groupUsers.length * 300) {\n            this.topDistance += 320;\n            $('.body-dailyboard').animate({ scrollTop: this.topDistance }, 4500);\n            $('#burndown-scroll').animate({ scrollTop: this.topDistance + 5 }, 4500);\n            this.teamDisplayIdx++;\n            for (let i = 0; i < this.groupUsers.length; i++) {\n              if (i == this.teamDisplayIdx) {\n                if (i == (this.groupUsers.length - 1)) {\n                  this.teamDisplay = this.groupUsers[this.teamDisplayIdx].title;\n                  this.teamDisplayIdx = 0;\n                  this.groupUsers = [];\n                  this._group.getGroups().subscribe(data => {\n                    for (let c of data.data) {\n                      this.groupUsers.push({ gropid: c.grop_id, title: c.grop_name, users: [], current_sprint: c.current_sprint, tasks: { today: [], inprogress: [], improving: [], done: [] } });\n                    }\n                  });\n                  this._directory.getMyUsers().subscribe(data => {\n                    for (let c of data.data) {\n                      for (let v of this.groupUsers) {\n                        if (v.gropid == c.grop_id) {\n                          v.users.push(c.user_id);\n                        }\n                      }\n                    }\n                    for (let grp of this.groupUsers) {\n                      this.getBurnDown(grp);\n                    }\n                  });\n                  this.getTaskboard();\n                }\n                this.teamDisplay = this.groupUsers[this.teamDisplayIdx].title;\n              }\n            }\n          } else {\n            this.topDistance = 0;\n            $('.body-dailyboard').animate({ scrollTop: this.topDistance }, 4500);\n            $('#burndown-scroll').animate({ scrollTop: this.topDistance }, 4500);\n            this.teamDisplay = this.groupUsers[0].title;\n            this.teamDisplayIdx = 0;\n          }\n        } else {\n          this.scrollOn = false;\n        }\n      });\n  }\n\n  ngOnInit() {\n    this.getTaskboard();\n  }\n\n  getTaskboard() {\n    this.spinner = true;\n    this.myProjects = [];\n    this.selectedprojects = [];\n    this._dashBoard.getTaskboard().subscribe(data => {\n      this.tasks = data.data;\n\n      if (this.tasks[35]) {\n        for (let pdx of this.tasks[35]) {\n          for (let v of this.groupUsers) {\n            if (v.users.indexOf(pdx.user_asigned) >= 0) {\n              v.tasks.today.push(pdx);\n            }\n          }\n        }\n      }\n      if (this.tasks[36]) {\n        for (let pdx2 of this.tasks[36]) {\n          for (let v of this.groupUsers) {\n            if (v.users.indexOf(pdx2.user_asigned) >= 0) {\n              v.tasks.today.push(pdx2);\n            }\n          }\n        }\n      }\n      if (this.tasks[37]) {\n        for (let pdx3 of this.tasks[37]) {\n          for (let v of this.groupUsers) {\n            if (v.users.indexOf(pdx3.user_asigned) >= 0) {\n              v.tasks.today.push(pdx3);\n            }\n          }\n        }\n      }\n      if (this.tasks[38]) {\n        for (let dvp of this.tasks[38]) {\n          for (let v of this.groupUsers) {\n            if (v.users.indexOf(dvp.user_asigned) >= 0) {\n              v.tasks.inprogress.push(dvp);\n            }\n          }\n        }\n      }\n      if (this.tasks[39]) {\n        for (let dvp2 of this.tasks[39]) {\n          for (let v of this.groupUsers) {\n            if (v.users.indexOf(dvp2.user_asigned) >= 0) {\n              v.tasks.inprogress.push(dvp2);\n            }\n          }\n        }\n      }\n      if (this.tasks[41]) {\n        for (let imp of this.tasks[41]) {\n          for (let v of this.groupUsers) {\n            if (v.users.indexOf(imp.user_asigned) >= 0) {\n              v.tasks.improving.push(imp);\n            }\n          }\n        }\n      }\n      if (this.tasks[40]) {\n        for (let cmp of this.tasks[40]) {\n          for (let v of this.groupUsers) {\n            if (v.users.indexOf(cmp.user_asigned) >= 0) {\n              v.tasks.done.push(cmp);\n            }\n          }\n        }\n      }\n      this.spinner = false;\n    });\n    this._dailys.getPtsToday().subscribe(res => {\n      this.todaypts = res.data;\n    });\n    // this.pending.total_badges = 0;\n  }\n\n  getBurnDown(workgroup) {\n    this._dashBoard.getBurndown(workgroup.current_sprint).subscribe(res => {\n      if (res) {\n        var datasets = [];\n        for (let u in res.data.users) {\n          if (workgroup.users.indexOf(res.data.users[u].user_id) >= 0) {\n            datasets.push({\n              label: res.data.users[u].label,\n              data: res.data.users[u].data,\n              fill: false,\n              borderColor: res.data.users[u].color,\n              backgroundColor: res.data.users[u].color,\n              user: res.data.users[u].user_id\n            });\n          }\n        }\n        datasets.push({\n          label: res.data.users[0].label,\n          data: res.data.users[0].data,\n          fill: false,\n          borderColor: res.data.users[0].color,\n          backgroundColor: res.data.users[0].color\n        });\n        workgroup.burndownData = {\n          labels: res.data.days,\n          datasets: datasets,\n          options: { legend: { boxWidth: 40 } },\n          daily: res.data.daily\n        };\n      }\n    });\n  }\n\n\n  startScroll(scrollBool) {\n    this.scrollOn = scrollBool;\n  }\n\n  resetScrollTop() {\n    $('#table-scroll').animate({ scrollTop: 0 }, 2500);\n    $('#burndown-scroll').animate({ scrollTop: 0 }, 2500);\n  }\n\n  handleScroll(event) {\n    $('.body-dailyboard').scrollTop(event.originalEvent.target.scrollTop);\n    $('#burndown-scroll').scrollTop(event.originalEvent.target.scrollTop);\n  }\n\n\n  showModal(idtk) {\n    this.note = { attachments: [] };\n    this.mdT.attachments = [];\n    this.mdT.total_attachments = 0;\n    this.mdT.timeline = [];\n    this.mdT.form = [];\n    this.mdT.total_adjusted = [];\n    this.mdT.sprint = [];\n    if (idtk != null) {\n      this._sprint.getSprint(idtk.spri_id).subscribe(res => {\n        this.mdT.sprint = res.data;\n      });\n    }\n    if (!idtk.proj_id) {\n      this.mdT = idtk;\n      if (this.mdT.total_adjusted > 0) {\n        this.getAdjusted(idtk.task_id);\n      } else {\n        this.mdT.total_adjusted = [];\n      }\n    } else {\n      this._projects.getproject(idtk.proj_id).subscribe(res => {\n        this.mdT = idtk;\n        this.mdT.project = res.data;\n        if (this.mdT.project.proj_description) {\n          this.mdT.project.proj_description = this.sanitizeHtml(\n            res.data.proj_description\n          );\n          $(\"#someFrame\").attr(\n            \"srcdoc\",\n            this.escapeHtml(this.mdT.project.proj_description)\n          );\n        }\n        if (this.mdT.total_adjusted > 0) {\n          this.getAdjusted(idtk.task_id);\n        } else {\n          this.mdT.total_adjusted = [];\n        }\n      });\n    }\n    this.getComments(idtk.task_id);\n    this.getAttachments(idtk.task_id);\n    this.getTimeline(idtk.task_id);\n    this.getForm(idtk.task_id);\n  }\n  getForm(task) {\n    this._tasks.getTaskFields(task).subscribe(res => {\n      this.mdT.form = res.data;\n    });\n  }\n  getTimeline(task) {\n    this._tasks.getTimelinetk(task).subscribe(res => {\n      this.mdT.timeline = res.data;\n    });\n  }\n\n  getAttachments(taskid) {\n    this._tasks.getAttachments(taskid).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n\n  getComments(tk) {\n    this._tasks.getComments(tk).subscribe(res => {\n      this.task.comments = res.data;\n      this.mdT.comments = res.data;\n      var elem = document.getElementById('mdTComments');\n      var elem2 = document.getElementById('taskComments');\n      if (elem && elem2) {\n        elem.scrollTop = elem.scrollHeight;\n        elem2.scrollTop = elem2.scrollHeight;\n      }\n      return res.data;\n    });\n    this.note_text = \"\";\n    this.note = { attachments: [] };\n  }\n\n  getAdjusted(task) {\n    this.mdT.total_adjusted = [];\n    this._tasks.getAdjusted(task).subscribe(res => {\n      if (res.data.length > 0) {\n        for (let c of res.data) {\n          var message = \"\";\n          var header = \"\";\n          var points = \"\";\n          header = c.user_name + \" \" + c.user_lastname;\n          if (c.taex_points > 0) {\n            points = \"Added \" + Math.abs(c.taex_points) + \" points\";\n          } else if (c.taex_points < 0) {\n            points = \"Removed \" + Math.abs(c.taex_points) + \" points\";\n          } else {\n            points = \"0 Points added or removed.\";\n          }\n          var delivery = \" Delivery date : \" + c.taex_delivery;\n          this.mdT.total_adjusted.push({ header: header, message: message, points: points, delivery: delivery, date: c.taex_updated, reason: c.taex_description, urlimagen: c.urlimagen });\n        }\n      }\n    });\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        text = this.decode64(text);\n      }\n      text = this.escapeHtml(text);\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/dailyboard/dailyboard.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport template from \"./reports.template.html\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\n\n@Component({\n  selector: \"reports\",\n  template: template\n})\nexport class ReportsComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    groupService: GroupService,\n    sprintService: SprintService,\n    toastr: ToastrService,\n    confirmationService: ConfirmationService\n  ) {\n    this._title = title;\n    this._router = router;\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n      };\n    this.confirm = confirmationService;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._sprint = sprintService;\n    this.search = \"\";\n    this.posOrder = \"\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.textState = [\"\"];\n    this.posState = \"para_status\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.lblgroups = [];\n    this.sprint = [];\n    this.newSprint = [];\n    this.sprintdays = [];\n    this.sprints = [];\n    this.editvalue = false;\n    this.selectedsprint = 0;\n    this.seletedDaysSprint = [];\n    this.mysprints = [];\n    this.projectsnames = {};\n    this.labelsproj = [];\n    this.tableinfo = [];\n    this.tableinfoU = [];\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Reports ::.\");\n    this.icon = \"sq sq-down-arrow\";\n    this._groups.getGroups().subscribe(data => {\n      this.sprint.grop_id = data.data[0].grop_id;//Por defecto el primer grupo es seleccionado para mostar su informacion\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.grop_id });\n      }\n      this.getListReport(this.sprint.grop_id);\n    });\n    this.tagMenu = 1;\n    this.drawn = false;\n    this.emptyReport = false;\n    this.isLoading = false;\n  }\n  ngOnInit() {\n   //this.getPieSprint();\n    // this.getBarSprint();\n   // this.getTable();\n  }\n\n  getListReport(group_id){\n    this.mysprints = [];\n    this._sprint.getListReport(group_id).subscribe(res => {\n      this.mysprints = res.data;\n      if(this.mysprints.length > 0){\n        this.sprint.date_init = res.data[0].spri_init;\n        this.sprint.date_end = res.data[0].spri_end;\n        this.sprint.spri_id = res.data[0].spri_id;\n      }else{\n        this.sprint.spri_id = 0;\n      }\n      this.getReport();\n    });\n  }\n\n  showSprint(sprint) {\n    this.selectedsprint = sprint; //se actualiza cada vez que se selecciona un SPRINT\n    for (var i = 0; i < this.mysprints.length; i++) {\n      if(this.mysprints[i].value == sprint ){\n        this.sprint = this.mysprints[i];\n        this.sprint.date_init = this.mysprints[i].spri_init;\n        this.sprint.date_end = this.mysprints[i].spri_end;\n      }\n    }\n  }\n  getReport() {\n    this.drawn = false;\n    this.isLoading = true;\n    this._sprint.getTasksReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(res => {\n      this.isLoading = false;\n      this.tableinfo = res.data;\n      this.emptyReport = this.tableinfo.length ? false : true;\n    });\n    this._sprint.getUsersReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(res => {\n      if(res.data.userstable.length > 0){\n        this.tableinfoU = res.data.userstable;\n      }\n    });\n    // this._sprint.getProjectsReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(res => {\n    //   if(res.data.projecttable.length > 0){\n    //     this.projectsnames = res.data.projecttable;\n    //     this.labelsproj = res.data.projectpie.labels;\n    //   }\n    // });\n    this.getPieSprint();\n    this.getBarSprint();\n    this.getTable();\n    this.updatePuglins();\n  }\n  getSprints(sprints) {\n    var mydate_init = new Date();\n    var month = new Array();\n    month[0] = \"Jan\";\n    month[1] = \"Feb\";\n    month[2] = \"Mar\";\n    month[3] = \"Apr\";\n    month[4] = \"May\";\n    month[5] = \"Jun\";\n    month[6] = \"Jul\";\n    month[7] = \"Aug\";\n    month[8] = \"Sep\";\n    month[9] = \"Oct\";\n    month[10] = \"Nov\";\n    month[11] = \"Dec\";\n\n    for (var i = 0; i < sprints.length; i++) {\n      var mydate_init = new Date(sprints[i].spri_init);\n      var month_init = month[mydate_init.getMonth()];\n      var mydate_end = new Date(sprints[i].spri_end);\n      var month_end = month[mydate_end.getMonth()];\n      let label = \"\";\n      let date1 = \"\";\n      let date2 = \"\";\n      label =\n        month_init +\n        \" \" +\n        parseInt(mydate_init.getDate()+1) +\n        \" \" +\n        \" through \" +\n        month_end +\n        \" \" +\n        parseInt(mydate_end.getDate()+1) +\n        \" \" +\n        mydate_end.getFullYear();\n      date1 = parseInt(mydate_init.getFullYear()) + \"-\" + parseInt(mydate_init.getMonth()+1) + \"-\" + parseInt(mydate_init.getDate()+1);\n      date2 = parseInt(mydate_end.getFullYear()) + \"-\" + parseInt(mydate_end.getMonth()+1) + \"-\" + parseInt(mydate_end.getDate()+1);\n      this.mysprints[i].date_init = date1;\n      this.mysprints[i].date_end = date2;\n      this.mysprints[i].label = label;\n      this.mysprints[i].value = sprints[i].spri_id;\n      if(this.mysprints[i].value == this.sprint.spri_id ){\n        this.sprint = this.mysprints[i];\n    }\n    }\n    this.selectedsprint = this.mysprints[0].spri_id; //Por defecto el primer SPRINT es seleccionado para mostar su informacion\n  }\n  getPieSprint() {\n    let datasetspie = [];\n    let background = [];\n    let costs = [];\n    let labelscosts = []; \n    let labelspoints = []; \n    let points = [];\n    // let labels = [];\n    let rect = [];\n    this._sprint.getProjectsReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(res => {\n      if(res.data.projecttable.length > 0){\n        this.projectsnames = res.data.projecttable;\n        this.labelsproj = res.data.projectpie.labels;\n        background = res.data.projectpie.background;\n        costs = res.data.projectpie.costs;\n        points = res.data.projectpie.points;\n        labelscosts = res.data.projectpie.labelscosts;\n        labelspoints = res.data.projectpie.labelspoints;\n        rect = res.data.projectpie.rect;\n        datasetspie.push({\n          data: points,\n          backgroundColor: background,\n          hoverBackgroundColor: background,\n          cost: labelscosts,\n          type: \"doughnut\"\n        });\n        datasetspie.push({\n          data: points,\n          pointStyle: rect,\n          backgroundColor: background,\n          hoverBackgroundColor: background,\n          points: labelspoints\n        });\n        this.datapie = {\n          labels: this.labelsproj,\n          datasets: datasetspie\n        };\n        this.optionspie ={\n          responsive: true,\n          legend: {\n            display: true,\n            position: \"bottom\",\n            fullWidth: true,\n            labels: {\n              usePointStyle: true\n            }\n          }\n        };\n      }\n    });\n   \n  }\n\n  getBarSprint() {\n    \n    this.tableinfoU = [];\n    let labels = [];\n    let pending_points = [];\n    let estimated_points = [];\n    let registered_points = [];\n    let extra_points = [];\n    var datasetsbar = [];\n    this._sprint.getUsersReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(res => {\n      if(res.data.userstable.length > 0){\n        this.tableinfoU = res.data.userstable;\n        labels = res.data.usersbar.labels;\n        pending_points = res.data.usersbar.pending_points;\n        estimated_points = res.data.usersbar.estimated_points;\n        registered_points = res.data.usersbar.registered_points;\n        extra_points = res.data.usersbar.extra_points;\n          datasetsbar.push({\n            label: \"Pending Points\",\n            backgroundColor: \"#ed3d66\",\n            data: pending_points,\n            pointStyle: \"rect\"\n          });\n          datasetsbar.push({\n            label: \"Estimated Points\",\n            backgroundColor: \"#59d5f4\",\n            data: estimated_points,\n            pointStyle: \"rect\"\n          });\n          datasetsbar.push({\n            label: \"Registered Points\",\n            backgroundColor: \"rgb(28,110,198)\",\n            data: registered_points,\n            pointStyle: \"rect\"\n          });\n          datasetsbar.push({\n            label: \"Extra Points\",\n            backgroundColor: \"#ffbe2c\",\n            data: extra_points,\n            pointStyle: \"rect\"\n          });\n\t\t\t  this.databar = {\n          labels: labels,\n          datasets: datasetsbar\n        };\n        this.optionsbar ={\n          tooltips: {\n            mode: \"index\",\n            intersect: false\n          },\n          responsive: true,\n          legend: {\n            display: true,\n            position: \"bottom\",\n            labels: {\n              usePointStyle: true\n            }\n          },\n          scales: {\n            xAxes: [\n              {\n                stacked: true\n              }\n            ],\n            yAxes: [\n              {\n                stacked: true,\n                ticks: {\n                  max: 120,\n                  min: -45,\n                  stepSize: 25.5\n                }\n              }\n            ]\n          },\n          title: {\n            display: false,\n            text: \"bar-report\"\n          }\n        }\n      }\n    });\n   \n    \n    }\n\n    updatePuglins(){\n      if(this.drawn == false){\n        let cont = 0;\n        // Define a plugin to provide data labels - ajustar colores y ubicacion de acuerdo a la Grafica y al valor de los datos.\n        Chart.plugins.register({\n          afterDatasetsDraw: function(chart) {\n            \n            var ctx = chart.ctx;\n            var label = chart.data.datasets.label;\n            chart.data.datasets.forEach(function(dataset, i) {\n              \n              var meta = chart.getDatasetMeta(i);\n              var label = chart.data.datasets[i].label;\n              if (!meta.hidden) {\n                meta.data.forEach(function(element, index) {\n                  \n                  if (meta.type == \"bar\") {\n                    var dataString = dataset.data[index].toString();\n                    if (label == \"Pending Points\" || label == \"Extra Points\") {\n                      if (dataString == 0 || dataString < 0) {\n                        var padding = -10;\n                      } else {\n                        var padding = 5;\n                      }\n                      if (dataString == 0) {\n                        ctx.fillStyle = \"transparent\";\n                      } else {\n                        ctx.fillStyle = \"gray\";\n                        var fontStyle = \"normal\";\n                      }\n                    } else {\n                      ctx.fillStyle = \"white\";\n                      var fontStyle = \"bold\";\n                      var padding = -20;\n                    }\n                    var fontSize = 10;\n  \n                    var fontFamily = \"Helvetica Neue\";\n                    ctx.font = Chart.helpers.fontString(\n                      fontSize,\n                      fontStyle,\n                      fontFamily\n                    );\n                    ctx.textAlign = \"center\";\n                    ctx.textBaseline = \"middle\";\n                    var position = element.tooltipPosition();\n                    ctx.fillText(\n                      dataString,\n                      position.x,\n                      position.y - fontSize / 2 - padding\n                    );\n                  }\n                  else {\n                      if (meta.type == \"doughnut\") {\n                        if(dataset.cost[index] != null){\n                          var dataString = dataset.cost[index].toString();\n                          var padding = -2;\n                          var fontStyle = \"normal\";\n                          var fontFamily = \"Helvetica Neue\";\n                          var fontSize = 10;\n                          ctx.font = Chart.helpers.fontString(\n                            fontSize,\n                            fontStyle,\n                            fontFamily\n                          );\n                          ctx.fillStyle = \"gray\";\n                          ctx.textAlign = \"center\";\n                          ctx.textBaseline = \"middle\";\n                          var position = element.tooltipPosition();\n                          ctx.fillText(\n                            dataString,\n                            position.x,\n                            position.y - fontSize / 2 - padding\n                          );\n                        }  \n                        }else{\n                          if(dataset.points[index] != null){\n                            var dataString = dataset.points[index].toString();\n                            var padding = -2;\n                            var fontStyle = \"normal\";\n                            var fontFamily = \"Helvetica Neue\";\n                            var fontSize = 10;\n                            ctx.font = Chart.helpers.fontString(\n                              fontSize,\n                              fontStyle,\n                              fontFamily\n                            );\n                            ctx.fillStyle = \"gray\";\n                            ctx.textAlign = \"center\";\n                            ctx.textBaseline = \"middle\";\n                            var position = element.tooltipPosition();\n                            ctx.fillText(\n                              dataString,\n                              position.x,\n                              position.y - fontSize / 2 - padding\n                            );\n                          }\n                          \n\n                        }\n                        \n                        \n                    // }\n                  }\n                });\n                meta.data.forEach(function(element, index) {\n                  \n                });\n              }\n            });\n          }\n        });\n        //\n        this.drawn = true;\n    }\n    \n  }\n  getTable() {\n    this._sprint.getTasksReport(this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(res => {\n      this.tableinfo = res.data;\n    });\n  }\n  setStateList(state) {\n    if (state == \"Outstanding\") {\n      this.textState = [\"1\"];\n      this.posState = \"outst\";\n    } else {\n      this.textState = state;\n      this.posState = \"para_status\";\n    }\n    this.currentpage = 1;\n  }\n  setGroupList(state) {\n    this.sprint.grop_id = state;\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.getListReport(this.sprint.grop_id);\n  }\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n  setPage(opt) {\n    if (opt == 1) {\n      this.tagMenu = 1;\n      \n    }\n    if (opt == 2) {\n      this.tagMenu = 2;\n    }\n  }\n  exportExcel(type){\n    if(!this.emptyReport) {\n      this._sprint.getExcel(type, this.sprint.grop_id, this.sprint.date_init, this.sprint.date_end).subscribe(res => {\n        var route = res.data;\n        if(res.message == 'OK' ){\n          this.toastr.success(\"report generated\");\n            //Usaremos un link para iniciar la descarga \n            var save = document.createElement('a');\n            save.href = route;\n            save.target = '_blank';\n            //Truco: así le damos el nombre al archivo\n            save.download = 'report';\n            var clicEvent = new MouseEvent('click', {\n              'view': window,\n              'bubbles': true,\n              'cancelable': true\n            });\n            //Simulamos un clic del usuario\n            save.dispatchEvent(clicEvent);\n            //Y liberamos recursos...\n            (window.URL || window.webkitURL).revokeObjectURL(save.href);\n\n        }else{\n          this.toastr.error(\"The document could not be generated\");\n        }\n      });\n    } else {\n      this.toastr.warning(\"No data in the report\");\n    }\n  }\n  formatDate(date) {\n    date = new Date(date);\n    if(date && date !== \"\"){\n      var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n      var monthIndex = (date.getMonth() + 1) < 10 ? \"0\" + (date.getMonth() + 1) : (date.getMonth() + 1);\n      var year = date.getFullYear();\n      return year + '-' + monthIndex+ '-' + day;\n    }else{\n      return '';\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/sprint/reports.component.js","import { Component } from \"@angular/core\";\nimport { Router, NavigationEnd, ActivatedRoute } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\n\nimport template from \"./guideburndown.template.html\";\n\n@Component({\n  selector: \"guideburndown\",\n  template: template,\n  \n})\nexport class GuideburndownComponent {\n  constructor(\n    \n    route: ActivatedRoute,\n    router: Router,\n    toastr: ToastrService\n  ) {\n    this._route = route;\n    this.fragment = \"\";\n    this.toastr = toastr;\n\n    router.events.subscribe(s => {\n      if (s instanceof NavigationEnd) {\n        const tree = router.parseUrl(router.url);\n        if (tree.fragment) {\n          const element = document.querySelector(\"#\" + tree.fragment);\n          if (element) { element.scrollIntoView(true); }\n        }\n      }\n    });\n\n  }\n\n  ngOnInit() {\n    this._route.fragment.subscribe(fragment => { this.fragment = fragment; });\n  }\n\n  ngAfterViewInit() {\n    try {\n      document.querySelector('#' + this.fragment).scrollIntoView();\n    } catch (e) { }\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/userguide/guideburndown.component.js","import { Component } from \"@angular/core\";\nimport { Router, NavigationEnd, ActivatedRoute  } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\n\nimport template from \"./guideprojectboard.template.html\";\n\n@Component({\n  selector: \"guideprojectboard\",\n  template: template,\n  \n})\nexport class GuideprojectboardComponent {\n  constructor(\n   \n    route: ActivatedRoute,\n    router: Router,\n    toastr: ToastrService\n  ) {\n    this._route = route;\n    this.fragment = \"\";\n    this.toastr = toastr;\n\n    router.events.subscribe(s => {\n      if (s instanceof NavigationEnd) {\n        const tree = router.parseUrl(router.url);\n        if (tree.fragment) {\n          const element = document.querySelector(\"#\" + tree.fragment);\n          if (element) { element.scrollIntoView(true); }\n        }\n      }\n    });\n  }\n\n  ngOnInit() {\n    this._route.fragment.subscribe(fragment => { this.fragment = fragment; });\n  }\n\n  ngAfterViewInit() {\n    try {\n      document.querySelector('#' + this.fragment).scrollIntoView();\n    } catch (e) { }\n  }\n\n  \n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/userguide/guideprojectboard.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\n\nimport template from \"./userguidelogin.template.html\";\n\n@Component({\n  selector: \"userguidelogin\",\n  template: template,\n  \n})\nexport class UserguideloginComponent {\n  constructor(\n   \n    route: Router,\n    toastr: ToastrService\n  ) {\n    this._route = route;\n    \n    this.toastr = toastr;\n  }\n\n  ngOnInit() {\n    \n  }\n\n \n\n  \n\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/userguide/userguidelogin.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { RolesService } from \"../../services/roles.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\nimport template from \"./grouplist.template.html\";\n\n@Component({\n  selector: \"grouplist\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe]\n})\nexport class GroupListComponent {\n  loadingGroup = false;\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    rolesService: RolesService,\n    toastr: ToastrService,\n    groupService: GroupService,\n    usersService: UsersService,\n    confirmationService: ConfirmationService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this.toastr = toastr;\n    this._group = groupService;\n    this._users = usersService;\n    this._roles = rolesService;\n    this.confirm = confirmationService;\n    this.groups = [];\n    this.grouplist = [];\n    this.group = [];\n    this.roles = [];\n    this.user = {};\n    this.errors = 0;\n    this.searchuser = \"\";\n    this.selusrs = [];\n    this.users = [];\n    this.usersEdit = [];\n    this.usersg = [];\n    this.pendingusers = [];\n    this.selectedgroup = 0;\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Groups ::.\");\n  }\n\n  ngOnInit() {\n    this.getUsers();\n    this.getRoles();\n    this.reload();\n  }\n  reload() {\n    this.grouplist = [];\n    this._group.getmyGroups().subscribe(res => {\n      this.groups = res.data;\n      for (let c of res.data) {\n        this.grouplist.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n    this.errors = 0;\n  }\n  showGroup(grop) {\n    this.group = grop;\n    this.group.users = [];\n    this.getUsersGroup(grop.grop_id);\n    $(\"#mdGroup\").modal(\"show\");\n  }\n  getUsersGroup(id_group) {\n    this._group.getUsersGroup(id_group).subscribe(res => {\n      if (res.data.length > 0) {\n        this.group.users = res.data;\n      } else {\n        this.group.users = [];\n      }\n    });\n  }\n  editGroup(grop) {\n    this.group = grop;\n    this.group.users = [];\n    this.usersEdit= [];\n\n    this._users.listUsersEdit(grop.grop_id).subscribe(data => {\n      this.userListEdit = data.data;      \n    });\n   \n    this._group.getUsersGroup(grop.grop_id).subscribe(res => {\n      if (res.data.length > 0) {\n        this.group.users = res.data;\n      }\n    });\n    $(\"#mdEditGroup\").modal(\"show\");\n  }\n  addGroup() {\n    this.group = {};\n    $(\"#addGroup\").modal(\"show\");\n  }\n  clear() {\n    this.group = {};\n  }\n  saveGroup(gr) {\n\n    if(this.group.grop_name &&  this.group.user_id){\n      if(this.group.grop_name.trim() != \"\" && this.group.user_id != 0){\n        this._group.saveGroup(gr).subscribe(data => {\n          if ((data.data == \"OK\")) {\n            this.toastr.success(\"Group has been created successfully\");\n            this.reload();\n          } else {\n            this.toastr.error(data.message, \"Error!\");\n          }\n        });\n      }else{\n        this.toastr.warning(\"Incomplete Fields!\");\n      }\n    }else{\n      this.toastr.warning(\"Incomplete Fields!\");\n    }\n  }\n  getUsers() {\n    this.users = [];\n    this._users.getUserList().subscribe(data => {\n      this.userList = data.data;\n      for (let c of data.data) {\n        if (c.user_name) {\n          this.users.push({\n            label: c.user_name + \" \" + c.user_lastname,\n            value: c.user_id\n          });\n        }\n      }\n    });\n  }\n  addUser() {\n    this.user = {};\n    $(\"#addUser\").modal(\"show\");\n  }\n  getUserAlias(user) {\n\n    let split_user = user.toLowerCase().split(\".\");\n    let split_lastname = split_user[1].split(\" \");\n    return split_user[0].charAt(0).toUpperCase() + \".\" + this.firstUppercase(split_lastname[0]);\n  }\n  \n  firstUppercase(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n  }\n  saveUser(usr, type) {\n    let usrNew = false;\n    let email_e = usr.user_email.toLowerCase();\n    let result_e = email_e.split(\"@\");\n    if (type == \"new\") {\n      usr.user_user = result_e[0].toLowerCase();\n      let user_name = usr.user_name.trim() + \".\" + usr.user_lastname.trim();\n      usr.user_alias = this.getUserAlias(user_name);\n\n      this._users.saveUser(usr).subscribe(data => {\n        if ((data.data = \"OK\")) {\n          this.toastr.success(\"User has been created successfully\");\n        } else {\n          this.toastr.error(data.message, \"Error!\");\n        }\n      });\n    }\n    this.reload();\n  }\n  verifyEmail(email) {\n    this._users.verifyEmail(email).subscribe(data => {\n      if (data.data == true) {\n        this.errors = 0;\n        return true;\n      } else {\n        // $(\"#result2\").text(\"Invalid email\");\n        // $(\"#result2\").css(\"color\", \"red\");\n        this.errors = 1;\n        return false;\n      }\n    });\n  }\n  getRoles() {\n    this.roles = [];\n    this._roles.getRoles().subscribe(res => {\n      for (let c of res.data) {\n        this.roles.push({ label: c.roleName, value: c.roleId });\n      }\n    });\n  }\n  validate2() {\n    $(\"#result2\").text(\"\");\n    var email = $(\"#float-input-email2\").val();\n    if (this.validateEmail(email)) {\n      $(\"#result2\").text(email + \" is valid :)\");\n      $(\"#result2\").css(\"color\", \"green\");\n      return true;\n    } else {\n      $(\"#result2\").text(email + \" is not valid :(\");\n      $(\"#result2\").css(\"color\", \"red\");\n      this.errors = this.errors + 1;\n      return false;\n    }\n  }\n\n  validateEmail(email) {\n    var regexp = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n    return regexp.test(email);\n  }\n\n  deleteGroup(id_group) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to proceed?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (id_group) {\n          this._group.deleteGroup(id_group).subscribe(data => {\n            if ((data.data === \"OK\")) {\n              this.toastr.success(\"Group has been deleted successfully\");\n            } else {\n              this.toastr.error(data.message, \"Error!\");\n            }\n            this.ngOnInit();\n          });\n        } else {\n        }\n      },\n      reject: () => {}\n    });\n  }\n  deleteUserGroup(user) {\n    this._group.deleteUserGroup(user.user_id).subscribe(data => {\n      if ((data.data = \"OK\")) {\n        this.toastr.success(\"user has been deleted successfully\");\n      } else {\n        this.toastr.error(data.message, \"Error!\");\n      }\n      this.getUsersGroup(user.grop_id);\n      this.reload();\n    });\n  }\n  addUserGroup() {\n    this.pendingUsers();\n    $(\"#mdAddUsrGroup\").modal(\"show\");\n  }\n\n  pendingUsers() {\n    this._group.getPendigUsers().subscribe(data => {\n      if (data.data.length > 0) {\n        this.pendingusers = data.data;\n        this.usersg.grop_id = this.pendingusers[0].grop_id;\n        this.usersg.grop_name = this.pendingusers[0].grop_name;\n        this.usersg.permits = this.pendingusers[0].permits;\n      }else if(data.data.length === 0){\n        this.pendingusers = [];\n        this.usersg.grop_id = '';\n        this.usersg.grop_name = '';\n        this.usersg.permits = '';\n      }\n      this.loadingGroup = false;\n    });\n  }\n  \n  closeModal() {\n    this.searchuser = \"\";\n  }\n  saveUsers(selusrs, grop_id) {\n    this.loadingGroup = true;\n    this._group.saveUsersGroup(grop_id, selusrs).subscribe(res => {\n      if (res.data === \"OK\") {\n        this.toastr.success(\"User(s) added successfully\");\n      } else {\n        this.toastr.warning(data.message, \"There was an error\");\n      }\n      this.reload();\n      this.users = {};\n      this.selusrs = [];\n      this.pendingUsers();\n    });\n  }\n\n  validateGroup() {\n    return (\n      !this.group.grop_name ||\n      this.group.grop_name.trim() == \"\" ||\n      this.group.user_id == 0 ||\n      !this.group.user_id     \n    );\n  }\n  soloLetras(e) {\n    var key = e.keyCode || e.which;\n    var teclado = String.fromCharCode(key).toLowerCase();\n    var letras = \"áéíóúabcdefghijklmnñopqrstuvwxyz \";\n    var especiales = \"13-37-38-46-164\";\n    var teclado_especial = false;\n    for (var i in especiales) {\n      if (key == especiales[i]) {\n        var teclado_especial = true;\n        break;\n      }\n    }\n    if (letras.indexOf(teclado) == -1 && !teclado_especial) {\n      return false;\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/group/grouplist.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport template from \"./mysprint.template.html\";\nimport { TaskService } from \"../../services/task.service\";\nimport { DailyService } from \"../../services/daily.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { MailService } from \"../../services/mail.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { UsersService } from '../../services/users.service';\nimport { DashboardService } from \"../../services/dashboard.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from '../../pipes';\n\nimport { ProductService } from '../../services/product.service';\n\n\n@Component({\n  selector: \"mysprint\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe]\n})\nexport class MySprintComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    arouter: ActivatedRoute,\n    taskService: TaskService,\n    groupService: GroupService,\n    sprintService: SprintService,\n    mailService: MailService,\n    ProjectService: ProjectService,\n    productService: ProductService,\n    noteService: NoteService,\n    userService: UsersService,\n    toastr: ToastrService,\n    dailyService: DailyService,\n    confirmationService: ConfirmationService,\n    dashboardService: DashboardService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this._groups = groupService;\n    this._sprint = sprintService;\n    this._tasks = taskService;\n    this._projects = ProjectService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._aroute = arouter;\n    this._dashBoard = dashboardService;\n    this._daily = dailyService;\n    this._products = productService;\n    this._user = userService;\n    this._projects = ProjectService;\n    this.search = \"\";\n    this.searchtask = \"\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    this.limitpage = 0;\n    this.groups = [];\n    this.lblgroups = [];\n    this.sptasks = [];\n    this.subtask = { attachments: [] };\n    this.toastr = toastr;\n    this.toastr.options = {\n      \"preventDuplicates\": true,\n      \"preventOpenDuplicates\": true\n    };\n    this.mail = { attachments: [] };\n    this.note = { attachments: [] };\n    this.mails = [];\n    this.searchMail = \"\";\n    this.listmails = [];\n    this.listmailsa = [];\n    this.sprints = [];\n    this.sprint = [];\n    this.team = [];\n    this.sprintTask = [];\n    this.mdT = { project: {}, comments: [] };\n    this.mcT = { project: {} };\n    this.selectedprojects = [];\n    this.task = { project: {}, attachments: [] };\n    this.myProjects = [];\n    this.sprintselected = \"\";\n    this.seltasks = [];\n    this.sprintn = [];\n    this.note = { attachments: [] };\n    this.mdT.total_adjusted = [];\n    this.mdT = { project: {} };\n    this.taskattch = { attachments: [] };\n    this.textState = [];\n    this.posState = \"user_asigned\";\n    this.getmyProjects();\n    this.sumpoints = [];\n    this.totalpoints_p = 0;\n    this.totalpoints_d = 0;\n    this.burndownData = {};\n    this.myUsers = [];\n    this.contactsTree = [];\n    this.contacts = [];\n    this.searchuser = \"\";\n    this.selectedNodes = [];\n    this.selectedUsers = [];\n    this.dayJob = \"\";\n    this.dayView = [];\n    this.pointssum = 0;\n    this.totalp = 0;\n    this.totalpoints_pending = 0;\n    this.mysprint = [];\n    this.mygroupid = 0;\n    this.isLoading = false;\n    this.sprintrefs = true;\n    this.icon = \"sq sq-down-arrow\";\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n      for (let c of data.data) {\n        this.lblgroups.push({ label: c.grop_name, value: c.id_group });\n      }\n    });\n    this.getSprintDetail();\n\n\n    this.userslbl = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({ label: c.user_lastname + \", \" + c.user_name, value: c.user_id });\n      }\n    });\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n    });\n  }\n  showModalProject(idproj) {\n    $(\"#myProject\" + idproj).click();\n  }\n  getProducts() {\n    this._products.getProducts().subscribe(data => {\n      this.isLoading = false;\n      this.sprintrefs = true;\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n\n    });\n  }\n  getmyProjects() {\n    this.myProjects = [];\n    this.selectedprojects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({ label: \" Untracked\", value: \"0\", idcolor: \"#fff\" });\n      this.selectedprojects = [0];\n      for (var i in res.data) {\n        for (let c of res.data[i]) {\n          this.myProjects.push({ label: c.proj_subject, value: c.proj_id, idcolor: c.idcolor });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n    });\n  }\n  getSprintDetail() {\n    this.seltasks = [];\n    this._sprint.getMySprintDetail().subscribe(res => {\n      if (res.data[0].tasks > 0) {\n        this.sprints = res.data;\n        this.sprintselected = this.sprints[0].spri_id;\n        this.getSprint(this.sprints[0].spri_id);\n        this.updatePoints(this.sprints[0].spri_id);\n        this.mysprint.grop_id = res.data[0].grop_id;\n      } else {\n        this.sprints = [];\n        this.sprintselected = res.data[0].spri_id;\n        this.getSprint(res.data[0].spri_id);\n        this.mysprint.grop_id = res.data[0].grop_id;\n      }\n      this.mygroupid = this.mysprint.grop_id;\n      this.getListSprints(this.mysprint.grop_id);\n    });\n  }\n  getBurnDown() {\n    this._dashBoard.getBurndown(0).subscribe(res => {\n      if (res) {\n        var datasets = [];\n        for (let u in res.data.users) {\n          if (this.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n            datasets.push({\n              label: res.data.users[u].label,\n              data: res.data.users[u].data,\n              fill: false,\n              borderColor: res.data.users[u].color,\n              backgroundColor: res.data.users[u].color,\n              user: res.data.users[u].user_id\n            });\n          }\n        }\n        datasets.push({\n          label: res.data.users[0].label,\n          data: res.data.users[0].data,\n          fill: false,\n          borderColor: res.data.users[0].color,\n          backgroundColor: res.data.users[0].color\n        });\n        this.burndownData = {\n          labels: res.data.days,\n          datasets: datasets,\n          options: { legend: { boxWidth: 40 } },\n          daily: res.data.daily\n        };\n      }\n    });\n  }\n\n  updatePoints(spri_id) {\n    this._sprint.getSum(spri_id).subscribe(res => {\n      this.sumpoints = res.data;\n      this.showPoints(this.textState);\n    });\n  }\n  getSprint(num) {\n    this._sprint.getSprint(num).subscribe(res => {\n      this.sprint = res.data;\n      this.stTitle = \"Squadlinx\";\n      if (localStorage.getItem('title')) {\n        this.stTitle = localStorage.getItem('title');\n      }\n      this._title.setTitle(\".:: \" + this.stTitle + \" : Sprint #\" + this.sprint.spri_id + \" ::.\");\n      this._sprint.getTeam(this.sprint.grop_id).subscribe(ans => {\n        this.team = ans.data;\n        for (let i = 0; i < ans.data.length; i++) {\n          if (ans.data[i].usersel == 1) {\n            this.selectedUsers.push(ans.data[i].user_id);\n            this.selectedNodes.push(ans.data[i].user_id);\n            $('#team-name').text(ans.data[i].user_name + \" \" + ans.data[i].user_lastname);\n            $('#team-profile').text(ans.data[i].role_name);\n            this.textState.push(ans.data[i].user_id);\n            this.showPoints(this.textState);\n          }\n          this.selectedUsers_2 = this.selectedUsers;\n          this.selectedNodes_2 = this.selectedNodes;\n        }\n        this.getBurnDown(num);\n      });\n    });\n  }\n  showPoints(st) {\n    if (this.sumpoints.length > 0) {\n      for (var i = 0; i < this.sumpoints.length; i++) {\n        if (this.sumpoints[i].user_id == st) {\n          for (var j = 0; j < this.sumpoints[i].points.length; j++) {\n            if (this.sumpoints[i].points[j].sum_p != null) {\n              this.totalpoints_p = this.sumpoints[i].points[j].sum_p;\n              this.totalpoints_d = this.sumpoints[i].points[j].sum_d;\n              this.totalpoints_pending = this.sumpoints[i].points[j].pendpoints;\n            }\n          }\n        }\n      }\n    } else {\n      this.totalpoints_p = 0;\n      this.totalpoints_d = 0;\n      this.totalpoints_pending = 0;\n      this.sumpoints = [];\n    }\n\n  }\n  getBurnDown(num) {\n    this._dashBoard.getBurndown(num).subscribe(res => {\n      if (res) {\n        var datasets = [];\n        for (let u in res.data.users) {\n          if (this.selectedUsers.indexOf(res.data.users[u].user_id) >= 0) {\n            datasets.push({\n              label: res.data.users[u].label,\n              data: res.data.users[u].data,\n              fill: false,\n              borderColor: res.data.users[u].color,\n              backgroundColor: res.data.users[u].color,\n              user: res.data.users[u].user_id\n            });\n          }\n        }\n        datasets.push({\n          label: res.data.users[0].label,\n          data: res.data.users[0].data,\n          fill: false,\n          borderColor: res.data.users[0].color,\n          backgroundColor: res.data.users[0].color\n        });\n        this.burndownData = {\n          labels: res.data.days,\n          datasets: datasets,\n          options: { legend: { boxWidth: 40 } },\n          daily: res.data.daily\n        };\n      }\n    });\n  }\n  chartClicked(event) {\n    this.dayJob = this.burndownData.daily[event.element._index];\n    this._daily\n      .getDay4Usr(\n        this.burndownData.datasets[event.element._datasetIndex].user,\n        this.burndownData.daily[event.element._index]\n      )\n      .subscribe(res => {\n        this.dayView = res.data;\n        this.totalp = 0;\n        var totalp = 0;\n        var a = 0;\n        for (var i = 0; i < this.dayView.length; i++) {\n          a = parseFloat(this.dayView[i].dail_points);\n          totalp += parseFloat(a);\n        }\n        this.totalp = totalp.toFixed(2);\n        $(\"#mdDayView\").modal(\"show\");\n      });\n  }\n  showburndown() {\n    this.getTree();\n    $(\"#mdBurndown\").modal(\"show\");\n  }\n  getTree() {\n    this.myUsers = [];\n    this.contactsTree = [];\n    this._user.getMyUsers().subscribe(data => {\n      this.contacts = data.data;\n      let group = \"0\";\n      let groupname = \"\";\n      let children = [];\n\n      for (let u of data.data) {\n        this.myUsers.push(u.user_id);\n        if (group != u.grop_id) {\n          if (group != \"0\") {\n            this.contactsTree.push({\n              \"label\": groupname,\n              \"data\": group,\n              \"expanded\": true,\n              \"children\": children\n            });\n          }\n          groupname = u.groupname;\n          group = u.grop_id;\n          children = [];\n        }\n        children.push({\n          \"label\": u.user_name + \" \" + u.user_lastname, \"data\": u.user_id\n        });\n      }\n      if (group != \"0\") {\n        this.contactsTree.push({\n          \"label\": groupname,\n          \"data\": group,\n          \"expanded\": true,\n          \"children\": children\n        });\n      }\n    });\n  }\n  updateSelect(event) {\n    this.selectedUsers = [];\n    for (let c of this.selectedNodes) {\n      if (!c.children) {\n        this.selectedUsers.push(c);\n      }\n    }\n    this.getBurnDown(this.sprintselected);\n  }\n  doneFilter() {\n    this.searchuser = \"\";\n  }\n  selectAllItems() {\n\n    if (this.selectedNodes.length > 0) {\n      this.selectedNodes = [];\n    } else {\n      this.selectedNodes = [];\n      for (var t in this.contactsTree) {\n        this.selectedNodes.push(this.contactsTree[t].data);\n        if (this.contactsTree[t].children.length > 0) {\n          for (var c in this.contactsTree[t].children) {\n            this.selectedNodes.push(this.contactsTree[t].children[c].data);\n          }\n        }\n      }\n    }\n\n    this.updateSelect(event);\n  }\n  selectAllChildrens(childrens, idparent) {\n    let m = 0;\n    let n = 0;\n    for (var x in this.selectedNodes) {\n      if (this.selectedNodes[x] == idparent) {\n        m++;\n      }\n      else {\n        n++;\n      }\n    }\n\n    if (m == 1 && n == 0) {\n      this.selectedNodes = [];\n      this.selectedNodes.push(idparent);\n      if (childrens.length > 0) {\n        for (var c in childrens) {\n          if (m == 1) {\n            this.selectedNodes.push(childrens[c].data);\n          }\n        }\n      }\n    }\n    else {\n      this.selectedNodes = [];\n    }\n  }\n  updateSelectA(event, children, idparent) {\n    this.selectAllChildrens(children, idparent);\n    this.selectedUsers = [];\n    for (let c of this.selectedNodes) {\n      if (!c.children) {\n        this.selectedUsers.push(c);\n      }\n    }\n    this.getBurnDown(this.sprintselected);\n  }\n  getAttachments(taskid) {\n    this._tasks.getAttachments(taskid).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n  addSpTask() {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.seltasks = [];\n    this.task_description = \"\";\n    this._sprint.getTasksWoSp().subscribe(data => {\n      this.sprintTask = data.data;\n    });\n    $(\"#mdAddSpTask\").modal(\"show\");\n  }\n  selectAll(type) {\n    if (type == 1) {\n      var items = this.sprints;\n    } else {\n      var items = this.sprintTask;\n    }\n    if (this.seltasks.length > 0) {\n      this.seltasks = [];\n    } else {\n      this.seltasks = [];\n      items\n      for (var t in items) {\n        this.seltasks.push(items[t].task_id);\n      }\n    }\n  }\n\n  setGroupList(state) {\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.limitpage = this.sprints.length > 20 ? 20 : this.sprints.length;\n    this.itemcount = this.sprints.length;\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n  onChangeTask(event, action) {\n    if (action == \"new\") {\n      var files = event.files;\n      if (this.taskattch.attachments.length > 0) {\n        for (let c of this.taskattch.attachments) {\n          if (files[0][\"name\"] == c.name) {\n          } else {\n            this.taskattch.attachments.push(files[0]);\n          }\n        }\n      } else {\n        this.taskattch.attachments.push(files[0]);\n      }\n    } else if (action == \"delete\") {\n      var file = event.file;\n      for (let c of this.taskattch.attachments) {\n        if (file[\"name\"] == c.name) {\n          var posattch = this.taskattch.attachments.indexOf(c);\n          this.taskattch.attachments.splice(posattch);\n        }\n      }\n    }\n  }\n  onUploadAttachment(taskid, form) {\n    this.task.task_id = taskid;\n    this._tasks.putAttachments(this.task).subscribe(res => {\n      if (res.data === \"\" || res.data === \"0\") {\n        this.toastr.error(res.message, \"Error!\");\n      } else {\n        this.toastr.success(res.message, \"Attachments uploaded successfully\");\n        this.task.attachments = [];\n        this.getAttachments(taskid);\n        form.clear();\n      }\n    });\n  }\n\n  addTaskToSprint() {\n    this.task_description = \"\";\n    $('[data-toggle=\"tooltip\"]').tooltip('hide');\n    this.task = { project: {}, attachments: [] };\n  }\n  editTask(idtk) {\n    this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n      idtk.attachments = res.data;\n      this.task = idtk;\n      $('#mdAddTaskToSprint').modal('show');\n    });\n  }\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n\n  deleteAttachment(att) {\n    var pos = this.task.attachments.indexOf(att.name);\n    this.task.attachments.splice(pos, 1);\n  }\n  deleteAttachmentNT(att) {\n    for (var i in this.note.attachments) {\n      if (this.note.attachments[i] === att) {\n        this.note.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].tsat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n  round(value, n) {\n    if (!n || n == 0) {\n      n = 1;\n    } else {\n      n = 10 * n;\n    }\n    return Math.round(value * n) / n;\n  }\n  closeModal() {\n    this.searchtask = \"\";\n  }\n\n  getListSprints(group_id) {\n    this._sprint.getListReport(group_id).subscribe(res => {\n      this.sprintslist = res.data;\n      this.mysprint.spri_id = res.data[0].spri_id;\n    });\n  }\n  getSprintInfo(id_sprint) {\n    this.seltasks = [];\n    this._sprint.getMySprintInfo(id_sprint).subscribe(res => {\n      if (res.data[0].tasks > 0) {\n        this.sprints = res.data;\n        this.sprintselected = this.sprints[0].spri_id;\n        this.getSprint(this.sprints[0].spri_id);\n        this.updatePoints(this.sprints[0].spri_id);\n        this.mysprint.grop_id = res.data[0].grop_id;\n      } else {\n        this.sprints = [];\n        this.sprintselected = res.data[0].spri_id;\n        this.getSprint(res.data[0].spri_id);\n        this.mysprint.grop_id = res.data[0].grop_id;\n      }\n    });\n  }\n  updateSprint(num) {\n    this.getSprintTask(num);\n    this.updatePoints(num);\n    this._sprint.getSprint(num).subscribe(res => {\n      this.sprint = res.data;\n      this.stTitle = \"Squadlinx\";\n      if (localStorage.getItem('title')) {\n        this.stTitle = localStorage.getItem('title');\n      }\n      this._title.setTitle(\".:: \" + this.stTitle + \" : Sprint #\" + this.sprint.spri_id + \" ::.\");\n      this.getBurnDown(num);\n    });\n  }\n  getSprintTask(id_sprint) {\n    this.seltasks = [];\n    this._sprint.getMySprintInfo(id_sprint).subscribe(res => {\n      if (res.data.length > 0) {\n        this.sprints = res.data;\n        this.sprintselected = this.sprints[0].spri_id;\n        this.updatePoints(this.sprints[0].spri_id);\n        this.mysprint.grop_id = res.data[0].grop_id;\n      } else {\n        this.sprints = [];\n        this.sprintselected = id_sprint;\n        this.mysprint.grop_id = this.mygroupid;\n        this.totalpoints_p = 0;\n        this.totalpoints_d = 0;\n        this.totalpoints_pending = 0;\n        this.sumpoints = [];\n      }\n    });\n  }\n  showModaltk(tkid) {\n    $(\"#myTask\" + tkid).click();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/sprint/mysprint.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./whiteboard.template.html\";\n\nimport { GroupService } from \"../../services/group.service\";\nimport { HeaderService } from \"../../services/header.service\";\nimport { RolesService } from \"../../services/roles.service\";\nimport { WhiteboardService } from \"../../services/whiteboard.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { localeData } from \"moment\";\n\n@Component({\n  selector: \"whiteboard\",\n  template: template,\n  providers: [ConfirmationService]\n})\nexport class WhiteboardComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    groupService: GroupService,\n    rolesService: RolesService,\n    headerService: HeaderService,\n    confirmationService: ConfirmationService,\n    whiteboardService: WhiteboardService,\n    noteService: NoteService\n  ) {\n    this._title = title;\n    this._router = router;\n    this._sanitizer = sanitizer;\n    this.toastr = toastr;\n    this._groupService = groupService;\n    this._roles = rolesService;\n    this._headerService = headerService;\n    this._whiteboard = whiteboardService;\n    this._notes = noteService;\n    this.notemd = { note_text: \"\" };\n    this.note = { attachments: [] };\n    this.confirm = confirmationService;\n    this.messageslist = {};\n    this.messages = {};\n    this.groups = [];\n    this.selectuser =[];\n    this.comments = {};\n    this.newlike = {};\n    this.newlove = {};\n    this.newangry = {};\n    this.newfun = {};\n    this.newsurprise = {};\n    this.deletepost = {};\n    this.isLoading = false;\n    this.selectedTeams = [];\n    this.c = [];\n    this.myTeams = [\n      {label: 'DFW Team', value: '1'},\n      {label: 'USAP Demographer', value: '2'},\n      {label: 'USAP RCM Leader', value: '3'},\n      {label: 'AGS HEALTH Team', value: '4'},\n  \n  ];\n    this.getMessage();\n    this.getGroups();\n  }\n\n  getMessage() {\n    this.isLoading = true;\n    this._whiteboard.getMessage().subscribe(res => {\n      this.messageslist = res.data;\n      this.isLoading = false;\n    });\n  }\n\n  getGroups() {\n    this._whiteboard.getGroups().subscribe(res => {\n      this.groups = res.data;\n    });\n  }\n  saveMessage() {\n      this._whiteboard.putMessage(this.messages).subscribe(data => {\n        if (data.data.message == \"OK\") {\n          this.toastr.success(\"Message added Successfully\");\n        }else {\n          this.toastr.warning(data.data.message);\n        }\n        this.getMessage();\n      });\n  }\n  saveComments() {\n      this._whiteboard.putComments(this.comments).subscribe(data => {\n        if (data.data.message == \"OK\") {\n          this.toastr.success(\"Message added Successfully\");\n        }else {\n          this.toastr.warning(data.data.message);\n        }\n        this.getMessage();\n      });\n  }\n \n  addLike(type, id, reaction) {\n    this.newlike.type = type;\n    this.newlike.id = id;\n    this.newlike.id_reaction = reaction;\n    this._whiteboard.putLikes(this.newlike).subscribe(data => {\n        this.getMessage();\n    });\n  }\n  addLove(type, id, reaction) {\n    this.newlove.type = type;\n    this.newlove.id = id;\n    this.newlove.id_reaction = reaction;\n    this._whiteboard.putLove(this.newlove).subscribe(data => {\n        this.getMessage();\n    });\n  }\n  addAngry(type, id, reaction) {\n    this.newangry.type = type;\n    this.newangry.id = id;\n    this.newangry.id_reaction = reaction;\n    this._whiteboard.putAngry(this.newangry).subscribe(data => {\n        this.getMessage();\n    });\n  }\n  addFun(type, id, reaction) {\n    this.newfun.type = type;\n    this.newfun.id = id;\n    this.newfun.id_reaction = reaction;\n    this._whiteboard.putFun(this.newfun).subscribe(data => {\n        this.getMessage();\n    });\n  }\n  addWow(type, id ,reaction) {\n    this.newsurprise.type = type;\n    this.newsurprise.id = id;\n    this.newsurprise.id_reaction = reaction;\n    this._whiteboard.putWow(this.newsurprise).subscribe(data => {\n        this.getMessage();\n    });\n  }\n\n  deletePost(type, id) {\n      this.deletepost.type = type;\n      this.deletepost.id = id;\n\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this.confirm.confirm({\n        icon: \"fa fa-exclamation\",\n        message: \"Do you want to delete this message?\",\n        header: \"Confirmation\",\n        accept: () => {\n          if (this.deletepost) {\n            this._whiteboard.deletePost(this.deletepost).subscribe(data => {\n              if (data.data == \"OK\") {\n                this.toastr.success(\"Deleted successfully\");\n              } else {\n                this.toastr.error(\"User does not have permission for this action\");\n              }\n              this.getMessage();\n            });\n          }\n        },\n        reject: () => {}\n      });\n\n  }\n  showMessage() {\n    this.messages.description = \"\";\n    this.messages.notify = false;\n    // this.messages.selectuser = [];\n    this.messages.group = [];\n    $('#mdMessage').modal('show');\n  }\n  showComments(idmuro) {\n    this.comments.id = idmuro;\n    this.comments.description = \"\";\n    $('#mdComments').modal('show');\n  }\n\n  validate() {\n    return (\n      !this.messages.description ||\n      this.messages.description.trim() == \"\" ||\n      !this.messages.group ||\n      this.messages.group == \"\"\n    );\n  }\n  validateComment() {\n    return (\n      !this.comments.description ||\n      this.comments.description.trim() == \"\" \n    );\n  }\n  \n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/whiteboard/whiteboard.component.js","import { Component } from \"@angular/core\";\nimport { Router, ActivatedRoute } from \"@angular/router\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport template from \"./externalrequests.template.html\";\n\nimport { ExternalRequestService } from \"../../services/externalrequest.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { CategoriesService } from \"../../services/categories.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { TypeService } from \"../../services/type.service\";\n\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\n\n@Component({\n  selector: \"externalrequests\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  providers: [ConfirmationService],\n  styles: [\".box-header {background-color: #c7c7c7; color: #fff;}\"]\n})\nexport class ExternalRequestsComponent {\n  constructor(\n    title: Title,\n    router: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    confirmationService: ConfirmationService,\n    externalRequestService: ExternalRequestService,\n    usersService: UsersService,\n    ProjectService: ProjectService,\n    taskService: TaskService,\n    productService: ProductService,\n    categoriesService: CategoriesService,\n    groupService: GroupService,\n    typeService: TypeService,\n    sprintService: SprintService\n  ) {\n    this._title = title;\n    this._router = router;\n    this.toastr = toastr;\n    this._user = usersService;\n    this._sprint = sprintService;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._sanitizer = sanitizer;\n    this._externalrequest = externalRequestService;\n    this.confirm = confirmationService;\n    this._projects = ProjectService;\n    this._tasks = taskService;\n    this._products = productService;\n    this._categories = categoriesService;\n    this._groups = groupService;\n    this._types = typeService;\n    this.products = [];\n    this.textState = [\"\"];\n    this.posState = \"type_name\";\n    this.textCreator = [\"\"];\n    this.posCreator = \"asigned_to\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.filter_excel = null;\n    this.search = \"\";\n    this._title.setTitle(\".:: \" + localStorage.getItem('title') + \" : External Requests ::.\");\n    if (localStorage.getItem(\"extrequsearch\")) {\n      this.search = localStorage.getItem(\"extrequsearch\");\n    }\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.currentpage = 1;\n    // this._aroute = arouter;\n    this.limitpage = 20;\n    this.groups = [];\n    this.plmt = [];\n    this.stsmt = [];\n    this.lblgroups = [];\n    this.seleve = [];\n    this.userlist = [];\n    this.requests = [];\n    this.emails = [];\n    this.st_cancelled = 0;\n    this.categories = [];\n    this.categoriesNewTask = [];\n    this.infoTaskFather = {};\n    this.infoTaskFatherAssociate = {};\n    this.catIds = [];\n    this.categoryMenu = [];\n    this.idtype = [];\n    this.tycate = [];\n    this.catlist = [];\n    this.note_text = \"\";\n    this.selectedCategory = {};\n    this.selectedProduct = [];\n    this.myProjects = [];\n    this.mdT = { project: {}, comments: [] };\n    this.note = { attachments: [] };\n    this.selectedprojects = [];\n    this.task = { project: {}, attachments: [] };\n    this.task_description = \"\";\n    this.taskJoin = {};\n    this.tagMenuNew = 1;\n    this.userslbl = [];\n    this.taskattch = { attachments: [] };\n    this.myfilterfield = { pos: \"para_type\", text: \"4\", typetittle: \"Implementation\", icon: \"sq sq-errors\", style: { 'background': '#F01458', 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    this.myfilterfieldNewTask = { pos: \"para_type\", text: \"4\", typetittle: \"Implementation\", icon: \"sq sq-errors\", style: { 'background': '#F01458', 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    this.taskid = 0;\n    this.idtk = [];\n    this.cant_e = 0;\n    this.cant_ia = 0;\n    this.cant_im = 0;\n    this.status = [];\n    this.position = -1;\n    this.mylist = [];\n    this.typetittle = \"\";\n    this.mytype = 0;\n    this.mytask = 0;\n    this.mysprints = [];\n    this.taskfields = [];\n    this.mylist.fields = [];\n    this.textInfo = [\n      \"Info\",\n      \"Project related\",\n      \"Adjustments\",\n      \"Timeline\",\n      \"Form\"\n    ];\n    this.pages = [1];\n    this.posInfo = \"info_id\";\n    this.timeline = 0;\n    this.mdT.total_adjusted = [];\n    this.task.taskid = 0;\n    this.imptask = {};\n    this.rjtask = {};\n    this.head = [];\n    this.cont = 0;\n    this.tagMenu = 1;\n    this.tagMenuRequest = 2;\n    this.existClient = true;\n    this.existProduct = true;\n    this.dbname = '';\n    this.selectedtype = 0;\n    this.clientlist = [];\n    this.searchTaskShared = \"\";\n    this.posOrderTaskShared = \"\";\n    this.limitpageTaskShared = 20;\n    this.itemcountTaskShared = 0;\n    this.orderDescTaskShared = false;\n    this.currentpageTaskShared = 1;\n    this.taskShared = [];\n    this.taskChecked = 0;\n    this.results = [20, 30, 40, 50];\n    this._user.getExternalList().subscribe(res => {\n      this.clients = [];\n      for (let c of res.data) {\n        this.clients.push({ label: c.client_name, value: c.client_id });\n        this.clientlist.push({ client_name: c.client_name, client_id: c.client_id, usex_dbname: c.usex_dbname });\n      }\n    });\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._products.getProducts().subscribe(data => {\n      this.myproducts = [];\n      for (let c of data.data) {\n        this.myproducts.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n    this._groups.getGroups().subscribe(data => {\n      this.groupsNewTask = [];\n      for (let c of data.data) {\n        this.groupsNewTask.push({ label: c.grop_name, value: c.grop_id });\n      }\n    });\n    this.types = [];\n    this._types.getTypes().subscribe(res => {\n      this.types = res.data;\n    });\n    this.products = [];\n    this.groups = [];\n    this.loadSprint();\n    this.getCategories();\n    this.isLoading = false;\n    this.typeSelected = '1,3,4';\n  }\n  ngAfterViewInit() {\n    this.reload();\n  }\n\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.searchFilter();\n    }\n  }\n\n  searchFilter() {\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.reload();\n  }\n\n  loadSprint() {\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprints = [];\n      this.mysprints.push({\n        label: \"Backlog\",\n        value: 0\n      });\n      for (let c of res.data) {\n        this.mysprints.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n        this.selectedprojects.push(c.proj_id);\n      }\n    });\n    this.getprojects();\n  }\n  reload() {\n    this.taskChecked = 0;\n    this.isLoading = true;\n    this.requests = [];\n    var filter = {\n      start: this.currentpage * this.limitpage - this.limitpage,\n      end: this.limitpage,\n      all: this.search.trim(),\n      type: this.textState,\n      client: this.textGroup,\n      orderby: this.posOrder,\n      orderdesc: this.orderDesc ? \"desc\" : \"\"\n    };\n    this.filter_excel = filter;\n    this._externalrequest.getMyRequests(filter).subscribe(res => {\n      this.requests = res.data.data;\n      this.isLoading = false;\n      if (this.textState[0] == \"\" ||\n        this.textState.length == 0 ||\n        this.textState.length == 3) {\n        this.itemcount = res.data.count;\n      } else {\n        if (this.textState[0] == \"1\") {\n          this.itemcount = res.data.errors;\n        }\n        if (this.textState[0] == \"3\") {\n          this.itemcount = res.data.improving;\n        }\n        if (this.textState[0] == \"4\") {\n          this.itemcount = res.data.implementations;\n        }\n      }\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.cant_e = res.data.errors;\n      this.cant_ia = res.data.improving;\n      this.cant_im = res.data.implementations;\n\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) {\n        this.pages.push(i);\n      }\n      for (let i = 0; i < this.types.length; i++) {\n        if (this.types[i].type_id == 1) {\n          this.types[i].count = this.cant_e;\n        } else if (this.types[i].type_id == 3) {\n          this.types[i].count = this.cant_ia;\n        } else if (this.types[i].type_id == 4) {\n          this.types[i].count = this.cant_im;\n        }\n      }\n    });\n  }\n  getComments(tk, dbname) {\n    this._externalrequest.getComments(tk, dbname).subscribe(res => {\n      this.task.comments = res.data;\n      this.mdT.comments = res.data;\n      var elem = document.getElementById(\"mdTComments\");\n      var elem2 = document.getElementById(\"taskComments\");\n      if (elem && elem2) {\n        elem.scrollTop = elem.scrollHeight;\n        elem2.scrollTop = elem2.scrollHeight;\n      }\n    });\n    this.note_text = \"\";\n    this.note = { attachments: [] };\n  }\n  editModal(ev) {\n    if (!ev.attachments) {\n      ev.attachments = [];\n    }\n    this.note = { attachments: [] };\n    this.task = ev;\n    this.getComments(ev.task_id, ev.usex_dbname);\n    $(\"#addDescription\").removeClass(\"in\");\n  }\n\n  getAttachments(taskid, dbname) {\n    this._externalrequest.getAttachments(taskid, dbname).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n\n  downloadFile(item, event){     \n    var file = item;      \n    var filename = item.name;      \n    var blob = new Blob([file]);\n    var url  = URL.createObjectURL(blob);\n\n    var element = event.srcElement;\n    $(element).attr({ 'download': filename, 'href': url});  \n  }\n  \n  deleteAttachmentNT(att) {\n    for (var i in this.note.attachments) {\n      if (this.note.attachments[i] === att) {\n        this.note.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._externalrequest.deleteAttachmentTask(task.task_id, task.attachments[i].taat_id, task.dbname).subscribe(res => {\n          if (res.data === \"\" || res.data === \"0\") {\n            this.toastr.error(res.message, \"Error!\");\n          } else {\n            this.toastr.success(res.message, \"Attachment deleted successfully\");\n            this.getAttachments(task.task_id, task.dbname);\n          }\n        });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n\n  deleteAttachment(att) {\n\n    var index = 0;\n    for (let i in this.task.attachments) {\n      if (att.name == this.task.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n    this.task.attachments.splice(index, 1);\n\n  }\n\n  filterMultiple(event) {\n    let query = event.query;\n    this.usersCRM = this.filter(query, this.usersCRMa);\n  }\n  filterMultipleEmails(event) {\n    let query = event.query;\n    this.listmails = this.filter(query, this.listmailsa);\n  }\n\n  filter(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (\n        country.completename.toLowerCase().indexOf(query.toLowerCase()) >= 0\n      ) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  addEvent(type_cod, title, background, icon) {\n    this.task = { project: {}, attachments: [] };\n    this.task.taskid = 0;\n    this.task.islocal = false;\n    this.mylist.fields = [];\n    this.myfilterfield = { pos: \"para_type\", text: [type_cod], typetittle: title, icon: icon, style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n    this.existClient = true;\n    this.existProduct = true;\n    $(\"#mdEditRequest\").modal(\"show\");\n  }\n\n  mdShowCreateTaskJoin(type_cod, title, background, icon) {\n    this.tagMenuNew = 2;\n    this.mylist.fields = [];\n    this.myfilterfieldNewTask = {\n      pos: \"para_type\",\n      text: [type_cod],\n      typetittle: title,\n      icon: icon,\n      style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' }\n    };\n\n    //vaciar el formulario al cambiar de vista de request\n    this.taskJoin.fields = [];\n\n    let taskChild = this.infoTaskFather;\n    this._tasks.getInfoTaskJoin(taskChild.task_id).subscribe(res => {\n      if (res.data && res.data != null) {\n        this.taskJoin = res.data;\n        this.taskJoin.attachments = [];\n        this.taskJoin.cate_id = 0;\n      }\n    });\n    $(\"#mdCreateTaskJoin\").modal(\"show\");\n  }\n\n  mdShowTypeTaskJoin(eve) {\n    this.infoTaskFather = eve;\n    $(\"#mdTypeTaskJoin\").modal(\"show\");\n  }\n\n  mdShowAssociateTaskJoin(eve) {\n    this.infoTaskFatherAssociate = eve;\n    this.taskChecked = 0;\n    this.reloadTaskShared();\n    $(\"#mdAssociateTaskJoin\").modal(\"show\");\n  }\n\n  reloadTaskShared() {\n    this.isLoadingTaskShared = true;\n    this.taskChecked = 0;\n\n    var filter = {\n      start: this.currentpageTaskShared * this.limitpageTaskShared - this.limitpageTaskShared,\n      end: this.limitpageTaskShared,\n      all: this.searchTaskShared.trim(),\n      orderby: this.posOrderTaskShared,\n      orderdesc: this.orderDescTaskShared ? \"desc\" : \"\"\n    };\n    this._tasks.getTaskSharedList(filter).subscribe(res => {\n\n      this.isLoadingTaskShared = false;\n      this.taskShared = res.data.data;\n      this.itemcountTaskShared = res.data.count;\n      this.lastpageTaskShared = this.itemcountTaskShared / this.limitpageTaskShared;\n      if (this.lastpageTaskShared % 1 != 0) {\n        var countpagTaskShared = 1 + parseInt(this.lastpageTaskShared);\n        this.lastpageTaskShared = countpagTaskShared;\n      }\n      this.pagesTaskShared = [];\n      for (let i = 1; i <= this.lastpageTaskShared; i++) {\n        this.pagesTaskShared.push(i);\n      }\n      if (this.pagesTaskShared.length == 0) {\n        this.pagesTaskShared = [1];\n      }\n    });\n    this.contTaskShared = 0;\n  }\n\n\n  deleteTaskJoin(task_child_id) {\n\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Delete the Task Related ?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (task_child_id && task_child_id != 0) {\n          this._tasks.deleteTaskJoin(task_child_id).subscribe(res => {\n            if (res.data && res.data != null) {\n              if (res.data.data && res.data.data != null) {\n                this.toastr.success(res.message, \"Task Related deleted successfully\");\n                this.reload();\n              } else {\n                this.toastr.warning(\"\", res.data.message);\n              }\n            } else {\n              this.toastr.warning(\"\", res.message);\n            }\n\n          });\n        }\n      },\n      reject: () => {\n      }\n    });\n  }\n\n  setPageNewTask(opt) {\n    if (opt == 1) {\n      this.tagMenuNew = 1;\n    }\n    if (opt == 2) {\n      this.tagMenuNew = 2;\n    }\n    if (opt == 3) {\n      this.tagMenuNew = 3;\n    }\n  }\n\n  saveTaskJoin() {\n    let newTaskJoin = {};\n\n    let campos = [];\n\n    let fields_empty = false;\n\n    if (this.taskJoin.task_subject && this.taskJoin.task_subject.trim() != \"\" && this.taskJoin.prod_id && this.taskJoin.prod_id != 0\n      && this.taskJoin.cate_id && this.taskJoin.cate_id != 0 && this.taskJoin.grop_id && this.taskJoin.grop_id != 0\n      && this.taskJoin.task_description && this.taskJoin.task_description.trim() != \"\") {\n\n\n      this.taskJoin.task_description = this.taskJoin.task_description.split(\"\\t\").join(\"\");\n      this.taskJoin.task_description = this.taskJoin.task_description\n        .split(\"\\n\")\n        .join(\"\");\n      this.taskJoin.task_description = this.taskJoin.task_description\n        .split(\"\\r\")\n        .join(\"\");\n\n      newTaskJoin.task_subject = this.taskJoin.task_subject;\n      newTaskJoin.cate_id = this.taskJoin.cate_id;\n      newTaskJoin.prod_id = this.taskJoin.prod_id;\n      newTaskJoin.grop_id = this.taskJoin.grop_id;\n      newTaskJoin.task_description = this.taskJoin.task_description;\n      newTaskJoin.task_father_id = this.taskJoin.task_id;\n      newTaskJoin.attachments = this.taskJoin.attachments;\n\n      for (let i in this.taskJoin.fields) {\n        if (this.taskJoin.fields[i].form_data && this.taskJoin.fields[i].form_data.trim() != \"\") {\n          campos.push(this.taskJoin.fields[i].form_id + '|*|' + this.taskJoin.fields[i].form_data);\n        } else {\n          fields_empty = true;\n        }\n      }\n\n      if (fields_empty == false) {\n        newTaskJoin.fields = campos;\n        newTaskJoin.isrequest = \"true\";\n        this.isLoading = true;\n        this._tasks.saveTaskJoin(newTaskJoin).subscribe(res => {\n          this.isLoading = false;\n          if (res.data && res.data != null) {\n            this.toastr.success(res.message);\n            $(\"#mdCreateTaskJoin\").modal(\"hide\");\n            $(\"#mdTypeTaskJoin\").modal(\"hide\");\n            this.reload();\n          } else {\n            this.toastr.warning(res.message, \"Error\");\n          }\n        });\n      } else {\n        this.toastr.warning(\"Empty form fields\");\n      }\n\n    } else {\n      this.toastr.warning(\"¡ Fields Empty !\");\n    }\n  }\n\n  setCurPageTaskShared(value) {\n    var cur = value == 1 ? this.currentpageTaskShared + 1 : this.currentpageTaskShared - 1;\n    if (cur <= 0) {\n      this.currentpageTaskShared = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpageTaskShared - this.limitpageTaskShared + 1 <=\n        this.itemcountTaskShared + this.limitpageTaskShared\n      ) {\n        this.currentpageTaskShared = cur;\n      }\n    }\n    this.reloadTaskShared();\n  }\n\n  goToTaskShared(value) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    if (value == 0) {\n      this.currentpageTaskShared = 1;\n      this.limitpageTaskShared = 20;\n    } else {\n      this.currentpage = Math.round(this.itemcountTaskShared / this.limitpageTaskShared);\n      let mod = this.itemcountTaskShared % this.limitpageTaskShared;\n      if (mod > 0 && mod < 5) {\n        this.currentpageTaskShared += 1;\n      }\n    }\n    this.reloadTaskShared();\n  }\n\n\n  setOrderTaskShared(value) {\n    if (this.posOrderTaskShared === value) {\n      this.orderDescTaskShared = !this.orderDescTaskShared;\n    }\n    this.posOrderTaskShared = value;\n    this.reloadTaskShared();\n  }\n\n  changedExtraHandlerTaskShared(event) {\n    if (event.keyCode == 13) {\n      this.isLoadingTaskShared = true;\n      this.currentpageTaskShared = 1;\n\n      var filter = {\n        start: 0,\n        end: this.limitpageTaskShared,\n        all: this.searchTaskShared.trim(),\n        orderby: this.posOrderTaskShared,\n        orderdesc: this.orderDescTaskShared ? \"desc\" : \"\"\n      };\n      this._tasks.getTaskSharedList(filter).subscribe(res => {\n        this.isLoadingTaskShared = false;\n        this.taskShared = res.data.data;\n        this.itemcountTaskShared = res.data.count;\n        this.lastpageTaskShared = this.itemcountTaskShared / this.limitpageTaskShared;\n        if (this.lastpageTaskShared % 1 != 0) {\n          var countpagTaskShared = 1 + parseInt(this.lastpageTaskShared);\n          this.lastpageTaskShared = countpagTaskShared;\n        }\n        this.pagesTaskShared = [];\n        for (let i = 1; i <= this.lastpageTaskShared; i++) {\n          this.pagesTaskShared.push(i);\n        }\n        if (this.pagesTaskShared.length == 0) {\n          this.pagesTaskShared = [1];\n        }\n      });\n      this.contTaskShared = 0;\n    }\n  }\n\n  filterTextTaskShared() {\n    this.isLoadingTaskShared = true;\n    this.currentpageTaskShared = 1;\n\n    var filter = {\n      start: 0,\n      end: this.limitpageTaskShared,\n      all: this.searchTaskShared.trim(),\n      orderby: this.posOrderTaskShared,\n      orderdesc: this.orderDescTaskShared ? \"desc\" : \"\"\n    };\n    this._tasks.getTaskSharedList(filter).subscribe(res => {\n      this.isLoadingTaskShared = false;\n      this.taskShared = res.data.data;\n      this.itemcountTaskShared = res.data.count;\n      this.lastpageTaskShared = this.itemcountTaskShared / this.limitpageTaskShared;\n      if (this.lastpageTaskShared % 1 != 0) {\n        var countpagTaskShared = 1 + parseInt(this.lastpageTaskShared);\n        this.lastpageTaskShared = countpagTaskShared;\n      }\n      this.pagesTaskShared = [];\n      for (let i = 1; i <= this.lastpageTaskShared; i++) {\n        this.pagesTaskShared.push(i);\n      }\n      if (this.pagesTaskShared.length == 0) {\n        this.pagesTaskShared = [1];\n      }\n    });\n    this.contTaskShared = 0;\n  }\n\n  checkTask(task_id) {\n    this.taskChecked = task_id;\n  }\n\n  associateTaskJoin() {\n\n    let newTaskJoin = {};\n\n    if (this.taskChecked && this.taskChecked != 0\n      && this.infoTaskFatherAssociate.task_id && this.infoTaskFatherAssociate.task_id != 0) {\n      newTaskJoin.task_child_id = this.taskChecked;\n      newTaskJoin.task_father_id = this.infoTaskFatherAssociate.task_id;\n\n      this._tasks.associateTaskJoin(newTaskJoin).subscribe(res => {\n        if (res.data && res.data != null) {\n          this.toastr.success(res.message);\n          $(\"#mdAssociateTaskJoin\").modal(\"hide\");\n          this.reload();\n        } else {\n          this.toastr.warning(res.message);\n        }\n      });\n\n    } else {\n      this.toastr.error(\"Error !\");\n    }\n  }\n\n  getCategories() {\n    this.categorieslblNewTask = [];\n    this._categories.getCategories().subscribe(data => {\n      this.categoriesNewTask = data.data;\n      for (let c of data.data) {\n        this.categorieslblNewTask.push({\n          label: c.cate_desc,\n          value: c.cate_id,\n          para_type: c.para_type\n        });\n      }\n    });\n  }\n\n  createFormNewTask(cate_id) {\n\n    this.position = -1;\n    let array_list = [];\n    this.taskJoin.fields = [];\n    this._categories.getFieldsCategory(cate_id).subscribe(res => {\n      this.taskJoin.fields = res.data;\n      if (this.taskJoin.fields && this.taskJoin.fields.length > 0) {\n        this.tagMenuNew = 1;\n        $('#li_description_taskJoin').removeClass('active');\n        $('#li_associateForm_taskJoin').addClass('active');\n      } else {\n        this.tagMenuNew = 2;\n        $('#li_associateForm_taskJoin').removeClass('active');\n        $('#li_description_taskJoin').addClass('active');\n      }\n    });\n  }\n\n  onChangeTask(event) {\n\n    var files = event.srcElement.files;\n    if (!this.taskJoin.attachments) {\n      this.taskJoin.attachments = [];\n    }\n    this.taskJoin.attachments.push(files[0]);\n  }\n\n  deleteAttachmentNewTaskJoin(att) {\n    var index = 0;\n    for (let i in this.taskJoin.attachments) {\n      if (att.name == this.taskJoin.attachments[i].name) {\n        index = i;\n        break;\n      }\n    }\n    this.taskJoin.attachments.splice(index, 1);\n  }\n\n  showRequest(request) {\n    this.mylist = [];\n    this.mytask = 0;\n    this.timeline = 0;\n    this.taskfields = [];\n    this.mytask = request.task_id;\n    if (request.tktype == \"Request\") {\n      if (request.asigned_to == \"forme\") {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        if (request.islocal) {\n          this._tasks.getTask(request.task_id).subscribe(res => {\n            this.task = res.data;\n            this.task.islocal = true;\n            this._tasks.getTaskFields(request.task_id).subscribe(res => {\n              this.task.form = res.data;\n            });\n            $(\"#mdEditTask\").modal(\"show\");\n          });\n        } else {\n          this._externalrequest.getTask(request.task_id, request.bd_external).subscribe(res => {\n            this.task = res.data;\n            this._externalrequest.getTaskFields(request.task_id, request.bd_external).subscribe(res => {\n              this.task.form = res.data;\n            });\n            $(\"#mdEditTask\").modal(\"show\");\n          });\n        }\n      } else {\n        if (request.canclose == 1) {\n          $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n          if (request.islocal) {\n            this._tasks.getMyTask(request.task_id).subscribe(res => {\n              this.task = res.data;\n              this.myfilterfield = { pos: \"para_type\", text: [request.type], typetittle: request.type_name, icon: this.task.icon, style: { 'background': this.task.background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n              this.task.task_description_r = this.task.task_description;\n              this.task.task_description = \"\";\n              this._tasks.getTaskFields(request.task_id).subscribe(res => {\n                this.task.fields = res.data;\n              });\n              $(\"#mdEditRequest\").modal(\"show\");\n            });\n          } else {\n            this._externalrequest.getTask(request.task_id, request.bd_external).subscribe(res => {\n              this.task = res.data;\n              this.task.islocal = false;\n              this.myfilterfield = { pos: \"para_type\", text: [request.type], typetittle: request.type_name, icon: this.task.icon, style: { 'background': this.task.background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n              this.task.task_description_rext = this.task.task_description;\n              this._externalrequest.getTaskFields(request.task_id, request.bd_external).subscribe(res => {\n                this.task.fields = res.data;\n              });\n              $(\"#mdEditExtRequest\").modal(\"show\");\n            });\n          }\n        }\n      }\n    }\n  }\n  updateCatSelect(cat, listcat) {\n    var cat_array = [];\n    this.selectedCategory.cate_id = cat;\n    for (let c of this.categories) {\n      cat_array.push(c.value);\n      if (cat_array.indexOf(cat) >= 0 && c.value == cat && c.reqapproval == 1) {\n        this.task.task_approved = 0;\n      } else if (\n        cat_array.indexOf(cat) >= 0 &&\n        c.value == cat &&\n        c.reqapproval == 0\n      ) {\n        this.task.task_approved = 1;\n      } else if (cat_array.indexOf(cat) < 0) {\n        this.task.task_approved = 1;\n      }\n    }\n  }\n\n  saveTask(type) {\n    if (this.task.task_description_r) {\n      this.task.task_description = this.task.task_description_r;\n    }\n    if (this.task.task_description_rext) {\n      this.task.task_description = this.task.task_description_rext;\n    }\n    this.task.task_description = this.task.task_description\n      .split(\"\\t\")\n      .join(\"\")\n      .split(\"\\n\")\n      .join(\"\")\n      .split(\"\\r\")\n      .join(\"\");\n    if (this.task.task_delivery) {\n      this.task.task_delivery =\n        this.task.task_delivery.getFullYear() +\n        \"-\" +\n        (this.task.task_delivery.getMonth() + 1) +\n        \"-\" +\n        this.task.task_delivery.getDate();\n    }\n    let result = \"\";\n    if (type == 1) {\n      this.task.updaterequest = 1;\n    }\n    this.task.isrequest = \"true\";\n    if (this.task.islocal == true) {\n      this.isLoading = true;\n      this._tasks.putTask(this.task).subscribe(res => {\n        this.isLoading = false;\n        result = res.data;\n        if (res.data == \"\" || res.data == \"0\") {\n          this.toastr.error(res.message, \"Error!\");\n        } else {\n          if (this.task.fields && this.task.fields.length > 0) {\n            for (var i = 0; i < this.task.fields.length; i++) {\n              if (!this.task.fields[i].task_id > 0) {\n                this.task.fields[i].task_id = res.data;\n              }\n            }\n            this._tasks.putTaskFields(result, this.task.fields).subscribe(rex => { });\n          }\n          this.toastr.success(res.message, \"Task saved successfully\");\n        }\n        this.task = { project: {}, attachments: [] };\n        $(\"#mdEditTask\").modal(\"hide\");\n        this.reload();\n      });\n    } else {\n      this.dbname = this.task.dbname;\n      this.isLoading = true;\n      this._externalrequest.putTask(this.task).subscribe(res => {\n        this.isLoading = false;\n        result = res.data;\n        if (res.data == \"\" || res.data == \"0\") {\n          this.toastr.error(res.message, \"Error!\");\n        } else {\n          if (this.task.fields && this.task.fields.length > 0) {\n            for (var i = 0; i < this.task.fields.length; i++) {\n              if (!this.task.fields[i].task_id > 0) {\n                this.task.fields[i].task_id = res.data;\n              }\n            }\n            this._externalrequest.putTaskFields(this.task.fields, this.dbname).subscribe(rex => {\n            });\n          }\n          this.toastr.success(res.message, \"Task saved successfully\");\n\n        }\n        this.task = { project: {}, attachments: [] };\n        $(\"#mdEditExtRequest\").modal(\"hide\");\n        $(\"#mdEditRequest\").modal(\"hide\");\n        this.reload();\n      });\n    }\n\n    this.mytask = 0;\n  }\n  reopenTask(database, idtk) {\n    this.confirm.confirm({\n      message: \"Do you want to Reopen this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._externalrequest.reopenTask(idtk, database, 37).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Request reopen successfully\");\n              this.reload();\n            } else {\n              this.toastr.error(\"\");\n            }\n          });\n        }\n      },\n      reject: () => {\n      }\n    });\n  }\n  getprojects() {\n    this.myProjects = [];\n    this.selectedprojects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      this.selectedprojects = [0];\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n          this.selectedprojects.push(c.proj_id);\n        }\n      }\n    });\n  }\n  noteAdd(idtask, type) {\n    this.note.task_id = idtask;\n\n    if (\n      this.note.note_text == undefined &&\n      this.note_text != null &&\n      this.note_text != \"\"\n    ) {\n      this.note.note_text = this.note_text;\n    }\n    // this._externalrequest.putNote(this.note).subscribe(data => {\n    // });\n    this.getComments(idtask);\n    this.getTimeline(idtask);\n  }\n\n  createForm(catid) {\n    this.position = -1;\n    let array_list = [];\n    this.task.fields = [];\n    this._externalrequest.getFieldsCategory(catid, this.dbname).subscribe(res => {\n      this.task.fields = res.data;\n    });\n  }\n\n  fullForm(list_data, list_cate, cate_id, task_id) {\n    this.position = -1;\n    let categoryList = list_cate;\n    let dataList = list_data;\n    let category = cate_id;\n    let passed = true;\n    let list_a = [];\n    this.task.fields = [];\n\n    for (var i = 0; i <= categoryList.length; i++) {\n      if (i < categoryList.length) {\n        if (categoryList[i].value == category) {\n          this.position = i;\n          list_a = categoryList[i];\n          for (var x = 0; x <= list_a.fields.length; x++) {\n            if (x < list_a.fields.length) {\n              var campo = {\n                form_field: list_a.fields[x].form_field,\n                form_id: list_a.fields[x].form_id,\n                cate_id: list_a.fields[x].cate_id,\n                task_id: this.mytask,\n                form_data: dataList[x].form_data\n              };\n              this.task.fields.push(campo);\n            }\n          }\n        }\n      }\n    }\n\n  }\n\n  lpad(n, width, z) {\n    z = z || \"0\";\n    n = n || \"0\";\n    n = n + \"\";\n    return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n  }\n  setStateList(state) {\n    this.typeSelected = state.toString();\n    this.textState = state;\n    this.posState = \"type_name\";\n    this.limitpage = 20;\n    this.currentpage = 1;\n    this.reload();\n  }\n  setInfoTask(info) {\n    this.timeline = info;\n    //this.textInfo = info;\n    //this.posInfo = \"info_text\";\n  }\n  closeTask(database, idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Close this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._externalrequest.setStatusTask(database, idtk, 42).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Request closed successfully\");\n              this.reload();\n            } else {\n              this.toastr.error(data.message);\n            }\n          });\n        }\n      },\n      reject: () => { }\n    });\n  }\n\n  deleteTask(database, idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Delete this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._externalrequest.setStatusTask(database, idtk, 43).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Request deleted successfully\");\n              this.reload();\n            } else {\n              this.toastr.error(\"\");\n            }\n          });\n        }\n      },\n      reject: () => { }\n    });\n  }\n  rejectTask() {\n    this._tasks.rejectTask(this.rjtask.task_id, this.rjtask.retk_description).subscribe(data => {\n      if (data.data != \"OK\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this.toastr.success(data.message, \"Task rejected\");\n      }\n      this.reload();\n    });\n  }\n\n  showReject(dv) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Reject this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (dv) {\n          this.rjtask.task_id = dv.task_id;\n          this.rjtask.retk_description = \"\";\n          $(\"#mdRj\").modal(\"show\");\n        }\n      },\n      reject: () => { }\n    });\n  }\n\n  showImprov(dv) {\n    this.head = [];\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want move to Improving this Request?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (dv) {\n          this.imptask.task_id = dv.task_id;\n          this.imptask.imtk_description = \"\";\n          this.imptask.database = dv.bd_external;\n          $(\"#mdImp\").modal(\"show\");\n        }\n      },\n      reject: () => { }\n    });\n  }\n\n  impTask() {\n    this._externalrequest.impTask(this.imptask.database, this.imptask.task_id, this.imptask.imtk_description).subscribe(data => {\n      if (data.data != \"OK\") {\n        this.toastr.warning(data.message, \"Warning!\");\n      } else {\n        this.toastr.success(data.message, \"Task moved to improving\");\n      }\n      this.reload();\n    });\n  }\n\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n    this.reload();\n  }\n  setCurPage(value) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.reload();\n  }\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n  sanitizeHtml(text) {\n    if (text) {\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n  setPage(opt) {\n    if (opt == 1) {\n      this.tagMenu = 1;\n    }\n    if (opt == 2) {\n      this.tagMenu = 2;\n    }\n  }\n  clientData(client_id, type) {\n    let x = type.toString();\n    this._user.getDataBase(client_id).subscribe(res => {\n      this.dbname = res.data.usex_dbname;\n      this.task.usex_myid = res.data.usex_myid;\n      this.task.dbname = this.dbname;\n      this._externalrequest.getProducts(this.dbname).subscribe(data => {\n        this.products = [];\n        for (let c of data.data) {\n          this.products.push({ label: c.prod_name, value: c.prod_id });\n          this.selectedProduct.push(c.prod_id);\n        }\n      });\n      this._externalrequest.getGroups(this.dbname).subscribe(data => {\n        this.groups = [];\n        for (let c of data.data) {\n          this.groups.push({ label: c.grop_name, value: c.grop_id });\n        }\n      });\n      this.existClient = false;\n    });\n  }\n\n  getCategoriesbyProduct(prodId, item) {\n    let type = item.toString();\n    this._externalrequest.getActiveCategories(this.dbname, type, prodId).subscribe(data => {\n      this.categories = [];\n      this.categorieslbl = [];\n      this.categories = data.data;\n      for (let c of data.data) {\n        this.categorieslbl.push({\n          label: c.cate_desc,\n          value: c.cate_id,\n          para_type: c.para_type\n        });\n      }\n      this.existProduct = false;\n    });\n  }\n\n  doneRequest() {\n    this.task = { project: {}, attachments: [] };\n    this.task.taskid = 0;\n    this.mylist.fields = [];\n    this.existClient = true;\n  }\n  showModaltk(tkid) {\n    $(\"#myTask\" + tkid).click();\n  }\n  setGroupList(state) {\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.posOrder = \"\";\n    this.reload();\n  }\n  showCategories(type_cod, title, background, icon) {\n    this.getClientCategories(type_cod, title, background, icon);\n  }\n  getClientCategories(type_cod, title, background, icon) {\n    this.categorieslblClients = [];\n    this._externalrequest.getCategories(this.textGroup).subscribe(res => {\n      this.categoriesClients = res.data;\n      for (let c of res.data) {\n          this.categorieslblClients.push({\n            label: c.cate_desc + ' - ' + c.prod_name,\n            value: c.cate_id,\n            para_type: c.para_type\n          });\n      }\n      this.myfilterfield = { pos: \"para_type\", text: [type_cod], typetittle: title, icon: icon, style: { 'background': background, 'border-top-left-radius': '14px', 'border-top-right-radius': '14px' } };\n      $(\"#mdCategory\").modal(\"show\");\n    });\n  }\n  setPageRequest(opt) {\n    if (opt == 1) {\n      this.tagMenuRequest = 1;\n    }\n    if (opt == 2) {\n      this.tagMenuRequest = 2;\n    }\n    if (opt == 3) {\n      this.tagMenuRequest = 3;\n    }\n  }\n  activeTabs() {\n    this.tagMenuRequest = 2;\n    $('#li_associate_form_request').removeClass('active');\n    $('#li_description_request').addClass('active');\n  }\n  reloadResults() {\n    this.currentpage = 1;\n    this.reload();\n  }\n\n  exportExcel(){\n    this._externalrequest.getExcel(this.filter_excel).subscribe(res => {\n      var route = res.data;\n      if(res.message == 'OK' ){\n        this.toastr.success(\"report generated\");\n          //Usaremos un link para iniciar la descarga \n          var save = document.createElement('a');\n          save.href = route;\n          save.target = '_blank';\n          //Truco: así le damos el nombre al archivo\n          save.download = 'report_external_request';\n          var clicEvent = new MouseEvent('click', {\n            'view': window,\n            'bubbles': true,\n            'cancelable': true\n          });\n          //Simulamos un clic del usuario\n          save.dispatchEvent(clicEvent);\n           //Y liberamos recursos...\n          (window.URL || window.webkitURL).revokeObjectURL(save.href);\n\n      }else{\n        this.toastr.error(\"The document could not be generated\");\n      }\n    });\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/externalrequest/externalrequests.component.js","import { Component, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { ExternalRequestService } from \"../../services/externalrequest.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\nimport template from \"./externaltasklist.template.html\";\n\nimport { TaskViewComponent } from \"../task/task.component\";\n\n@Component({\n  selector: \"externaltasks\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  providers: [ConfirmationService],\n  declarations: [TaskViewComponent]\n})\nexport class ExternalTaskListComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    taskService: TaskService,\n    groupService: GroupService,\n    userService: UsersService,\n    productService: ProductService,\n    ProjectService: ProjectService,\n    noteService: NoteService,\n    sprintService: SprintService,\n    externalRequestService: ExternalRequestService,\n    confirmationService: ConfirmationService\n  ) {\n    this._title = title;\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._sprint = sprintService;\n    this._externalrequest = externalRequestService;\n    this.textState = \"\";\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.clientGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.task = { project: {}, attachments: [] };\n    this.seltasks = [];\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.mdT = { project: {}, comments: [] };\n    this.idtk = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.namegroup = \"MY TASKS\";\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.head = [];\n    this.mysprints = [];\n    this.tasks = [];\n    this.userslbl = [];\n    this.products = [];\n    this.states = [];\n    this.myProjects = [];\n    this.tagMenu = 1;\n    this.tagMenuNew = 1;\n    this.stTitle = \"Squadlinx\";\n    this.externaltask = [];\n    this.filter_excel = null;\n    this.filter = false;\n    this.mytask = [];\n    this.mytaskcopy = [];\n    this.users = [];\n    this.usersFilter = [];\n    this.usersFilterCopy = [];\n    this.usersExternal = [];\n    this.usersExternalCopy = [];\n    this.productsFilter = [];\n    this.productsFilterCopy = [];\n    this.projectsFilter = [];\n    this.projectsFilterCopy = [];\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : External Tasks ::.\");\n    this.isLoading = false;\n  }\n\n  ngOnInit() {}\n\n  ngAfterViewInit() {\n    this.reload();\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n    }); \n    this._user.getExternalList().subscribe(res => {\n      this.clients = [];\n      const objClientes = res.data[0];\n      for (let c of res.data) {\n        this.clients.push({ client_name: c.client_name, client_id: c.client_id, usex_dbname: c.usex_dbname });\n      }\n      this.clientGroup = objClientes.usex_dbname;\n      this.getUsersExternal(objClientes.usex_dbname);\n    });\n    this.states = [];\n    this._tasks.getStates().subscribe(data => {\n      this.states = data.data;\n    });\n    this.getProductsList();\n  \n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.projectsFilter = [];\n      this.projectsFilterCopy = [];\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      this.projectsFilter = this.myProjects;\n      this.projectsFilterCopy = this.myProjects;\n    });\n\n    this.userslbl = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      this.usersFilter = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n      this.usersFilterCopy = this.userslbl;\n    });\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprints = [];\n      this.mysprints.push({\n        label: \"Backlog\",\n        value: 0\n      });\n      for (let c of res.data) {\n        this.mysprints.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n      }\n    });\n    this.leader = 0;\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n      this.leader = data.data[0].head;\n    });\n  }\n\n  getProductsList() {\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n      this.productsFilter = this.products;\n      this.productsFilterCopy = this.products;\n    });\n  }\n\n  getUsersExternal(bd_name) {\n      this._user.getUsersExternal(bd_name).subscribe(data => {\n        if(data.data) {\n          for (let c of data.data) {\n            this.usersExternal.push({\n              label: c.completename,\n              value: c.user_id\n            });\n          }\n          this.usersExternalCopy = this.usersExternal;\n        }\n      });\n  }\n\n  getmyProjects() {\n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n    });\n  }\n\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.searchTask();\n    }\n  }\n\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n    this.searchTask();\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.searchTask();\n  }\n\n  goTo(value) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    if (value == 0) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n    } else {\n      this.currentpage = Math.round(this.itemcount / this.limitpage);\n      let mod = this.itemcount % this.limitpage;\n      if (mod > 0 && mod < 5) {\n        this.currentpage += 1;\n      }\n    }\n    this.searchTask();\n  }\n\n  reload() {\n    this.isLoading = true;\n    this.tasks = [];\n    if(this.mytask) {\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search.trim(),\n        state: this.textState,\n        client: this.textGroup,\n        clientGroup: this.clientGroup,\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\",\n        assigned: (this.mytask.assigned && this.mytask.assigned.length) ? this.mytask.assigned : [''],\n        creators: (this.mytask.creators && this.mytask.creators.length) ? this.mytask.creators : [''],\n        projects: (this.mytask.projects && this.mytask.projects.length) ? this.mytask.projects : [''],\n        products: (this.mytask.products && this.mytask.products.length) ? this.mytask.products : [''],\n        desc: this.mytask.description ? this.mytask.description : '',\n        task_ids: this.mytask.task_ids && this.mytask.task_ids.length ? this.mytask.task_ids : [''],\n        date_ini: this.mytask.date_ini ? this.mytask.date_ini : '',\n        date_end: this.mytask.date_end ? this.mytask.date_end : '',\n      };\n    }\n\n    this.filter_excel = filter;\n    this._externalrequest.getTaskList(filter).subscribe(res => {\n      this.externaltask = res.data;\n      this.isLoading = false;\n      if(this.externaltask && this.externaltask.length) {\n        this.tasks = res.data;\n        this.itemcount = res.count;\n        this.lastpage = this.itemcount / this.limitpage;\n        if (this.lastpage % 1 != 0) {\n          var countpag = 1 + parseInt(this.lastpage);\n          this.lastpage = countpag;\n        }\n        this.pages = [];\n        for (let i = 1; i <= this.lastpage; i++) { \n          this.pages.push(i);\n        }\n        if (this.pages.length == 0) {\n          this.pages = [1];\n        }\n      }\n    });\n  }\n\n  loadData() {\n    if (this.products.length == 0) {\n      this.products = [];\n      this._products.getProducts().subscribe(data => {\n        for (let c of data.data) {\n          this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      });\n    }\n    if (this.userslbl.length == 0) {\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(data => {\n        this.users = data.data;\n        for (let c of data.data) {\n          this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      });\n    }\n  }\n\n  addComment() {\n    this.notemd.task_id = this.task.task_id;\n    this._notes.putNote(note).subscribe(data => {\n      this.notemd = { note_text: \"\" };\n    });\n  }\n\n  showEditModal(idtk) {\n    // this.getmyProjects();\n      this.task = { project: {} , attachments:[]};\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._tasks.getTask(idtk.task_id).subscribe(res => {   \n          if (res.data.task_description) {\n              res.data.task_description = this.escapeHtml(res.data.task_description);\n          }\n        this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n          this.task.attachments = res.data;\n          this._tasks.getTaskFields(idtk.task_id).subscribe(res => {\n            this.task.form = res.data;\n          });\n        });\n        this.task = res.data;\n        $(\"#mdEditTask\").modal(\"show\");\n      });\n  }\n  reopenTask(database, idtk) {\n    this.confirm.confirm({\n        message: \"Do you want to Reopen this Task?\",\n        header: \"Confirmation\",\n        icon: \"fa fa-question-circle\",\n        accept: () => {\n            if (idtk) {\n                this._externalrequest.reopenTask(idtk, database, 37).subscribe(data => {\n                    if (data.data == \"OK\") {\n                        this.toastr.success(\"Task reopen successfully\");\n                        this.reload();\n                    } else {\n                        this.toastr.error(\"\");\n                    }\n                });\n            }\n        },\n        reject: () => {\n        }\n    });\n}\n  closeTask(database, idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Close this Task?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._externalrequest.setStatusTask(database, idtk, 42).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Task closed successfully\");\n              this.reload();\n            } else {\n              this.toastr.error(data.message);\n            }\n          });\n        }\n      },\n      reject: () => {}\n    });\n  }\n\n  deleteTask(database, idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to Delete this Task?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._externalrequest.setStatusTask(database, idtk, 43).subscribe(data => {\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Task deleted successfully\");\n              this.reload();\n            } else {\n              this.toastr.error(\"\");\n            }\n          });\n        }\n      },\n      reject: () => {}\n    });\n  }\n\n  selectAll() {\n    if (this.seltasks.length > 0) {\n      this.seltasks = [];\n    } else {\n      this.seltasks = [];\n      for (var t in this.tasks) {\n        this.seltasks.push(this.tasks[t].task_id);\n      }\n    }\n  }\n\n  setStateList(state) {\n    this.textState = state;\n    this.posState = \"para_status\";\n    this.currentpage = 1;\n    this.searchTask();\n  }\n  setGroupList(state, name) {\n    this.namegroup = name;\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.mytask = {};\n    this.filter = false;\n    this.getProductsByGroup();\n    this.searchTask();\n  }\n  saveTask() {\n    if (\n      (this.task.task_description2 != \"\" ||\n        this.task.task_description2 != null) &&\n      this.task.task_description == undefined\n    ) {\n      this.task.task_description = this.task.task_description2;\n    }\n    this.task.task_description = this.task.task_description\n      .split(\"\\t\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\n\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\r\")\n      .join(\"\");\n    this.task.task_delivery = new Date(this.task.task_delivery);\n    this.task.task_delivery =\n      this.task.task_delivery.getFullYear() +\n      \"-\" +\n      (this.task.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.task.task_delivery.getDate();\n    this._tasks.putTask(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Good news!\");\n      } else {\n        this.toastr.success(data.message, \"Task saved successfully\");\n      }\n      this.reload();\n      this.task = { attachments: [] };\n      this.task.task_description = \"\";\n    });\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n  \n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n  deleteAttachment(att) {\n    var pos = this.task.attachments.indexOf(att.name);\n    this.task.attachments.splice(pos, 1);\n  }\n  getAttachments(taskid) {\n    this._tasks.getAttachments(taskid).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        // text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n  validateTask() {\n    return (\n      !this.task.task_subject ||\n      this.task.task_subject.trim() == \"\" ||\n      !this.task.task_description2 ||\n      this.task.task_description2.trim() == \"\" ||\n      !this.task.prod_id ||\n      this.task.prod_id.trim() == \"\" ||\n      !this.task.user_asigned ||\n      this.task.user_asigned.trim() == \"\" ||\n      !this.task.task_delivery ||\n      this.task.task_delivery == \"\" ||\n      this.task.task_delivery == \"undefined\" ||\n      !this.task.task_points ||\n      this.task.task_points == \"\" ||\n      this.task.task_points == \"undefined\"\n    );\n  }\n\n    setPage(opt) {\n        if (opt == 1) {\n            this.tagMenu = 1;\n        }\n        if (opt == 2) {\n            this.tagMenu = 2;\n        }\n        if (opt == 3) {\n            this.tagMenu = 3;\n        }\n    }\n\n    setPageNewTask(opt) {\n        if (opt == 1) {\n            this.tagMenuNew = 1;\n        }\n        if (opt == 2) {\n            this.tagMenuNew = 2;\n        }\n    }\n    showModaltk(tkid){\n      $(\"#myTask\"+ tkid).click();\n    }\n\n    exportExcel(){\n      this._externalrequest.getExcelExternalTask(this.filter_excel).subscribe(res => {\n        var route = res.data;\n        if(res.message == 'OK' ){\n          this.toastr.success(\"report generated\");\n            //Usaremos un link para iniciar la descarga \n            var save = document.createElement('a');\n            save.href = route;\n            save.target = '_blank';\n            //Truco: así le damos el nombre al archivo\n            save.download = 'report_external_task';\n            var clicEvent = new MouseEvent('click', {\n              'view': window,\n              'bubbles': true,\n              'cancelable': true\n            });\n            //Simulamos un clic del usuario\n            save.dispatchEvent(clicEvent);\n             //Y liberamos recursos...\n            (window.URL || window.webkitURL).revokeObjectURL(save.href);\n  \n        }else{\n          this.toastr.error(\"The document could not be generated\");\n        }\n      });\n    }\n\n  showFilter() {\n    this.search = \"\";\n    if (this.externaltask.length) {\n      $(\"#mdSearchExternalTask\").modal(\"show\");\n    }\n    this.getProductsByGroup();\n  }\n\n  getProductsByGroup() {\n    if(this.textGroup) {\n      this._externalrequest.getProducts(this.textGroup).subscribe(data => {\n        this.products = [];\n        for (let c of data.data) {\n          this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n        this.productsFilter = this.products;\n        this.productsFilterCopy = this.products;\n      });\n    } else {\n      this.getProductsList();\n    }\n  }\n\n  filterMultiple(event, num) {\n    switch(num) {\n      case 1 :\n        const products = event.query;\n        this.productsFilter = this.filterInfo(products, this.productsFilterCopy);\n        break\n      case 2 :\n        const users = event.query;\n        this.usersFilter = this.filterInfo(users, this.usersFilterCopy);\n        break\n      case 3 :\n        const projects = event.query;\n        this.projectsFilter = this.filterInfo(projects, this.projectsFilterCopy);\n        break\n      case 4 :\n        const usersExternal = event.query;\n        this.usersExternal = this.filterInfo(usersExternal, this.usersExternalCopy);\n        break\n    }\n  }\n\n  filterInfo(query, countries) {\n    let filtered = [];\n    for (let i = 0; i < countries.length; i++) {\n      let country = countries[i];\n      if (country.label.toLowerCase().indexOf(query.toLowerCase()) >= 0) {\n        filtered.push(country);\n      }\n    }\n    return filtered;\n  }\n\n  filterTask() {\n    this.filter = true;\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.searchTask();\n  }\n\n  searchTask() {\n    this.mytaskcopy = jQuery.extend(true, {}, this.mytask);\n    let copy = [];\n    let copyc = [];\n\n    for (let x in this.mytask.assigned) {\n      copy.push(this.mytask.assigned[x].value);\n    }\n    this.mytask.assigned = copy;\n\n    for (let x in this.mytask.creators) {\n      copyc.push(this.mytask.creators[x].value);\n    }\n    this.mytask.creators = copyc;\n    let copyp = [];\n    for (let x in this.mytask.projects) {\n      copyp.push(this.mytask.projects[x].value);\n    }\n    this.mytask.projects = copyp;\n    let copypd = [];\n    for (let x in this.mytask.products) {\n      copypd.push(this.mytask.products[x].value);\n    }\n    this.mytask.products = copypd;\n\n    this.mytask.date_ini = this.mytask.date_ini ? this.formatDate(this.mytask.date_ini) : \"\";\n    this.mytask.date_end = this.mytask.date_end ? this.formatDate(this.mytask.date_end) : \"\";\n    this.reload();\n    this.mytask = this.mytaskcopy;\n  }\n\n  closeFilter() {\n    this.mytask = [];\n    this.mytaskcopy = [];\n    this.search = \"\";\n    this.filter = false;\n    this.reload();\n  }\n\n  formatDate(date) {\n    date = new Date(date);\n    if (date && date !== \"\") {\n      var day = date.getDate() < 10 ? \"0\" + date.getDate() : date.getDate();\n      var monthIndex = (date.getMonth() + 1) < 10 ? \"0\" + (date.getMonth() + 1) : (date.getMonth() + 1);\n      var year = date.getFullYear();\n      return year + '-' + monthIndex + '-' + day;\n    } else {\n      return '';\n    }\n  }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/externaltask/externaltasklist.component.js","import { Component, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { ExternalRequestService } from \"../../services/externalrequest.service\";\nimport { LogService } from \"../../services/log.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\nimport template from \"./loglist.template.html\";\n\nimport { TaskViewComponent } from \"../task/task.component\";\n\n@Component({\n  selector: \"loglist\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  providers: [ConfirmationService],\n  declarations: [TaskViewComponent]\n})\nexport class LogListComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    taskService: TaskService,\n    groupService: GroupService,\n    userService: UsersService,\n    productService: ProductService,\n    ProjectService: ProjectService,\n    noteService: NoteService,\n    sprintService: SprintService,\n    externalRequestService: ExternalRequestService,\n    logService: LogService,\n    confirmationService: ConfirmationService\n  ) {\n    this._title = title;\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._sprint = sprintService;\n    this._externalrequest = externalRequestService;\n    this._logs = logService;\n    this.textState = \"\";\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.task = { project: {}, attachments: [] };\n    this.seltasks = [];\n    // this.task.task_description = \"\";\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.mdT = { project: {}, comments: [] };\n    this.idtk = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.namegroup = \"ALL\";\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.head = [];\n    this.mysprints = [];\n    this.tasks = [];\n    this.logs = [];\n    this.userslbl = [];\n    this.products = [];\n    this.states = [];\n    this.myProjects = [];\n    this.tagMenu = 1;\n    this.tagMenuNew = 1;\n    this.log = [];\n    this.log.modu_label = \"\";\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Tasks ::.\");\n    this.isLoading = false;\n  }\n\n  ngOnInit() {}\n\n  ngAfterViewInit() {\n    // this.reload();\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n    });\n    this.states = [];\n    this._tasks.getStates().subscribe(data => {\n      this.states = data.data;\n    });\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n\n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n    });\n\n    this.userslbl = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprints = [];\n      this.mysprints.push({\n        label: \"Backlog\",\n        value: 0\n      });\n      for (let c of res.data) {\n        this.mysprints.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n      }\n    });\n    this.leader = 0;\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n      this.leader = data.data[0].head;\n    });\n    this._logs.getModules().subscribe(res => {\n      if(res.data.length > 0){\n        this.log.modu_id = res.data[0].modu_id;\n      }\n      this.modules = [];\n      for (let c of res.data) {\n        this.modules.push({ label: c.modu_name, value: c.modu_id });\n      }\n    });\n    \n  }\n\n  getmyProjects() {\n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n    });\n  }\n\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.reload();\n    }\n  }\n\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n    this.reload();\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.reload();\n  }\n\n  goTo(value) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    if (value == 0) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n    } else {\n      this.currentpage = Math.round(this.itemcount / this.limitpage);\n      let mod = this.itemcount % this.limitpage;\n      if (mod > 0 && mod < 5) {\n        this.currentpage += 1;\n      }\n    }\n    this.reload();\n  }\n\n  reload() {\n    this.isLoading = true;\n    let date_init = new Date(this.log.date_init);\n    date_init = this.log.date_init.getFullYear() + \"-\" + (this.log.date_init.getMonth() + 1) + \"-\" + this.log.date_init.getDate();\n    let date_end = new Date(this.log.date_end);\n    date_end= this.log.date_end.getFullYear() + \"-\" + (this.log.date_end.getMonth() + 1) + \"-\" + this.log.date_end.getDate();\n    var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search,\n        date_init: date_init,\n        date_end: date_end,\n        module: this.log.modu_id,\n        orderby: this.posOrder,\n        orderdesc: this.orderDesc ? \"desc\" : \"\"\n      };\n    this._logs.getLogs(filter).subscribe(res => {\n      this.isLoading = false;\n      this.logs = res.data.data;\n      this.itemcount = res.data.count;\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) { \n        this.pages.push(i);\n      }\n      if (this.pages.length == 0) {\n        this.pages = [1];\n      }\n\n    });\n  }\n\n  loadData() {\n    if (this.products.length == 0) {\n      this.products = [];\n      this._products.getProducts().subscribe(data => {\n        for (let c of data.data) {\n          this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      });\n    }\n    if (this.userslbl.length == 0) {\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(data => {\n        this.users = data.data;\n        for (let c of data.data) {\n          this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      });\n    }\n  }\n\n  addComment() {\n    this.notemd.task_id = this.task.task_id;\n    this._notes.putNote(note).subscribe(data => {\n      this.notemd = { note_text: \"\" };\n    });\n  }\n\n  addTask() {\n    // this.getmyProjects();\n    this.loadData();\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.task = { project: {}, attachments: [] };\n    $(\"#mdAddTask\").modal(\"show\");\n  }\n\n  showEditModal(idtk) {\n    // this.getmyProjects();\n      this.task = { project: {} , attachments:[]};\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._tasks.getTask(idtk.task_id).subscribe(res => {    \n          // if (res.data.task_description) {\n          //     res.data.task_description = this.escapeHtml(res.data.task_description);\n          // }\n        this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n          this.task.attachments = res.data;\n          this._tasks.getTaskFields(idtk.task_id).subscribe(res => {\n            this.task.form = res.data;\n          });\n        });\n        this.task = res.data;\n        $(\"#mdEditTask\").modal(\"show\");\n      });\n  }\n\n  openTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to open the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 35).subscribe(data => {\n            this.reload();\n            this.toastr.success(\"Task opened successfully\");\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 35)\n                .subscribe(data => {});\n            }\n            this.seltasks = [];\n            this.reload();\n            this.toastr.success(\"Tasks opened successfully\");\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  closeTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to close the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 42).subscribe(data => {\n            this.reload();\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Task closed successfully\");\n            } else {\n              this.toastr.warning(data.message, \"There was an error\");\n            }\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 42)\n                .subscribe(data => {\n                  if (data.data == \"OK\") {\n                    this.toastr.success(\"Tasks closed successfully\");\n                  } else {\n                    this.toastr.warning(data.message, \"There was an error\");\n                  }\n                });\n            }\n            this.seltasks = [];\n            this.reload();\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  deleteTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to delete the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 43).subscribe(data => {\n            this.reload();\n            this.toastr.success(\"Task deleted successfully\");\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 43)\n                .subscribe(data => {});\n            }\n            this.seltasks = [];\n            this.toastr.success(\"Tasks deleted successfully\");\n            this.reload();\n          }\n        }\n      },\n      reject: () => {}\n    });\n  }\n\n  selectAll() {\n    if (this.seltasks.length > 0) {\n      this.seltasks = [];\n    } else {\n      this.seltasks = [];\n      for (var t in this.tasks) {\n        this.seltasks.push(this.tasks[t].task_id);\n      }\n    }\n  }\n\n  setStateList(state) {\n    this.textState = state;\n    this.posState = \"para_status\";\n    this.currentpage = 1;\n    this.reload();\n  }\n  setGroupList(state, name) {\n    this.namegroup = name;\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.reload();\n  }\n  clearTask() {\n    this.task.task_description = \"\";\n  }\n  saveTask() {\n    if (\n      (this.task.task_description2 != \"\" ||\n        this.task.task_description2 != null) &&\n      this.task.task_description == undefined\n    ) {\n      this.task.task_description = this.task.task_description2;\n    }\n    this.task.task_description = this.task.task_description\n      .split(\"\\t\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\n\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\r\")\n      .join(\"\");\n    this.task.task_delivery = new Date(this.task.task_delivery);\n    this.task.task_delivery =\n      this.task.task_delivery.getFullYear() +\n      \"-\" +\n      (this.task.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.task.task_delivery.getDate();\n    this._tasks.putTask(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Good news!\");\n      } else {\n        this.toastr.success(data.message, \"Task saved successfully\");\n      }\n      this.reload();\n      this.task = { attachments: [] };\n      this.task.task_description = \"\";\n    });\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n  \n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n  deleteAttachment(att) {\n    var pos = this.task.attachments.indexOf(att.name);\n    this.task.attachments.splice(pos, 1);\n  }\n  getAttachments(taskid) {\n    this._tasks.getAttachments(taskid).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n  \n  updateSprint(task){\n    this.sprintselected =[];\n    if(task.spri_id != null){\n        this.sprintselected.push(task.spri_id);\n      }else{\n            this.sprintselected.push(\"0\");\n          }\n    this.taskselected = [];\n    this.taskselected.push(task.task_id);\n    $(\"#mdSprints\").modal(\"show\");\n  }\n  doneMdSprint() {\n    this.taskselected = [];\n    this.sprintselected = [];\n  }\n\n  saveChanges() {\n    let sprintselected = this.sprintselected[0];\n    let tasks = this.taskselected;\n    this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(res => {\n      if (res.data === \"OK\") {\n        this.toastr.success(\"updated successfully\");\n      } else {\n        this.toastr.warning(\"There was an error\");\n      }\n    });\n    this.reload();\n  }\n  showSelected(event, idtk) {\n    this.sprintselected = [];\n    this.sprintselected.push(idtk);\n  }\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        // text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n  validateTask() {\n    return (\n      !this.task.task_subject ||\n      this.task.task_subject.trim() == \"\" ||\n      !this.task.task_description2 ||\n      this.task.task_description2.trim() == \"\" ||\n      !this.task.prod_id ||\n      this.task.prod_id.trim() == \"\" ||\n      !this.task.user_asigned ||\n      this.task.user_asigned.trim() == \"\" ||\n      !this.task.task_delivery ||\n      this.task.task_delivery == \"\" ||\n      this.task.task_delivery == \"undefined\" ||\n      !this.task.task_points ||\n      this.task.task_points == \"\" ||\n      this.task.task_points == \"undefined\"\n    );\n  }\n\n    setPage(opt) {\n        if (opt == 1) {\n            this.tagMenu = 1;\n        }\n        if (opt == 2) {\n            this.tagMenu = 2;\n        }\n        if (opt == 3) {\n            this.tagMenu = 3;\n        }\n    }\n\n    setPageNewTask(opt) {\n        if (opt == 1) {\n            this.tagMenuNew = 1;\n        }\n        if (opt == 2) {\n            this.tagMenuNew = 2;\n        }\n    }\n    showModaltk(tkid){\n      $(\"#myTask\"+ tkid).click();\n    }\n    getLogs(){\n      this.reload();\n    }\n    resetLog(){\n\n    }\n    updateData(modu_name){\n    }\n    validateLog() {\n      return (\n        !this.log.modu_id ||\n        !this.log.date_init ||\n        this.log.date_init == \"\" ||\n        this.log.date_init == \"undefined\" ||\n        !this.log.date_end ||\n        this.log.date_end == \"\" ||\n        this.log.date_end == \"undefined\"\n      );\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/loglist/loglist.component.js","import { Component, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport { ProductService } from \"../../services/product.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { GroupService } from \"../../services/group.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { ExternalRequestService } from \"../../services/externalrequest.service\";\nimport { HeaderService } from \"../../services/header.service\";\nimport { LogService } from \"../../services/log.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe,\n  OrderPipe\n} from \"../../pipes\";\nimport template from \"./notifications.template.html\";\n\nimport { TaskViewComponent } from \"../task/task.component\";\n\n@Component({\n  selector: \"notifications\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n  providers: [ConfirmationService],\n  declarations: [TaskViewComponent]\n})\nexport class NotificationsComponent {\n  constructor(\n    title: Title,\n    route: Router,\n    sanitizer: DomSanitizer,\n    toastr: ToastrService,\n    taskService: TaskService,\n    groupService: GroupService,\n    userService: UsersService,\n    productService: ProductService,\n    ProjectService: ProjectService,\n    noteService: NoteService,\n    sprintService: SprintService,\n    externalRequestService: ExternalRequestService,\n    logService: LogService,\n    headerService: HeaderService,\n    confirmationService: ConfirmationService\n  ) {\n    this._title = title;\n    this._router = route;\n    this.toastr = toastr;\n    this.toastr.options = {\n      preventDuplicates: true,\n      preventOpenDuplicates: true\n    };\n    this._tasks = taskService;\n    this._groups = groupService;\n    this._sanitizer = sanitizer;\n    this._user = userService;\n    this._projects = ProjectService;\n    this._products = productService;\n    this._notes = noteService;\n    this.confirm = confirmationService;\n    this._sprint = sprintService;\n    this._externalrequest = externalRequestService;\n    this._header = headerService;\n    this._logs = logService;\n    this.textState = \"\";\n    this.posState = \"para_status\";\n    this.textGroup = \"\";\n    this.posGroup = \"grop_id\";\n    this.posOrder = \"\";\n    this.orderDesc = false;\n    this.search = \"\";\n    this.currentpage = 1;\n    this.pages = [1];\n    this.limitpage = 20;\n    this.itemcount = 0;\n    this.task = { project: {}, attachments: [] };\n    this.seltasks = [];\n    // this.task.task_description = \"\";\n    this.groups = [];\n    this.notemd = { note_text: \"\" };\n    this.mdT = { project: {}, comments: [] };\n    this.idtk = [];\n    this.note = { attachments: [] };\n    this.taskattch = { attachments: [] };\n    this.taskid = 0;\n    this.namegroup = \"ALL\";\n    this.sprintselected = [];\n    this.taskselected = [];\n    this.head = [];\n    this.mysprints = [];\n    this.tasks = [];\n    this.logs = [];\n    this.userslbl = [];\n    this.products = [];\n    this.states = [];\n    this.myProjects = [];\n    this.tagMenu = 1;\n    this.tagMenuNew = 1;\n    this.log = [];\n    this.notif = [];\n    this.notifications = [];\n    this.log.modu_label = \"\";\n    this.stTitle = \"Squadlinx\";\n    if(localStorage.getItem('title')){\n      this.stTitle = localStorage.getItem('title');\n    }\n    this._title.setTitle(\".:: \" + this.stTitle + \" : Tasks ::.\");\n    this.isLoading = false;\n  }\n\n  ngOnInit() {}\n\n  ngAfterViewInit() {\n   this.reload();\n    this._groups.getGroups().subscribe(data => {\n      this.groups = data.data;\n    });\n    this.states = [];\n    this._tasks.getStates().subscribe(data => {\n      this.states = data.data;\n    });\n    this._products.getProducts().subscribe(data => {\n      this.products = [];\n      for (let c of data.data) {\n        this.products.push({ label: c.prod_name, value: c.prod_id });\n      }\n    });\n\n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n    });\n\n    this.userslbl = [];\n    this._user.getCRMUsers().subscribe(data => {\n      this.users = data.data;\n      for (let c of data.data) {\n        this.userslbl.push({\n          label: c.user_lastname + \", \" + c.user_name,\n          value: c.user_id\n        });\n      }\n    });\n    this._sprint.getMySpri().subscribe(res => {\n      this.mysprints = [];\n      this.mysprints.push({\n        label: \"Backlog\",\n        value: 0\n      });\n      for (let c of res.data) {\n        this.mysprints.push({\n          label:\n            c.spri_description + \" (\" + c.spri_init + \" / \" + c.spri_end + \")\",\n          value: c.spri_id\n        });\n      }\n    });\n    this.leader = 0;\n    this._user.getMyUserData().subscribe(data => {\n      this.myuser = data.data[0].user_id;\n      this.leader = data.data[0].head;\n    });\n    this._logs.getModules().subscribe(res => {\n      if(res.data.length > 0){\n        this.log.modu_id = res.data[0].modu_id;\n      }\n      this.modules = [];\n      for (let c of res.data) {\n        this.modules.push({ label: c.modu_name, value: c.modu_id });\n      }\n    });\n    \n  }\n\n  getmyProjects() {\n    this.myProjects = [];\n    this._projects.getmyProjects().subscribe(res => {\n      this.myProjects.push({\n        label: \" Untracked\",\n        value: \"0\",\n        idcolor: \"#fff\"\n      });\n      if (res.data.planning) {\n        for (let c of res.data.planning) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.buildup) {\n        for (let c of res.data.buildup) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n      if (res.data.implementation) {\n        for (let c of res.data.implementation) {\n          this.myProjects.push({\n            label: c.proj_id + \" \" + c.proj_subject,\n            value: c.proj_id,\n            idcolor: c.idcolor\n          });\n        }\n      }\n    });\n  }\n\n  changedExtraHandler(event) {\n    if (event.keyCode == 13) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n      this.reload();\n    }\n  }\n  search() {\n    this.currentpage = 1;\n    this.limitpage = 20;\n    this.reload();\n  }\n  setOrder(value) {\n    if (this.posOrder === value) {\n      this.orderDesc = !this.orderDesc;\n    }\n    this.posOrder = value;\n    this.reload();\n  }\n\n  setCurPage(value) {\n    var cur = value == 1 ? this.currentpage + 1 : this.currentpage - 1;\n    if (cur <= 0) {\n      this.currentpage = 1;\n    } else {\n      if (\n        (cur + 1) * this.limitpage - this.limitpage + 1 <=\n        this.itemcount + this.limitpage\n      ) {\n        this.currentpage = cur;\n      }\n    }\n    this.reload();\n  }\n\n  goTo(value) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    if (value == 0) {\n      this.currentpage = 1;\n      this.limitpage = 20;\n    } else {\n      this.currentpage = Math.round(this.itemcount / this.limitpage);\n      let mod = this.itemcount % this.limitpage;\n      if (mod > 0 && mod < 5) {\n        this.currentpage += 1;\n      }\n    }\n    this.reload();\n  }\n\n  reload() {\n    this.isLoading = true;\n    if(this.notif.date_init && this.notif.date_init != \"\" && this.notif.date_init != \"undefined\" \n    && this.notif.date_end && this.notif.date_end != \"\" && this.notif.date_end != \"undefined\"){\n      let date_init = new Date(this.notif.date_init);\n      date_init = this.notif.date_init.getFullYear() + \"-\" + (this.notif.date_init.getMonth() + 1) + \"-\" + this.notif.date_init.getDate();\n      let date_end = new Date(this.notif.date_end);\n      date_end= this.notif.date_end.getFullYear() + \"-\" + (this.notif.date_end.getMonth() + 1) + \"-\" + this.notif.date_end.getDate();\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search,\n        date_init: date_init,\n        date_end: date_end\n        };\n    }else{\n      var filter = {\n        start: this.currentpage * this.limitpage - this.limitpage,\n        end: this.limitpage,\n        all: this.search,\n        date_init: \"\",\n        date_end: \"\"\n        };\n    }\n    this._header.getListx(filter).subscribe(res => {\n      this.isLoading = false;\n      this.notifications = res.data.data;\n      this.itemcount = res.data.count;\n      this.lastpage = this.itemcount / this.limitpage;\n      if (this.lastpage % 1 != 0) {\n        var countpag = 1 + parseInt(this.lastpage);\n        this.lastpage = countpag;\n      }\n      this.pages = [];\n      for (let i = 1; i <= this.lastpage; i++) { \n        this.pages.push(i);\n      }\n      if (this.pages.length == 0) {\n        this.pages = [1];\n      }\n    });\n  }\n\n  loadData() {\n    if (this.products.length == 0) {\n      this.products = [];\n      this._products.getProducts().subscribe(data => {\n        for (let c of data.data) {\n          this.products.push({ label: c.prod_name, value: c.prod_id });\n        }\n      });\n    }\n    if (this.userslbl.length == 0) {\n      this.userslbl = [];\n      this._user.getCRMUsers().subscribe(data => {\n        this.users = data.data;\n        for (let c of data.data) {\n          this.userslbl.push({\n            label: c.user_lastname + \", \" + c.user_name,\n            value: c.user_id\n          });\n        }\n      });\n    }\n  }\n\n  addComment() {\n    this.notemd.task_id = this.task.task_id;\n    this._notes.putNote(note).subscribe(data => {\n      this.notemd = { note_text: \"\" };\n    });\n  }\n\n  addTask() {\n    // this.getmyProjects();\n    this.loadData();\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.task = { project: {}, attachments: [] };\n    $(\"#mdAddTask\").modal(\"show\");\n  }\n\n  showEditModal(idtk) {\n    // this.getmyProjects();\n      this.task = { project: {} , attachments:[]};\n      $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n      this._tasks.getTask(idtk.task_id).subscribe(res => {    \n          // if (res.data.task_description) {\n          //     res.data.task_description = this.escapeHtml(res.data.task_description);\n          // }\n        this._tasks.getAttachments(idtk.task_id).subscribe(res => {\n          this.task.attachments = res.data;\n          this._tasks.getTaskFields(idtk.task_id).subscribe(res => {\n            this.task.form = res.data;\n          });\n        });\n        this.task = res.data;\n        $(\"#mdEditTask\").modal(\"show\");\n      });\n  }\n\n  openTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to open the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 35).subscribe(data => {\n            this.reload();\n            this.toastr.success(\"Task opened successfully\");\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 35)\n                .subscribe(data => {});\n            }\n            this.seltasks = [];\n            this.reload();\n            this.toastr.success(\"Tasks opened successfully\");\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  closeTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to close the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 42).subscribe(data => {\n            this.reload();\n            if (data.data == \"OK\") {\n              this.toastr.success(\"Task closed successfully\");\n            } else {\n              this.toastr.warning(data.message, \"There was an error\");\n            }\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 42)\n                .subscribe(data => {\n                  if (data.data == \"OK\") {\n                    this.toastr.success(\"Tasks closed successfully\");\n                  } else {\n                    this.toastr.warning(data.message, \"There was an error\");\n                  }\n                });\n            }\n            this.seltasks = [];\n            this.reload();\n          }\n        }\n      },\n      reject: () => {\n        //\n      }\n    });\n  }\n\n  deleteTask(idtk) {\n    $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n    this.confirm.confirm({\n      message: \"Do you want to delete the task(s)?\",\n      header: \"Confirmation\",\n      icon: \"fa fa-question-circle\",\n      accept: () => {\n        if (idtk) {\n          this._tasks.setStatusTask(idtk, 43).subscribe(data => {\n            this.reload();\n            this.toastr.success(\"Task deleted successfully\");\n          });\n        } else {\n          if (this.seltasks.length > 0) {\n            for (var x in this.seltasks) {\n              this._tasks\n                .setStatusTask(this.seltasks[x], 43)\n                .subscribe(data => {});\n            }\n            this.seltasks = [];\n            this.toastr.success(\"Tasks deleted successfully\");\n            this.reload();\n          }\n        }\n      },\n      reject: () => {}\n    });\n  }\n\n  selectAll() {\n    if (this.seltasks.length > 0) {\n      this.seltasks = [];\n    } else {\n      this.seltasks = [];\n      for (var t in this.tasks) {\n        this.seltasks.push(this.tasks[t].task_id);\n      }\n    }\n  }\n\n  setStateList(state) {\n    this.textState = state;\n    this.posState = \"para_status\";\n    this.currentpage = 1;\n    this.reload();\n  }\n  setGroupList(state, name) {\n    this.namegroup = name;\n    this.textGroup = state;\n    this.currentpage = 1;\n    this.reload();\n  }\n  clearTask() {\n    this.task.task_description = \"\";\n  }\n  saveTask() {\n    if (\n      (this.task.task_description2 != \"\" ||\n        this.task.task_description2 != null) &&\n      this.task.task_description == undefined\n    ) {\n      this.task.task_description = this.task.task_description2;\n    }\n    this.task.task_description = this.task.task_description\n      .split(\"\\t\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\n\")\n      .join(\"\");\n    this.task.task_description = this.task.task_description\n      .split(\"\\r\")\n      .join(\"\");\n    this.task.task_delivery = new Date(this.task.task_delivery);\n    this.task.task_delivery =\n      this.task.task_delivery.getFullYear() +\n      \"-\" +\n      (this.task.task_delivery.getMonth() + 1) +\n      \"-\" +\n      this.task.task_delivery.getDate();\n    this._tasks.putTask(this.task).subscribe(data => {\n      if (data.data === \"\" || data.data === \"0\") {\n        this.toastr.warning(data.message, \"Good news!\");\n      } else {\n        this.toastr.success(data.message, \"Task saved successfully\");\n      }\n      this.reload();\n      this.task = { attachments: [] };\n      this.task.task_description = \"\";\n    });\n  }\n\n  onChange(event) {\n    var files = event.srcElement.files;\n    this.task.attachments.push(files[0]);\n  }\n  \n  deleteAttachmentTask(task, att) {\n    for (var i in task.attachments) {\n      if (task.attachments[i] === att) {\n        this._tasks\n          .deleteAttachmentTask(task.task_id, task.attachments[i].taat_id)\n          .subscribe(res => {\n            if (res.data === \"\" || res.data === \"0\") {\n              this.toastr.error(res.message, \"Error!\");\n            } else {\n              this.toastr.success(\n                res.message,\n                \"Attachment deleted successfully\"\n              );\n              this.getAttachments(task.task_id);\n            }\n          });\n        task.attachments.splice(i, 1);\n        break;\n      }\n    }\n  }\n  deleteAttachment(att) {\n    var pos = this.task.attachments.indexOf(att.name);\n    this.task.attachments.splice(pos, 1);\n  }\n  getAttachments(taskid) {\n    this._tasks.getAttachments(taskid).subscribe(res => {\n      this.mdT.attachments = res.data;\n      this.task.attachments = res.data;\n      for (var i = 0; i < this.mdT.attachments.length; i++) {\n        if (i == 0) {\n          this.mdT.total_attachments = 1;\n        } else {\n          this.mdT.total_attachments++;\n        }\n      }\n      for (var i = 0; i < this.task.attachments.length; i++) {\n        if (i == 0) {\n          this.task.total_attachments = 1;\n        } else {\n          this.task.total_attachments++;\n        }\n      }\n    });\n  }\n  \n  updateSprint(task){\n    this.sprintselected =[];\n    if(task.spri_id != null){\n        this.sprintselected.push(task.spri_id);\n      }else{\n            this.sprintselected.push(\"0\");\n          }\n    this.taskselected = [];\n    this.taskselected.push(task.task_id);\n    $(\"#mdSprints\").modal(\"show\");\n  }\n  doneMdSprint() {\n    this.taskselected = [];\n    this.sprintselected = [];\n  }\n\n  saveChanges() {\n    let sprintselected = this.sprintselected[0];\n    let tasks = this.taskselected;\n    this._sprint.saveSprintTasks(sprintselected, tasks).subscribe(res => {\n      if (res.data === \"OK\") {\n        this.toastr.success(\"updated successfully\");\n      } else {\n        this.toastr.warning(\"There was an error\");\n      }\n    });\n    this.reload();\n  }\n  showSelected(event, idtk) {\n    this.sprintselected = [];\n    this.sprintselected.push(idtk);\n  }\n  escapeHtml(text) {\n    if (!text) {\n      text = \"\";\n    }\n    text += \"\";\n    text = text\n      .replace(/&amp;/g, \"&\")\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&#039;/g, \"'\");\n    var temporal = document.createElement(\"div\");\n    temporal.innerHTML = text;\n    var text = temporal.textContent || temporal.innerText || \"\";\n\n    return text;\n  }\n  sanitizeHtml(text) {\n    if (text) {\n      var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n      if (!base64test.exec(text)) {\n        // text = this.decode64(text);\n      }\n      text = this._sanitizer.bypassSecurityTrustHtml(text);\n      if (text.changingThisBreaksApplicationSecurity) {\n        text = text.changingThisBreaksApplicationSecurity;\n      }\n      return text;\n    } else {\n      return \"\";\n    }\n  }\n  validateTask() {\n    return (\n      !this.task.task_subject ||\n      this.task.task_subject.trim() == \"\" ||\n      !this.task.task_description2 ||\n      this.task.task_description2.trim() == \"\" ||\n      !this.task.prod_id ||\n      this.task.prod_id.trim() == \"\" ||\n      !this.task.user_asigned ||\n      this.task.user_asigned.trim() == \"\" ||\n      !this.task.task_delivery ||\n      this.task.task_delivery == \"\" ||\n      this.task.task_delivery == \"undefined\" ||\n      !this.task.task_points ||\n      this.task.task_points == \"\" ||\n      this.task.task_points == \"undefined\"\n    );\n  }\n\n    setPage(opt) {\n        if (opt == 1) {\n            this.tagMenu = 1;\n        }\n        if (opt == 2) {\n            this.tagMenu = 2;\n        }\n        if (opt == 3) {\n            this.tagMenu = 3;\n        }\n    }\n\n    setPageNewTask(opt) {\n        if (opt == 1) {\n            this.tagMenuNew = 1;\n        }\n        if (opt == 2) {\n            this.tagMenuNew = 2;\n        }\n    }\n    showModaltk(tkid){\n      $(\"#myTask\"+ tkid).click();\n    }\n    getNotifications(){\n      this.reload();\n    }\n    validateNotificatios() {\n      // return (\n      //   !this.notif.date_init ||\n      //   this.notif.date_init == \"\" ||\n      //   this.notif.date_init == \"undefined\" ||\n      //   !this.notif.date_end ||\n      //   this.notif.date_end == \"\" ||\n      //   this.notif.date_end == \"undefined\"\n      // );\n      return false;\n    }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/notifications/notifications.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\n\nimport { CloudService } from \"../../services/cloud.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe\n} from \"../../pipes\";\nimport template from \"./documents.template.html\";\n\n@Component({\n  selector: \"documents\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe],\n  styles: [\n    \".container-photo { position: relative; margin-top: 50px; width: 500px; height: 300px; }, .myimg { position: absolute; height: 120px; width: 120px; left: 0; }, .labelbutton { border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer; position: absolute; width: 500px; left:0; top: 180px; text-align: center; opacity: 0; transition: opacity .35s ease; }\",\n    \".labelbutton a { width: 200px; padding: 12px 48px; text-align: center; color: white; border: solid 2px white; z-index: 1; }, .container-photo:hover .labelbutton { opacity: 1; } \"\n  ]\n})\nexport class DocumentsComponent {\n  constructor(\n    route: Router,\n    toastr: ToastrService,\n    cloudService: CloudService\n  ) {\n    this._route = route;\n    this.toastr = toastr;\n    this._cloud = cloudService;\n    this.typedocuments = [];\n    this.listgroups = [];\n    this.id_tipo = 0;\n    this.editdocument = {};\n    this.attachments = [];\n    this.selecteduser = [];\n    this.documents = [];\n    this.isLoading = false;\n    this.recurso = true;\n    this.required = false;\n    this.requiredTitle = false;\n    this.document = {};\n    this.flag = false;\n    this.resourcetype = [ \n      { value: '76', label: 'URL'},\n      { value: '75', label: 'FILE'},\n    ];\n    \n    this.documentsType();\n    this.getDocuments(77);\n    this.getGroups();\n  }\n\n  ngOnInit() {}\n\n  documentsType() {\n   \n    this._cloud.documentsType().subscribe(res => {\n      this.typedocuments = res;\n    });\n  }\n  getDocuments(id) {\n    this.document.value = id\n    // this.isLoading = true;\n    this._cloud.getDocuments(id).subscribe(res => {\n      // this.isLoading = false;\n      this.documents = res;\n    });\n  }\n  getGroups() {\n    this._cloud.getGroups().subscribe(res => {\n      this.listgroups = res;\n    });\n  }\n  addDocument() {\n    this.editdocument.shared = [];\n    this.editdocument.title = \"\";\n    this.editdocument.id_type = '76';\n    this.editdocument.clou_nameUrl = \"\";\n    this.editdocument.clou_nameFile = \"\";\n    this.editdocument.clou_name = '';\n    this.editdocument.id_class = this.document.value;\n\n    $('#mdEditdocument').modal('show');\n  }\n  editDocument(document) {\n\n    this.editdocument = {};\n    \n    this._cloud.getDocument(document.id_cloud).subscribe(res => {\n      this.editdocument = res.data;\n      this.editdocument.clou_name = '';\n    });\n    $('#mdEditdocument').modal('show');\n  }\n  confirmDocument(document) {\n    this.deletedocument = document;\n    $('#mdDelete').modal('show');\n  }\n  deleteDocument(document) {\n\n    this.id_cloud = document.id_cloud;\n\n    this._cloud.deleteDocument(this.id_cloud, document.user_id).subscribe(res => {\n      if (res.data == \"OK\") {\n        this.toastr.success(\"Changes Applied\");\n        this.getDocuments(this.document.value);\n      } else if(res.data == \"Error\"){\n        this.toastr.warning(res.message);\n      }else{\n        this.toastr.error(res.message);\n      }\n    });\n   \n  }\n  saveDocuments() {\n    this.editdocument.title = this.editdocument.title.trim(); \n    this.editdocument.clou_nameUrl = this.editdocument.clou_nameUrl.trim(); \n    this.editdocument.clou_public = 1;\n    //Validations of mandatory fields in the different scenarios when it is url or a file.\n\n    if(this.editdocument.title.trim() == '') {\n      this.requiredTitle = true;\n    }else{\n      this.requiredTitle = false;\n    }\n    if(this.editdocument.id_type == \"76\" && this.editdocument.clou_nameUrl.trim() != '') {\n      this.required = false;\n    }else if(this.editdocument.id_type == \"76\" && this.editdocument.clou_nameUrl.trim() == \"\"){\n      this.required = true;\n    }else{\n       if(this.editdocument.id_type == \"75\" && this.editdocument.clou_nameFile != '') {\n        this.required = false;\n       }else if(this.editdocument.id_type == \"75\" && this.editdocument.clou_name == ''){\n        this.required = true;\n       }\n       else if(this.editdocument.id_type == \"75\" && this.editdocument.clou_nameUrl != '' && this.editdocument.clou_name == '' && this.editdocument.clou_nameFile == ''){\n        this.required = true;\n       }else{\n        this.required = false;\n       }\n    } // End validations\n\n     if(this.required === false && this.requiredTitle === false) {\n       if(this.editdocument.id_cloud) {\n         this._cloud.editDocument(this.editdocument).subscribe(res => {\n            if (res.message == \"OK\") {\n              this.toastr.success(\"Changes Applied\");\n              this.getDocuments(this.editdocument.id_class);\n            }else if(res.data == \"Error\") {\n              this.toastr.warning(res.message);\n            }else{\n              this.toastr.error(res.message);\n            }\n           $('#mdEditdocument').modal('hide');\n         });\n       }else{\n         this._cloud.insertDocument(this.editdocument).subscribe(res => {\n           if (res.message == \"OK\") {\n             this.toastr.success(\"Changes Applied\");\n             this.getDocuments(this.editdocument.id_class);\n           }else{\n             this.toastr.warning(res.message);\n           }\n           $('#mdEditdocument').modal('hide');\n         });\n       }\n     }\n\n  }\n  onChange(event) { \n    var files = event.srcElement.files;\n    this.editdocument.clou_name = files[0];\n  }\n\n  downloadDocument(id){\n    this._cloud.downloadDocument(id).subscribe(res => {\n      var route = res.data;\n      //Usaremos un link para iniciar la descarga \n      var save = document.createElement('a');\n      save.href = route;\n      save.target = '_blank'; //para abrir el elemento en otra pagina y no se ejecute en la misma.//\n      //Truco: así le damos el nombre al archivo\n      save.download = \"document\" || 'archivo.dat';\n      var clicEvent = new MouseEvent('click', {\n        'view': window,\n        'bubbles': true,\n        'cancelable': true\n      });\n      //Simulamos un clic del usuario\n      save.dispatchEvent(clicEvent);\n       //Y liberamos recursos...\n      (window.URL || window.webkitURL).revokeObjectURL(save.href);\n      // window.open(recurso, \"archivo\", \"width=100 vh, height=100 vh\")\n      \n    });\n  }\n\n  escapeHtml(text) {\n    return text\n      ? text\n          .replace(/&amp;/g, \"&\")\n          .replace(/&lt;/g, \"<\")\n          .replace(/&gt;/g, \">\")\n          .replace(/&quot;/g, '\"')\n          .replace(/&#039;/g, \"'\")\n      : \"\";\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/documents/documents.component.js","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\n\nimport { CloudService } from \"../../services/cloud.service\";\nimport {\n  TruncatePipe,\n  PaginatePipe,\n  FilterPipe,\n  FilterfieldPipe\n} from \"../../pipes\";\nimport template from \"./cloud.template.html\";\n\n@Component({\n  selector: \"cloud\",\n  template: template,\n  pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe],\n  styles: [\n    \".container-photo { position: relative; margin-top: 50px; width: 500px; height: 300px; }, .myimg { position: absolute; height: 120px; width: 120px; left: 0; }, .labelbutton { border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer; position: absolute; width: 500px; left:0; top: 180px; text-align: center; opacity: 0; transition: opacity .35s ease; }\",\n    \".labelbutton a { width: 200px; padding: 12px 48px; text-align: center; color: white; border: solid 2px white; z-index: 1; }, .container-photo:hover .labelbutton { opacity: 1; } \"\n  ]\n})\nexport class CloudComponent {\n  constructor(\n    route: Router,\n    toastr: ToastrService,\n    cloudService: CloudService\n  ) {\n    this._route = route;\n    this.toastr = toastr;\n    this._cloud = cloudService;\n    this.typedocuments = [];\n    this.listusers = [];\n    this.id_tipo = 0;\n    this.editdocument = {};\n    this.attachments = [];\n    this.selecteduser = [];\n    this.documents = [];\n    this.isLoading = false;\n    this.recurso = true;\n    this.required = false;\n    this.requiredTitle = false;\n    this.document = {};\n    this.flag = false;\n    this.resourcetype = [ \n      { value: '76', label: 'URL'},\n      { value: '75', label: 'FILE'},\n    ];\n    \n    this.documentsType();\n    this.listCloud(77);\n    this.getUsers();\n  }\n\n  ngOnInit() {}\n\n  documentsType() {\n   \n    this._cloud.documentsType().subscribe(res => {\n      this.typedocuments = res;\n    });\n  }\n  listCloud(id) {\n    this.document.value = id\n    // this.isLoading = true;\n    this._cloud.listCloud(id).subscribe(res => {\n      // this.isLoading = false;\n      this.documents = res;\n    });\n  }\n  getUsers() {\n    this._cloud.getUsers().subscribe(res => {\n      this.listusers = res;\n    });\n  }\n  addDocument() {\n    this.editdocument.shared = [];\n    this.editdocument.title = \"\";\n    this.editdocument.id_type = '76';\n    this.editdocument.clou_nameUrl = \"\";\n    this.editdocument.clou_nameFile = \"\";\n    this.editdocument.clou_name = '';\n    this.editdocument.id_class = this.document.value;\n\n    $('#mdEditdocument').modal('show');\n  }\n\n  editDocument(document) {\n\n    this.editdocument = {};\n    \n    this._cloud.getCloud(document.id_cloud).subscribe(res => {\n      this.editdocument = res;\n      this.editdocument.clou_name = '';\n    });\n    $('#mdEditdocument').modal('show');\n  }\n  confirmDocument(document) {\n    this.deletedocument = document;\n    $('#mdDelete').modal('show');\n  }\n  deleteDocument(document) {\n\n    this.id_cloud = document.id_cloud;\n\n    this._cloud.deleteDocument(this.id_cloud, document.user_id).subscribe(res => {\n      if (res.data == \"OK\") {\n        this.toastr.success(\"Changes Applied\");\n        this.listCloud(this.document.value);\n      } else if(res.data == \"Error\"){\n        this.toastr.warning(res.message);\n      }else{\n        this.toastr.error(res.message);\n      }\n    });\n   \n  }\n  saveDocuments() {\n    this.editdocument.title = this.editdocument.title.trim(); \n    this.editdocument.clou_nameUrl = this.editdocument.clou_nameUrl.trim(); \n    this.editdocument.clou_public = 0;\n    //Validations of mandatory fields in the different scenarios when it is url or a file.\n\n    if(this.editdocument.title.trim() == '') {\n      this.requiredTitle = true;\n    }else{\n      this.requiredTitle = false;\n    }\n    if(this.editdocument.id_type == \"76\" && this.editdocument.clou_nameUrl.trim() != '') {\n      this.required = false;\n    }else if(this.editdocument.id_type == \"76\" && this.editdocument.clou_nameUrl.trim() == \"\"){\n      this.required = true;\n    }else{\n       if(this.editdocument.id_type == \"75\" && this.editdocument.clou_nameFile != '') {\n        this.required = false;\n       }else if(this.editdocument.id_type == \"75\" && this.editdocument.clou_name == ''){\n        this.required = true;\n       }\n       else if(this.editdocument.id_type == \"75\" && this.editdocument.clou_nameUrl != '' && this.editdocument.clou_name == '' && this.editdocument.clou_nameFile == ''){\n        this.required = true;\n       }else{\n        this.required = false;\n       }\n    } // End validations\n\n     if(this.required === false && this.requiredTitle === false) {\n       if(this.editdocument.id_cloud) {\n         this._cloud.editCloud(this.editdocument).subscribe(res => {\n            if (res.message == \"OK\") {\n              this.toastr.success(\"Changes Applied\");\n              this.listCloud(this.editdocument.id_class);\n            }else if(res.data == \"Error\") {\n              this.toastr.warning(res.message);\n            }else{\n              this.toastr.error(res.message);\n            }\n           $('#mdEditdocument').modal('hide');\n         });\n       }else{\n         this._cloud.insertCloud(this.editdocument).subscribe(res => {\n           if (res.message == \"OK\") {\n             this.toastr.success(\"Changes Applied\");\n             this.listCloud(this.editdocument.id_class);\n           }else{\n             this.toastr.warning(res.message);\n           }\n           $('#mdEditdocument').modal('hide');\n         });\n       }\n     }\n  }\n  onChange(event) { \n    var files = event.srcElement.files;\n    this.editdocument.clou_name = files[0];\n  }\n\n  downloadDocument(id){\n    this._cloud.downloadDocument(id).subscribe(res => {\n      var route = res.data;\n      //Usaremos un link para iniciar la descarga \n      var save = document.createElement('a');\n      save.href = route;\n      save.target = '_blank'; //para abrir el elemento en otra pagina y no se ejecute en la misma.//\n      //Truco: así le damos el nombre al archivo\n      save.download = \"document\" || 'archivo.dat';\n      var clicEvent = new MouseEvent('click', {\n        'view': window,\n        'bubbles': true,\n        'cancelable': true\n      });\n      //Simulamos un clic del usuario\n      save.dispatchEvent(clicEvent);\n       //Y liberamos recursos...\n      (window.URL || window.webkitURL).revokeObjectURL(save.href);\n      // window.open(recurso, \"archivo\", \"width=100 vh, height=100 vh\")\n      \n    });\n  }\n  escapeHtml(text) {\n    return text\n      ? text\n          .replace(/&amp;/g, \"&\")\n          .replace(/&lt;/g, \"<\")\n          .replace(/&gt;/g, \">\")\n          .replace(/&quot;/g, '\"')\n          .replace(/&#039;/g, \"'\")\n      : \"\";\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/cloud/cloud.component.js","import { enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport '../assets/public/plugins/Crypt/crypt.js';\nimport { MainModule } from './main.module';\n\nenableProdMode();\nplatformBrowserDynamic().bootstrapModule(MainModule);\nif (Notification.permission !== \"granted\"){\n    Notification.requestPermission();\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/main.js","var crypt = function(){\n\t\n\tthis.encryp=function(text, pubkey){\n\t\tif(text!=''){\n\t\t\tvar encrypt = new JSEncrypt();\n\t\t\tencrypt.setPublicKey(pubkey);\n\t\t\tvar encripcion = encrypt.encrypt(text);\n\t\t\treturn encripcion;\t\n\t\t}\n\t\treturn false;\n\t}\n\tthis.decryp=function(text){\n\t\tif(text!=''){\n\t\t\tvar decrypt = new JSEncrypt();\n\t\t\tdecrypt.setPrivateKey( $(\"#pribkey\").html() );\n\t\t\tvar uncrypted = decrypt.decrypt(text);\n\t\t\treturn uncrypted;\t\n\t\t}\n\t\treturn false;\n\t}\n}\nvar crypt = new crypt();\n\n\n\n// WEBPACK FOOTER //\n// ./assets/public/plugins/Crypt/crypt.js","import { BrowserModule } from '@angular/platform-browser';\nimport { FormsModule } from '@angular/forms';\nimport { HttpModule } from '@angular/http';\nimport { RouterModule } from '@angular/router';\nimport { NgModule } from '@angular/core';\nimport { CommonModule, APP_BASE_HREF } from '@angular/common';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ToastrModule } from 'ngx-toastr';\nimport { DragDropDirectiveModule } from \"angular4-drag-drop\";\nimport { InternationalPhoneModule } from 'ng4-intl-phone';\n\nimport { CalendarModule } from 'primeng/primeng';\nimport { DropdownModule } from 'primeng/primeng';\nimport { CheckboxModule } from 'primeng/primeng';\nimport { ProgressBarModule } from 'primeng/primeng';\nimport { ScheduleModule } from 'primeng/primeng';\nimport { PaginatorModule } from 'primeng/primeng';\nimport { AutoCompleteModule } from 'primeng/primeng';\nimport { ConfirmDialogModule, ConfirmationService } from 'primeng/primeng';\nimport { RadioButtonModule } from 'primeng/primeng';\nimport { TreeModule, TreeNode } from 'primeng/primeng';\nimport { MultiSelectModule } from 'primeng/primeng';\nimport { EditorModule } from 'primeng/primeng';\nimport { ChartModule } from 'primeng/primeng';\nimport { ListboxModule } from 'primeng/primeng';\nimport { FileUploadModule } from 'primeng/primeng';\nimport { InputMaskModule } from 'primeng/inputmask';\nimport { DragDropModule } from 'primeng/dragdrop';\nimport {SpinnerModule} from 'primeng/spinner';\nimport {TooltipModule} from 'primeng/tooltip';\nimport {ChipsModule} from 'primeng/chips';\n\nimport { KeyFilterModule } from 'primeng/keyfilter';\n\nimport {PasswordModule} from 'primeng/password';\n\nimport { DndModule } from 'ng2-dnd';\nimport { RecaptchaModule } from 'ng-recaptcha';\n\nimport { HttpService } from './services/http.service';\nimport { LoginService } from './services/login.service';\nimport { HeaderService } from './services/header.service';\nimport { DashboardService } from './services/dashboard.service';\nimport { TaskService } from './services/task.service';\nimport { NoteService } from './services/note.service';\nimport { NotificationService } from './services/notification.service';\nimport { DailyService } from './services/daily.service';\nimport { DirectoryService } from './services/directory.service';\nimport { ProjectService } from './services/project.service';\nimport { ProductService } from './services/product.service';\nimport { TypeService } from './services/type.service';\nimport { RequestService } from './services/request.service';\nimport { SchedulerService } from './services/scheduler.service';\nimport { GroupService } from './services/group.service';\nimport { MailService } from './services/mail.service';\nimport { RolesService } from './services/roles.service';\nimport { TodolistService } from './services/todolist.service';\nimport { UsersService } from './services/users.service';\nimport { EventsService } from './services/events.service';\nimport { SprintService } from './services/sprint.service';\nimport { ParameterService } from './services/parameter.service';\nimport { CategoriesService } from './services/categories.service';\nimport { ConstantService } from './services/constant.service';\nimport { AppService } from './services/app.service';\nimport { WhiteboardService } from './services/whiteboard.service';\nimport { ExternalRequestService } from './services/externalrequest.service';\nimport { LogService } from './services/log.service';\nimport { UnitsService } from './services/units.service';\nimport { CloudService } from './services/cloud.service';\n\nimport {\n  AppComponent,\n  LoginComponent,\n  HeaderComponent,\n  DashboardComponent,\n  TaskboardComponent,\n  TaskComponent,\n  TaskListComponent,\n  TaskViewComponent,\n  ProjectListComponent,\n  ProjectViewComponent,\n  ProjectComponent,\n  MailboxComponent,\n  DirectoryComponent,\n  DailyComponent,\n  ContactComponent,\n  SprintsComponent,\n  SprintComponent,\n  SchedulerComponent,\n  SchedulerListComponent,\n  EventsListComponent,\n  EventsComponent,\n  RolesComponent,\n  RolComponent,\n  TodolistComponent,\n  UsersComponent,\n  UsersHistoryComponent,\n  ParameterListComponent,\n  ParametersComponent,\n  NotfoundComponent,\n  NotpermitsComponent,\n  ProductComponent,\n  ProductListComponent,\n  TypeListComponent,\n  CodeComponent,\n  WikiComponent,\n  RequestsComponent,\n  CategoriesComponent,\n  UnitsComponent,\n  ApprovalsComponent,\n  ProjectboardComponent,\n  StaticComponent,\n  BurndownComponent,\n  PasswordRecoveryComponent,\n  UserSettingsComponent,\n  RequestsSettingsComponent,\n  ClientSettingsComponent,\n  DailyBoardComponent,\n  ReportsComponent,\n  GuideburndownComponent,\n  GuideprojectboardComponent,\n  GroupListComponent,\n  MySprintComponent,\n  UserguideloginComponent,\n  WhiteboardComponent,\n  ExternalRequestsComponent,\n  ExternalTaskListComponent,\n  LogListComponent,\n  NotificationsComponent,\n  DocumentsComponent,\n  CloudComponent,\n} from './components';\nimport {\n  TrimPipe,\n  FilterPipe,\n  FilterfieldPipe,\n  FilterDataPipe,\n  CalculatePipe,\n  TruncatePipe,\n  PaginatePipe,\n  OrderPipe,\n  SafeHtmlPipe\n} from './pipes';\nimport { routes } from './routes';\n\nfunction getBaseLocation() {\n   return window.location.pathname.startsWith('/beta') ? '/beta' : '/';\n}\n\n@NgModule({\n  bootstrap: [AppComponent],\n  declarations: [\n    AppComponent,\n    LoginComponent,\n    HeaderComponent,\n    DashboardComponent,\n    TaskboardComponent,\n    TaskComponent,\n    TaskListComponent,\n    TaskViewComponent,\n    ProjectListComponent,\n    ProjectViewComponent,\n    ProjectComponent,\n    MailboxComponent,\n    DirectoryComponent,\n    DailyComponent,\n    ContactComponent,\n    SprintsComponent,\n    SprintComponent,\n    SchedulerComponent,\n    SchedulerListComponent,\n    EventsListComponent,\n    EventsComponent,\n    RolesComponent,\n    RolComponent,\n    TodolistComponent,\n    UsersComponent,\n    UsersHistoryComponent,\n    ParameterListComponent,\n    ParametersComponent,\n    CategoriesComponent,\n    UnitsComponent,\n    ApprovalsComponent,\n    ProductComponent,\n    ProductListComponent,\n    TypeListComponent,\n    CodeComponent,\n    WikiComponent,\n    RequestsComponent,\n    NotfoundComponent,\n    NotpermitsComponent,\n    ProjectboardComponent,\n    StaticComponent,\n    BurndownComponent,\n    PasswordRecoveryComponent,\n    UserSettingsComponent,\n    RequestsSettingsComponent,\n    ClientSettingsComponent,\n    DailyBoardComponent,\n    ReportsComponent,\n    GroupListComponent,\n    MySprintComponent,\n    WhiteboardComponent,\n    ExternalRequestsComponent,\n    ExternalTaskListComponent,\n    LogListComponent,\n    NotificationsComponent,\n    DocumentsComponent,\n    CloudComponent,\n    TrimPipe,\n    FilterPipe,\n    FilterfieldPipe,\n    CalculatePipe,\n    FilterDataPipe,\n    TruncatePipe,\n    PaginatePipe,\n    OrderPipe,\n    GuideburndownComponent,\n    GuideprojectboardComponent,\n    UserguideloginComponent,\n    SafeHtmlPipe,\n  ],\n  imports: [\n    BrowserModule,\n    RecaptchaModule,\n    FormsModule,\n    HttpModule,\n    //RouterModule.forRoot(routes, {enableTracing: true}),\n    RouterModule.forRoot(routes),\n    CommonModule,\n    BrowserAnimationsModule,\n    ToastrModule.forRoot(),\n    DragDropDirectiveModule,\n    CalendarModule,\n    DropdownModule,\n    CheckboxModule,\n    ProgressBarModule,\n    ScheduleModule,\n    PaginatorModule,\n    AutoCompleteModule,\n    ConfirmDialogModule,\n    RadioButtonModule,\n    TreeModule,\n    MultiSelectModule,\n    EditorModule,\n    ChartModule,\n    ListboxModule,\n    FileUploadModule,\n    InputMaskModule,\n    DndModule.forRoot(),\n    InternationalPhoneModule,\n    PasswordModule,\n    DragDropModule,\n    SpinnerModule,\n    TooltipModule,\n    ChipsModule,\n    KeyFilterModule\n  ],\n  providers: [\n    HttpService,\n    LoginService,\n    HeaderService,\n    DashboardService,\n    TaskService,\n    RequestService,\n    NoteService,\n    NotificationService,\n    DailyService,\n    DirectoryService,\n    ProjectService,\n    ProductService,\n    TypeService,\n    SchedulerService,\n    GroupService,\n    MailService,\n    EventsService,\n    RolesService,\n    TodolistService,\n    UsersService,\n    SprintService,\n    ConfirmationService,\n    ParameterService,\n    CategoriesService,\n    ConstantService,\n    AppService,\n    WhiteboardService,\n    ExternalRequestService,\n    LogService,\n    UnitsService,\n    CloudService,\n    { provide: APP_BASE_HREF,\n      useFactory: getBaseLocation}, { provide: 'AUTHOR' }\n  ]\n})\nexport class MainModule { }\n\n\n\n// WEBPACK FOOTER //\n// ./app/main.module.js","/**\n * @license Angular v5.2.11\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { Inject, Injectable, NgModule, NgZone, RendererFactory2, ViewEncapsulation } from '@angular/core';\nimport { BrowserModule, DOCUMENT, ɵDomRendererFactory2 } from '@angular/platform-browser';\nimport { __extends } from 'tslib';\nimport { AnimationBuilder, AnimationFactory, sequence } from '@angular/animations';\nimport { AnimationDriver, ɵAnimationEngine, ɵAnimationStyleNormalizer, ɵNoopAnimationDriver, ɵWebAnimationsDriver, ɵWebAnimationsStyleNormalizer, ɵsupportsWebAnimations } from '@angular/animations/browser';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar BrowserAnimationBuilder = /** @class */ (function (_super) {\n    __extends(BrowserAnimationBuilder, _super);\n    function BrowserAnimationBuilder(rootRenderer, doc) {\n        var _this = _super.call(this) || this;\n        _this._nextAnimationId = 0;\n        var /** @type {?} */ typeData = /** @type {?} */ ({\n            id: '0',\n            encapsulation: ViewEncapsulation.None,\n            styles: [],\n            data: { animation: [] }\n        });\n        _this._renderer = /** @type {?} */ (rootRenderer.createRenderer(doc.body, typeData));\n        return _this;\n    }\n    /**\n     * @param {?} animation\n     * @return {?}\n     */\n    BrowserAnimationBuilder.prototype.build = /**\n     * @param {?} animation\n     * @return {?}\n     */\n    function (animation) {\n        var /** @type {?} */ id = this._nextAnimationId.toString();\n        this._nextAnimationId++;\n        var /** @type {?} */ entry = Array.isArray(animation) ? sequence(animation) : animation;\n        issueAnimationCommand(this._renderer, null, id, 'register', [entry]);\n        return new BrowserAnimationFactory(id, this._renderer);\n    };\n    BrowserAnimationBuilder.decorators = [\n        { type: Injectable },\n    ];\n    /** @nocollapse */\n    BrowserAnimationBuilder.ctorParameters = function () { return [\n        { type: RendererFactory2, },\n        { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] },] },\n    ]; };\n    return BrowserAnimationBuilder;\n}(AnimationBuilder));\nvar BrowserAnimationFactory = /** @class */ (function (_super) {\n    __extends(BrowserAnimationFactory, _super);\n    function BrowserAnimationFactory(_id, _renderer) {\n        var _this = _super.call(this) || this;\n        _this._id = _id;\n        _this._renderer = _renderer;\n        return _this;\n    }\n    /**\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    BrowserAnimationFactory.prototype.create = /**\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    function (element, options) {\n        return new RendererAnimationPlayer(this._id, element, options || {}, this._renderer);\n    };\n    return BrowserAnimationFactory;\n}(AnimationFactory));\nvar RendererAnimationPlayer = /** @class */ (function () {\n    function RendererAnimationPlayer(id, element, options, _renderer) {\n        this.id = id;\n        this.element = element;\n        this._renderer = _renderer;\n        this.parentPlayer = null;\n        this._started = false;\n        this.totalTime = 0;\n        this._command('create', options);\n    }\n    /**\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype._listen = /**\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    function (eventName, callback) {\n        return this._renderer.listen(this.element, \"@@\" + this.id + \":\" + eventName, callback);\n    };\n    /**\n     * @param {?} command\n     * @param {...?} args\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype._command = /**\n     * @param {?} command\n     * @param {...?} args\n     * @return {?}\n     */\n    function (command) {\n        var args = [];\n        for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n        }\n        return issueAnimationCommand(this._renderer, this.element, this.id, command, args);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onDone = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._listen('done', fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onStart = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._listen('start', fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.onDestroy = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._listen('destroy', fn); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.init = /**\n     * @return {?}\n     */\n    function () { this._command('init'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.hasStarted = /**\n     * @return {?}\n     */\n    function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.play = /**\n     * @return {?}\n     */\n    function () {\n        this._command('play');\n        this._started = true;\n    };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.pause = /**\n     * @return {?}\n     */\n    function () { this._command('pause'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.restart = /**\n     * @return {?}\n     */\n    function () { this._command('restart'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.finish = /**\n     * @return {?}\n     */\n    function () { this._command('finish'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.destroy = /**\n     * @return {?}\n     */\n    function () { this._command('destroy'); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.reset = /**\n     * @return {?}\n     */\n    function () { this._command('reset'); };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.setPosition = /**\n     * @param {?} p\n     * @return {?}\n     */\n    function (p) { this._command('setPosition', p); };\n    /**\n     * @return {?}\n     */\n    RendererAnimationPlayer.prototype.getPosition = /**\n     * @return {?}\n     */\n    function () { return 0; };\n    return RendererAnimationPlayer;\n}());\n/**\n * @param {?} renderer\n * @param {?} element\n * @param {?} id\n * @param {?} command\n * @param {?} args\n * @return {?}\n */\nfunction issueAnimationCommand(renderer, element, id, command, args) {\n    return renderer.setProperty(element, \"@@\" + id + \":\" + command, args);\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ANIMATION_PREFIX = '@';\nvar DISABLE_ANIMATIONS_FLAG = '@.disabled';\nvar AnimationRendererFactory = /** @class */ (function () {\n    function AnimationRendererFactory(delegate, engine, _zone) {\n        this.delegate = delegate;\n        this.engine = engine;\n        this._zone = _zone;\n        this._currentId = 0;\n        this._microtaskId = 1;\n        this._animationCallbacksBuffer = [];\n        this._rendererCache = new Map();\n        this._cdRecurDepth = 0;\n        this.promise = Promise.resolve(0);\n        engine.onRemovalComplete = function (element, delegate) {\n            // Note: if an component element has a leave animation, and the component\n            // a host leave animation, the view engine will call `removeChild` for the parent\n            // component renderer as well as for the child component renderer.\n            // Therefore, we need to check if we already removed the element.\n            if (delegate && delegate.parentNode(element)) {\n                delegate.removeChild(element.parentNode, element);\n            }\n        };\n    }\n    /**\n     * @param {?} hostElement\n     * @param {?} type\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.createRenderer = /**\n     * @param {?} hostElement\n     * @param {?} type\n     * @return {?}\n     */\n    function (hostElement, type) {\n        var _this = this;\n        var /** @type {?} */ EMPTY_NAMESPACE_ID = '';\n        // cache the delegates to find out which cached delegate can\n        // be used by which cached renderer\n        var /** @type {?} */ delegate = this.delegate.createRenderer(hostElement, type);\n        if (!hostElement || !type || !type.data || !type.data['animation']) {\n            var /** @type {?} */ renderer = this._rendererCache.get(delegate);\n            if (!renderer) {\n                renderer = new BaseAnimationRenderer(EMPTY_NAMESPACE_ID, delegate, this.engine);\n                // only cache this result when the base renderer is used\n                this._rendererCache.set(delegate, renderer);\n            }\n            return renderer;\n        }\n        var /** @type {?} */ componentId = type.id;\n        var /** @type {?} */ namespaceId = type.id + '-' + this._currentId;\n        this._currentId++;\n        this.engine.register(namespaceId, hostElement);\n        var /** @type {?} */ animationTriggers = /** @type {?} */ (type.data['animation']);\n        animationTriggers.forEach(function (trigger) {\n            return _this.engine.registerTrigger(componentId, namespaceId, hostElement, trigger.name, trigger);\n        });\n        return new AnimationRenderer(this, namespaceId, delegate, this.engine);\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.begin = /**\n     * @return {?}\n     */\n    function () {\n        this._cdRecurDepth++;\n        if (this.delegate.begin) {\n            this.delegate.begin();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype._scheduleCountTask = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        // always use promise to schedule microtask instead of use Zone\n        this.promise.then(function () { _this._microtaskId++; });\n    };\n    /* @internal */\n    /**\n     * @param {?} count\n     * @param {?} fn\n     * @param {?} data\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.scheduleListenerCallback = /**\n     * @param {?} count\n     * @param {?} fn\n     * @param {?} data\n     * @return {?}\n     */\n    function (count, fn, data) {\n        var _this = this;\n        if (count >= 0 && count < this._microtaskId) {\n            this._zone.run(function () { return fn(data); });\n            return;\n        }\n        if (this._animationCallbacksBuffer.length == 0) {\n            Promise.resolve(null).then(function () {\n                _this._zone.run(function () {\n                    _this._animationCallbacksBuffer.forEach(function (tuple) {\n                        var fn = tuple[0], data = tuple[1];\n                        fn(data);\n                    });\n                    _this._animationCallbacksBuffer = [];\n                });\n            });\n        }\n        this._animationCallbacksBuffer.push([fn, data]);\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.end = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        this._cdRecurDepth--;\n        // this is to prevent animations from running twice when an inner\n        // component does CD when a parent component insted has inserted it\n        if (this._cdRecurDepth == 0) {\n            this._zone.runOutsideAngular(function () {\n                _this._scheduleCountTask();\n                _this.engine.flush(_this._microtaskId);\n            });\n        }\n        if (this.delegate.end) {\n            this.delegate.end();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationRendererFactory.prototype.whenRenderingDone = /**\n     * @return {?}\n     */\n    function () { return this.engine.whenRenderingDone(); };\n    AnimationRendererFactory.decorators = [\n        { type: Injectable },\n    ];\n    /** @nocollapse */\n    AnimationRendererFactory.ctorParameters = function () { return [\n        { type: RendererFactory2, },\n        { type: ɵAnimationEngine, },\n        { type: NgZone, },\n    ]; };\n    return AnimationRendererFactory;\n}());\nvar BaseAnimationRenderer = /** @class */ (function () {\n    function BaseAnimationRenderer(namespaceId, delegate, engine) {\n        this.namespaceId = namespaceId;\n        this.delegate = delegate;\n        this.engine = engine;\n        this.destroyNode = this.delegate.destroyNode ? function (n) { return ((delegate.destroyNode))(n); } : null;\n    }\n    Object.defineProperty(BaseAnimationRenderer.prototype, \"data\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this.delegate.data; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.destroy = /**\n     * @return {?}\n     */\n    function () {\n        this.engine.destroy(this.namespaceId, this.delegate);\n        this.delegate.destroy();\n    };\n    /**\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createElement = /**\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    function (name, namespace) {\n        return this.delegate.createElement(name, namespace);\n    };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createComment = /**\n     * @param {?} value\n     * @return {?}\n     */\n    function (value) { return this.delegate.createComment(value); };\n    /**\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.createText = /**\n     * @param {?} value\n     * @return {?}\n     */\n    function (value) { return this.delegate.createText(value); };\n    /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.appendChild = /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @return {?}\n     */\n    function (parent, newChild) {\n        this.delegate.appendChild(parent, newChild);\n        this.engine.onInsert(this.namespaceId, newChild, parent, false);\n    };\n    /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @param {?} refChild\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.insertBefore = /**\n     * @param {?} parent\n     * @param {?} newChild\n     * @param {?} refChild\n     * @return {?}\n     */\n    function (parent, newChild, refChild) {\n        this.delegate.insertBefore(parent, newChild, refChild);\n        this.engine.onInsert(this.namespaceId, newChild, parent, true);\n    };\n    /**\n     * @param {?} parent\n     * @param {?} oldChild\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeChild = /**\n     * @param {?} parent\n     * @param {?} oldChild\n     * @return {?}\n     */\n    function (parent, oldChild) {\n        this.engine.onRemove(this.namespaceId, oldChild, this.delegate);\n    };\n    /**\n     * @param {?} selectorOrNode\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.selectRootElement = /**\n     * @param {?} selectorOrNode\n     * @return {?}\n     */\n    function (selectorOrNode) { return this.delegate.selectRootElement(selectorOrNode); };\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.parentNode = /**\n     * @param {?} node\n     * @return {?}\n     */\n    function (node) { return this.delegate.parentNode(node); };\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.nextSibling = /**\n     * @param {?} node\n     * @return {?}\n     */\n    function (node) { return this.delegate.nextSibling(node); };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setAttribute = /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @param {?=} namespace\n     * @return {?}\n     */\n    function (el, name, value, namespace) {\n        this.delegate.setAttribute(el, name, value, namespace);\n    };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeAttribute = /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?=} namespace\n     * @return {?}\n     */\n    function (el, name, namespace) {\n        this.delegate.removeAttribute(el, name, namespace);\n    };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.addClass = /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    function (el, name) { this.delegate.addClass(el, name); };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeClass = /**\n     * @param {?} el\n     * @param {?} name\n     * @return {?}\n     */\n    function (el, name) { this.delegate.removeClass(el, name); };\n    /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?} value\n     * @param {?=} flags\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setStyle = /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?} value\n     * @param {?=} flags\n     * @return {?}\n     */\n    function (el, style, value, flags) {\n        this.delegate.setStyle(el, style, value, flags);\n    };\n    /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?=} flags\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.removeStyle = /**\n     * @param {?} el\n     * @param {?} style\n     * @param {?=} flags\n     * @return {?}\n     */\n    function (el, style, flags) {\n        this.delegate.removeStyle(el, style, flags);\n    };\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setProperty = /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    function (el, name, value) {\n        if (name.charAt(0) == ANIMATION_PREFIX && name == DISABLE_ANIMATIONS_FLAG) {\n            this.disableAnimations(el, !!value);\n        }\n        else {\n            this.delegate.setProperty(el, name, value);\n        }\n    };\n    /**\n     * @param {?} node\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.setValue = /**\n     * @param {?} node\n     * @param {?} value\n     * @return {?}\n     */\n    function (node, value) { this.delegate.setValue(node, value); };\n    /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.listen = /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    function (target, eventName, callback) {\n        return this.delegate.listen(target, eventName, callback);\n    };\n    /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    BaseAnimationRenderer.prototype.disableAnimations = /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    function (element, value) {\n        this.engine.disableAnimations(element, value);\n    };\n    return BaseAnimationRenderer;\n}());\nvar AnimationRenderer = /** @class */ (function (_super) {\n    __extends(AnimationRenderer, _super);\n    function AnimationRenderer(factory, namespaceId, delegate, engine) {\n        var _this = _super.call(this, namespaceId, delegate, engine) || this;\n        _this.factory = factory;\n        _this.namespaceId = namespaceId;\n        return _this;\n    }\n    /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    AnimationRenderer.prototype.setProperty = /**\n     * @param {?} el\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    function (el, name, value) {\n        if (name.charAt(0) == ANIMATION_PREFIX) {\n            if (name.charAt(1) == '.' && name == DISABLE_ANIMATIONS_FLAG) {\n                value = value === undefined ? true : !!value;\n                this.disableAnimations(el, /** @type {?} */ (value));\n            }\n            else {\n                this.engine.process(this.namespaceId, el, name.substr(1), value);\n            }\n        }\n        else {\n            this.delegate.setProperty(el, name, value);\n        }\n    };\n    /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    AnimationRenderer.prototype.listen = /**\n     * @param {?} target\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    function (target, eventName, callback) {\n        var _this = this;\n        if (eventName.charAt(0) == ANIMATION_PREFIX) {\n            var /** @type {?} */ element = resolveElementFromTarget(target);\n            var /** @type {?} */ name_1 = eventName.substr(1);\n            var /** @type {?} */ phase = '';\n            // @listener.phase is for trigger animation callbacks\n            // @@listener is for animation builder callbacks\n            if (name_1.charAt(0) != ANIMATION_PREFIX) {\n                _a = parseTriggerCallbackName(name_1), name_1 = _a[0], phase = _a[1];\n            }\n            return this.engine.listen(this.namespaceId, element, name_1, phase, function (event) {\n                var /** @type {?} */ countId = (/** @type {?} */ (event))['_data'] || -1;\n                _this.factory.scheduleListenerCallback(countId, callback, event);\n            });\n        }\n        return this.delegate.listen(target, eventName, callback);\n        var _a;\n    };\n    return AnimationRenderer;\n}(BaseAnimationRenderer));\n/**\n * @param {?} target\n * @return {?}\n */\nfunction resolveElementFromTarget(target) {\n    switch (target) {\n        case 'body':\n            return document.body;\n        case 'document':\n            return document;\n        case 'window':\n            return window;\n        default:\n            return target;\n    }\n}\n/**\n * @param {?} triggerName\n * @return {?}\n */\nfunction parseTriggerCallbackName(triggerName) {\n    var /** @type {?} */ dotIndex = triggerName.indexOf('.');\n    var /** @type {?} */ trigger = triggerName.substring(0, dotIndex);\n    var /** @type {?} */ phase = triggerName.substr(dotIndex + 1);\n    return [trigger, phase];\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar InjectableAnimationEngine = /** @class */ (function (_super) {\n    __extends(InjectableAnimationEngine, _super);\n    function InjectableAnimationEngine(driver, normalizer) {\n        return _super.call(this, driver, normalizer) || this;\n    }\n    InjectableAnimationEngine.decorators = [\n        { type: Injectable },\n    ];\n    /** @nocollapse */\n    InjectableAnimationEngine.ctorParameters = function () { return [\n        { type: AnimationDriver, },\n        { type: ɵAnimationStyleNormalizer, },\n    ]; };\n    return InjectableAnimationEngine;\n}(ɵAnimationEngine));\n/**\n * @return {?}\n */\nfunction instantiateSupportedAnimationDriver() {\n    if (ɵsupportsWebAnimations()) {\n        return new ɵWebAnimationsDriver();\n    }\n    return new ɵNoopAnimationDriver();\n}\n/**\n * @return {?}\n */\nfunction instantiateDefaultStyleNormalizer() {\n    return new ɵWebAnimationsStyleNormalizer();\n}\n/**\n * @param {?} renderer\n * @param {?} engine\n * @param {?} zone\n * @return {?}\n */\nfunction instantiateRendererFactory(renderer, engine, zone) {\n    return new AnimationRendererFactory(renderer, engine, zone);\n}\nvar SHARED_ANIMATION_PROVIDERS = [\n    { provide: AnimationBuilder, useClass: BrowserAnimationBuilder },\n    { provide: ɵAnimationStyleNormalizer, useFactory: instantiateDefaultStyleNormalizer },\n    { provide: ɵAnimationEngine, useClass: InjectableAnimationEngine }, {\n        provide: RendererFactory2,\n        useFactory: instantiateRendererFactory,\n        deps: [ɵDomRendererFactory2, ɵAnimationEngine, NgZone]\n    }\n];\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserModule.\n */\nvar BROWSER_ANIMATIONS_PROVIDERS = [\n    { provide: AnimationDriver, useFactory: instantiateSupportedAnimationDriver }\n].concat(SHARED_ANIMATION_PROVIDERS);\n/**\n * Separate providers from the actual module so that we can do a local modification in Google3 to\n * include them in the BrowserTestingModule.\n */\nvar BROWSER_NOOP_ANIMATIONS_PROVIDERS = [{ provide: AnimationDriver, useClass: ɵNoopAnimationDriver }].concat(SHARED_ANIMATION_PROVIDERS);\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * \\@experimental Animation support is experimental.\n */\nvar BrowserAnimationsModule = /** @class */ (function () {\n    function BrowserAnimationsModule() {\n    }\n    BrowserAnimationsModule.decorators = [\n        { type: NgModule, args: [{\n                    exports: [BrowserModule],\n                    providers: BROWSER_ANIMATIONS_PROVIDERS,\n                },] },\n    ];\n    /** @nocollapse */\n    BrowserAnimationsModule.ctorParameters = function () { return []; };\n    return BrowserAnimationsModule;\n}());\n/**\n * \\@experimental Animation support is experimental.\n */\nvar NoopAnimationsModule = /** @class */ (function () {\n    function NoopAnimationsModule() {\n    }\n    NoopAnimationsModule.decorators = [\n        { type: NgModule, args: [{\n                    exports: [BrowserModule],\n                    providers: BROWSER_NOOP_ANIMATIONS_PROVIDERS,\n                },] },\n    ];\n    /** @nocollapse */\n    NoopAnimationsModule.ctorParameters = function () { return []; };\n    return NoopAnimationsModule;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { BrowserAnimationsModule, NoopAnimationsModule, BrowserAnimationBuilder as ɵBrowserAnimationBuilder, BrowserAnimationFactory as ɵBrowserAnimationFactory, AnimationRenderer as ɵAnimationRenderer, AnimationRendererFactory as ɵAnimationRendererFactory, BaseAnimationRenderer as ɵa, BROWSER_ANIMATIONS_PROVIDERS as ɵf, BROWSER_NOOP_ANIMATIONS_PROVIDERS as ɵg, InjectableAnimationEngine as ɵb, instantiateDefaultStyleNormalizer as ɵd, instantiateRendererFactory as ɵe, instantiateSupportedAnimationDriver as ɵc };\n//# sourceMappingURL=animations.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/@angular/platform-browser/esm5/animations.js\n// module id = 447\n// module chunks = 0","/**\n * @license Angular v5.2.11\n * (c) 2010-2018 Google, Inc. https://angular.io/\n * License: MIT\n */\nimport { AUTO_STYLE, NoopAnimationPlayer, sequence, style, ɵAnimationGroupPlayer, ɵPRE_STYLE } from '@angular/animations';\nimport { __assign, __extends } from 'tslib';\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @param {?} players\n * @return {?}\n */\nfunction optimizeGroupPlayer(players) {\n    switch (players.length) {\n        case 0:\n            return new NoopAnimationPlayer();\n        case 1:\n            return players[0];\n        default:\n            return new ɵAnimationGroupPlayer(players);\n    }\n}\n/**\n * @param {?} driver\n * @param {?} normalizer\n * @param {?} element\n * @param {?} keyframes\n * @param {?=} preStyles\n * @param {?=} postStyles\n * @return {?}\n */\nfunction normalizeKeyframes(driver, normalizer, element, keyframes, preStyles, postStyles) {\n    if (preStyles === void 0) { preStyles = {}; }\n    if (postStyles === void 0) { postStyles = {}; }\n    var /** @type {?} */ errors = [];\n    var /** @type {?} */ normalizedKeyframes = [];\n    var /** @type {?} */ previousOffset = -1;\n    var /** @type {?} */ previousKeyframe = null;\n    keyframes.forEach(function (kf) {\n        var /** @type {?} */ offset = /** @type {?} */ (kf['offset']);\n        var /** @type {?} */ isSameOffset = offset == previousOffset;\n        var /** @type {?} */ normalizedKeyframe = (isSameOffset && previousKeyframe) || {};\n        Object.keys(kf).forEach(function (prop) {\n            var /** @type {?} */ normalizedProp = prop;\n            var /** @type {?} */ normalizedValue = kf[prop];\n            if (prop !== 'offset') {\n                normalizedProp = normalizer.normalizePropertyName(normalizedProp, errors);\n                switch (normalizedValue) {\n                    case ɵPRE_STYLE:\n                        normalizedValue = preStyles[prop];\n                        break;\n                    case AUTO_STYLE:\n                        normalizedValue = postStyles[prop];\n                        break;\n                    default:\n                        normalizedValue =\n                            normalizer.normalizeStyleValue(prop, normalizedProp, normalizedValue, errors);\n                        break;\n                }\n            }\n            normalizedKeyframe[normalizedProp] = normalizedValue;\n        });\n        if (!isSameOffset) {\n            normalizedKeyframes.push(normalizedKeyframe);\n        }\n        previousKeyframe = normalizedKeyframe;\n        previousOffset = offset;\n    });\n    if (errors.length) {\n        var /** @type {?} */ LINE_START = '\\n - ';\n        throw new Error(\"Unable to animate due to the following errors:\" + LINE_START + errors.join(LINE_START));\n    }\n    return normalizedKeyframes;\n}\n/**\n * @param {?} player\n * @param {?} eventName\n * @param {?} event\n * @param {?} callback\n * @return {?}\n */\nfunction listenOnPlayer(player, eventName, event, callback) {\n    switch (eventName) {\n        case 'start':\n            player.onStart(function () { return callback(event && copyAnimationEvent(event, 'start', player.totalTime)); });\n            break;\n        case 'done':\n            player.onDone(function () { return callback(event && copyAnimationEvent(event, 'done', player.totalTime)); });\n            break;\n        case 'destroy':\n            player.onDestroy(function () { return callback(event && copyAnimationEvent(event, 'destroy', player.totalTime)); });\n            break;\n    }\n}\n/**\n * @param {?} e\n * @param {?=} phaseName\n * @param {?=} totalTime\n * @return {?}\n */\nfunction copyAnimationEvent(e, phaseName, totalTime) {\n    var /** @type {?} */ event = makeAnimationEvent(e.element, e.triggerName, e.fromState, e.toState, phaseName || e.phaseName, totalTime == undefined ? e.totalTime : totalTime);\n    var /** @type {?} */ data = (/** @type {?} */ (e))['_data'];\n    if (data != null) {\n        (/** @type {?} */ (event))['_data'] = data;\n    }\n    return event;\n}\n/**\n * @param {?} element\n * @param {?} triggerName\n * @param {?} fromState\n * @param {?} toState\n * @param {?=} phaseName\n * @param {?=} totalTime\n * @return {?}\n */\nfunction makeAnimationEvent(element, triggerName, fromState, toState, phaseName, totalTime) {\n    if (phaseName === void 0) { phaseName = ''; }\n    if (totalTime === void 0) { totalTime = 0; }\n    return { element: element, triggerName: triggerName, fromState: fromState, toState: toState, phaseName: phaseName, totalTime: totalTime };\n}\n/**\n * @param {?} map\n * @param {?} key\n * @param {?} defaultValue\n * @return {?}\n */\nfunction getOrSetAsInMap(map, key, defaultValue) {\n    var /** @type {?} */ value;\n    if (map instanceof Map) {\n        value = map.get(key);\n        if (!value) {\n            map.set(key, value = defaultValue);\n        }\n    }\n    else {\n        value = map[key];\n        if (!value) {\n            value = map[key] = defaultValue;\n        }\n    }\n    return value;\n}\n/**\n * @param {?} command\n * @return {?}\n */\nfunction parseTimelineCommand(command) {\n    var /** @type {?} */ separatorPos = command.indexOf(':');\n    var /** @type {?} */ id = command.substring(1, separatorPos);\n    var /** @type {?} */ action = command.substr(separatorPos + 1);\n    return [id, action];\n}\nvar _contains = function (elm1, elm2) { return false; };\nvar _matches = function (element, selector) {\n    return false;\n};\nvar _query = function (element, selector, multi) {\n    return [];\n};\nif (typeof Element != 'undefined') {\n    // this is well supported in all browsers\n    _contains = function (elm1, elm2) { return /** @type {?} */ (elm1.contains(elm2)); };\n    if (Element.prototype.matches) {\n        _matches = function (element, selector) { return element.matches(selector); };\n    }\n    else {\n        var /** @type {?} */ proto = /** @type {?} */ (Element.prototype);\n        var /** @type {?} */ fn_1 = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector ||\n            proto.oMatchesSelector || proto.webkitMatchesSelector;\n        if (fn_1) {\n            _matches = function (element, selector) { return fn_1.apply(element, [selector]); };\n        }\n    }\n    _query = function (element, selector, multi) {\n        var /** @type {?} */ results = [];\n        if (multi) {\n            results.push.apply(results, element.querySelectorAll(selector));\n        }\n        else {\n            var /** @type {?} */ elm = element.querySelector(selector);\n            if (elm) {\n                results.push(elm);\n            }\n        }\n        return results;\n    };\n}\n/**\n * @param {?} prop\n * @return {?}\n */\nfunction containsVendorPrefix(prop) {\n    // Webkit is the only real popular vendor prefix nowadays\n    // cc: http://shouldiprefix.com/\n    return prop.substring(1, 6) == 'ebkit'; // webkit or Webkit\n}\nvar _CACHED_BODY = null;\nvar _IS_WEBKIT = false;\n/**\n * @param {?} prop\n * @return {?}\n */\nfunction validateStyleProperty(prop) {\n    if (!_CACHED_BODY) {\n        _CACHED_BODY = getBodyNode() || {};\n        _IS_WEBKIT = /** @type {?} */ ((_CACHED_BODY)).style ? ('WebkitAppearance' in /** @type {?} */ ((_CACHED_BODY)).style) : false;\n    }\n    var /** @type {?} */ result = true;\n    if (/** @type {?} */ ((_CACHED_BODY)).style && !containsVendorPrefix(prop)) {\n        result = prop in /** @type {?} */ ((_CACHED_BODY)).style;\n        if (!result && _IS_WEBKIT) {\n            var /** @type {?} */ camelProp = 'Webkit' + prop.charAt(0).toUpperCase() + prop.substr(1);\n            result = camelProp in /** @type {?} */ ((_CACHED_BODY)).style;\n        }\n    }\n    return result;\n}\n/**\n * @return {?}\n */\nfunction getBodyNode() {\n    if (typeof document != 'undefined') {\n        return document.body;\n    }\n    return null;\n}\nvar matchesElement = _matches;\nvar containsElement = _contains;\nvar invokeQuery = _query;\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * \\@experimental\n */\nvar NoopAnimationDriver = /** @class */ (function () {\n    function NoopAnimationDriver() {\n    }\n    /**\n     * @param {?} prop\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.validateStyleProperty = /**\n     * @param {?} prop\n     * @return {?}\n     */\n    function (prop) { return validateStyleProperty(prop); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.matchesElement = /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    function (element, selector) {\n        return matchesElement(element, selector);\n    };\n    /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.containsElement = /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    function (elm1, elm2) { return containsElement(elm1, elm2); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.query = /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    function (element, selector, multi) {\n        return invokeQuery(element, selector, multi);\n    };\n    /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.computeStyle = /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    function (element, prop, defaultValue) {\n        return defaultValue || '';\n    };\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    NoopAnimationDriver.prototype.animate = /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    function (element, keyframes, duration, delay, easing, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        return new NoopAnimationPlayer();\n    };\n    return NoopAnimationDriver;\n}());\n/**\n * \\@experimental\n * @abstract\n */\nvar AnimationDriver = /** @class */ (function () {\n    function AnimationDriver() {\n    }\n    AnimationDriver.NOOP = new NoopAnimationDriver();\n    return AnimationDriver;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ONE_SECOND = 1000;\nvar SUBSTITUTION_EXPR_START = '{{';\nvar SUBSTITUTION_EXPR_END = '}}';\nvar ENTER_CLASSNAME = 'ng-enter';\nvar LEAVE_CLASSNAME = 'ng-leave';\n\n\nvar NG_TRIGGER_CLASSNAME = 'ng-trigger';\nvar NG_TRIGGER_SELECTOR = '.ng-trigger';\nvar NG_ANIMATING_CLASSNAME = 'ng-animating';\nvar NG_ANIMATING_SELECTOR = '.ng-animating';\n/**\n * @param {?} value\n * @return {?}\n */\nfunction resolveTimingValue(value) {\n    if (typeof value == 'number')\n        return value;\n    var /** @type {?} */ matches = (/** @type {?} */ (value)).match(/^(-?[\\.\\d]+)(m?s)/);\n    if (!matches || matches.length < 2)\n        return 0;\n    return _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n}\n/**\n * @param {?} value\n * @param {?} unit\n * @return {?}\n */\nfunction _convertTimeValueToMS(value, unit) {\n    switch (unit) {\n        case 's':\n            return value * ONE_SECOND;\n        default:\n            // ms or something else\n            return value;\n    }\n}\n/**\n * @param {?} timings\n * @param {?} errors\n * @param {?=} allowNegativeValues\n * @return {?}\n */\nfunction resolveTiming(timings, errors, allowNegativeValues) {\n    return timings.hasOwnProperty('duration') ? /** @type {?} */ (timings) :\n        parseTimeExpression(/** @type {?} */ (timings), errors, allowNegativeValues);\n}\n/**\n * @param {?} exp\n * @param {?} errors\n * @param {?=} allowNegativeValues\n * @return {?}\n */\nfunction parseTimeExpression(exp, errors, allowNegativeValues) {\n    var /** @type {?} */ regex = /^(-?[\\.\\d]+)(m?s)(?:\\s+(-?[\\.\\d]+)(m?s))?(?:\\s+([-a-z]+(?:\\(.+?\\))?))?$/i;\n    var /** @type {?} */ duration;\n    var /** @type {?} */ delay = 0;\n    var /** @type {?} */ easing = '';\n    if (typeof exp === 'string') {\n        var /** @type {?} */ matches = exp.match(regex);\n        if (matches === null) {\n            errors.push(\"The provided timing value \\\"\" + exp + \"\\\" is invalid.\");\n            return { duration: 0, delay: 0, easing: '' };\n        }\n        duration = _convertTimeValueToMS(parseFloat(matches[1]), matches[2]);\n        var /** @type {?} */ delayMatch = matches[3];\n        if (delayMatch != null) {\n            delay = _convertTimeValueToMS(Math.floor(parseFloat(delayMatch)), matches[4]);\n        }\n        var /** @type {?} */ easingVal = matches[5];\n        if (easingVal) {\n            easing = easingVal;\n        }\n    }\n    else {\n        duration = /** @type {?} */ (exp);\n    }\n    if (!allowNegativeValues) {\n        var /** @type {?} */ containsErrors = false;\n        var /** @type {?} */ startIndex = errors.length;\n        if (duration < 0) {\n            errors.push(\"Duration values below 0 are not allowed for this animation step.\");\n            containsErrors = true;\n        }\n        if (delay < 0) {\n            errors.push(\"Delay values below 0 are not allowed for this animation step.\");\n            containsErrors = true;\n        }\n        if (containsErrors) {\n            errors.splice(startIndex, 0, \"The provided timing value \\\"\" + exp + \"\\\" is invalid.\");\n        }\n    }\n    return { duration: duration, delay: delay, easing: easing };\n}\n/**\n * @param {?} obj\n * @param {?=} destination\n * @return {?}\n */\nfunction copyObj(obj, destination) {\n    if (destination === void 0) { destination = {}; }\n    Object.keys(obj).forEach(function (prop) { destination[prop] = obj[prop]; });\n    return destination;\n}\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction normalizeStyles(styles) {\n    var /** @type {?} */ normalizedStyles = {};\n    if (Array.isArray(styles)) {\n        styles.forEach(function (data) { return copyStyles(data, false, normalizedStyles); });\n    }\n    else {\n        copyStyles(styles, false, normalizedStyles);\n    }\n    return normalizedStyles;\n}\n/**\n * @param {?} styles\n * @param {?} readPrototype\n * @param {?=} destination\n * @return {?}\n */\nfunction copyStyles(styles, readPrototype, destination) {\n    if (destination === void 0) { destination = {}; }\n    if (readPrototype) {\n        // we make use of a for-in loop so that the\n        // prototypically inherited properties are\n        // revealed from the backFill map\n        for (var /** @type {?} */ prop in styles) {\n            destination[prop] = styles[prop];\n        }\n    }\n    else {\n        copyObj(styles, destination);\n    }\n    return destination;\n}\n/**\n * @param {?} element\n * @param {?} styles\n * @return {?}\n */\nfunction setStyles(element, styles) {\n    if (element['style']) {\n        Object.keys(styles).forEach(function (prop) {\n            var /** @type {?} */ camelProp = dashCaseToCamelCase(prop);\n            element.style[camelProp] = styles[prop];\n        });\n    }\n}\n/**\n * @param {?} element\n * @param {?} styles\n * @return {?}\n */\nfunction eraseStyles(element, styles) {\n    if (element['style']) {\n        Object.keys(styles).forEach(function (prop) {\n            var /** @type {?} */ camelProp = dashCaseToCamelCase(prop);\n            element.style[camelProp] = '';\n        });\n    }\n}\n/**\n * @param {?} steps\n * @return {?}\n */\nfunction normalizeAnimationEntry(steps) {\n    if (Array.isArray(steps)) {\n        if (steps.length == 1)\n            return steps[0];\n        return sequence(steps);\n    }\n    return /** @type {?} */ (steps);\n}\n/**\n * @param {?} value\n * @param {?} options\n * @param {?} errors\n * @return {?}\n */\nfunction validateStyleParams(value, options, errors) {\n    var /** @type {?} */ params = options.params || {};\n    var /** @type {?} */ matches = extractStyleParams(value);\n    if (matches.length) {\n        matches.forEach(function (varName) {\n            if (!params.hasOwnProperty(varName)) {\n                errors.push(\"Unable to resolve the local animation param \" + varName + \" in the given list of values\");\n            }\n        });\n    }\n}\nvar PARAM_REGEX = new RegExp(SUBSTITUTION_EXPR_START + \"\\\\s*(.+?)\\\\s*\" + SUBSTITUTION_EXPR_END, 'g');\n/**\n * @param {?} value\n * @return {?}\n */\nfunction extractStyleParams(value) {\n    var /** @type {?} */ params = [];\n    if (typeof value === 'string') {\n        var /** @type {?} */ val = value.toString();\n        var /** @type {?} */ match = void 0;\n        while (match = PARAM_REGEX.exec(val)) {\n            params.push(/** @type {?} */ (match[1]));\n        }\n        PARAM_REGEX.lastIndex = 0;\n    }\n    return params;\n}\n/**\n * @param {?} value\n * @param {?} params\n * @param {?} errors\n * @return {?}\n */\nfunction interpolateParams(value, params, errors) {\n    var /** @type {?} */ original = value.toString();\n    var /** @type {?} */ str = original.replace(PARAM_REGEX, function (_, varName) {\n        var /** @type {?} */ localVal = params[varName];\n        // this means that the value was never overidden by the data passed in by the user\n        if (!params.hasOwnProperty(varName)) {\n            errors.push(\"Please provide a value for the animation param \" + varName);\n            localVal = '';\n        }\n        return localVal.toString();\n    });\n    // we do this to assert that numeric values stay as they are\n    return str == original ? value : str;\n}\n/**\n * @param {?} iterator\n * @return {?}\n */\nfunction iteratorToArray(iterator) {\n    var /** @type {?} */ arr = [];\n    var /** @type {?} */ item = iterator.next();\n    while (!item.done) {\n        arr.push(item.value);\n        item = iterator.next();\n    }\n    return arr;\n}\n/**\n * @param {?} source\n * @param {?} destination\n * @return {?}\n */\n\nvar DASH_CASE_REGEXP = /-+([a-z0-9])/g;\n/**\n * @param {?} input\n * @return {?}\n */\nfunction dashCaseToCamelCase(input) {\n    return input.replace(DASH_CASE_REGEXP, function () {\n        var m = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            m[_i] = arguments[_i];\n        }\n        return m[1].toUpperCase();\n    });\n}\n/**\n * @param {?} duration\n * @param {?} delay\n * @return {?}\n */\nfunction allowPreviousPlayerStylesMerge(duration, delay) {\n    return duration === 0 || delay === 0;\n}\n/**\n * @param {?} visitor\n * @param {?} node\n * @param {?} context\n * @return {?}\n */\nfunction visitDslNode(visitor, node, context) {\n    switch (node.type) {\n        case 7 /* Trigger */:\n            return visitor.visitTrigger(node, context);\n        case 0 /* State */:\n            return visitor.visitState(node, context);\n        case 1 /* Transition */:\n            return visitor.visitTransition(node, context);\n        case 2 /* Sequence */:\n            return visitor.visitSequence(node, context);\n        case 3 /* Group */:\n            return visitor.visitGroup(node, context);\n        case 4 /* Animate */:\n            return visitor.visitAnimate(node, context);\n        case 5 /* Keyframes */:\n            return visitor.visitKeyframes(node, context);\n        case 6 /* Style */:\n            return visitor.visitStyle(node, context);\n        case 8 /* Reference */:\n            return visitor.visitReference(node, context);\n        case 9 /* AnimateChild */:\n            return visitor.visitAnimateChild(node, context);\n        case 10 /* AnimateRef */:\n            return visitor.visitAnimateRef(node, context);\n        case 11 /* Query */:\n            return visitor.visitQuery(node, context);\n        case 12 /* Stagger */:\n            return visitor.visitStagger(node, context);\n        default:\n            throw new Error(\"Unable to resolve animation metadata node #\" + node.type);\n    }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nvar ANY_STATE = '*';\n/**\n * @param {?} transitionValue\n * @param {?} errors\n * @return {?}\n */\nfunction parseTransitionExpr(transitionValue, errors) {\n    var /** @type {?} */ expressions = [];\n    if (typeof transitionValue == 'string') {\n        (/** @type {?} */ (transitionValue))\n            .split(/\\s*,\\s*/)\n            .forEach(function (str) { return parseInnerTransitionStr(str, expressions, errors); });\n    }\n    else {\n        expressions.push(/** @type {?} */ (transitionValue));\n    }\n    return expressions;\n}\n/**\n * @param {?} eventStr\n * @param {?} expressions\n * @param {?} errors\n * @return {?}\n */\nfunction parseInnerTransitionStr(eventStr, expressions, errors) {\n    if (eventStr[0] == ':') {\n        var /** @type {?} */ result = parseAnimationAlias(eventStr, errors);\n        if (typeof result == 'function') {\n            expressions.push(result);\n            return;\n        }\n        eventStr = /** @type {?} */ (result);\n    }\n    var /** @type {?} */ match = eventStr.match(/^(\\*|[-\\w]+)\\s*(<?[=-]>)\\s*(\\*|[-\\w]+)$/);\n    if (match == null || match.length < 4) {\n        errors.push(\"The provided transition expression \\\"\" + eventStr + \"\\\" is not supported\");\n        return expressions;\n    }\n    var /** @type {?} */ fromState = match[1];\n    var /** @type {?} */ separator = match[2];\n    var /** @type {?} */ toState = match[3];\n    expressions.push(makeLambdaFromStates(fromState, toState));\n    var /** @type {?} */ isFullAnyStateExpr = fromState == ANY_STATE && toState == ANY_STATE;\n    if (separator[0] == '<' && !isFullAnyStateExpr) {\n        expressions.push(makeLambdaFromStates(toState, fromState));\n    }\n}\n/**\n * @param {?} alias\n * @param {?} errors\n * @return {?}\n */\nfunction parseAnimationAlias(alias, errors) {\n    switch (alias) {\n        case ':enter':\n            return 'void => *';\n        case ':leave':\n            return '* => void';\n        case ':increment':\n            return function (fromState, toState) { return parseFloat(toState) > parseFloat(fromState); };\n        case ':decrement':\n            return function (fromState, toState) { return parseFloat(toState) < parseFloat(fromState); };\n        default:\n            errors.push(\"The transition alias value \\\"\" + alias + \"\\\" is not supported\");\n            return '* => *';\n    }\n}\n// DO NOT REFACTOR ... keep the follow set instantiations\n// with the values intact (closure compiler for some reason\n// removes follow-up lines that add the values outside of\n// the constructor...\nvar TRUE_BOOLEAN_VALUES = new Set(['true', '1']);\nvar FALSE_BOOLEAN_VALUES = new Set(['false', '0']);\n/**\n * @param {?} lhs\n * @param {?} rhs\n * @return {?}\n */\nfunction makeLambdaFromStates(lhs, rhs) {\n    var /** @type {?} */ LHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(lhs) || FALSE_BOOLEAN_VALUES.has(lhs);\n    var /** @type {?} */ RHS_MATCH_BOOLEAN = TRUE_BOOLEAN_VALUES.has(rhs) || FALSE_BOOLEAN_VALUES.has(rhs);\n    return function (fromState, toState) {\n        var /** @type {?} */ lhsMatch = lhs == ANY_STATE || lhs == fromState;\n        var /** @type {?} */ rhsMatch = rhs == ANY_STATE || rhs == toState;\n        if (!lhsMatch && LHS_MATCH_BOOLEAN && typeof fromState === 'boolean') {\n            lhsMatch = fromState ? TRUE_BOOLEAN_VALUES.has(lhs) : FALSE_BOOLEAN_VALUES.has(lhs);\n        }\n        if (!rhsMatch && RHS_MATCH_BOOLEAN && typeof toState === 'boolean') {\n            rhsMatch = toState ? TRUE_BOOLEAN_VALUES.has(rhs) : FALSE_BOOLEAN_VALUES.has(rhs);\n        }\n        return lhsMatch && rhsMatch;\n    };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar SELF_TOKEN = ':self';\nvar SELF_TOKEN_REGEX = new RegExp(\"s*\" + SELF_TOKEN + \"s*,?\", 'g');\n/**\n * @param {?} driver\n * @param {?} metadata\n * @param {?} errors\n * @return {?}\n */\nfunction buildAnimationAst(driver, metadata, errors) {\n    return new AnimationAstBuilderVisitor(driver).build(metadata, errors);\n}\nvar ROOT_SELECTOR = '';\nvar AnimationAstBuilderVisitor = /** @class */ (function () {\n    function AnimationAstBuilderVisitor(_driver) {\n        this._driver = _driver;\n    }\n    /**\n     * @param {?} metadata\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.build = /**\n     * @param {?} metadata\n     * @param {?} errors\n     * @return {?}\n     */\n    function (metadata, errors) {\n        var /** @type {?} */ context = new AnimationAstBuilderContext(errors);\n        this._resetContextStyleTimingState(context);\n        return /** @type {?} */ (visitDslNode(this, normalizeAnimationEntry(metadata), context));\n    };\n    /**\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._resetContextStyleTimingState = /**\n     * @param {?} context\n     * @return {?}\n     */\n    function (context) {\n        context.currentQuerySelector = ROOT_SELECTOR;\n        context.collectedStyles = {};\n        context.collectedStyles[ROOT_SELECTOR] = {};\n        context.currentTime = 0;\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitTrigger = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ queryCount = context.queryCount = 0;\n        var /** @type {?} */ depCount = context.depCount = 0;\n        var /** @type {?} */ states = [];\n        var /** @type {?} */ transitions = [];\n        if (metadata.name.charAt(0) == '@') {\n            context.errors.push('animation triggers cannot be prefixed with an `@` sign (e.g. trigger(\\'@foo\\', [...]))');\n        }\n        metadata.definitions.forEach(function (def) {\n            _this._resetContextStyleTimingState(context);\n            if (def.type == 0 /* State */) {\n                var /** @type {?} */ stateDef_1 = /** @type {?} */ (def);\n                var /** @type {?} */ name_1 = stateDef_1.name;\n                name_1.split(/\\s*,\\s*/).forEach(function (n) {\n                    stateDef_1.name = n;\n                    states.push(_this.visitState(stateDef_1, context));\n                });\n                stateDef_1.name = name_1;\n            }\n            else if (def.type == 1 /* Transition */) {\n                var /** @type {?} */ transition = _this.visitTransition(/** @type {?} */ (def), context);\n                queryCount += transition.queryCount;\n                depCount += transition.depCount;\n                transitions.push(transition);\n            }\n            else {\n                context.errors.push('only state() and transition() definitions can sit inside of a trigger()');\n            }\n        });\n        return {\n            type: 7 /* Trigger */,\n            name: metadata.name, states: states, transitions: transitions, queryCount: queryCount, depCount: depCount,\n            options: null\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitState = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ styleAst = this.visitStyle(metadata.styles, context);\n        var /** @type {?} */ astParams = (metadata.options && metadata.options.params) || null;\n        if (styleAst.containsDynamicStyles) {\n            var /** @type {?} */ missingSubs_1 = new Set();\n            var /** @type {?} */ params_1 = astParams || {};\n            styleAst.styles.forEach(function (value) {\n                if (isObject(value)) {\n                    var /** @type {?} */ stylesObj_1 = /** @type {?} */ (value);\n                    Object.keys(stylesObj_1).forEach(function (prop) {\n                        extractStyleParams(stylesObj_1[prop]).forEach(function (sub) {\n                            if (!params_1.hasOwnProperty(sub)) {\n                                missingSubs_1.add(sub);\n                            }\n                        });\n                    });\n                }\n            });\n            if (missingSubs_1.size) {\n                var /** @type {?} */ missingSubsArr = iteratorToArray(missingSubs_1.values());\n                context.errors.push(\"state(\\\"\" + metadata.name + \"\\\", ...) must define default values for all the following style substitutions: \" + missingSubsArr.join(', '));\n            }\n        }\n        return {\n            type: 0 /* State */,\n            name: metadata.name,\n            style: styleAst,\n            options: astParams ? { params: astParams } : null\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitTransition = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        context.queryCount = 0;\n        context.depCount = 0;\n        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n        var /** @type {?} */ matchers = parseTransitionExpr(metadata.expr, context.errors);\n        return {\n            type: 1 /* Transition */,\n            matchers: matchers,\n            animation: animation,\n            queryCount: context.queryCount,\n            depCount: context.depCount,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitSequence = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var _this = this;\n        return {\n            type: 2 /* Sequence */,\n            steps: metadata.steps.map(function (s) { return visitDslNode(_this, s, context); }),\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitGroup = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ currentTime = context.currentTime;\n        var /** @type {?} */ furthestTime = 0;\n        var /** @type {?} */ steps = metadata.steps.map(function (step) {\n            context.currentTime = currentTime;\n            var /** @type {?} */ innerAst = visitDslNode(_this, step, context);\n            furthestTime = Math.max(furthestTime, context.currentTime);\n            return innerAst;\n        });\n        context.currentTime = furthestTime;\n        return {\n            type: 3 /* Group */,\n            steps: steps,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitAnimate = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ timingAst = constructTimingAst(metadata.timings, context.errors);\n        context.currentAnimateTimings = timingAst;\n        var /** @type {?} */ styleAst;\n        var /** @type {?} */ styleMetadata = metadata.styles ? metadata.styles : style({});\n        if (styleMetadata.type == 5 /* Keyframes */) {\n            styleAst = this.visitKeyframes(/** @type {?} */ (styleMetadata), context);\n        }\n        else {\n            var /** @type {?} */ styleMetadata_1 = /** @type {?} */ (metadata.styles);\n            var /** @type {?} */ isEmpty = false;\n            if (!styleMetadata_1) {\n                isEmpty = true;\n                var /** @type {?} */ newStyleData = {};\n                if (timingAst.easing) {\n                    newStyleData['easing'] = timingAst.easing;\n                }\n                styleMetadata_1 = style(newStyleData);\n            }\n            context.currentTime += timingAst.duration + timingAst.delay;\n            var /** @type {?} */ _styleAst = this.visitStyle(styleMetadata_1, context);\n            _styleAst.isEmptyStep = isEmpty;\n            styleAst = _styleAst;\n        }\n        context.currentAnimateTimings = null;\n        return {\n            type: 4 /* Animate */,\n            timings: timingAst,\n            style: styleAst,\n            options: null\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitStyle = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ ast = this._makeStyleAst(metadata, context);\n        this._validateStyleAst(ast, context);\n        return ast;\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._makeStyleAst = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ styles = [];\n        if (Array.isArray(metadata.styles)) {\n            (/** @type {?} */ (metadata.styles)).forEach(function (styleTuple) {\n                if (typeof styleTuple == 'string') {\n                    if (styleTuple == AUTO_STYLE) {\n                        styles.push(/** @type {?} */ (styleTuple));\n                    }\n                    else {\n                        context.errors.push(\"The provided style string value \" + styleTuple + \" is not allowed.\");\n                    }\n                }\n                else {\n                    styles.push(/** @type {?} */ (styleTuple));\n                }\n            });\n        }\n        else {\n            styles.push(metadata.styles);\n        }\n        var /** @type {?} */ containsDynamicStyles = false;\n        var /** @type {?} */ collectedEasing = null;\n        styles.forEach(function (styleData) {\n            if (isObject(styleData)) {\n                var /** @type {?} */ styleMap = /** @type {?} */ (styleData);\n                var /** @type {?} */ easing = styleMap['easing'];\n                if (easing) {\n                    collectedEasing = /** @type {?} */ (easing);\n                    delete styleMap['easing'];\n                }\n                if (!containsDynamicStyles) {\n                    for (var /** @type {?} */ prop in styleMap) {\n                        var /** @type {?} */ value = styleMap[prop];\n                        if (value.toString().indexOf(SUBSTITUTION_EXPR_START) >= 0) {\n                            containsDynamicStyles = true;\n                            break;\n                        }\n                    }\n                }\n            }\n        });\n        return {\n            type: 6 /* Style */,\n            styles: styles,\n            easing: collectedEasing,\n            offset: metadata.offset, containsDynamicStyles: containsDynamicStyles,\n            options: null\n        };\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype._validateStyleAst = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ timings = context.currentAnimateTimings;\n        var /** @type {?} */ endTime = context.currentTime;\n        var /** @type {?} */ startTime = context.currentTime;\n        if (timings && startTime > 0) {\n            startTime -= timings.duration + timings.delay;\n        }\n        ast.styles.forEach(function (tuple) {\n            if (typeof tuple == 'string')\n                return;\n            Object.keys(tuple).forEach(function (prop) {\n                if (!_this._driver.validateStyleProperty(prop)) {\n                    context.errors.push(\"The provided animation property \\\"\" + prop + \"\\\" is not a supported CSS property for animations\");\n                    return;\n                }\n                var /** @type {?} */ collectedStyles = context.collectedStyles[/** @type {?} */ ((context.currentQuerySelector))];\n                var /** @type {?} */ collectedEntry = collectedStyles[prop];\n                var /** @type {?} */ updateCollectedStyle = true;\n                if (collectedEntry) {\n                    if (startTime != endTime && startTime >= collectedEntry.startTime &&\n                        endTime <= collectedEntry.endTime) {\n                        context.errors.push(\"The CSS property \\\"\" + prop + \"\\\" that exists between the times of \\\"\" + collectedEntry.startTime + \"ms\\\" and \\\"\" + collectedEntry.endTime + \"ms\\\" is also being animated in a parallel animation between the times of \\\"\" + startTime + \"ms\\\" and \\\"\" + endTime + \"ms\\\"\");\n                        updateCollectedStyle = false;\n                    }\n                    // we always choose the smaller start time value since we\n                    // want to have a record of the entire animation window where\n                    // the style property is being animated in between\n                    startTime = collectedEntry.startTime;\n                }\n                if (updateCollectedStyle) {\n                    collectedStyles[prop] = { startTime: startTime, endTime: endTime };\n                }\n                if (context.options) {\n                    validateStyleParams(tuple[prop], context.options, context.errors);\n                }\n            });\n        });\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitKeyframes = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var _this = this;\n        var /** @type {?} */ ast = { type: 5 /* Keyframes */, styles: [], options: null };\n        if (!context.currentAnimateTimings) {\n            context.errors.push(\"keyframes() must be placed inside of a call to animate()\");\n            return ast;\n        }\n        var /** @type {?} */ MAX_KEYFRAME_OFFSET = 1;\n        var /** @type {?} */ totalKeyframesWithOffsets = 0;\n        var /** @type {?} */ offsets = [];\n        var /** @type {?} */ offsetsOutOfOrder = false;\n        var /** @type {?} */ keyframesOutOfRange = false;\n        var /** @type {?} */ previousOffset = 0;\n        var /** @type {?} */ keyframes = metadata.steps.map(function (styles) {\n            var /** @type {?} */ style$$1 = _this._makeStyleAst(styles, context);\n            var /** @type {?} */ offsetVal = style$$1.offset != null ? style$$1.offset : consumeOffset(style$$1.styles);\n            var /** @type {?} */ offset = 0;\n            if (offsetVal != null) {\n                totalKeyframesWithOffsets++;\n                offset = style$$1.offset = offsetVal;\n            }\n            keyframesOutOfRange = keyframesOutOfRange || offset < 0 || offset > 1;\n            offsetsOutOfOrder = offsetsOutOfOrder || offset < previousOffset;\n            previousOffset = offset;\n            offsets.push(offset);\n            return style$$1;\n        });\n        if (keyframesOutOfRange) {\n            context.errors.push(\"Please ensure that all keyframe offsets are between 0 and 1\");\n        }\n        if (offsetsOutOfOrder) {\n            context.errors.push(\"Please ensure that all keyframe offsets are in order\");\n        }\n        var /** @type {?} */ length = metadata.steps.length;\n        var /** @type {?} */ generatedOffset = 0;\n        if (totalKeyframesWithOffsets > 0 && totalKeyframesWithOffsets < length) {\n            context.errors.push(\"Not all style() steps within the declared keyframes() contain offsets\");\n        }\n        else if (totalKeyframesWithOffsets == 0) {\n            generatedOffset = MAX_KEYFRAME_OFFSET / (length - 1);\n        }\n        var /** @type {?} */ limit = length - 1;\n        var /** @type {?} */ currentTime = context.currentTime;\n        var /** @type {?} */ currentAnimateTimings = /** @type {?} */ ((context.currentAnimateTimings));\n        var /** @type {?} */ animateDuration = currentAnimateTimings.duration;\n        keyframes.forEach(function (kf, i) {\n            var /** @type {?} */ offset = generatedOffset > 0 ? (i == limit ? 1 : (generatedOffset * i)) : offsets[i];\n            var /** @type {?} */ durationUpToThisFrame = offset * animateDuration;\n            context.currentTime = currentTime + currentAnimateTimings.delay + durationUpToThisFrame;\n            currentAnimateTimings.duration = durationUpToThisFrame;\n            _this._validateStyleAst(kf, context);\n            kf.offset = offset;\n            ast.styles.push(kf);\n        });\n        return ast;\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitReference = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        return {\n            type: 8 /* Reference */,\n            animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context),\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitAnimateChild = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        context.depCount++;\n        return {\n            type: 9 /* AnimateChild */,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitAnimateRef = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        return {\n            type: 10 /* AnimateRef */,\n            animation: this.visitReference(metadata.animation, context),\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitQuery = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        var /** @type {?} */ parentSelector = /** @type {?} */ ((context.currentQuerySelector));\n        var /** @type {?} */ options = /** @type {?} */ ((metadata.options || {}));\n        context.queryCount++;\n        context.currentQuery = metadata;\n        var _a = normalizeSelector(metadata.selector), selector = _a[0], includeSelf = _a[1];\n        context.currentQuerySelector =\n            parentSelector.length ? (parentSelector + ' ' + selector) : selector;\n        getOrSetAsInMap(context.collectedStyles, context.currentQuerySelector, {});\n        var /** @type {?} */ animation = visitDslNode(this, normalizeAnimationEntry(metadata.animation), context);\n        context.currentQuery = null;\n        context.currentQuerySelector = parentSelector;\n        return {\n            type: 11 /* Query */,\n            selector: selector,\n            limit: options.limit || 0,\n            optional: !!options.optional, includeSelf: includeSelf, animation: animation,\n            originalSelector: metadata.selector,\n            options: normalizeAnimationOptions(metadata.options)\n        };\n    };\n    /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationAstBuilderVisitor.prototype.visitStagger = /**\n     * @param {?} metadata\n     * @param {?} context\n     * @return {?}\n     */\n    function (metadata, context) {\n        if (!context.currentQuery) {\n            context.errors.push(\"stagger() can only be used inside of query()\");\n        }\n        var /** @type {?} */ timings = metadata.timings === 'full' ?\n            { duration: 0, delay: 0, easing: 'full' } :\n            resolveTiming(metadata.timings, context.errors, true);\n        return {\n            type: 12 /* Stagger */,\n            animation: visitDslNode(this, normalizeAnimationEntry(metadata.animation), context), timings: timings,\n            options: null\n        };\n    };\n    return AnimationAstBuilderVisitor;\n}());\n/**\n * @param {?} selector\n * @return {?}\n */\nfunction normalizeSelector(selector) {\n    var /** @type {?} */ hasAmpersand = selector.split(/\\s*,\\s*/).find(function (token) { return token == SELF_TOKEN; }) ? true : false;\n    if (hasAmpersand) {\n        selector = selector.replace(SELF_TOKEN_REGEX, '');\n    }\n    // the :enter and :leave selectors are filled in at runtime during timeline building\n    selector = selector.replace(/@\\*/g, NG_TRIGGER_SELECTOR)\n        .replace(/@\\w+/g, function (match) { return NG_TRIGGER_SELECTOR + '-' + match.substr(1); })\n        .replace(/:animating/g, NG_ANIMATING_SELECTOR);\n    return [selector, hasAmpersand];\n}\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction normalizeParams(obj) {\n    return obj ? copyObj(obj) : null;\n}\nvar AnimationAstBuilderContext = /** @class */ (function () {\n    function AnimationAstBuilderContext(errors) {\n        this.errors = errors;\n        this.queryCount = 0;\n        this.depCount = 0;\n        this.currentTransition = null;\n        this.currentQuery = null;\n        this.currentQuerySelector = null;\n        this.currentAnimateTimings = null;\n        this.currentTime = 0;\n        this.collectedStyles = {};\n        this.options = null;\n    }\n    return AnimationAstBuilderContext;\n}());\n/**\n * @param {?} styles\n * @return {?}\n */\nfunction consumeOffset(styles) {\n    if (typeof styles == 'string')\n        return null;\n    var /** @type {?} */ offset = null;\n    if (Array.isArray(styles)) {\n        styles.forEach(function (styleTuple) {\n            if (isObject(styleTuple) && styleTuple.hasOwnProperty('offset')) {\n                var /** @type {?} */ obj = /** @type {?} */ (styleTuple);\n                offset = parseFloat(/** @type {?} */ (obj['offset']));\n                delete obj['offset'];\n            }\n        });\n    }\n    else if (isObject(styles) && styles.hasOwnProperty('offset')) {\n        var /** @type {?} */ obj = /** @type {?} */ (styles);\n        offset = parseFloat(/** @type {?} */ (obj['offset']));\n        delete obj['offset'];\n    }\n    return offset;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction isObject(value) {\n    return !Array.isArray(value) && typeof value == 'object';\n}\n/**\n * @param {?} value\n * @param {?} errors\n * @return {?}\n */\nfunction constructTimingAst(value, errors) {\n    var /** @type {?} */ timings = null;\n    if (value.hasOwnProperty('duration')) {\n        timings = /** @type {?} */ (value);\n    }\n    else if (typeof value == 'number') {\n        var /** @type {?} */ duration = resolveTiming(/** @type {?} */ (value), errors).duration;\n        return makeTimingAst(/** @type {?} */ (duration), 0, '');\n    }\n    var /** @type {?} */ strValue = /** @type {?} */ (value);\n    var /** @type {?} */ isDynamic = strValue.split(/\\s+/).some(function (v) { return v.charAt(0) == '{' && v.charAt(1) == '{'; });\n    if (isDynamic) {\n        var /** @type {?} */ ast = /** @type {?} */ (makeTimingAst(0, 0, ''));\n        ast.dynamic = true;\n        ast.strValue = strValue;\n        return /** @type {?} */ (ast);\n    }\n    timings = timings || resolveTiming(strValue, errors);\n    return makeTimingAst(timings.duration, timings.delay, timings.easing);\n}\n/**\n * @param {?} options\n * @return {?}\n */\nfunction normalizeAnimationOptions(options) {\n    if (options) {\n        options = copyObj(options);\n        if (options['params']) {\n            options['params'] = /** @type {?} */ ((normalizeParams(options['params'])));\n        }\n    }\n    else {\n        options = {};\n    }\n    return options;\n}\n/**\n * @param {?} duration\n * @param {?} delay\n * @param {?} easing\n * @return {?}\n */\nfunction makeTimingAst(duration, delay, easing) {\n    return { duration: duration, delay: delay, easing: easing };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @record\n */\n\n/**\n * @param {?} element\n * @param {?} keyframes\n * @param {?} preStyleProps\n * @param {?} postStyleProps\n * @param {?} duration\n * @param {?} delay\n * @param {?=} easing\n * @param {?=} subTimeline\n * @return {?}\n */\nfunction createTimelineInstruction(element, keyframes, preStyleProps, postStyleProps, duration, delay, easing, subTimeline) {\n    if (easing === void 0) { easing = null; }\n    if (subTimeline === void 0) { subTimeline = false; }\n    return {\n        type: 1 /* TimelineAnimation */,\n        element: element,\n        keyframes: keyframes,\n        preStyleProps: preStyleProps,\n        postStyleProps: postStyleProps,\n        duration: duration,\n        delay: delay,\n        totalTime: duration + delay, easing: easing, subTimeline: subTimeline\n    };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ElementInstructionMap = /** @class */ (function () {\n    function ElementInstructionMap() {\n        this._map = new Map();\n    }\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.consume = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var /** @type {?} */ instructions = this._map.get(element);\n        if (instructions) {\n            this._map.delete(element);\n        }\n        else {\n            instructions = [];\n        }\n        return instructions;\n    };\n    /**\n     * @param {?} element\n     * @param {?} instructions\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.append = /**\n     * @param {?} element\n     * @param {?} instructions\n     * @return {?}\n     */\n    function (element, instructions) {\n        var /** @type {?} */ existingInstructions = this._map.get(element);\n        if (!existingInstructions) {\n            this._map.set(element, existingInstructions = []);\n        }\n        existingInstructions.push.apply(existingInstructions, instructions);\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.has = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) { return this._map.has(element); };\n    /**\n     * @return {?}\n     */\n    ElementInstructionMap.prototype.clear = /**\n     * @return {?}\n     */\n    function () { this._map.clear(); };\n    return ElementInstructionMap;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar ONE_FRAME_IN_MILLISECONDS = 1;\nvar ENTER_TOKEN = ':enter';\nvar ENTER_TOKEN_REGEX = new RegExp(ENTER_TOKEN, 'g');\nvar LEAVE_TOKEN = ':leave';\nvar LEAVE_TOKEN_REGEX = new RegExp(LEAVE_TOKEN, 'g');\n/**\n * @param {?} driver\n * @param {?} rootElement\n * @param {?} ast\n * @param {?} enterClassName\n * @param {?} leaveClassName\n * @param {?=} startingStyles\n * @param {?=} finalStyles\n * @param {?=} options\n * @param {?=} subInstructions\n * @param {?=} errors\n * @return {?}\n */\nfunction buildAnimationTimelines(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors) {\n    if (startingStyles === void 0) { startingStyles = {}; }\n    if (finalStyles === void 0) { finalStyles = {}; }\n    if (errors === void 0) { errors = []; }\n    return new AnimationTimelineBuilderVisitor().buildKeyframes(driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors);\n}\nvar AnimationTimelineBuilderVisitor = /** @class */ (function () {\n    function AnimationTimelineBuilderVisitor() {\n    }\n    /**\n     * @param {?} driver\n     * @param {?} rootElement\n     * @param {?} ast\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @param {?} startingStyles\n     * @param {?} finalStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @param {?=} errors\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.buildKeyframes = /**\n     * @param {?} driver\n     * @param {?} rootElement\n     * @param {?} ast\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @param {?} startingStyles\n     * @param {?} finalStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @param {?=} errors\n     * @return {?}\n     */\n    function (driver, rootElement, ast, enterClassName, leaveClassName, startingStyles, finalStyles, options, subInstructions, errors) {\n        if (errors === void 0) { errors = []; }\n        subInstructions = subInstructions || new ElementInstructionMap();\n        var /** @type {?} */ context = new AnimationTimelineContext(driver, rootElement, subInstructions, enterClassName, leaveClassName, errors, []);\n        context.options = options;\n        context.currentTimeline.setStyles([startingStyles], null, context.errors, options);\n        visitDslNode(this, ast, context);\n        // this checks to see if an actual animation happened\n        var /** @type {?} */ timelines = context.timelines.filter(function (timeline) { return timeline.containsAnimation(); });\n        if (timelines.length && Object.keys(finalStyles).length) {\n            var /** @type {?} */ tl = timelines[timelines.length - 1];\n            if (!tl.allowOnlyTimelineStyles()) {\n                tl.setStyles([finalStyles], null, context.errors, options);\n            }\n        }\n        return timelines.length ? timelines.map(function (timeline) { return timeline.buildKeyframes(); }) :\n            [createTimelineInstruction(rootElement, [], [], [], 0, 0, '', false)];\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitTrigger = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitState = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitTransition = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        // these values are not visited in this AST\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitAnimateChild = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ elementInstructions = context.subInstructions.consume(context.element);\n        if (elementInstructions) {\n            var /** @type {?} */ innerContext = context.createSubContext(ast.options);\n            var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n            var /** @type {?} */ endTime = this._visitSubInstructions(elementInstructions, innerContext, /** @type {?} */ (innerContext.options));\n            if (startTime != endTime) {\n                // we do this on the upper context because we created a sub context for\n                // the sub child animations\n                context.transformIntoNewTimeline(endTime);\n            }\n        }\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitAnimateRef = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ innerContext = context.createSubContext(ast.options);\n        innerContext.transformIntoNewTimeline();\n        this.visitReference(ast.animation, innerContext);\n        context.transformIntoNewTimeline(innerContext.currentTimeline.currentTime);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} instructions\n     * @param {?} context\n     * @param {?} options\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype._visitSubInstructions = /**\n     * @param {?} instructions\n     * @param {?} context\n     * @param {?} options\n     * @return {?}\n     */\n    function (instructions, context, options) {\n        var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ furthestTime = startTime;\n        // this is a special-case for when a user wants to skip a sub\n        // animation from being fired entirely.\n        var /** @type {?} */ duration = options.duration != null ? resolveTimingValue(options.duration) : null;\n        var /** @type {?} */ delay = options.delay != null ? resolveTimingValue(options.delay) : null;\n        if (duration !== 0) {\n            instructions.forEach(function (instruction) {\n                var /** @type {?} */ instructionTimings = context.appendInstructionToTimeline(instruction, duration, delay);\n                furthestTime =\n                    Math.max(furthestTime, instructionTimings.duration + instructionTimings.delay);\n            });\n        }\n        return furthestTime;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitReference = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        context.updateOptions(ast.options, true);\n        visitDslNode(this, ast.animation, context);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitSequence = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ subContextCount = context.subContextCount;\n        var /** @type {?} */ ctx = context;\n        var /** @type {?} */ options = ast.options;\n        if (options && (options.params || options.delay)) {\n            ctx = context.createSubContext(options);\n            ctx.transformIntoNewTimeline();\n            if (options.delay != null) {\n                if (ctx.previousNode.type == 6 /* Style */) {\n                    ctx.currentTimeline.snapshotCurrentStyles();\n                    ctx.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n                }\n                var /** @type {?} */ delay = resolveTimingValue(options.delay);\n                ctx.delayNextStep(delay);\n            }\n        }\n        if (ast.steps.length) {\n            ast.steps.forEach(function (s) { return visitDslNode(_this, s, ctx); });\n            // this is here just incase the inner steps only contain or end with a style() call\n            ctx.currentTimeline.applyStylesToKeyframe();\n            // this means that some animation function within the sequence\n            // ended up creating a sub timeline (which means the current\n            // timeline cannot overlap with the contents of the sequence)\n            if (ctx.subContextCount > subContextCount) {\n                ctx.transformIntoNewTimeline();\n            }\n        }\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitGroup = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var _this = this;\n        var /** @type {?} */ innerTimelines = [];\n        var /** @type {?} */ furthestTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ delay = ast.options && ast.options.delay ? resolveTimingValue(ast.options.delay) : 0;\n        ast.steps.forEach(function (s) {\n            var /** @type {?} */ innerContext = context.createSubContext(ast.options);\n            if (delay) {\n                innerContext.delayNextStep(delay);\n            }\n            visitDslNode(_this, s, innerContext);\n            furthestTime = Math.max(furthestTime, innerContext.currentTimeline.currentTime);\n            innerTimelines.push(innerContext.currentTimeline);\n        });\n        // this operation is run after the AST loop because otherwise\n        // if the parent timeline's collected styles were updated then\n        // it would pass in invalid data into the new-to-be forked items\n        innerTimelines.forEach(function (timeline) { return context.currentTimeline.mergeTimelineCollectedStyles(timeline); });\n        context.transformIntoNewTimeline(furthestTime);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype._visitTiming = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        if ((/** @type {?} */ (ast)).dynamic) {\n            var /** @type {?} */ strValue = (/** @type {?} */ (ast)).strValue;\n            var /** @type {?} */ timingValue = context.params ? interpolateParams(strValue, context.params, context.errors) : strValue;\n            return resolveTiming(timingValue, context.errors);\n        }\n        else {\n            return { duration: ast.duration, delay: ast.delay, easing: ast.easing };\n        }\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitAnimate = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ timings = context.currentAnimateTimings = this._visitTiming(ast.timings, context);\n        var /** @type {?} */ timeline = context.currentTimeline;\n        if (timings.delay) {\n            context.incrementTime(timings.delay);\n            timeline.snapshotCurrentStyles();\n        }\n        var /** @type {?} */ style$$1 = ast.style;\n        if (style$$1.type == 5 /* Keyframes */) {\n            this.visitKeyframes(style$$1, context);\n        }\n        else {\n            context.incrementTime(timings.duration);\n            this.visitStyle(/** @type {?} */ (style$$1), context);\n            timeline.applyStylesToKeyframe();\n        }\n        context.currentAnimateTimings = null;\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitStyle = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ timeline = context.currentTimeline;\n        var /** @type {?} */ timings = /** @type {?} */ ((context.currentAnimateTimings));\n        // this is a special case for when a style() call\n        // directly follows  an animate() call (but not inside of an animate() call)\n        if (!timings && timeline.getCurrentStyleProperties().length) {\n            timeline.forwardFrame();\n        }\n        var /** @type {?} */ easing = (timings && timings.easing) || ast.easing;\n        if (ast.isEmptyStep) {\n            timeline.applyEmptyStep(easing);\n        }\n        else {\n            timeline.setStyles(ast.styles, easing, context.errors, context.options);\n        }\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitKeyframes = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ currentAnimateTimings = /** @type {?} */ ((context.currentAnimateTimings));\n        var /** @type {?} */ startTime = (/** @type {?} */ ((context.currentTimeline))).duration;\n        var /** @type {?} */ duration = currentAnimateTimings.duration;\n        var /** @type {?} */ innerContext = context.createSubContext();\n        var /** @type {?} */ innerTimeline = innerContext.currentTimeline;\n        innerTimeline.easing = currentAnimateTimings.easing;\n        ast.styles.forEach(function (step) {\n            var /** @type {?} */ offset = step.offset || 0;\n            innerTimeline.forwardTime(offset * duration);\n            innerTimeline.setStyles(step.styles, step.easing, context.errors, context.options);\n            innerTimeline.applyStylesToKeyframe();\n        });\n        // this will ensure that the parent timeline gets all the styles from\n        // the child even if the new timeline below is not used\n        context.currentTimeline.mergeTimelineCollectedStyles(innerTimeline);\n        // we do this because the window between this timeline and the sub timeline\n        // should ensure that the styles within are exactly the same as they were before\n        context.transformIntoNewTimeline(startTime + duration);\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitQuery = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var _this = this;\n        // in the event that the first step before this is a style step we need\n        // to ensure the styles are applied before the children are animated\n        var /** @type {?} */ startTime = context.currentTimeline.currentTime;\n        var /** @type {?} */ options = /** @type {?} */ ((ast.options || {}));\n        var /** @type {?} */ delay = options.delay ? resolveTimingValue(options.delay) : 0;\n        if (delay && (context.previousNode.type === 6 /* Style */ ||\n            (startTime == 0 && context.currentTimeline.getCurrentStyleProperties().length))) {\n            context.currentTimeline.snapshotCurrentStyles();\n            context.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n        }\n        var /** @type {?} */ furthestTime = startTime;\n        var /** @type {?} */ elms = context.invokeQuery(ast.selector, ast.originalSelector, ast.limit, ast.includeSelf, options.optional ? true : false, context.errors);\n        context.currentQueryTotal = elms.length;\n        var /** @type {?} */ sameElementTimeline = null;\n        elms.forEach(function (element, i) {\n            context.currentQueryIndex = i;\n            var /** @type {?} */ innerContext = context.createSubContext(ast.options, element);\n            if (delay) {\n                innerContext.delayNextStep(delay);\n            }\n            if (element === context.element) {\n                sameElementTimeline = innerContext.currentTimeline;\n            }\n            visitDslNode(_this, ast.animation, innerContext);\n            // this is here just incase the inner steps only contain or end\n            // with a style() call (which is here to signal that this is a preparatory\n            // call to style an element before it is animated again)\n            innerContext.currentTimeline.applyStylesToKeyframe();\n            var /** @type {?} */ endTime = innerContext.currentTimeline.currentTime;\n            furthestTime = Math.max(furthestTime, endTime);\n        });\n        context.currentQueryIndex = 0;\n        context.currentQueryTotal = 0;\n        context.transformIntoNewTimeline(furthestTime);\n        if (sameElementTimeline) {\n            context.currentTimeline.mergeTimelineCollectedStyles(sameElementTimeline);\n            context.currentTimeline.snapshotCurrentStyles();\n        }\n        context.previousNode = ast;\n    };\n    /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTimelineBuilderVisitor.prototype.visitStagger = /**\n     * @param {?} ast\n     * @param {?} context\n     * @return {?}\n     */\n    function (ast, context) {\n        var /** @type {?} */ parentContext = /** @type {?} */ ((context.parentContext));\n        var /** @type {?} */ tl = context.currentTimeline;\n        var /** @type {?} */ timings = ast.timings;\n        var /** @type {?} */ duration = Math.abs(timings.duration);\n        var /** @type {?} */ maxTime = duration * (context.currentQueryTotal - 1);\n        var /** @type {?} */ delay = duration * context.currentQueryIndex;\n        var /** @type {?} */ staggerTransformer = timings.duration < 0 ? 'reverse' : timings.easing;\n        switch (staggerTransformer) {\n            case 'reverse':\n                delay = maxTime - delay;\n                break;\n            case 'full':\n                delay = parentContext.currentStaggerTime;\n                break;\n        }\n        var /** @type {?} */ timeline = context.currentTimeline;\n        if (delay) {\n            timeline.delayNextStep(delay);\n        }\n        var /** @type {?} */ startingTime = timeline.currentTime;\n        visitDslNode(this, ast.animation, context);\n        context.previousNode = ast;\n        // time = duration + delay\n        // the reason why this computation is so complex is because\n        // the inner timeline may either have a delay value or a stretched\n        // keyframe depending on if a subtimeline is not used or is used.\n        parentContext.currentStaggerTime =\n            (tl.currentTime - startingTime) + (tl.startTime - parentContext.currentTimeline.startTime);\n    };\n    return AnimationTimelineBuilderVisitor;\n}());\nvar DEFAULT_NOOP_PREVIOUS_NODE = /** @type {?} */ ({});\nvar AnimationTimelineContext = /** @class */ (function () {\n    function AnimationTimelineContext(_driver, element, subInstructions, _enterClassName, _leaveClassName, errors, timelines, initialTimeline) {\n        this._driver = _driver;\n        this.element = element;\n        this.subInstructions = subInstructions;\n        this._enterClassName = _enterClassName;\n        this._leaveClassName = _leaveClassName;\n        this.errors = errors;\n        this.timelines = timelines;\n        this.parentContext = null;\n        this.currentAnimateTimings = null;\n        this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n        this.subContextCount = 0;\n        this.options = {};\n        this.currentQueryIndex = 0;\n        this.currentQueryTotal = 0;\n        this.currentStaggerTime = 0;\n        this.currentTimeline = initialTimeline || new TimelineBuilder(this._driver, element, 0);\n        timelines.push(this.currentTimeline);\n    }\n    Object.defineProperty(AnimationTimelineContext.prototype, \"params\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this.options.params; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} options\n     * @param {?=} skipIfExists\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.updateOptions = /**\n     * @param {?} options\n     * @param {?=} skipIfExists\n     * @return {?}\n     */\n    function (options, skipIfExists) {\n        var _this = this;\n        if (!options)\n            return;\n        var /** @type {?} */ newOptions = /** @type {?} */ (options);\n        var /** @type {?} */ optionsToUpdate = this.options;\n        // NOTE: this will get patched up when other animation methods support duration overrides\n        if (newOptions.duration != null) {\n            (/** @type {?} */ (optionsToUpdate)).duration = resolveTimingValue(newOptions.duration);\n        }\n        if (newOptions.delay != null) {\n            optionsToUpdate.delay = resolveTimingValue(newOptions.delay);\n        }\n        var /** @type {?} */ newParams = newOptions.params;\n        if (newParams) {\n            var /** @type {?} */ paramsToUpdate_1 = /** @type {?} */ ((optionsToUpdate.params));\n            if (!paramsToUpdate_1) {\n                paramsToUpdate_1 = this.options.params = {};\n            }\n            Object.keys(newParams).forEach(function (name) {\n                if (!skipIfExists || !paramsToUpdate_1.hasOwnProperty(name)) {\n                    paramsToUpdate_1[name] = interpolateParams(newParams[name], paramsToUpdate_1, _this.errors);\n                }\n            });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype._copyOptions = /**\n     * @return {?}\n     */\n    function () {\n        var /** @type {?} */ options = {};\n        if (this.options) {\n            var /** @type {?} */ oldParams_1 = this.options.params;\n            if (oldParams_1) {\n                var /** @type {?} */ params_1 = options['params'] = {};\n                Object.keys(oldParams_1).forEach(function (name) { params_1[name] = oldParams_1[name]; });\n            }\n        }\n        return options;\n    };\n    /**\n     * @param {?=} options\n     * @param {?=} element\n     * @param {?=} newTime\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.createSubContext = /**\n     * @param {?=} options\n     * @param {?=} element\n     * @param {?=} newTime\n     * @return {?}\n     */\n    function (options, element, newTime) {\n        if (options === void 0) { options = null; }\n        var /** @type {?} */ target = element || this.element;\n        var /** @type {?} */ context = new AnimationTimelineContext(this._driver, target, this.subInstructions, this._enterClassName, this._leaveClassName, this.errors, this.timelines, this.currentTimeline.fork(target, newTime || 0));\n        context.previousNode = this.previousNode;\n        context.currentAnimateTimings = this.currentAnimateTimings;\n        context.options = this._copyOptions();\n        context.updateOptions(options);\n        context.currentQueryIndex = this.currentQueryIndex;\n        context.currentQueryTotal = this.currentQueryTotal;\n        context.parentContext = this;\n        this.subContextCount++;\n        return context;\n    };\n    /**\n     * @param {?=} newTime\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.transformIntoNewTimeline = /**\n     * @param {?=} newTime\n     * @return {?}\n     */\n    function (newTime) {\n        this.previousNode = DEFAULT_NOOP_PREVIOUS_NODE;\n        this.currentTimeline = this.currentTimeline.fork(this.element, newTime);\n        this.timelines.push(this.currentTimeline);\n        return this.currentTimeline;\n    };\n    /**\n     * @param {?} instruction\n     * @param {?} duration\n     * @param {?} delay\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.appendInstructionToTimeline = /**\n     * @param {?} instruction\n     * @param {?} duration\n     * @param {?} delay\n     * @return {?}\n     */\n    function (instruction, duration, delay) {\n        var /** @type {?} */ updatedTimings = {\n            duration: duration != null ? duration : instruction.duration,\n            delay: this.currentTimeline.currentTime + (delay != null ? delay : 0) + instruction.delay,\n            easing: ''\n        };\n        var /** @type {?} */ builder = new SubTimelineBuilder(this._driver, instruction.element, instruction.keyframes, instruction.preStyleProps, instruction.postStyleProps, updatedTimings, instruction.stretchStartingKeyframe);\n        this.timelines.push(builder);\n        return updatedTimings;\n    };\n    /**\n     * @param {?} time\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.incrementTime = /**\n     * @param {?} time\n     * @return {?}\n     */\n    function (time) {\n        this.currentTimeline.forwardTime(this.currentTimeline.duration + time);\n    };\n    /**\n     * @param {?} delay\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.delayNextStep = /**\n     * @param {?} delay\n     * @return {?}\n     */\n    function (delay) {\n        // negative delays are not yet supported\n        if (delay > 0) {\n            this.currentTimeline.delayNextStep(delay);\n        }\n    };\n    /**\n     * @param {?} selector\n     * @param {?} originalSelector\n     * @param {?} limit\n     * @param {?} includeSelf\n     * @param {?} optional\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTimelineContext.prototype.invokeQuery = /**\n     * @param {?} selector\n     * @param {?} originalSelector\n     * @param {?} limit\n     * @param {?} includeSelf\n     * @param {?} optional\n     * @param {?} errors\n     * @return {?}\n     */\n    function (selector, originalSelector, limit, includeSelf, optional, errors) {\n        var /** @type {?} */ results = [];\n        if (includeSelf) {\n            results.push(this.element);\n        }\n        if (selector.length > 0) {\n            // if :self is only used then the selector is empty\n            selector = selector.replace(ENTER_TOKEN_REGEX, '.' + this._enterClassName);\n            selector = selector.replace(LEAVE_TOKEN_REGEX, '.' + this._leaveClassName);\n            var /** @type {?} */ multi = limit != 1;\n            var /** @type {?} */ elements = this._driver.query(this.element, selector, multi);\n            if (limit !== 0) {\n                elements = limit < 0 ? elements.slice(elements.length + limit, elements.length) :\n                    elements.slice(0, limit);\n            }\n            results.push.apply(results, elements);\n        }\n        if (!optional && results.length == 0) {\n            errors.push(\"`query(\\\"\" + originalSelector + \"\\\")` returned zero elements. (Use `query(\\\"\" + originalSelector + \"\\\", { optional: true })` if you wish to allow this.)\");\n        }\n        return results;\n    };\n    return AnimationTimelineContext;\n}());\nvar TimelineBuilder = /** @class */ (function () {\n    function TimelineBuilder(_driver, element, startTime, _elementTimelineStylesLookup) {\n        this._driver = _driver;\n        this.element = element;\n        this.startTime = startTime;\n        this._elementTimelineStylesLookup = _elementTimelineStylesLookup;\n        this.duration = 0;\n        this._previousKeyframe = {};\n        this._currentKeyframe = {};\n        this._keyframes = new Map();\n        this._styleSummary = {};\n        this._pendingStyles = {};\n        this._backFill = {};\n        this._currentEmptyStepKeyframe = null;\n        if (!this._elementTimelineStylesLookup) {\n            this._elementTimelineStylesLookup = new Map();\n        }\n        this._localTimelineStyles = Object.create(this._backFill, {});\n        this._globalTimelineStyles = /** @type {?} */ ((this._elementTimelineStylesLookup.get(element)));\n        if (!this._globalTimelineStyles) {\n            this._globalTimelineStyles = this._localTimelineStyles;\n            this._elementTimelineStylesLookup.set(element, this._localTimelineStyles);\n        }\n        this._loadKeyframe();\n    }\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.containsAnimation = /**\n     * @return {?}\n     */\n    function () {\n        switch (this._keyframes.size) {\n            case 0:\n                return false;\n            case 1:\n                return this.getCurrentStyleProperties().length > 0;\n            default:\n                return true;\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.getCurrentStyleProperties = /**\n     * @return {?}\n     */\n    function () { return Object.keys(this._currentKeyframe); };\n    Object.defineProperty(TimelineBuilder.prototype, \"currentTime\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this.startTime + this.duration; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} delay\n     * @return {?}\n     */\n    TimelineBuilder.prototype.delayNextStep = /**\n     * @param {?} delay\n     * @return {?}\n     */\n    function (delay) {\n        // in the event that a style() step is placed right before a stagger()\n        // and that style() step is the very first style() value in the animation\n        // then we need to make a copy of the keyframe [0, copy, 1] so that the delay\n        // properly applies the style() values to work with the stagger...\n        var /** @type {?} */ hasPreStyleStep = this._keyframes.size == 1 && Object.keys(this._pendingStyles).length;\n        if (this.duration || hasPreStyleStep) {\n            this.forwardTime(this.currentTime + delay);\n            if (hasPreStyleStep) {\n                this.snapshotCurrentStyles();\n            }\n        }\n        else {\n            this.startTime += delay;\n        }\n    };\n    /**\n     * @param {?} element\n     * @param {?=} currentTime\n     * @return {?}\n     */\n    TimelineBuilder.prototype.fork = /**\n     * @param {?} element\n     * @param {?=} currentTime\n     * @return {?}\n     */\n    function (element, currentTime) {\n        this.applyStylesToKeyframe();\n        return new TimelineBuilder(this._driver, element, currentTime || this.currentTime, this._elementTimelineStylesLookup);\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype._loadKeyframe = /**\n     * @return {?}\n     */\n    function () {\n        if (this._currentKeyframe) {\n            this._previousKeyframe = this._currentKeyframe;\n        }\n        this._currentKeyframe = /** @type {?} */ ((this._keyframes.get(this.duration)));\n        if (!this._currentKeyframe) {\n            this._currentKeyframe = Object.create(this._backFill, {});\n            this._keyframes.set(this.duration, this._currentKeyframe);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.forwardFrame = /**\n     * @return {?}\n     */\n    function () {\n        this.duration += ONE_FRAME_IN_MILLISECONDS;\n        this._loadKeyframe();\n    };\n    /**\n     * @param {?} time\n     * @return {?}\n     */\n    TimelineBuilder.prototype.forwardTime = /**\n     * @param {?} time\n     * @return {?}\n     */\n    function (time) {\n        this.applyStylesToKeyframe();\n        this.duration = time;\n        this._loadKeyframe();\n    };\n    /**\n     * @param {?} prop\n     * @param {?} value\n     * @return {?}\n     */\n    TimelineBuilder.prototype._updateStyle = /**\n     * @param {?} prop\n     * @param {?} value\n     * @return {?}\n     */\n    function (prop, value) {\n        this._localTimelineStyles[prop] = value;\n        this._globalTimelineStyles[prop] = value;\n        this._styleSummary[prop] = { time: this.currentTime, value: value };\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.allowOnlyTimelineStyles = /**\n     * @return {?}\n     */\n    function () { return this._currentEmptyStepKeyframe !== this._currentKeyframe; };\n    /**\n     * @param {?} easing\n     * @return {?}\n     */\n    TimelineBuilder.prototype.applyEmptyStep = /**\n     * @param {?} easing\n     * @return {?}\n     */\n    function (easing) {\n        var _this = this;\n        if (easing) {\n            this._previousKeyframe['easing'] = easing;\n        }\n        // special case for animate(duration):\n        // all missing styles are filled with a `*` value then\n        // if any destination styles are filled in later on the same\n        // keyframe then they will override the overridden styles\n        // We use `_globalTimelineStyles` here because there may be\n        // styles in previous keyframes that are not present in this timeline\n        Object.keys(this._globalTimelineStyles).forEach(function (prop) {\n            _this._backFill[prop] = _this._globalTimelineStyles[prop] || AUTO_STYLE;\n            _this._currentKeyframe[prop] = AUTO_STYLE;\n        });\n        this._currentEmptyStepKeyframe = this._currentKeyframe;\n    };\n    /**\n     * @param {?} input\n     * @param {?} easing\n     * @param {?} errors\n     * @param {?=} options\n     * @return {?}\n     */\n    TimelineBuilder.prototype.setStyles = /**\n     * @param {?} input\n     * @param {?} easing\n     * @param {?} errors\n     * @param {?=} options\n     * @return {?}\n     */\n    function (input, easing, errors, options) {\n        var _this = this;\n        if (easing) {\n            this._previousKeyframe['easing'] = easing;\n        }\n        var /** @type {?} */ params = (options && options.params) || {};\n        var /** @type {?} */ styles = flattenStyles(input, this._globalTimelineStyles);\n        Object.keys(styles).forEach(function (prop) {\n            var /** @type {?} */ val = interpolateParams(styles[prop], params, errors);\n            _this._pendingStyles[prop] = val;\n            if (!_this._localTimelineStyles.hasOwnProperty(prop)) {\n                _this._backFill[prop] = _this._globalTimelineStyles.hasOwnProperty(prop) ?\n                    _this._globalTimelineStyles[prop] :\n                    AUTO_STYLE;\n            }\n            _this._updateStyle(prop, val);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.applyStylesToKeyframe = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        var /** @type {?} */ styles = this._pendingStyles;\n        var /** @type {?} */ props = Object.keys(styles);\n        if (props.length == 0)\n            return;\n        this._pendingStyles = {};\n        props.forEach(function (prop) {\n            var /** @type {?} */ val = styles[prop];\n            _this._currentKeyframe[prop] = val;\n        });\n        Object.keys(this._localTimelineStyles).forEach(function (prop) {\n            if (!_this._currentKeyframe.hasOwnProperty(prop)) {\n                _this._currentKeyframe[prop] = _this._localTimelineStyles[prop];\n            }\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.snapshotCurrentStyles = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        Object.keys(this._localTimelineStyles).forEach(function (prop) {\n            var /** @type {?} */ val = _this._localTimelineStyles[prop];\n            _this._pendingStyles[prop] = val;\n            _this._updateStyle(prop, val);\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.getFinalKeyframe = /**\n     * @return {?}\n     */\n    function () { return this._keyframes.get(this.duration); };\n    Object.defineProperty(TimelineBuilder.prototype, \"properties\", {\n        get: /**\n         * @return {?}\n         */\n        function () {\n            var /** @type {?} */ properties = [];\n            for (var /** @type {?} */ prop in this._currentKeyframe) {\n                properties.push(prop);\n            }\n            return properties;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} timeline\n     * @return {?}\n     */\n    TimelineBuilder.prototype.mergeTimelineCollectedStyles = /**\n     * @param {?} timeline\n     * @return {?}\n     */\n    function (timeline) {\n        var _this = this;\n        Object.keys(timeline._styleSummary).forEach(function (prop) {\n            var /** @type {?} */ details0 = _this._styleSummary[prop];\n            var /** @type {?} */ details1 = timeline._styleSummary[prop];\n            if (!details0 || details1.time > details0.time) {\n                _this._updateStyle(prop, details1.value);\n            }\n        });\n    };\n    /**\n     * @return {?}\n     */\n    TimelineBuilder.prototype.buildKeyframes = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        this.applyStylesToKeyframe();\n        var /** @type {?} */ preStyleProps = new Set();\n        var /** @type {?} */ postStyleProps = new Set();\n        var /** @type {?} */ isEmpty = this._keyframes.size === 1 && this.duration === 0;\n        var /** @type {?} */ finalKeyframes = [];\n        this._keyframes.forEach(function (keyframe, time) {\n            var /** @type {?} */ finalKeyframe = copyStyles(keyframe, true);\n            Object.keys(finalKeyframe).forEach(function (prop) {\n                var /** @type {?} */ value = finalKeyframe[prop];\n                if (value == ɵPRE_STYLE) {\n                    preStyleProps.add(prop);\n                }\n                else if (value == AUTO_STYLE) {\n                    postStyleProps.add(prop);\n                }\n            });\n            if (!isEmpty) {\n                finalKeyframe['offset'] = time / _this.duration;\n            }\n            finalKeyframes.push(finalKeyframe);\n        });\n        var /** @type {?} */ preProps = preStyleProps.size ? iteratorToArray(preStyleProps.values()) : [];\n        var /** @type {?} */ postProps = postStyleProps.size ? iteratorToArray(postStyleProps.values()) : [];\n        // special case for a 0-second animation (which is designed just to place styles onscreen)\n        if (isEmpty) {\n            var /** @type {?} */ kf0 = finalKeyframes[0];\n            var /** @type {?} */ kf1 = copyObj(kf0);\n            kf0['offset'] = 0;\n            kf1['offset'] = 1;\n            finalKeyframes = [kf0, kf1];\n        }\n        return createTimelineInstruction(this.element, finalKeyframes, preProps, postProps, this.duration, this.startTime, this.easing, false);\n    };\n    return TimelineBuilder;\n}());\nvar SubTimelineBuilder = /** @class */ (function (_super) {\n    __extends(SubTimelineBuilder, _super);\n    function SubTimelineBuilder(driver, element, keyframes, preStyleProps, postStyleProps, timings, _stretchStartingKeyframe) {\n        if (_stretchStartingKeyframe === void 0) { _stretchStartingKeyframe = false; }\n        var _this = _super.call(this, driver, element, timings.delay) || this;\n        _this.element = element;\n        _this.keyframes = keyframes;\n        _this.preStyleProps = preStyleProps;\n        _this.postStyleProps = postStyleProps;\n        _this._stretchStartingKeyframe = _stretchStartingKeyframe;\n        _this.timings = { duration: timings.duration, delay: timings.delay, easing: timings.easing };\n        return _this;\n    }\n    /**\n     * @return {?}\n     */\n    SubTimelineBuilder.prototype.containsAnimation = /**\n     * @return {?}\n     */\n    function () { return this.keyframes.length > 1; };\n    /**\n     * @return {?}\n     */\n    SubTimelineBuilder.prototype.buildKeyframes = /**\n     * @return {?}\n     */\n    function () {\n        var /** @type {?} */ keyframes = this.keyframes;\n        var _a = this.timings, delay = _a.delay, duration = _a.duration, easing = _a.easing;\n        if (this._stretchStartingKeyframe && delay) {\n            var /** @type {?} */ newKeyframes = [];\n            var /** @type {?} */ totalTime = duration + delay;\n            var /** @type {?} */ startingGap = delay / totalTime;\n            // the original starting keyframe now starts once the delay is done\n            var /** @type {?} */ newFirstKeyframe = copyStyles(keyframes[0], false);\n            newFirstKeyframe['offset'] = 0;\n            newKeyframes.push(newFirstKeyframe);\n            var /** @type {?} */ oldFirstKeyframe = copyStyles(keyframes[0], false);\n            oldFirstKeyframe['offset'] = roundOffset(startingGap);\n            newKeyframes.push(oldFirstKeyframe);\n            /*\n                    When the keyframe is stretched then it means that the delay before the animation\n                    starts is gone. Instead the first keyframe is placed at the start of the animation\n                    and it is then copied to where it starts when the original delay is over. This basically\n                    means nothing animates during that delay, but the styles are still renderered. For this\n                    to work the original offset values that exist in the original keyframes must be \"warped\"\n                    so that they can take the new keyframe + delay into account.\n            \n                    delay=1000, duration=1000, keyframes = 0 .5 1\n            \n                    turns into\n            \n                    delay=0, duration=2000, keyframes = 0 .33 .66 1\n                   */\n            // offsets between 1 ... n -1 are all warped by the keyframe stretch\n            var /** @type {?} */ limit = keyframes.length - 1;\n            for (var /** @type {?} */ i = 1; i <= limit; i++) {\n                var /** @type {?} */ kf = copyStyles(keyframes[i], false);\n                var /** @type {?} */ oldOffset = /** @type {?} */ (kf['offset']);\n                var /** @type {?} */ timeAtKeyframe = delay + oldOffset * duration;\n                kf['offset'] = roundOffset(timeAtKeyframe / totalTime);\n                newKeyframes.push(kf);\n            }\n            // the new starting keyframe should be added at the start\n            duration = totalTime;\n            delay = 0;\n            easing = '';\n            keyframes = newKeyframes;\n        }\n        return createTimelineInstruction(this.element, keyframes, this.preStyleProps, this.postStyleProps, duration, delay, easing, true);\n    };\n    return SubTimelineBuilder;\n}(TimelineBuilder));\n/**\n * @param {?} offset\n * @param {?=} decimalPoints\n * @return {?}\n */\nfunction roundOffset(offset, decimalPoints) {\n    if (decimalPoints === void 0) { decimalPoints = 3; }\n    var /** @type {?} */ mult = Math.pow(10, decimalPoints - 1);\n    return Math.round(offset * mult) / mult;\n}\n/**\n * @param {?} input\n * @param {?} allStyles\n * @return {?}\n */\nfunction flattenStyles(input, allStyles) {\n    var /** @type {?} */ styles = {};\n    var /** @type {?} */ allProperties;\n    input.forEach(function (token) {\n        if (token === '*') {\n            allProperties = allProperties || Object.keys(allStyles);\n            allProperties.forEach(function (prop) { styles[prop] = AUTO_STYLE; });\n        }\n        else {\n            copyStyles(/** @type {?} */ (token), false, styles);\n        }\n    });\n    return styles;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar Animation = /** @class */ (function () {\n    function Animation(_driver, input) {\n        this._driver = _driver;\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = buildAnimationAst(_driver, input, errors);\n        if (errors.length) {\n            var /** @type {?} */ errorMessage = \"animation validation failed:\\n\" + errors.join(\"\\n\");\n            throw new Error(errorMessage);\n        }\n        this._animationAst = ast;\n    }\n    /**\n     * @param {?} element\n     * @param {?} startingStyles\n     * @param {?} destinationStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    Animation.prototype.buildTimelines = /**\n     * @param {?} element\n     * @param {?} startingStyles\n     * @param {?} destinationStyles\n     * @param {?} options\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    function (element, startingStyles, destinationStyles, options, subInstructions) {\n        var /** @type {?} */ start = Array.isArray(startingStyles) ? normalizeStyles(startingStyles) : /** @type {?} */ (startingStyles);\n        var /** @type {?} */ dest = Array.isArray(destinationStyles) ? normalizeStyles(destinationStyles) : /** @type {?} */ (destinationStyles);\n        var /** @type {?} */ errors = [];\n        subInstructions = subInstructions || new ElementInstructionMap();\n        var /** @type {?} */ result = buildAnimationTimelines(this._driver, element, this._animationAst, ENTER_CLASSNAME, LEAVE_CLASSNAME, start, dest, options, subInstructions, errors);\n        if (errors.length) {\n            var /** @type {?} */ errorMessage = \"animation building failed:\\n\" + errors.join(\"\\n\");\n            throw new Error(errorMessage);\n        }\n        return result;\n    };\n    return Animation;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * \\@experimental Animation support is experimental.\n * @abstract\n */\nvar AnimationStyleNormalizer = /** @class */ (function () {\n    function AnimationStyleNormalizer() {\n    }\n    return AnimationStyleNormalizer;\n}());\n/**\n * \\@experimental Animation support is experimental.\n */\nvar NoopAnimationStyleNormalizer = /** @class */ (function () {\n    function NoopAnimationStyleNormalizer() {\n    }\n    /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    NoopAnimationStyleNormalizer.prototype.normalizePropertyName = /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    function (propertyName, errors) { return propertyName; };\n    /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    NoopAnimationStyleNormalizer.prototype.normalizeStyleValue = /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    function (userProvidedProperty, normalizedProperty, value, errors) {\n        return /** @type {?} */ (value);\n    };\n    return NoopAnimationStyleNormalizer;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar WebAnimationsStyleNormalizer = /** @class */ (function (_super) {\n    __extends(WebAnimationsStyleNormalizer, _super);\n    function WebAnimationsStyleNormalizer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    WebAnimationsStyleNormalizer.prototype.normalizePropertyName = /**\n     * @param {?} propertyName\n     * @param {?} errors\n     * @return {?}\n     */\n    function (propertyName, errors) {\n        return dashCaseToCamelCase(propertyName);\n    };\n    /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    WebAnimationsStyleNormalizer.prototype.normalizeStyleValue = /**\n     * @param {?} userProvidedProperty\n     * @param {?} normalizedProperty\n     * @param {?} value\n     * @param {?} errors\n     * @return {?}\n     */\n    function (userProvidedProperty, normalizedProperty, value, errors) {\n        var /** @type {?} */ unit = '';\n        var /** @type {?} */ strVal = value.toString().trim();\n        if (DIMENSIONAL_PROP_MAP[normalizedProperty] && value !== 0 && value !== '0') {\n            if (typeof value === 'number') {\n                unit = 'px';\n            }\n            else {\n                var /** @type {?} */ valAndSuffixMatch = value.match(/^[+-]?[\\d\\.]+([a-z]*)$/);\n                if (valAndSuffixMatch && valAndSuffixMatch[1].length == 0) {\n                    errors.push(\"Please provide a CSS unit value for \" + userProvidedProperty + \":\" + value);\n                }\n            }\n        }\n        return strVal + unit;\n    };\n    return WebAnimationsStyleNormalizer;\n}(AnimationStyleNormalizer));\nvar DIMENSIONAL_PROP_MAP = makeBooleanMap('width,height,minWidth,minHeight,maxWidth,maxHeight,left,top,bottom,right,fontSize,outlineWidth,outlineOffset,paddingTop,paddingLeft,paddingBottom,paddingRight,marginTop,marginLeft,marginBottom,marginRight,borderRadius,borderWidth,borderTopWidth,borderLeftWidth,borderRightWidth,borderBottomWidth,textIndent,perspective'\n    .split(','));\n/**\n * @param {?} keys\n * @return {?}\n */\nfunction makeBooleanMap(keys) {\n    var /** @type {?} */ map = {};\n    keys.forEach(function (key) { return map[key] = true; });\n    return map;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @record\n */\n\n/**\n * @param {?} element\n * @param {?} triggerName\n * @param {?} fromState\n * @param {?} toState\n * @param {?} isRemovalTransition\n * @param {?} fromStyles\n * @param {?} toStyles\n * @param {?} timelines\n * @param {?} queriedElements\n * @param {?} preStyleProps\n * @param {?} postStyleProps\n * @param {?=} errors\n * @return {?}\n */\nfunction createTransitionInstruction(element, triggerName, fromState, toState, isRemovalTransition, fromStyles, toStyles, timelines, queriedElements, preStyleProps, postStyleProps, errors) {\n    return {\n        type: 0 /* TransitionAnimation */,\n        element: element,\n        triggerName: triggerName,\n        isRemovalTransition: isRemovalTransition,\n        fromState: fromState,\n        fromStyles: fromStyles,\n        toState: toState,\n        toStyles: toStyles,\n        timelines: timelines,\n        queriedElements: queriedElements,\n        preStyleProps: preStyleProps,\n        postStyleProps: postStyleProps,\n        errors: errors\n    };\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar EMPTY_OBJECT = {};\nvar AnimationTransitionFactory = /** @class */ (function () {\n    function AnimationTransitionFactory(_triggerName, ast, _stateStyles) {\n        this._triggerName = _triggerName;\n        this.ast = ast;\n        this._stateStyles = _stateStyles;\n    }\n    /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.match = /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    function (currentState, nextState) {\n        return oneOrMoreTransitionsMatch(this.ast.matchers, currentState, nextState);\n    };\n    /**\n     * @param {?} stateName\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.buildStyles = /**\n     * @param {?} stateName\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    function (stateName, params, errors) {\n        var /** @type {?} */ backupStateStyler = this._stateStyles['*'];\n        var /** @type {?} */ stateStyler = this._stateStyles[stateName];\n        var /** @type {?} */ backupStyles = backupStateStyler ? backupStateStyler.buildStyles(params, errors) : {};\n        return stateStyler ? stateStyler.buildStyles(params, errors) : backupStyles;\n    };\n    /**\n     * @param {?} driver\n     * @param {?} element\n     * @param {?} currentState\n     * @param {?} nextState\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @param {?=} currentOptions\n     * @param {?=} nextOptions\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    AnimationTransitionFactory.prototype.build = /**\n     * @param {?} driver\n     * @param {?} element\n     * @param {?} currentState\n     * @param {?} nextState\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @param {?=} currentOptions\n     * @param {?=} nextOptions\n     * @param {?=} subInstructions\n     * @return {?}\n     */\n    function (driver, element, currentState, nextState, enterClassName, leaveClassName, currentOptions, nextOptions, subInstructions) {\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ transitionAnimationParams = this.ast.options && this.ast.options.params || EMPTY_OBJECT;\n        var /** @type {?} */ currentAnimationParams = currentOptions && currentOptions.params || EMPTY_OBJECT;\n        var /** @type {?} */ currentStateStyles = this.buildStyles(currentState, currentAnimationParams, errors);\n        var /** @type {?} */ nextAnimationParams = nextOptions && nextOptions.params || EMPTY_OBJECT;\n        var /** @type {?} */ nextStateStyles = this.buildStyles(nextState, nextAnimationParams, errors);\n        var /** @type {?} */ queriedElements = new Set();\n        var /** @type {?} */ preStyleMap = new Map();\n        var /** @type {?} */ postStyleMap = new Map();\n        var /** @type {?} */ isRemoval = nextState === 'void';\n        var /** @type {?} */ animationOptions = { params: __assign({}, transitionAnimationParams, nextAnimationParams) };\n        var /** @type {?} */ timelines = buildAnimationTimelines(driver, element, this.ast.animation, enterClassName, leaveClassName, currentStateStyles, nextStateStyles, animationOptions, subInstructions, errors);\n        if (errors.length) {\n            return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, [], [], preStyleMap, postStyleMap, errors);\n        }\n        timelines.forEach(function (tl) {\n            var /** @type {?} */ elm = tl.element;\n            var /** @type {?} */ preProps = getOrSetAsInMap(preStyleMap, elm, {});\n            tl.preStyleProps.forEach(function (prop) { return preProps[prop] = true; });\n            var /** @type {?} */ postProps = getOrSetAsInMap(postStyleMap, elm, {});\n            tl.postStyleProps.forEach(function (prop) { return postProps[prop] = true; });\n            if (elm !== element) {\n                queriedElements.add(elm);\n            }\n        });\n        var /** @type {?} */ queriedElementsList = iteratorToArray(queriedElements.values());\n        return createTransitionInstruction(element, this._triggerName, currentState, nextState, isRemoval, currentStateStyles, nextStateStyles, timelines, queriedElementsList, preStyleMap, postStyleMap);\n    };\n    return AnimationTransitionFactory;\n}());\n/**\n * @param {?} matchFns\n * @param {?} currentState\n * @param {?} nextState\n * @return {?}\n */\nfunction oneOrMoreTransitionsMatch(matchFns, currentState, nextState) {\n    return matchFns.some(function (fn) { return fn(currentState, nextState); });\n}\nvar AnimationStateStyles = /** @class */ (function () {\n    function AnimationStateStyles(styles, defaultParams) {\n        this.styles = styles;\n        this.defaultParams = defaultParams;\n    }\n    /**\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationStateStyles.prototype.buildStyles = /**\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    function (params, errors) {\n        var /** @type {?} */ finalStyles = {};\n        var /** @type {?} */ combinedParams = copyObj(this.defaultParams);\n        Object.keys(params).forEach(function (key) {\n            var /** @type {?} */ value = params[key];\n            if (value != null) {\n                combinedParams[key] = value;\n            }\n        });\n        this.styles.styles.forEach(function (value) {\n            if (typeof value !== 'string') {\n                var /** @type {?} */ styleObj_1 = /** @type {?} */ (value);\n                Object.keys(styleObj_1).forEach(function (prop) {\n                    var /** @type {?} */ val = styleObj_1[prop];\n                    if (val.length > 1) {\n                        val = interpolateParams(val, combinedParams, errors);\n                    }\n                    finalStyles[prop] = val;\n                });\n            }\n        });\n        return finalStyles;\n    };\n    return AnimationStateStyles;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * \\@experimental Animation support is experimental.\n * @param {?} name\n * @param {?} ast\n * @return {?}\n */\nfunction buildTrigger(name, ast) {\n    return new AnimationTrigger(name, ast);\n}\n/**\n * \\@experimental Animation support is experimental.\n */\nvar AnimationTrigger = /** @class */ (function () {\n    function AnimationTrigger(name, ast) {\n        var _this = this;\n        this.name = name;\n        this.ast = ast;\n        this.transitionFactories = [];\n        this.states = {};\n        ast.states.forEach(function (ast) {\n            var /** @type {?} */ defaultParams = (ast.options && ast.options.params) || {};\n            _this.states[ast.name] = new AnimationStateStyles(ast.style, defaultParams);\n        });\n        balanceProperties(this.states, 'true', '1');\n        balanceProperties(this.states, 'false', '0');\n        ast.transitions.forEach(function (ast) {\n            _this.transitionFactories.push(new AnimationTransitionFactory(name, ast, _this.states));\n        });\n        this.fallbackTransition = createFallbackTransition(name, this.states);\n    }\n    Object.defineProperty(AnimationTrigger.prototype, \"containsQueries\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this.ast.queryCount > 0; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    AnimationTrigger.prototype.matchTransition = /**\n     * @param {?} currentState\n     * @param {?} nextState\n     * @return {?}\n     */\n    function (currentState, nextState) {\n        var /** @type {?} */ entry = this.transitionFactories.find(function (f) { return f.match(currentState, nextState); });\n        return entry || null;\n    };\n    /**\n     * @param {?} currentState\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    AnimationTrigger.prototype.matchStyles = /**\n     * @param {?} currentState\n     * @param {?} params\n     * @param {?} errors\n     * @return {?}\n     */\n    function (currentState, params, errors) {\n        return this.fallbackTransition.buildStyles(currentState, params, errors);\n    };\n    return AnimationTrigger;\n}());\n/**\n * @param {?} triggerName\n * @param {?} states\n * @return {?}\n */\nfunction createFallbackTransition(triggerName, states) {\n    var /** @type {?} */ matchers = [function (fromState, toState) { return true; }];\n    var /** @type {?} */ animation = { type: 2 /* Sequence */, steps: [], options: null };\n    var /** @type {?} */ transition = {\n        type: 1 /* Transition */,\n        animation: animation,\n        matchers: matchers,\n        options: null,\n        queryCount: 0,\n        depCount: 0\n    };\n    return new AnimationTransitionFactory(triggerName, transition, states);\n}\n/**\n * @param {?} obj\n * @param {?} key1\n * @param {?} key2\n * @return {?}\n */\nfunction balanceProperties(obj, key1, key2) {\n    if (obj.hasOwnProperty(key1)) {\n        if (!obj.hasOwnProperty(key2)) {\n            obj[key2] = obj[key1];\n        }\n    }\n    else if (obj.hasOwnProperty(key2)) {\n        obj[key1] = obj[key2];\n    }\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar EMPTY_INSTRUCTION_MAP = new ElementInstructionMap();\nvar TimelineAnimationEngine = /** @class */ (function () {\n    function TimelineAnimationEngine(_driver, _normalizer) {\n        this._driver = _driver;\n        this._normalizer = _normalizer;\n        this._animations = {};\n        this._playersById = {};\n        this.players = [];\n    }\n    /**\n     * @param {?} id\n     * @param {?} metadata\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.register = /**\n     * @param {?} id\n     * @param {?} metadata\n     * @return {?}\n     */\n    function (id, metadata) {\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = buildAnimationAst(this._driver, metadata, errors);\n        if (errors.length) {\n            throw new Error(\"Unable to build the animation due to the following errors: \" + errors.join(\"\\n\"));\n        }\n        else {\n            this._animations[id] = ast;\n        }\n    };\n    /**\n     * @param {?} i\n     * @param {?} preStyles\n     * @param {?=} postStyles\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype._buildPlayer = /**\n     * @param {?} i\n     * @param {?} preStyles\n     * @param {?=} postStyles\n     * @return {?}\n     */\n    function (i, preStyles, postStyles) {\n        var /** @type {?} */ element = i.element;\n        var /** @type {?} */ keyframes = normalizeKeyframes(this._driver, this._normalizer, element, i.keyframes, preStyles, postStyles);\n        return this._driver.animate(element, keyframes, i.duration, i.delay, i.easing, []);\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.create = /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?=} options\n     * @return {?}\n     */\n    function (id, element, options) {\n        var _this = this;\n        if (options === void 0) { options = {}; }\n        var /** @type {?} */ errors = [];\n        var /** @type {?} */ ast = this._animations[id];\n        var /** @type {?} */ instructions;\n        var /** @type {?} */ autoStylesMap = new Map();\n        if (ast) {\n            instructions = buildAnimationTimelines(this._driver, element, ast, ENTER_CLASSNAME, LEAVE_CLASSNAME, {}, {}, options, EMPTY_INSTRUCTION_MAP, errors);\n            instructions.forEach(function (inst) {\n                var /** @type {?} */ styles = getOrSetAsInMap(autoStylesMap, inst.element, {});\n                inst.postStyleProps.forEach(function (prop) { return styles[prop] = null; });\n            });\n        }\n        else {\n            errors.push('The requested animation doesn\\'t exist or has already been destroyed');\n            instructions = [];\n        }\n        if (errors.length) {\n            throw new Error(\"Unable to create the animation due to the following errors: \" + errors.join(\"\\n\"));\n        }\n        autoStylesMap.forEach(function (styles, element) {\n            Object.keys(styles).forEach(function (prop) { styles[prop] = _this._driver.computeStyle(element, prop, AUTO_STYLE); });\n        });\n        var /** @type {?} */ players = instructions.map(function (i) {\n            var /** @type {?} */ styles = autoStylesMap.get(i.element);\n            return _this._buildPlayer(i, {}, styles);\n        });\n        var /** @type {?} */ player = optimizeGroupPlayer(players);\n        this._playersById[id] = player;\n        player.onDestroy(function () { return _this.destroy(id); });\n        this.players.push(player);\n        return player;\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.destroy = /**\n     * @param {?} id\n     * @return {?}\n     */\n    function (id) {\n        var /** @type {?} */ player = this._getPlayer(id);\n        player.destroy();\n        delete this._playersById[id];\n        var /** @type {?} */ index = this.players.indexOf(player);\n        if (index >= 0) {\n            this.players.splice(index, 1);\n        }\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype._getPlayer = /**\n     * @param {?} id\n     * @return {?}\n     */\n    function (id) {\n        var /** @type {?} */ player = this._playersById[id];\n        if (!player) {\n            throw new Error(\"Unable to find the timeline player referenced by \" + id);\n        }\n        return player;\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.listen = /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} eventName\n     * @param {?} callback\n     * @return {?}\n     */\n    function (id, element, eventName, callback) {\n        // triggerName, fromState, toState are all ignored for timeline animations\n        var /** @type {?} */ baseEvent = makeAnimationEvent(element, '', '', '');\n        listenOnPlayer(this._getPlayer(id), eventName, baseEvent, callback);\n        return function () { };\n    };\n    /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} command\n     * @param {?} args\n     * @return {?}\n     */\n    TimelineAnimationEngine.prototype.command = /**\n     * @param {?} id\n     * @param {?} element\n     * @param {?} command\n     * @param {?} args\n     * @return {?}\n     */\n    function (id, element, command, args) {\n        if (command == 'register') {\n            this.register(id, /** @type {?} */ (args[0]));\n            return;\n        }\n        if (command == 'create') {\n            var /** @type {?} */ options = /** @type {?} */ ((args[0] || {}));\n            this.create(id, element, options);\n            return;\n        }\n        var /** @type {?} */ player = this._getPlayer(id);\n        switch (command) {\n            case 'play':\n                player.play();\n                break;\n            case 'pause':\n                player.pause();\n                break;\n            case 'reset':\n                player.reset();\n                break;\n            case 'restart':\n                player.restart();\n                break;\n            case 'finish':\n                player.finish();\n                break;\n            case 'init':\n                player.init();\n                break;\n            case 'setPosition':\n                player.setPosition(parseFloat(/** @type {?} */ (args[0])));\n                break;\n            case 'destroy':\n                this.destroy(id);\n                break;\n        }\n    };\n    return TimelineAnimationEngine;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar QUEUED_CLASSNAME = 'ng-animate-queued';\nvar QUEUED_SELECTOR = '.ng-animate-queued';\nvar DISABLED_CLASSNAME = 'ng-animate-disabled';\nvar DISABLED_SELECTOR = '.ng-animate-disabled';\nvar STAR_CLASSNAME = 'ng-star-inserted';\nvar STAR_SELECTOR = '.ng-star-inserted';\nvar EMPTY_PLAYER_ARRAY = [];\nvar NULL_REMOVAL_STATE = {\n    namespaceId: '',\n    setForRemoval: null,\n    hasAnimation: false,\n    removedBeforeQueried: false\n};\nvar NULL_REMOVED_QUERIED_STATE = {\n    namespaceId: '',\n    setForRemoval: null,\n    hasAnimation: false,\n    removedBeforeQueried: true\n};\n/**\n * @record\n */\n\nvar REMOVAL_FLAG = '__ng_removed';\n/**\n * @record\n */\n\nvar StateValue = /** @class */ (function () {\n    function StateValue(input, namespaceId) {\n        if (namespaceId === void 0) { namespaceId = ''; }\n        this.namespaceId = namespaceId;\n        var /** @type {?} */ isObj = input && input.hasOwnProperty('value');\n        var /** @type {?} */ value = isObj ? input['value'] : input;\n        this.value = normalizeTriggerValue(value);\n        if (isObj) {\n            var /** @type {?} */ options = copyObj(/** @type {?} */ (input));\n            delete options['value'];\n            this.options = /** @type {?} */ (options);\n        }\n        else {\n            this.options = {};\n        }\n        if (!this.options.params) {\n            this.options.params = {};\n        }\n    }\n    Object.defineProperty(StateValue.prototype, \"params\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return /** @type {?} */ (this.options.params); },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} options\n     * @return {?}\n     */\n    StateValue.prototype.absorbOptions = /**\n     * @param {?} options\n     * @return {?}\n     */\n    function (options) {\n        var /** @type {?} */ newParams = options.params;\n        if (newParams) {\n            var /** @type {?} */ oldParams_1 = /** @type {?} */ ((this.options.params));\n            Object.keys(newParams).forEach(function (prop) {\n                if (oldParams_1[prop] == null) {\n                    oldParams_1[prop] = newParams[prop];\n                }\n            });\n        }\n    };\n    return StateValue;\n}());\nvar VOID_VALUE = 'void';\nvar DEFAULT_STATE_VALUE = new StateValue(VOID_VALUE);\nvar DELETED_STATE_VALUE = new StateValue('DELETED');\nvar AnimationTransitionNamespace = /** @class */ (function () {\n    function AnimationTransitionNamespace(id, hostElement, _engine) {\n        this.id = id;\n        this.hostElement = hostElement;\n        this._engine = _engine;\n        this.players = [];\n        this._triggers = {};\n        this._queue = [];\n        this._elementListeners = new Map();\n        this._hostClassName = 'ng-tns-' + id;\n        addClass(hostElement, this._hostClassName);\n    }\n    /**\n     * @param {?} element\n     * @param {?} name\n     * @param {?} phase\n     * @param {?} callback\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.listen = /**\n     * @param {?} element\n     * @param {?} name\n     * @param {?} phase\n     * @param {?} callback\n     * @return {?}\n     */\n    function (element, name, phase, callback) {\n        var _this = this;\n        if (!this._triggers.hasOwnProperty(name)) {\n            throw new Error(\"Unable to listen on the animation trigger event \\\"\" + phase + \"\\\" because the animation trigger \\\"\" + name + \"\\\" doesn't exist!\");\n        }\n        if (phase == null || phase.length == 0) {\n            throw new Error(\"Unable to listen on the animation trigger \\\"\" + name + \"\\\" because the provided event is undefined!\");\n        }\n        if (!isTriggerEventValid(phase)) {\n            throw new Error(\"The provided animation trigger event \\\"\" + phase + \"\\\" for the animation trigger \\\"\" + name + \"\\\" is not supported!\");\n        }\n        var /** @type {?} */ listeners = getOrSetAsInMap(this._elementListeners, element, []);\n        var /** @type {?} */ data = { name: name, phase: phase, callback: callback };\n        listeners.push(data);\n        var /** @type {?} */ triggersWithStates = getOrSetAsInMap(this._engine.statesByElement, element, {});\n        if (!triggersWithStates.hasOwnProperty(name)) {\n            addClass(element, NG_TRIGGER_CLASSNAME);\n            addClass(element, NG_TRIGGER_CLASSNAME + '-' + name);\n            triggersWithStates[name] = DEFAULT_STATE_VALUE;\n        }\n        return function () {\n            // the event listener is removed AFTER the flush has occurred such\n            // that leave animations callbacks can fire (otherwise if the node\n            // is removed in between then the listeners would be deregistered)\n            // the event listener is removed AFTER the flush has occurred such\n            // that leave animations callbacks can fire (otherwise if the node\n            // is removed in between then the listeners would be deregistered)\n            _this._engine.afterFlush(function () {\n                var /** @type {?} */ index = listeners.indexOf(data);\n                if (index >= 0) {\n                    listeners.splice(index, 1);\n                }\n                if (!_this._triggers[name]) {\n                    delete triggersWithStates[name];\n                }\n            });\n        };\n    };\n    /**\n     * @param {?} name\n     * @param {?} ast\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.register = /**\n     * @param {?} name\n     * @param {?} ast\n     * @return {?}\n     */\n    function (name, ast) {\n        if (this._triggers[name]) {\n            // throw\n            return false;\n        }\n        else {\n            this._triggers[name] = ast;\n            return true;\n        }\n    };\n    /**\n     * @param {?} name\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype._getTrigger = /**\n     * @param {?} name\n     * @return {?}\n     */\n    function (name) {\n        var /** @type {?} */ trigger = this._triggers[name];\n        if (!trigger) {\n            throw new Error(\"The provided animation trigger \\\"\" + name + \"\\\" has not been registered!\");\n        }\n        return trigger;\n    };\n    /**\n     * @param {?} element\n     * @param {?} triggerName\n     * @param {?} value\n     * @param {?=} defaultToFallback\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.trigger = /**\n     * @param {?} element\n     * @param {?} triggerName\n     * @param {?} value\n     * @param {?=} defaultToFallback\n     * @return {?}\n     */\n    function (element, triggerName, value, defaultToFallback) {\n        var _this = this;\n        if (defaultToFallback === void 0) { defaultToFallback = true; }\n        var /** @type {?} */ trigger = this._getTrigger(triggerName);\n        var /** @type {?} */ player = new TransitionAnimationPlayer(this.id, triggerName, element);\n        var /** @type {?} */ triggersWithStates = this._engine.statesByElement.get(element);\n        if (!triggersWithStates) {\n            addClass(element, NG_TRIGGER_CLASSNAME);\n            addClass(element, NG_TRIGGER_CLASSNAME + '-' + triggerName);\n            this._engine.statesByElement.set(element, triggersWithStates = {});\n        }\n        var /** @type {?} */ fromState = triggersWithStates[triggerName];\n        var /** @type {?} */ toState = new StateValue(value, this.id);\n        var /** @type {?} */ isObj = value && value.hasOwnProperty('value');\n        if (!isObj && fromState) {\n            toState.absorbOptions(fromState.options);\n        }\n        triggersWithStates[triggerName] = toState;\n        if (!fromState) {\n            fromState = DEFAULT_STATE_VALUE;\n        }\n        else if (fromState === DELETED_STATE_VALUE) {\n            return player;\n        }\n        var /** @type {?} */ isRemoval = toState.value === VOID_VALUE;\n        // normally this isn't reached by here, however, if an object expression\n        // is passed in then it may be a new object each time. Comparing the value\n        // is important since that will stay the same despite there being a new object.\n        // The removal arc here is special cased because the same element is triggered\n        // twice in the event that it contains animations on the outer/inner portions\n        // of the host container\n        if (!isRemoval && fromState.value === toState.value) {\n            // this means that despite the value not changing, some inner params\n            // have changed which means that the animation final styles need to be applied\n            if (!objEquals(fromState.params, toState.params)) {\n                var /** @type {?} */ errors = [];\n                var /** @type {?} */ fromStyles_1 = trigger.matchStyles(fromState.value, fromState.params, errors);\n                var /** @type {?} */ toStyles_1 = trigger.matchStyles(toState.value, toState.params, errors);\n                if (errors.length) {\n                    this._engine.reportError(errors);\n                }\n                else {\n                    this._engine.afterFlush(function () {\n                        eraseStyles(element, fromStyles_1);\n                        setStyles(element, toStyles_1);\n                    });\n                }\n            }\n            return;\n        }\n        var /** @type {?} */ playersOnElement = getOrSetAsInMap(this._engine.playersByElement, element, []);\n        playersOnElement.forEach(function (player) {\n            // only remove the player if it is queued on the EXACT same trigger/namespace\n            // we only also deal with queued players here because if the animation has\n            // started then we want to keep the player alive until the flush happens\n            // (which is where the previousPlayers are passed into the new palyer)\n            if (player.namespaceId == _this.id && player.triggerName == triggerName && player.queued) {\n                player.destroy();\n            }\n        });\n        var /** @type {?} */ transition = trigger.matchTransition(fromState.value, toState.value);\n        var /** @type {?} */ isFallbackTransition = false;\n        if (!transition) {\n            if (!defaultToFallback)\n                return;\n            transition = trigger.fallbackTransition;\n            isFallbackTransition = true;\n        }\n        this._engine.totalQueuedPlayers++;\n        this._queue.push({ element: element, triggerName: triggerName, transition: transition, fromState: fromState, toState: toState, player: player, isFallbackTransition: isFallbackTransition });\n        if (!isFallbackTransition) {\n            addClass(element, QUEUED_CLASSNAME);\n            player.onStart(function () { removeClass(element, QUEUED_CLASSNAME); });\n        }\n        player.onDone(function () {\n            var /** @type {?} */ index = _this.players.indexOf(player);\n            if (index >= 0) {\n                _this.players.splice(index, 1);\n            }\n            var /** @type {?} */ players = _this._engine.playersByElement.get(element);\n            if (players) {\n                var /** @type {?} */ index_1 = players.indexOf(player);\n                if (index_1 >= 0) {\n                    players.splice(index_1, 1);\n                }\n            }\n        });\n        this.players.push(player);\n        playersOnElement.push(player);\n        return player;\n    };\n    /**\n     * @param {?} name\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.deregister = /**\n     * @param {?} name\n     * @return {?}\n     */\n    function (name) {\n        var _this = this;\n        delete this._triggers[name];\n        this._engine.statesByElement.forEach(function (stateMap, element) { delete stateMap[name]; });\n        this._elementListeners.forEach(function (listeners, element) {\n            _this._elementListeners.set(element, listeners.filter(function (entry) { return entry.name != name; }));\n        });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.clearElementCache = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        this._engine.statesByElement.delete(element);\n        this._elementListeners.delete(element);\n        var /** @type {?} */ elementPlayers = this._engine.playersByElement.get(element);\n        if (elementPlayers) {\n            elementPlayers.forEach(function (player) { return player.destroy(); });\n            this._engine.playersByElement.delete(element);\n        }\n    };\n    /**\n     * @param {?} rootElement\n     * @param {?} context\n     * @param {?=} animate\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype._signalRemovalForInnerTriggers = /**\n     * @param {?} rootElement\n     * @param {?} context\n     * @param {?=} animate\n     * @return {?}\n     */\n    function (rootElement, context, animate) {\n        var _this = this;\n        if (animate === void 0) { animate = false; }\n        // emulate a leave animation for all inner nodes within this node.\n        // If there are no animations found for any of the nodes then clear the cache\n        // for the element.\n        this._engine.driver.query(rootElement, NG_TRIGGER_SELECTOR, true).forEach(function (elm) {\n            // this means that an inner remove() operation has already kicked off\n            // the animation on this element...\n            if (elm[REMOVAL_FLAG])\n                return;\n            var /** @type {?} */ namespaces = _this._engine.fetchNamespacesByElement(elm);\n            if (namespaces.size) {\n                namespaces.forEach(function (ns) { return ns.triggerLeaveAnimation(elm, context, false, true); });\n            }\n            else {\n                _this.clearElementCache(elm);\n            }\n        });\n    };\n    /**\n     * @param {?} element\n     * @param {?} context\n     * @param {?=} destroyAfterComplete\n     * @param {?=} defaultToFallback\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.triggerLeaveAnimation = /**\n     * @param {?} element\n     * @param {?} context\n     * @param {?=} destroyAfterComplete\n     * @param {?=} defaultToFallback\n     * @return {?}\n     */\n    function (element, context, destroyAfterComplete, defaultToFallback) {\n        var _this = this;\n        var /** @type {?} */ triggerStates = this._engine.statesByElement.get(element);\n        if (triggerStates) {\n            var /** @type {?} */ players_1 = [];\n            Object.keys(triggerStates).forEach(function (triggerName) {\n                // this check is here in the event that an element is removed\n                // twice (both on the host level and the component level)\n                if (_this._triggers[triggerName]) {\n                    var /** @type {?} */ player = _this.trigger(element, triggerName, VOID_VALUE, defaultToFallback);\n                    if (player) {\n                        players_1.push(player);\n                    }\n                }\n            });\n            if (players_1.length) {\n                this._engine.markElementAsRemoved(this.id, element, true, context);\n                if (destroyAfterComplete) {\n                    optimizeGroupPlayer(players_1).onDone(function () { return _this._engine.processLeaveNode(element); });\n                }\n                return true;\n            }\n        }\n        return false;\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.prepareLeaveAnimationListeners = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var _this = this;\n        var /** @type {?} */ listeners = this._elementListeners.get(element);\n        if (listeners) {\n            var /** @type {?} */ visitedTriggers_1 = new Set();\n            listeners.forEach(function (listener) {\n                var /** @type {?} */ triggerName = listener.name;\n                if (visitedTriggers_1.has(triggerName))\n                    return;\n                visitedTriggers_1.add(triggerName);\n                var /** @type {?} */ trigger = _this._triggers[triggerName];\n                var /** @type {?} */ transition = trigger.fallbackTransition;\n                var /** @type {?} */ elementStates = /** @type {?} */ ((_this._engine.statesByElement.get(element)));\n                var /** @type {?} */ fromState = elementStates[triggerName] || DEFAULT_STATE_VALUE;\n                var /** @type {?} */ toState = new StateValue(VOID_VALUE);\n                var /** @type {?} */ player = new TransitionAnimationPlayer(_this.id, triggerName, element);\n                _this._engine.totalQueuedPlayers++;\n                _this._queue.push({\n                    element: element,\n                    triggerName: triggerName,\n                    transition: transition,\n                    fromState: fromState,\n                    toState: toState,\n                    player: player,\n                    isFallbackTransition: true\n                });\n            });\n        }\n    };\n    /**\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.removeNode = /**\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    function (element, context) {\n        var _this = this;\n        var /** @type {?} */ engine = this._engine;\n        if (element.childElementCount) {\n            this._signalRemovalForInnerTriggers(element, context, true);\n        }\n        // this means that a * => VOID animation was detected and kicked off\n        if (this.triggerLeaveAnimation(element, context, true))\n            return;\n        // find the player that is animating and make sure that the\n        // removal is delayed until that player has completed\n        var /** @type {?} */ containsPotentialParentTransition = false;\n        if (engine.totalAnimations) {\n            var /** @type {?} */ currentPlayers = engine.players.length ? engine.playersByQueriedElement.get(element) : [];\n            // when this `if statement` does not continue forward it means that\n            // a previous animation query has selected the current element and\n            // is animating it. In this situation want to continue fowards and\n            // allow the element to be queued up for animation later.\n            if (currentPlayers && currentPlayers.length) {\n                containsPotentialParentTransition = true;\n            }\n            else {\n                var /** @type {?} */ parent_1 = element;\n                while (parent_1 = parent_1.parentNode) {\n                    var /** @type {?} */ triggers = engine.statesByElement.get(parent_1);\n                    if (triggers) {\n                        containsPotentialParentTransition = true;\n                        break;\n                    }\n                }\n            }\n        }\n        // at this stage we know that the element will either get removed\n        // during flush or will be picked up by a parent query. Either way\n        // we need to fire the listeners for this element when it DOES get\n        // removed (once the query parent animation is done or after flush)\n        this.prepareLeaveAnimationListeners(element);\n        // whether or not a parent has an animation we need to delay the deferral of the leave\n        // operation until we have more information (which we do after flush() has been called)\n        if (containsPotentialParentTransition) {\n            engine.markElementAsRemoved(this.id, element, false, context);\n        }\n        else {\n            // we do this after the flush has occurred such\n            // that the callbacks can be fired\n            engine.afterFlush(function () { return _this.clearElementCache(element); });\n            engine.destroyInnerAnimations(element);\n            engine._onRemovalComplete(element, context);\n        }\n    };\n    /**\n     * @param {?} element\n     * @param {?} parent\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.insertNode = /**\n     * @param {?} element\n     * @param {?} parent\n     * @return {?}\n     */\n    function (element, parent) { addClass(element, this._hostClassName); };\n    /**\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.drainQueuedTransitions = /**\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    function (microtaskId) {\n        var _this = this;\n        var /** @type {?} */ instructions = [];\n        this._queue.forEach(function (entry) {\n            var /** @type {?} */ player = entry.player;\n            if (player.destroyed)\n                return;\n            var /** @type {?} */ element = entry.element;\n            var /** @type {?} */ listeners = _this._elementListeners.get(element);\n            if (listeners) {\n                listeners.forEach(function (listener) {\n                    if (listener.name == entry.triggerName) {\n                        var /** @type {?} */ baseEvent = makeAnimationEvent(element, entry.triggerName, entry.fromState.value, entry.toState.value);\n                        (/** @type {?} */ (baseEvent))['_data'] = microtaskId;\n                        listenOnPlayer(entry.player, listener.phase, baseEvent, listener.callback);\n                    }\n                });\n            }\n            if (player.markedForDestroy) {\n                _this._engine.afterFlush(function () {\n                    // now we can destroy the element properly since the event listeners have\n                    // been bound to the player\n                    player.destroy();\n                });\n            }\n            else {\n                instructions.push(entry);\n            }\n        });\n        this._queue = [];\n        return instructions.sort(function (a, b) {\n            // if depCount == 0 them move to front\n            // otherwise if a contains b then move back\n            var /** @type {?} */ d0 = a.transition.ast.depCount;\n            var /** @type {?} */ d1 = b.transition.ast.depCount;\n            if (d0 == 0 || d1 == 0) {\n                return d0 - d1;\n            }\n            return _this._engine.driver.containsElement(a.element, b.element) ? 1 : -1;\n        });\n    };\n    /**\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.destroy = /**\n     * @param {?} context\n     * @return {?}\n     */\n    function (context) {\n        this.players.forEach(function (p) { return p.destroy(); });\n        this._signalRemovalForInnerTriggers(this.hostElement, context);\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    AnimationTransitionNamespace.prototype.elementContainsData = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var /** @type {?} */ containsData = false;\n        if (this._elementListeners.has(element))\n            containsData = true;\n        containsData =\n            (this._queue.find(function (entry) { return entry.element === element; }) ? true : false) || containsData;\n        return containsData;\n    };\n    return AnimationTransitionNamespace;\n}());\n/**\n * @record\n */\n\nvar TransitionAnimationEngine = /** @class */ (function () {\n    function TransitionAnimationEngine(driver, _normalizer) {\n        this.driver = driver;\n        this._normalizer = _normalizer;\n        this.players = [];\n        this.newHostElements = new Map();\n        this.playersByElement = new Map();\n        this.playersByQueriedElement = new Map();\n        this.statesByElement = new Map();\n        this.disabledNodes = new Set();\n        this.totalAnimations = 0;\n        this.totalQueuedPlayers = 0;\n        this._namespaceLookup = {};\n        this._namespaceList = [];\n        this._flushFns = [];\n        this._whenQuietFns = [];\n        this.namespacesByHostElement = new Map();\n        this.collectedEnterElements = [];\n        this.collectedLeaveElements = [];\n        this.onRemovalComplete = function (element, context) { };\n    }\n    /** @internal */\n    /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._onRemovalComplete = /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    function (element, context) { this.onRemovalComplete(element, context); };\n    Object.defineProperty(TransitionAnimationEngine.prototype, \"queuedPlayers\", {\n        get: /**\n         * @return {?}\n         */\n        function () {\n            var /** @type {?} */ players = [];\n            this._namespaceList.forEach(function (ns) {\n                ns.players.forEach(function (player) {\n                    if (player.queued) {\n                        players.push(player);\n                    }\n                });\n            });\n            return players;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.createNamespace = /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    function (namespaceId, hostElement) {\n        var /** @type {?} */ ns = new AnimationTransitionNamespace(namespaceId, hostElement, this);\n        if (hostElement.parentNode) {\n            this._balanceNamespaceList(ns, hostElement);\n        }\n        else {\n            // defer this later until flush during when the host element has\n            // been inserted so that we know exactly where to place it in\n            // the namespace list\n            this.newHostElements.set(hostElement, ns);\n            // given that this host element is apart of the animation code, it\n            // may or may not be inserted by a parent node that is an of an\n            // animation renderer type. If this happens then we can still have\n            // access to this item when we query for :enter nodes. If the parent\n            // is a renderer then the set data-structure will normalize the entry\n            this.collectEnterElement(hostElement);\n        }\n        return this._namespaceLookup[namespaceId] = ns;\n    };\n    /**\n     * @param {?} ns\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._balanceNamespaceList = /**\n     * @param {?} ns\n     * @param {?} hostElement\n     * @return {?}\n     */\n    function (ns, hostElement) {\n        var /** @type {?} */ limit = this._namespaceList.length - 1;\n        if (limit >= 0) {\n            var /** @type {?} */ found = false;\n            for (var /** @type {?} */ i = limit; i >= 0; i--) {\n                var /** @type {?} */ nextNamespace = this._namespaceList[i];\n                if (this.driver.containsElement(nextNamespace.hostElement, hostElement)) {\n                    this._namespaceList.splice(i + 1, 0, ns);\n                    found = true;\n                    break;\n                }\n            }\n            if (!found) {\n                this._namespaceList.splice(0, 0, ns);\n            }\n        }\n        else {\n            this._namespaceList.push(ns);\n        }\n        this.namespacesByHostElement.set(hostElement, ns);\n        return ns;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.register = /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    function (namespaceId, hostElement) {\n        var /** @type {?} */ ns = this._namespaceLookup[namespaceId];\n        if (!ns) {\n            ns = this.createNamespace(namespaceId, hostElement);\n        }\n        return ns;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} name\n     * @param {?} trigger\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.registerTrigger = /**\n     * @param {?} namespaceId\n     * @param {?} name\n     * @param {?} trigger\n     * @return {?}\n     */\n    function (namespaceId, name, trigger) {\n        var /** @type {?} */ ns = this._namespaceLookup[namespaceId];\n        if (ns && ns.register(name, trigger)) {\n            this.totalAnimations++;\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.destroy = /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    function (namespaceId, context) {\n        var _this = this;\n        if (!namespaceId)\n            return;\n        var /** @type {?} */ ns = this._fetchNamespace(namespaceId);\n        this.afterFlush(function () {\n            _this.namespacesByHostElement.delete(ns.hostElement);\n            delete _this._namespaceLookup[namespaceId];\n            var /** @type {?} */ index = _this._namespaceList.indexOf(ns);\n            if (index >= 0) {\n                _this._namespaceList.splice(index, 1);\n            }\n        });\n        this.afterFlushAnimationsDone(function () { return ns.destroy(context); });\n    };\n    /**\n     * @param {?} id\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._fetchNamespace = /**\n     * @param {?} id\n     * @return {?}\n     */\n    function (id) { return this._namespaceLookup[id]; };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.fetchNamespacesByElement = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        // normally there should only be one namespace per element, however\n        // if @triggers are placed on both the component element and then\n        // its host element (within the component code) then there will be\n        // two namespaces returned. We use a set here to simply the dedupe\n        // of namespaces incase there are multiple triggers both the elm and host\n        var /** @type {?} */ namespaces = new Set();\n        var /** @type {?} */ elementStates = this.statesByElement.get(element);\n        if (elementStates) {\n            var /** @type {?} */ keys = Object.keys(elementStates);\n            for (var /** @type {?} */ i = 0; i < keys.length; i++) {\n                var /** @type {?} */ nsId = elementStates[keys[i]].namespaceId;\n                if (nsId) {\n                    var /** @type {?} */ ns = this._fetchNamespace(nsId);\n                    if (ns) {\n                        namespaces.add(ns);\n                    }\n                }\n            }\n        }\n        return namespaces;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.trigger = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} value\n     * @return {?}\n     */\n    function (namespaceId, element, name, value) {\n        if (isElementNode(element)) {\n            this._fetchNamespace(namespaceId).trigger(element, name, value);\n            return true;\n        }\n        return false;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.insertNode = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    function (namespaceId, element, parent, insertBefore) {\n        if (!isElementNode(element))\n            return;\n        // special case for when an element is removed and reinserted (move operation)\n        // when this occurs we do not want to use the element for deletion later\n        var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n        if (details && details.setForRemoval) {\n            details.setForRemoval = false;\n        }\n        // in the event that the namespaceId is blank then the caller\n        // code does not contain any animation code in it, but it is\n        // just being called so that the node is marked as being inserted\n        if (namespaceId) {\n            var /** @type {?} */ ns = this._fetchNamespace(namespaceId);\n            // This if-statement is a workaround for router issue #21947.\n            // The router sometimes hits a race condition where while a route\n            // is being instantiated a new navigation arrives, triggering leave\n            // animation of DOM that has not been fully initialized, until this\n            // is resolved, we need to handle the scenario when DOM is not in a\n            // consistent state during the animation.\n            if (ns) {\n                ns.insertNode(element, parent);\n            }\n        }\n        // only *directives and host elements are inserted before\n        if (insertBefore) {\n            this.collectEnterElement(element);\n        }\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.collectEnterElement = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) { this.collectedEnterElements.push(element); };\n    /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.markElementAsDisabled = /**\n     * @param {?} element\n     * @param {?} value\n     * @return {?}\n     */\n    function (element, value) {\n        if (value) {\n            if (!this.disabledNodes.has(element)) {\n                this.disabledNodes.add(element);\n                addClass(element, DISABLED_CLASSNAME);\n            }\n        }\n        else if (this.disabledNodes.has(element)) {\n            this.disabledNodes.delete(element);\n            removeClass(element, DISABLED_CLASSNAME);\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.removeNode = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    function (namespaceId, element, context) {\n        if (!isElementNode(element)) {\n            this._onRemovalComplete(element, context);\n            return;\n        }\n        var /** @type {?} */ ns = namespaceId ? this._fetchNamespace(namespaceId) : null;\n        if (ns) {\n            ns.removeNode(element, context);\n        }\n        else {\n            this.markElementAsRemoved(namespaceId, element, false, context);\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?=} hasAnimation\n     * @param {?=} context\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.markElementAsRemoved = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?=} hasAnimation\n     * @param {?=} context\n     * @return {?}\n     */\n    function (namespaceId, element, hasAnimation, context) {\n        this.collectedLeaveElements.push(element);\n        element[REMOVAL_FLAG] = {\n            namespaceId: namespaceId,\n            setForRemoval: context, hasAnimation: hasAnimation,\n            removedBeforeQueried: false\n        };\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} phase\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.listen = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} name\n     * @param {?} phase\n     * @param {?} callback\n     * @return {?}\n     */\n    function (namespaceId, element, name, phase, callback) {\n        if (isElementNode(element)) {\n            return this._fetchNamespace(namespaceId).listen(element, name, phase, callback);\n        }\n        return function () { };\n    };\n    /**\n     * @param {?} entry\n     * @param {?} subTimelines\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildInstruction = /**\n     * @param {?} entry\n     * @param {?} subTimelines\n     * @param {?} enterClassName\n     * @param {?} leaveClassName\n     * @return {?}\n     */\n    function (entry, subTimelines, enterClassName, leaveClassName) {\n        return entry.transition.build(this.driver, entry.element, entry.fromState.value, entry.toState.value, enterClassName, leaveClassName, entry.fromState.options, entry.toState.options, subTimelines);\n    };\n    /**\n     * @param {?} containerElement\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.destroyInnerAnimations = /**\n     * @param {?} containerElement\n     * @return {?}\n     */\n    function (containerElement) {\n        var _this = this;\n        var /** @type {?} */ elements = this.driver.query(containerElement, NG_TRIGGER_SELECTOR, true);\n        elements.forEach(function (element) { return _this.destroyActiveAnimationsForElement(element); });\n        if (this.playersByQueriedElement.size == 0)\n            return;\n        elements = this.driver.query(containerElement, NG_ANIMATING_SELECTOR, true);\n        elements.forEach(function (element) { return _this.finishActiveQueriedAnimationOnElement(element); });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.destroyActiveAnimationsForElement = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var /** @type {?} */ players = this.playersByElement.get(element);\n        if (players) {\n            players.forEach(function (player) {\n                // special case for when an element is set for destruction, but hasn't started.\n                // in this situation we want to delay the destruction until the flush occurs\n                // so that any event listeners attached to the player are triggered.\n                if (player.queued) {\n                    player.markedForDestroy = true;\n                }\n                else {\n                    player.destroy();\n                }\n            });\n        }\n        var /** @type {?} */ stateMap = this.statesByElement.get(element);\n        if (stateMap) {\n            Object.keys(stateMap).forEach(function (triggerName) { return stateMap[triggerName] = DELETED_STATE_VALUE; });\n        }\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.finishActiveQueriedAnimationOnElement = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var /** @type {?} */ players = this.playersByQueriedElement.get(element);\n        if (players) {\n            players.forEach(function (player) { return player.finish(); });\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.whenRenderingDone = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        return new Promise(function (resolve) {\n            if (_this.players.length) {\n                return optimizeGroupPlayer(_this.players).onDone(function () { return resolve(); });\n            }\n            else {\n                resolve();\n            }\n        });\n    };\n    /**\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.processLeaveNode = /**\n     * @param {?} element\n     * @return {?}\n     */\n    function (element) {\n        var _this = this;\n        var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n        if (details && details.setForRemoval) {\n            // this will prevent it from removing it twice\n            element[REMOVAL_FLAG] = NULL_REMOVAL_STATE;\n            if (details.namespaceId) {\n                this.destroyInnerAnimations(element);\n                var /** @type {?} */ ns = this._fetchNamespace(details.namespaceId);\n                if (ns) {\n                    ns.clearElementCache(element);\n                }\n            }\n            this._onRemovalComplete(element, details.setForRemoval);\n        }\n        if (this.driver.matchesElement(element, DISABLED_SELECTOR)) {\n            this.markElementAsDisabled(element, false);\n        }\n        this.driver.query(element, DISABLED_SELECTOR, true).forEach(function (node) {\n            _this.markElementAsDisabled(element, false);\n        });\n    };\n    /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.flush = /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    function (microtaskId) {\n        var _this = this;\n        if (microtaskId === void 0) { microtaskId = -1; }\n        var /** @type {?} */ players = [];\n        if (this.newHostElements.size) {\n            this.newHostElements.forEach(function (ns, element) { return _this._balanceNamespaceList(ns, element); });\n            this.newHostElements.clear();\n        }\n        if (this.totalAnimations && this.collectedEnterElements.length) {\n            for (var /** @type {?} */ i = 0; i < this.collectedEnterElements.length; i++) {\n                var /** @type {?} */ elm = this.collectedEnterElements[i];\n                addClass(elm, STAR_CLASSNAME);\n            }\n        }\n        if (this._namespaceList.length &&\n            (this.totalQueuedPlayers || this.collectedLeaveElements.length)) {\n            var /** @type {?} */ cleanupFns = [];\n            try {\n                players = this._flushAnimations(cleanupFns, microtaskId);\n            }\n            finally {\n                for (var /** @type {?} */ i = 0; i < cleanupFns.length; i++) {\n                    cleanupFns[i]();\n                }\n            }\n        }\n        else {\n            for (var /** @type {?} */ i = 0; i < this.collectedLeaveElements.length; i++) {\n                var /** @type {?} */ element = this.collectedLeaveElements[i];\n                this.processLeaveNode(element);\n            }\n        }\n        this.totalQueuedPlayers = 0;\n        this.collectedEnterElements.length = 0;\n        this.collectedLeaveElements.length = 0;\n        this._flushFns.forEach(function (fn) { return fn(); });\n        this._flushFns = [];\n        if (this._whenQuietFns.length) {\n            // we move these over to a variable so that\n            // if any new callbacks are registered in another\n            // flush they do not populate the existing set\n            var /** @type {?} */ quietFns_1 = this._whenQuietFns;\n            this._whenQuietFns = [];\n            if (players.length) {\n                optimizeGroupPlayer(players).onDone(function () { quietFns_1.forEach(function (fn) { return fn(); }); });\n            }\n            else {\n                quietFns_1.forEach(function (fn) { return fn(); });\n            }\n        }\n    };\n    /**\n     * @param {?} errors\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.reportError = /**\n     * @param {?} errors\n     * @return {?}\n     */\n    function (errors) {\n        throw new Error(\"Unable to process animations due to the following failed trigger transitions\\n \" + errors.join('\\n'));\n    };\n    /**\n     * @param {?} cleanupFns\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._flushAnimations = /**\n     * @param {?} cleanupFns\n     * @param {?} microtaskId\n     * @return {?}\n     */\n    function (cleanupFns, microtaskId) {\n        var _this = this;\n        var /** @type {?} */ subTimelines = new ElementInstructionMap();\n        var /** @type {?} */ skippedPlayers = [];\n        var /** @type {?} */ skippedPlayersMap = new Map();\n        var /** @type {?} */ queuedInstructions = [];\n        var /** @type {?} */ queriedElements = new Map();\n        var /** @type {?} */ allPreStyleElements = new Map();\n        var /** @type {?} */ allPostStyleElements = new Map();\n        var /** @type {?} */ disabledElementsSet = new Set();\n        this.disabledNodes.forEach(function (node) {\n            disabledElementsSet.add(node);\n            var /** @type {?} */ nodesThatAreDisabled = _this.driver.query(node, QUEUED_SELECTOR, true);\n            for (var /** @type {?} */ i_1 = 0; i_1 < nodesThatAreDisabled.length; i_1++) {\n                disabledElementsSet.add(nodesThatAreDisabled[i_1]);\n            }\n        });\n        var /** @type {?} */ bodyNode = getBodyNode();\n        var /** @type {?} */ allTriggerElements = Array.from(this.statesByElement.keys());\n        var /** @type {?} */ enterNodeMap = buildRootMap(allTriggerElements, this.collectedEnterElements);\n        // this must occur before the instructions are built below such that\n        // the :enter queries match the elements (since the timeline queries\n        // are fired during instruction building).\n        var /** @type {?} */ enterNodeMapIds = new Map();\n        var /** @type {?} */ i = 0;\n        enterNodeMap.forEach(function (nodes, root) {\n            var /** @type {?} */ className = ENTER_CLASSNAME + i++;\n            enterNodeMapIds.set(root, className);\n            nodes.forEach(function (node) { return addClass(node, className); });\n        });\n        var /** @type {?} */ allLeaveNodes = [];\n        var /** @type {?} */ mergedLeaveNodes = new Set();\n        var /** @type {?} */ leaveNodesWithoutAnimations = new Set();\n        for (var /** @type {?} */ i_2 = 0; i_2 < this.collectedLeaveElements.length; i_2++) {\n            var /** @type {?} */ element = this.collectedLeaveElements[i_2];\n            var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n            if (details && details.setForRemoval) {\n                allLeaveNodes.push(element);\n                mergedLeaveNodes.add(element);\n                if (details.hasAnimation) {\n                    this.driver.query(element, STAR_SELECTOR, true).forEach(function (elm) { return mergedLeaveNodes.add(elm); });\n                }\n                else {\n                    leaveNodesWithoutAnimations.add(element);\n                }\n            }\n        }\n        var /** @type {?} */ leaveNodeMapIds = new Map();\n        var /** @type {?} */ leaveNodeMap = buildRootMap(allTriggerElements, Array.from(mergedLeaveNodes));\n        leaveNodeMap.forEach(function (nodes, root) {\n            var /** @type {?} */ className = LEAVE_CLASSNAME + i++;\n            leaveNodeMapIds.set(root, className);\n            nodes.forEach(function (node) { return addClass(node, className); });\n        });\n        cleanupFns.push(function () {\n            enterNodeMap.forEach(function (nodes, root) {\n                var /** @type {?} */ className = /** @type {?} */ ((enterNodeMapIds.get(root)));\n                nodes.forEach(function (node) { return removeClass(node, className); });\n            });\n            leaveNodeMap.forEach(function (nodes, root) {\n                var /** @type {?} */ className = /** @type {?} */ ((leaveNodeMapIds.get(root)));\n                nodes.forEach(function (node) { return removeClass(node, className); });\n            });\n            allLeaveNodes.forEach(function (element) { _this.processLeaveNode(element); });\n        });\n        var /** @type {?} */ allPlayers = [];\n        var /** @type {?} */ erroneousTransitions = [];\n        for (var /** @type {?} */ i_3 = this._namespaceList.length - 1; i_3 >= 0; i_3--) {\n            var /** @type {?} */ ns = this._namespaceList[i_3];\n            ns.drainQueuedTransitions(microtaskId).forEach(function (entry) {\n                var /** @type {?} */ player = entry.player;\n                allPlayers.push(player);\n                var /** @type {?} */ element = entry.element;\n                if (!bodyNode || !_this.driver.containsElement(bodyNode, element)) {\n                    player.destroy();\n                    return;\n                }\n                var /** @type {?} */ leaveClassName = /** @type {?} */ ((leaveNodeMapIds.get(element)));\n                var /** @type {?} */ enterClassName = /** @type {?} */ ((enterNodeMapIds.get(element)));\n                var /** @type {?} */ instruction = /** @type {?} */ ((_this._buildInstruction(entry, subTimelines, enterClassName, leaveClassName)));\n                if (instruction.errors && instruction.errors.length) {\n                    erroneousTransitions.push(instruction);\n                    return;\n                }\n                // if a unmatched transition is queued to go then it SHOULD NOT render\n                // an animation and cancel the previously running animations.\n                if (entry.isFallbackTransition) {\n                    player.onStart(function () { return eraseStyles(element, instruction.fromStyles); });\n                    player.onDestroy(function () { return setStyles(element, instruction.toStyles); });\n                    skippedPlayers.push(player);\n                    return;\n                }\n                // this means that if a parent animation uses this animation as a sub trigger\n                // then it will instruct the timeline builder to not add a player delay, but\n                // instead stretch the first keyframe gap up until the animation starts. The\n                // reason this is important is to prevent extra initialization styles from being\n                // required by the user in the animation.\n                instruction.timelines.forEach(function (tl) { return tl.stretchStartingKeyframe = true; });\n                subTimelines.append(element, instruction.timelines);\n                var /** @type {?} */ tuple = { instruction: instruction, player: player, element: element };\n                queuedInstructions.push(tuple);\n                instruction.queriedElements.forEach(function (element) { return getOrSetAsInMap(queriedElements, element, []).push(player); });\n                instruction.preStyleProps.forEach(function (stringMap, element) {\n                    var /** @type {?} */ props = Object.keys(stringMap);\n                    if (props.length) {\n                        var /** @type {?} */ setVal_1 = /** @type {?} */ ((allPreStyleElements.get(element)));\n                        if (!setVal_1) {\n                            allPreStyleElements.set(element, setVal_1 = new Set());\n                        }\n                        props.forEach(function (prop) { return setVal_1.add(prop); });\n                    }\n                });\n                instruction.postStyleProps.forEach(function (stringMap, element) {\n                    var /** @type {?} */ props = Object.keys(stringMap);\n                    var /** @type {?} */ setVal = /** @type {?} */ ((allPostStyleElements.get(element)));\n                    if (!setVal) {\n                        allPostStyleElements.set(element, setVal = new Set());\n                    }\n                    props.forEach(function (prop) { return setVal.add(prop); });\n                });\n            });\n        }\n        if (erroneousTransitions.length) {\n            var /** @type {?} */ errors_1 = [];\n            erroneousTransitions.forEach(function (instruction) {\n                errors_1.push(\"@\" + instruction.triggerName + \" has failed due to:\\n\"); /** @type {?} */\n                ((instruction.errors)).forEach(function (error) { return errors_1.push(\"- \" + error + \"\\n\"); });\n            });\n            allPlayers.forEach(function (player) { return player.destroy(); });\n            this.reportError(errors_1);\n        }\n        var /** @type {?} */ allPreviousPlayersMap = new Map();\n        // this map works to tell which element in the DOM tree is contained by\n        // which animation. Further down below this map will get populated once\n        // the players are built and in doing so it can efficiently figure out\n        // if a sub player is skipped due to a parent player having priority.\n        var /** @type {?} */ animationElementMap = new Map();\n        queuedInstructions.forEach(function (entry) {\n            var /** @type {?} */ element = entry.element;\n            if (subTimelines.has(element)) {\n                animationElementMap.set(element, element);\n                _this._beforeAnimationBuild(entry.player.namespaceId, entry.instruction, allPreviousPlayersMap);\n            }\n        });\n        skippedPlayers.forEach(function (player) {\n            var /** @type {?} */ element = player.element;\n            var /** @type {?} */ previousPlayers = _this._getPreviousPlayers(element, false, player.namespaceId, player.triggerName, null);\n            previousPlayers.forEach(function (prevPlayer) {\n                getOrSetAsInMap(allPreviousPlayersMap, element, []).push(prevPlayer);\n                prevPlayer.destroy();\n            });\n        });\n        // this is a special case for nodes that will be removed (either by)\n        // having their own leave animations or by being queried in a container\n        // that will be removed once a parent animation is complete. The idea\n        // here is that * styles must be identical to ! styles because of\n        // backwards compatibility (* is also filled in by default in many places).\n        // Otherwise * styles will return an empty value or auto since the element\n        // that is being getComputedStyle'd will not be visible (since * = destination)\n        var /** @type {?} */ replaceNodes = allLeaveNodes.filter(function (node) {\n            return replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements);\n        });\n        // POST STAGE: fill the * styles\n        var /** @type {?} */ postStylesMap = new Map();\n        var /** @type {?} */ allLeaveQueriedNodes = cloakAndComputeStyles(postStylesMap, this.driver, leaveNodesWithoutAnimations, allPostStyleElements, AUTO_STYLE);\n        allLeaveQueriedNodes.forEach(function (node) {\n            if (replacePostStylesAsPre(node, allPreStyleElements, allPostStyleElements)) {\n                replaceNodes.push(node);\n            }\n        });\n        // PRE STAGE: fill the ! styles\n        var /** @type {?} */ preStylesMap = new Map();\n        enterNodeMap.forEach(function (nodes, root) {\n            cloakAndComputeStyles(preStylesMap, _this.driver, new Set(nodes), allPreStyleElements, ɵPRE_STYLE);\n        });\n        replaceNodes.forEach(function (node) {\n            var /** @type {?} */ post = postStylesMap.get(node);\n            var /** @type {?} */ pre = preStylesMap.get(node);\n            postStylesMap.set(node, /** @type {?} */ (__assign({}, post, pre)));\n        });\n        var /** @type {?} */ rootPlayers = [];\n        var /** @type {?} */ subPlayers = [];\n        var /** @type {?} */ NO_PARENT_ANIMATION_ELEMENT_DETECTED = {};\n        queuedInstructions.forEach(function (entry) {\n            var element = entry.element, player = entry.player, instruction = entry.instruction;\n            // this means that it was never consumed by a parent animation which\n            // means that it is independent and therefore should be set for animation\n            if (subTimelines.has(element)) {\n                if (disabledElementsSet.has(element)) {\n                    player.onDestroy(function () { return setStyles(element, instruction.toStyles); });\n                    skippedPlayers.push(player);\n                    return;\n                }\n                // this will flow up the DOM and query the map to figure out\n                // if a parent animation has priority over it. In the situation\n                // that a parent is detected then it will cancel the loop. If\n                // nothing is detected, or it takes a few hops to find a parent,\n                // then it will fill in the missing nodes and signal them as having\n                // a detected parent (or a NO_PARENT value via a special constant).\n                var /** @type {?} */ parentWithAnimation_1 = NO_PARENT_ANIMATION_ELEMENT_DETECTED;\n                if (animationElementMap.size > 1) {\n                    var /** @type {?} */ elm = element;\n                    var /** @type {?} */ parentsToAdd = [];\n                    while (elm = elm.parentNode) {\n                        var /** @type {?} */ detectedParent = animationElementMap.get(elm);\n                        if (detectedParent) {\n                            parentWithAnimation_1 = detectedParent;\n                            break;\n                        }\n                        parentsToAdd.push(elm);\n                    }\n                    parentsToAdd.forEach(function (parent) { return animationElementMap.set(parent, parentWithAnimation_1); });\n                }\n                var /** @type {?} */ innerPlayer = _this._buildAnimation(player.namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap);\n                player.setRealPlayer(innerPlayer);\n                if (parentWithAnimation_1 === NO_PARENT_ANIMATION_ELEMENT_DETECTED) {\n                    rootPlayers.push(player);\n                }\n                else {\n                    var /** @type {?} */ parentPlayers = _this.playersByElement.get(parentWithAnimation_1);\n                    if (parentPlayers && parentPlayers.length) {\n                        player.parentPlayer = optimizeGroupPlayer(parentPlayers);\n                    }\n                    skippedPlayers.push(player);\n                }\n            }\n            else {\n                eraseStyles(element, instruction.fromStyles);\n                player.onDestroy(function () { return setStyles(element, instruction.toStyles); });\n                // there still might be a ancestor player animating this\n                // element therefore we will still add it as a sub player\n                // even if its animation may be disabled\n                subPlayers.push(player);\n                if (disabledElementsSet.has(element)) {\n                    skippedPlayers.push(player);\n                }\n            }\n        });\n        // find all of the sub players' corresponding inner animation player\n        subPlayers.forEach(function (player) {\n            // even if any players are not found for a sub animation then it\n            // will still complete itself after the next tick since it's Noop\n            var /** @type {?} */ playersForElement = skippedPlayersMap.get(player.element);\n            if (playersForElement && playersForElement.length) {\n                var /** @type {?} */ innerPlayer = optimizeGroupPlayer(playersForElement);\n                player.setRealPlayer(innerPlayer);\n            }\n        });\n        // the reason why we don't actually play the animation is\n        // because all that a skipped player is designed to do is to\n        // fire the start/done transition callback events\n        skippedPlayers.forEach(function (player) {\n            if (player.parentPlayer) {\n                player.syncPlayerEvents(player.parentPlayer);\n            }\n            else {\n                player.destroy();\n            }\n        });\n        // run through all of the queued removals and see if they\n        // were picked up by a query. If not then perform the removal\n        // operation right away unless a parent animation is ongoing.\n        for (var /** @type {?} */ i_4 = 0; i_4 < allLeaveNodes.length; i_4++) {\n            var /** @type {?} */ element = allLeaveNodes[i_4];\n            var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n            removeClass(element, LEAVE_CLASSNAME);\n            // this means the element has a removal animation that is being\n            // taken care of and therefore the inner elements will hang around\n            // until that animation is over (or the parent queried animation)\n            if (details && details.hasAnimation)\n                continue;\n            var /** @type {?} */ players = [];\n            // if this element is queried or if it contains queried children\n            // then we want for the element not to be removed from the page\n            // until the queried animations have finished\n            if (queriedElements.size) {\n                var /** @type {?} */ queriedPlayerResults = queriedElements.get(element);\n                if (queriedPlayerResults && queriedPlayerResults.length) {\n                    players.push.apply(players, queriedPlayerResults);\n                }\n                var /** @type {?} */ queriedInnerElements = this.driver.query(element, NG_ANIMATING_SELECTOR, true);\n                for (var /** @type {?} */ j = 0; j < queriedInnerElements.length; j++) {\n                    var /** @type {?} */ queriedPlayers = queriedElements.get(queriedInnerElements[j]);\n                    if (queriedPlayers && queriedPlayers.length) {\n                        players.push.apply(players, queriedPlayers);\n                    }\n                }\n            }\n            var /** @type {?} */ activePlayers = players.filter(function (p) { return !p.destroyed; });\n            if (activePlayers.length) {\n                removeNodesAfterAnimationDone(this, element, activePlayers);\n            }\n            else {\n                this.processLeaveNode(element);\n            }\n        }\n        // this is required so the cleanup method doesn't remove them\n        allLeaveNodes.length = 0;\n        rootPlayers.forEach(function (player) {\n            _this.players.push(player);\n            player.onDone(function () {\n                player.destroy();\n                var /** @type {?} */ index = _this.players.indexOf(player);\n                _this.players.splice(index, 1);\n            });\n            player.play();\n        });\n        return rootPlayers;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.elementContainsData = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @return {?}\n     */\n    function (namespaceId, element) {\n        var /** @type {?} */ containsData = false;\n        var /** @type {?} */ details = /** @type {?} */ (element[REMOVAL_FLAG]);\n        if (details && details.setForRemoval)\n            containsData = true;\n        if (this.playersByElement.has(element))\n            containsData = true;\n        if (this.playersByQueriedElement.has(element))\n            containsData = true;\n        if (this.statesByElement.has(element))\n            containsData = true;\n        return this._fetchNamespace(namespaceId).elementContainsData(element) || containsData;\n    };\n    /**\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.afterFlush = /**\n     * @param {?} callback\n     * @return {?}\n     */\n    function (callback) { this._flushFns.push(callback); };\n    /**\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype.afterFlushAnimationsDone = /**\n     * @param {?} callback\n     * @return {?}\n     */\n    function (callback) { this._whenQuietFns.push(callback); };\n    /**\n     * @param {?} element\n     * @param {?} isQueriedElement\n     * @param {?=} namespaceId\n     * @param {?=} triggerName\n     * @param {?=} toStateValue\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._getPreviousPlayers = /**\n     * @param {?} element\n     * @param {?} isQueriedElement\n     * @param {?=} namespaceId\n     * @param {?=} triggerName\n     * @param {?=} toStateValue\n     * @return {?}\n     */\n    function (element, isQueriedElement, namespaceId, triggerName, toStateValue) {\n        var /** @type {?} */ players = [];\n        if (isQueriedElement) {\n            var /** @type {?} */ queriedElementPlayers = this.playersByQueriedElement.get(element);\n            if (queriedElementPlayers) {\n                players = queriedElementPlayers;\n            }\n        }\n        else {\n            var /** @type {?} */ elementPlayers = this.playersByElement.get(element);\n            if (elementPlayers) {\n                var /** @type {?} */ isRemovalAnimation_1 = !toStateValue || toStateValue == VOID_VALUE;\n                elementPlayers.forEach(function (player) {\n                    if (player.queued)\n                        return;\n                    if (!isRemovalAnimation_1 && player.triggerName != triggerName)\n                        return;\n                    players.push(player);\n                });\n            }\n        }\n        if (namespaceId || triggerName) {\n            players = players.filter(function (player) {\n                if (namespaceId && namespaceId != player.namespaceId)\n                    return false;\n                if (triggerName && triggerName != player.triggerName)\n                    return false;\n                return true;\n            });\n        }\n        return players;\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._beforeAnimationBuild = /**\n     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @return {?}\n     */\n    function (namespaceId, instruction, allPreviousPlayersMap) {\n        var /** @type {?} */ triggerName = instruction.triggerName;\n        var /** @type {?} */ rootElement = instruction.element;\n        // when a removal animation occurs, ALL previous players are collected\n        // and destroyed (even if they are outside of the current namespace)\n        var /** @type {?} */ targetNameSpaceId = instruction.isRemovalTransition ? undefined : namespaceId;\n        var /** @type {?} */ targetTriggerName = instruction.isRemovalTransition ? undefined : triggerName;\n        var _loop_1 = function (timelineInstruction) {\n            var /** @type {?} */ element = timelineInstruction.element;\n            var /** @type {?} */ isQueriedElement = element !== rootElement;\n            var /** @type {?} */ players = getOrSetAsInMap(allPreviousPlayersMap, element, []);\n            var /** @type {?} */ previousPlayers = this_1._getPreviousPlayers(element, isQueriedElement, targetNameSpaceId, targetTriggerName, instruction.toState);\n            previousPlayers.forEach(function (player) {\n                var /** @type {?} */ realPlayer = /** @type {?} */ (player.getRealPlayer());\n                if (realPlayer.beforeDestroy) {\n                    realPlayer.beforeDestroy();\n                }\n                player.destroy();\n                players.push(player);\n            });\n        };\n        var this_1 = this;\n        for (var _i = 0, _a = instruction.timelines; _i < _a.length; _i++) {\n            var timelineInstruction = _a[_i];\n            _loop_1(timelineInstruction);\n        }\n        // this needs to be done so that the PRE/POST styles can be\n        // computed properly without interfering with the previous animation\n        eraseStyles(rootElement, instruction.fromStyles);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @param {?} skippedPlayersMap\n     * @param {?} preStylesMap\n     * @param {?} postStylesMap\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildAnimation = /**\n     * @param {?} namespaceId\n     * @param {?} instruction\n     * @param {?} allPreviousPlayersMap\n     * @param {?} skippedPlayersMap\n     * @param {?} preStylesMap\n     * @param {?} postStylesMap\n     * @return {?}\n     */\n    function (namespaceId, instruction, allPreviousPlayersMap, skippedPlayersMap, preStylesMap, postStylesMap) {\n        var _this = this;\n        var /** @type {?} */ triggerName = instruction.triggerName;\n        var /** @type {?} */ rootElement = instruction.element;\n        // we first run this so that the previous animation player\n        // data can be passed into the successive animation players\n        var /** @type {?} */ allQueriedPlayers = [];\n        var /** @type {?} */ allConsumedElements = new Set();\n        var /** @type {?} */ allSubElements = new Set();\n        var /** @type {?} */ allNewPlayers = instruction.timelines.map(function (timelineInstruction) {\n            var /** @type {?} */ element = timelineInstruction.element;\n            allConsumedElements.add(element);\n            // FIXME (matsko): make sure to-be-removed animations are removed properly\n            var /** @type {?} */ details = element[REMOVAL_FLAG];\n            if (details && details.removedBeforeQueried)\n                return new NoopAnimationPlayer();\n            var /** @type {?} */ isQueriedElement = element !== rootElement;\n            var /** @type {?} */ previousPlayers = flattenGroupPlayers((allPreviousPlayersMap.get(element) || EMPTY_PLAYER_ARRAY)\n                .map(function (p) { return p.getRealPlayer(); }))\n                .filter(function (p) {\n                // the `element` is not apart of the AnimationPlayer definition, but\n                // Mock/WebAnimations\n                // use the element within their implementation. This will be added in Angular5 to\n                // AnimationPlayer\n                var /** @type {?} */ pp = /** @type {?} */ (p);\n                return pp.element ? pp.element === element : false;\n            });\n            var /** @type {?} */ preStyles = preStylesMap.get(element);\n            var /** @type {?} */ postStyles = postStylesMap.get(element);\n            var /** @type {?} */ keyframes = normalizeKeyframes(_this.driver, _this._normalizer, element, timelineInstruction.keyframes, preStyles, postStyles);\n            var /** @type {?} */ player = _this._buildPlayer(timelineInstruction, keyframes, previousPlayers);\n            // this means that this particular player belongs to a sub trigger. It is\n            // important that we match this player up with the corresponding (@trigger.listener)\n            if (timelineInstruction.subTimeline && skippedPlayersMap) {\n                allSubElements.add(element);\n            }\n            if (isQueriedElement) {\n                var /** @type {?} */ wrappedPlayer = new TransitionAnimationPlayer(namespaceId, triggerName, element);\n                wrappedPlayer.setRealPlayer(player);\n                allQueriedPlayers.push(wrappedPlayer);\n            }\n            return player;\n        });\n        allQueriedPlayers.forEach(function (player) {\n            getOrSetAsInMap(_this.playersByQueriedElement, player.element, []).push(player);\n            player.onDone(function () { return deleteOrUnsetInMap(_this.playersByQueriedElement, player.element, player); });\n        });\n        allConsumedElements.forEach(function (element) { return addClass(element, NG_ANIMATING_CLASSNAME); });\n        var /** @type {?} */ player = optimizeGroupPlayer(allNewPlayers);\n        player.onDestroy(function () {\n            allConsumedElements.forEach(function (element) { return removeClass(element, NG_ANIMATING_CLASSNAME); });\n            setStyles(rootElement, instruction.toStyles);\n        });\n        // this basically makes all of the callbacks for sub element animations\n        // be dependent on the upper players for when they finish\n        allSubElements.forEach(function (element) { getOrSetAsInMap(skippedPlayersMap, element, []).push(player); });\n        return player;\n    };\n    /**\n     * @param {?} instruction\n     * @param {?} keyframes\n     * @param {?} previousPlayers\n     * @return {?}\n     */\n    TransitionAnimationEngine.prototype._buildPlayer = /**\n     * @param {?} instruction\n     * @param {?} keyframes\n     * @param {?} previousPlayers\n     * @return {?}\n     */\n    function (instruction, keyframes, previousPlayers) {\n        if (keyframes.length > 0) {\n            return this.driver.animate(instruction.element, keyframes, instruction.duration, instruction.delay, instruction.easing, previousPlayers);\n        }\n        // special case for when an empty transition|definition is provided\n        // ... there is no point in rendering an empty animation\n        return new NoopAnimationPlayer();\n    };\n    return TransitionAnimationEngine;\n}());\nvar TransitionAnimationPlayer = /** @class */ (function () {\n    function TransitionAnimationPlayer(namespaceId, triggerName, element) {\n        this.namespaceId = namespaceId;\n        this.triggerName = triggerName;\n        this.element = element;\n        this._player = new NoopAnimationPlayer();\n        this._containsRealPlayer = false;\n        this._queuedCallbacks = {};\n        this.destroyed = false;\n        this.markedForDestroy = false;\n        this.queued = true;\n    }\n    /**\n     * @param {?} player\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.setRealPlayer = /**\n     * @param {?} player\n     * @return {?}\n     */\n    function (player) {\n        var _this = this;\n        if (this._containsRealPlayer)\n            return;\n        this._player = player;\n        Object.keys(this._queuedCallbacks).forEach(function (phase) {\n            _this._queuedCallbacks[phase].forEach(function (callback) { return listenOnPlayer(player, phase, undefined, callback); });\n        });\n        this._queuedCallbacks = {};\n        this._containsRealPlayer = true;\n        (/** @type {?} */ (this)).queued = false;\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.getRealPlayer = /**\n     * @return {?}\n     */\n    function () { return this._player; };\n    /**\n     * @param {?} player\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.syncPlayerEvents = /**\n     * @param {?} player\n     * @return {?}\n     */\n    function (player) {\n        var _this = this;\n        var /** @type {?} */ p = /** @type {?} */ (this._player);\n        if (p.triggerCallback) {\n            player.onStart(function () { return p.triggerCallback('start'); });\n        }\n        player.onDone(function () { return _this.finish(); });\n        player.onDestroy(function () { return _this.destroy(); });\n    };\n    /**\n     * @param {?} name\n     * @param {?} callback\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype._queueEvent = /**\n     * @param {?} name\n     * @param {?} callback\n     * @return {?}\n     */\n    function (name, callback) {\n        getOrSetAsInMap(this._queuedCallbacks, name, []).push(callback);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.onDone = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) {\n        if (this.queued) {\n            this._queueEvent('done', fn);\n        }\n        this._player.onDone(fn);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.onStart = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) {\n        if (this.queued) {\n            this._queueEvent('start', fn);\n        }\n        this._player.onStart(fn);\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.onDestroy = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) {\n        if (this.queued) {\n            this._queueEvent('destroy', fn);\n        }\n        this._player.onDestroy(fn);\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.init = /**\n     * @return {?}\n     */\n    function () { this._player.init(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.hasStarted = /**\n     * @return {?}\n     */\n    function () { return this.queued ? false : this._player.hasStarted(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.play = /**\n     * @return {?}\n     */\n    function () { !this.queued && this._player.play(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.pause = /**\n     * @return {?}\n     */\n    function () { !this.queued && this._player.pause(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.restart = /**\n     * @return {?}\n     */\n    function () { !this.queued && this._player.restart(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.finish = /**\n     * @return {?}\n     */\n    function () { this._player.finish(); };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.destroy = /**\n     * @return {?}\n     */\n    function () {\n        (/** @type {?} */ (this)).destroyed = true;\n        this._player.destroy();\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.reset = /**\n     * @return {?}\n     */\n    function () { !this.queued && this._player.reset(); };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.setPosition = /**\n     * @param {?} p\n     * @return {?}\n     */\n    function (p) {\n        if (!this.queued) {\n            this._player.setPosition(p);\n        }\n    };\n    /**\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.getPosition = /**\n     * @return {?}\n     */\n    function () { return this.queued ? 0 : this._player.getPosition(); };\n    Object.defineProperty(TransitionAnimationPlayer.prototype, \"totalTime\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this._player.totalTime; },\n        enumerable: true,\n        configurable: true\n    });\n    /* @internal */\n    /**\n     * @param {?} phaseName\n     * @return {?}\n     */\n    TransitionAnimationPlayer.prototype.triggerCallback = /**\n     * @param {?} phaseName\n     * @return {?}\n     */\n    function (phaseName) {\n        var /** @type {?} */ p = /** @type {?} */ (this._player);\n        if (p.triggerCallback) {\n            p.triggerCallback(phaseName);\n        }\n    };\n    return TransitionAnimationPlayer;\n}());\n/**\n * @param {?} map\n * @param {?} key\n * @param {?} value\n * @return {?}\n */\nfunction deleteOrUnsetInMap(map, key, value) {\n    var /** @type {?} */ currentValues;\n    if (map instanceof Map) {\n        currentValues = map.get(key);\n        if (currentValues) {\n            if (currentValues.length) {\n                var /** @type {?} */ index = currentValues.indexOf(value);\n                currentValues.splice(index, 1);\n            }\n            if (currentValues.length == 0) {\n                map.delete(key);\n            }\n        }\n    }\n    else {\n        currentValues = map[key];\n        if (currentValues) {\n            if (currentValues.length) {\n                var /** @type {?} */ index = currentValues.indexOf(value);\n                currentValues.splice(index, 1);\n            }\n            if (currentValues.length == 0) {\n                delete map[key];\n            }\n        }\n    }\n    return currentValues;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nfunction normalizeTriggerValue(value) {\n    // we use `!= null` here because it's the most simple\n    // way to test against a \"falsy\" value without mixing\n    // in empty strings or a zero value. DO NOT OPTIMIZE.\n    return value != null ? value : null;\n}\n/**\n * @param {?} node\n * @return {?}\n */\nfunction isElementNode(node) {\n    return node && node['nodeType'] === 1;\n}\n/**\n * @param {?} eventName\n * @return {?}\n */\nfunction isTriggerEventValid(eventName) {\n    return eventName == 'start' || eventName == 'done';\n}\n/**\n * @param {?} element\n * @param {?=} value\n * @return {?}\n */\nfunction cloakElement(element, value) {\n    var /** @type {?} */ oldValue = element.style.display;\n    element.style.display = value != null ? value : 'none';\n    return oldValue;\n}\n/**\n * @param {?} valuesMap\n * @param {?} driver\n * @param {?} elements\n * @param {?} elementPropsMap\n * @param {?} defaultStyle\n * @return {?}\n */\nfunction cloakAndComputeStyles(valuesMap, driver, elements, elementPropsMap, defaultStyle) {\n    var /** @type {?} */ cloakVals = [];\n    elements.forEach(function (element) { return cloakVals.push(cloakElement(element)); });\n    var /** @type {?} */ failedElements = [];\n    elementPropsMap.forEach(function (props, element) {\n        var /** @type {?} */ styles = {};\n        props.forEach(function (prop) {\n            var /** @type {?} */ value = styles[prop] = driver.computeStyle(element, prop, defaultStyle);\n            // there is no easy way to detect this because a sub element could be removed\n            // by a parent animation element being detached.\n            if (!value || value.length == 0) {\n                element[REMOVAL_FLAG] = NULL_REMOVED_QUERIED_STATE;\n                failedElements.push(element);\n            }\n        });\n        valuesMap.set(element, styles);\n    });\n    // we use a index variable here since Set.forEach(a, i) does not return\n    // an index value for the closure (but instead just the value)\n    var /** @type {?} */ i = 0;\n    elements.forEach(function (element) { return cloakElement(element, cloakVals[i++]); });\n    return failedElements;\n}\n/**\n * @param {?} roots\n * @param {?} nodes\n * @return {?}\n */\nfunction buildRootMap(roots, nodes) {\n    var /** @type {?} */ rootMap = new Map();\n    roots.forEach(function (root) { return rootMap.set(root, []); });\n    if (nodes.length == 0)\n        return rootMap;\n    var /** @type {?} */ NULL_NODE = 1;\n    var /** @type {?} */ nodeSet = new Set(nodes);\n    var /** @type {?} */ localRootMap = new Map();\n    /**\n     * @param {?} node\n     * @return {?}\n     */\n    function getRoot(node) {\n        if (!node)\n            return NULL_NODE;\n        var /** @type {?} */ root = localRootMap.get(node);\n        if (root)\n            return root;\n        var /** @type {?} */ parent = node.parentNode;\n        if (rootMap.has(parent)) {\n            // ngIf inside @trigger\n            root = parent;\n        }\n        else if (nodeSet.has(parent)) {\n            // ngIf inside ngIf\n            root = NULL_NODE;\n        }\n        else {\n            // recurse upwards\n            root = getRoot(parent);\n        }\n        localRootMap.set(node, root);\n        return root;\n    }\n    nodes.forEach(function (node) {\n        var /** @type {?} */ root = getRoot(node);\n        if (root !== NULL_NODE) {\n            /** @type {?} */ ((rootMap.get(root))).push(node);\n        }\n    });\n    return rootMap;\n}\nvar CLASSES_CACHE_KEY = '$$classes';\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nfunction addClass(element, className) {\n    if (element.classList) {\n        element.classList.add(className);\n    }\n    else {\n        var /** @type {?} */ classes = element[CLASSES_CACHE_KEY];\n        if (!classes) {\n            classes = element[CLASSES_CACHE_KEY] = {};\n        }\n        classes[className] = true;\n    }\n}\n/**\n * @param {?} element\n * @param {?} className\n * @return {?}\n */\nfunction removeClass(element, className) {\n    if (element.classList) {\n        element.classList.remove(className);\n    }\n    else {\n        var /** @type {?} */ classes = element[CLASSES_CACHE_KEY];\n        if (classes) {\n            delete classes[className];\n        }\n    }\n}\n/**\n * @param {?} engine\n * @param {?} element\n * @param {?} players\n * @return {?}\n */\nfunction removeNodesAfterAnimationDone(engine, element, players) {\n    optimizeGroupPlayer(players).onDone(function () { return engine.processLeaveNode(element); });\n}\n/**\n * @param {?} players\n * @return {?}\n */\nfunction flattenGroupPlayers(players) {\n    var /** @type {?} */ finalPlayers = [];\n    _flattenGroupPlayersRecur(players, finalPlayers);\n    return finalPlayers;\n}\n/**\n * @param {?} players\n * @param {?} finalPlayers\n * @return {?}\n */\nfunction _flattenGroupPlayersRecur(players, finalPlayers) {\n    for (var /** @type {?} */ i = 0; i < players.length; i++) {\n        var /** @type {?} */ player = players[i];\n        if (player instanceof ɵAnimationGroupPlayer) {\n            _flattenGroupPlayersRecur(player.players, finalPlayers);\n        }\n        else {\n            finalPlayers.push(/** @type {?} */ (player));\n        }\n    }\n}\n/**\n * @param {?} a\n * @param {?} b\n * @return {?}\n */\nfunction objEquals(a, b) {\n    var /** @type {?} */ k1 = Object.keys(a);\n    var /** @type {?} */ k2 = Object.keys(b);\n    if (k1.length != k2.length)\n        return false;\n    for (var /** @type {?} */ i = 0; i < k1.length; i++) {\n        var /** @type {?} */ prop = k1[i];\n        if (!b.hasOwnProperty(prop) || a[prop] !== b[prop])\n            return false;\n    }\n    return true;\n}\n/**\n * @param {?} element\n * @param {?} allPreStyleElements\n * @param {?} allPostStyleElements\n * @return {?}\n */\nfunction replacePostStylesAsPre(element, allPreStyleElements, allPostStyleElements) {\n    var /** @type {?} */ postEntry = allPostStyleElements.get(element);\n    if (!postEntry)\n        return false;\n    var /** @type {?} */ preEntry = allPreStyleElements.get(element);\n    if (preEntry) {\n        postEntry.forEach(function (data) { return ((preEntry)).add(data); });\n    }\n    else {\n        allPreStyleElements.set(element, postEntry);\n    }\n    allPostStyleElements.delete(element);\n    return true;\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar AnimationEngine = /** @class */ (function () {\n    function AnimationEngine(_driver, normalizer) {\n        var _this = this;\n        this._driver = _driver;\n        this._triggerCache = {};\n        this.onRemovalComplete = function (element, context) { };\n        this._transitionEngine = new TransitionAnimationEngine(_driver, normalizer);\n        this._timelineEngine = new TimelineAnimationEngine(_driver, normalizer);\n        this._transitionEngine.onRemovalComplete = function (element, context) {\n            return _this.onRemovalComplete(element, context);\n        };\n    }\n    /**\n     * @param {?} componentId\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @param {?} name\n     * @param {?} metadata\n     * @return {?}\n     */\n    AnimationEngine.prototype.registerTrigger = /**\n     * @param {?} componentId\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @param {?} name\n     * @param {?} metadata\n     * @return {?}\n     */\n    function (componentId, namespaceId, hostElement, name, metadata) {\n        var /** @type {?} */ cacheKey = componentId + '-' + name;\n        var /** @type {?} */ trigger = this._triggerCache[cacheKey];\n        if (!trigger) {\n            var /** @type {?} */ errors = [];\n            var /** @type {?} */ ast = /** @type {?} */ (buildAnimationAst(this._driver, /** @type {?} */ (metadata), errors));\n            if (errors.length) {\n                throw new Error(\"The animation trigger \\\"\" + name + \"\\\" has failed to build due to the following errors:\\n - \" + errors.join(\"\\n - \"));\n            }\n            trigger = buildTrigger(name, ast);\n            this._triggerCache[cacheKey] = trigger;\n        }\n        this._transitionEngine.registerTrigger(namespaceId, name, trigger);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    AnimationEngine.prototype.register = /**\n     * @param {?} namespaceId\n     * @param {?} hostElement\n     * @return {?}\n     */\n    function (namespaceId, hostElement) {\n        this._transitionEngine.register(namespaceId, hostElement);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationEngine.prototype.destroy = /**\n     * @param {?} namespaceId\n     * @param {?} context\n     * @return {?}\n     */\n    function (namespaceId, context) {\n        this._transitionEngine.destroy(namespaceId, context);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    AnimationEngine.prototype.onInsert = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} parent\n     * @param {?} insertBefore\n     * @return {?}\n     */\n    function (namespaceId, element, parent, insertBefore) {\n        this._transitionEngine.insertNode(namespaceId, element, parent, insertBefore);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    AnimationEngine.prototype.onRemove = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} context\n     * @return {?}\n     */\n    function (namespaceId, element, context) {\n        this._transitionEngine.removeNode(namespaceId, element, context);\n    };\n    /**\n     * @param {?} element\n     * @param {?} disable\n     * @return {?}\n     */\n    AnimationEngine.prototype.disableAnimations = /**\n     * @param {?} element\n     * @param {?} disable\n     * @return {?}\n     */\n    function (element, disable) {\n        this._transitionEngine.markElementAsDisabled(element, disable);\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} property\n     * @param {?} value\n     * @return {?}\n     */\n    AnimationEngine.prototype.process = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} property\n     * @param {?} value\n     * @return {?}\n     */\n    function (namespaceId, element, property, value) {\n        if (property.charAt(0) == '@') {\n            var _a = parseTimelineCommand(property), id = _a[0], action = _a[1];\n            var /** @type {?} */ args = /** @type {?} */ (value);\n            this._timelineEngine.command(id, element, action, args);\n        }\n        else {\n            this._transitionEngine.trigger(namespaceId, element, property, value);\n        }\n    };\n    /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} eventName\n     * @param {?} eventPhase\n     * @param {?} callback\n     * @return {?}\n     */\n    AnimationEngine.prototype.listen = /**\n     * @param {?} namespaceId\n     * @param {?} element\n     * @param {?} eventName\n     * @param {?} eventPhase\n     * @param {?} callback\n     * @return {?}\n     */\n    function (namespaceId, element, eventName, eventPhase, callback) {\n        // @@listen\n        if (eventName.charAt(0) == '@') {\n            var _a = parseTimelineCommand(eventName), id = _a[0], action = _a[1];\n            return this._timelineEngine.listen(id, element, action, callback);\n        }\n        return this._transitionEngine.listen(namespaceId, element, eventName, eventPhase, callback);\n    };\n    /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    AnimationEngine.prototype.flush = /**\n     * @param {?=} microtaskId\n     * @return {?}\n     */\n    function (microtaskId) {\n        if (microtaskId === void 0) { microtaskId = -1; }\n        this._transitionEngine.flush(microtaskId);\n    };\n    Object.defineProperty(AnimationEngine.prototype, \"players\", {\n        get: /**\n         * @return {?}\n         */\n        function () {\n            return (/** @type {?} */ (this._transitionEngine.players))\n                .concat(/** @type {?} */ (this._timelineEngine.players));\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    AnimationEngine.prototype.whenRenderingDone = /**\n     * @return {?}\n     */\n    function () { return this._transitionEngine.whenRenderingDone(); };\n    return AnimationEngine;\n}());\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar WebAnimationsPlayer = /** @class */ (function () {\n    function WebAnimationsPlayer(element, keyframes, options, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        var _this = this;\n        this.element = element;\n        this.keyframes = keyframes;\n        this.options = options;\n        this.previousPlayers = previousPlayers;\n        this._onDoneFns = [];\n        this._onStartFns = [];\n        this._onDestroyFns = [];\n        this._initialized = false;\n        this._finished = false;\n        this._started = false;\n        this._destroyed = false;\n        this.time = 0;\n        this.parentPlayer = null;\n        this.previousStyles = {};\n        this.currentSnapshot = {};\n        this._duration = /** @type {?} */ (options['duration']);\n        this._delay = /** @type {?} */ (options['delay']) || 0;\n        this.time = this._duration + this._delay;\n        if (allowPreviousPlayerStylesMerge(this._duration, this._delay)) {\n            previousPlayers.forEach(function (player) {\n                var /** @type {?} */ styles = player.currentSnapshot;\n                Object.keys(styles).forEach(function (prop) { return _this.previousStyles[prop] = styles[prop]; });\n            });\n        }\n    }\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._onFinish = /**\n     * @return {?}\n     */\n    function () {\n        if (!this._finished) {\n            this._finished = true;\n            this._onDoneFns.forEach(function (fn) { return fn(); });\n            this._onDoneFns = [];\n        }\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.init = /**\n     * @return {?}\n     */\n    function () {\n        this._buildPlayer();\n        this._preparePlayerBeforeStart();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._buildPlayer = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        if (this._initialized)\n            return;\n        this._initialized = true;\n        var /** @type {?} */ keyframes = this.keyframes.map(function (styles) { return copyStyles(styles, false); });\n        var /** @type {?} */ previousStyleProps = Object.keys(this.previousStyles);\n        if (previousStyleProps.length && keyframes.length) {\n            var /** @type {?} */ startingKeyframe_1 = keyframes[0];\n            var /** @type {?} */ missingStyleProps_1 = [];\n            previousStyleProps.forEach(function (prop) {\n                if (!startingKeyframe_1.hasOwnProperty(prop)) {\n                    missingStyleProps_1.push(prop);\n                }\n                startingKeyframe_1[prop] = _this.previousStyles[prop];\n            });\n            if (missingStyleProps_1.length) {\n                var /** @type {?} */ self_1 = this;\n                var _loop_1 = function () {\n                    var /** @type {?} */ kf = keyframes[i];\n                    missingStyleProps_1.forEach(function (prop) {\n                        kf[prop] = _computeStyle(self_1.element, prop);\n                    });\n                };\n                // tslint:disable-next-line\n                for (var /** @type {?} */ i = 1; i < keyframes.length; i++) {\n                    _loop_1();\n                }\n            }\n        }\n        (/** @type {?} */ (this)).domPlayer =\n            this._triggerWebAnimation(this.element, keyframes, this.options);\n        this._finalKeyframe = keyframes.length ? keyframes[keyframes.length - 1] : {};\n        this.domPlayer.addEventListener('finish', function () { return _this._onFinish(); });\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._preparePlayerBeforeStart = /**\n     * @return {?}\n     */\n    function () {\n        // this is required so that the player doesn't start to animate right away\n        if (this._delay) {\n            this._resetDomPlayerState();\n        }\n        else {\n            this.domPlayer.pause();\n        }\n    };\n    /** @internal */\n    /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} options\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._triggerWebAnimation = /**\n     * \\@internal\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} options\n     * @return {?}\n     */\n    function (element, keyframes, options) {\n        // jscompiler doesn't seem to know animate is a native property because it's not fully\n        // supported yet across common browsers (we polyfill it for Edge/Safari) [CL #143630929]\n        return /** @type {?} */ (element['animate'](keyframes, options));\n    };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onStart = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._onStartFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onDone = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._onDoneFns.push(fn); };\n    /**\n     * @param {?} fn\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.onDestroy = /**\n     * @param {?} fn\n     * @return {?}\n     */\n    function (fn) { this._onDestroyFns.push(fn); };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.play = /**\n     * @return {?}\n     */\n    function () {\n        this._buildPlayer();\n        if (!this.hasStarted()) {\n            this._onStartFns.forEach(function (fn) { return fn(); });\n            this._onStartFns = [];\n            this._started = true;\n        }\n        this.domPlayer.play();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.pause = /**\n     * @return {?}\n     */\n    function () {\n        this.init();\n        this.domPlayer.pause();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.finish = /**\n     * @return {?}\n     */\n    function () {\n        this.init();\n        this._onFinish();\n        this.domPlayer.finish();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.reset = /**\n     * @return {?}\n     */\n    function () {\n        this._resetDomPlayerState();\n        this._destroyed = false;\n        this._finished = false;\n        this._started = false;\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype._resetDomPlayerState = /**\n     * @return {?}\n     */\n    function () {\n        if (this.domPlayer) {\n            this.domPlayer.cancel();\n        }\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.restart = /**\n     * @return {?}\n     */\n    function () {\n        this.reset();\n        this.play();\n    };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.hasStarted = /**\n     * @return {?}\n     */\n    function () { return this._started; };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.destroy = /**\n     * @return {?}\n     */\n    function () {\n        if (!this._destroyed) {\n            this._destroyed = true;\n            this._resetDomPlayerState();\n            this._onFinish();\n            this._onDestroyFns.forEach(function (fn) { return fn(); });\n            this._onDestroyFns = [];\n        }\n    };\n    /**\n     * @param {?} p\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.setPosition = /**\n     * @param {?} p\n     * @return {?}\n     */\n    function (p) { this.domPlayer.currentTime = p * this.time; };\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.getPosition = /**\n     * @return {?}\n     */\n    function () { return this.domPlayer.currentTime / this.time; };\n    Object.defineProperty(WebAnimationsPlayer.prototype, \"totalTime\", {\n        get: /**\n         * @return {?}\n         */\n        function () { return this._delay + this._duration; },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.beforeDestroy = /**\n     * @return {?}\n     */\n    function () {\n        var _this = this;\n        var /** @type {?} */ styles = {};\n        if (this.hasStarted()) {\n            Object.keys(this._finalKeyframe).forEach(function (prop) {\n                if (prop != 'offset') {\n                    styles[prop] =\n                        _this._finished ? _this._finalKeyframe[prop] : _computeStyle(_this.element, prop);\n                }\n            });\n        }\n        this.currentSnapshot = styles;\n    };\n    /* @internal */\n    /**\n     * @param {?} phaseName\n     * @return {?}\n     */\n    WebAnimationsPlayer.prototype.triggerCallback = /**\n     * @param {?} phaseName\n     * @return {?}\n     */\n    function (phaseName) {\n        var /** @type {?} */ methods = phaseName == 'start' ? this._onStartFns : this._onDoneFns;\n        methods.forEach(function (fn) { return fn(); });\n        methods.length = 0;\n    };\n    return WebAnimationsPlayer;\n}());\n/**\n * @param {?} element\n * @param {?} prop\n * @return {?}\n */\nfunction _computeStyle(element, prop) {\n    return (/** @type {?} */ (window.getComputedStyle(element)))[prop];\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\nvar WebAnimationsDriver = /** @class */ (function () {\n    function WebAnimationsDriver() {\n    }\n    /**\n     * @param {?} prop\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.validateStyleProperty = /**\n     * @param {?} prop\n     * @return {?}\n     */\n    function (prop) { return validateStyleProperty(prop); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.matchesElement = /**\n     * @param {?} element\n     * @param {?} selector\n     * @return {?}\n     */\n    function (element, selector) {\n        return matchesElement(element, selector);\n    };\n    /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.containsElement = /**\n     * @param {?} elm1\n     * @param {?} elm2\n     * @return {?}\n     */\n    function (elm1, elm2) { return containsElement(elm1, elm2); };\n    /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.query = /**\n     * @param {?} element\n     * @param {?} selector\n     * @param {?} multi\n     * @return {?}\n     */\n    function (element, selector, multi) {\n        return invokeQuery(element, selector, multi);\n    };\n    /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.computeStyle = /**\n     * @param {?} element\n     * @param {?} prop\n     * @param {?=} defaultValue\n     * @return {?}\n     */\n    function (element, prop, defaultValue) {\n        return /** @type {?} */ ((/** @type {?} */ (window.getComputedStyle(element)))[prop]);\n    };\n    /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    WebAnimationsDriver.prototype.animate = /**\n     * @param {?} element\n     * @param {?} keyframes\n     * @param {?} duration\n     * @param {?} delay\n     * @param {?} easing\n     * @param {?=} previousPlayers\n     * @return {?}\n     */\n    function (element, keyframes, duration, delay, easing, previousPlayers) {\n        if (previousPlayers === void 0) { previousPlayers = []; }\n        var /** @type {?} */ fill = delay == 0 ? 'both' : 'forwards';\n        var /** @type {?} */ playerOptions = { duration: duration, delay: delay, fill: fill };\n        // we check for this to avoid having a null|undefined value be present\n        // for the easing (which results in an error for certain browsers #9752)\n        if (easing) {\n            playerOptions['easing'] = easing;\n        }\n        var /** @type {?} */ previousWebAnimationPlayers = /** @type {?} */ (previousPlayers.filter(function (player) { return player instanceof WebAnimationsPlayer; }));\n        return new WebAnimationsPlayer(element, keyframes, playerOptions, previousWebAnimationPlayers);\n    };\n    return WebAnimationsDriver;\n}());\n/**\n * @return {?}\n */\nfunction supportsWebAnimations() {\n    return typeof Element !== 'undefined' && typeof (/** @type {?} */ (Element)).prototype['animate'] === 'function';\n}\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n/**\n * @module\n * @description\n * Entry point for all public APIs of this package.\n */\n\n/**\n * @fileoverview added by tsickle\n * @suppress {checkTypes} checked by tsc\n */\n/**\n * Generated bundle index. Do not edit.\n */\n\nexport { AnimationDriver, Animation as ɵAnimation, AnimationStyleNormalizer as ɵAnimationStyleNormalizer, NoopAnimationStyleNormalizer as ɵNoopAnimationStyleNormalizer, WebAnimationsStyleNormalizer as ɵWebAnimationsStyleNormalizer, NoopAnimationDriver as ɵNoopAnimationDriver, AnimationEngine as ɵAnimationEngine, WebAnimationsDriver as ɵWebAnimationsDriver, supportsWebAnimations as ɵsupportsWebAnimations, WebAnimationsPlayer as ɵWebAnimationsPlayer };\n//# sourceMappingURL=browser.js.map\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/@angular/animations/esm5/browser.js\n// module id = 448\n// module chunks = 0","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable, LOCALE_ID} from '@angular/core';\n/**\n * \\@experimental\n * @abstract\n */\nexport abstract class NgLocalization {\n/**\n * @abstract\n * @param {?} value\n * @return {?}\n */\ngetPluralCategory(value: any) {} }\n/**\n * Returns the plural category for a given value.\n * - \"=value\" when the case exists,\n * - the plural category otherwise\n * \n * \\@internal\n * @param {?} value\n * @param {?} cases\n * @param {?} ngLocalization\n * @return {?}\n */\nexport function getPluralCategory(\n    value: number, cases: string[], ngLocalization: NgLocalization): string {\n  let /** @type {?} */ key = `=${value}`;\n\n  if (cases.indexOf(key) > -1) {\n    return key;\n  }\n\n  key = ngLocalization.getPluralCategory(value);\n\n  if (cases.indexOf(key) > -1) {\n    return key;\n  }\n\n  if (cases.indexOf('other') > -1) {\n    return 'other';\n  }\n\n  throw new Error(`No plural message found for value \"${value}\"`);\n}\n/**\n * Returns the plural case based on the locale\n * \n * \\@experimental\n */\nexport class NgLocaleLocalization extends NgLocalization {\n/**\n * @param {?} locale\n */\nconstructor( protected locale: string) { super(); }\n/**\n * @param {?} value\n * @return {?}\n */\ngetPluralCategory(value: any): string {\n    const /** @type {?} */ plural = getPluralCase(this.locale, value);\n\n    switch (plural) {\n      case Plural.Zero:\n        return 'zero';\n      case Plural.One:\n        return 'one';\n      case Plural.Two:\n        return 'two';\n      case Plural.Few:\n        return 'few';\n      case Plural.Many:\n        return 'many';\n      default:\n        return 'other';\n    }\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID, ] }, ]},\n];\n}\n\nfunction NgLocaleLocalization_tsickle_Closure_declarations() {\n/** @type {?} */\nNgLocaleLocalization.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgLocaleLocalization.ctorParameters;\n/** @type {?} */\nNgLocaleLocalization.prototype.locale;\n}\n\nexport type Plural = number;\nexport let Plural: any = {};\nPlural.Zero = 0;\nPlural.One = 1;\nPlural.Two = 2;\nPlural.Few = 3;\nPlural.Many = 4;\nPlural.Other = 5;\nPlural[Plural.Zero] = \"Zero\";\nPlural[Plural.One] = \"One\";\nPlural[Plural.Two] = \"Two\";\nPlural[Plural.Few] = \"Few\";\nPlural[Plural.Many] = \"Many\";\nPlural[Plural.Other] = \"Other\";\n\n/**\n * Returns the plural case based on the locale\n * \n * \\@experimental\n * @param {?} locale\n * @param {?} nLike\n * @return {?}\n */\nexport function getPluralCase(locale: string, nLike: number | string): Plural {\n  // TODO(vicb): lazy compute\n  if (typeof nLike === 'string') {\n    nLike = parseInt( /** @type {?} */((<string>nLike)), 10);\n  }\n  const /** @type {?} */ n: number = /** @type {?} */(( nLike as number));\n  const /** @type {?} */ nDecimal = n.toString().replace(/^[^.]*\\.?/, '');\n  const /** @type {?} */ i = Math.floor(Math.abs(n));\n  const /** @type {?} */ v = nDecimal.length;\n  const /** @type {?} */ f = parseInt(nDecimal, 10);\n  const /** @type {?} */ t = parseInt(n.toString().replace(/^[^.]*\\.?|0+$/g, ''), 10) || 0;\n\n  const /** @type {?} */ lang = locale.split('-')[0].toLowerCase();\n\n  switch (lang) {\n    case 'af':\n    case 'asa':\n    case 'az':\n    case 'bem':\n    case 'bez':\n    case 'bg':\n    case 'brx':\n    case 'ce':\n    case 'cgg':\n    case 'chr':\n    case 'ckb':\n    case 'ee':\n    case 'el':\n    case 'eo':\n    case 'es':\n    case 'eu':\n    case 'fo':\n    case 'fur':\n    case 'gsw':\n    case 'ha':\n    case 'haw':\n    case 'hu':\n    case 'jgo':\n    case 'jmc':\n    case 'ka':\n    case 'kk':\n    case 'kkj':\n    case 'kl':\n    case 'ks':\n    case 'ksb':\n    case 'ky':\n    case 'lb':\n    case 'lg':\n    case 'mas':\n    case 'mgo':\n    case 'ml':\n    case 'mn':\n    case 'nb':\n    case 'nd':\n    case 'ne':\n    case 'nn':\n    case 'nnh':\n    case 'nyn':\n    case 'om':\n    case 'or':\n    case 'os':\n    case 'ps':\n    case 'rm':\n    case 'rof':\n    case 'rwk':\n    case 'saq':\n    case 'seh':\n    case 'sn':\n    case 'so':\n    case 'sq':\n    case 'ta':\n    case 'te':\n    case 'teo':\n    case 'tk':\n    case 'tr':\n    case 'ug':\n    case 'uz':\n    case 'vo':\n    case 'vun':\n    case 'wae':\n    case 'xog':\n      if (n === 1) return Plural.One;\n      return Plural.Other;\n    case 'agq':\n    case 'bas':\n    case 'cu':\n    case 'dav':\n    case 'dje':\n    case 'dua':\n    case 'dyo':\n    case 'ebu':\n    case 'ewo':\n    case 'guz':\n    case 'kam':\n    case 'khq':\n    case 'ki':\n    case 'kln':\n    case 'kok':\n    case 'ksf':\n    case 'lrc':\n    case 'lu':\n    case 'luo':\n    case 'luy':\n    case 'mer':\n    case 'mfe':\n    case 'mgh':\n    case 'mua':\n    case 'mzn':\n    case 'nmg':\n    case 'nus':\n    case 'qu':\n    case 'rn':\n    case 'rw':\n    case 'sbp':\n    case 'twq':\n    case 'vai':\n    case 'yav':\n    case 'yue':\n    case 'zgh':\n    case 'ak':\n    case 'ln':\n    case 'mg':\n    case 'pa':\n    case 'ti':\n      if (n === Math.floor(n) && n >= 0 && n <= 1) return Plural.One;\n      return Plural.Other;\n    case 'am':\n    case 'as':\n    case 'bn':\n    case 'fa':\n    case 'gu':\n    case 'hi':\n    case 'kn':\n    case 'mr':\n    case 'zu':\n      if (i === 0 || n === 1) return Plural.One;\n      return Plural.Other;\n    case 'ar':\n      if (n === 0) return Plural.Zero;\n      if (n === 1) return Plural.One;\n      if (n === 2) return Plural.Two;\n      if (n % 100 === Math.floor(n % 100) && n % 100 >= 3 && n % 100 <= 10) return Plural.Few;\n      if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 99) return Plural.Many;\n      return Plural.Other;\n    case 'ast':\n    case 'ca':\n    case 'de':\n    case 'en':\n    case 'et':\n    case 'fi':\n    case 'fy':\n    case 'gl':\n    case 'it':\n    case 'nl':\n    case 'sv':\n    case 'sw':\n    case 'ur':\n    case 'yi':\n      if (i === 1 && v === 0) return Plural.One;\n      return Plural.Other;\n    case 'be':\n      if (n % 10 === 1 && !(n % 100 === 11)) return Plural.One;\n      if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 4 &&\n          !(n % 100 >= 12 && n % 100 <= 14))\n        return Plural.Few;\n      if (n % 10 === 0 || n % 10 === Math.floor(n % 10) && n % 10 >= 5 && n % 10 <= 9 ||\n          n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 14)\n        return Plural.Many;\n      return Plural.Other;\n    case 'br':\n      if (n % 10 === 1 && !(n % 100 === 11 || n % 100 === 71 || n % 100 === 91)) return Plural.One;\n      if (n % 10 === 2 && !(n % 100 === 12 || n % 100 === 72 || n % 100 === 92)) return Plural.Two;\n      if (n % 10 === Math.floor(n % 10) && (n % 10 >= 3 && n % 10 <= 4 || n % 10 === 9) &&\n          !(n % 100 >= 10 && n % 100 <= 19 || n % 100 >= 70 && n % 100 <= 79 ||\n            n % 100 >= 90 && n % 100 <= 99))\n        return Plural.Few;\n      if (!(n === 0) && n % 1e6 === 0) return Plural.Many;\n      return Plural.Other;\n    case 'bs':\n    case 'hr':\n    case 'sr':\n      if (v === 0 && i % 10 === 1 && !(i % 100 === 11) || f % 10 === 1 && !(f % 100 === 11))\n        return Plural.One;\n      if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n              !(i % 100 >= 12 && i % 100 <= 14) ||\n          f % 10 === Math.floor(f % 10) && f % 10 >= 2 && f % 10 <= 4 &&\n              !(f % 100 >= 12 && f % 100 <= 14))\n        return Plural.Few;\n      return Plural.Other;\n    case 'cs':\n    case 'sk':\n      if (i === 1 && v === 0) return Plural.One;\n      if (i === Math.floor(i) && i >= 2 && i <= 4 && v === 0) return Plural.Few;\n      if (!(v === 0)) return Plural.Many;\n      return Plural.Other;\n    case 'cy':\n      if (n === 0) return Plural.Zero;\n      if (n === 1) return Plural.One;\n      if (n === 2) return Plural.Two;\n      if (n === 3) return Plural.Few;\n      if (n === 6) return Plural.Many;\n      return Plural.Other;\n    case 'da':\n      if (n === 1 || !(t === 0) && (i === 0 || i === 1)) return Plural.One;\n      return Plural.Other;\n    case 'dsb':\n    case 'hsb':\n      if (v === 0 && i % 100 === 1 || f % 100 === 1) return Plural.One;\n      if (v === 0 && i % 100 === 2 || f % 100 === 2) return Plural.Two;\n      if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 ||\n          f % 100 === Math.floor(f % 100) && f % 100 >= 3 && f % 100 <= 4)\n        return Plural.Few;\n      return Plural.Other;\n    case 'ff':\n    case 'fr':\n    case 'hy':\n    case 'kab':\n      if (i === 0 || i === 1) return Plural.One;\n      return Plural.Other;\n    case 'fil':\n      if (v === 0 && (i === 1 || i === 2 || i === 3) ||\n          v === 0 && !(i % 10 === 4 || i % 10 === 6 || i % 10 === 9) ||\n          !(v === 0) && !(f % 10 === 4 || f % 10 === 6 || f % 10 === 9))\n        return Plural.One;\n      return Plural.Other;\n    case 'ga':\n      if (n === 1) return Plural.One;\n      if (n === 2) return Plural.Two;\n      if (n === Math.floor(n) && n >= 3 && n <= 6) return Plural.Few;\n      if (n === Math.floor(n) && n >= 7 && n <= 10) return Plural.Many;\n      return Plural.Other;\n    case 'gd':\n      if (n === 1 || n === 11) return Plural.One;\n      if (n === 2 || n === 12) return Plural.Two;\n      if (n === Math.floor(n) && (n >= 3 && n <= 10 || n >= 13 && n <= 19)) return Plural.Few;\n      return Plural.Other;\n    case 'gv':\n      if (v === 0 && i % 10 === 1) return Plural.One;\n      if (v === 0 && i % 10 === 2) return Plural.Two;\n      if (v === 0 &&\n          (i % 100 === 0 || i % 100 === 20 || i % 100 === 40 || i % 100 === 60 || i % 100 === 80))\n        return Plural.Few;\n      if (!(v === 0)) return Plural.Many;\n      return Plural.Other;\n    case 'he':\n      if (i === 1 && v === 0) return Plural.One;\n      if (i === 2 && v === 0) return Plural.Two;\n      if (v === 0 && !(n >= 0 && n <= 10) && n % 10 === 0) return Plural.Many;\n      return Plural.Other;\n    case 'is':\n      if (t === 0 && i % 10 === 1 && !(i % 100 === 11) || !(t === 0)) return Plural.One;\n      return Plural.Other;\n    case 'ksh':\n      if (n === 0) return Plural.Zero;\n      if (n === 1) return Plural.One;\n      return Plural.Other;\n    case 'kw':\n    case 'naq':\n    case 'se':\n    case 'smn':\n      if (n === 1) return Plural.One;\n      if (n === 2) return Plural.Two;\n      return Plural.Other;\n    case 'lag':\n      if (n === 0) return Plural.Zero;\n      if ((i === 0 || i === 1) && !(n === 0)) return Plural.One;\n      return Plural.Other;\n    case 'lt':\n      if (n % 10 === 1 && !(n % 100 >= 11 && n % 100 <= 19)) return Plural.One;\n      if (n % 10 === Math.floor(n % 10) && n % 10 >= 2 && n % 10 <= 9 &&\n          !(n % 100 >= 11 && n % 100 <= 19))\n        return Plural.Few;\n      if (!(f === 0)) return Plural.Many;\n      return Plural.Other;\n    case 'lv':\n    case 'prg':\n      if (n % 10 === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19 ||\n          v === 2 && f % 100 === Math.floor(f % 100) && f % 100 >= 11 && f % 100 <= 19)\n        return Plural.Zero;\n      if (n % 10 === 1 && !(n % 100 === 11) || v === 2 && f % 10 === 1 && !(f % 100 === 11) ||\n          !(v === 2) && f % 10 === 1)\n        return Plural.One;\n      return Plural.Other;\n    case 'mk':\n      if (v === 0 && i % 10 === 1 || f % 10 === 1) return Plural.One;\n      return Plural.Other;\n    case 'mt':\n      if (n === 1) return Plural.One;\n      if (n === 0 || n % 100 === Math.floor(n % 100) && n % 100 >= 2 && n % 100 <= 10)\n        return Plural.Few;\n      if (n % 100 === Math.floor(n % 100) && n % 100 >= 11 && n % 100 <= 19) return Plural.Many;\n      return Plural.Other;\n    case 'pl':\n      if (i === 1 && v === 0) return Plural.One;\n      if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n          !(i % 100 >= 12 && i % 100 <= 14))\n        return Plural.Few;\n      if (v === 0 && !(i === 1) && i % 10 === Math.floor(i % 10) && i % 10 >= 0 && i % 10 <= 1 ||\n          v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||\n          v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 12 && i % 100 <= 14)\n        return Plural.Many;\n      return Plural.Other;\n    case 'pt':\n      if (n === Math.floor(n) && n >= 0 && n <= 2 && !(n === 2)) return Plural.One;\n      return Plural.Other;\n    case 'ro':\n      if (i === 1 && v === 0) return Plural.One;\n      if (!(v === 0) || n === 0 ||\n          !(n === 1) && n % 100 === Math.floor(n % 100) && n % 100 >= 1 && n % 100 <= 19)\n        return Plural.Few;\n      return Plural.Other;\n    case 'ru':\n    case 'uk':\n      if (v === 0 && i % 10 === 1 && !(i % 100 === 11)) return Plural.One;\n      if (v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 2 && i % 10 <= 4 &&\n          !(i % 100 >= 12 && i % 100 <= 14))\n        return Plural.Few;\n      if (v === 0 && i % 10 === 0 ||\n          v === 0 && i % 10 === Math.floor(i % 10) && i % 10 >= 5 && i % 10 <= 9 ||\n          v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 11 && i % 100 <= 14)\n        return Plural.Many;\n      return Plural.Other;\n    case 'shi':\n      if (i === 0 || n === 1) return Plural.One;\n      if (n === Math.floor(n) && n >= 2 && n <= 10) return Plural.Few;\n      return Plural.Other;\n    case 'si':\n      if (n === 0 || n === 1 || i === 0 && f === 1) return Plural.One;\n      return Plural.Other;\n    case 'sl':\n      if (v === 0 && i % 100 === 1) return Plural.One;\n      if (v === 0 && i % 100 === 2) return Plural.Two;\n      if (v === 0 && i % 100 === Math.floor(i % 100) && i % 100 >= 3 && i % 100 <= 4 || !(v === 0))\n        return Plural.Few;\n      return Plural.Other;\n    case 'tzm':\n      if (n === Math.floor(n) && n >= 0 && n <= 1 || n === Math.floor(n) && n >= 11 && n <= 99)\n        return Plural.One;\n      return Plural.Other;\n    default:\n      return Plural.Other;\n  }\n}\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/localization.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Directive, DoCheck, ElementRef, Input, IterableChanges, IterableDiffer, IterableDiffers, KeyValueChanges, KeyValueDiffer, KeyValueDiffers, Renderer, ɵisListLikeIterable as isListLikeIterable, ɵstringify as stringify} from '@angular/core';\n/**\n * \\@ngModule CommonModule\n * \n * \\@whatItDoes Adds and removes CSS classes on an HTML element.\n * \n * \\@howToUse \n * ```\n *     <some-element [ngClass]=\"'first second'\">...</some-element>\n * \n *     <some-element [ngClass]=\"['first', 'second']\">...</some-element>\n * \n *     <some-element [ngClass]=\"{'first': true, 'second': true, 'third': false}\">...</some-element>\n * \n *     <some-element [ngClass]=\"stringExp|arrayExp|objExp\">...</some-element>\n * \n *     <some-element [ngClass]=\"{'class1 class2 class3' : true}\">...</some-element>\n * ```\n * \n * \\@description \n * \n * The CSS classes are updated as follows, depending on the type of the expression evaluation:\n * - `string` - the CSS classes listed in the string (space delimited) are added,\n * - `Array` - the CSS classes declared as Array elements are added,\n * - `Object` - keys are CSS classes that get added when the expression given in the value\n *              evaluates to a truthy value, otherwise they are removed.\n * \n * \\@stable\n */\nexport class NgClass implements DoCheck {\nprivate _iterableDiffer: IterableDiffer<string>|null;\nprivate _keyValueDiffer: KeyValueDiffer<string, any>|null;\nprivate _initialClasses: string[] = [];\nprivate _rawClass: string[]|Set<string>|{[klass: string]: any};\n/**\n * @param {?} _iterableDiffers\n * @param {?} _keyValueDiffers\n * @param {?} _ngEl\n * @param {?} _renderer\n */\nconstructor(\nprivate _iterableDiffers: IterableDiffers,\nprivate _keyValueDiffers: KeyValueDiffers,\nprivate _ngEl: ElementRef,\nprivate _renderer: Renderer) {}\n/**\n * @param {?} v\n * @return {?}\n */\nset klass(v: string) {\n    this._applyInitialClasses(true);\n    this._initialClasses = typeof v === 'string' ? v.split(/\\s+/) : [];\n    this._applyInitialClasses(false);\n    this._applyClasses(this._rawClass, false);\n  }\n/**\n * @param {?} v\n * @return {?}\n */\nset ngClass(v: string|string[]|Set<string>|{[klass: string]: any}) {\n    this._cleanupClasses(this._rawClass);\n\n    this._iterableDiffer = null;\n    this._keyValueDiffer = null;\n\n    this._rawClass = typeof v === 'string' ? v.split(/\\s+/) : v;\n\n    if (this._rawClass) {\n      if (isListLikeIterable(this._rawClass)) {\n        this._iterableDiffer = this._iterableDiffers.find(this._rawClass).create();\n      } else {\n        this._keyValueDiffer = this._keyValueDiffers.find(this._rawClass).create();\n      }\n    }\n  }\n/**\n * @return {?}\n */\nngDoCheck(): void {\n    if (this._iterableDiffer) {\n      const /** @type {?} */ iterableChanges = this._iterableDiffer.diff( /** @type {?} */((this._rawClass as string[])));\n      if (iterableChanges) {\n        this._applyIterableChanges(iterableChanges);\n      }\n    } else if (this._keyValueDiffer) {\n      const /** @type {?} */ keyValueChanges = this._keyValueDiffer.diff( /** @type {?} */((this._rawClass as{[k: string]: any})));\n      if (keyValueChanges) {\n        this._applyKeyValueChanges(keyValueChanges);\n      }\n    }\n  }\n/**\n * @param {?} rawClassVal\n * @return {?}\n */\nprivate _cleanupClasses(rawClassVal: string[]|{[klass: string]: any}): void {\n    this._applyClasses(rawClassVal, true);\n    this._applyInitialClasses(false);\n  }\n/**\n * @param {?} changes\n * @return {?}\n */\nprivate _applyKeyValueChanges(changes: KeyValueChanges<string, any>): void {\n    changes.forEachAddedItem((record) => this._toggleClass(record.key, record.currentValue));\n    changes.forEachChangedItem((record) => this._toggleClass(record.key, record.currentValue));\n    changes.forEachRemovedItem((record) => {\n      if (record.previousValue) {\n        this._toggleClass(record.key, false);\n      }\n    });\n  }\n/**\n * @param {?} changes\n * @return {?}\n */\nprivate _applyIterableChanges(changes: IterableChanges<string>): void {\n    changes.forEachAddedItem((record) => {\n      if (typeof record.item === 'string') {\n        this._toggleClass(record.item, true);\n      } else {\n        throw new Error(\n            `NgClass can only toggle CSS classes expressed as strings, got ${stringify(record.item)}`);\n      }\n    });\n\n    changes.forEachRemovedItem((record) => this._toggleClass(record.item, false));\n  }\n/**\n * @param {?} isCleanup\n * @return {?}\n */\nprivate _applyInitialClasses(isCleanup: boolean) {\n    this._initialClasses.forEach(klass => this._toggleClass(klass, !isCleanup));\n  }\n/**\n * @param {?} rawClassVal\n * @param {?} isCleanup\n * @return {?}\n */\nprivate _applyClasses(\n      rawClassVal: string[]|Set<string>|{[klass: string]: any}, isCleanup: boolean) {\n    if (rawClassVal) {\n      if (Array.isArray(rawClassVal) || rawClassVal instanceof Set) {\n        ( /** @type {?} */((<any>rawClassVal))).forEach((klass: string) => this._toggleClass(klass, !isCleanup));\n      } else {\n        Object.keys(rawClassVal).forEach(klass => {\n          if (rawClassVal[klass] != null) this._toggleClass(klass, !isCleanup);\n        });\n      }\n    }\n  }\n/**\n * @param {?} klass\n * @param {?} enabled\n * @return {?}\n */\nprivate _toggleClass(klass: string, enabled: any): void {\n    klass = klass.trim();\n    if (klass) {\n      klass.split(/\\s+/g).forEach(\n          klass => { this._renderer.setElementClass(this._ngEl.nativeElement, klass, !!enabled); });\n    }\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngClass]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: IterableDiffers, },\n{type: KeyValueDiffers, },\n{type: ElementRef, },\n{type: Renderer, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'klass': [{ type: Input, args: ['class', ] },],\n'ngClass': [{ type: Input },],\n};\n}\n\nfunction NgClass_tsickle_Closure_declarations() {\n/** @type {?} */\nNgClass.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgClass.ctorParameters;\n/** @type {?} */\nNgClass.propDecorators;\n/** @type {?} */\nNgClass.prototype._iterableDiffer;\n/** @type {?} */\nNgClass.prototype._keyValueDiffer;\n/** @type {?} */\nNgClass.prototype._initialClasses;\n/** @type {?} */\nNgClass.prototype._rawClass;\n/** @type {?} */\nNgClass.prototype._iterableDiffers;\n/** @type {?} */\nNgClass.prototype._keyValueDiffers;\n/** @type {?} */\nNgClass.prototype._ngEl;\n/** @type {?} */\nNgClass.prototype._renderer;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/ng_class.ts","\nexport type NumberFormatStyle = number;\nexport let NumberFormatStyle: any = {};\nNumberFormatStyle.Decimal = 0;\nNumberFormatStyle.Percent = 1;\nNumberFormatStyle.Currency = 2;\nNumberFormatStyle[NumberFormatStyle.Decimal] = \"Decimal\";\nNumberFormatStyle[NumberFormatStyle.Percent] = \"Percent\";\nNumberFormatStyle[NumberFormatStyle.Currency] = \"Currency\";\n\nexport class NumberFormatter {\n/**\n * @param {?} num\n * @param {?} locale\n * @param {?} style\n * @param {?=} __3\n * @return {?}\n */\nstatic format(\n      num: number, locale: string, style: NumberFormatStyle,\n      {minimumIntegerDigits, minimumFractionDigits, maximumFractionDigits, currency,\n       currencyAsSymbol = false}: {\n        minimumIntegerDigits?: number,\n        minimumFractionDigits?: number,\n        maximumFractionDigits?: number,\n        currency?: string|null,\n        currencyAsSymbol?: boolean\n      } = {}): string {\n    const /** @type {?} */ options: Intl.NumberFormatOptions = {\n      minimumIntegerDigits,\n      minimumFractionDigits,\n      maximumFractionDigits,\n      style: NumberFormatStyle[style].toLowerCase()\n    };\n\n    if (style == NumberFormatStyle.Currency) {\n      options.currency = typeof currency == 'string' ? currency : undefined;\n      options.currencyDisplay = currencyAsSymbol ? 'symbol' : 'code';\n    }\n    return new Intl.NumberFormat(locale, options).format(num);\n  }\n}\n\ntype DateFormatterFn = (date: Date, locale: string) => string;\n\nconst /** @type {?} */ DATE_FORMATS_SPLIT =\n    /((?:[^yMLdHhmsazZEwGjJ']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|J+|j+|m+|s+|a|z|Z|G+|w+))(.*)/;\n\nconst /** @type {?} */ PATTERN_ALIASES: {[format: string]: DateFormatterFn} = {\n  // Keys are quoted so they do not get renamed during closure compilation.\n  'yMMMdjms': datePartGetterFactory(combine([\n    digitCondition('year', 1),\n    nameCondition('month', 3),\n    digitCondition('day', 1),\n    digitCondition('hour', 1),\n    digitCondition('minute', 1),\n    digitCondition('second', 1),\n  ])),\n  'yMdjm': datePartGetterFactory(combine([\n    digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1),\n    digitCondition('hour', 1), digitCondition('minute', 1)\n  ])),\n  'yMMMMEEEEd': datePartGetterFactory(combine([\n    digitCondition('year', 1), nameCondition('month', 4), nameCondition('weekday', 4),\n    digitCondition('day', 1)\n  ])),\n  'yMMMMd': datePartGetterFactory(\n      combine([digitCondition('year', 1), nameCondition('month', 4), digitCondition('day', 1)])),\n  'yMMMd': datePartGetterFactory(\n      combine([digitCondition('year', 1), nameCondition('month', 3), digitCondition('day', 1)])),\n  'yMd': datePartGetterFactory(\n      combine([digitCondition('year', 1), digitCondition('month', 1), digitCondition('day', 1)])),\n  'jms': datePartGetterFactory(combine(\n      [digitCondition('hour', 1), digitCondition('second', 1), digitCondition('minute', 1)])),\n  'jm': datePartGetterFactory(combine([digitCondition('hour', 1), digitCondition('minute', 1)]))\n};\n\nconst /** @type {?} */ DATE_FORMATS: {[format: string]: DateFormatterFn} = {\n  // Keys are quoted so they do not get renamed.\n  'yyyy': datePartGetterFactory(digitCondition('year', 4)),\n  'yy': datePartGetterFactory(digitCondition('year', 2)),\n  'y': datePartGetterFactory(digitCondition('year', 1)),\n  'MMMM': datePartGetterFactory(nameCondition('month', 4)),\n  'MMM': datePartGetterFactory(nameCondition('month', 3)),\n  'MM': datePartGetterFactory(digitCondition('month', 2)),\n  'M': datePartGetterFactory(digitCondition('month', 1)),\n  'LLLL': datePartGetterFactory(nameCondition('month', 4)),\n  'L': datePartGetterFactory(nameCondition('month', 1)),\n  'dd': datePartGetterFactory(digitCondition('day', 2)),\n  'd': datePartGetterFactory(digitCondition('day', 1)),\n  'HH': digitModifier(\n      hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), false)))),\n  'H': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), false))),\n  'hh': digitModifier(\n      hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 2), true)))),\n  'h': hourExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),\n  'jj': datePartGetterFactory(digitCondition('hour', 2)),\n  'j': datePartGetterFactory(digitCondition('hour', 1)),\n  'mm': digitModifier(datePartGetterFactory(digitCondition('minute', 2))),\n  'm': datePartGetterFactory(digitCondition('minute', 1)),\n  'ss': digitModifier(datePartGetterFactory(digitCondition('second', 2))),\n  's': datePartGetterFactory(digitCondition('second', 1)),\n  // while ISO 8601 requires fractions to be prefixed with `.` or `,`\n  // we can be just safely rely on using `sss` since we currently don't support single or two digit\n  // fractions\n  'sss': datePartGetterFactory(digitCondition('second', 3)),\n  'EEEE': datePartGetterFactory(nameCondition('weekday', 4)),\n  'EEE': datePartGetterFactory(nameCondition('weekday', 3)),\n  'EE': datePartGetterFactory(nameCondition('weekday', 2)),\n  'E': datePartGetterFactory(nameCondition('weekday', 1)),\n  'a': hourClockExtractor(datePartGetterFactory(hour12Modify(digitCondition('hour', 1), true))),\n  'Z': timeZoneGetter('short'),\n  'z': timeZoneGetter('long'),\n  'ww': datePartGetterFactory({}),  // Week of year, padded (00-53). Week 01 is the week with the\n                                    // first Thursday of the year. not support ?\n  'w':\n      datePartGetterFactory({}),  // Week of year (0-53). Week 1 is the week with the first Thursday\n                                  // of the year not support ?\n  'G': datePartGetterFactory(nameCondition('era', 1)),\n  'GG': datePartGetterFactory(nameCondition('era', 2)),\n  'GGG': datePartGetterFactory(nameCondition('era', 3)),\n  'GGGG': datePartGetterFactory(nameCondition('era', 4))\n};\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction digitModifier(inner: DateFormatterFn): DateFormatterFn {\n  return function(date: Date, locale: string): string {\n    const /** @type {?} */ result = inner(date, locale);\n    return result.length == 1 ? '0' + result : result;\n  };\n}\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction hourClockExtractor(inner: DateFormatterFn): DateFormatterFn {\n  return function(date: Date, locale: string): string { return inner(date, locale).split(' ')[1]; };\n}\n/**\n * @param {?} inner\n * @return {?}\n */\nfunction hourExtractor(inner: DateFormatterFn): DateFormatterFn {\n  return function(date: Date, locale: string): string { return inner(date, locale).split(' ')[0]; };\n}\n/**\n * @param {?} date\n * @param {?} locale\n * @param {?} options\n * @return {?}\n */\nfunction intlDateFormat(date: Date, locale: string, options: Intl.DateTimeFormatOptions): string {\n  return new Intl.DateTimeFormat(locale, options).format(date).replace(/[\\u200e\\u200f]/g, '');\n}\n/**\n * @param {?} timezone\n * @return {?}\n */\nfunction timeZoneGetter(timezone: string): DateFormatterFn {\n  // To workaround `Intl` API restriction for single timezone let format with 24 hours\n  const /** @type {?} */ options = {hour: '2-digit', hour12: false, timeZoneName: timezone};\n  return function(date: Date, locale: string): string {\n    const /** @type {?} */ result = intlDateFormat(date, locale, options);\n    // Then extract first 3 letters that related to hours\n    return result ? result.substring(3) : '';\n  };\n}\n/**\n * @param {?} options\n * @param {?} value\n * @return {?}\n */\nfunction hour12Modify(\n    options: Intl.DateTimeFormatOptions, value: boolean): Intl.DateTimeFormatOptions {\n  options.hour12 = value;\n  return options;\n}\n/**\n * @param {?} prop\n * @param {?} len\n * @return {?}\n */\nfunction digitCondition(prop: string, len: number): Intl.DateTimeFormatOptions {\n  const /** @type {?} */ result: {[k: string]: string} = {};\n  result[prop] = len === 2 ? '2-digit' : 'numeric';\n  return result;\n}\n/**\n * @param {?} prop\n * @param {?} len\n * @return {?}\n */\nfunction nameCondition(prop: string, len: number): Intl.DateTimeFormatOptions {\n  const /** @type {?} */ result: {[k: string]: string} = {};\n  if (len < 4) {\n    result[prop] = len > 1 ? 'short' : 'narrow';\n  } else {\n    result[prop] = 'long';\n  }\n\n  return result;\n}\n/**\n * @param {?} options\n * @return {?}\n */\nfunction combine(options: Intl.DateTimeFormatOptions[]): Intl.DateTimeFormatOptions {\n  return ( /** @type {?} */((<any>Object))).assign({}, ...options);\n}\n/**\n * @param {?} ret\n * @return {?}\n */\nfunction datePartGetterFactory(ret: Intl.DateTimeFormatOptions): DateFormatterFn {\n  return (date: Date, locale: string): string => intlDateFormat(date, locale, ret);\n}\n\nconst /** @type {?} */ DATE_FORMATTER_CACHE = new Map<string, string[]>();\n/**\n * @param {?} format\n * @param {?} date\n * @param {?} locale\n * @return {?}\n */\nfunction dateFormatter(format: string, date: Date, locale: string): string {\n  const /** @type {?} */ fn = PATTERN_ALIASES[format];\n\n  if (fn) return fn(date, locale);\n\n  const /** @type {?} */ cacheKey = format;\n  let /** @type {?} */ parts = DATE_FORMATTER_CACHE.get(cacheKey);\n\n  if (!parts) {\n    parts = [];\n    let /** @type {?} */ match: RegExpExecArray|null;\n    DATE_FORMATS_SPLIT.exec(format);\n\n    let /** @type {?} */ _format: string|null = format;\n    while (_format) {\n      match = DATE_FORMATS_SPLIT.exec(_format);\n      if (match) {\n        parts = parts.concat(match.slice(1));\n        _format = /** @type {?} */(( parts.pop()));\n      } else {\n        parts.push(_format);\n        _format = null;\n      }\n    }\n\n    DATE_FORMATTER_CACHE.set(cacheKey, parts);\n  }\n\n  return parts.reduce((text, part) => {\n    const /** @type {?} */ fn = DATE_FORMATS[part];\n    return text + (fn ? fn(date, locale) : partToTime(part));\n  }, '');\n}\n/**\n * @param {?} part\n * @return {?}\n */\nfunction partToTime(part: string): string {\n  return part === '\\'\\'' ? '\\'' : part.replace(/(^'|'$)/g, '').replace(/''/g, '\\'');\n}\nexport class DateFormatter {\n/**\n * @param {?} date\n * @param {?} locale\n * @param {?} pattern\n * @return {?}\n */\nstatic format(date: Date, locale: string, pattern: string): string {\n    return dateFormatter(pattern, date, locale);\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/intl.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, LOCALE_ID, Pipe, PipeTransform, Type} from '@angular/core';\nimport {NumberFormatStyle, NumberFormatter} from './intl';\nimport {invalidPipeArgumentError} from './invalid_pipe_argument_error';\n\nconst /** @type {?} */ _NUMBER_FORMAT_REGEXP = /^(\\d+)?\\.((\\d+)(-(\\d+))?)?$/;\n/**\n * @param {?} pipe\n * @param {?} locale\n * @param {?} value\n * @param {?} style\n * @param {?=} digits\n * @param {?=} currency\n * @param {?=} currencyAsSymbol\n * @return {?}\n */\nfunction formatNumber(\n    pipe: Type<any>, locale: string, value: number | string, style: NumberFormatStyle,\n    digits?: string | null, currency: string | null = null,\n    currencyAsSymbol: boolean = false): string|null {\n  if (value == null) return null;\n\n  // Convert strings to numbers\n  value = typeof value === 'string' && isNumeric(value) ? +value : value;\n  if (typeof value !== 'number') {\n    throw invalidPipeArgumentError(pipe, value);\n  }\n\n  let /** @type {?} */ minInt: number|undefined = undefined;\n  let /** @type {?} */ minFraction: number|undefined = undefined;\n  let /** @type {?} */ maxFraction: number|undefined = undefined;\n  if (style !== NumberFormatStyle.Currency) {\n    // rely on Intl default for currency\n    minInt = 1;\n    minFraction = 0;\n    maxFraction = 3;\n  }\n\n  if (digits) {\n    const /** @type {?} */ parts = digits.match(_NUMBER_FORMAT_REGEXP);\n    if (parts === null) {\n      throw new Error(`${digits} is not a valid digit info for number pipes`);\n    }\n    if (parts[1] != null) {  // min integer digits\n      minInt = parseIntAutoRadix(parts[1]);\n    }\n    if (parts[3] != null) {  // min fraction digits\n      minFraction = parseIntAutoRadix(parts[3]);\n    }\n    if (parts[5] != null) {  // max fraction digits\n      maxFraction = parseIntAutoRadix(parts[5]);\n    }\n  }\n\n  return NumberFormatter.format( /** @type {?} */((value as number)), locale, style, {\n    minimumIntegerDigits: minInt,\n    minimumFractionDigits: minFraction,\n    maximumFractionDigits: maxFraction,\n    currency: currency,\n    currencyAsSymbol: currencyAsSymbol,\n  });\n}\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number according to locale rules.\n * \\@howToUse `number_expression | number[:digitInfo]`\n * \n * Formats a number as text. Group sizing and separator and other locale-specific\n * configurations are based on the active locale.\n * \n * where `expression` is a number:\n *  - `digitInfo` is a `string` which has a following format: <br>\n *     <code>{minIntegerDigits}.{minFractionDigits}-{maxFractionDigits}</code>\n *   - `minIntegerDigits` is the minimum number of integer digits to use. Defaults to `1`.\n *   - `minFractionDigits` is the minimum number of digits after fraction. Defaults to `0`.\n *   - `maxFractionDigits` is the maximum number of digits after fraction. Defaults to `3`.\n * \n * For more information on the acceptable range for each of these numbers and other\n * details see your native internationalization library.\n * \n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See {\\@linkDocs guide/browser-support} for details.\n * \n * ### Example\n * \n * {\\@example common/pipes/ts/number_pipe.ts region='NumberPipe'}\n * \n * \\@stable\n */\nexport class DecimalPipe implements PipeTransform {\n/**\n * @param {?} _locale\n */\nconstructor(\nprivate _locale: string) {}\n/**\n * @param {?} value\n * @param {?=} digits\n * @return {?}\n */\ntransform(value: any, digits?: string): string|null {\n    return formatNumber(DecimalPipe, this._locale, value, NumberFormatStyle.Decimal, digits);\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'number'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID, ] }, ]},\n];\n}\n\nfunction DecimalPipe_tsickle_Closure_declarations() {\n/** @type {?} */\nDecimalPipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDecimalPipe.ctorParameters;\n/** @type {?} */\nDecimalPipe.prototype._locale;\n}\n\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as a percentage according to locale rules.\n * \\@howToUse `number_expression | percent[:digitInfo]`\n * \n * \\@description \n * \n * Formats a number as percentage.\n * \n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n * \n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See {\\@linkDocs guide/browser-support} for details.\n * \n * ### Example\n * \n * {\\@example common/pipes/ts/number_pipe.ts region='PercentPipe'}\n * \n * \\@stable\n */\nexport class PercentPipe implements PipeTransform {\n/**\n * @param {?} _locale\n */\nconstructor(\nprivate _locale: string) {}\n/**\n * @param {?} value\n * @param {?=} digits\n * @return {?}\n */\ntransform(value: any, digits?: string): string|null {\n    return formatNumber(PercentPipe, this._locale, value, NumberFormatStyle.Percent, digits);\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'percent'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID, ] }, ]},\n];\n}\n\nfunction PercentPipe_tsickle_Closure_declarations() {\n/** @type {?} */\nPercentPipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nPercentPipe.ctorParameters;\n/** @type {?} */\nPercentPipe.prototype._locale;\n}\n\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a number as currency using locale rules.\n * \\@howToUse `number_expression | currency[:currencyCode[:symbolDisplay[:digitInfo]]]`\n * \\@description \n * \n * Use `currency` to format a number as currency.\n * \n * - `currencyCode` is the [ISO 4217](https://en.wikipedia.org/wiki/ISO_4217) currency code, such\n *    as `USD` for the US dollar and `EUR` for the euro.\n * - `symbolDisplay` is a boolean indicating whether to use the currency symbol or code.\n *   - `true`: use symbol (e.g. `$`).\n *   - `false`(default): use code (e.g. `USD`).\n * - `digitInfo` See {\\@link DecimalPipe} for detailed description.\n * \n * WARNING: this pipe uses the Internationalization API which is not yet available in all browsers\n * and may require a polyfill. See {\\@linkDocs guide/browser-support} for details.\n * \n * ### Example\n * \n * {\\@example common/pipes/ts/number_pipe.ts region='CurrencyPipe'}\n * \n * \\@stable\n */\nexport class CurrencyPipe implements PipeTransform {\n/**\n * @param {?} _locale\n */\nconstructor(\nprivate _locale: string) {}\n/**\n * @param {?} value\n * @param {?=} currencyCode\n * @param {?=} symbolDisplay\n * @param {?=} digits\n * @return {?}\n */\ntransform(\n      value: any, currencyCode: string = 'USD', symbolDisplay: boolean = false,\n      digits?: string): string|null {\n    return formatNumber(\n        CurrencyPipe, this._locale, value, NumberFormatStyle.Currency, digits, currencyCode,\n        symbolDisplay);\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'currency'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID, ] }, ]},\n];\n}\n\nfunction CurrencyPipe_tsickle_Closure_declarations() {\n/** @type {?} */\nCurrencyPipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nCurrencyPipe.ctorParameters;\n/** @type {?} */\nCurrencyPipe.prototype._locale;\n}\n\n/**\n * @param {?} text\n * @return {?}\n */\nfunction parseIntAutoRadix(text: string): number {\n  const /** @type {?} */ result: number = parseInt(text);\n  if (isNaN(result)) {\n    throw new Error('Invalid integer literal when parsing ' + text);\n  }\n  return result;\n}\n/**\n * @param {?} value\n * @return {?}\n */\nexport function isNumeric(value: any): boolean {\n  return !isNaN(value - parseFloat(value));\n}\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/number_pipe.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, LOCALE_ID, Pipe, PipeTransform} from '@angular/core';\nimport {DateFormatter} from './intl';\nimport {invalidPipeArgumentError} from './invalid_pipe_argument_error';\nimport {isNumeric} from './number_pipe';\n\nconst /** @type {?} */ ISO8601_DATE_REGEX =\n    /^(\\d{4})-?(\\d\\d)-?(\\d\\d)(?:T(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:\\.(\\d+))?)?)?(Z|([+-])(\\d\\d):?(\\d\\d))?)?$/;\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Formats a date according to locale rules.\n * \\@howToUse `date_expression | date[:format]`\n * \\@description \n * \n * Where:\n * - `expression` is a date object or a number (milliseconds since UTC epoch) or an ISO string\n * (https://www.w3.org/TR/NOTE-datetime).\n * - `format` indicates which date/time components to include. The format can be predefined as\n *   shown below or custom as shown in the table.\n *   - `'medium'`: equivalent to `'yMMMdjms'` (e.g. `Sep 3, 2010, 12:05:08 PM` for `en-US`)\n *   - `'short'`: equivalent to `'yMdjm'` (e.g. `9/3/2010, 12:05 PM` for `en-US`)\n *   - `'fullDate'`: equivalent to `'yMMMMEEEEd'` (e.g. `Friday, September 3, 2010` for `en-US`)\n *   - `'longDate'`: equivalent to `'yMMMMd'` (e.g. `September 3, 2010` for `en-US`)\n *   - `'mediumDate'`: equivalent to `'yMMMd'` (e.g. `Sep 3, 2010` for `en-US`)\n *   - `'shortDate'`: equivalent to `'yMd'` (e.g. `9/3/2010` for `en-US`)\n *   - `'mediumTime'`: equivalent to `'jms'` (e.g. `12:05:08 PM` for `en-US`)\n *   - `'shortTime'`: equivalent to `'jm'` (e.g. `12:05 PM` for `en-US`)\n * \n * \n *  | Component | Symbol | Narrow | Short Form   | Long Form         | Numeric   | 2-digit   |\n *  |-----------|:------:|--------|--------------|-------------------|-----------|-----------|\n *  | era       |   G    | G (A)  | GGG (AD)     | GGGG (Anno Domini)| -         | -         |\n *  | year      |   y    | -      | -            | -                 | y (2015)  | yy (15)   |\n *  | month     |   M    | L (S)  | MMM (Sep)    | MMMM (September)  | M (9)     | MM (09)   |\n *  | day       |   d    | -      | -            | -                 | d (3)     | dd (03)   |\n *  | weekday   |   E    | E (S)  | EEE (Sun)    | EEEE (Sunday)     | -         | -         |\n *  | hour      |   j    | -      | -            | -                 | j (13)    | jj (13)   |\n *  | hour12    |   h    | -      | -            | -                 | h (1 PM)  | hh (01 PM)|\n *  | hour24    |   H    | -      | -            | -                 | H (13)    | HH (13)   |\n *  | minute    |   m    | -      | -            | -                 | m (5)     | mm (05)   |\n *  | second    |   s    | -      | -            | -                 | s (9)     | ss (09)   |\n *  | timezone  |   z    | -      | -            | z (Pacific Standard Time)| -  | -         |\n *  | timezone  |   Z    | -      | Z (GMT-8:00) | -                 | -         | -         |\n *  | timezone  |   a    | -      | a (PM)       | -                 | -         | -         |\n * \n * In javascript, only the components specified will be respected (not the ordering,\n * punctuations, ...) and details of the formatting will be dependent on the locale.\n * \n * Timezone of the formatted text will be the local system timezone of the end-user's machine.\n * \n * When the expression is a ISO string without time (e.g. 2016-09-19) the time zone offset is not\n * applied and the formatted text will have the same day, month and year of the expression.\n * \n * WARNINGS:\n * - this pipe is marked as pure hence it will not be re-evaluated when the input is mutated.\n *   Instead users should treat the date as an immutable object and change the reference when the\n *   pipe needs to re-run (this is to avoid reformatting the date on every change detection run\n *   which would be an expensive operation).\n * - this pipe uses the Internationalization API. Therefore it is only reliable in Chrome and Opera\n *   browsers.\n * \n * ### Examples\n * \n * Assuming `dateObj` is (year: 2015, month: 6, day: 15, hour: 21, minute: 43, second: 11)\n * in the _local_ time and locale is 'en-US':\n * \n * ```\n *     {{ dateObj | date }}               // output is 'Jun 15, 2015'\n *     {{ dateObj | date:'medium' }}      // output is 'Jun 15, 2015, 9:43:11 PM'\n *     {{ dateObj | date:'shortTime' }}   // output is '9:43 PM'\n *     {{ dateObj | date:'mmss' }}        // output is '43:11'\n * ```\n * \n * {\\@example common/pipes/ts/date_pipe.ts region='DatePipe'}\n * \n * \\@stable\n */\nexport class DatePipe implements PipeTransform {\n/**\n * \\@internal\n */\nstatic _ALIASES: {[key: string]: string} = {\n    'medium': 'yMMMdjms',\n    'short': 'yMdjm',\n    'fullDate': 'yMMMMEEEEd',\n    'longDate': 'yMMMMd',\n    'mediumDate': 'yMMMd',\n    'shortDate': 'yMd',\n    'mediumTime': 'jms',\n    'shortTime': 'jm'\n  };\n/**\n * @param {?} _locale\n */\nconstructor(\nprivate _locale: string) {}\n/**\n * @param {?} value\n * @param {?=} pattern\n * @return {?}\n */\ntransform(value: any, pattern: string = 'mediumDate'): string|null {\n    let /** @type {?} */ date: Date;\n\n    if (isBlank(value) || value !== value) return null;\n\n    if (typeof value === 'string') {\n      value = value.trim();\n    }\n\n    if (isDate(value)) {\n      date = value;\n    } else if (isNumeric(value)) {\n      date = new Date(parseFloat(value));\n    } else if (typeof value === 'string' && /^(\\d{4}-\\d{1,2}-\\d{1,2})$/.test(value)) {\n      /**\n      * For ISO Strings without time the day, month and year must be extracted from the ISO String\n      * before Date creation to avoid time offset and errors in the new Date.\n      * If we only replace '-' with ',' in the ISO String (\"2015,01,01\"), and try to create a new\n      * date, some browsers (e.g. IE 9) will throw an invalid Date error\n      * If we leave the '-' (\"2015-01-01\") and try to create a new Date(\"2015-01-01\") the timeoffset\n      * is applied\n      * Note: ISO months are 0 for January, 1 for February, ...\n      */\n      const [y, m, d] = value.split('-').map((val: string) => parseInt(val, 10));\n      date = new Date(y, m - 1, d);\n    } else {\n      date = new Date(value);\n    }\n\n    if (!isDate(date)) {\n      let /** @type {?} */ match: RegExpMatchArray|null;\n      if ((typeof value === 'string') && (match = value.match(ISO8601_DATE_REGEX))) {\n        date = isoStringToDate(match);\n      } else {\n        throw invalidPipeArgumentError(DatePipe, value);\n      }\n    }\n\n    return DateFormatter.format(date, this._locale, DatePipe._ALIASES[pattern] || pattern);\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'date', pure: true}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Inject, args: [LOCALE_ID, ] }, ]},\n];\n}\n\nfunction DatePipe_tsickle_Closure_declarations() {\n/**\n * \\@internal\n * @type {?}\n */\nDatePipe._ALIASES;\n/** @type {?} */\nDatePipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDatePipe.ctorParameters;\n/** @type {?} */\nDatePipe.prototype._locale;\n}\n\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction isBlank(obj: any): boolean {\n  return obj == null || obj === '';\n}\n/**\n * @param {?} obj\n * @return {?}\n */\nfunction isDate(obj: any): obj is Date {\n  return obj instanceof Date && !isNaN(obj.valueOf());\n}\n/**\n * @param {?} match\n * @return {?}\n */\nfunction isoStringToDate(match: RegExpMatchArray): Date {\n  const /** @type {?} */ date = new Date(0);\n  let /** @type {?} */ tzHour = 0;\n  let /** @type {?} */ tzMin = 0;\n  const /** @type {?} */ dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear;\n  const /** @type {?} */ timeSetter = match[8] ? date.setUTCHours : date.setHours;\n\n  if (match[9]) {\n    tzHour = toInt(match[9] + match[10]);\n    tzMin = toInt(match[9] + match[11]);\n  }\n  dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3]));\n  const /** @type {?} */ h = toInt(match[4] || '0') - tzHour;\n  const /** @type {?} */ m = toInt(match[5] || '0') - tzMin;\n  const /** @type {?} */ s = toInt(match[6] || '0');\n  const /** @type {?} */ ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000);\n  timeSetter.call(date, h, m, s, ms);\n  return date;\n}\n/**\n * @param {?} str\n * @return {?}\n */\nfunction toInt(str: string): number {\n  return parseInt(str, 10);\n}\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/date_pipe.ts","export function isFunction(x: any): x is Function {\n  return typeof x === 'function';\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/isFunction.ts","export function isObject(x: any): x is Object {\n  return x != null && typeof x === 'object';\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/isObject.ts","import { errorObject } from './errorObject';\n\nlet tryCatchTarget: Function;\n\nfunction tryCatcher(this: any): any {\n  try {\n    return tryCatchTarget.apply(this, arguments);\n  } catch (e) {\n    errorObject.e = e;\n    return errorObject;\n  }\n}\n\nexport function tryCatch<T extends Function>(fn: T): T {\n  tryCatchTarget = fn;\n  return <any>tryCatcher;\n};\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/tryCatch.ts","import { isArray } from './util/isArray';\nimport { isObject } from './util/isObject';\nimport { isFunction } from './util/isFunction';\nimport { tryCatch } from './util/tryCatch';\nimport { errorObject } from './util/errorObject';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\n\nexport interface AnonymousSubscription {\n  unsubscribe(): void;\n}\n\nexport type TeardownLogic = AnonymousSubscription | Function | void;\n\nexport interface ISubscription extends AnonymousSubscription {\n  unsubscribe(): void;\n  readonly closed: boolean;\n}\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements ISubscription {\n  public static EMPTY: Subscription = (function(empty: any){\n    empty.closed = true;\n    return empty;\n  }(new Subscription()));\n\n  /**\n   * A flag to indicate whether this Subscription has already been unsubscribed.\n   * @type {boolean}\n   */\n  public closed: boolean = false;\n\n  protected _parent: Subscription = null;\n  protected _parents: Subscription[] = null;\n  private _subscriptions: ISubscription[] = null;\n\n  /**\n   * @param {function(): void} [unsubscribe] A function describing how to\n   * perform the disposal of resources when the `unsubscribe` method is called.\n   */\n  constructor(unsubscribe?: () => void) {\n    if (unsubscribe) {\n      (<any> this)._unsubscribe = unsubscribe;\n    }\n  }\n\n  /**\n   * Disposes the resources held by the subscription. May, for instance, cancel\n   * an ongoing Observable execution or cancel any other type of work that\n   * started when the Subscription was created.\n   * @return {void}\n   */\n  unsubscribe(): void {\n    let hasErrors = false;\n    let errors: any[];\n\n    if (this.closed) {\n      return;\n    }\n\n    let { _parent, _parents, _unsubscribe, _subscriptions } = (<any> this);\n\n    this.closed = true;\n    this._parent = null;\n    this._parents = null;\n    // null out _subscriptions first so any child subscriptions that attempt\n    // to remove themselves from this subscription will noop\n    this._subscriptions = null;\n\n    let index = -1;\n    let len = _parents ? _parents.length : 0;\n\n    // if this._parent is null, then so is this._parents, and we\n    // don't have to remove ourselves from any parent subscriptions.\n    while (_parent) {\n      _parent.remove(this);\n      // if this._parents is null or index >= len,\n      // then _parent is set to null, and the loop exits\n      _parent = ++index < len && _parents[index] || null;\n    }\n\n    if (isFunction(_unsubscribe)) {\n      let trial = tryCatch(_unsubscribe).call(this);\n      if (trial === errorObject) {\n        hasErrors = true;\n        errors = errors || (\n          errorObject.e instanceof UnsubscriptionError ?\n            flattenUnsubscriptionErrors(errorObject.e.errors) : [errorObject.e]\n        );\n      }\n    }\n\n    if (isArray(_subscriptions)) {\n\n      index = -1;\n      len = _subscriptions.length;\n\n      while (++index < len) {\n        const sub = _subscriptions[index];\n        if (isObject(sub)) {\n          let trial = tryCatch(sub.unsubscribe).call(sub);\n          if (trial === errorObject) {\n            hasErrors = true;\n            errors = errors || [];\n            let err = errorObject.e;\n            if (err instanceof UnsubscriptionError) {\n              errors = errors.concat(flattenUnsubscriptionErrors(err.errors));\n            } else {\n              errors.push(err);\n            }\n          }\n        }\n      }\n    }\n\n    if (hasErrors) {\n      throw new UnsubscriptionError(errors);\n    }\n  }\n\n  /**\n   * Adds a tear down to be called during the unsubscribe() of this\n   * Subscription.\n   *\n   * If the tear down being added is a subscription that is already\n   * unsubscribed, is the same reference `add` is being called on, or is\n   * `Subscription.EMPTY`, it will not be added.\n   *\n   * If this subscription is already in an `closed` state, the passed\n   * tear down logic will be executed immediately.\n   *\n   * @param {TeardownLogic} teardown The additional logic to execute on\n   * teardown.\n   * @return {Subscription} Returns the Subscription used or created to be\n   * added to the inner subscriptions list. This Subscription can be used with\n   * `remove()` to remove the passed teardown logic from the inner subscriptions\n   * list.\n   */\n  add(teardown: TeardownLogic): Subscription {\n    if (!teardown || (teardown === Subscription.EMPTY)) {\n      return Subscription.EMPTY;\n    }\n\n    if (teardown === this) {\n      return this;\n    }\n\n    let subscription = (<Subscription> teardown);\n\n    switch (typeof teardown) {\n      case 'function':\n        subscription = new Subscription(<(() => void) > teardown);\n      case 'object':\n        if (subscription.closed || typeof subscription.unsubscribe !== 'function') {\n          return subscription;\n        } else if (this.closed) {\n          subscription.unsubscribe();\n          return subscription;\n        } else if (typeof subscription._addParent !== 'function' /* quack quack */) {\n          const tmp = subscription;\n          subscription = new Subscription();\n          subscription._subscriptions = [tmp];\n        }\n        break;\n      default:\n        throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');\n    }\n\n    const subscriptions = this._subscriptions || (this._subscriptions = []);\n\n    subscriptions.push(subscription);\n    subscription._addParent(this);\n\n    return subscription;\n  }\n\n  /**\n   * Removes a Subscription from the internal list of subscriptions that will\n   * unsubscribe during the unsubscribe process of this Subscription.\n   * @param {Subscription} subscription The subscription to remove.\n   * @return {void}\n   */\n  remove(subscription: Subscription): void {\n    const subscriptions = this._subscriptions;\n    if (subscriptions) {\n      const subscriptionIndex = subscriptions.indexOf(subscription);\n      if (subscriptionIndex !== -1) {\n        subscriptions.splice(subscriptionIndex, 1);\n      }\n    }\n  }\n\n  private _addParent(parent: Subscription) {\n    let { _parent, _parents } = this;\n    if (!_parent || _parent === parent) {\n      // If we don't have a parent, or the new parent is the same as the\n      // current parent, then set this._parent to the new parent.\n      this._parent = parent;\n    } else if (!_parents) {\n      // If there's already one parent, but not multiple, allocate an Array to\n      // store the rest of the parent Subscriptions.\n      this._parents = [parent];\n    } else if (_parents.indexOf(parent) === -1) {\n      // Only add the new parent to the _parents list if it's not already there.\n      _parents.push(parent);\n    }\n  }\n}\n\nfunction flattenUnsubscriptionErrors(errors: any[]) {\n return errors.reduce((errs, err) => errs.concat((err instanceof UnsubscriptionError) ? err.errors : err), []);\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/Subscription.ts","import { Subscriber } from '../Subscriber';\nimport { rxSubscriber as rxSubscriberSymbol } from '../symbol/rxSubscriber';\nimport { PartialObserver, empty as emptyObserver } from '../Observer';\n\nexport function toSubscriber<T>(\n  nextOrObserver?: PartialObserver<T> | ((value: T) => void),\n  error?: (error: any) => void,\n  complete?: () => void): Subscriber<T> {\n\n  if (nextOrObserver) {\n    if (nextOrObserver instanceof Subscriber) {\n      return (<Subscriber<T>> nextOrObserver);\n    }\n\n    if (nextOrObserver[rxSubscriberSymbol]) {\n      return nextOrObserver[rxSubscriberSymbol]();\n    }\n  }\n\n  if (!nextOrObserver && !error && !complete) {\n    return new Subscriber(emptyObserver);\n  }\n\n  return new Subscriber(nextOrObserver, error, complete);\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/toSubscriber.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {InjectionToken} from '@angular/core';\n/**\n * This class should not be used directly by an application developer. Instead, use\n * {\\@link Location}.\n * \n * `PlatformLocation` encapsulates all calls to DOM apis, which allows the Router to be platform\n * agnostic.\n * This means that we can have different implementation of `PlatformLocation` for the different\n * platforms that angular supports. For example, `\\@angular/platform-browser` provides an\n * implementation specific to the browser environment, while `\\@angular/platform-webworker` provides\n * one suitable for use with web workers.\n * \n * The `PlatformLocation` class is used directly by all implementations of {\\@link LocationStrategy}\n * when they need to interact with the DOM apis like pushState, popState, etc...\n * \n * {\\@link LocationStrategy} in turn is used by the {\\@link Location} service which is used directly\n * by the {\\@link Router} in order to navigate between routes. Since all interactions between {\\@link\n * Router} /\n * {\\@link Location} / {\\@link LocationStrategy} and DOM apis flow through the `PlatformLocation`\n * class they are all platform independent.\n * \n * \\@stable\n * @abstract\n */\nexport abstract class PlatformLocation {\n/**\n * @abstract\n * @return {?}\n */\ngetBaseHrefFromDOM() {}\n/**\n * @abstract\n * @param {?} fn\n * @return {?}\n */\nonPopState(fn: LocationChangeListener) {}\n/**\n * @abstract\n * @param {?} fn\n * @return {?}\n */\nonHashChange(fn: LocationChangeListener) {}\n/**\n * @abstract\n * @return {?}\n */\npathname() {}\n/**\n * @abstract\n * @return {?}\n */\nsearch() {}\n/**\n * @abstract\n * @return {?}\n */\nhash() {}\n/**\n * @abstract\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\nreplaceState(state: any, title: string, url: string) {}\n/**\n * @abstract\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @return {?}\n */\npushState(state: any, title: string, url: string) {}\n/**\n * @abstract\n * @return {?}\n */\nforward() {}\n/**\n * @abstract\n * @return {?}\n */\nback() {}\n}\n/**\n * \\@whatItDoes indicates when a location is initialized\n * \\@experimental\n */\nexport const LOCATION_INITIALIZED = new InjectionToken<Promise<any>>('Location Initialized');\n\n/**\n * A serializable version of the event from onPopState or onHashChange\n *\n * @experimental\n */\nexport interface LocationChangeEvent { type: string; }\n\n/**\n * @experimental\n */\nexport interface LocationChangeListener { (e: LocationChangeEvent): any; }\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/location/platform_location.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {InjectionToken} from '@angular/core';\nimport {LocationChangeListener} from './platform_location';\n/**\n * `LocationStrategy` is responsible for representing and reading route state\n * from the browser's URL. Angular provides two strategies:\n * {\\@link HashLocationStrategy} and {\\@link PathLocationStrategy}.\n * \n * This is used under the hood of the {\\@link Location} service.\n * \n * Applications should use the {\\@link Router} or {\\@link Location} services to\n * interact with application route state.\n * \n * For instance, {\\@link HashLocationStrategy} produces URLs like\n * `http://example.com#/foo`, and {\\@link PathLocationStrategy} produces\n * `http://example.com/foo` as an equivalent URL.\n * \n * See these two classes for more.\n * \n * \\@stable\n * @abstract\n */\nexport abstract class LocationStrategy {\n/**\n * @abstract\n * @param {?=} includeHash\n * @return {?}\n */\npath(includeHash?: boolean) {}\n/**\n * @abstract\n * @param {?} internal\n * @return {?}\n */\nprepareExternalUrl(internal: string) {}\n/**\n * @abstract\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\npushState(state: any, title: string, url: string, queryParams: string) {}\n/**\n * @abstract\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\nreplaceState(state: any, title: string, url: string, queryParams: string) {}\n/**\n * @abstract\n * @return {?}\n */\nforward() {}\n/**\n * @abstract\n * @return {?}\n */\nback() {}\n/**\n * @abstract\n * @param {?} fn\n * @return {?}\n */\nonPopState(fn: LocationChangeListener) {}\n/**\n * @abstract\n * @return {?}\n */\ngetBaseHref() {}\n}\n/**\n * The `APP_BASE_HREF` token represents the base href to be used with the\n * {\\@link PathLocationStrategy}.\n * \n * If you're using {\\@link PathLocationStrategy}, you must provide a provider to a string\n * representing the URL prefix that should be preserved when generating and recognizing\n * URLs.\n * \n * ### Example\n * \n * ```typescript\n * import {Component, NgModule} from '\\@angular/core';\n * import {APP_BASE_HREF} from '\\@angular/common';\n * \n * \\@NgModule({ \n *   providers: [{provide: APP_BASE_HREF, useValue: '/my/app'}]\n * })\n * class AppModule {}\n * ```\n * \n * \\@stable\n */\nexport const APP_BASE_HREF = new InjectionToken<string>('appBaseHref');\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/location/location_strategy.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {EventEmitter, Injectable} from '@angular/core';\n\nimport {LocationStrategy} from './location_strategy';\n\n/** @experimental */\nexport interface PopStateEvent {\n  pop?: boolean;\n  type?: string;\n  url?: string;\n}\n/**\n * \\@whatItDoes `Location` is a service that applications can use to interact with a browser's URL.\n * \\@description \n * Depending on which {\\@link LocationStrategy} is used, `Location` will either persist\n * to the URL's path or the URL's hash segment.\n * \n * Note: it's better to use {\\@link Router#navigate} service to trigger route changes. Use\n * `Location` only if you need to interact with or create normalized URLs outside of\n * routing.\n * \n * `Location` is responsible for normalizing the URL against the application's base href.\n * A normalized URL is absolute from the URL host, includes the application's base href, and has no\n * trailing slash:\n * - `/my/app/user/123` is normalized\n * - `my/app/user/123` **is not** normalized\n * - `/my/app/user/123/` **is not** normalized\n * \n * ### Example\n * {\\@example common/location/ts/path_location_component.ts region='LocationComponent'}\n * \\@stable\n */\nexport class Location {\n/**\n * \\@internal\n */\n_subject: EventEmitter<any> = new EventEmitter();\n/**\n * \\@internal\n */\n_baseHref: string;\n/**\n * \\@internal\n */\n_platformStrategy: LocationStrategy;\n/**\n * @param {?} platformStrategy\n */\nconstructor(platformStrategy: LocationStrategy) {\n    this._platformStrategy = platformStrategy;\n    const browserBaseHref = this._platformStrategy.getBaseHref();\n    this._baseHref = Location.stripTrailingSlash(_stripIndexHtml(browserBaseHref));\n    this._platformStrategy.onPopState((ev) => {\n      this._subject.emit({\n        'url': this.path(true),\n        'pop': true,\n        'type': ev.type,\n      });\n    });\n  }\n/**\n * @param {?=} includeHash\n * @return {?}\n */\npath(includeHash: boolean = false): string {\n    return this.normalize(this._platformStrategy.path(includeHash));\n  }\n/**\n * Normalizes the given path and compares to the current normalized path.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\nisCurrentPathEqualTo(path: string, query: string = ''): boolean {\n    return this.path() == this.normalize(path + Location.normalizeQueryParams(query));\n  }\n/**\n * Given a string representing a URL, returns the normalized URL path without leading or\n * trailing slashes.\n * @param {?} url\n * @return {?}\n */\nnormalize(url: string): string {\n    return Location.stripTrailingSlash(_stripBaseHref(this._baseHref, _stripIndexHtml(url)));\n  }\n/**\n * Given a string representing a URL, returns the platform-specific external URL path.\n * If the given URL doesn't begin with a leading slash (`'/'`), this method adds one\n * before normalizing. This method will also add a hash if `HashLocationStrategy` is\n * used, or the `APP_BASE_HREF` if the `PathLocationStrategy` is in use.\n * @param {?} url\n * @return {?}\n */\nprepareExternalUrl(url: string): string {\n    if (url && url[0] !== '/') {\n      url = '/' + url;\n    }\n    return this._platformStrategy.prepareExternalUrl(url);\n  }\n/**\n * Changes the browsers URL to the normalized version of the given URL, and pushes a\n * new item onto the platform's history.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\ngo(path: string, query: string = ''): void {\n    this._platformStrategy.pushState(null, '', path, query);\n  }\n/**\n * Changes the browsers URL to the normalized version of the given URL, and replaces\n * the top item on the platform's history stack.\n * @param {?} path\n * @param {?=} query\n * @return {?}\n */\nreplaceState(path: string, query: string = ''): void {\n    this._platformStrategy.replaceState(null, '', path, query);\n  }\n/**\n * Navigates forward in the platform's history.\n * @return {?}\n */\nforward(): void { this._platformStrategy.forward(); }\n/**\n * Navigates back in the platform's history.\n * @return {?}\n */\nback(): void { this._platformStrategy.back(); }\n/**\n * Subscribe to the platform's `popState` events.\n * @param {?} onNext\n * @param {?=} onThrow\n * @param {?=} onReturn\n * @return {?}\n */\nsubscribe(\n      onNext: (value: PopStateEvent) => void, onThrow?: ((exception: any) => void)|null,\n      onReturn?: (() => void)|null): Object {\n    return this._subject.subscribe({next: onNext, error: onThrow, complete: onReturn});\n  }\n/**\n * Given a string of url parameters, prepend with '?' if needed, otherwise return parameters as\n * is.\n * @param {?} params\n * @return {?}\n */\npublic static normalizeQueryParams(params: string): string {\n    return params && params[0] !== '?' ? '?' + params : params;\n  }\n/**\n * Given 2 parts of a url, join them with a slash if needed.\n * @param {?} start\n * @param {?} end\n * @return {?}\n */\npublic static joinWithSlash(start: string, end: string): string {\n    if (start.length == 0) {\n      return end;\n    }\n    if (end.length == 0) {\n      return start;\n    }\n    let /** @type {?} */ slashes = 0;\n    if (start.endsWith('/')) {\n      slashes++;\n    }\n    if (end.startsWith('/')) {\n      slashes++;\n    }\n    if (slashes == 2) {\n      return start + end.substring(1);\n    }\n    if (slashes == 1) {\n      return start + end;\n    }\n    return start + '/' + end;\n  }\n/**\n * If url has a trailing slash, remove it, otherwise return url as is.\n * @param {?} url\n * @return {?}\n */\npublic static stripTrailingSlash(url: string): string { return url.replace(/\\/$/, ''); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: LocationStrategy, },\n];\n}\n\nfunction Location_tsickle_Closure_declarations() {\n/** @type {?} */\nLocation.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nLocation.ctorParameters;\n/**\n * \\@internal\n * @type {?}\n */\nLocation.prototype._subject;\n/**\n * \\@internal\n * @type {?}\n */\nLocation.prototype._baseHref;\n/**\n * \\@internal\n * @type {?}\n */\nLocation.prototype._platformStrategy;\n}\n\n/**\n * @param {?} baseHref\n * @param {?} url\n * @return {?}\n */\nfunction _stripBaseHref(baseHref: string, url: string): string {\n  return baseHref && url.startsWith(baseHref) ? url.substring(baseHref.length) : url;\n}\n/**\n * @param {?} url\n * @return {?}\n */\nfunction _stripIndexHtml(url: string): string {\n  return url.replace(/\\/index.html$/, '');\n}\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/location/location.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable, Optional} from '@angular/core';\n\n\nimport {Location} from './location';\nimport {APP_BASE_HREF, LocationStrategy} from './location_strategy';\nimport {LocationChangeListener, PlatformLocation} from './platform_location';\n/**\n * \\@whatItDoes Use URL hash for storing application location data.\n * \\@description \n * `HashLocationStrategy` is a {\\@link LocationStrategy} used to configure the\n * {\\@link Location} service to represent its state in the\n * [hash fragment](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax)\n * of the browser's URL.\n * \n * For instance, if you call `location.go('/foo')`, the browser's URL will become\n * `example.com#/foo`.\n * \n * ### Example\n * \n * {\\@example common/location/ts/hash_location_component.ts region='LocationComponent'}\n * \n * \\@stable\n */\nexport class HashLocationStrategy extends LocationStrategy {\nprivate _baseHref: string = '';\n/**\n * @param {?} _platformLocation\n * @param {?=} _baseHref\n */\nconstructor(\nprivate _platformLocation: PlatformLocation,\n        _baseHref?: string) {\n    super();\n    if (_baseHref != null) {\n      this._baseHref = _baseHref;\n    }\n  }\n/**\n * @param {?} fn\n * @return {?}\n */\nonPopState(fn: LocationChangeListener): void {\n    this._platformLocation.onPopState(fn);\n    this._platformLocation.onHashChange(fn);\n  }\n/**\n * @return {?}\n */\ngetBaseHref(): string { return this._baseHref; }\n/**\n * @param {?=} includeHash\n * @return {?}\n */\npath(includeHash: boolean = false): string {\n    // the hash value is always prefixed with a `#`\n    // and if it is empty then it will stay empty\n    let /** @type {?} */ path = this._platformLocation.hash;\n    if (path == null) path = '#';\n\n    return path.length > 0 ? path.substring(1) : path;\n  }\n/**\n * @param {?} internal\n * @return {?}\n */\nprepareExternalUrl(internal: string): string {\n    const /** @type {?} */ url = Location.joinWithSlash(this._baseHref, internal);\n    return url.length > 0 ? ('#' + url) : url;\n  }\n/**\n * @param {?} state\n * @param {?} title\n * @param {?} path\n * @param {?} queryParams\n * @return {?}\n */\npushState(state: any, title: string, path: string, queryParams: string) {\n    let /** @type {?} */ url: string|null =\n        this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));\n    if (url.length == 0) {\n      url = this._platformLocation.pathname;\n    }\n    this._platformLocation.pushState(state, title, url);\n  }\n/**\n * @param {?} state\n * @param {?} title\n * @param {?} path\n * @param {?} queryParams\n * @return {?}\n */\nreplaceState(state: any, title: string, path: string, queryParams: string) {\n    let /** @type {?} */ url = this.prepareExternalUrl(path + Location.normalizeQueryParams(queryParams));\n    if (url.length == 0) {\n      url = this._platformLocation.pathname;\n    }\n    this._platformLocation.replaceState(state, title, url);\n  }\n/**\n * @return {?}\n */\nforward(): void { this._platformLocation.forward(); }\n/**\n * @return {?}\n */\nback(): void { this._platformLocation.back(); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: PlatformLocation, },\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_BASE_HREF, ] }, ]},\n];\n}\n\nfunction HashLocationStrategy_tsickle_Closure_declarations() {\n/** @type {?} */\nHashLocationStrategy.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nHashLocationStrategy.ctorParameters;\n/** @type {?} */\nHashLocationStrategy.prototype._baseHref;\n/** @type {?} */\nHashLocationStrategy.prototype._platformLocation;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/location/hash_location_strategy.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Inject, Injectable, Optional} from '@angular/core';\n\n\nimport {Location} from './location';\nimport {APP_BASE_HREF, LocationStrategy} from './location_strategy';\nimport {LocationChangeListener, PlatformLocation} from './platform_location';\n/**\n * \\@whatItDoes Use URL for storing application location data.\n * \\@description \n * `PathLocationStrategy` is a {\\@link LocationStrategy} used to configure the\n * {\\@link Location} service to represent its state in the\n * [path](https://en.wikipedia.org/wiki/Uniform_Resource_Locator#Syntax) of the\n * browser's URL.\n * \n * If you're using `PathLocationStrategy`, you must provide a {\\@link APP_BASE_HREF}\n * or add a base element to the document. This URL prefix that will be preserved\n * when generating and recognizing URLs.\n * \n * For instance, if you provide an `APP_BASE_HREF` of `'/my/app'` and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n * \n * Similarly, if you add `<base href='/my/app'/>` to the document and call\n * `location.go('/foo')`, the browser's URL will become\n * `example.com/my/app/foo`.\n * \n * ### Example\n * \n * {\\@example common/location/ts/path_location_component.ts region='LocationComponent'}\n * \n * \\@stable\n */\nexport class PathLocationStrategy extends LocationStrategy {\nprivate _baseHref: string;\n/**\n * @param {?} _platformLocation\n * @param {?=} href\n */\nconstructor(\nprivate _platformLocation: PlatformLocation,\n        href?: string) {\n    super();\n\n    if (href == null) {\n      href = this._platformLocation.getBaseHrefFromDOM();\n    }\n\n    if (href == null) {\n      throw new Error(\n          `No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.`);\n    }\n\n    this._baseHref = href;\n  }\n/**\n * @param {?} fn\n * @return {?}\n */\nonPopState(fn: LocationChangeListener): void {\n    this._platformLocation.onPopState(fn);\n    this._platformLocation.onHashChange(fn);\n  }\n/**\n * @return {?}\n */\ngetBaseHref(): string { return this._baseHref; }\n/**\n * @param {?} internal\n * @return {?}\n */\nprepareExternalUrl(internal: string): string {\n    return Location.joinWithSlash(this._baseHref, internal);\n  }\n/**\n * @param {?=} includeHash\n * @return {?}\n */\npath(includeHash: boolean = false): string {\n    const /** @type {?} */ pathname = this._platformLocation.pathname +\n        Location.normalizeQueryParams(this._platformLocation.search);\n    const /** @type {?} */ hash = this._platformLocation.hash;\n    return hash && includeHash ? `${pathname}${hash}` : pathname;\n  }\n/**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\npushState(state: any, title: string, url: string, queryParams: string) {\n    const /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));\n    this._platformLocation.pushState(state, title, externalUrl);\n  }\n/**\n * @param {?} state\n * @param {?} title\n * @param {?} url\n * @param {?} queryParams\n * @return {?}\n */\nreplaceState(state: any, title: string, url: string, queryParams: string) {\n    const /** @type {?} */ externalUrl = this.prepareExternalUrl(url + Location.normalizeQueryParams(queryParams));\n    this._platformLocation.replaceState(state, title, externalUrl);\n  }\n/**\n * @return {?}\n */\nforward(): void { this._platformLocation.forward(); }\n/**\n * @return {?}\n */\nback(): void { this._platformLocation.back(); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: PlatformLocation, },\n{type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [APP_BASE_HREF, ] }, ]},\n];\n}\n\nfunction PathLocationStrategy_tsickle_Closure_declarations() {\n/** @type {?} */\nPathLocationStrategy.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nPathLocationStrategy.ctorParameters;\n/** @type {?} */\nPathLocationStrategy.prototype._baseHref;\n/** @type {?} */\nPathLocationStrategy.prototype._platformLocation;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/location/path_location_strategy.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport {PlatformLocation,LOCATION_INITIALIZED,LocationChangeEvent,LocationChangeListener} from './platform_location';\nexport {LocationStrategy,APP_BASE_HREF} from './location_strategy';\nexport {HashLocationStrategy} from './hash_location_strategy';\nexport {PathLocationStrategy} from './path_location_strategy';\nexport {PopStateEvent,Location} from './location';\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/location/index.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {ComponentFactoryResolver, ComponentRef, Directive, Injector, Input, NgModuleFactory, NgModuleRef, OnChanges, OnDestroy, Provider, SimpleChanges, Type, ViewContainerRef} from '@angular/core';\n/**\n * Instantiates a single {\\@link Component} type and inserts its Host View into current View.\n * `NgComponentOutlet` provides a declarative approach for dynamic component creation.\n * \n * `NgComponentOutlet` requires a component type, if a falsy value is set the view will clear and\n * any existing component will get destroyed.\n * \n * ### Fine tune control\n * \n * You can control the component creation process by using the following optional attributes:\n * \n * * `ngComponentOutletInjector`: Optional custom {\\@link Injector} that will be used as parent for\n * the Component. Defaults to the injector of the current view container.\n * \n * * `ngComponentOutletContent`: Optional list of projectable nodes to insert into the content\n * section of the component, if exists.\n * \n * * `ngComponentOutletNgModuleFactory`: Optional module factory to allow dynamically loading other\n * module, then load a component from that module.\n * \n * ### Syntax\n * \n * Simple\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression\"></ng-container>\n * ```\n * \n * Customized injector/content\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   injector: injectorExpression;\n *                                   content: contentNodesExpression;\">\n * </ng-container>\n * ```\n * \n * Customized ngModuleFactory\n * ```\n * <ng-container *ngComponentOutlet=\"componentTypeExpression;\n *                                   ngModuleFactory: moduleFactory;\">\n * </ng-container>\n * ```\n * ## Example\n * \n * {\\@example common/ngComponentOutlet/ts/module.ts region='SimpleExample'}\n * \n * A more complete example with additional options:\n * \n * {\\@example common/ngComponentOutlet/ts/module.ts region='CompleteExample'}\n * A more complete example with ngModuleFactory:\n * \n * {\\@example common/ngComponentOutlet/ts/module.ts region='NgModuleFactoryExample'}\n * \n * \\@experimental\n */\nexport class NgComponentOutlet implements OnChanges, OnDestroy {\n   ngComponentOutlet: Type<any>;\n   ngComponentOutletInjector: Injector;\n   ngComponentOutletContent: any[][];\n   ngComponentOutletNgModuleFactory: NgModuleFactory<any>;\nprivate _componentRef: ComponentRef<any>|null = null;\nprivate _moduleRef: NgModuleRef<any>|null = null;\n/**\n * @param {?} _viewContainerRef\n */\nconstructor(private _viewContainerRef: ViewContainerRef) {}\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges) {\n    this._viewContainerRef.clear();\n    this._componentRef = null;\n\n    if (this.ngComponentOutlet) {\n      const /** @type {?} */ elInjector = this.ngComponentOutletInjector || this._viewContainerRef.parentInjector;\n\n      if (changes['ngComponentOutletNgModuleFactory']) {\n        if (this._moduleRef) this._moduleRef.destroy();\n\n        if (this.ngComponentOutletNgModuleFactory) {\n          const /** @type {?} */ parentModule = elInjector.get(NgModuleRef);\n          this._moduleRef = this.ngComponentOutletNgModuleFactory.create(parentModule.injector);\n        } else {\n          this._moduleRef = null;\n        }\n      }\n\n      const /** @type {?} */ componentFactoryResolver = this._moduleRef ? this._moduleRef.componentFactoryResolver :\n                                                         elInjector.get(ComponentFactoryResolver);\n\n      const /** @type {?} */ componentFactory =\n          componentFactoryResolver.resolveComponentFactory(this.ngComponentOutlet);\n\n      this._componentRef = this._viewContainerRef.createComponent(\n          componentFactory, this._viewContainerRef.length, elInjector,\n          this.ngComponentOutletContent);\n    }\n  }\n/**\n * @return {?}\n */\nngOnDestroy() {\n    if (this._moduleRef) this._moduleRef.destroy();\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngComponentOutlet]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ViewContainerRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ngComponentOutlet': [{ type: Input },],\n'ngComponentOutletInjector': [{ type: Input },],\n'ngComponentOutletContent': [{ type: Input },],\n'ngComponentOutletNgModuleFactory': [{ type: Input },],\n};\n}\n\nfunction NgComponentOutlet_tsickle_Closure_declarations() {\n/** @type {?} */\nNgComponentOutlet.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgComponentOutlet.ctorParameters;\n/** @type {?} */\nNgComponentOutlet.propDecorators;\n/** @type {?} */\nNgComponentOutlet.prototype.ngComponentOutlet;\n/** @type {?} */\nNgComponentOutlet.prototype.ngComponentOutletInjector;\n/** @type {?} */\nNgComponentOutlet.prototype.ngComponentOutletContent;\n/** @type {?} */\nNgComponentOutlet.prototype.ngComponentOutletNgModuleFactory;\n/** @type {?} */\nNgComponentOutlet.prototype._componentRef;\n/** @type {?} */\nNgComponentOutlet.prototype._moduleRef;\n/** @type {?} */\nNgComponentOutlet.prototype._viewContainerRef;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/ng_component_outlet.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {ChangeDetectorRef, Directive, DoCheck, EmbeddedViewRef, Input, IterableChangeRecord, IterableChanges, IterableDiffer, IterableDiffers, NgIterable, OnChanges, SimpleChanges, TemplateRef, TrackByFunction, ViewContainerRef, forwardRef, isDevMode} from '@angular/core';\n/**\n * \\@stable\n */\nexport class NgForOfContext<T> {\n/**\n * @param {?} $implicit\n * @param {?} ngForOf\n * @param {?} index\n * @param {?} count\n */\nconstructor(\npublic $implicit: T,\npublic ngForOf: NgIterable<T>,\npublic index: number,\npublic count: number) {}\n/**\n * @return {?}\n */\nget first(): boolean { return this.index === 0; }\n/**\n * @return {?}\n */\nget last(): boolean { return this.index === this.count - 1; }\n/**\n * @return {?}\n */\nget even(): boolean { return this.index % 2 === 0; }\n/**\n * @return {?}\n */\nget odd(): boolean { return !this.even; }\n}\n\nfunction NgForOfContext_tsickle_Closure_declarations() {\n/** @type {?} */\nNgForOfContext.prototype.$implicit;\n/** @type {?} */\nNgForOfContext.prototype.ngForOf;\n/** @type {?} */\nNgForOfContext.prototype.index;\n/** @type {?} */\nNgForOfContext.prototype.count;\n}\n\n/**\n * The `NgForOf` directive instantiates a template once per item from an iterable. The context\n * for each instantiated template inherits from the outer context with the given loop variable\n * set to the current item from the iterable.\n * \n * ### Local Variables\n * \n * `NgForOf` provides several exported values that can be aliased to local variables:\n * \n * - `$implicit: T`: The value of the individual items in the iterable (`ngForOf`).\n * - `ngForOf: NgIterable<T>`: The value of the iterable expression. Useful when the expression is\n * more complex then a property access, for example when using the async pipe (`userStreams |\n * async`).\n * - `index: number`: The index of the current item in the iterable.\n * - `first: boolean`: True when the item is the first item in the iterable.\n * - `last: boolean`: True when the item is the last item in the iterable.\n * - `even: boolean`: True when the item has an even index in the iterable.\n * - `odd: boolean`: True when the item has an odd index in the iterable.\n * \n * ```\n * <li *ngFor=\"let user of userObservable | async as users; index as i; first as isFirst\">\n *    {{i}}/{{users.length}}. {{user}} <span *ngIf=\"isFirst\">default</span>\n * </li>\n * ```\n * \n * ### Change Propagation\n * \n * When the contents of the iterator changes, `NgForOf` makes the corresponding changes to the DOM:\n * \n * * When an item is added, a new instance of the template is added to the DOM.\n * * When an item is removed, its template instance is removed from the DOM.\n * * When items are reordered, their respective templates are reordered in the DOM.\n * * Otherwise, the DOM element for that item will remain the same.\n * \n * Angular uses object identity to track insertions and deletions within the iterator and reproduce\n * those changes in the DOM. This has important implications for animations and any stateful\n * controls (such as `<input>` elements which accept user input) that are present. Inserted rows can\n * be animated in, deleted rows can be animated out, and unchanged rows retain any unsaved state\n * such as user input.\n * \n * It is possible for the identities of elements in the iterator to change while the data does not.\n * This can happen, for example, if the iterator produced from an RPC to the server, and that\n * RPC is re-run. Even if the data hasn't changed, the second response will produce objects with\n * different identities, and Angular will tear down the entire DOM and rebuild it (as if all old\n * elements were deleted and all new elements inserted). This is an expensive operation and should\n * be avoided if possible.\n * \n * To customize the default tracking algorithm, `NgForOf` supports `trackBy` option.\n * `trackBy` takes a function which has two arguments: `index` and `item`.\n * If `trackBy` is given, Angular tracks changes by the return value of the function.\n * \n * ### Syntax\n * \n * - `<li *ngFor=\"let item of items; index as i; trackBy: trackByFn\">...</li>`\n * - `<li template=\"ngFor let item of items; index as i; trackBy: trackByFn\">...</li>`\n * \n * With `<ng-template>` element:\n * \n * ```\n * <ng-template ngFor let-item [ngForOf]=\"items\" let-i=\"index\" [ngForTrackBy]=\"trackByFn\">\n *   <li>...</li>\n * </ng-template>\n * ```\n * \n * ### Example\n * \n * See a [live demo](http://plnkr.co/edit/KVuXxDp0qinGDyo307QW?p=preview) for a more detailed\n * example.\n * \n * \\@stable\n */\nexport class NgForOf<T> implements DoCheck, OnChanges {\n   ngForOf: NgIterable<T>;\n/**\n * @param {?} fn\n * @return {?}\n */\nset ngForTrackBy(fn: TrackByFunction<T>) {\n    if (isDevMode() && fn != null && typeof fn !== 'function') {\n      // TODO(vicb): use a log service once there is a public one available\n      if ( /** @type {?} */((<any>console)) && /** @type {?} */(( <any>console.warn))) {\n        console.warn(\n            `trackBy must be a function, but received ${JSON.stringify(fn)}. ` +\n            `See https://angular.io/docs/ts/latest/api/common/index/NgFor-directive.html#!#change-propagation for more information.`);\n      }\n    }\n    this._trackByFn = fn;\n  }\n/**\n * @return {?}\n */\nget ngForTrackBy(): TrackByFunction<T> { return this._trackByFn; }\nprivate _differ: IterableDiffer<T>|null = null;\nprivate _trackByFn: TrackByFunction<T>;\n/**\n * @param {?} _viewContainer\n * @param {?} _template\n * @param {?} _differs\n */\nconstructor(\nprivate _viewContainer: ViewContainerRef,\nprivate _template: TemplateRef<NgForOfContext<T>>,\nprivate _differs: IterableDiffers) {}\n/**\n * @param {?} value\n * @return {?}\n */\nset ngForTemplate(value: TemplateRef<NgForOfContext<T>>) {\n    // TODO(TS2.1): make TemplateRef<Partial<NgForRowOf<T>>> once we move to TS v2.1\n    // The current type is too restrictive; a template that just uses index, for example,\n    // should be acceptable.\n    if (value) {\n      this._template = value;\n    }\n  }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges): void {\n    if ('ngForOf' in changes) {\n      // React on ngForOf changes only once all inputs have been initialized\n      const /** @type {?} */ value = changes['ngForOf'].currentValue;\n      if (!this._differ && value) {\n        try {\n          this._differ = this._differs.find(value).create(this.ngForTrackBy);\n        } catch ( /** @type {?} */e) {\n          throw new Error(\n              `Cannot find a differ supporting object '${value}' of type '${getTypeNameForDebugging(value)}'. NgFor only supports binding to Iterables such as Arrays.`);\n        }\n      }\n    }\n  }\n/**\n * @return {?}\n */\nngDoCheck(): void {\n    if (this._differ) {\n      const /** @type {?} */ changes = this._differ.diff(this.ngForOf);\n      if (changes) this._applyChanges(changes);\n    }\n  }\n/**\n * @param {?} changes\n * @return {?}\n */\nprivate _applyChanges(changes: IterableChanges<T>) {\n    const /** @type {?} */ insertTuples: RecordViewTuple<T>[] = [];\n    changes.forEachOperation(\n        (item: IterableChangeRecord<any>, adjustedPreviousIndex: number, currentIndex: number) => {\n          if (item.previousIndex == null) {\n            const /** @type {?} */ view = this._viewContainer.createEmbeddedView(\n                this._template, new NgForOfContext<T>( /** @type {?} */((null)), this.ngForOf, -1, -1), currentIndex);\n            const /** @type {?} */ tuple = new RecordViewTuple<T>(item, view);\n            insertTuples.push(tuple);\n          } else if (currentIndex == null) {\n            this._viewContainer.remove(adjustedPreviousIndex);\n          } else {\n            const /** @type {?} */ view = /** @type {?} */(( this._viewContainer.get(adjustedPreviousIndex)));\n            this._viewContainer.move(view, currentIndex);\n            const /** @type {?} */ tuple = new RecordViewTuple(item, /** @type {?} */(( <EmbeddedViewRef<NgForOfContext<T>>>view)));\n            insertTuples.push(tuple);\n          }\n        });\n\n    for (let /** @type {?} */ i = 0; i < insertTuples.length; i++) {\n      this._perViewChange(insertTuples[i].view, insertTuples[i].record);\n    }\n\n    for (let /** @type {?} */ i = 0, /** @type {?} */ ilen = this._viewContainer.length; i < ilen; i++) {\n      const /** @type {?} */ viewRef = /** @type {?} */(( <EmbeddedViewRef<NgForOfContext<T>>>this._viewContainer.get(i)));\n      viewRef.context.index = i;\n      viewRef.context.count = ilen;\n    }\n\n    changes.forEachIdentityChange((record: any) => {\n      const /** @type {?} */ viewRef = /** @type {?} */((\n          <EmbeddedViewRef<NgForOfContext<T>>>this._viewContainer.get(record.currentIndex)));\n      viewRef.context.$implicit = record.item;\n    });\n  }\n/**\n * @param {?} view\n * @param {?} record\n * @return {?}\n */\nprivate _perViewChange(\n      view: EmbeddedViewRef<NgForOfContext<T>>, record: IterableChangeRecord<any>) {\n    view.context.$implicit = record.item;\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngFor][ngForOf]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ViewContainerRef, },\n{type: TemplateRef, },\n{type: IterableDiffers, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ngForOf': [{ type: Input },],\n'ngForTrackBy': [{ type: Input },],\n'ngForTemplate': [{ type: Input },],\n};\n}\n\nfunction NgForOf_tsickle_Closure_declarations() {\n/** @type {?} */\nNgForOf.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgForOf.ctorParameters;\n/** @type {?} */\nNgForOf.propDecorators;\n/** @type {?} */\nNgForOf.prototype.ngForOf;\n/** @type {?} */\nNgForOf.prototype._differ;\n/** @type {?} */\nNgForOf.prototype._trackByFn;\n/** @type {?} */\nNgForOf.prototype._viewContainer;\n/** @type {?} */\nNgForOf.prototype._template;\n/** @type {?} */\nNgForOf.prototype._differs;\n}\n\nclass RecordViewTuple<T> {\n/**\n * @param {?} record\n * @param {?} view\n */\nconstructor(public record: any,\npublic view: EmbeddedViewRef<NgForOfContext<T>>) {}\n}\n\nfunction RecordViewTuple_tsickle_Closure_declarations() {\n/** @type {?} */\nRecordViewTuple.prototype.record;\n/** @type {?} */\nRecordViewTuple.prototype.view;\n}\n\n\n/**\n * @deprecated from v4.0.0 - Use NgForOf<any> instead.\n */\nexport type NgFor = NgForOf<any>;\n/**\n * @deprecated from v4.0.0 - Use NgForOf instead.\n */\nexport const NgFor = NgForOf;\n/**\n * @param {?} type\n * @return {?}\n */\nexport function getTypeNameForDebugging(type: any): string {\n  return type['name'] || typeof type;\n}\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/ng_for_of.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Directive, EmbeddedViewRef, Input, TemplateRef, ViewContainerRef} from '@angular/core';\n/**\n * Conditionally includes a template based on the value of an `expression`.\n * \n * `ngIf` evaluates the `expression` and then renders the `then` or `else` template in its place\n * when expression is truthy or falsy respectively. Typically the:\n *  - `then` template is the inline template of `ngIf` unless bound to a different value.\n *  - `else` template is blank unless it is bound.\n * \n * ## Most common usage\n * \n * The most common usage of the `ngIf` directive is to conditionally show the inline template as\n * seen in this example:\n * {\\@example common/ngIf/ts/module.ts region='NgIfSimple'}\n * \n * ## Showing an alternative template using `else`\n * \n * If it is necessary to display a template when the `expression` is falsy use the `else` template\n * binding as shown. Note that the `else` binding points to a `<ng-template>` labeled `#elseBlock`.\n * The template can be defined anywhere in the component view but is typically placed right after\n * `ngIf` for readability.\n * \n * {\\@example common/ngIf/ts/module.ts region='NgIfElse'}\n * \n * ## Using non-inlined `then` template\n * \n * Usually the `then` template is the inlined template of the `ngIf`, but it can be changed using\n * a binding (just like `else`). Because `then` and `else` are bindings, the template references can\n * change at runtime as shown in this example.\n * \n * {\\@example common/ngIf/ts/module.ts region='NgIfThenElse'}\n * \n * ## Storing conditional result in a variable\n * \n * A common pattern is that we need to show a set of properties from the same object. If the\n * object is undefined, then we have to use the safe-traversal-operator `?.` to guard against\n * dereferencing a `null` value. This is especially the case when waiting on async data such as\n * when using the `async` pipe as shown in folowing example:\n * \n * ```\n * Hello {{ (userStream|async)?.last }}, {{ (userStream|async)?.first }}!\n * ```\n * \n * There are several inefficiencies in the above example:\n *  - We create multiple subscriptions on `userStream`. One for each `async` pipe, or two in the\n *    example above.\n *  - We cannot display an alternative screen while waiting for the data to arrive asynchronously.\n *  - We have to use the safe-traversal-operator `?.` to access properties, which is cumbersome.\n *  - We have to place the `async` pipe in parenthesis.\n * \n * A better way to do this is to use `ngIf` and store the result of the condition in a local\n * variable as shown in the the example below:\n * \n * {\\@example common/ngIf/ts/module.ts region='NgIfAs'}\n * \n * Notice that:\n *  - We use only one `async` pipe and hence only one subscription gets created.\n *  - `ngIf` stores the result of the `userStream|async` in the local variable `user`.\n *  - The local `user` can then be bound repeatedly in a more efficient way.\n *  - No need to use the safe-traversal-operator `?.` to access properties as `ngIf` will only\n *    display the data if `userStream` returns a value.\n *  - We can display an alternative template while waiting for the data.\n * \n * ### Syntax\n * \n * Simple form:\n * - `<div *ngIf=\"condition\">...</div>`\n * - `<div template=\"ngIf condition\">...</div>`\n * - `<ng-template [ngIf]=\"condition\"><div>...</div></ng-template>`\n * \n * Form with an else block:\n * ```\n * <div *ngIf=\"condition; else elseBlock\">...</div>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n * \n * Form with a `then` and `else` block:\n * ```\n * <div *ngIf=\"condition; then thenBlock else elseBlock\"></div>\n * <ng-template #thenBlock>...</ng-template>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n * \n * Form with storing the value locally:\n * ```\n * <div *ngIf=\"condition as value; else elseBlock\">{{value}}</div>\n * <ng-template #elseBlock>...</ng-template>\n * ```\n * \n * \\@stable\n */\nexport class NgIf {\nprivate _context: NgIfContext = new NgIfContext();\nprivate _thenTemplateRef: TemplateRef<NgIfContext>|null = null;\nprivate _elseTemplateRef: TemplateRef<NgIfContext>|null = null;\nprivate _thenViewRef: EmbeddedViewRef<NgIfContext>|null = null;\nprivate _elseViewRef: EmbeddedViewRef<NgIfContext>|null = null;\n/**\n * @param {?} _viewContainer\n * @param {?} templateRef\n */\nconstructor(private _viewContainer: ViewContainerRef, templateRef: TemplateRef<NgIfContext>) {\n    this._thenTemplateRef = templateRef;\n  }\n/**\n * @param {?} condition\n * @return {?}\n */\nset ngIf(condition: any) {\n    this._context.$implicit = this._context.ngIf = condition;\n    this._updateView();\n  }\n/**\n * @param {?} templateRef\n * @return {?}\n */\nset ngIfThen(templateRef: TemplateRef<NgIfContext>) {\n    this._thenTemplateRef = templateRef;\n    this._thenViewRef = null;  // clear previous view if any.\n    this._updateView();\n  }\n/**\n * @param {?} templateRef\n * @return {?}\n */\nset ngIfElse(templateRef: TemplateRef<NgIfContext>) {\n    this._elseTemplateRef = templateRef;\n    this._elseViewRef = null;  // clear previous view if any.\n    this._updateView();\n  }\n/**\n * @return {?}\n */\nprivate _updateView() {\n    if (this._context.$implicit) {\n      if (!this._thenViewRef) {\n        this._viewContainer.clear();\n        this._elseViewRef = null;\n        if (this._thenTemplateRef) {\n          this._thenViewRef =\n              this._viewContainer.createEmbeddedView(this._thenTemplateRef, this._context);\n        }\n      }\n    } else {\n      if (!this._elseViewRef) {\n        this._viewContainer.clear();\n        this._thenViewRef = null;\n        if (this._elseTemplateRef) {\n          this._elseViewRef =\n              this._viewContainer.createEmbeddedView(this._elseTemplateRef, this._context);\n        }\n      }\n    }\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngIf]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ViewContainerRef, },\n{type: TemplateRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ngIf': [{ type: Input },],\n'ngIfThen': [{ type: Input },],\n'ngIfElse': [{ type: Input },],\n};\n}\n\nfunction NgIf_tsickle_Closure_declarations() {\n/** @type {?} */\nNgIf.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgIf.ctorParameters;\n/** @type {?} */\nNgIf.propDecorators;\n/** @type {?} */\nNgIf.prototype._context;\n/** @type {?} */\nNgIf.prototype._thenTemplateRef;\n/** @type {?} */\nNgIf.prototype._elseTemplateRef;\n/** @type {?} */\nNgIf.prototype._thenViewRef;\n/** @type {?} */\nNgIf.prototype._elseViewRef;\n/** @type {?} */\nNgIf.prototype._viewContainer;\n}\n\n/**\n * \\@stable\n */\nexport class NgIfContext {\npublic $implicit: any = null;\npublic ngIf: any = null;\n}\n\nfunction NgIfContext_tsickle_Closure_declarations() {\n/** @type {?} */\nNgIfContext.prototype.$implicit;\n/** @type {?} */\nNgIfContext.prototype.ngIf;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/ng_if.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Directive, DoCheck, Host, Input, TemplateRef, ViewContainerRef} from '@angular/core';\nexport class SwitchView {\nprivate _created = false;\n/**\n * @param {?} _viewContainerRef\n * @param {?} _templateRef\n */\nconstructor(\nprivate _viewContainerRef: ViewContainerRef,\nprivate _templateRef: TemplateRef<Object>) {}\n/**\n * @return {?}\n */\ncreate(): void {\n    this._created = true;\n    this._viewContainerRef.createEmbeddedView(this._templateRef);\n  }\n/**\n * @return {?}\n */\ndestroy(): void {\n    this._created = false;\n    this._viewContainerRef.clear();\n  }\n/**\n * @param {?} created\n * @return {?}\n */\nenforceState(created: boolean) {\n    if (created && !this._created) {\n      this.create();\n    } else if (!created && this._created) {\n      this.destroy();\n    }\n  }\n}\n\nfunction SwitchView_tsickle_Closure_declarations() {\n/** @type {?} */\nSwitchView.prototype._created;\n/** @type {?} */\nSwitchView.prototype._viewContainerRef;\n/** @type {?} */\nSwitchView.prototype._templateRef;\n}\n\n/**\n * \\@ngModule CommonModule\n * \n * \\@whatItDoes Adds / removes DOM sub-trees when the nest match expressions matches the switch\n *             expression.\n * \n * \\@howToUse \n * ```\n *     <container-element [ngSwitch]=\"switch_expression\">\n *       <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *       <some-element *ngSwitchCase=\"match_expression_2\">...</some-element>\n *       <some-other-element *ngSwitchCase=\"match_expression_3\">...</some-other-element>\n *       <ng-container *ngSwitchCase=\"match_expression_3\">\n *         <!-- use a ng-container to group multiple root nodes -->\n *         <inner-element></inner-element>\n *         <inner-other-element></inner-other-element>\n *       </ng-container>\n *       <some-element *ngSwitchDefault>...</some-element>\n *     </container-element>\n * ```\n * \\@description \n * \n * `NgSwitch` stamps out nested views when their match expression value matches the value of the\n * switch expression.\n * \n * In other words:\n * - you define a container element (where you place the directive with a switch expression on the\n * `[ngSwitch]=\"...\"` attribute)\n * - you define inner views inside the `NgSwitch` and place a `*ngSwitchCase` attribute on the view\n * root elements.\n * \n * Elements within `NgSwitch` but outside of a `NgSwitchCase` or `NgSwitchDefault` directives will\n * be preserved at the location.\n * \n * The `ngSwitchCase` directive informs the parent `NgSwitch` of which view to display when the\n * expression is evaluated.\n * When no matching expression is found on a `ngSwitchCase` view, the `ngSwitchDefault` view is\n * stamped out.\n * \n * \\@stable\n */\nexport class NgSwitch {\nprivate _defaultViews: SwitchView[];\nprivate _defaultUsed = false;\nprivate _caseCount = 0;\nprivate _lastCaseCheckIndex = 0;\nprivate _lastCasesMatched = false;\nprivate _ngSwitch: any;\n/**\n * @param {?} newValue\n * @return {?}\n */\nset ngSwitch(newValue: any) {\n    this._ngSwitch = newValue;\n    if (this._caseCount === 0) {\n      this._updateDefaultCases(true);\n    }\n  }\n/**\n * \\@internal\n * @return {?}\n */\n_addCase(): number { return this._caseCount++; }\n/**\n * \\@internal\n * @param {?} view\n * @return {?}\n */\n_addDefault(view: SwitchView) {\n    if (!this._defaultViews) {\n      this._defaultViews = [];\n    }\n    this._defaultViews.push(view);\n  }\n/**\n * \\@internal\n * @param {?} value\n * @return {?}\n */\n_matchCase(value: any): boolean {\n    const /** @type {?} */ matched = value == this._ngSwitch;\n    this._lastCasesMatched = this._lastCasesMatched || matched;\n    this._lastCaseCheckIndex++;\n    if (this._lastCaseCheckIndex === this._caseCount) {\n      this._updateDefaultCases(!this._lastCasesMatched);\n      this._lastCaseCheckIndex = 0;\n      this._lastCasesMatched = false;\n    }\n    return matched;\n  }\n/**\n * @param {?} useDefault\n * @return {?}\n */\nprivate _updateDefaultCases(useDefault: boolean) {\n    if (this._defaultViews && useDefault !== this._defaultUsed) {\n      this._defaultUsed = useDefault;\n      for (let /** @type {?} */ i = 0; i < this._defaultViews.length; i++) {\n        const /** @type {?} */ defaultView = this._defaultViews[i];\n        defaultView.enforceState(useDefault);\n      }\n    }\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngSwitch]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ngSwitch': [{ type: Input },],\n};\n}\n\nfunction NgSwitch_tsickle_Closure_declarations() {\n/** @type {?} */\nNgSwitch.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgSwitch.ctorParameters;\n/** @type {?} */\nNgSwitch.propDecorators;\n/** @type {?} */\nNgSwitch.prototype._defaultViews;\n/** @type {?} */\nNgSwitch.prototype._defaultUsed;\n/** @type {?} */\nNgSwitch.prototype._caseCount;\n/** @type {?} */\nNgSwitch.prototype._lastCaseCheckIndex;\n/** @type {?} */\nNgSwitch.prototype._lastCasesMatched;\n/** @type {?} */\nNgSwitch.prototype._ngSwitch;\n}\n\n/**\n * \\@ngModule CommonModule\n * \n * \\@whatItDoes Creates a view that will be added/removed from the parent {\\@link NgSwitch} when the\n *             given expression evaluate to respectively the same/different value as the switch\n *             expression.\n * \n * \\@howToUse \n * ```\n * <container-element [ngSwitch]=\"switch_expression\">\n *   <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n * </container-element>\n * ```\n * \\@description \n * \n * Insert the sub-tree when the expression evaluates to the same value as the enclosing switch\n * expression.\n * \n * If multiple match expressions match the switch expression value, all of them are displayed.\n * \n * See {\\@link NgSwitch} for more details and example.\n * \n * \\@stable\n */\nexport class NgSwitchCase implements DoCheck {\nprivate _view: SwitchView;\n\n  \n  ngSwitchCase: any;\n/**\n * @param {?} viewContainer\n * @param {?} templateRef\n * @param {?} ngSwitch\n */\nconstructor(\n      viewContainer: ViewContainerRef, templateRef: TemplateRef<Object>,\nprivate ngSwitch: NgSwitch) {\n    ngSwitch._addCase();\n    this._view = new SwitchView(viewContainer, templateRef);\n  }\n/**\n * @return {?}\n */\nngDoCheck() { this._view.enforceState(this.ngSwitch._matchCase(this.ngSwitchCase)); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngSwitchCase]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ViewContainerRef, },\n{type: TemplateRef, },\n{type: NgSwitch, decorators: [{ type: Host }, ]},\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ngSwitchCase': [{ type: Input },],\n};\n}\n\nfunction NgSwitchCase_tsickle_Closure_declarations() {\n/** @type {?} */\nNgSwitchCase.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgSwitchCase.ctorParameters;\n/** @type {?} */\nNgSwitchCase.propDecorators;\n/** @type {?} */\nNgSwitchCase.prototype._view;\n/** @type {?} */\nNgSwitchCase.prototype.ngSwitchCase;\n/** @type {?} */\nNgSwitchCase.prototype.ngSwitch;\n}\n\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Creates a view that is added to the parent {\\@link NgSwitch} when no case expressions\n * match the\n *             switch expression.\n * \n * \\@howToUse \n * ```\n * <container-element [ngSwitch]=\"switch_expression\">\n *   <some-element *ngSwitchCase=\"match_expression_1\">...</some-element>\n *   <some-other-element *ngSwitchDefault>...</some-other-element>\n * </container-element>\n * ```\n * \n * \\@description \n * \n * Insert the sub-tree when no case expressions evaluate to the same value as the enclosing switch\n * expression.\n * \n * See {\\@link NgSwitch} for more details and example.\n * \n * \\@stable\n */\nexport class NgSwitchDefault {\n/**\n * @param {?} viewContainer\n * @param {?} templateRef\n * @param {?} ngSwitch\n */\nconstructor(\n      viewContainer: ViewContainerRef, templateRef: TemplateRef<Object>,\n       ngSwitch: NgSwitch) {\n    ngSwitch._addDefault(new SwitchView(viewContainer, templateRef));\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngSwitchDefault]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ViewContainerRef, },\n{type: TemplateRef, },\n{type: NgSwitch, decorators: [{ type: Host }, ]},\n];\n}\n\nfunction NgSwitchDefault_tsickle_Closure_declarations() {\n/** @type {?} */\nNgSwitchDefault.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgSwitchDefault.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/ng_switch.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Attribute, Directive, Host, Input, TemplateRef, ViewContainerRef} from '@angular/core';\n\nimport {NgLocalization, getPluralCategory} from '../localization';\n\nimport {SwitchView} from './ng_switch';\n/**\n * \\@ngModule CommonModule\n * \n * \\@whatItDoes Adds / removes DOM sub-trees based on a numeric value. Tailored for pluralization.\n * \n * \\@howToUse \n * ```\n * <some-element [ngPlural]=\"value\">\n *   <ng-template ngPluralCase=\"=0\">there is nothing</ng-template>\n *   <ng-template ngPluralCase=\"=1\">there is one</ng-template>\n *   <ng-template ngPluralCase=\"few\">there are a few</ng-template>\n * </some-element>\n * ```\n * \n * \\@description \n * \n * Displays DOM sub-trees that match the switch expression value, or failing that, DOM sub-trees\n * that match the switch expression's pluralization category.\n * \n * To use this directive you must provide a container element that sets the `[ngPlural]` attribute\n * to a switch expression. Inner elements with a `[ngPluralCase]` will display based on their\n * expression:\n * - if `[ngPluralCase]` is set to a value starting with `=`, it will only display if the value\n *   matches the switch expression exactly,\n * - otherwise, the view will be treated as a \"category match\", and will only display if exact\n *   value matches aren't found and the value maps to its category for the defined locale.\n * \n * See http://cldr.unicode.org/index/cldr-spec/plural-rules\n * \n * \\@experimental\n */\nexport class NgPlural {\nprivate _switchValue: number;\nprivate _activeView: SwitchView;\nprivate _caseViews: {[k: string]: SwitchView} = {};\n/**\n * @param {?} _localization\n */\nconstructor(private _localization: NgLocalization) {}\n/**\n * @param {?} value\n * @return {?}\n */\nset ngPlural(value: number) {\n    this._switchValue = value;\n    this._updateView();\n  }\n/**\n * @param {?} value\n * @param {?} switchView\n * @return {?}\n */\naddCase(value: string, switchView: SwitchView): void { this._caseViews[value] = switchView; }\n/**\n * @return {?}\n */\nprivate _updateView(): void {\n    this._clearViews();\n\n    const /** @type {?} */ cases = Object.keys(this._caseViews);\n    const /** @type {?} */ key = getPluralCategory(this._switchValue, cases, this._localization);\n    this._activateView(this._caseViews[key]);\n  }\n/**\n * @return {?}\n */\nprivate _clearViews() {\n    if (this._activeView) this._activeView.destroy();\n  }\n/**\n * @param {?} view\n * @return {?}\n */\nprivate _activateView(view: SwitchView) {\n    if (view) {\n      this._activeView = view;\n      this._activeView.create();\n    }\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngPlural]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: NgLocalization, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ngPlural': [{ type: Input },],\n};\n}\n\nfunction NgPlural_tsickle_Closure_declarations() {\n/** @type {?} */\nNgPlural.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgPlural.ctorParameters;\n/** @type {?} */\nNgPlural.propDecorators;\n/** @type {?} */\nNgPlural.prototype._switchValue;\n/** @type {?} */\nNgPlural.prototype._activeView;\n/** @type {?} */\nNgPlural.prototype._caseViews;\n/** @type {?} */\nNgPlural.prototype._localization;\n}\n\n/**\n * \\@ngModule CommonModule\n * \n * \\@whatItDoes Creates a view that will be added/removed from the parent {\\@link NgPlural} when the\n *             given expression matches the plural expression according to CLDR rules.\n * \n * \\@howToUse \n * ```\n * <some-element [ngPlural]=\"value\">\n *   <ng-template ngPluralCase=\"=0\">...</ng-template>\n *   <ng-template ngPluralCase=\"other\">...</ng-template>\n * </some-element>\n * ```\n * \n * See {\\@link NgPlural} for more details and example.\n * \n * \\@experimental\n */\nexport class NgPluralCase {\n/**\n * @param {?} value\n * @param {?} template\n * @param {?} viewContainer\n * @param {?} ngPlural\n */\nconstructor(\npublic value: string, template: TemplateRef<Object>,\n      viewContainer: ViewContainerRef,  ngPlural: NgPlural) {\n    const isANumber: boolean = !isNaN(Number(value));\n    ngPlural.addCase(isANumber ? `=${value}` : value, new SwitchView(viewContainer, template));\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngPluralCase]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: undefined, decorators: [{ type: Attribute, args: ['ngPluralCase', ] }, ]},\n{type: TemplateRef, },\n{type: ViewContainerRef, },\n{type: NgPlural, decorators: [{ type: Host }, ]},\n];\n}\n\nfunction NgPluralCase_tsickle_Closure_declarations() {\n/** @type {?} */\nNgPluralCase.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgPluralCase.ctorParameters;\n/** @type {?} */\nNgPluralCase.prototype.value;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/ng_plural.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Directive, DoCheck, ElementRef, Input, KeyValueChanges, KeyValueDiffer, KeyValueDiffers, Renderer} from '@angular/core';\n/**\n * \\@ngModule CommonModule\n * \n * \\@whatItDoes Update an HTML element styles.\n * \n * \\@howToUse \n * ```\n * <some-element [ngStyle]=\"{'font-style': styleExp}\">...</some-element>\n * \n * <some-element [ngStyle]=\"{'max-width.px': widthExp}\">...</some-element>\n * \n * <some-element [ngStyle]=\"objExp\">...</some-element>\n * ```\n * \n * \\@description \n * \n * The styles are updated according to the value of the expression evaluation:\n * - keys are style names with an optional `.<unit>` suffix (ie 'top.px', 'font-style.em'),\n * - values are the values assigned to those properties (expressed in the given unit).\n * \n * \\@stable\n */\nexport class NgStyle implements DoCheck {\nprivate _ngStyle: {[key: string]: string};\nprivate _differ: KeyValueDiffer<string, string|number>;\n/**\n * @param {?} _differs\n * @param {?} _ngEl\n * @param {?} _renderer\n */\nconstructor(\nprivate _differs: KeyValueDiffers,\nprivate _ngEl: ElementRef,\nprivate _renderer: Renderer) {}\n/**\n * @param {?} v\n * @return {?}\n */\nset ngStyle(v: {[key: string]: string}) {\n    this._ngStyle = v;\n    if (!this._differ && v) {\n      this._differ = this._differs.find(v).create();\n    }\n  }\n/**\n * @return {?}\n */\nngDoCheck() {\n    if (this._differ) {\n      const /** @type {?} */ changes = this._differ.diff(this._ngStyle);\n      if (changes) {\n        this._applyChanges(changes);\n      }\n    }\n  }\n/**\n * @param {?} changes\n * @return {?}\n */\nprivate _applyChanges(changes: KeyValueChanges<string, string|number>): void {\n    changes.forEachRemovedItem((record) => this._setStyle(record.key, null));\n    changes.forEachAddedItem((record) => this._setStyle(record.key, record.currentValue));\n    changes.forEachChangedItem((record) => this._setStyle(record.key, record.currentValue));\n  }\n/**\n * @param {?} nameAndUnit\n * @param {?} value\n * @return {?}\n */\nprivate _setStyle(nameAndUnit: string, value: string|number|null|undefined): void {\n    const [name, unit] = nameAndUnit.split('.');\n    value = value != null && unit ? `${value}${unit}` : value;\n\n    this._renderer.setElementStyle(this._ngEl.nativeElement, name, /** @type {?} */(( value as string)));\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngStyle]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: KeyValueDiffers, },\n{type: ElementRef, },\n{type: Renderer, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ngStyle': [{ type: Input },],\n};\n}\n\nfunction NgStyle_tsickle_Closure_declarations() {\n/** @type {?} */\nNgStyle.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgStyle.ctorParameters;\n/** @type {?} */\nNgStyle.propDecorators;\n/** @type {?} */\nNgStyle.prototype._ngStyle;\n/** @type {?} */\nNgStyle.prototype._differ;\n/** @type {?} */\nNgStyle.prototype._differs;\n/** @type {?} */\nNgStyle.prototype._ngEl;\n/** @type {?} */\nNgStyle.prototype._renderer;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/ng_style.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Directive, EmbeddedViewRef, Input, OnChanges, SimpleChanges, TemplateRef, ViewContainerRef} from '@angular/core';\n/**\n * \\@ngModule CommonModule\n * \n * \\@whatItDoes Inserts an embedded view from a prepared `TemplateRef`\n * \n * \\@howToUse \n * ```\n * <ng-container *ngTemplateOutlet=\"templateRefExp; context: contextExp\"></ng-container>\n * ```\n * \n * \\@description \n * \n * You can attach a context object to the `EmbeddedViewRef` by setting `[ngTemplateOutletContext]`.\n * `[ngTemplateOutletContext]` should be an object, the object's keys will be available for binding\n * by the local template `let` declarations.\n * \n * Note: using the key `$implicit` in the context object will set it's value as default.\n * \n * ## Example\n * \n * {\\@example common/ngTemplateOutlet/ts/module.ts region='NgTemplateOutlet'}\n * \n * \\@experimental\n */\nexport class NgTemplateOutlet implements OnChanges {\nprivate _viewRef: EmbeddedViewRef<any>;\npublic ngTemplateOutletContext: Object;\npublic ngTemplateOutlet: TemplateRef<any>;\n/**\n * @param {?} _viewContainerRef\n */\nconstructor(private _viewContainerRef: ViewContainerRef) {}\n/**\n * @deprecated v4.0.0 - Renamed to ngTemplateOutletContext.\n * @param {?} context\n * @return {?}\n */\nset ngOutletContext(context: Object) { this.ngTemplateOutletContext = context; }\n/**\n * @param {?} changes\n * @return {?}\n */\nngOnChanges(changes: SimpleChanges) {\n    if (this._viewRef) {\n      this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._viewRef));\n    }\n\n    if (this.ngTemplateOutlet) {\n      this._viewRef = this._viewContainerRef.createEmbeddedView(\n          this.ngTemplateOutlet, this.ngTemplateOutletContext);\n    }\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{selector: '[ngTemplateOutlet]'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ViewContainerRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'ngTemplateOutletContext': [{ type: Input },],\n'ngTemplateOutlet': [{ type: Input },],\n'ngOutletContext': [{ type: Input },],\n};\n}\n\nfunction NgTemplateOutlet_tsickle_Closure_declarations() {\n/** @type {?} */\nNgTemplateOutlet.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nNgTemplateOutlet.ctorParameters;\n/** @type {?} */\nNgTemplateOutlet.propDecorators;\n/** @type {?} */\nNgTemplateOutlet.prototype._viewRef;\n/** @type {?} */\nNgTemplateOutlet.prototype.ngTemplateOutletContext;\n/** @type {?} */\nNgTemplateOutlet.prototype.ngTemplateOutlet;\n/** @type {?} */\nNgTemplateOutlet.prototype._viewContainerRef;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/ng_template_outlet.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Provider} from '@angular/core';\n\nimport {NgClass} from './ng_class';\nimport {NgComponentOutlet} from './ng_component_outlet';\nimport {NgFor, NgForOf, NgForOfContext} from './ng_for_of';\nimport {NgIf, NgIfContext} from './ng_if';\nimport {NgPlural, NgPluralCase} from './ng_plural';\nimport {NgStyle} from './ng_style';\nimport {NgSwitch, NgSwitchCase, NgSwitchDefault} from './ng_switch';\nimport {NgTemplateOutlet} from './ng_template_outlet';\n\nexport {\n  NgClass,\n  NgComponentOutlet,\n  NgFor,\n  NgForOf,\n  NgForOfContext,\n  NgIf,\n  NgIfContext,\n  NgPlural,\n  NgPluralCase,\n  NgStyle,\n  NgSwitch,\n  NgSwitchCase,\n  NgSwitchDefault,\n  NgTemplateOutlet\n};\n\n\n\n/**\n * A collection of Angular directives that are likely to be used in each and every Angular\n * application.\n */\nexport const /** @type {?} */ COMMON_DIRECTIVES: Provider[] = [\n  NgClass,\n  NgComponentOutlet,\n  NgForOf,\n  NgIf,\n  NgTemplateOutlet,\n  NgStyle,\n  NgSwitch,\n  NgSwitchCase,\n  NgSwitchDefault,\n  NgPlural,\n  NgPluralCase,\n];\n\n/**\n * A collection of deprecated directives that are no longer part of the core module.\n */\nexport const /** @type {?} */ COMMON_DEPRECATED_DIRECTIVES: Provider[] = [NgFor];\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/directives/index.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {ChangeDetectorRef, EventEmitter, OnDestroy, Pipe, PipeTransform, WrappedValue, ɵisObservable, ɵisPromise} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport {ISubscription} from 'rxjs/Subscription';\nimport {invalidPipeArgumentError} from './invalid_pipe_argument_error';\n\ninterface SubscriptionStrategy {\n  createSubscription(async: Observable<any>|Promise<any>, updateLatestValue: any): ISubscription\n      |Promise<any>;\n  dispose(subscription: ISubscription|Promise<any>): void;\n  onDestroy(subscription: ISubscription|Promise<any>): void;\n}\nclass ObservableStrategy implements SubscriptionStrategy {\n/**\n * @param {?} async\n * @param {?} updateLatestValue\n * @return {?}\n */\ncreateSubscription(async: Observable<any>, updateLatestValue: any): ISubscription {\n    return async.subscribe({next: updateLatestValue, error: (e: any) => { throw e; }});\n  }\n/**\n * @param {?} subscription\n * @return {?}\n */\ndispose(subscription: ISubscription): void { subscription.unsubscribe(); }\n/**\n * @param {?} subscription\n * @return {?}\n */\nonDestroy(subscription: ISubscription): void { subscription.unsubscribe(); }\n}\nclass PromiseStrategy implements SubscriptionStrategy {\n/**\n * @param {?} async\n * @param {?} updateLatestValue\n * @return {?}\n */\ncreateSubscription(async: Promise<any>, updateLatestValue: (v: any) => any): Promise<any> {\n    return async.then(updateLatestValue, e => { throw e; });\n  }\n/**\n * @param {?} subscription\n * @return {?}\n */\ndispose(subscription: Promise<any>): void {}\n/**\n * @param {?} subscription\n * @return {?}\n */\nonDestroy(subscription: Promise<any>): void {}\n}\n\nconst /** @type {?} */ _promiseStrategy = new PromiseStrategy();\nconst /** @type {?} */ _observableStrategy = new ObservableStrategy();\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Unwraps a value from an asynchronous primitive.\n * \\@howToUse `observable_or_promise_expression | async`\n * \\@description \n * The `async` pipe subscribes to an `Observable` or `Promise` and returns the latest value it has\n * emitted. When a new value is emitted, the `async` pipe marks the component to be checked for\n * changes. When the component gets destroyed, the `async` pipe unsubscribes automatically to avoid\n * potential memory leaks.\n * \n * \n * ## Examples\n * \n * This example binds a `Promise` to the view. Clicking the `Resolve` button resolves the\n * promise.\n * \n * {\\@example common/pipes/ts/async_pipe.ts region='AsyncPipePromise'}\n * \n * It's also possible to use `async` with Observables. The example below binds the `time` Observable\n * to the view. The Observable continuously updates the view with the current time.\n * \n * {\\@example common/pipes/ts/async_pipe.ts region='AsyncPipeObservable'}\n * \n * \\@stable\n */\nexport class AsyncPipe implements OnDestroy, PipeTransform {\nprivate _latestValue: any = null;\nprivate _latestReturnedValue: any = null;\nprivate _subscription: ISubscription|Promise<any>|null = null;\nprivate _obj: Observable<any>|Promise<any>|EventEmitter<any>|null = null;\nprivate _strategy: SubscriptionStrategy = /** @type {?} */(( null));\n/**\n * @param {?} _ref\n */\nconstructor(private _ref: ChangeDetectorRef) {}\n/**\n * @return {?}\n */\nngOnDestroy(): void {\n    if (this._subscription) {\n      this._dispose();\n    }\n  }\n\n  transform<T>(obj: null): null;\n  transform<T>(obj: undefined): undefined;\n  transform<T>(obj: Observable<T>): T|null;\n  transform<T>(obj: Promise<T>): T|null;\n/**\n * @param {?} obj\n * @return {?}\n */\ntransform(obj: Observable<any>|Promise<any>|null|undefined): any {\n    if (!this._obj) {\n      if (obj) {\n        this._subscribe(obj);\n      }\n      this._latestReturnedValue = this._latestValue;\n      return this._latestValue;\n    }\n\n    if (obj !== this._obj) {\n      this._dispose();\n      return this.transform( /** @type {?} */((obj as any)));\n    }\n\n    if (this._latestValue === this._latestReturnedValue) {\n      return this._latestReturnedValue;\n    }\n\n    this._latestReturnedValue = this._latestValue;\n    return WrappedValue.wrap(this._latestValue);\n  }\n/**\n * @param {?} obj\n * @return {?}\n */\nprivate _subscribe(obj: Observable<any>|Promise<any>|EventEmitter<any>): void {\n    this._obj = obj;\n    this._strategy = this._selectStrategy(obj);\n    this._subscription = this._strategy.createSubscription(\n        obj, (value: Object) => this._updateLatestValue(obj, value));\n  }\n/**\n * @param {?} obj\n * @return {?}\n */\nprivate _selectStrategy(obj: Observable<any>|Promise<any>|EventEmitter<any>): any {\n    if (ɵisPromise(obj)) {\n      return _promiseStrategy;\n    }\n\n    if (ɵisObservable(obj)) {\n      return _observableStrategy;\n    }\n\n    throw invalidPipeArgumentError(AsyncPipe, obj);\n  }\n/**\n * @return {?}\n */\nprivate _dispose(): void {\n    this._strategy.dispose( /** @type {?} */((this._subscription)));\n    this._latestValue = null;\n    this._latestReturnedValue = null;\n    this._subscription = null;\n    this._obj = null;\n  }\n/**\n * @param {?} async\n * @param {?} value\n * @return {?}\n */\nprivate _updateLatestValue(async: any, value: Object): void {\n    if (async === this._obj) {\n      this._latestValue = value;\n      this._ref.markForCheck();\n    }\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'async', pure: false}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ChangeDetectorRef, },\n];\n}\n\nfunction AsyncPipe_tsickle_Closure_declarations() {\n/** @type {?} */\nAsyncPipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nAsyncPipe.ctorParameters;\n/** @type {?} */\nAsyncPipe.prototype._latestValue;\n/** @type {?} */\nAsyncPipe.prototype._latestReturnedValue;\n/** @type {?} */\nAsyncPipe.prototype._subscription;\n/** @type {?} */\nAsyncPipe.prototype._obj;\n/** @type {?} */\nAsyncPipe.prototype._strategy;\n/** @type {?} */\nAsyncPipe.prototype._ref;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/async_pipe.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {invalidPipeArgumentError} from './invalid_pipe_argument_error';\n/**\n * Transforms text to lowercase.\n * \n * {\\@example  common/pipes/ts/lowerupper_pipe.ts region='LowerUpperPipe' }\n * \n * \\@stable\n */\nexport class LowerCasePipe implements PipeTransform {\n/**\n * @param {?} value\n * @return {?}\n */\ntransform(value: string): string {\n    if (!value) return value;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(LowerCasePipe, value);\n    }\n    return value.toLowerCase();\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'lowercase'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction LowerCasePipe_tsickle_Closure_declarations() {\n/** @type {?} */\nLowerCasePipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nLowerCasePipe.ctorParameters;\n}\n\n/**\n * Helper method to transform a single word to titlecase.\n * \n * \\@stable\n * @param {?} word\n * @return {?}\n */\nfunction titleCaseWord(word: string) {\n  if (!word) return word;\n  return word[0].toUpperCase() + word.substr(1).toLowerCase();\n}\n/**\n * Transforms text to titlecase.\n * \n * \\@stable\n */\nexport class TitleCasePipe implements PipeTransform {\n/**\n * @param {?} value\n * @return {?}\n */\ntransform(value: string): string {\n    if (!value) return value;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(TitleCasePipe, value);\n    }\n\n    return value.split(/\\b/g).map(word => titleCaseWord(word)).join('');\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'titlecase'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction TitleCasePipe_tsickle_Closure_declarations() {\n/** @type {?} */\nTitleCasePipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nTitleCasePipe.ctorParameters;\n}\n\n/**\n * Transforms text to uppercase.\n * \n * \\@stable\n */\nexport class UpperCasePipe implements PipeTransform {\n/**\n * @param {?} value\n * @return {?}\n */\ntransform(value: string): string {\n    if (!value) return value;\n    if (typeof value !== 'string') {\n      throw invalidPipeArgumentError(UpperCasePipe, value);\n    }\n    return value.toUpperCase();\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'uppercase'}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction UpperCasePipe_tsickle_Closure_declarations() {\n/** @type {?} */\nUpperCasePipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nUpperCasePipe.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/case_conversion_pipes.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {NgLocalization, getPluralCategory} from '../localization';\nimport {invalidPipeArgumentError} from './invalid_pipe_argument_error';\n\nconst /** @type {?} */ _INTERPOLATION_REGEXP: RegExp = /#/g;\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Maps a value to a string that pluralizes the value according to locale rules.\n * \\@howToUse `expression | i18nPlural:mapping`\n * \\@description \n * \n *  Where:\n *  - `expression` is a number.\n *  - `mapping` is an object that mimics the ICU format, see\n *    http://userguide.icu-project.org/formatparse/messages\n * \n *  ## Example\n * \n * {\\@example common/pipes/ts/i18n_pipe.ts region='I18nPluralPipeComponent'}\n * \n * \\@experimental\n */\nexport class I18nPluralPipe implements PipeTransform {\n/**\n * @param {?} _localization\n */\nconstructor(private _localization: NgLocalization) {}\n/**\n * @param {?} value\n * @param {?} pluralMap\n * @return {?}\n */\ntransform(value: number, pluralMap: {[count: string]: string}): string {\n    if (value == null) return '';\n\n    if (typeof pluralMap !== 'object' || pluralMap === null) {\n      throw invalidPipeArgumentError(I18nPluralPipe, pluralMap);\n    }\n\n    const /** @type {?} */ key = getPluralCategory(value, Object.keys(pluralMap), this._localization);\n\n    return pluralMap[key].replace(_INTERPOLATION_REGEXP, value.toString());\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'i18nPlural', pure: true}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: NgLocalization, },\n];\n}\n\nfunction I18nPluralPipe_tsickle_Closure_declarations() {\n/** @type {?} */\nI18nPluralPipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nI18nPluralPipe.ctorParameters;\n/** @type {?} */\nI18nPluralPipe.prototype._localization;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/i18n_plural_pipe.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {invalidPipeArgumentError} from './invalid_pipe_argument_error';\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Generic selector that displays the string that matches the current value.\n * \\@howToUse `expression | i18nSelect:mapping`\n * \\@description \n * \n *  Where `mapping` is an object that indicates the text that should be displayed\n *  for different values of the provided `expression`.\n *  If none of the keys of the mapping match the value of the `expression`, then the content\n *  of the `other` key is returned when present, otherwise an empty string is returned.\n * \n *  ## Example\n * \n * {\\@example common/pipes/ts/i18n_pipe.ts region='I18nSelectPipeComponent'}\n * \n *  \\@experimental\n */\nexport class I18nSelectPipe implements PipeTransform {\n/**\n * @param {?} value\n * @param {?} mapping\n * @return {?}\n */\ntransform(value: string|null|undefined, mapping: {[key: string]: string}): string {\n    if (value == null) return '';\n\n    if (typeof mapping !== 'object' || typeof value !== 'string') {\n      throw invalidPipeArgumentError(I18nSelectPipe, mapping);\n    }\n\n    if (mapping.hasOwnProperty(value)) {\n      return mapping[value];\n    }\n\n    if (mapping.hasOwnProperty('other')) {\n      return mapping['other'];\n    }\n\n    return '';\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'i18nSelect', pure: true}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction I18nSelectPipe_tsickle_Closure_declarations() {\n/** @type {?} */\nI18nSelectPipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nI18nSelectPipe.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/i18n_select_pipe.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Pipe, PipeTransform} from '@angular/core';\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Converts value into JSON string.\n * \\@howToUse `expression | json`\n * \\@description \n * \n * Converts value into string using `JSON.stringify`. Useful for debugging.\n * \n * ### Example\n * {\\@example common/pipes/ts/json_pipe.ts region='JsonPipe'}\n * \n * \\@stable\n */\nexport class JsonPipe implements PipeTransform {\n/**\n * @param {?} value\n * @return {?}\n */\ntransform(value: any): string { return JSON.stringify(value, null, 2); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'json', pure: false}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction JsonPipe_tsickle_Closure_declarations() {\n/** @type {?} */\nJsonPipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nJsonPipe.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/json_pipe.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {Pipe, PipeTransform} from '@angular/core';\nimport {invalidPipeArgumentError} from './invalid_pipe_argument_error';\n/**\n * \\@ngModule CommonModule\n * \\@whatItDoes Creates a new List or String containing a subset (slice) of the elements.\n * \\@howToUse `array_or_string_expression | slice:start[:end]`\n * \\@description \n * \n * Where the input expression is a `List` or `String`, and:\n * - `start`: The starting index of the subset to return.\n *   - **a positive integer**: return the item at `start` index and all items after\n *     in the list or string expression.\n *   - **a negative integer**: return the item at `start` index from the end and all items after\n *     in the list or string expression.\n *   - **if positive and greater than the size of the expression**: return an empty list or string.\n *   - **if negative and greater than the size of the expression**: return entire list or string.\n * - `end`: The ending index of the subset to return.\n *   - **omitted**: return all items until the end.\n *   - **if positive**: return all items before `end` index of the list or string.\n *   - **if negative**: return all items before `end` index from the end of the list or string.\n * \n * All behavior is based on the expected behavior of the JavaScript API `Array.prototype.slice()`\n * and `String.prototype.slice()`.\n * \n * When operating on a [List], the returned list is always a copy even when all\n * the elements are being returned.\n * \n * When operating on a blank value, the pipe returns the blank value.\n * \n * ## List Example\n * \n * This `ngFor` example:\n * \n * {\\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_list'}\n * \n * produces the following:\n * \n *     <li>b</li>\n *     <li>c</li>\n * \n * ## String Examples\n * \n * {\\@example common/pipes/ts/slice_pipe.ts region='SlicePipe_string'}\n * \n * \\@stable\n */\nexport class SlicePipe implements PipeTransform {\n/**\n * @param {?} value\n * @param {?} start\n * @param {?=} end\n * @return {?}\n */\ntransform(value: any, start: number, end?: number): any {\n    if (value == null) return value;\n\n    if (!this.supports(value)) {\n      throw invalidPipeArgumentError(SlicePipe, value);\n    }\n\n    return value.slice(start, end);\n  }\n/**\n * @param {?} obj\n * @return {?}\n */\nprivate supports(obj: any): boolean { return typeof obj === 'string' || Array.isArray(obj); }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{name: 'slice', pure: false}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction SlicePipe_tsickle_Closure_declarations() {\n/** @type {?} */\nSlicePipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nSlicePipe.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/slice_pipe.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/**\n * @module\n * @description\n * This module provides a set of common Pipes.\n */\n\nimport {AsyncPipe} from './async_pipe';\nimport {LowerCasePipe, TitleCasePipe, UpperCasePipe} from './case_conversion_pipes';\nimport {DatePipe} from './date_pipe';\nimport {I18nPluralPipe} from './i18n_plural_pipe';\nimport {I18nSelectPipe} from './i18n_select_pipe';\nimport {JsonPipe} from './json_pipe';\nimport {CurrencyPipe, DecimalPipe, PercentPipe} from './number_pipe';\nimport {SlicePipe} from './slice_pipe';\n\nexport {\n  AsyncPipe,\n  CurrencyPipe,\n  DatePipe,\n  DecimalPipe,\n  I18nPluralPipe,\n  I18nSelectPipe,\n  JsonPipe,\n  LowerCasePipe,\n  PercentPipe,\n  SlicePipe,\n  TitleCasePipe,\n  UpperCasePipe\n};\n\n\n/**\n * A collection of Angular pipes that are likely to be used in each and every application.\n */\nexport const /** @type {?} */ COMMON_PIPES = [\n  AsyncPipe,\n  UpperCasePipe,\n  LowerCasePipe,\n  JsonPipe,\n  SlicePipe,\n  DecimalPipe,\n  PercentPipe,\n  TitleCasePipe,\n  CurrencyPipe,\n  DatePipe,\n  I18nPluralPipe,\n  I18nSelectPipe,\n];\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/pipes/index.ts","/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n\nimport {NgModule} from '@angular/core';\n\nimport {COMMON_DEPRECATED_DIRECTIVES, COMMON_DIRECTIVES} from './directives/index';\nimport {NgLocaleLocalization, NgLocalization} from './localization';\nimport {COMMON_PIPES} from './pipes/index';\n/**\n * The module that includes all the basic Angular directives like {\\@link NgIf}, {\\@link NgForOf}, ...\n * \n * \\@stable\n */\nexport class CommonModule {\nstatic decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n  declarations: [COMMON_DIRECTIVES, COMMON_PIPES],\n  exports: [COMMON_DIRECTIVES, COMMON_PIPES],\n  providers: [\n    {provide: NgLocalization, useClass: NgLocaleLocalization},\n  ],\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction CommonModule_tsickle_Closure_declarations() {\n/** @type {?} */\nCommonModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nCommonModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../packages/common/src/common_module.ts","declare let global: any;\n\n/**\n * @license\n * Copyright Google Inc. All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\ndeclare var WorkerGlobalScope: any;\n// CommonJS / Node have global context exposed as \"global\" variable.\n// We don't want to include the whole node.d.ts this this compilation unit so we'll just fake\n// the global \"global\" var for now.\n\nconst __window = typeof window !== 'undefined' && window;\nconst __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n    self instanceof WorkerGlobalScope && self;\nconst __global = typeof global !== 'undefined' && global;\nconst _root: any = __window || __global || __self;\n\n// Workaround Closure Compiler restriction: The body of a goog.module cannot use throw.\n// This is needed when used with angular/tsickle which inserts a goog.module statement.\n// Wrap in IIFE\n(function () {\n  if (!_root) {\n    throw new Error('RxJS could not find any global context (window, self, global)');\n  }\n})();\n\nexport { _root as root };\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/root.ts","export const isArray = Array.isArray || (<T>(x: any): x is T[] => x && typeof x.length === 'number');\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/isArray.ts","// typeof any so that it we don't have to cast when comparing a result to the error object\nexport const errorObject: any = { e: {} };\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/errorObject.ts","/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport class UnsubscriptionError extends Error {\n  constructor(public errors: any[]) {\n    super();\n    const err: any = Error.call(this, errors ?\n      `${errors.length} errors occurred during unsubscription:\n  ${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n  ')}` : '');\n    (<any> this).name = err.name = 'UnsubscriptionError';\n    (<any> this).stack = err.stack;\n    (<any> this).message = err.message;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/UnsubscriptionError.ts","export interface NextObserver<T> {\n  closed?: boolean;\n  next: (value: T) => void;\n  error?: (err: any) => void;\n  complete?: () => void;\n}\n\nexport interface ErrorObserver<T> {\n  closed?: boolean;\n  next?: (value: T) => void;\n  error: (err: any) => void;\n  complete?: () => void;\n}\n\nexport interface CompletionObserver<T> {\n  closed?: boolean;\n  next?: (value: T) => void;\n  error?: (err: any) => void;\n  complete: () => void;\n}\n\nexport type PartialObserver<T> = NextObserver<T> | ErrorObserver<T> | CompletionObserver<T>;\n\nexport interface Observer<T> {\n  closed?: boolean;\n  next: (value: T) => void;\n  error: (err: any) => void;\n  complete: () => void;\n}\n\nexport const empty: Observer<any> = {\n  closed: true,\n  next(value: any): void { /* noop */},\n  error(err: any): void { throw err; },\n  complete(): void { /*noop*/ }\n};\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/Observer.ts","import { root } from '../util/root';\n\nconst Symbol: any = root.Symbol;\n\nexport const rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?\n  Symbol.for('rxSubscriber') : '@@rxSubscriber';\n\n/**\n * @deprecated use rxSubscriber instead\n */\nexport const $$rxSubscriber = rxSubscriber;\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/symbol/rxSubscriber.ts","import { isFunction } from './util/isFunction';\nimport { Observer, PartialObserver } from './Observer';\nimport { Subscription } from './Subscription';\nimport { empty as emptyObserver } from './Observer';\nimport { rxSubscriber as rxSubscriberSymbol } from './symbol/rxSubscriber';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber<T>\n */\nexport class Subscriber<T> extends Subscription implements Observer<T> {\n\n  [rxSubscriberSymbol]() { return this; }\n\n  /**\n   * A static factory for a Subscriber, given a (potentially partial) definition\n   * of an Observer.\n   * @param {function(x: ?T): void} [next] The `next` callback of an Observer.\n   * @param {function(e: ?any): void} [error] The `error` callback of an\n   * Observer.\n   * @param {function(): void} [complete] The `complete` callback of an\n   * Observer.\n   * @return {Subscriber<T>} A Subscriber wrapping the (partially defined)\n   * Observer represented by the given arguments.\n   */\n  static create<T>(next?: (x?: T) => void,\n                   error?: (e?: any) => void,\n                   complete?: () => void): Subscriber<T> {\n    const subscriber = new Subscriber(next, error, complete);\n    subscriber.syncErrorThrowable = false;\n    return subscriber;\n  }\n\n  public syncErrorValue: any = null;\n  public syncErrorThrown: boolean = false;\n  public syncErrorThrowable: boolean = false;\n\n  protected isStopped: boolean = false;\n  protected destination: PartialObserver<any>; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n  /**\n   * @param {Observer|function(value: T): void} [destinationOrNext] A partially\n   * defined Observer or a `next` callback function.\n   * @param {function(e: ?any): void} [error] The `error` callback of an\n   * Observer.\n   * @param {function(): void} [complete] The `complete` callback of an\n   * Observer.\n   */\n  constructor(destinationOrNext?: PartialObserver<any> | ((value: T) => void),\n              error?: (e?: any) => void,\n              complete?: () => void) {\n    super();\n\n    switch (arguments.length) {\n      case 0:\n        this.destination = emptyObserver;\n        break;\n      case 1:\n        if (!destinationOrNext) {\n          this.destination = emptyObserver;\n          break;\n        }\n        if (typeof destinationOrNext === 'object') {\n          if (destinationOrNext instanceof Subscriber) {\n            this.destination = (<Subscriber<any>> destinationOrNext);\n            (<any> this.destination).add(this);\n          } else {\n            this.syncErrorThrowable = true;\n            this.destination = new SafeSubscriber<T>(this, <PartialObserver<any>> destinationOrNext);\n          }\n          break;\n        }\n      default:\n        this.syncErrorThrowable = true;\n        this.destination = new SafeSubscriber<T>(this, <((value: T) => void)> destinationOrNext, error, complete);\n        break;\n    }\n  }\n\n  /**\n   * The {@link Observer} callback to receive notifications of type `next` from\n   * the Observable, with a value. The Observable may call this method 0 or more\n   * times.\n   * @param {T} [value] The `next` value.\n   * @return {void}\n   */\n  next(value?: T): void {\n    if (!this.isStopped) {\n      this._next(value);\n    }\n  }\n\n  /**\n   * The {@link Observer} callback to receive notifications of type `error` from\n   * the Observable, with an attached {@link Error}. Notifies the Observer that\n   * the Observable has experienced an error condition.\n   * @param {any} [err] The `error` exception.\n   * @return {void}\n   */\n  error(err?: any): void {\n    if (!this.isStopped) {\n      this.isStopped = true;\n      this._error(err);\n    }\n  }\n\n  /**\n   * The {@link Observer} callback to receive a valueless notification of type\n   * `complete` from the Observable. Notifies the Observer that the Observable\n   * has finished sending push-based notifications.\n   * @return {void}\n   */\n  complete(): void {\n    if (!this.isStopped) {\n      this.isStopped = true;\n      this._complete();\n    }\n  }\n\n  unsubscribe(): void {\n    if (this.closed) {\n      return;\n    }\n    this.isStopped = true;\n    super.unsubscribe();\n  }\n\n  protected _next(value: T): void {\n    this.destination.next(value);\n  }\n\n  protected _error(err: any): void {\n    this.destination.error(err);\n    this.unsubscribe();\n  }\n\n  protected _complete(): void {\n    this.destination.complete();\n    this.unsubscribe();\n  }\n\n  protected _unsubscribeAndRecycle(): Subscriber<T> {\n    const { _parent, _parents } = this;\n    this._parent = null;\n    this._parents = null;\n    this.unsubscribe();\n    this.closed = false;\n    this.isStopped = false;\n    this._parent = _parent;\n    this._parents = _parents;\n    return this;\n  }\n}\n\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nclass SafeSubscriber<T> extends Subscriber<T> {\n\n  private _context: any;\n\n  constructor(private _parentSubscriber: Subscriber<T>,\n              observerOrNext?: PartialObserver<T> | ((value: T) => void),\n              error?: (e?: any) => void,\n              complete?: () => void) {\n    super();\n\n    let next: ((value: T) => void);\n    let context: any = this;\n\n    if (isFunction(observerOrNext)) {\n      next = (<((value: T) => void)> observerOrNext);\n    } else if (observerOrNext) {\n      next = (<PartialObserver<T>> observerOrNext).next;\n      error = (<PartialObserver<T>> observerOrNext).error;\n      complete = (<PartialObserver<T>> observerOrNext).complete;\n      if (observerOrNext !== emptyObserver) {\n        context = Object.create(observerOrNext);\n        if (isFunction(context.unsubscribe)) {\n          this.add(<() => void> context.unsubscribe.bind(context));\n        }\n        context.unsubscribe = this.unsubscribe.bind(this);\n      }\n    }\n\n    this._context = context;\n    this._next = next;\n    this._error = error;\n    this._complete = complete;\n  }\n\n  next(value?: T): void {\n    if (!this.isStopped && this._next) {\n      const { _parentSubscriber } = this;\n      if (!_parentSubscriber.syncErrorThrowable) {\n        this.__tryOrUnsub(this._next, value);\n      } else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {\n        this.unsubscribe();\n      }\n    }\n  }\n\n  error(err?: any): void {\n    if (!this.isStopped) {\n      const { _parentSubscriber } = this;\n      if (this._error) {\n        if (!_parentSubscriber.syncErrorThrowable) {\n          this.__tryOrUnsub(this._error, err);\n          this.unsubscribe();\n        } else {\n          this.__tryOrSetError(_parentSubscriber, this._error, err);\n          this.unsubscribe();\n        }\n      } else if (!_parentSubscriber.syncErrorThrowable) {\n        this.unsubscribe();\n        throw err;\n      } else {\n        _parentSubscriber.syncErrorValue = err;\n        _parentSubscriber.syncErrorThrown = true;\n        this.unsubscribe();\n      }\n    }\n  }\n\n  complete(): void {\n    if (!this.isStopped) {\n      const { _parentSubscriber } = this;\n      if (this._complete) {\n        const wrappedComplete = () => this._complete.call(this._context);\n\n        if (!_parentSubscriber.syncErrorThrowable) {\n          this.__tryOrUnsub(wrappedComplete);\n          this.unsubscribe();\n        } else {\n          this.__tryOrSetError(_parentSubscriber, wrappedComplete);\n          this.unsubscribe();\n        }\n      } else {\n        this.unsubscribe();\n      }\n    }\n  }\n\n  private __tryOrUnsub(fn: Function, value?: any): void {\n    try {\n      fn.call(this._context, value);\n    } catch (err) {\n      this.unsubscribe();\n      throw err;\n    }\n  }\n\n  private __tryOrSetError(parent: Subscriber<T>, fn: Function, value?: any): boolean {\n    try {\n      fn.call(this._context, value);\n    } catch (err) {\n      parent.syncErrorValue = err;\n      parent.syncErrorThrown = true;\n      return true;\n    }\n    return false;\n  }\n\n  protected _unsubscribe(): void {\n    const { _parentSubscriber } = this;\n    this._context = null;\n    this._parentSubscriber = null;\n    _parentSubscriber.unsubscribe();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/Subscriber.ts","import { root } from '../util/root';\n\nexport function getSymbolObservable(context: any) {\n  let $$observable: any;\n  let Symbol = context.Symbol;\n\n  if (typeof Symbol === 'function') {\n    if (Symbol.observable) {\n      $$observable = Symbol.observable;\n    } else {\n        $$observable = Symbol('observable');\n        Symbol.observable = $$observable;\n    }\n  } else {\n    $$observable = '@@observable';\n  }\n\n  return $$observable;\n}\n\nexport const observable = getSymbolObservable(root);\n\n/**\n * @deprecated use observable instead\n */\nexport const $$observable = observable;\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/symbol/observable.ts","import { PartialObserver } from './Observer';\nimport { Operator } from './Operator';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, AnonymousSubscription, TeardownLogic } from './Subscription';\nimport { root } from './util/root';\nimport { toSubscriber } from './util/toSubscriber';\nimport { IfObservable } from './observable/IfObservable';\nimport { ErrorObservable } from './observable/ErrorObservable';\nimport { observable as Symbol_observable } from './symbol/observable';\n\nexport interface Subscribable<T> {\n  subscribe(observerOrNext?: PartialObserver<T> | ((value: T) => void),\n            error?: (error: any) => void,\n            complete?: () => void): AnonymousSubscription;\n}\n\nexport type SubscribableOrPromise<T> = Subscribable<T> | PromiseLike<T>;\nexport type ObservableInput<T> = SubscribableOrPromise<T> | ArrayLike<T>;\n\n/**\n * A representation of any set of values over any amount of time. This the most basic building block\n * of RxJS.\n *\n * @class Observable<T>\n */\nexport class Observable<T> implements Subscribable<T> {\n\n  public _isScalar: boolean = false;\n\n  protected source: Observable<any>;\n  protected operator: Operator<any, T>;\n\n  /**\n   * @constructor\n   * @param {Function} subscribe the function that is  called when the Observable is\n   * initially subscribed to. This function is given a Subscriber, to which new values\n   * can be `next`ed, or an `error` method can be called to raise an error, or\n   * `complete` can be called to notify of a successful completion.\n   */\n  constructor(subscribe?: (this: Observable<T>, subscriber: Subscriber<T>) => TeardownLogic) {\n    if (subscribe) {\n      this._subscribe = subscribe;\n    }\n  }\n\n  // HACK: Since TypeScript inherits static properties too, we have to\n  // fight against TypeScript here so Subject can have a different static create signature\n  /**\n   * Creates a new cold Observable by calling the Observable constructor\n   * @static true\n   * @owner Observable\n   * @method create\n   * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n   * @return {Observable} a new cold observable\n   */\n  static create: Function = <T>(subscribe?: (subscriber: Subscriber<T>) => TeardownLogic) => {\n    return new Observable<T>(subscribe);\n  }\n\n  /**\n   * Creates a new Observable, with this Observable as the source, and the passed\n   * operator defined as the new observable's operator.\n   * @method lift\n   * @param {Operator} operator the operator defining the operation to take on the observable\n   * @return {Observable} a new observable with the Operator applied\n   */\n  lift<R>(operator: Operator<T, R>): Observable<R> {\n    const observable = new Observable<R>();\n    observable.source = this;\n    observable.operator = operator;\n    return observable;\n  }\n\n  subscribe(): Subscription;\n  subscribe(observer: PartialObserver<T>): Subscription;\n  subscribe(next?: (value: T) => void, error?: (error: any) => void, complete?: () => void): Subscription;\n  /**\n   * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n   *\n   * <span class=\"informal\">Use it when you have all these Observables, but still nothing is happening.</span>\n   *\n   * `subscribe` is not a regular operator, but a method that calls Observables internal `subscribe` function. It\n   * might be for example a function that you passed to a {@link create} static factory, but most of the time it is\n   * a library implementation, which defines what and when will be emitted by an Observable. This means that calling\n   * `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n   * thought.\n   *\n   * Apart from starting the execution of an Observable, this method allows you to listen for values\n   * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n   * following ways.\n   *\n   * The first way is creating an object that implements {@link Observer} interface. It should have methods\n   * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n   * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular do\n   * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n   * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n   * do anything, you can simply omit it. Note however, that if `error` method is not provided, all errors will\n   * be left uncaught.\n   *\n   * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n   * This means you can provide three functions as arguments to `subscribe`, where first function is equivalent\n   * of a `next` method, second of an `error` method and third of a `complete` method. Just as in case of Observer,\n   * if you do not need to listen for something, you can omit a function, preferably by passing `undefined` or `null`,\n   * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n   * to `error` function, just as before, if not provided, errors emitted by an Observable will be thrown.\n   *\n   * Whatever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n   * This object allows you to call `unsubscribe` on it, which in turn will stop work that an Observable does and will clean\n   * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n   * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n   *\n   * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n   * It is an Observable itself that decides when these functions will be called. For example {@link of}\n   * by default emits all its values synchronously. Always check documentation for how given Observable\n   * will behave when subscribed and if its default behavior can be modified with a {@link Scheduler}.\n   *\n   * @example <caption>Subscribe with an Observer</caption>\n   * const sumObserver = {\n   *   sum: 0,\n   *   next(value) {\n   *     console.log('Adding: ' + value);\n   *     this.sum = this.sum + value;\n   *   },\n   *   error() { // We actually could just remote this method,\n   *   },        // since we do not really care about errors right now.\n   *   complete() {\n   *     console.log('Sum equals: ' + this.sum);\n   *   }\n   * };\n   *\n   * Rx.Observable.of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n   * .subscribe(sumObserver);\n   *\n   * // Logs:\n   * // \"Adding: 1\"\n   * // \"Adding: 2\"\n   * // \"Adding: 3\"\n   * // \"Sum equals: 6\"\n   *\n   *\n   * @example <caption>Subscribe with functions</caption>\n   * let sum = 0;\n   *\n   * Rx.Observable.of(1, 2, 3)\n   * .subscribe(\n   *   function(value) {\n   *     console.log('Adding: ' + value);\n   *     sum = sum + value;\n   *   },\n   *   undefined,\n   *   function() {\n   *     console.log('Sum equals: ' + sum);\n   *   }\n   * );\n   *\n   * // Logs:\n   * // \"Adding: 1\"\n   * // \"Adding: 2\"\n   * // \"Adding: 3\"\n   * // \"Sum equals: 6\"\n   *\n   *\n   * @example <caption>Cancel a subscription</caption>\n   * const subscription = Rx.Observable.interval(1000).subscribe(\n   *   num => console.log(num),\n   *   undefined,\n   *   () => console.log('completed!') // Will not be called, even\n   * );                                // when cancelling subscription\n   *\n   *\n   * setTimeout(() => {\n   *   subscription.unsubscribe();\n   *   console.log('unsubscribed!');\n   * }, 2500);\n   *\n   * // Logs:\n   * // 0 after 1s\n   * // 1 after 2s\n   * // \"unsubscribed!\" after 2,5s\n   *\n   *\n   * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n   *  or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n   *  Observable.\n   * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n   *  the error will be thrown as unhandled.\n   * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n   * @return {ISubscription} a subscription reference to the registered handlers\n   * @method subscribe\n   */\n  subscribe(observerOrNext?: PartialObserver<T> | ((value: T) => void),\n            error?: (error: any) => void,\n            complete?: () => void): Subscription {\n\n    const { operator } = this;\n    const sink = toSubscriber(observerOrNext, error, complete);\n\n    if (operator) {\n      operator.call(sink, this.source);\n    } else {\n      sink.add(this.source ? this._subscribe(sink) : this._trySubscribe(sink));\n    }\n\n    if (sink.syncErrorThrowable) {\n      sink.syncErrorThrowable = false;\n      if (sink.syncErrorThrown) {\n        throw sink.syncErrorValue;\n      }\n    }\n\n    return sink;\n  }\n\n  protected _trySubscribe(sink: Subscriber<T>): TeardownLogic {\n    try {\n      return this._subscribe(sink);\n    } catch (err) {\n      sink.syncErrorThrown = true;\n      sink.syncErrorValue = err;\n      sink.error(err);\n    }\n  }\n\n  /**\n   * @method forEach\n   * @param {Function} next a handler for each value emitted by the observable\n   * @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise\n   * @return {Promise} a promise that either resolves on observable completion or\n   *  rejects with the handled error\n   */\n  forEach(next: (value: T) => void, PromiseCtor?: typeof Promise): Promise<void> {\n    if (!PromiseCtor) {\n      if (root.Rx && root.Rx.config && root.Rx.config.Promise) {\n        PromiseCtor = root.Rx.config.Promise;\n      } else if (root.Promise) {\n        PromiseCtor = root.Promise;\n      }\n    }\n\n    if (!PromiseCtor) {\n      throw new Error('no Promise impl found');\n    }\n\n    return new PromiseCtor<void>((resolve, reject) => {\n      // Must be declared in a separate statement to avoid a RefernceError when\n      // accessing subscription below in the closure due to Temporal Dead Zone.\n      let subscription: Subscription;\n      subscription = this.subscribe((value) => {\n        if (subscription) {\n          // if there is a subscription, then we can surmise\n          // the next handling is asynchronous. Any errors thrown\n          // need to be rejected explicitly and unsubscribe must be\n          // called manually\n          try {\n            next(value);\n          } catch (err) {\n            reject(err);\n            subscription.unsubscribe();\n          }\n        } else {\n          // if there is NO subscription, then we're getting a nexted\n          // value synchronously during subscription. We can just call it.\n          // If it errors, Observable's `subscribe` will ensure the\n          // unsubscription logic is called, then synchronously rethrow the error.\n          // After that, Promise will trap the error and send it\n          // down the rejection path.\n          next(value);\n        }\n      }, reject, resolve);\n    });\n  }\n\n  protected _subscribe(subscriber: Subscriber<any>): TeardownLogic {\n    return this.source.subscribe(subscriber);\n  }\n\n  // `if` and `throw` are special snow flakes, the compiler sees them as reserved words\n  static if: typeof IfObservable.create;\n  static throw: typeof ErrorObservable.create;\n\n  /**\n   * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n   * @method Symbol.observable\n   * @return {Observable} this instance of the observable\n   */\n  [Symbol_observable]() {\n    return this;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/Observable.ts","/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport class ObjectUnsubscribedError extends Error {\n  constructor() {\n    const err: any = super('object unsubscribed');\n    (<any> this).name = err.name = 'ObjectUnsubscribedError';\n    (<any> this).stack = err.stack;\n    (<any> this).message = err.message;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/util/ObjectUnsubscribedError.ts","import { Subject } from './Subject';\nimport { Observer } from './Observer';\nimport { Subscription } from './Subscription';\n\n/**\n * We need this JSDoc comment for affecting ESDoc.\n * @ignore\n * @extends {Ignored}\n */\nexport class SubjectSubscription<T> extends Subscription {\n  closed: boolean = false;\n\n  constructor(public subject: Subject<T>, public subscriber: Observer<T>) {\n    super();\n  }\n\n  unsubscribe() {\n    if (this.closed) {\n      return;\n    }\n\n    this.closed = true;\n\n    const subject = this.subject;\n    const observers = subject.observers;\n\n    this.subject = null;\n\n    if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {\n      return;\n    }\n\n    const subscriberIndex = observers.indexOf(this.subscriber);\n\n    if (subscriberIndex !== -1) {\n      observers.splice(subscriberIndex, 1);\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/SubjectSubscription.ts","import { Operator } from './Operator';\nimport { Observer } from './Observer';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { ISubscription, Subscription, TeardownLogic } from './Subscription';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { SubjectSubscription } from './SubjectSubscription';\nimport { rxSubscriber as rxSubscriberSymbol } from './symbol/rxSubscriber';\n\n/**\n * @class SubjectSubscriber<T>\n */\nexport class SubjectSubscriber<T> extends Subscriber<T> {\n  constructor(protected destination: Subject<T>) {\n    super(destination);\n  }\n}\n\n/**\n * @class Subject<T>\n */\nexport class Subject<T> extends Observable<T> implements ISubscription {\n\n  [rxSubscriberSymbol]() {\n    return new SubjectSubscriber(this);\n  }\n\n  observers: Observer<T>[] = [];\n\n  closed = false;\n\n  isStopped = false;\n\n  hasError = false;\n\n  thrownError: any = null;\n\n  constructor() {\n    super();\n  }\n\n  static create: Function = <T>(destination: Observer<T>, source: Observable<T>): AnonymousSubject<T> => {\n    return new AnonymousSubject<T>(destination, source);\n  }\n\n  lift<R>(operator: Operator<T, R>): Observable<R> {\n    const subject = new AnonymousSubject(this, this);\n    subject.operator = <any>operator;\n    return <any>subject;\n  }\n\n  next(value?: T) {\n    if (this.closed) {\n      throw new ObjectUnsubscribedError();\n    }\n    if (!this.isStopped) {\n      const { observers } = this;\n      const len = observers.length;\n      const copy = observers.slice();\n      for (let i = 0; i < len; i++) {\n        copy[i].next(value);\n      }\n    }\n  }\n\n  error(err: any) {\n    if (this.closed) {\n      throw new ObjectUnsubscribedError();\n    }\n    this.hasError = true;\n    this.thrownError = err;\n    this.isStopped = true;\n    const { observers } = this;\n    const len = observers.length;\n    const copy = observers.slice();\n    for (let i = 0; i < len; i++) {\n      copy[i].error(err);\n    }\n    this.observers.length = 0;\n  }\n\n  complete() {\n    if (this.closed) {\n      throw new ObjectUnsubscribedError();\n    }\n    this.isStopped = true;\n    const { observers } = this;\n    const len = observers.length;\n    const copy = observers.slice();\n    for (let i = 0; i < len; i++) {\n      copy[i].complete();\n    }\n    this.observers.length = 0;\n  }\n\n  unsubscribe() {\n    this.isStopped = true;\n    this.closed = true;\n    this.observers = null;\n  }\n\n  protected _trySubscribe(subscriber: Subscriber<T>): TeardownLogic {\n    if (this.closed) {\n      throw new ObjectUnsubscribedError();\n    } else {\n      return super._trySubscribe(subscriber);\n    }\n  }\n\n  protected _subscribe(subscriber: Subscriber<T>): Subscription {\n    if (this.closed) {\n      throw new ObjectUnsubscribedError();\n    } else if (this.hasError) {\n      subscriber.error(this.thrownError);\n      return Subscription.EMPTY;\n    } else if (this.isStopped) {\n      subscriber.complete();\n      return Subscription.EMPTY;\n    } else {\n      this.observers.push(subscriber);\n      return new SubjectSubscription(this, subscriber);\n    }\n  }\n\n  asObservable(): Observable<T> {\n    const observable = new Observable<T>();\n    (<any>observable).source = this;\n    return observable;\n  }\n}\n\n/**\n * @class AnonymousSubject<T>\n */\nexport class AnonymousSubject<T> extends Subject<T> {\n  constructor(protected destination?: Observer<T>, source?: Observable<T>) {\n    super();\n    this.source = source;\n  }\n\n  next(value: T) {\n    const { destination } = this;\n    if (destination && destination.next) {\n      destination.next(value);\n    }\n  }\n\n  error(err: any) {\n    const { destination } = this;\n    if (destination && destination.error) {\n      this.destination.error(err);\n    }\n  }\n\n  complete() {\n    const { destination } = this;\n    if (destination && destination.complete) {\n      this.destination.complete();\n    }\n  }\n\n  protected _subscribe(subscriber: Subscriber<T>): Subscription {\n    const { source } = this;\n    if (source) {\n      return this.source.subscribe(subscriber);\n    } else {\n      return Subscription.EMPTY;\n    }\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ../node_modules/rxjs/src/Subject.ts","import { Injectable} from '@angular/core';\nimport {Observable} from 'rxjs/Observable';\nimport { Subject } from 'rxjs/Subject';\nexport class DragDropDirectiveService {\nprivate dropItem = new Subject<any>();\nprivate draggedItem:any;\nconstructor() { }\n/**\n * @param {?} item\n * @return {?}\n */\npublic setDropItem(item){\n  \tthis.dropItem.next(item);\n  }\n/**\n * @return {?}\n */\npublic getDropItem(){\n  \treturn this.dropItem.asObservable();\n  }\n/**\n * @param {?} item\n * @return {?}\n */\npublic setDragItem(item){\n    this.draggedItem = item;\n  }\n/**\n * @return {?}\n */\npublic getDragItem(){\n    return this.draggedItem;\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction DragDropDirectiveService_tsickle_Closure_declarations() {\n/** @type {?} */\nDragDropDirectiveService.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDragDropDirectiveService.ctorParameters;\n/** @type {?} */\nDragDropDirectiveService.prototype.dropItem;\n/** @type {?} */\nDragDropDirectiveService.prototype.draggedItem;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/drag-drop-directive.service.ts","import { Directive, ElementRef, HostListener, Input, Output, EventEmitter, OnDestroy} from '@angular/core';\nimport { DragDropDirectiveService } from './drag-drop-directive.service';\nimport { Subscription } from 'rxjs/Subscription';\nexport class DragDirective implements OnDestroy{\n  \n  draggedItem:Object;\n  \n  cssHighlight:string;\n  \n  releaseDrop:EventEmitter<any> = new EventEmitter();\n  \n  startDrag:EventEmitter<any> = new EventEmitter();\nprivate highlighted:boolean = false;\nprivate dropSubscription:Subscription;\n/**\n * @param {?} el\n * @param {?} dragDropDirectiveService\n */\nconstructor(\nprivate el: ElementRef,\nprivate dragDropDirectiveService: DragDropDirectiveService\n   ) {\n  \tthis.el.nativeElement.draggable='true';\n  }\n/**\n * @return {?}\n */\nonMouseEnter() {\n    this.highlight();\n  }\n/**\n * @return {?}\n */\nonMouseOut(){\n  \tthis.highlight();\n  }\n/**\n * @param {?} event\n * @return {?}\n */\nonDragStart(event:any){\n    // html draggable will not transfer an object, so we stringify it\n    let /** @type {?} */ transferObject = { object: this.draggedItem, id: 'draggedItemID-' + new Date().getTime()}\n    let /** @type {?} */ transferObjectString = JSON.stringify(transferObject);\n    event.dataTransfer.setData(\"text\", transferObjectString);\n    this.dragDropDirectiveService.setDragItem(this.draggedItem);\n    this.dropSubscription = this.dragDropDirectiveService.getDropItem().subscribe(\n      item => {\n        this.emitDraggedItem(this.draggedItem);\n      }\n    );\n    this.startDrag.emit(this.draggedItem);\n  }\n/**\n * @return {?}\n */\nonDragEnd(){\n    if (typeof this.dropSubscription !== 'undefined'){\n      this.dropSubscription.unsubscribe();\n    }\n  }\n/**\n * @return {?}\n */\nngOnDestroy(){\n    if (typeof this.dropSubscription !== 'undefined') {\n      this.dropSubscription.unsubscribe();\n    }\n  }\n/**\n * @param {?} item\n * @return {?}\n */\nprivate emitDraggedItem(item){\n    this.releaseDrop.emit(item);\n    this.dropSubscription.unsubscribe();\n  }\n/**\n * @return {?}\n */\nprivate highlight(){\n    if (this.cssHighlight){\n      if (!this.highlighted){\n        this.el.nativeElement.classList.add(this.cssHighlight);\n      } else {\n        this.el.nativeElement.classList.remove(this.cssHighlight);\n      }\n    }\n    this.highlighted = !this.highlighted;\n  }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n  selector: '[dragDirective]'\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: DragDropDirectiveService, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'draggedItem': [{ type: Input, args: ['dragDirective', ] },],\n'cssHighlight': [{ type: Input, args: ['dragHightlight', ] },],\n'releaseDrop': [{ type: Output },],\n'startDrag': [{ type: Output },],\n'onMouseEnter': [{ type: HostListener, args: ['mouseenter', ] },],\n'onMouseOut': [{ type: HostListener, args: ['mouseleave', ] },],\n'onDragStart': [{ type: HostListener, args: ['dragstart', ['$event'], ] },],\n'onDragEnd': [{ type: HostListener, args: ['dragend', ] },],\n};\n}\n\nfunction DragDirective_tsickle_Closure_declarations() {\n/** @type {?} */\nDragDirective.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDragDirective.ctorParameters;\n/** @type {?} */\nDragDirective.propDecorators;\n/** @type {?} */\nDragDirective.prototype.draggedItem;\n/** @type {?} */\nDragDirective.prototype.cssHighlight;\n/** @type {?} */\nDragDirective.prototype.releaseDrop;\n/** @type {?} */\nDragDirective.prototype.startDrag;\n/** @type {?} */\nDragDirective.prototype.highlighted;\n/** @type {?} */\nDragDirective.prototype.dropSubscription;\n/** @type {?} */\nDragDirective.prototype.el;\n/** @type {?} */\nDragDirective.prototype.dragDropDirectiveService;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/drag-directive.directive.ts","import { Directive, ElementRef, HostListener, Input, Output,\nEventEmitter } from '@angular/core';\nimport { DragDropDirectiveService } from './drag-drop-directive.service';\nexport class DropDirective{\n  \n  cssHighlight:string;\n\t\n\tdropEvent:EventEmitter<any> = new EventEmitter();\n  \n  dragenterEvent:EventEmitter<any> = new EventEmitter();\n  \n  dragleaveEvent:EventEmitter<any> = new EventEmitter();\n  \n  dropEventMouse:EventEmitter<any> = new EventEmitter();\n  \n  dragoverMouseEvent:EventEmitter<any> = new EventEmitter();\nprivate highlighted:boolean = false;\nprivate dragItem:any;\n/**\n * @param {?} el\n * @param {?} dragDropDirectiveService\n */\nconstructor(\nprivate el: ElementRef,\nprivate dragDropDirectiveService: DragDropDirectiveService\n  ) {}\n/**\n * @return {?}\n */\nonDragEnter() {\n    this.dragItem = this.dragDropDirectiveService.getDragItem();\n    this.dragenterEvent.emit(this.dragItem);\n  \t//this.highlighted = true;\n    this.highlight();\n  }\n/**\n * @return {?}\n */\nonDragLeave(){\n    this.dragItem = this.dragDropDirectiveService.getDragItem();\n    this.dragleaveEvent.emit(this.dragItem);\n  \t//this.highlighted = false;\n  \tthis.highlight();\n  }\n/**\n * @param {?} event\n * @return {?}\n */\nonDragOver(event:any){\n  \tevent.preventDefault();\n    this.dragoverMouseEvent.emit(event);\n  }\n/**\n * @param {?} event\n * @return {?}\n */\nonDrop(event:any){\n    // check to see if we are getting what was sent. text/plain\n    let /** @type {?} */ eventData = event.dataTransfer.getData('text');\n    if (eventData && event.dataTransfer.files.length == 0){\n      event.preventDefault();\n      // since html draggable will not transer an object, we need to parse are string\n      let /** @type {?} */ transferredObjectString = JSON.parse(eventData);\n      let /** @type {?} */ transferredObjectID = transferredObjectString.id;\n      let /** @type {?} */ transferredObject = transferredObjectString.object;\n      this.dropEvent.emit(transferredObject);\n      this.dragDropDirectiveService.setDropItem(transferredObjectID);\n      \n    }\n    this.dropEventMouse.emit(event);\n    this.highlight();\n  }\n/**\n * @return {?}\n */\nprivate highlight(){\n    if (this.cssHighlight){\n      if (!this.highlighted){\n        this.el.nativeElement.classList.add(this.cssHighlight);\n      } else {\n        this.el.nativeElement.classList.remove(this.cssHighlight);\n      }\n    }\n    this.highlighted = !this.highlighted;\n  }\n\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\n  selector: '[dropDirective]'\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n{type: DragDropDirectiveService, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'cssHighlight': [{ type: Input, args: ['dropHighlight', ] },],\n'dropEvent': [{ type: Output },],\n'dragenterEvent': [{ type: Output },],\n'dragleaveEvent': [{ type: Output },],\n'dropEventMouse': [{ type: Output },],\n'dragoverMouseEvent': [{ type: Output },],\n'onDragEnter': [{ type: HostListener, args: ['dragenter', ] },],\n'onDragLeave': [{ type: HostListener, args: ['dragleave', ] },],\n'onDragOver': [{ type: HostListener, args: ['dragover', ['$event'], ] },],\n'onDrop': [{ type: HostListener, args: ['drop', ['$event'], ] },],\n};\n}\n\nfunction DropDirective_tsickle_Closure_declarations() {\n/** @type {?} */\nDropDirective.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDropDirective.ctorParameters;\n/** @type {?} */\nDropDirective.propDecorators;\n/** @type {?} */\nDropDirective.prototype.cssHighlight;\n/** @type {?} */\nDropDirective.prototype.dropEvent;\n/** @type {?} */\nDropDirective.prototype.dragenterEvent;\n/** @type {?} */\nDropDirective.prototype.dragleaveEvent;\n/** @type {?} */\nDropDirective.prototype.dropEventMouse;\n/** @type {?} */\nDropDirective.prototype.dragoverMouseEvent;\n/** @type {?} */\nDropDirective.prototype.highlighted;\n/** @type {?} */\nDropDirective.prototype.dragItem;\n/** @type {?} */\nDropDirective.prototype.el;\n/** @type {?} */\nDropDirective.prototype.dragDropDirectiveService;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/drop-directive.directive.ts","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { DragDirective } from './drag-directive.directive';\nimport { DropDirective } from './drop-directive.directive';\nimport { DragDropDirectiveService } from './drag-drop-directive.service';\nexport class DragDropDirectiveModule { static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\n  imports: [\n    CommonModule\n  ],\n  declarations: [\n  \tDragDirective,\n  \tDropDirective\n  ],\n  providers: [\n    DragDropDirectiveService\n  ],\n  exports: [\n  \tDragDirective,\n  \tDropDirective\n  ]\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction DragDropDirectiveModule_tsickle_Closure_declarations() {\n/** @type {?} */\nDragDropDirectiveModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nDragDropDirectiveModule.ctorParameters;\n}\n\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/drag-drop-directive.module.ts","import {Injectable} from '@angular/core';\r\nimport {Country} from '../interface/country.interface';\nexport class CountryService {\r\n\r\n  countries: Country[];\nconstructor() {\r\n    this.countries = [\r\n      {\r\n        name: '',\r\n        dialCode: '994',\r\n        countryCode: 'az'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1242',\r\n        countryCode: 'bs'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '973',\r\n        countryCode: 'bh'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '880',\r\n        countryCode: 'bd'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1246',\r\n        countryCode: 'bb'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '375',\r\n        countryCode: 'by'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '32',\r\n        countryCode: 'be'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '501',\r\n        countryCode: 'bz'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '229',\r\n        countryCode: 'bj'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1441',\r\n        countryCode: 'bm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '975',\r\n        countryCode: 'bt'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '591',\r\n        countryCode: 'bo'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '387',\r\n        countryCode: 'ba'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '267',\r\n        countryCode: 'bw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '55',\r\n        countryCode: 'br'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '246',\r\n        countryCode: 'io'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1284',\r\n        countryCode: 'vg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '673',\r\n        countryCode: 'bn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '359',\r\n        countryCode: 'bg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '226',\r\n        countryCode: 'bf'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '257',\r\n        countryCode: 'bi'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '855',\r\n        countryCode: 'kh'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '237',\r\n        countryCode: 'cm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1',\r\n        countryCode: 'ca'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '238',\r\n        countryCode: 'cv'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '599',\r\n        countryCode: 'bq'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1345',\r\n        countryCode: 'ky'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '236',\r\n        countryCode: 'cf'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '235',\r\n        countryCode: 'td'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '56',\r\n        countryCode: 'cl'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '86',\r\n        countryCode: 'cn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '61',\r\n        countryCode: 'cx'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '57',\r\n        countryCode: 'co'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '269',\r\n        countryCode: 'km'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '243',\r\n        countryCode: 'cd'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '242',\r\n        countryCode: 'cg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '682',\r\n        countryCode: 'ck'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '506',\r\n        countryCode: 'cr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '225',\r\n        countryCode: 'ci'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '385',\r\n        countryCode: 'hr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '53',\r\n        countryCode: 'cu'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '599',\r\n        countryCode: 'cw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '357',\r\n        countryCode: 'cy'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '420',\r\n        countryCode: 'cz'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '45',\r\n        countryCode: 'dk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '253',\r\n        countryCode: 'dj'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1767',\r\n        countryCode: 'dm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1',\r\n        countryCode: 'do'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '593',\r\n        countryCode: 'ec'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '20',\r\n        countryCode: 'eg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '503',\r\n        countryCode: 'sv'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '240',\r\n        countryCode: 'gq'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '291',\r\n        countryCode: 'er'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '372',\r\n        countryCode: 'ee'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '251',\r\n        countryCode: 'et'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '500',\r\n        countryCode: 'fk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '298',\r\n        countryCode: 'fo'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '679',\r\n        countryCode: 'fj'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '358',\r\n        countryCode: 'fi'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '33',\r\n        countryCode: 'fr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '594',\r\n        countryCode: 'gf'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '689',\r\n        countryCode: 'pf'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '241',\r\n        countryCode: 'ga'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '220',\r\n        countryCode: 'gm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '995',\r\n        countryCode: 'ge'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '49',\r\n        countryCode: 'de'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '233',\r\n        countryCode: 'gh'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '350',\r\n        countryCode: 'gi'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '30',\r\n        countryCode: 'gr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '299',\r\n        countryCode: 'gl'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1473',\r\n        countryCode: 'gd'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '590',\r\n        countryCode: 'gp'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1671',\r\n        countryCode: 'gu'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '502',\r\n        countryCode: 'gt'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '44',\r\n        countryCode: 'gg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '224',\r\n        countryCode: 'gn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '245',\r\n        countryCode: 'gw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '592',\r\n        countryCode: 'gy'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '509',\r\n        countryCode: 'ht'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '504',\r\n        countryCode: 'hn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '852',\r\n        countryCode: 'hk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '36',\r\n        countryCode: 'hu'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '354',\r\n        countryCode: 'is'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '91',\r\n        countryCode: 'in'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '62',\r\n        countryCode: 'id'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '98',\r\n        countryCode: 'ir'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '964',\r\n        countryCode: 'iq'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '353',\r\n        countryCode: 'ie'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '44',\r\n        countryCode: 'im'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '972',\r\n        countryCode: 'il'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '39',\r\n        countryCode: 'it'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1876',\r\n        countryCode: 'jm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '81',\r\n        countryCode: 'jp'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '44',\r\n        countryCode: 'je'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '962',\r\n        countryCode: 'jo'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '7',\r\n        countryCode: 'kz'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '254',\r\n        countryCode: 'ke'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '686',\r\n        countryCode: 'ki'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '383',\r\n        countryCode: 'xk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '965',\r\n        countryCode: 'kw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '996',\r\n        countryCode: 'kg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '856',\r\n        countryCode: 'la'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '371',\r\n        countryCode: 'lv'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '961',\r\n        countryCode: 'lb'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '266',\r\n        countryCode: 'ls'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '231',\r\n        countryCode: 'lr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '218',\r\n        countryCode: 'ly'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '423',\r\n        countryCode: 'li'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '370',\r\n        countryCode: 'lt'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '352',\r\n        countryCode: 'lu'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '853',\r\n        countryCode: 'mo'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '389',\r\n        countryCode: 'mk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '261',\r\n        countryCode: 'mg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '265',\r\n        countryCode: 'mw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '60',\r\n        countryCode: 'my'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '960',\r\n        countryCode: 'mv'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '223',\r\n        countryCode: 'ml'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '356',\r\n        countryCode: 'mt'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '692',\r\n        countryCode: 'mh'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '596',\r\n        countryCode: 'mq'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '222',\r\n        countryCode: 'mr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '230',\r\n        countryCode: 'mu'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '262',\r\n        countryCode: 'yt'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '52',\r\n        countryCode: 'mx'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '691',\r\n        countryCode: 'fm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '373',\r\n        countryCode: 'md'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '377',\r\n        countryCode: 'mc'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '976',\r\n        countryCode: 'mn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '382',\r\n        countryCode: 'me'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1664',\r\n        countryCode: 'ms'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '212',\r\n        countryCode: 'ma'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '258',\r\n        countryCode: 'mz'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '95',\r\n        countryCode: 'mm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '264',\r\n        countryCode: 'na'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '674',\r\n        countryCode: 'nr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '977',\r\n        countryCode: 'np'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '31',\r\n        countryCode: 'nl'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '687',\r\n        countryCode: 'nc'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '64',\r\n        countryCode: 'nz'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '505',\r\n        countryCode: 'ni'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '227',\r\n        countryCode: 'ne'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '234',\r\n        countryCode: 'ng'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '683',\r\n        countryCode: 'nu'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '672',\r\n        countryCode: 'nf'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '850',\r\n        countryCode: 'kp'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1670',\r\n        countryCode: 'mp'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '47',\r\n        countryCode: 'no'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '968',\r\n        countryCode: 'om'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '92',\r\n        countryCode: 'pk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '680',\r\n        countryCode: 'pw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '970',\r\n        countryCode: 'ps'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '507',\r\n        countryCode: 'pa'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '675',\r\n        countryCode: 'pg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '595',\r\n        countryCode: 'py'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '51',\r\n        countryCode: 'pe'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '63',\r\n        countryCode: 'ph'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '48',\r\n        countryCode: 'pl'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '351',\r\n        countryCode: 'pt'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1',\r\n        countryCode: 'pr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '974',\r\n        countryCode: 'qa'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '262',\r\n        countryCode: 're'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '40',\r\n        countryCode: 'ro'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '7',\r\n        countryCode: 'ru'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '250',\r\n        countryCode: 'rw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '590',\r\n        countryCode: 'bl'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '290',\r\n        countryCode: 'sh'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1869',\r\n        countryCode: 'kn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1758',\r\n        countryCode: 'lc'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '508',\r\n        countryCode: 'pm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1784',\r\n        countryCode: 'vc'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '685',\r\n        countryCode: 'ws'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '378',\r\n        countryCode: 'sm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '239',\r\n        countryCode: 'st'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '966',\r\n        countryCode: 'sa'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '221',\r\n        countryCode: 'sn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '381',\r\n        countryCode: 'rs'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '248',\r\n        countryCode: 'sc'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '232',\r\n        countryCode: 'sl'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '65',\r\n        countryCode: 'sg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1721',\r\n        countryCode: 'sx'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '421',\r\n        countryCode: 'sk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '386',\r\n        countryCode: 'si'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '677',\r\n        countryCode: 'sb'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '252',\r\n        countryCode: 'so'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '27',\r\n        countryCode: 'za'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '82',\r\n        countryCode: 'kr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '211',\r\n        countryCode: 'ss'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '34',\r\n        countryCode: 'es'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '94',\r\n        countryCode: 'lk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '249',\r\n        countryCode: 'sd'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '597',\r\n        countryCode: 'sr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '47',\r\n        countryCode: 'sj'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '268',\r\n        countryCode: 'sz'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '46',\r\n        countryCode: 'se'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '41',\r\n        countryCode: 'ch'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '963',\r\n        countryCode: 'sy'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '886',\r\n        countryCode: 'tw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '992',\r\n        countryCode: 'tj'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '255',\r\n        countryCode: 'tz'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '66',\r\n        countryCode: 'th'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '670',\r\n        countryCode: 'tl'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '228',\r\n        countryCode: 'tg'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '690',\r\n        countryCode: 'tk'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '676',\r\n        countryCode: 'to'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1868',\r\n        countryCode: 'tt'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '216',\r\n        countryCode: 'tn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '90',\r\n        countryCode: 'tr'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '993',\r\n        countryCode: 'tm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1649',\r\n        countryCode: 'tc'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '688',\r\n        countryCode: 'tv'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1340',\r\n        countryCode: 'vi'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '256',\r\n        countryCode: 'ug'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '380',\r\n        countryCode: 'ua'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '971',\r\n        countryCode: 'ae'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '44',\r\n        countryCode: 'gb'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '1',\r\n        countryCode: 'us'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '598',\r\n        countryCode: 'uy'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '998',\r\n        countryCode: 'uz'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '678',\r\n        countryCode: 'vu'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '39',\r\n        countryCode: 'va'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '58',\r\n        countryCode: 've'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '84',\r\n        countryCode: 'vn'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '681',\r\n        countryCode: 'wf'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '212',\r\n        countryCode: 'eh'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '967',\r\n        countryCode: 'ye'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '260',\r\n        countryCode: 'zm'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '263',\r\n        countryCode: 'zw'\r\n      },\r\n      {\r\n        name: '',\r\n        dialCode: '358',\r\n        countryCode: 'ax'\r\n      }\r\n    ];\r\n  }\n/**\n * @return {?}\n */\ngetCountries(): Country[] {\r\n    return this.countries;\r\n  }\r\n\r\n\r\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction CountryService_tsickle_Closure_declarations() {\n/** @type {?} */\nCountryService.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nCountryService.ctorParameters;\n/** @type {?} */\nCountryService.prototype.countries;\n}\n\r\n\r\n\r\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/service/country.service.ts","import {Injectable} from '@angular/core';\r\nimport {CountryLocale} from '../interface/country-locale.interface';\r\nimport {CountryCode} from '../interface/country-code.interface';\nexport class LocaleService {\nprivate locales: CountryLocale = {\r\n    'en': {\r\n      'ax': 'AALAND ISLANDS',\r\n      'af': 'AFGHANISTAN',\r\n      'al': 'ALBANIA',\r\n      'dz': 'ALGERIA',\r\n      'as': 'AMERICAN SAMOA',\r\n      'ad': 'ANDORRA',\r\n      'ao': 'ANGOLA',\r\n      'ai': 'ANGUILLA',\r\n      'aq': 'ANTARCTICA',\r\n      'ag': 'ANTIGUA AND BARBUDA',\r\n      'ar': 'ARGENTINA',\r\n      'am': 'ARMENIA',\r\n      'aw': 'ARUBA',\r\n      'au': 'AUSTRALIA',\r\n      'at': 'AUSTRIA',\r\n      'az': 'AZERBAIJAN',\r\n      'bs': 'BAHAMAS',\r\n      'bh': 'BAHRAIN',\r\n      'bd': 'BANGLADESH',\r\n      'bb': 'BARBADOS',\r\n      'by': 'BELARUS',\r\n      'be': 'BELGIUM',\r\n      'bz': 'BELIZE',\r\n      'bj': 'BENIN',\r\n      'bm': 'BERMUDA',\r\n      'bt': 'BHUTAN',\r\n      'bo': 'BOLIVIA',\r\n      'ba': 'BOSNIA AND HERZEGOWINA',\r\n      'bw': 'BOTSWANA',\r\n      'bv': 'BOUVET ISLAND',\r\n      'br': 'BRAZIL',\r\n      'io': 'BRITISH INDIAN OCEAN TERRITORY',\r\n      'bn': 'BRUNEI DARUSSALAM',\r\n      'bg': 'BULGARIA',\r\n      'bf': 'BURKINA FASO',\r\n      'bi': 'BURUNDI',\r\n      'bq': 'CARIBBEAN NETHERLANDS',\r\n      'kh': 'CAMBODIA',\r\n      'cm': 'CAMEROON',\r\n      'ca': 'CANADA',\r\n      'cv': 'CAPE VERDE',\r\n      'ky': 'CAYMAN ISLANDS',\r\n      'cf': 'CENTRAL AFRICAN REPUBLIC',\r\n      'td': 'CHAD',\r\n      'cl': 'CHILE',\r\n      'cn': 'CHINA',\r\n      'cx': 'CHRISTMAS ISLAND',\r\n      'cc': 'COCOS ISLANDS',\r\n      'co': 'COLOMBIA',\r\n      'km': 'COMOROS',\r\n      'cd': 'CONGO',\r\n      'cg': 'CONGO REPUBLIC',\r\n      'ck': 'COOK ISLANDS',\r\n      'cr': 'COSTA RICA',\r\n      'ci': 'COTE DIVOIRE',\r\n      'hr': 'CROATIA ',\r\n      'cu': 'CUBA',\r\n      'cw': 'CURACAO',\r\n      'cy': 'CYPRUS',\r\n      'cz': 'CZECH REPUBLIC',\r\n      'dk': 'DENMARK',\r\n      'dj': 'DJIBOUTI',\r\n      'dm': 'DOMINICA',\r\n      'do': 'DOMINICAN REPUBLIC',\r\n      'ec': 'ECUADOR',\r\n      'eg': 'EGYPT',\r\n      'sv': 'EL SALVADOR',\r\n      'gq': 'EQUATORIAL GUINEA',\r\n      'er': 'ERITREA',\r\n      'ee': 'ESTONIA',\r\n      'et': 'ETHIOPIA',\r\n      'fk': 'FALKLAND ISLANDS (MALVINAS)',\r\n      'fo': 'FAROE ISLANDS',\r\n      'fj': 'FIJI',\r\n      'fi': 'FINLAND',\r\n      'fr': 'FRANCE',\r\n      'gf': 'FRENCH GUIANA',\r\n      'pf': 'FRENCH POLYNESIA',\r\n      'tf': 'FRENCH SOUTHERN TERRITORIES',\r\n      'ga': 'GABON',\r\n      'gm': 'GAMBIA',\r\n      'ge': 'GEORGIA',\r\n      'de': 'GERMANY',\r\n      'gh': 'GHANA',\r\n      'gi': 'GIBRALTAR',\r\n      'gr': 'GREECE',\r\n      'gl': 'GREENLAND',\r\n      'gd': 'GRENADA',\r\n      'gp': 'GUADELOUPE',\r\n      'gu': 'GUAM',\r\n      'gt': 'GUATEMALA',\r\n      'gg': 'GUERNSEY',\r\n      'gn': 'GUINEA',\r\n      'gw': 'GUINEA-BISSAU',\r\n      'gy': 'GUYANA',\r\n      'ht': 'HAITI',\r\n      'hm': 'HEARD AND MC DONALD ISLANDS',\r\n      'hn': 'HONDURAS',\r\n      'hk': 'HONG KONG',\r\n      'hu': 'HUNGARY',\r\n      'is': 'ICELAND',\r\n      'in': 'INDIA',\r\n      'id': 'INDONESIA',\r\n      'ir': 'IRAN ',\r\n      'iq': 'IRAQ',\r\n      'ie': 'IRELAND',\r\n      'im': 'ISLA DE MAN',\r\n      'il': 'ISRAEL',\r\n      'it': 'ITALY',\r\n      'jm': 'JAMAICA',\r\n      'jp': 'JAPAN',\r\n      'je': 'JERSEY',\r\n      'jo': 'JORDAN',\r\n      'kz': 'KAZAKHSTAN',\r\n      'ke': 'KENYA',\r\n      'ki': 'KIRIBATI',\r\n      'kp': 'KOREA NORTH ',\r\n      'kr': 'KOREA SOUTH',\r\n      'xk': 'KOSOVO',\r\n      'kw': 'KUWAIT',\r\n      'kg': 'KYRGYZSTAN',\r\n      'la': 'LAO',\r\n      'lv': 'LATVIA',\r\n      'lb': 'LEBANON',\r\n      'ls': 'LESOTHO',\r\n      'lr': 'LIBERIA',\r\n      'ly': 'LIBYAN ARAB JAMAHIRIYA',\r\n      'li': 'LIECHTENSTEIN',\r\n      'lt': 'LITHUANIA',\r\n      'lu': 'LUXEMBOURG',\r\n      'mo': 'MACAU',\r\n      'mk': 'MACEDONIA',\r\n      'mg': 'MADAGASCAR',\r\n      'mw': 'MALAWI',\r\n      'my': 'MALAYSIA',\r\n      'mv': 'MALDIVES',\r\n      'ml': 'MALI',\r\n      'mt': 'MALTA',\r\n      'mh': 'MARSHALL ISLANDS',\r\n      'mq': 'MARTINIQUE',\r\n      'mr': 'MAURITANIA',\r\n      'mu': 'MAURITIUS',\r\n      'yt': 'MAYOTTE',\r\n      'mx': 'MEXICO',\r\n      'fm': 'MICRONESIA',\r\n      'md': 'MOLDOVA',\r\n      'mc': 'MONACO',\r\n      'mn': 'MONGOLIA',\r\n      'me': 'MONTENEGRO',\r\n      'ms': 'MONTSERRAT',\r\n      'ma': 'MOROCCO',\r\n      'mz': 'MOZAMBIQUE',\r\n      'mm': 'MYANMAR',\r\n      'na': 'NAMIBIA',\r\n      'nr': 'NAURU',\r\n      'np': 'NEPAL',\r\n      'nl': 'NETHERLANDS',\r\n      'an': 'NETHERLANDS ANTILLES',\r\n      'nc': 'NEW CALEDONIA',\r\n      'nz': 'NEW ZEALAND',\r\n      'ni': 'NICARAGUA',\r\n      'ne': 'NIGER',\r\n      'ng': 'NIGERIA',\r\n      'nu': 'NIUE',\r\n      'nf': 'NORFOLK ISLAND',\r\n      'mp': 'NORTHERN MARIANA ISLANDS',\r\n      'no': 'NORWAY',\r\n      'om': 'OMAN',\r\n      'pk': 'PAKISTAN',\r\n      'pw': 'PALAU',\r\n      'ps': 'PALESTINA',\r\n      'pa': 'PANAMA',\r\n      'pg': 'PAPUA NEW GUINEA',\r\n      'py': 'PARAGUAY',\r\n      'pe': 'PERU',\r\n      'ph': 'PHILIPPINES',\r\n      'pn': 'PITCAIRN',\r\n      'pl': 'POLAND',\r\n      'pt': 'PORTUGAL',\r\n      'pr': 'PUERTO RICO',\r\n      'qa': 'QATAR',\r\n      're': 'REUNION',\r\n      'ro': 'ROMANIA',\r\n      'ru': 'RUSSIAN FEDERATION',\r\n      'rw': 'RWANDA',\r\n      'sh': 'SAINT HELENA',\r\n      'kn': 'SAINT KITTS AND NEVIS',\r\n      'lc': 'SAINT LUCIA',\r\n      'pm': 'SAINT PIERRE AND MIQUELON',\r\n      'vc': 'SAINT VINCENT AND THE GRENADINES',\r\n      'ws': 'SAMOA',\r\n      'bl': 'SAN BARTOLOMÉ',\r\n      'sm': 'SAN MARINO',\r\n      'st': 'SAO TOME AND PRINCIPE',\r\n      'sa': 'SAUDI ARABIA',\r\n      'sn': 'SENEGAL',\r\n      'cs': 'SERBIA AND MONTENEGRO',\r\n      'rs': 'SERBIA',\r\n      'sc': 'SEYCHELLES',\r\n      'sl': 'SIERRA LEONE',\r\n      'sg': 'SINGAPORE',\r\n      'sx': 'SINT MAARTEN',\r\n      'sk': 'SLOVAKIA',\r\n      'si': 'SLOVENIA',\r\n      'sb': 'SOLOMON ISLANDS',\r\n      'so': 'SOMALIA',\r\n      'za': 'SOUTH AFRICA',\r\n      'gs': 'SOUTH GEORGIA ISLANDS',\r\n      'es': 'SPAIN',\r\n      'lk': 'SRI LANKA',\r\n      'sd': 'SUDAN',\r\n      'ss': 'SOUTH SUDAN',\r\n      'sr': 'SURINAME',\r\n      'sj': 'SVALBARD AND JAN MAYEN ISLANDS',\r\n      'sz': 'SWAZILAND',\r\n      'se': 'SWEDEN',\r\n      'ch': 'SWITZERLAND',\r\n      'sy': 'SYRIAN ARAB REPUBLIC',\r\n      'tw': 'TAIWAN',\r\n      'tj': 'TAJIKISTAN',\r\n      'tz': 'TANZANIA',\r\n      'th': 'THAILAND',\r\n      'tl': 'TIMOR-LESTE',\r\n      'tg': 'TOGO',\r\n      'tk': 'TOKELAU',\r\n      'to': 'TONGA',\r\n      'tt': 'TRINIDAD AND TOBAGO',\r\n      'tn': 'TUNISIA',\r\n      'tr': 'TURKEY',\r\n      'tm': 'TURKMENISTAN',\r\n      'tc': 'TURKS AND CAICOS ISLANDS',\r\n      'tv': 'TUVALU',\r\n      'ug': 'UGANDA',\r\n      'ua': 'UKRAINE',\r\n      'ae': 'UNITED ARAB EMIRATES',\r\n      'gb': 'UNITED KINGDOM',\r\n      'us': 'UNITED STATES',\r\n      'um': 'UNITED STATES MINOR OUTLYING ISLANDS',\r\n      'uy': 'URUGUAY',\r\n      'uz': 'UZBEKISTAN',\r\n      'vu': 'VANUATU',\r\n      'va': 'VATICAN CITY STATE',\r\n      've': 'VENEZUELA',\r\n      'vn': 'VIET NAM',\r\n      'vg': 'VIRGIN ISLANDS (BRITISH)',\r\n      'vi': 'VIRGIN ISLANDS (U.S.)',\r\n      'wf': 'WALLIS AND FUTUNA ISLANDS',\r\n      'eh': 'WESTERN SAHARA',\r\n      'ye': 'YEMEN',\r\n      'zm': 'ZAMBIA',\r\n      'zw': 'ZIMBABWE '\r\n    },\r\n    'es': {\r\n      'ax': 'ISLAS ÁLAND',\r\n      'af': 'AFGHANISTÁN',\r\n      'al': 'ALBANIA',\r\n      'dz': 'ARGEL',\r\n      'as': 'SAMOA AMERICANA',\r\n      'ad': 'ANDORRA',\r\n      'ao': 'ANGOLA',\r\n      'ai': 'ANGUILA',\r\n      'aq': 'ANTÁRTIDA',\r\n      'ag': 'ANTIGUA Y BARBUDA',\r\n      'ar': 'ARGENTINA',\r\n      'am': 'ARMENIA',\r\n      'aw': 'ARUBA',\r\n      'au': 'AUSTRALIA',\r\n      'at': 'AUSTRIA',\r\n      'az': 'AZERBAIYÁN',\r\n      'bs': 'BAHAMAS',\r\n      'bh': 'BAHRÉIN',\r\n      'bd': 'BANGLADESH',\r\n      'bb': 'BARBADOS',\r\n      'by': 'BELARÚS',\r\n      'be': 'BÉLGICA',\r\n      'bz': 'BELICE',\r\n      'bj': 'BENIN',\r\n      'bm': 'BERMUDAAS',\r\n      'bt': 'BHUTÁN',\r\n      'bo': 'BOLIVIA',\r\n      'ba': 'BOSNIA Y HERZEGOVINA',\r\n      'bw': 'BOTSUANA',\r\n      'bv': 'ISLA BOUVET',\r\n      'br': 'BRASIL',\r\n      'io': 'TERRITORIO BRITÁNICO DEL OCÉANO ÍNDICO',\r\n      'bn': 'BRUNÉI',\r\n      'bg': 'BULGARIA',\r\n      'bf': 'BURKINA FASO',\r\n      'bi': 'BURUNDI',\r\n      'bq': 'CARIBE PAÍSES BAJOS',\r\n      'kh': 'CAMBOYA',\r\n      'cm': 'CAMERÚN',\r\n      'ca': 'CANADÁ',\r\n      'cv': 'CABO VERDE',\r\n      'ky': 'ISLAS CAIMÁN',\r\n      'cf': 'REPÚBLICA CENTRO-AFRICANA',\r\n      'td': 'CHAD',\r\n      'cl': 'CHILE',\r\n      'cn': 'CHINA',\r\n      'cx': 'ISLAS CHRISTMAS',\r\n      'cc': 'ISLAS COCOS',\r\n      'co': 'COLOMBIA',\r\n      'km': 'COMOROS',\r\n      'cd': 'CONGO (ZAIRE)',\r\n      'cg': 'CONGO',\r\n      'ck': 'ISLAS COOK',\r\n      'cr': 'COSTA RICA',\r\n      'ci': 'COSTA DE MARFIL',\r\n      'hr': 'CROACIA ',\r\n      'cu': 'CUBA',\r\n      'cw': 'CURAÇAO',\r\n      'cy': 'CHIPRE',\r\n      'cz': 'REPÚBLICA CHECA',\r\n      'dk': 'DINAMARCA',\r\n      'dj': 'YIBUTI',\r\n      'dm': 'DOMÍNICA',\r\n      'do': 'REPÚBLICA DOMINICANA',\r\n      'ec': 'ECUADOR',\r\n      'eg': 'EGIPTO',\r\n      'sv': 'EL SALVADOR',\r\n      'gq': 'GUINEA ECUATORIAL',\r\n      'er': 'ERITREA',\r\n      'ee': 'ESTONIA',\r\n      'et': 'ETIOPÍA',\r\n      'fk': 'ISLAS MALVINAS',\r\n      'fo': 'ISLAS FAROE',\r\n      'fj': 'FIJI',\r\n      'fi': 'FINLANDIA',\r\n      'fr': 'FRANCIA',\r\n      'gf': 'GUIANA FRANCESA',\r\n      'pf': 'POLYNESIA FRANCESA',\r\n      'tf': 'TERRITORIOS AUSTRALES FRANCESES',\r\n      'ga': 'GABÓN',\r\n      'gm': 'GAMBIA',\r\n      'ge': 'GEORGIA',\r\n      'de': 'ALEMANIA',\r\n      'gh': 'GHANA',\r\n      'gi': 'GIBRALTAR',\r\n      'gr': 'GREECE',\r\n      'gl': 'GROENLANDIA',\r\n      'gd': 'GRANADA',\r\n      'gp': 'GUADALUPE',\r\n      'gu': 'GUAM',\r\n      'gt': 'GUATEMALA',\r\n      'gg': 'GUERNSEY',\r\n      'gn': 'GUINEA',\r\n      'gw': 'GUINEA-BISSAU',\r\n      'gy': 'GUYANA',\r\n      'ht': 'HAITI',\r\n      'hm': 'ISLAS HEARD Y MC DONALD',\r\n      'hn': 'HONDURAS',\r\n      'hk': 'HONG KONG',\r\n      'hu': 'HUNGRÍA',\r\n      'is': 'ISLANDIA',\r\n      'in': 'INDIA',\r\n      'id': 'INDONESIA',\r\n      'ir': 'IRÁN',\r\n      'iq': 'IRAK',\r\n      'ie': 'IRLANDA',\r\n      'im': 'ISLA DE MAN',\r\n      'il': 'ISRAEL',\r\n      'it': 'ITALIA',\r\n      'jm': 'JAMAICA',\r\n      'jp': 'JAPÓN',\r\n      'je': 'JERSEY',\r\n      'jo': 'JORDANIA',\r\n      'kz': 'KAZAJSTÁN',\r\n      'ke': 'KENIA',\r\n      'ki': 'KIRIBATI',\r\n      'kp': 'KOREA DEL NORTE',\r\n      'kr': 'KOREA DEL SUR',\r\n      'xk': 'KOSOVO',\r\n      'kw': 'KUWAIT',\r\n      'kg': 'KIRGUISTÁN',\r\n      'la': 'LAOS',\r\n      'lv': 'LETONIA',\r\n      'lb': 'LÍBANO',\r\n      'ls': 'LESOTHO',\r\n      'lr': 'LIBERIA',\r\n      'ly': 'LIBIA',\r\n      'li': 'LIECHTENSTEIN',\r\n      'lt': 'LITUANIA',\r\n      'lu': 'LUXEMBURGO',\r\n      'mo': 'MACAO',\r\n      'mk': 'MACEDONIA',\r\n      'mg': 'MADAGASCAR',\r\n      'mw': 'MALAWI',\r\n      'my': 'MALASIA',\r\n      'mv': 'MALDIVAS',\r\n      'ml': 'MALI',\r\n      'mt': 'MALTA',\r\n      'mh': 'ISLAS MARSHALL',\r\n      'mq': 'MATINICA',\r\n      'mr': 'MAURITANIA',\r\n      'mu': 'MAURICIO',\r\n      'yt': 'MAYOTTE',\r\n      'mx': 'MÉXICO',\r\n      'fm': 'MICRONESIA',\r\n      'md': 'MOLDOVA',\r\n      'mc': 'MÓNACO',\r\n      'mn': 'MONGOLIA',\r\n      'me': 'MONTENEGRO',\r\n      'ms': 'MONTSERRAT',\r\n      'ma': 'MARRUECOS',\r\n      'mz': 'MOZAMBIQUE',\r\n      'mm': 'MYANMAR',\r\n      'na': 'NAMIBIA',\r\n      'nr': 'NAURU',\r\n      'np': 'NEPAL',\r\n      'nl': 'PAÍSES BAJOS',\r\n      'an': 'ANTILLAS NEERLANDESAS',\r\n      'nc': 'NUEVA CALEDONIA',\r\n      'nz': 'NUEVA ZELANDA',\r\n      'ni': 'NICARAGUA',\r\n      'ne': 'NÍGER',\r\n      'ng': 'NIGERIA',\r\n      'nu': 'NIUE',\r\n      'nf': 'ISLAS NORKFOLK',\r\n      'mp': 'ISLAS MARIANAS DEL NORTE',\r\n      'no': 'NORUEGA',\r\n      'om': 'OMÁN',\r\n      'pk': 'PAKISTÁN',\r\n      'pw': 'ISLAS PALAOS',\r\n      'ps': 'PALESTINA',\r\n      'pa': 'PANAMÁ',\r\n      'pg': 'PAPÚA NUEVA GUINEA',\r\n      'py': 'PARAGUAY',\r\n      'pe': 'PERÚ',\r\n      'ph': 'FILIPINAS',\r\n      'pn': 'ISLAS PITCAIRN',\r\n      'pl': 'POLONIA',\r\n      'pt': 'PORTUGAL',\r\n      'pr': 'PUERTO RICO',\r\n      'qa': 'QATAR',\r\n      're': 'REUNIÓN',\r\n      'ro': 'RUMANÍA',\r\n      'ru': 'RUSIA',\r\n      'rw': 'RUANDA',\r\n      'sh': 'SANTA ELENA',\r\n      'kn': 'SAN CRISTÓBAL Y NIEVES',\r\n      'lc': 'SANTA LUCÍA',\r\n      'pm': 'SAN PEDRO Y MIQUELÓN',\r\n      'vc': 'SAN VICENTE Y LAS GRANADINAS',\r\n      'ws': 'SAMOA',\r\n      'bl': 'SAN BARTOLOMÉ',\r\n      'sm': 'SAN MARINO',\r\n      'st': 'SANTO TOMÉ Y PRÍNCIPE',\r\n      'sa': 'ARABIA SAUDITA',\r\n      'sn': 'SENEGAL',\r\n      'cs': 'SERBIA Y MONTENEGRO',\r\n      'rs': 'SERBIA',\r\n      'sc': 'SEYCHELLES',\r\n      'sl': 'SIERRA LEONA',\r\n      'sg': 'SINGAPUR',\r\n      'sx': 'SINT MAARTEN',\r\n      'sk': 'ESLOVAQUIA',\r\n      'si': 'ESLOVENIA',\r\n      'sb': 'ISLAS SOLOMÓN',\r\n      'so': 'SOMALIA',\r\n      'za': 'SUDÁFRICA',\r\n      'gs': 'GEORGIA DEL SUR E ISLAS SANDWICH DEL SUR',\r\n      'es': 'ESPAÑA',\r\n      'lk': 'SRI LANKA',\r\n      'sd': 'SUDÁN',\r\n      'ss': 'SUDÁN DEL SUR',\r\n      'sr': 'SURINAM',\r\n      'sj': 'ISLAS SVALBARD Y JAN MAYEN',\r\n      'sz': 'SUAZILANDIA',\r\n      'se': 'SUECIA',\r\n      'ch': 'SUIZA',\r\n      'sy': 'SIRIA',\r\n      'tw': 'TAIWÁN',\r\n      'tj': 'TAYIKISTÁN',\r\n      'tz': 'TANZANIA',\r\n      'th': 'TAILANDIA',\r\n      'tl': 'TIMOR-LESTE',\r\n      'tg': 'TOGO',\r\n      'tk': 'TOKELAU',\r\n      'to': 'TONGA',\r\n      'tt': 'TRINIDAD Y TOBAGO',\r\n      'tn': 'TÚNEZ',\r\n      'tr': 'TURQUÍA',\r\n      'tm': 'TURKMENISTÁN',\r\n      'tc': 'ISLAS TURCAS Y CAICOS',\r\n      'tv': 'TUVALU',\r\n      'ug': 'UGANDA',\r\n      'ua': 'UCRANIA',\r\n      'ae': 'EMIRATOS ÁRABES UNIDOS',\r\n      'gb': 'REINO UNIDO',\r\n      'us': 'ESTADOS UNIDOS DE AMÉRICA',\r\n      'um': 'ESTADOS UNIDOS ISLAS MINOR OUTLYING',\r\n      'uy': 'URUGUAY',\r\n      'uz': 'UZBEKISTÁN',\r\n      'vu': 'VANUATU',\r\n      'va': 'CIUDAD DEL VATICANO',\r\n      've': 'VENEZUELA',\r\n      'vn': 'VIETNAM',\r\n      'vg': 'ISLAS VÍRGENES (INGLESAS)',\r\n      'vi': 'ISLAS VÍRGENES (U.S.)',\r\n      'wf': 'WALLIS Y FUTUNA',\r\n      'eh': 'SAHARA OCCIDENTAL',\r\n      'ye': 'YEMEN',\r\n      'zm': 'ZAMBIA',\r\n      'zw': 'ZIMBABUE '\r\n    }\r\n  };\n/**\n * @param {?} locale\n * @return {?}\n */\ngetLocales(locale: string): CountryCode {\r\n    if (locale && this.locales.hasOwnProperty(locale)) {\r\n      // User given locale\r\n      return this.locales[locale];\r\n    }\r\n    // Default: en\r\n    return this.locales['en'];\r\n  }\r\nstatic decorators: DecoratorInvocation[] = [\n{ type: Injectable },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction LocaleService_tsickle_Closure_declarations() {\n/** @type {?} */\nLocaleService.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nLocaleService.ctorParameters;\n/** @type {?} */\nLocaleService.prototype.locales;\n}\n\r\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/service/locale.service.ts","import {Component, ElementRef, forwardRef, HostListener, Input, OnInit, Renderer2} from '@angular/core';\r\nimport {Country} from '../../interface/country.interface';\r\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\r\nimport {CountryCode} from '../../interface/country-code.interface';\r\nimport {CountryService} from '../../service/country.service';\r\nimport {LocaleService} from '../../service/locale.service';\r\nimport * as _ from 'lodash';\r\n\r\nconst /** @type {?} */ COUNTER_CONTROL_ACCESSOR = {\r\n    provide: NG_VALUE_ACCESSOR,\r\n    useExisting: forwardRef(() => IntPhonePrefixComponent),\r\n    multi: true\r\n};\r\n\r\nconst /** @type {?} */ PLUS = '+';\nexport class IntPhonePrefixComponent implements OnInit, ControlValueAccessor {\r\n\r\n    \r\n    locale: string;\r\n\r\n    \r\n    defaultCountry: string;\r\n\r\n    \r\n    maxLength = 15;\r\n\r\n    \r\n    onlyNumbers = true;\r\n\r\n    // ELEMENT REF\r\n    phoneComponent: ElementRef;\r\n\r\n    // CONTROL VALUE ACCESSOR FUNCTIONS\r\n    onTouch: Function;\r\n    onModelChange: Function;\r\n\r\n    countries: Country[];\r\n    locales: CountryCode;\r\n    selectedCountry: Country;\r\n    countryFilter: string;\r\n    showDropdown = false;\r\n    phoneInput = '';\r\n    disabled = false;\r\n\r\n    value = '';\n/**\n * @param {?} event\n * @return {?}\n */\nhandleKeyboardEvent(event: KeyboardEvent) {\r\n        if (this.showDropdown) {\r\n            this.countryFilter = `${this.countryFilter}${event.key}`;\r\n        }\r\n    }\n/**\n * @param {?} service\n * @param {?} localeService\n * @param {?} phoneComponent\n */\nconstructor(private service: CountryService,\nprivate localeService: LocaleService, phoneComponent: ElementRef) {\r\n        this.phoneComponent = phoneComponent;\r\n    }\n/**\n * @return {?}\n */\nngOnInit(): void {\r\n        this.countries = this.service.getCountries();\r\n        this.locales = this.localeService.getLocales(this.locale);\r\n        this.translateCountryNames();\r\n    }\n/**\n * @param {?} isDisabled\n * @return {?}\n */\nsetDisabledState(isDisabled: boolean): void {\r\n        this.disabled = isDisabled;\r\n    }\n/**\n * @param {?} fn\n * @return {?}\n */\nregisterOnTouched(fn: Function) {\r\n        this.onTouch = fn;\r\n    }\n/**\n * @param {?} fn\n * @return {?}\n */\nregisterOnChange(fn: Function) {\r\n        this.onModelChange = fn;\r\n    }\n/**\n * @param {?} value\n * @return {?}\n */\nwriteValue(value: string) {\r\n        this.value = value || '';\r\n        this.phoneInput = this.value;\r\n\r\n        if (IntPhonePrefixComponent.startsWithPlus(this.value)) {\r\n            this.findPrefix(this.value.split(PLUS)[1]);\r\n            if (this.selectedCountry) {\r\n                this.updatePhoneInput(this.selectedCountry.countryCode);\r\n            }\r\n        }\r\n\r\n        if (this.defaultCountry) {\r\n            this.updatePhoneInput(this.defaultCountry);\r\n        }\r\n    }\n/**\n * @param {?} event\n * @param {?} countryCode\n * @return {?}\n */\nupdateSelectedCountry(event: Event, countryCode: string) {\r\n        event.preventDefault();\r\n        this.updatePhoneInput(countryCode);\r\n\r\n        this.updateValue();\r\n    }\n/**\n * @return {?}\n */\nshowDropDown() {\r\n        this.showDropdown = !this.showDropdown;\r\n        this.countryFilter = '';\r\n    }\n/**\n * @param {?} event\n * @return {?}\n */\nhideDropdown(event: Event) {\r\n        if (!this.phoneComponent.nativeElement.contains(event.target)) {\r\n            this.showDropdown = false;\r\n        }\r\n    }\n/**\n * @return {?}\n */\nupdatePhone() {\r\n        if (IntPhonePrefixComponent.startsWithPlus(this.phoneInput)) {\r\n            this.findPrefix(this.phoneInput.split(PLUS)[1]);\r\n        } else {\r\n            this.selectedCountry = null;\r\n        }\r\n\r\n        this.updateValue();\r\n    }\n/**\n * @return {?}\n */\nprivate translateCountryNames() {\r\n        this.countries.forEach((country: Country) => {\r\n            country.name = this.locales[country.countryCode];\r\n        });\r\n\r\n        this.orderCountriesByName();\r\n    }\n/**\n * @return {?}\n */\nprivate orderCountriesByName() {\r\n        this.countries = _.sortBy(this.countries, 'name');\r\n    }\n/**\n * @param {?} countryCode\n * @return {?}\n */\nprivate updatePhoneInput(countryCode: string) {\r\n        this.showDropdown = false;\r\n\r\n        let /** @type {?} */ newInputValue: string = IntPhonePrefixComponent.startsWithPlus(this.phoneInput)\r\n            ? `${this.phoneInput.split(PLUS)[1].substr(this.selectedCountry.dialCode.length, this.phoneInput.length)}`\r\n            : this.phoneInput;\r\n\r\n        this.selectedCountry = this.countries.find((country: Country) => country.countryCode === countryCode);\r\n        this.phoneInput = `${PLUS}${this.selectedCountry.dialCode} ${newInputValue.replace(/ /g, '')}`;\r\n    }\n/**\n * @param {?} prefix\n * @return {?}\n */\nprivate findPrefix(prefix: string) {\r\n        let /** @type {?} */ foundPrefixes: Country[] = this.countries.filter((country: Country) => prefix.startsWith(country.dialCode));\r\n        this.selectedCountry = !_.isEmpty(foundPrefixes)\r\n            ? IntPhonePrefixComponent.reducePrefixes(foundPrefixes)\r\n            : null;\r\n    }\n/**\n * @return {?}\n */\nprivate updateValue() {\r\n        this.value = this.phoneInput.replace(/ /g, '');\r\n        this.onModelChange(this.value);\r\n        this.onTouch();\r\n    }\n/**\n * @param {?} text\n * @return {?}\n */\nprivate static startsWithPlus(text: string): boolean {\r\n        return text.startsWith(PLUS);\r\n    }\n/**\n * @param {?} foundPrefixes\n * @return {?}\n */\nprivate static reducePrefixes(foundPrefixes: Country[]) {\r\n        return foundPrefixes.reduce(\r\n            (first: Country, second: Country) =>\r\n                first.dialCode.length > second.dialCode.length\r\n                    ? first\r\n                    : second\r\n        );\r\n    }\r\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{selector: 'int-phone-prefix',\r\n    template: \"<div class=\\\"input-group\\\"> <span class=\\\"input-group-addon flagInput\\\"> <div class=\\\"dropdown\\\"> <button type=\\\"button\\\" class=\\\"dropbtn btn\\\" (click)=\\\"showDropDown()\\\" [disabled]=\\\"disabled\\\"> <span [class]=\\\"'flag flag-' + selectedCountry.countryCode\\\" *ngIf=\\\"selectedCountry\\\"></span> <span class=\\\"defaultCountry\\\" *ngIf=\\\"!selectedCountry\\\"></span> </button> <div class=\\\"dropdown-content\\\" *ngIf=\\\"showDropdown\\\" clickOutside> <div class=\\\"list-group scrollable-menu\\\"> <a href=\\\"#\\\" class=\\\"list-group-item\\\" *ngFor=\\\"let country of countries | country: countryFilter\\\" (click)=\\\"updateSelectedCountry($event, country.countryCode)\\\"> <span [class]=\\\"'flag flag-' + country.countryCode\\\"></span> <span class=\\\"country-name\\\">{{ country.name }}  <span class=\\\"dial-code\\\">+ {{ country.dialCode}}</span></span> </a> </div> </div> </div> </span> <input [onlyNumber]=\\\"onlyNumbers\\\" class=\\\"form-control\\\" [maxlength]=\\\"maxLength\\\" [disabled]=\\\"disabled\\\" [(ngModel)]=\\\"phoneInput\\\" (ngModelChange)=\\\"updatePhone()\\\"> </div> \",\r\n    styles: [\".country-name { margin-left: 6px; } .dial-code { color: #999; } .scrollable-menu { height: auto; max-height: 200px; width: 350px; overflow-x: hidden; } .flagInput { padding: 0 !important; } .input-group-addon { text-align: left; } .btn-flag { border-color: white; } .btn:hover, .btn:focus{ background-color: white; } .defaultCountry { background:url('http://res.cloudinary.com/dvbuhh0bl/image/upload/c_scale,h_15,w_15/v1495279723/default_tmey2r.png') no-repeat; display:inline-block; width:15px; height:15px; } .list-group { margin-bottom: 0; } /* Dropdown Button */ .dropbtn { background-color: white; color: white; border: none; cursor: pointer; } .dropdown { position: relative; display: inline-block; } .dropdown-content { position: absolute; background-color: #f9f9f9; min-width: 160px; box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2); z-index: 1000; } .dropdown-content a { color: black; padding: 12px 16px; text-decoration: none; display: block; } \",\n\"/*! * Generated with CSS Flag Sprite generator (https://www.flag-sprites.com/) */.flag{display:inline-block;width:16px;height:11px;background:url('http://res.cloudinary.com/dvbuhh0bl/image/upload/v1495279723/flags_boi3c5.png') no-repeat}.flag.flag-af{background-position:-32px 0}.flag.flag-ky{background-position:-128px -77px}.flag.flag-in{background-position:-64px -66px}.flag.flag-mm{background-position:-192px -88px}.flag.flag-td{background-position:-240px -132px}.flag.flag-dm{background-position:-80px -33px}.flag.flag-se{background-position:-208px -121px}.flag.flag-pr{background-position:-224px -110px}.flag.flag-bj{background-position:-112px -11px}.flag.flag-gr{background-position:-48px -55px}.flag.flag-um{background-position:-256px -143px}.flag.flag-ps{background-position:-240px -110px}.flag.flag-fi{background-position:0 -44px}.flag.flag-kr{background-position:-80px -77px}.flag.flag-nl{background-position:-240px -99px}.flag.flag-bo{background-position:-160px -11px}.flag.flag-bf{background-position:-48px -11px}.flag.flag-ba{background-position:-256px 0}.flag.flag-ax{background-position:-224px 0}.flag.flag-pf{background-position:-112px -110px}.flag.flag-eg{background-position:-160px -33px}.flag.flag-sb{background-position:-144px -121px}.flag.flag-dk{background-position:-64px -33px}.flag.flag-ci{background-position:-112px -22px}.flag.flag-ic{background-position:-240px -55px}.flag.flag-cl{background-position:-144px -22px}.flag.flag-zw{background-position:-32px -165px}.flag.flag-my{background-position:-112px -99px}.flag.flag-li{background-position:-208px -77px}.flag.flag-mc{background-position:-80px -88px}.flag.flag-fo{background-position:-64px -44px}.flag.flag-vu{background-position:-144px -154px}.flag.flag-al{background-position:-80px 0}.flag.flag-ge{background-position:-144px -44px}.flag.flag-somaliland{background-position:-96px -132px}.flag.flag-am{background-position:-96px 0}.flag.flag-tf{background-position:-256px -132px}.flag.flag-ni{background-position:-224px -99px}.flag.flag-tn{background-position:-112px -143px}.flag.flag-lv{background-position:-32px -88px}.flag.flag-vi{background-position:-112px -154px}.flag.flag-ve{background-position:-80px -154px}.flag.flag-gm{background-position:-256px -44px}.flag.flag-fm{background-position:-48px -44px}.flag.flag-mg{background-position:-128px -88px}.flag.flag-mh{background-position:-144px -88px}.flag.flag-tc{background-position:-224px -132px}.flag.flag-id{background-position:-256px -55px}.flag.flag-tw{background-position:-192px -143px}.flag.flag-so{background-position:-80px -132px}.flag.flag-pg{background-position:-128px -110px}.flag.flag-hk{background-position:-144px -55px}.flag.flag-mt{background-position:-32px -99px}.flag.flag-do{background-position:-96px -33px}.flag.flag-gg{background-position:-192px -44px}.flag.flag-nr{background-position:-16px -110px}.flag.flag-mp{background-position:-240px -88px}.flag.flag-mw{background-position:-80px -99px}.flag.flag-bb{background-position:0 -11px}.flag.flag-hu{background-position:-224px -55px}.flag.flag-xk{background-position:-208px -154px}.flag.flag-za{background-position:-256px -154px}.flag.flag-zanzibar{background-position:0 -165px}.flag.flag-sy{background-position:-192px -132px}.flag.flag-bi{background-position:-96px -11px}.flag.flag-qa{background-position:-32px -121px}.flag.flag-kurdistan{background-position:-96px -77px}.flag.flag-scotland{background-position:-176px -121px}.flag.flag-gf{background-position:-160px -44px}.flag.flag-tk{background-position:-64px -143px}.flag.flag-me{background-position:-112px -88px}.flag.flag-om{background-position:-64px -110px}.flag.flag-tv{background-position:-176px -143px}.flag.flag-at{background-position:-176px 0}.flag.flag-by{background-position:-256px -11px}.flag.flag-wf{background-position:-176px -154px}.flag.flag-ph{background-position:-144px -110px}.flag.flag-ke{background-position:-240px -66px}.flag.flag-ng{background-position:-208px -99px}.flag.flag-eh{background-position:-176px -33px}.flag.flag-yt{background-position:-240px -154px}.flag.flag-cg{background-position:-80px -22px}.flag.flag-br{background-position:-176px -11px}.flag.flag-ma{background-position:-64px -88px}.flag.flag-bm{background-position:-128px -11px}.flag.flag-gi{background-position:-224px -44px}.flag.flag-mn{background-position:-208px -88px}.flag.flag-eu{background-position:-256px -33px}.flag.flag-us{background-position:0 -154px}.flag.flag-uy{background-position:-16px -154px}.flag.flag-hn{background-position:-176px -55px}.flag.flag-gp{background-position:-16px -55px}.flag.flag-km{background-position:-32px -77px}.flag.flag-au{background-position:-192px 0}.flag.flag-tz{background-position:-208px -143px}.flag.flag-pt{background-position:-256px -110px}.flag.flag-je{background-position:-176px -66px}.flag.flag-md{background-position:-96px -88px}.flag.flag-pl{background-position:-176px -110px}.flag.flag-cr{background-position:-208px -22px}.flag.flag-sk{background-position:-16px -132px}.flag.flag-kg{background-position:-256px -66px}.flag.flag-nu{background-position:-32px -110px}.flag.flag-lr{background-position:-240px -77px}.flag.flag-ht{background-position:-208px -55px}.flag.flag-rw{background-position:-112px -121px}.flag.flag-sg{background-position:-224px -121px}.flag.flag-ag{background-position:-48px 0}.flag.flag-mx{background-position:-96px -99px}.flag.flag-ch{background-position:-96px -22px}.flag.flag-sz{background-position:-208px -132px}.flag.flag-dj{background-position:-48px -33px}.flag.flag-kn{background-position:-48px -77px}.flag.flag-england{background-position:-192px -33px}.flag.flag-ro{background-position:-64px -121px}.flag.flag-ca{background-position:-16px -22px}.flag.flag-tr{background-position:-144px -143px}.flag.flag-pa{background-position:-80px -110px}.flag.flag-ye{background-position:-224px -154px}.flag.flag-si{background-position:-256px -121px}.flag.flag-tt{background-position:-160px -143px}.flag.flag-ml{background-position:-176px -88px}.flag.flag-sl{background-position:-32px -132px}.flag.flag-sa{background-position:-128px -121px}.flag.flag-py{background-position:-16px -121px}.flag.flag-ad{background-position:0 0}.flag.flag-gy{background-position:-128px -55px}.flag.flag-ls{background-position:-256px -77px}.flag.flag-sj{background-position:0 -132px}.flag.flag-fk{background-position:-32px -44px}.flag.flag-kw{background-position:-112px -77px}.flag.flag-sm{background-position:-48px -132px}.flag.flag-vn{background-position:-128px -154px}.flag.flag-iq{background-position:-96px -66px}.flag.flag-ie{background-position:0 -66px}.flag.flag-mz{background-position:-128px -99px}.flag.flag-vg{background-position:-96px -154px}.flag.flag-ms{background-position:-16px -99px}.flag.flag-cw{background-position:-256px -22px}.flag.flag-bt{background-position:-208px -11px}.flag.flag-gn{background-position:0 -55px}.flag.flag-uz{background-position:-32px -154px}.flag.flag-cv{background-position:-240px -22px}.flag.flag-pw{background-position:0 -121px}.flag.flag-bv{background-position:-224px -11px}.flag.flag-lb{background-position:-176px -77px}.flag.flag-sn{background-position:-64px -132px}.flag.flag-la{background-position:-160px -77px}.flag.flag-pe{background-position:-96px -110px}.flag.flag-sx{background-position:-176px -132px}.flag.flag-fr{background-position:-80px -44px}.flag.flag-catalonia{background-position:-32px -22px}.flag.flag-kh{background-position:0 -77px}.flag.flag-jp{background-position:-224px -66px}.flag.flag-vc{background-position:-64px -154px}.flag.flag-hm{background-position:-160px -55px}.flag.flag-tl{background-position:-80px -143px}.flag.flag-no{background-position:-256px -99px}.flag.flag-ee{background-position:-144px -33px}.flag.flag-cz{background-position:-16px -33px}.flag.flag-gw{background-position:-112px -55px}.flag.flag-ai{background-position:-64px 0}.flag.flag-ar{background-position:-144px 0}.flag.flag-co{background-position:-192px -22px}.flag.flag-na{background-position:-144px -99px}.flag.flag-er{background-position:-208px -33px}.flag.flag-pm{background-position:-192px -110px}.flag.flag-bg{background-position:-64px -11px}.flag.flag-sr{background-position:-112px -132px}.flag.flag-cm{background-position:-160px -22px}.flag.flag-il{background-position:-16px -66px}.flag.flag-tibet{background-position:-32px -143px}.flag.flag-lk{background-position:-224px -77px}.flag.flag-et{background-position:-240px -33px}.flag.flag-rs{background-position:-80px -121px}.flag.flag-th{background-position:-16px -143px}.flag.flag-tm{background-position:-96px -143px}.flag.flag-fj{background-position:-16px -44px}.flag.flag-ki{background-position:-16px -77px}.flag.flag-re{background-position:-48px -121px}.flag.flag-nf{background-position:-192px -99px}.flag.flag-kz{background-position:-144px -77px}.flag.flag-nc{background-position:-160px -99px}.flag.flag-bn{background-position:-144px -11px}.flag.flag-gb{background-position:-112px -44px}.flag.flag-mq{background-position:-256px -88px}.flag.flag-sc{background-position:-160px -121px}.flag.flag-gu{background-position:-96px -55px}.flag.flag-io{background-position:-80px -66px}.flag.flag-cd{background-position:-48px -22px}.flag.flag-tg{background-position:0 -143px}.flag.flag-sv{background-position:-160px -132px}.flag.flag-jo{background-position:-208px -66px}.flag.flag-ua{background-position:-224px -143px}.flag.flag-ga{background-position:-96px -44px}.flag.flag-cu{background-position:-224px -22px}.flag.flag-va{background-position:-48px -154px}.flag.flag-mu{background-position:-48px -99px}.flag.flag-hr{background-position:-192px -55px}.flag.flag-to{background-position:-128px -143px}.flag.flag-bh{background-position:-80px -11px}.flag.flag-ec{background-position:-128px -33px}.flag.flag-ug{background-position:-240px -143px}.flag.flag-de{background-position:-32px -33px}.flag.flag-gq{background-position:-32px -55px}.flag.flag-bd{background-position:-16px -11px}.flag.flag-bs{background-position:-192px -11px}.flag.flag-ck{background-position:-128px -22px}.flag.flag-gd{background-position:-128px -44px}.flag.flag-sh{background-position:-240px -121px}.flag.flag-be{background-position:-32px -11px}.flag.flag-mr{background-position:0 -99px}.flag.flag-tj{background-position:-48px -143px}.flag.flag-gl{background-position:-240px -44px}.flag.flag-as{background-position:-160px 0}.flag.flag-es{background-position:-224px -33px}.flag.flag-zm{background-position:-16px -165px}.flag.flag-wales{background-position:-160px -154px}.flag.flag-np{background-position:0 -110px}.flag.flag-lu{background-position:-16px -88px}.flag.flag-st{background-position:-144px -132px}.flag.flag-ao{background-position:-128px 0}.flag.flag-cf{background-position:-64px -22px}.flag.flag-az{background-position:-240px 0}.flag.flag-bw{background-position:-240px -11px}.flag.flag-nz{background-position:-48px -110px}.flag.flag-cy{background-position:0 -33px}.flag.flag-ne{background-position:-176px -99px}.flag.flag-kp{background-position:-64px -77px}.flag.flag-gs{background-position:-64px -55px}.flag.flag-mk{background-position:-160px -88px}.flag.flag-mo{background-position:-224px -88px}.flag.flag-jm{background-position:-192px -66px}.flag.flag-ws{background-position:-192px -154px}.flag.flag-lc{background-position:-192px -77px}.flag.flag-an{background-position:-112px 0}.flag.flag-gh{background-position:-208px -44px}.flag.flag-im{background-position:-48px -66px}.flag.flag-is{background-position:-128px -66px}.flag.flag-ae{background-position:-16px 0}.flag.flag-it{background-position:-144px -66px}.flag.flag-ss{background-position:-128px -132px}.flag.flag-ly{background-position:-48px -88px}.flag.flag-mv{background-position:-64px -99px}.flag.flag-ir{background-position:-112px -66px}.flag.flag-gt{background-position:-80px -55px}.flag.flag-bz{background-position:0 -22px}.flag.flag-dz{background-position:-112px -33px}.flag.flag-lt{background-position:0 -88px}.flag.flag-sd{background-position:-192px -121px}.flag.flag-pk{background-position:-160px -110px}.flag.flag-ru{background-position:-96px -121px}.flag.flag-pn{background-position:-208px -110px}.flag.flag-cn{background-position:-176px -22px}.flag.flag-aw{background-position:-208px 0} \"],\r\n    host: {\r\n        '(document:click)': 'hideDropdown($event)',\r\n    },\r\n    providers: [COUNTER_CONTROL_ACCESSOR, CountryService, LocaleService]\r\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: CountryService, },\n{type: LocaleService, },\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'locale': [{ type: Input },],\n'defaultCountry': [{ type: Input },],\n'maxLength': [{ type: Input },],\n'onlyNumbers': [{ type: Input },],\n'handleKeyboardEvent': [{ type: HostListener, args: ['document:keypress', ['$event'], ] },],\n};\n}\n\nfunction IntPhonePrefixComponent_tsickle_Closure_declarations() {\n/** @type {?} */\nIntPhonePrefixComponent.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nIntPhonePrefixComponent.ctorParameters;\n/** @type {?} */\nIntPhonePrefixComponent.propDecorators;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.locale;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.defaultCountry;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.maxLength;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.onlyNumbers;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.phoneComponent;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.onTouch;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.onModelChange;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.countries;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.locales;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.selectedCountry;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.countryFilter;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.showDropdown;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.phoneInput;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.disabled;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.value;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.service;\n/** @type {?} */\nIntPhonePrefixComponent.prototype.localeService;\n}\n\r\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/component/int-phone-prefix/int-phone-prefix.component.ts","import {Directive, ElementRef, HostListener, Input} from '@angular/core';\nexport class OnlyNumberDirective {\r\n\r\n    \r\n    onlyNumber: boolean;\r\n\r\n    regexStr = '^[0-9]*$';\n/**\n * @param {?} el\n */\nconstructor(private el: ElementRef) {\r\n    }\n/**\n * @param {?} event\n * @return {?}\n */\nonKeyDown(event: KeyboardEvent) {\r\n        let /** @type {?} */ e = /** @type {?} */(( <KeyboardEvent> event));\r\n        if (this.onlyNumber) {\r\n            if (\r\n                [46, 8, 9, 27, 13, 110, 190, 171].indexOf(e.keyCode) !== -1 ||\r\n                // Allow: Ctrl+A\r\n                (e.keyCode === 65 && e.ctrlKey === true) ||\r\n                // Allow: Ctrl+C\r\n                (e.keyCode === 67 && e.ctrlKey === true) ||\r\n                // Allow: Ctrl+V\r\n                (e.keyCode === 86 && e.ctrlKey === true) ||\r\n                // Allow: Ctrl+X\r\n                (e.keyCode === 88 && e.ctrlKey === true) ||\r\n                // Allow: home, end, left, right\r\n                (e.keyCode >= 35 && e.keyCode <= 39) ||\r\n                // Allow plus button\r\n                (e.keyCode === 107) || (e.keyCode === 187)) {\r\n                // let it happen, don't do anything\r\n                return;\r\n            }\r\n            let /** @type {?} */ ch = String.fromCharCode(e.keyCode);\r\n            let /** @type {?} */ regEx = new RegExp(this.regexStr);\r\n            if (regEx.test(ch)) {\r\n                return;\r\n            } else if ((e.shiftKey || (e.keyCode < 48 || e.keyCode > 57)) && (e.keyCode < 96 || e.keyCode > 105)) {\r\n                e.preventDefault();\r\n            }\r\n        } else {\r\n            return;\r\n        }\r\n    }\r\nstatic decorators: DecoratorInvocation[] = [\n{ type: Directive, args: [{\r\n    selector: '[onlyNumber]'\r\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'onlyNumber': [{ type: Input },],\n'onKeyDown': [{ type: HostListener, args: ['keydown', ['$event'], ] },],\n};\n}\n\nfunction OnlyNumberDirective_tsickle_Closure_declarations() {\n/** @type {?} */\nOnlyNumberDirective.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nOnlyNumberDirective.ctorParameters;\n/** @type {?} */\nOnlyNumberDirective.propDecorators;\n/** @type {?} */\nOnlyNumberDirective.prototype.onlyNumber;\n/** @type {?} */\nOnlyNumberDirective.prototype.regexStr;\n/** @type {?} */\nOnlyNumberDirective.prototype.el;\n}\n\r\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/directive/only-number.directive.ts","import { Pipe, PipeTransform } from '@angular/core';\r\nimport {Country} from '../interface/country.interface';\nexport class CountryPipe implements PipeTransform {\n/**\n * @param {?} value\n * @param {?=} args\n * @return {?}\n */\ntransform(value: Country[], args?: string): any {\r\n    let /** @type {?} */ searchText = new RegExp(args, 'ig');\r\n\r\n    if (value) {\r\n      return value.filter((country: Country) => country.name.search(searchText) !== -1);\r\n    }\r\n  }\r\n\r\nstatic decorators: DecoratorInvocation[] = [\n{ type: Pipe, args: [{\r\n  name: 'country'\r\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction CountryPipe_tsickle_Closure_declarations() {\n/** @type {?} */\nCountryPipe.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nCountryPipe.ctorParameters;\n}\n\r\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/pipe/country.pipe.ts","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\r\nimport {IntPhonePrefixComponent} from './component/int-phone-prefix/int-phone-prefix.component';\r\nimport {OnlyNumberDirective} from './directive/only-number.directive';\r\nimport {CountryPipe} from './pipe/country.pipe';\r\nimport {CountryService} from './service/country.service';\r\nimport {LocaleService} from './service/locale.service';\nexport class InternationalPhoneModule {static decorators: DecoratorInvocation[] = [\n{ type: NgModule, args: [{\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    ReactiveFormsModule\r\n  ],\r\n  declarations: [\r\n    IntPhonePrefixComponent,\r\n    OnlyNumberDirective,\r\n    CountryPipe\r\n  ],\r\n  exports: [\r\n    IntPhonePrefixComponent\r\n  ],\r\n  providers: [CountryService, LocaleService]\r\n}, ] },\n];\n/**\n * @nocollapse\n */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n];\n}\n\nfunction InternationalPhoneModule_tsickle_Closure_declarations() {\n/** @type {?} */\nInternationalPhoneModule.decorators;\n/**\n * @nocollapse\n * @type {?}\n */\nInternationalPhoneModule.ctorParameters;\n}\n\r\n\ninterface DecoratorInvocation {\n  type: Function;\n  args?: any[];\n}\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/module.ts","import {CountryCode} from './country-code.interface';\nexport class CountryLocale {\r\n  [lang: string]: CountryCode\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ../out-tsc/lib/src/interface/country-locale.interface.ts","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar domhandler_1 = require(\"../dom/domhandler\");\nexports.DomHandler = domhandler_1.DomHandler;\nvar treedragdropservice_1 = require(\"./treedragdropservice\");\nexports.TreeDragDropService = treedragdropservice_1.TreeDragDropService;\nvar confirmationservice_1 = require(\"./confirmationservice\");\nexports.ConfirmationService = confirmationservice_1.ConfirmationService;\n//# sourceMappingURL=api.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/common/api.js\n// module id = 722\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar idx = 0;\nvar AccordionTab = /** @class */ (function () {\n    function AccordionTab(accordion) {\n        this.accordion = accordion;\n        this.selectedChange = new core_1.EventEmitter();\n        this.id = \"ui-accordiontab-\" + idx++;\n    }\n    AccordionTab.prototype.toggle = function (event) {\n        if (this.disabled || this.animating) {\n            return false;\n        }\n        this.animating = true;\n        var index = this.findTabIndex();\n        if (this.selected) {\n            this.selected = false;\n            this.accordion.onClose.emit({ originalEvent: event, index: index });\n        }\n        else {\n            if (!this.accordion.multiple) {\n                for (var i = 0; i < this.accordion.tabs.length; i++) {\n                    this.accordion.tabs[i].selected = false;\n                    this.accordion.tabs[i].selectedChange.emit(false);\n                }\n            }\n            this.selected = true;\n            this.accordion.onOpen.emit({ originalEvent: event, index: index });\n        }\n        this.selectedChange.emit(this.selected);\n        event.preventDefault();\n    };\n    AccordionTab.prototype.findTabIndex = function () {\n        var index = -1;\n        for (var i = 0; i < this.accordion.tabs.length; i++) {\n            if (this.accordion.tabs[i] == this) {\n                index = i;\n                break;\n            }\n        }\n        return index;\n    };\n    Object.defineProperty(AccordionTab.prototype, \"lazy\", {\n        get: function () {\n            return this.accordion.lazy;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(AccordionTab.prototype, \"hasHeaderFacet\", {\n        get: function () {\n            return this.headerFacet && this.headerFacet.length > 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    AccordionTab.prototype.onToggleDone = function (event) {\n        this.animating = false;\n    };\n    AccordionTab.prototype.ngOnDestroy = function () {\n        this.accordion.tabs.splice(this.findTabIndex(), 1);\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AccordionTab.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AccordionTab.prototype, \"selected\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AccordionTab.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AccordionTab.prototype, \"selectedChange\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.Header),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], AccordionTab.prototype, \"headerFacet\", void 0);\n    AccordionTab = __decorate([\n        core_1.Component({\n            selector: 'p-accordionTab',\n            template: \"\\n        <div class=\\\"ui-accordion-header ui-state-default ui-corner-all\\\" [ngClass]=\\\"{'ui-state-active': selected,'ui-state-disabled':disabled}\\\">\\n            <a href=\\\"#\\\" [attr.id]=\\\"id\\\" [attr.aria-controls]=\\\"id + '-content'\\\" role=\\\"tab\\\" [attr.aria-expanded]=\\\"selected\\\" (click)=\\\"toggle($event)\\\" (keydown.space)=\\\"toggle($event)\\\">\\n                <span class=\\\"ui-accordion-toggle-icon\\\" [ngClass]=\\\"selected ? accordion.collapseIcon : accordion.expandIcon\\\"></span>\\n                <span class=\\\"ui-accordion-header-text\\\" *ngIf=\\\"!hasHeaderFacet\\\">\\n                    {{header}}\\n                </span>\\n                <ng-content select=\\\"p-header\\\" *ngIf=\\\"hasHeaderFacet\\\"></ng-content>\\n            </a>\\n        </div>\\n        <div [attr.id]=\\\"id + '-content'\\\" class=\\\"ui-accordion-content-wrapper\\\" [@tabContent]=\\\"selected ? 'visible' : 'hidden'\\\" (@tabContent.done)=\\\"onToggleDone($event)\\\"\\n            [ngClass]=\\\"{'ui-accordion-content-wrapper-overflown': !selected||animating}\\\" \\n            role=\\\"region\\\" [attr.aria-hidden]=\\\"!selected\\\" [attr.aria-labelledby]=\\\"id\\\">\\n            <div class=\\\"ui-accordion-content ui-widget-content\\\" *ngIf=\\\"lazy ? selected : true\\\">\\n                <ng-content></ng-content>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('tabContent', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0'\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*'\n                    })),\n                    animations_1.transition('visible <=> hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return Accordion; }))),\n        __metadata(\"design:paramtypes\", [Accordion])\n    ], AccordionTab);\n    return AccordionTab;\n}());\nexports.AccordionTab = AccordionTab;\nvar Accordion = /** @class */ (function () {\n    function Accordion(el, changeDetector) {\n        this.el = el;\n        this.changeDetector = changeDetector;\n        this.onClose = new core_1.EventEmitter();\n        this.onOpen = new core_1.EventEmitter();\n        this.expandIcon = 'fa fa-fw fa-caret-right';\n        this.collapseIcon = 'fa fa-fw fa-caret-down';\n        this.tabs = [];\n    }\n    Accordion.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.initTabs();\n        this.tabListSubscription = this.tabList.changes.subscribe(function (_) {\n            _this.initTabs();\n            _this.changeDetector.markForCheck();\n        });\n    };\n    Accordion.prototype.initTabs = function () {\n        this.tabs = this.tabList.toArray();\n        this.updateSelectionState();\n    };\n    Accordion.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Object.defineProperty(Accordion.prototype, \"activeIndex\", {\n        get: function () {\n            return this._activeIndex;\n        },\n        set: function (val) {\n            this._activeIndex = val;\n            this.updateSelectionState();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Accordion.prototype.updateSelectionState = function () {\n        if (this.tabs && this.tabs.length && this._activeIndex != null) {\n            for (var i = 0; i < this.tabs.length; i++) {\n                var selected = this.multiple ? this._activeIndex.includes(i) : (i === this._activeIndex);\n                var changed = selected !== this.tabs[i].selected;\n                if (changed) {\n                    this.tabs[i].animating = true;\n                }\n                this.tabs[i].selected = selected;\n                this.tabs[i].selectedChange.emit(selected);\n            }\n        }\n    };\n    Accordion.prototype.ngOnDestroy = function () {\n        if (this.tabListSubscription) {\n            this.tabListSubscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Accordion.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Accordion.prototype, \"onClose\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Accordion.prototype, \"onOpen\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Accordion.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Accordion.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Accordion.prototype, \"expandIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Accordion.prototype, \"collapseIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Accordion.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.ContentChildren(AccordionTab),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Accordion.prototype, \"tabList\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], Accordion.prototype, \"activeIndex\", null);\n    Accordion = __decorate([\n        core_1.Component({\n            selector: 'p-accordion',\n            template: \"\\n        <div [ngClass]=\\\"'ui-accordion ui-widget ui-helper-reset'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" role=\\\"presentation\\\">\\n            <ng-content></ng-content>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.ChangeDetectorRef])\n    ], Accordion);\n    return Accordion;\n}());\nexports.Accordion = Accordion;\nvar AccordionModule = /** @class */ (function () {\n    function AccordionModule() {\n    }\n    AccordionModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Accordion, AccordionTab, shared_1.SharedModule],\n            declarations: [Accordion, AccordionTab]\n        })\n    ], AccordionModule);\n    return AccordionModule;\n}());\nexports.AccordionModule = AccordionModule;\n//# sourceMappingURL=accordion.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/accordion/accordion.js\n// module id = 723\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar inputtext_1 = require(\"../inputtext/inputtext\");\nvar button_1 = require(\"../button/button\");\nvar shared_1 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar objectutils_1 = require(\"../utils/objectutils\");\nvar forms_1 = require(\"@angular/forms\");\nexports.AUTOCOMPLETE_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return AutoComplete; }),\n    multi: true\n};\nvar AutoComplete = /** @class */ (function () {\n    function AutoComplete(el, domHandler, renderer, objectUtils, cd, differs) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.objectUtils = objectUtils;\n        this.cd = cd;\n        this.differs = differs;\n        this.minLength = 1;\n        this.delay = 300;\n        this.type = 'text';\n        this.completeMethod = new core_1.EventEmitter();\n        this.onSelect = new core_1.EventEmitter();\n        this.onUnselect = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onDropdownClick = new core_1.EventEmitter();\n        this.onClear = new core_1.EventEmitter();\n        this.onKeyUp = new core_1.EventEmitter();\n        this.scrollHeight = '200px';\n        this.dropdownMode = 'blank';\n        this.immutable = true;\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.panelVisible = false;\n        this.focus = false;\n        this.inputFieldValue = null;\n        this.differ = differs.find([]).create(null);\n    }\n    Object.defineProperty(AutoComplete.prototype, \"suggestions\", {\n        get: function () {\n            return this._suggestions;\n        },\n        set: function (val) {\n            this._suggestions = val;\n            if (this.immutable) {\n                this.handleSuggestionsChange();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    AutoComplete.prototype.ngDoCheck = function () {\n        if (!this.immutable) {\n            var changes = this.differ.diff(this.suggestions);\n            if (changes) {\n                this.handleSuggestionsChange();\n            }\n        }\n    };\n    AutoComplete.prototype.handleSuggestionsChange = function () {\n        if (this._suggestions != null) {\n            if (this.panelEL && this.panelEL.nativeElement && this.loading) {\n                this.highlightOption = null;\n                if (this._suggestions && this._suggestions.length) {\n                    this.noResults = false;\n                    this.show();\n                    this.suggestionsUpdated = true;\n                    if (this.autoHighlight) {\n                        this.highlightOption = this._suggestions[0];\n                    }\n                }\n                else {\n                    this.noResults = true;\n                    if (this.emptyMessage) {\n                        this.show();\n                        this.suggestionsUpdated = true;\n                    }\n                    else {\n                        this.hide();\n                    }\n                }\n            }\n            this.loading = false;\n        }\n    };\n    AutoComplete.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                case 'selectedItem':\n                    _this.selectedItemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    AutoComplete.prototype.ngAfterViewInit = function () {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panelEL.nativeElement);\n            else\n                this.domHandler.appendChild(this.panelEL.nativeElement, this.appendTo);\n        }\n    };\n    AutoComplete.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        //Use timeouts as since Angular 4.2, AfterViewChecked is broken and not called after panel is updated\n        if (this.suggestionsUpdated && this.panelEL.nativeElement && this.panelEL.nativeElement.offsetParent) {\n            setTimeout(function () { return _this.align(); }, 1);\n            this.suggestionsUpdated = false;\n        }\n        if (this.highlightOptionChanged) {\n            setTimeout(function () {\n                var listItem = _this.domHandler.findSingle(_this.panelEL.nativeElement, 'li.ui-state-highlight');\n                if (listItem) {\n                    _this.domHandler.scrollInView(_this.panelEL.nativeElement, listItem);\n                }\n            }, 1);\n            this.highlightOptionChanged = false;\n        }\n    };\n    AutoComplete.prototype.writeValue = function (value) {\n        this.value = value;\n        this.filled = this.value && this.value != '';\n        this.updateInputField();\n    };\n    AutoComplete.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    AutoComplete.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    AutoComplete.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    AutoComplete.prototype.onInput = function (event) {\n        var _this = this;\n        if (!this.inputKeyDown) {\n            return;\n        }\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n        }\n        var value = event.target.value;\n        if (!this.multiple && !this.forceSelection) {\n            this.onModelChange(value);\n        }\n        if (value.length === 0) {\n            this.hide();\n            this.onClear.emit(event);\n        }\n        if (value.length >= this.minLength) {\n            this.timeout = setTimeout(function () {\n                _this.search(event, value);\n            }, this.delay);\n        }\n        else {\n            this.suggestions = null;\n            this.hide();\n        }\n        this.updateFilledState();\n        this.inputKeyDown = false;\n    };\n    AutoComplete.prototype.onInputClick = function (event) {\n        if (this.documentClickListener) {\n            this.inputClick = true;\n        }\n    };\n    AutoComplete.prototype.search = function (event, query) {\n        //allow empty string but not undefined or null\n        if (query === undefined || query === null) {\n            return;\n        }\n        this.loading = true;\n        this.completeMethod.emit({\n            originalEvent: event,\n            query: query\n        });\n    };\n    AutoComplete.prototype.selectItem = function (option, focus) {\n        if (focus === void 0) { focus = true; }\n        if (this.multiple) {\n            this.multiInputEL.nativeElement.value = '';\n            this.value = this.value || [];\n            if (!this.isSelected(option)) {\n                this.value = this.value.concat([option]);\n                this.onModelChange(this.value);\n            }\n        }\n        else {\n            this.inputEL.nativeElement.value = this.field ? this.objectUtils.resolveFieldData(option, this.field) || '' : option;\n            this.value = option;\n            this.onModelChange(this.value);\n        }\n        this.onSelect.emit(option);\n        this.updateFilledState();\n        this._suggestions = null;\n        if (focus) {\n            this.focusInput();\n        }\n    };\n    AutoComplete.prototype.show = function () {\n        if (this.multiInputEL || this.inputEL) {\n            var hasFocus = this.multiple ? document.activeElement == this.multiInputEL.nativeElement : document.activeElement == this.inputEL.nativeElement;\n            if (!this.panelVisible && hasFocus) {\n                this.panelVisible = true;\n                if (this.appendTo) {\n                    this.panelEL.nativeElement.style.minWidth = this.domHandler.getWidth(this.el.nativeElement.children[0]) + 'px';\n                }\n                this.panelEL.nativeElement.style.zIndex = ++domhandler_1.DomHandler.zindex;\n                this.domHandler.fadeIn(this.panelEL.nativeElement, 200);\n                this.bindDocumentClickListener();\n            }\n        }\n    };\n    AutoComplete.prototype.align = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.panelEL.nativeElement, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));\n        else\n            this.domHandler.relativePosition(this.panelEL.nativeElement, (this.multiple ? this.multiContainerEL.nativeElement : this.inputEL.nativeElement));\n    };\n    AutoComplete.prototype.hide = function () {\n        this.panelVisible = false;\n        this.unbindDocumentClickListener();\n    };\n    AutoComplete.prototype.handleDropdownClick = function (event) {\n        this.focusInput();\n        var queryValue = this.multiple ? this.multiInputEL.nativeElement.value : this.inputEL.nativeElement.value;\n        if (this.dropdownMode === 'blank')\n            this.search(event, '');\n        else if (this.dropdownMode === 'current')\n            this.search(event, queryValue);\n        this.onDropdownClick.emit({\n            originalEvent: event,\n            query: queryValue\n        });\n    };\n    AutoComplete.prototype.focusInput = function () {\n        if (this.multiple)\n            this.multiInputEL.nativeElement.focus();\n        else\n            this.inputEL.nativeElement.focus();\n    };\n    AutoComplete.prototype.removeItem = function (item) {\n        var itemIndex = this.domHandler.index(item);\n        var removedValue = this.value[itemIndex];\n        this.value = this.value.filter(function (val, i) { return i != itemIndex; });\n        this.onModelChange(this.value);\n        this.updateFilledState();\n        this.onUnselect.emit(removedValue);\n    };\n    AutoComplete.prototype.onKeydown = function (event) {\n        if (this.panelVisible) {\n            var highlightItemIndex = this.findOptionIndex(this.highlightOption);\n            switch (event.which) {\n                //down\n                case 40:\n                    if (highlightItemIndex != -1) {\n                        var nextItemIndex = highlightItemIndex + 1;\n                        if (nextItemIndex != (this.suggestions.length)) {\n                            this.highlightOption = this.suggestions[nextItemIndex];\n                            this.highlightOptionChanged = true;\n                        }\n                    }\n                    else {\n                        this.highlightOption = this.suggestions[0];\n                    }\n                    event.preventDefault();\n                    break;\n                //up\n                case 38:\n                    if (highlightItemIndex > 0) {\n                        var prevItemIndex = highlightItemIndex - 1;\n                        this.highlightOption = this.suggestions[prevItemIndex];\n                        this.highlightOptionChanged = true;\n                    }\n                    event.preventDefault();\n                    break;\n                //enter\n                case 13:\n                    if (this.highlightOption) {\n                        this.selectItem(this.highlightOption);\n                        this.hide();\n                    }\n                    event.preventDefault();\n                    break;\n                //escape\n                case 27:\n                    this.hide();\n                    event.preventDefault();\n                    break;\n                //tab\n                case 9:\n                    if (this.highlightOption) {\n                        this.selectItem(this.highlightOption);\n                    }\n                    this.hide();\n                    break;\n            }\n        }\n        else {\n            if (event.which === 40 && this.suggestions) {\n                this.search(event, event.target.value);\n            }\n        }\n        if (this.multiple) {\n            switch (event.which) {\n                //backspace\n                case 8:\n                    if (this.value && this.value.length && !this.multiInputEL.nativeElement.value) {\n                        this.value = this.value.slice();\n                        var removedValue = this.value.pop();\n                        this.onModelChange(this.value);\n                        this.updateFilledState();\n                        this.onUnselect.emit(removedValue);\n                    }\n                    break;\n            }\n        }\n        this.inputKeyDown = true;\n    };\n    AutoComplete.prototype.onKeyup = function (event) {\n        this.onKeyUp.emit(event);\n    };\n    AutoComplete.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        this.onFocus.emit(event);\n    };\n    AutoComplete.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        this.onModelTouched();\n        this.onBlur.emit(event);\n    };\n    AutoComplete.prototype.onInputChange = function (event) {\n        if (this.forceSelection && this.suggestions) {\n            var valid = false;\n            var inputValue = event.target.value.trim();\n            if (this.suggestions) {\n                for (var _i = 0, _a = this.suggestions; _i < _a.length; _i++) {\n                    var suggestion = _a[_i];\n                    var itemValue = this.field ? this.objectUtils.resolveFieldData(suggestion, this.field) : suggestion;\n                    if (itemValue && inputValue === itemValue.trim()) {\n                        valid = true;\n                        this.selectItem(suggestion, false);\n                        break;\n                    }\n                }\n            }\n            if (!valid) {\n                if (this.multiple) {\n                    this.multiInputEL.nativeElement.value = '';\n                }\n                else {\n                    this.value = null;\n                    this.inputEL.nativeElement.value = '';\n                }\n                this.onClear.emit(event);\n                this.onModelChange(this.value);\n            }\n        }\n    };\n    AutoComplete.prototype.isSelected = function (val) {\n        var selected = false;\n        if (this.value && this.value.length) {\n            for (var i = 0; i < this.value.length; i++) {\n                if (this.objectUtils.equals(this.value[i], val, this.dataKey)) {\n                    selected = true;\n                    break;\n                }\n            }\n        }\n        return selected;\n    };\n    AutoComplete.prototype.findOptionIndex = function (option) {\n        var index = -1;\n        if (this.suggestions) {\n            for (var i = 0; i < this.suggestions.length; i++) {\n                if (this.objectUtils.equals(option, this.suggestions[i])) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    AutoComplete.prototype.updateFilledState = function () {\n        if (this.multiple)\n            this.filled = (this.value && this.value.length) || (this.multiInputEL && this.multiInputEL.nativeElement && this.multiInputEL.nativeElement.value != '');\n        else\n            this.filled = (this.inputFieldValue && this.inputFieldValue != '') || (this.inputEL && this.inputEL.nativeElement && this.inputEL.nativeElement.value != '');\n        ;\n    };\n    AutoComplete.prototype.updateInputField = function () {\n        var formattedValue = this.value ? (this.field ? this.objectUtils.resolveFieldData(this.value, this.field) || '' : this.value) : '';\n        this.inputFieldValue = formattedValue;\n        if (this.inputEL && this.inputEL.nativeElement) {\n            this.inputEL.nativeElement.value = formattedValue;\n        }\n        this.updateFilledState();\n    };\n    AutoComplete.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n                if (event.which === 3) {\n                    return;\n                }\n                if (!_this.inputClick && !_this.isDropdownClick(event)) {\n                    _this.hide();\n                }\n                _this.inputClick = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    AutoComplete.prototype.isDropdownClick = function (event) {\n        if (this.dropdown) {\n            var target = event.target;\n            return (target === this.dropdownButton.nativeElement || target.parentNode === this.dropdownButton.nativeElement);\n        }\n        else {\n            return false;\n        }\n    };\n    AutoComplete.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    AutoComplete.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panelEL.nativeElement);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"minLength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"delay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], AutoComplete.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], AutoComplete.prototype, \"inputStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"inputStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"maxlength\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"size\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], AutoComplete.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"autoHighlight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"forceSelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"completeMethod\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onUnselect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onDropdownClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onClear\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], AutoComplete.prototype, \"onKeyUp\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"field\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"dropdown\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"dropdownMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], AutoComplete.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], AutoComplete.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], AutoComplete.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.ViewChild('in'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"inputEL\", void 0);\n    __decorate([\n        core_1.ViewChild('multiIn'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"multiInputEL\", void 0);\n    __decorate([\n        core_1.ViewChild('panel'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"panelEL\", void 0);\n    __decorate([\n        core_1.ViewChild('multiContainer'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"multiContainerEL\", void 0);\n    __decorate([\n        core_1.ViewChild('ddBtn'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], AutoComplete.prototype, \"dropdownButton\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], AutoComplete.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], AutoComplete.prototype, \"suggestions\", null);\n    AutoComplete = __decorate([\n        core_1.Component({\n            selector: 'p-autoComplete',\n            template: \"\\n        <span [ngClass]=\\\"{'ui-autocomplete ui-widget':true,'ui-autocomplete-dd':dropdown,'ui-autocomplete-multiple':multiple}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <input *ngIf=\\\"!multiple\\\" #in [attr.type]=\\\"type\\\" [attr.id]=\\\"inputId\\\" [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\" autocomplete=\\\"off\\\" [attr.required]=\\\"required\\\"\\n            [ngClass]=\\\"'ui-inputtext ui-widget ui-state-default ui-corner-all ui-autocomplete-input'\\\" [value]=\\\"inputFieldValue\\\"\\n            (click)=\\\"onInputClick($event)\\\" (input)=\\\"onInput($event)\\\" (keydown)=\\\"onKeydown($event)\\\" (keyup)=\\\"onKeyup($event)\\\" (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" (change)=\\\"onInputChange($event)\\\"\\n            [attr.placeholder]=\\\"placeholder\\\" [attr.size]=\\\"size\\\" [attr.maxlength]=\\\"maxlength\\\" [attr.tabindex]=\\\"tabindex\\\" [readonly]=\\\"readonly\\\" [disabled]=\\\"disabled\\\"\\n            ><ul *ngIf=\\\"multiple\\\" #multiContainer class=\\\"ui-autocomplete-multiple-container ui-widget ui-inputtext ui-state-default ui-corner-all\\\" [ngClass]=\\\"{'ui-state-disabled':disabled,'ui-state-focus':focus}\\\" (click)=\\\"multiIn.focus()\\\">\\n                <li #token *ngFor=\\\"let val of value\\\" class=\\\"ui-autocomplete-token ui-state-highlight ui-corner-all\\\">\\n                    <span class=\\\"ui-autocomplete-token-icon fa fa-fw fa-close\\\" (click)=\\\"removeItem(token)\\\" *ngIf=\\\"!disabled\\\"></span>\\n                    <span *ngIf=\\\"!selectedItemTemplate\\\" class=\\\"ui-autocomplete-token-label\\\">{{field ? objectUtils.resolveFieldData(val, field): val}}</span>\\n                    <ng-container *ngTemplateOutlet=\\\"selectedItemTemplate; context: {$implicit: val}\\\"></ng-container>\\n                </li>\\n                <li class=\\\"ui-autocomplete-input-token\\\">\\n                    <input #multiIn [attr.type]=\\\"type\\\" [attr.id]=\\\"inputId\\\" [disabled]=\\\"disabled\\\" [attr.placeholder]=\\\"(value&&value.length ? null : placeholder)\\\" [attr.tabindex]=\\\"tabindex\\\" (input)=\\\"onInput($event)\\\"  (click)=\\\"onInputClick($event)\\\"\\n                            (keydown)=\\\"onKeydown($event)\\\" [readonly]=\\\"readonly\\\" (keyup)=\\\"onKeyup($event)\\\" (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" (change)=\\\"onInputChange($event)\\\" autocomplete=\\\"off\\\" [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\">\\n                </li>\\n            </ul\\n            ><i *ngIf=\\\"loading\\\" class=\\\"ui-autocomplete-loader fa fa-circle-o-notch fa-spin fa-fw\\\"></i><button #ddBtn type=\\\"button\\\" pButton icon=\\\"fa-fw fa-caret-down\\\" class=\\\"ui-autocomplete-dropdown\\\" [disabled]=\\\"disabled\\\"\\n                (click)=\\\"handleDropdownClick($event)\\\" *ngIf=\\\"dropdown\\\"></button>\\n            <div #panel class=\\\"ui-autocomplete-panel ui-widget-content ui-corner-all ui-shadow\\\" [style.display]=\\\"panelVisible ? 'block' : 'none'\\\" [style.width]=\\\"appendTo ? 'auto' : '100%'\\\" [style.max-height]=\\\"scrollHeight\\\">\\n                <ul class=\\\"ui-autocomplete-items ui-autocomplete-list ui-widget-content ui-widget ui-corner-all ui-helper-reset\\\" *ngIf=\\\"panelVisible\\\">\\n                    <li *ngFor=\\\"let option of suggestions; let idx = index\\\" [ngClass]=\\\"{'ui-autocomplete-list-item ui-corner-all':true,'ui-state-highlight':(highlightOption==option)}\\\"\\n                        (mouseenter)=\\\"highlightOption=option\\\" (mouseleave)=\\\"highlightOption=null\\\" (click)=\\\"selectItem(option)\\\">\\n                        <span *ngIf=\\\"!itemTemplate\\\">{{field ? objectUtils.resolveFieldData(option, field) : option}}</span>\\n                        <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option, index: idx}\\\"></ng-container>\\n                    </li>\\n                    <li *ngIf=\\\"noResults && emptyMessage\\\" class=\\\"ui-autocomplete-list-item ui-corner-all\\\">{{emptyMessage}}</li>\\n                </ul>\\n            </div>\\n        </span>\\n    \",\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils, exports.AUTOCOMPLETE_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, objectutils_1.ObjectUtils, core_1.ChangeDetectorRef, core_1.IterableDiffers])\n    ], AutoComplete);\n    return AutoComplete;\n}());\nexports.AutoComplete = AutoComplete;\nvar AutoCompleteModule = /** @class */ (function () {\n    function AutoCompleteModule() {\n    }\n    AutoCompleteModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, inputtext_1.InputTextModule, button_1.ButtonModule, shared_1.SharedModule],\n            exports: [AutoComplete, shared_1.SharedModule],\n            declarations: [AutoComplete]\n        })\n    ], AutoCompleteModule);\n    return AutoCompleteModule;\n}());\nexports.AutoCompleteModule = AutoCompleteModule;\n//# sourceMappingURL=autocomplete.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/autocomplete/autocomplete.js\n// module id = 724\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar BlockUI = /** @class */ (function () {\n    function BlockUI(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    Object.defineProperty(BlockUI.prototype, \"blocked\", {\n        get: function () {\n            return this._blocked;\n        },\n        set: function (val) {\n            this._blocked = val;\n            if (this.mask.nativeElement) {\n                if (this._blocked)\n                    this.block();\n                else\n                    this.unblock();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    BlockUI.prototype.ngAfterViewInit = function () {\n        if (this.target && !this.target.getBlockableElement) {\n            throw 'Target of BlockUI must implement BlockableUI interface';\n        }\n    };\n    BlockUI.prototype.block = function () {\n        if (this.target) {\n            this.target.getBlockableElement().appendChild(this.mask.nativeElement);\n            var style = this.target.style || {};\n            style.position = 'relative';\n            this.target.style = style;\n        }\n        else {\n            document.body.appendChild(this.mask.nativeElement);\n        }\n        if (this.autoZIndex) {\n            this.mask.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    BlockUI.prototype.unblock = function () {\n        this.el.nativeElement.appendChild(this.mask.nativeElement);\n    };\n    BlockUI.prototype.ngOnDestroy = function () {\n        this.unblock();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], BlockUI.prototype, \"target\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], BlockUI.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], BlockUI.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.ViewChild('mask'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], BlockUI.prototype, \"mask\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], BlockUI.prototype, \"blocked\", null);\n    BlockUI = __decorate([\n        core_1.Component({\n            selector: 'p-blockUI',\n            template: \"\\n        <div #mask class=\\\"ui-blockui ui-widget-overlay\\\" [ngClass]=\\\"{'ui-blockui-document':!target}\\\" [ngStyle]=\\\"{display: blocked ? 'block' : 'none'}\\\">\\n            <ng-content></ng-content>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], BlockUI);\n    return BlockUI;\n}());\nexports.BlockUI = BlockUI;\nvar BlockUIModule = /** @class */ (function () {\n    function BlockUIModule() {\n    }\n    BlockUIModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [BlockUI],\n            declarations: [BlockUI]\n        })\n    ], BlockUIModule);\n    return BlockUIModule;\n}());\nexports.BlockUIModule = BlockUIModule;\n//# sourceMappingURL=blockui.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/blockui/blockui.js\n// module id = 725\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar router_1 = require(\"@angular/router\");\nvar Breadcrumb = /** @class */ (function () {\n    function Breadcrumb() {\n    }\n    Breadcrumb.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    };\n    Breadcrumb.prototype.onHomeClick = function (event) {\n        if (this.home) {\n            this.itemClick(event, this.home);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Breadcrumb.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Breadcrumb.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Breadcrumb.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Breadcrumb.prototype, \"home\", void 0);\n    Breadcrumb = __decorate([\n        core_1.Component({\n            selector: 'p-breadcrumb',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-breadcrumb ui-widget ui-widget-header ui-helper-clearfix ui-corner-all'\\\">\\n            <ul>\\n                <li class=\\\"ui-breadcrumb-home\\\" *ngIf=\\\"home\\\">\\n                    <a *ngIf=\\\"!home.routerLink\\\" [href]=\\\"home.url||'#'\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, home)\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':home.disabled}\\\" [attr.target]=\\\"home.target\\\" [attr.title]=\\\"home.title\\\" [attr.id]=\\\"home.id\\\">\\n                        <span [ngClass]=\\\"home.icon||'fa fa-home'\\\"></span>\\n                    </a>\\n                    <a *ngIf=\\\"home.routerLink\\\" [routerLink]=\\\"home.routerLink\\\" [queryParams]=\\\"home.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"home.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, home)\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':home.disabled}\\\" [attr.target]=\\\"home.target\\\" [attr.title]=\\\"home.title\\\" [attr.id]=\\\"home.id\\\">\\n                        <span class=\\\"fa fa-home\\\"></span>\\n                    </a>\\n                </li>\\n                <li class=\\\"ui-breadcrumb-chevron fa fa-chevron-right\\\" *ngIf=\\\"model&&home\\\"></li>\\n                <ng-template ngFor let-item let-end=\\\"last\\\" [ngForOf]=\\\"model\\\">\\n                    <li role=\\\"menuitem\\\">\\n                        <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, item)\\\" \\n                            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\">\\n                            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                        </a>\\n                        <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, item)\\\" \\n                            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\">\\n                            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                        </a>\\n                    </li>\\n                    <li class=\\\"ui-breadcrumb-chevron fa fa-chevron-right\\\" *ngIf=\\\"!end\\\"></li>\\n                </ng-template>\\n            </ul>\\n        </div>\\n    \"\n        })\n    ], Breadcrumb);\n    return Breadcrumb;\n}());\nexports.Breadcrumb = Breadcrumb;\nvar BreadcrumbModule = /** @class */ (function () {\n    function BreadcrumbModule() {\n    }\n    BreadcrumbModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [Breadcrumb, router_1.RouterModule],\n            declarations: [Breadcrumb]\n        })\n    ], BreadcrumbModule);\n    return BreadcrumbModule;\n}());\nexports.BreadcrumbModule = BreadcrumbModule;\n//# sourceMappingURL=breadcrumb.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/breadcrumb/breadcrumb.js\n// module id = 726\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar Captcha = /** @class */ (function () {\n    function Captcha(el, _zone) {\n        this.el = el;\n        this._zone = _zone;\n        this.siteKey = null;\n        this.theme = 'light';\n        this.type = 'image';\n        this.size = 'normal';\n        this.tabindex = 0;\n        this.language = null;\n        this.initCallback = \"initRecaptcha\";\n        this.onResponse = new core_1.EventEmitter();\n        this.onExpire = new core_1.EventEmitter();\n        this._instance = null;\n    }\n    Captcha.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (window.grecaptcha) {\n            this.init();\n        }\n        else {\n            window[this.initCallback] = function () {\n                _this.init();\n            };\n        }\n    };\n    Captcha.prototype.init = function () {\n        var _this = this;\n        this._instance = window.grecaptcha.render(this.el.nativeElement.children[0], {\n            'sitekey': this.siteKey,\n            'theme': this.theme,\n            'type': this.type,\n            'size': this.size,\n            'tabindex': this.tabindex,\n            'hl': this.language,\n            'callback': function (response) { _this._zone.run(function () { return _this.recaptchaCallback(response); }); },\n            'expired-callback': function () { _this._zone.run(function () { return _this.recaptchaExpiredCallback(); }); }\n        });\n    };\n    Captcha.prototype.reset = function () {\n        if (this._instance === null)\n            return;\n        window.grecaptcha.reset(this._instance);\n    };\n    Captcha.prototype.getResponse = function () {\n        if (this._instance === null)\n            return null;\n        return window.grecaptcha.getResponse(this._instance);\n    };\n    Captcha.prototype.recaptchaCallback = function (response) {\n        this.onResponse.emit({\n            response: response\n        });\n    };\n    Captcha.prototype.recaptchaExpiredCallback = function () {\n        this.onExpire.emit();\n    };\n    Captcha.prototype.ngOnDestroy = function () {\n        if (this._instance != null) {\n            window.grecaptcha.reset(this._instance);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Captcha.prototype, \"siteKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"theme\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"size\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Captcha.prototype, \"language\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Captcha.prototype, \"initCallback\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Captcha.prototype, \"onResponse\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Captcha.prototype, \"onExpire\", void 0);\n    Captcha = __decorate([\n        core_1.Component({\n            selector: 'p-captcha',\n            template: \"<div></div>\"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.NgZone])\n    ], Captcha);\n    return Captcha;\n}());\nexports.Captcha = Captcha;\nvar CaptchaModule = /** @class */ (function () {\n    function CaptchaModule() {\n    }\n    CaptchaModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Captcha],\n            declarations: [Captcha]\n        })\n    ], CaptchaModule);\n    return CaptchaModule;\n}());\nexports.CaptchaModule = CaptchaModule;\n//# sourceMappingURL=captcha.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/captcha/captcha.js\n// module id = 727\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar button_1 = require(\"../button/button\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar shared_1 = require(\"../common/shared\");\nvar forms_1 = require(\"@angular/forms\");\nexports.CALENDAR_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Calendar; }),\n    multi: true\n};\nvar Calendar = /** @class */ (function () {\n    function Calendar(el, domHandler, renderer, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.dateFormat = 'mm/dd/yy';\n        this.inline = false;\n        this.showOtherMonths = true;\n        this.icon = 'fa-calendar';\n        this.shortYearCutoff = '+10';\n        this.hourFormat = '24';\n        this.stepHour = 1;\n        this.stepMinute = 1;\n        this.stepSecond = 1;\n        this.showSeconds = false;\n        this.showOnFocus = true;\n        this.dataType = 'date';\n        this.selectionMode = 'single';\n        this.todayButtonStyleClass = 'ui-button-secondary';\n        this.clearButtonStyleClass = 'ui-button-secondary';\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.keepInvalid = false;\n        this.hideOnDateTimeSelect = false;\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onClose = new core_1.EventEmitter();\n        this.onSelect = new core_1.EventEmitter();\n        this.onInput = new core_1.EventEmitter();\n        this.onTodayClick = new core_1.EventEmitter();\n        this.onClearClick = new core_1.EventEmitter();\n        this.onMonthChange = new core_1.EventEmitter();\n        this.onYearChange = new core_1.EventEmitter();\n        this._locale = {\n            firstDayOfWeek: 0,\n            dayNames: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n            dayNamesShort: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n            dayNamesMin: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n            monthNames: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n            monthNamesShort: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n            today: 'Today',\n            clear: 'Clear'\n        };\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.inputFieldValue = null;\n    }\n    Object.defineProperty(Calendar.prototype, \"minDate\", {\n        get: function () {\n            return this._minDate;\n        },\n        set: function (date) {\n            this._minDate = date;\n            if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n                this.createMonth(this.currentMonth, this.currentYear);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"maxDate\", {\n        get: function () {\n            return this._maxDate;\n        },\n        set: function (date) {\n            this._maxDate = date;\n            if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n                this.createMonth(this.currentMonth, this.currentYear);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"disabledDates\", {\n        get: function () {\n            return this._disabledDates;\n        },\n        set: function (disabledDates) {\n            this._disabledDates = disabledDates;\n            if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n                this.createMonth(this.currentMonth, this.currentYear);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"disabledDays\", {\n        get: function () {\n            return this._disabledDays;\n        },\n        set: function (disabledDays) {\n            this._disabledDays = disabledDays;\n            if (this.currentMonth != undefined && this.currentMonth != null && this.currentYear) {\n                this.createMonth(this.currentMonth, this.currentYear);\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"showTime\", {\n        get: function () {\n            return this._showTime;\n        },\n        set: function (showTime) {\n            this._showTime = showTime;\n            if (this.currentHour === undefined) {\n                this.initTime(this.value || new Date());\n            }\n            this.updateInputfield();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Calendar.prototype, \"locale\", {\n        get: function () {\n            return this._locale;\n        },\n        set: function (newLocale) {\n            this._locale = newLocale;\n            this.createWeekDays();\n            this.createMonth(this.currentMonth, this.currentYear);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Calendar.prototype.ngOnInit = function () {\n        var date = this.defaultDate || new Date();\n        this.createWeekDays();\n        this.currentMonth = date.getMonth();\n        this.currentYear = date.getFullYear();\n        this.initTime(date);\n        this.createMonth(this.currentMonth, this.currentYear);\n        this.ticksTo1970 = (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +\n            Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000);\n        if (this.yearNavigator && this.yearRange) {\n            this.yearOptions = [];\n            var years = this.yearRange.split(':'), yearStart = parseInt(years[0]), yearEnd = parseInt(years[1]);\n            for (var i = yearStart; i <= yearEnd; i++) {\n                this.yearOptions.push(i);\n            }\n        }\n    };\n    Calendar.prototype.ngAfterViewInit = function () {\n        if (!this.inline && this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlayViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.overlayViewChild.nativeElement, this.appendTo);\n        }\n    };\n    Calendar.prototype.ngAfterViewChecked = function () {\n        if (this.overlayShown) {\n            this.alignOverlay();\n            this.overlayShown = false;\n        }\n    };\n    Calendar.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'date':\n                    _this.dateTemplate = item.template;\n                    break;\n                default:\n                    _this.dateTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Calendar.prototype.createWeekDays = function () {\n        this.weekDays = [];\n        var dayIndex = this.locale.firstDayOfWeek;\n        for (var i = 0; i < 7; i++) {\n            this.weekDays.push(this.locale.dayNamesMin[dayIndex]);\n            dayIndex = (dayIndex == 6) ? 0 : ++dayIndex;\n        }\n    };\n    Calendar.prototype.createMonth = function (month, year) {\n        this.dates = [];\n        this.currentMonth = month;\n        this.currentYear = year;\n        this.currentMonthText = this.locale.monthNames[month];\n        var firstDay = this.getFirstDayOfMonthIndex(month, year);\n        var daysLength = this.getDaysCountInMonth(month, year);\n        var prevMonthDaysLength = this.getDaysCountInPrevMonth(month, year);\n        var sundayIndex = this.getSundayIndex();\n        var dayNo = 1;\n        var today = new Date();\n        for (var i = 0; i < 6; i++) {\n            var week = [];\n            if (i == 0) {\n                for (var j = (prevMonthDaysLength - firstDay + 1); j <= prevMonthDaysLength; j++) {\n                    var prev = this.getPreviousMonthAndYear(month, year);\n                    week.push({ day: j, month: prev.month, year: prev.year, otherMonth: true,\n                        today: this.isToday(today, j, prev.month, prev.year), selectable: this.isSelectable(j, prev.month, prev.year) });\n                }\n                var remainingDaysLength = 7 - week.length;\n                for (var j = 0; j < remainingDaysLength; j++) {\n                    week.push({ day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                        selectable: this.isSelectable(dayNo, month, year) });\n                    dayNo++;\n                }\n            }\n            else {\n                for (var j = 0; j < 7; j++) {\n                    if (dayNo > daysLength) {\n                        var next = this.getNextMonthAndYear(month, year);\n                        week.push({ day: dayNo - daysLength, month: next.month, year: next.year, otherMonth: true,\n                            today: this.isToday(today, dayNo - daysLength, next.month, next.year),\n                            selectable: this.isSelectable((dayNo - daysLength), next.month, next.year) });\n                    }\n                    else {\n                        week.push({ day: dayNo, month: month, year: year, today: this.isToday(today, dayNo, month, year),\n                            selectable: this.isSelectable(dayNo, month, year) });\n                    }\n                    dayNo++;\n                }\n            }\n            this.dates.push(week);\n        }\n    };\n    Calendar.prototype.initTime = function (date) {\n        this.pm = (!this.utc) ? (date.getHours() > 11) : (date.getUTCHours() > 11);\n        if (this.showTime) {\n            if (this.utc) {\n                this.currentMinute = date.getUTCMinutes();\n                this.currentSecond = date.getUTCSeconds();\n                if (this.hourFormat == '12')\n                    this.currentHour = date.getUTCHours() == 0 ? 12 : date.getUTCHours() % 12;\n                else\n                    this.currentHour = date.getUTCHours();\n            }\n            else {\n                this.currentMinute = date.getMinutes();\n                this.currentSecond = date.getSeconds();\n                if (this.hourFormat == '12')\n                    this.currentHour = date.getHours() == 0 ? 12 : date.getHours() % 12;\n                else\n                    this.currentHour = date.getHours();\n            }\n        }\n        else if (this.timeOnly) {\n            this.currentMinute = 0;\n            this.currentHour = 0;\n            this.currentSecond = 0;\n        }\n    };\n    Calendar.prototype.prevMonth = function (event) {\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (this.currentMonth === 0) {\n            this.currentMonth = 11;\n            this.currentYear--;\n            if (this.yearNavigator && this.currentYear < this.yearOptions[0]) {\n                this.currentYear = this.yearOptions[this.yearOptions.length - 1];\n            }\n        }\n        else {\n            this.currentMonth--;\n        }\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonth(this.currentMonth, this.currentYear);\n        event.preventDefault();\n    };\n    Calendar.prototype.nextMonth = function (event) {\n        if (this.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (this.currentMonth === 11) {\n            this.currentMonth = 0;\n            this.currentYear++;\n            if (this.yearNavigator && this.currentYear > this.yearOptions[this.yearOptions.length - 1]) {\n                this.currentYear = this.yearOptions[0];\n            }\n        }\n        else {\n            this.currentMonth++;\n        }\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonth(this.currentMonth, this.currentYear);\n        event.preventDefault();\n    };\n    Calendar.prototype.onDateSelect = function (event, dateMeta) {\n        var _this = this;\n        if (this.disabled || !dateMeta.selectable) {\n            event.preventDefault();\n            return;\n        }\n        if (this.isMultipleSelection() && this.isSelected(dateMeta)) {\n            this.value = this.value.filter(function (date, i) {\n                return !_this.isDateEquals(date, dateMeta);\n            });\n            this.updateModel(this.value);\n        }\n        else {\n            if (this.shouldSelectDate(dateMeta)) {\n                if (dateMeta.otherMonth) {\n                    if (this.selectOtherMonths) {\n                        this.currentMonth = dateMeta.month;\n                        this.currentYear = dateMeta.year;\n                        this.createMonth(this.currentMonth, this.currentYear);\n                        this.selectDate(dateMeta);\n                    }\n                }\n                else {\n                    this.selectDate(dateMeta);\n                }\n            }\n        }\n        if (this.isSingleSelection() && (!this.showTime || this.hideOnDateTimeSelect)) {\n            this.overlayVisible = false;\n        }\n        this.updateInputfield();\n        event.preventDefault();\n    };\n    Calendar.prototype.shouldSelectDate = function (dateMeta) {\n        if (this.isMultipleSelection())\n            return !this.maxDateCount || !this.value || this.maxDateCount > this.value.length;\n        else\n            return true;\n    };\n    Calendar.prototype.updateInputfield = function () {\n        var formattedValue = '';\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                formattedValue = this.formatDateTime(this.value);\n            }\n            else if (this.isMultipleSelection()) {\n                for (var i = 0; i < this.value.length; i++) {\n                    var dateAsString = this.formatDateTime(this.value[i]);\n                    formattedValue += dateAsString;\n                    if (i !== (this.value.length - 1)) {\n                        formattedValue += ', ';\n                    }\n                }\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value && this.value.length) {\n                    var startDate = this.value[0];\n                    var endDate = this.value[1];\n                    formattedValue = this.formatDateTime(startDate);\n                    if (endDate) {\n                        formattedValue += ' - ' + this.formatDateTime(endDate);\n                    }\n                }\n            }\n        }\n        this.inputFieldValue = formattedValue;\n        this.updateFilledState();\n        if (this.inputfieldViewChild && this.inputfieldViewChild.nativeElement) {\n            this.inputfieldViewChild.nativeElement.value = this.inputFieldValue;\n        }\n    };\n    Calendar.prototype.formatDateTime = function (date) {\n        var formattedValue = null;\n        if (date) {\n            if (this.timeOnly) {\n                formattedValue = this.formatTime(date);\n            }\n            else {\n                formattedValue = this.formatDate(date, this.dateFormat);\n                if (this.showTime) {\n                    formattedValue += ' ' + this.formatTime(date);\n                }\n            }\n        }\n        return formattedValue;\n    };\n    Calendar.prototype.selectDate = function (dateMeta) {\n        var date;\n        if (this.utc)\n            date = new Date(Date.UTC(dateMeta.year, dateMeta.month, dateMeta.day));\n        else\n            date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n        if (this.showTime) {\n            if (this.utc) {\n                if (this.hourFormat === '12' && this.pm && this.currentHour != 12)\n                    date.setUTCHours(this.currentHour + 12);\n                else\n                    date.setUTCHours(this.currentHour);\n                date.setUTCMinutes(this.currentMinute);\n                date.setUTCSeconds(this.currentSecond);\n            }\n            else {\n                if (this.hourFormat === '12' && this.pm && this.currentHour != 12)\n                    date.setHours(this.currentHour + 12);\n                else\n                    date.setHours(this.currentHour);\n                date.setMinutes(this.currentMinute);\n                date.setSeconds(this.currentSecond);\n            }\n        }\n        if (this.minDate && this.minDate > date) {\n            date = this.minDate;\n            this.currentHour = date.getHours();\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n        if (this.maxDate && this.maxDate < date) {\n            date = this.maxDate;\n            this.currentHour = date.getHours();\n            this.currentMinute = date.getMinutes();\n            this.currentSecond = date.getSeconds();\n        }\n        if (this.isSingleSelection()) {\n            this.updateModel(date);\n        }\n        else if (this.isMultipleSelection()) {\n            this.updateModel(this.value ? this.value.concat([date]) : [date]);\n        }\n        else if (this.isRangeSelection()) {\n            if (this.value && this.value.length) {\n                var startDate = this.value[0];\n                var endDate = this.value[1];\n                if (!endDate && date.getTime() >= startDate.getTime()) {\n                    endDate = date;\n                }\n                else {\n                    startDate = date;\n                    endDate = null;\n                }\n                this.updateModel([startDate, endDate]);\n            }\n            else {\n                this.updateModel([date, null]);\n            }\n        }\n        this.onSelect.emit(date);\n    };\n    Calendar.prototype.updateModel = function (value) {\n        var _this = this;\n        this.value = value;\n        if (this.dataType == 'date') {\n            this.onModelChange(this.value);\n        }\n        else if (this.dataType == 'string') {\n            if (this.isSingleSelection()) {\n                this.onModelChange(this.formatDateTime(this.value));\n            }\n            else {\n                var stringArrValue = null;\n                if (this.value) {\n                    stringArrValue = this.value.map(function (date) { return _this.formatDateTime(date); });\n                }\n                this.onModelChange(stringArrValue);\n            }\n        }\n    };\n    Calendar.prototype.getFirstDayOfMonthIndex = function (month, year) {\n        var day = new Date();\n        day.setDate(1);\n        day.setMonth(month);\n        day.setFullYear(year);\n        var dayIndex = day.getDay() + this.getSundayIndex();\n        return dayIndex >= 7 ? dayIndex - 7 : dayIndex;\n    };\n    Calendar.prototype.getDaysCountInMonth = function (month, year) {\n        return 32 - this.daylightSavingAdjust(new Date(year, month, 32)).getDate();\n    };\n    Calendar.prototype.getDaysCountInPrevMonth = function (month, year) {\n        var prev = this.getPreviousMonthAndYear(month, year);\n        return this.getDaysCountInMonth(prev.month, prev.year);\n    };\n    Calendar.prototype.getPreviousMonthAndYear = function (month, year) {\n        var m, y;\n        if (month === 0) {\n            m = 11;\n            y = year - 1;\n        }\n        else {\n            m = month - 1;\n            y = year;\n        }\n        return { 'month': m, 'year': y };\n    };\n    Calendar.prototype.getNextMonthAndYear = function (month, year) {\n        var m, y;\n        if (month === 11) {\n            m = 0;\n            y = year + 1;\n        }\n        else {\n            m = month + 1;\n            y = year;\n        }\n        return { 'month': m, 'year': y };\n    };\n    Calendar.prototype.getSundayIndex = function () {\n        return this.locale.firstDayOfWeek > 0 ? 7 - this.locale.firstDayOfWeek : 0;\n    };\n    Calendar.prototype.isSelected = function (dateMeta) {\n        if (this.value) {\n            if (this.isSingleSelection()) {\n                return this.isDateEquals(this.value, dateMeta);\n            }\n            else if (this.isMultipleSelection()) {\n                var selected = false;\n                for (var _i = 0, _a = this.value; _i < _a.length; _i++) {\n                    var date = _a[_i];\n                    selected = this.isDateEquals(date, dateMeta);\n                    if (selected) {\n                        break;\n                    }\n                }\n                return selected;\n            }\n            else if (this.isRangeSelection()) {\n                if (this.value[1])\n                    return this.isDateEquals(this.value[0], dateMeta) || this.isDateEquals(this.value[1], dateMeta) || this.isDateBetween(this.value[0], this.value[1], dateMeta);\n                else\n                    return this.isDateEquals(this.value[0], dateMeta);\n            }\n        }\n        else\n            return false;\n    };\n    Calendar.prototype.isDateEquals = function (value, dateMeta) {\n        if (value)\n            return value.getDate() === dateMeta.day && value.getMonth() === dateMeta.month && value.getFullYear() === dateMeta.year;\n        else\n            return false;\n    };\n    Calendar.prototype.isDateBetween = function (start, end, dateMeta) {\n        var between = false;\n        if (start && end) {\n            var date = new Date(dateMeta.year, dateMeta.month, dateMeta.day);\n            return start.getTime() <= date.getTime() && end.getTime() >= date.getTime();\n        }\n        return between;\n    };\n    Calendar.prototype.isSingleSelection = function () {\n        return this.selectionMode === 'single';\n    };\n    Calendar.prototype.isRangeSelection = function () {\n        return this.selectionMode === 'range';\n    };\n    Calendar.prototype.isMultipleSelection = function () {\n        return this.selectionMode === 'multiple';\n    };\n    Calendar.prototype.isToday = function (today, day, month, year) {\n        return today.getDate() === day && today.getMonth() === month && today.getFullYear() === year;\n    };\n    Calendar.prototype.isSelectable = function (day, month, year) {\n        var validMin = true;\n        var validMax = true;\n        var validDate = true;\n        var validDay = true;\n        if (this.minDate) {\n            if (this.minDate.getFullYear() > year) {\n                validMin = false;\n            }\n            else if (this.minDate.getFullYear() === year) {\n                if (this.minDate.getMonth() > month) {\n                    validMin = false;\n                }\n                else if (this.minDate.getMonth() === month) {\n                    if (this.minDate.getDate() > day) {\n                        validMin = false;\n                    }\n                }\n            }\n        }\n        if (this.maxDate) {\n            if (this.maxDate.getFullYear() < year) {\n                validMax = false;\n            }\n            else if (this.maxDate.getFullYear() === year) {\n                if (this.maxDate.getMonth() < month) {\n                    validMax = false;\n                }\n                else if (this.maxDate.getMonth() === month) {\n                    if (this.maxDate.getDate() < day) {\n                        validMax = false;\n                    }\n                }\n            }\n        }\n        if (this.disabledDates) {\n            validDate = !this.isDateDisabled(day, month, year);\n        }\n        if (this.disabledDays) {\n            validDay = !this.isDayDisabled(day, month, year);\n        }\n        return validMin && validMax && validDate && validDay;\n    };\n    Calendar.prototype.isDateDisabled = function (day, month, year) {\n        if (this.disabledDates) {\n            for (var _i = 0, _a = this.disabledDates; _i < _a.length; _i++) {\n                var disabledDate = _a[_i];\n                if (disabledDate.getFullYear() === year && disabledDate.getMonth() === month && disabledDate.getDate() === day) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    Calendar.prototype.isDayDisabled = function (day, month, year) {\n        if (this.disabledDays) {\n            var weekday = new Date(year, month, day);\n            var weekdayNumber = weekday.getDay();\n            return this.disabledDays.indexOf(weekdayNumber) !== -1;\n        }\n        return false;\n    };\n    Calendar.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        if (this.showOnFocus) {\n            this.showOverlay();\n        }\n        this.onFocus.emit(event);\n    };\n    Calendar.prototype.onInputClick = function (event) {\n        this.datepickerClick = true;\n        if (this.autoZIndex) {\n            this.overlayViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    Calendar.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        this.onBlur.emit(event);\n        if (!this.keepInvalid) {\n            this.updateInputfield();\n        }\n        this.onModelTouched();\n    };\n    Calendar.prototype.onButtonClick = function (event, inputfield) {\n        if (!this.overlayViewChild.nativeElement.offsetParent || this.overlayViewChild.nativeElement.style.display === 'none') {\n            inputfield.focus();\n            this.showOverlay();\n        }\n        else\n            this.overlayVisible = false;\n        this.datepickerClick = true;\n    };\n    Calendar.prototype.onInputKeydown = function (event) {\n        this.isKeydown = true;\n        if (event.keyCode === 9) {\n            this.overlayVisible = false;\n        }\n    };\n    Calendar.prototype.onMonthDropdownChange = function (m) {\n        this.currentMonth = parseInt(m);\n        this.onMonthChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonth(this.currentMonth, this.currentYear);\n    };\n    Calendar.prototype.onYearDropdownChange = function (y) {\n        this.currentYear = parseInt(y);\n        this.onYearChange.emit({ month: this.currentMonth + 1, year: this.currentYear });\n        this.createMonth(this.currentMonth, this.currentYear);\n    };\n    Calendar.prototype.incrementHour = function (event) {\n        var prevHour = this.currentHour;\n        var newHour = this.currentHour + this.stepHour;\n        if (this.validateHour(newHour)) {\n            if (this.hourFormat == '24')\n                this.currentHour = (newHour >= 24) ? (newHour - 24) : newHour;\n            else if (this.hourFormat == '12') {\n                // Before the AM/PM break, now after\n                if (prevHour < 12 && newHour > 11) {\n                    this.pm = !this.pm;\n                }\n                this.currentHour = (newHour >= 13) ? (newHour - 12) : newHour;\n            }\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.decrementHour = function (event) {\n        var newHour = this.currentHour - this.stepHour;\n        if (this.validateHour(newHour)) {\n            if (this.hourFormat == '24')\n                this.currentHour = (newHour < 0) ? (24 + newHour) : newHour;\n            else if (this.hourFormat == '12') {\n                // If we were at noon/midnight, then switch\n                if (this.currentHour === 12) {\n                    this.pm = !this.pm;\n                }\n                this.currentHour = (newHour <= 0) ? (12 + newHour) : newHour;\n            }\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.validateHour = function (hour) {\n        var valid = true;\n        var value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        var valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getHours() > hour) {\n                valid = false;\n            }\n        }\n        if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getHours() < hour) {\n                valid = false;\n            }\n        }\n        return valid;\n    };\n    Calendar.prototype.incrementMinute = function (event) {\n        var newMinute = this.currentMinute + this.stepMinute;\n        if (this.validateMinute(newMinute)) {\n            this.currentMinute = (newMinute > 59) ? newMinute - 60 : newMinute;\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.decrementMinute = function (event) {\n        var newMinute = this.currentMinute - this.stepMinute;\n        if (this.validateMinute(newMinute)) {\n            this.currentMinute = (newMinute < 0) ? 60 + newMinute : newMinute;\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.validateMinute = function (minute) {\n        var valid = true;\n        var value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        var valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getMinutes() > minute) {\n                valid = false;\n            }\n        }\n        if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getMinutes() < minute) {\n                valid = false;\n            }\n        }\n        return valid;\n    };\n    Calendar.prototype.incrementSecond = function (event) {\n        var newSecond = this.currentSecond + this.stepSecond;\n        if (this.validateSecond(newSecond)) {\n            this.currentSecond = (newSecond > 59) ? newSecond - 60 : newSecond;\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.decrementSecond = function (event) {\n        var newSecond = this.currentSecond - this.stepSecond;\n        if (this.validateSecond(newSecond)) {\n            this.currentSecond = (newSecond < 0) ? 60 + newSecond : newSecond;\n            this.updateTime();\n        }\n        event.preventDefault();\n    };\n    Calendar.prototype.validateSecond = function (second) {\n        var valid = true;\n        var value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        var valueDateString = value ? value.toDateString() : null;\n        if (this.minDate && valueDateString && this.minDate.toDateString() === valueDateString) {\n            if (this.minDate.getSeconds() > second) {\n                valid = false;\n            }\n        }\n        if (this.maxDate && valueDateString && this.maxDate.toDateString() === valueDateString) {\n            if (this.maxDate.getSeconds() < second) {\n                valid = false;\n            }\n        }\n        return valid;\n    };\n    Calendar.prototype.updateTime = function () {\n        var value = this.value;\n        if (this.isRangeSelection()) {\n            value = this.value[1] || this.value[0];\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value[this.value.length - 1];\n        }\n        value = value ? new Date(value.getTime()) : new Date();\n        if (this.utc) {\n            if (this.hourFormat == '12') {\n                if (this.currentHour === 12)\n                    value.setUTCHours(this.pm ? 12 : 0);\n                else\n                    value.setUTCHours(this.pm ? this.currentHour + 12 : this.currentHour);\n            }\n            else {\n                value.setUTCHours(this.currentHour);\n            }\n        }\n        else {\n            if (this.hourFormat == '12') {\n                if (this.currentHour === 12)\n                    value.setHours(this.pm ? 12 : 0);\n                else\n                    value.setHours(this.pm ? this.currentHour + 12 : this.currentHour);\n            }\n            else {\n                value.setHours(this.currentHour);\n            }\n        }\n        value.setMinutes(this.currentMinute);\n        value.setSeconds(this.currentSecond);\n        if (this.isRangeSelection()) {\n            if (this.value[1]) {\n                value = [this.value[0], value];\n            }\n            else {\n                value = [value, null];\n            }\n        }\n        if (this.isMultipleSelection()) {\n            value = this.value.slice(0, -1).concat([value]);\n        }\n        this.updateModel(value);\n        this.onSelect.emit(value);\n        this.updateInputfield();\n    };\n    Calendar.prototype.toggleAMPM = function (event) {\n        this.pm = !this.pm;\n        this.updateTime();\n        event.preventDefault();\n    };\n    Calendar.prototype.onUserInput = function (event) {\n        // IE 11 Workaround for input placeholder : https://github.com/primefaces/primeng/issues/2026\n        if (!this.isKeydown) {\n            return;\n        }\n        this.isKeydown = false;\n        var val = event.target.value;\n        try {\n            var value = this.parseValueFromString(val);\n            this.updateModel(value);\n            this.updateUI();\n        }\n        catch (err) {\n            //invalid date\n            this.updateModel(null);\n        }\n        this.filled = val != null && val.length;\n        this.onInput.emit(event);\n    };\n    Calendar.prototype.parseValueFromString = function (text) {\n        if (!text || text.trim().length === 0) {\n            return null;\n        }\n        var value;\n        if (this.isSingleSelection()) {\n            value = this.parseDateTime(text);\n        }\n        else if (this.isMultipleSelection()) {\n            var tokens = text.split(',');\n            value = [];\n            for (var _i = 0, tokens_1 = tokens; _i < tokens_1.length; _i++) {\n                var token = tokens_1[_i];\n                value.push(this.parseDateTime(token.trim()));\n            }\n        }\n        else if (this.isRangeSelection()) {\n            var tokens = text.split(' - ');\n            value = [];\n            for (var i = 0; i < tokens.length; i++) {\n                value[i] = this.parseDateTime(tokens[i].trim());\n            }\n        }\n        return value;\n    };\n    Calendar.prototype.parseDateTime = function (text) {\n        var date;\n        var parts = text.split(' ');\n        if (this.timeOnly) {\n            date = new Date();\n            this.populateTime(date, parts[0], parts[1]);\n        }\n        else {\n            if (this.showTime) {\n                date = this.parseDate(parts[0], this.dateFormat);\n                this.populateTime(date, parts[1], parts[2]);\n            }\n            else {\n                date = this.parseDate(text, this.dateFormat);\n            }\n        }\n        return date;\n    };\n    Calendar.prototype.populateTime = function (value, timeString, ampm) {\n        if (this.hourFormat == '12' && !ampm) {\n            throw 'Invalid Time';\n        }\n        this.pm = (ampm === 'PM' || ampm === 'pm');\n        var time = this.parseTime(timeString);\n        if (!this.utc)\n            value.setHours(time.hour);\n        else\n            value.setUTCHours(time.hour);\n        value.setMinutes(time.minute);\n        value.setSeconds(time.second);\n    };\n    Calendar.prototype.updateUI = function () {\n        var val = this.value || this.defaultDate || new Date();\n        if (Array.isArray(val)) {\n            val = val[0];\n        }\n        this.createMonth(val.getMonth(), val.getFullYear());\n        if (this.showTime || this.timeOnly) {\n            var hours = (this.utc) ? val.getUTCHours() : val.getHours();\n            if (this.hourFormat == '12') {\n                this.pm = hours > 11;\n                if (hours >= 12) {\n                    this.currentHour = (hours == 12) ? 12 : hours - 12;\n                }\n                else {\n                    this.currentHour = (hours == 0) ? 12 : hours;\n                }\n            }\n            else {\n                this.currentHour = (this.utc) ? val.getUTCHours() : val.getHours();\n            }\n            this.currentMinute = val.getMinutes();\n            this.currentSecond = val.getSeconds();\n        }\n    };\n    Calendar.prototype.onDatePickerClick = function (event) {\n        this.datepickerClick = true;\n    };\n    Calendar.prototype.showOverlay = function () {\n        this.overlayVisible = true;\n        this.overlayShown = true;\n        if (this.autoZIndex) {\n            this.overlayViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n        this.bindDocumentClickListener();\n    };\n    Calendar.prototype.alignOverlay = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.overlayViewChild.nativeElement, this.inputfieldViewChild.nativeElement);\n        else\n            this.domHandler.relativePosition(this.overlayViewChild.nativeElement, this.inputfieldViewChild.nativeElement);\n    };\n    Calendar.prototype.writeValue = function (value) {\n        this.value = value;\n        if (this.value && typeof this.value === 'string') {\n            this.value = this.parseValueFromString(this.value);\n        }\n        this.updateInputfield();\n        this.updateUI();\n    };\n    Calendar.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Calendar.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Calendar.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    // Ported from jquery-ui datepicker formatDate\n    Calendar.prototype.formatDate = function (date, format) {\n        if (!date) {\n            return '';\n        }\n        var iFormat;\n        var lookAhead = function (match) {\n            var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        }, formatNumber = function (match, value, len) {\n            var num = '' + value;\n            if (lookAhead(match)) {\n                while (num.length < len) {\n                    num = '0' + num;\n                }\n            }\n            return num;\n        }, formatName = function (match, value, shortNames, longNames) {\n            return (lookAhead(match) ? longNames[value] : shortNames[value]);\n        };\n        var output = '';\n        var literal = false;\n        if (date) {\n            for (iFormat = 0; iFormat < format.length; iFormat++) {\n                if (literal) {\n                    if (format.charAt(iFormat) === '\\'' && !lookAhead('\\'')) {\n                        literal = false;\n                    }\n                    else {\n                        output += format.charAt(iFormat);\n                    }\n                }\n                else {\n                    switch (format.charAt(iFormat)) {\n                        case 'd':\n                            output += formatNumber('d', this.utc ? date.getUTCDate() : date.getDate(), 2);\n                            break;\n                        case 'D':\n                            output += formatName('D', this.utc ? date.getUTCDay() : date.getDay(), this.locale.dayNamesShort, this.locale.dayNames);\n                            break;\n                        case 'o':\n                            if (this.utc) {\n                                output += formatNumber('o', Math.round((new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()).getTime() -\n                                    new Date(date.getUTCFullYear(), 0, 0).getTime()) / 86400000), 3);\n                            }\n                            else {\n                                output += formatNumber('o', Math.round((new Date(date.getFullYear(), date.getMonth(), date.getDate()).getTime() -\n                                    new Date(date.getFullYear(), 0, 0).getTime()) / 86400000), 3);\n                            }\n                            break;\n                        case 'm':\n                            output += formatNumber('m', (this.utc ? date.getUTCMonth() : date.getMonth()) + 1, 2);\n                            break;\n                        case 'M':\n                            output += formatName('M', this.utc ? date.getUTCMonth() : date.getMonth(), this.locale.monthNamesShort, this.locale.monthNames);\n                            break;\n                        case 'y':\n                            output += (lookAhead('y') ? (this.utc ? date.getUTCFullYear() : date.getFullYear()) :\n                                ((this.utc ? date.getUTCFullYear() : date.getFullYear()) % 100 < 10 ? '0' : '') +\n                                    (this.utc ? date.getUTCFullYear() : date.getFullYear()) % 100);\n                            break;\n                        case '@':\n                            output += date.getTime();\n                            break;\n                        case '!':\n                            output += date.getTime() * 10000 + this.ticksTo1970;\n                            break;\n                        case '\\'':\n                            if (lookAhead('\\'')) {\n                                output += '\\'';\n                            }\n                            else {\n                                literal = true;\n                            }\n                            break;\n                        default:\n                            output += format.charAt(iFormat);\n                    }\n                }\n            }\n        }\n        return output;\n    };\n    Calendar.prototype.formatTime = function (date) {\n        if (!date) {\n            return '';\n        }\n        var output = '';\n        var hours = (this.utc) ? date.getUTCHours() : date.getHours();\n        var minutes = date.getMinutes();\n        var seconds = date.getSeconds();\n        if (this.hourFormat == '12' && hours > 11 && hours != 12) {\n            hours -= 12;\n        }\n        if (this.hourFormat == '12') {\n            output += hours === 0 ? 12 : (hours < 10) ? '0' + hours : hours;\n        }\n        else {\n            output += (hours < 10) ? '0' + hours : hours;\n        }\n        output += ':';\n        output += (minutes < 10) ? '0' + minutes : minutes;\n        if (this.showSeconds) {\n            output += ':';\n            output += (seconds < 10) ? '0' + seconds : seconds;\n        }\n        if (this.hourFormat == '12') {\n            output += date.getHours() > 11 ? ' PM' : ' AM';\n        }\n        return output;\n    };\n    Calendar.prototype.parseTime = function (value) {\n        var tokens = value.split(':');\n        var validTokenLength = this.showSeconds ? 3 : 2;\n        if (tokens.length !== validTokenLength) {\n            throw \"Invalid time\";\n        }\n        var h = parseInt(tokens[0]);\n        var m = parseInt(tokens[1]);\n        var s = this.showSeconds ? parseInt(tokens[2]) : null;\n        if (isNaN(h) || isNaN(m) || h > 23 || m > 59 || (this.hourFormat == '12' && h > 12) || (this.showSeconds && (isNaN(s) || s > 59))) {\n            throw \"Invalid time\";\n        }\n        else {\n            if (this.hourFormat == '12' && h !== 12 && this.pm) {\n                h += 12;\n            }\n            return { hour: h, minute: m, second: s };\n        }\n    };\n    // Ported from jquery-ui datepicker parseDate\n    Calendar.prototype.parseDate = function (value, format) {\n        if (format == null || value == null) {\n            throw \"Invalid arguments\";\n        }\n        value = (typeof value === \"object\" ? value.toString() : value + \"\");\n        if (value === \"\") {\n            return null;\n        }\n        var iFormat, dim, extra, iValue = 0, shortYearCutoff = (typeof this.shortYearCutoff !== \"string\" ? this.shortYearCutoff : new Date().getFullYear() % 100 + parseInt(this.shortYearCutoff, 10)), year = -1, month = -1, day = -1, doy = -1, literal = false, date, lookAhead = function (match) {\n            var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) === match);\n            if (matches) {\n                iFormat++;\n            }\n            return matches;\n        }, getNumber = function (match) {\n            var isDoubled = lookAhead(match), size = (match === \"@\" ? 14 : (match === \"!\" ? 20 :\n                (match === \"y\" && isDoubled ? 4 : (match === \"o\" ? 3 : 2)))), minSize = (match === \"y\" ? size : 1), digits = new RegExp(\"^\\\\d{\" + minSize + \",\" + size + \"}\"), num = value.substring(iValue).match(digits);\n            if (!num) {\n                throw \"Missing number at position \" + iValue;\n            }\n            iValue += num[0].length;\n            return parseInt(num[0], 10);\n        }, getName = function (match, shortNames, longNames) {\n            var index = -1;\n            var arr = lookAhead(match) ? longNames : shortNames;\n            var names = [];\n            for (var i = 0; i < arr.length; i++) {\n                names.push([i, arr[i]]);\n            }\n            names.sort(function (a, b) {\n                return -(a[1].length - b[1].length);\n            });\n            for (var i = 0; i < names.length; i++) {\n                var name_1 = names[i][1];\n                if (value.substr(iValue, name_1.length).toLowerCase() === name_1.toLowerCase()) {\n                    index = names[i][0];\n                    iValue += name_1.length;\n                    break;\n                }\n            }\n            if (index !== -1) {\n                return index + 1;\n            }\n            else {\n                throw \"Unknown name at position \" + iValue;\n            }\n        }, checkLiteral = function () {\n            if (value.charAt(iValue) !== format.charAt(iFormat)) {\n                throw \"Unexpected literal at position \" + iValue;\n            }\n            iValue++;\n        };\n        for (iFormat = 0; iFormat < format.length; iFormat++) {\n            if (literal) {\n                if (format.charAt(iFormat) === \"'\" && !lookAhead(\"'\")) {\n                    literal = false;\n                }\n                else {\n                    checkLiteral();\n                }\n            }\n            else {\n                switch (format.charAt(iFormat)) {\n                    case \"d\":\n                        day = getNumber(\"d\");\n                        break;\n                    case \"D\":\n                        getName(\"D\", this.locale.dayNamesShort, this.locale.dayNames);\n                        break;\n                    case \"o\":\n                        doy = getNumber(\"o\");\n                        break;\n                    case \"m\":\n                        month = getNumber(\"m\");\n                        break;\n                    case \"M\":\n                        month = getName(\"M\", this.locale.monthNamesShort, this.locale.monthNames);\n                        break;\n                    case \"y\":\n                        year = getNumber(\"y\");\n                        break;\n                    case \"@\":\n                        date = new Date(getNumber(\"@\"));\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"!\":\n                        date = new Date((getNumber(\"!\") - this.ticksTo1970) / 10000);\n                        year = date.getFullYear();\n                        month = date.getMonth() + 1;\n                        day = date.getDate();\n                        break;\n                    case \"'\":\n                        if (lookAhead(\"'\")) {\n                            checkLiteral();\n                        }\n                        else {\n                            literal = true;\n                        }\n                        break;\n                    default:\n                        checkLiteral();\n                }\n            }\n        }\n        if (iValue < value.length) {\n            extra = value.substr(iValue);\n            if (!/^\\s+/.test(extra)) {\n                throw \"Extra/unparsed characters found in date: \" + extra;\n            }\n        }\n        if (year === -1) {\n            year = new Date().getFullYear();\n        }\n        else if (year < 100) {\n            year += new Date().getFullYear() - new Date().getFullYear() % 100 +\n                (year <= shortYearCutoff ? 0 : -100);\n        }\n        if (doy > -1) {\n            month = 1;\n            day = doy;\n            do {\n                dim = this.getDaysCountInMonth(year, month - 1);\n                if (day <= dim) {\n                    break;\n                }\n                month++;\n                day -= dim;\n            } while (true);\n        }\n        if (this.utc) {\n            date = new Date(Date.UTC(year, month - 1, day));\n            if (date.getUTCFullYear() !== year || date.getUTCMonth() + 1 !== month || date.getUTCDate() !== day) {\n                throw \"Invalid date\"; // E.g. 31/02/00\n            }\n        }\n        else {\n            date = this.daylightSavingAdjust(new Date(year, month - 1, day));\n            if (date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day) {\n                throw \"Invalid date\"; // E.g. 31/02/00\n            }\n        }\n        return date;\n    };\n    Calendar.prototype.daylightSavingAdjust = function (date) {\n        if (!date) {\n            return null;\n        }\n        if (!this.utc) {\n            date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);\n        }\n        return date;\n    };\n    Calendar.prototype.updateFilledState = function () {\n        this.filled = this.inputFieldValue && this.inputFieldValue != '';\n    };\n    Calendar.prototype.onTodayButtonClick = function (event) {\n        var date = new Date();\n        var dateMeta = { day: date.getDate(), month: date.getMonth(), year: date.getFullYear(), today: true, selectable: true };\n        this.createMonth(dateMeta.month, dateMeta.year);\n        this.onDateSelect(event, dateMeta);\n        this.onTodayClick.emit(event);\n    };\n    Calendar.prototype.onClearButtonClick = function (event) {\n        this.updateModel(null);\n        this.updateInputfield();\n        this.overlayVisible = false;\n        this.onClearClick.emit(event);\n    };\n    Calendar.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n                if (!_this.datepickerClick && _this.overlayVisible) {\n                    _this.overlayVisible = false;\n                    _this.onClose.emit(event);\n                }\n                _this.datepickerClick = false;\n                _this.cd.detectChanges();\n            });\n        }\n    };\n    Calendar.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    Calendar.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (!this.inline && this.appendTo) {\n            this.el.nativeElement.appendChild(this.overlayViewChild.nativeElement);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Date)\n    ], Calendar.prototype, \"defaultDate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"inputStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"inputStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Calendar.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"dateFormat\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"inline\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showOtherMonths\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"selectOtherMonths\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"icon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Calendar.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"readonlyInput\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Calendar.prototype, \"shortYearCutoff\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"monthNavigator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"yearNavigator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"yearRange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"hourFormat\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"timeOnly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"stepHour\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"stepMinute\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"stepSecond\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showSeconds\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"required\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showOnFocus\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"dataType\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"utc\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"maxDateCount\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"showButtonBar\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"todayButtonStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"clearButtonStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Calendar.prototype, \"panelStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"keepInvalid\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Calendar.prototype, \"hideOnDateTimeSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onClose\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onInput\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onTodayClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onClearClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onMonthChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Calendar.prototype, \"onYearChange\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Calendar.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Calendar.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.ViewChild('datepicker'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Calendar.prototype, \"overlayViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('inputfield'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Calendar.prototype, \"inputfieldViewChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Date),\n        __metadata(\"design:paramtypes\", [Date])\n    ], Calendar.prototype, \"minDate\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Date),\n        __metadata(\"design:paramtypes\", [Date])\n    ], Calendar.prototype, \"maxDate\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Calendar.prototype, \"disabledDates\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Calendar.prototype, \"disabledDays\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Calendar.prototype, \"showTime\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], Calendar.prototype, \"locale\", null);\n    Calendar = __decorate([\n        core_1.Component({\n            selector: 'p-calendar',\n            template: \"\\n        <span [ngClass]=\\\"{'ui-calendar':true,'ui-calendar-w-btn':showIcon}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ng-template [ngIf]=\\\"!inline\\\">\\n                <input #inputfield type=\\\"text\\\" [attr.id]=\\\"inputId\\\" [attr.name]=\\\"name\\\" [attr.required]=\\\"required\\\" [value]=\\\"inputFieldValue\\\" (focus)=\\\"onInputFocus($event)\\\" (keydown)=\\\"onInputKeydown($event)\\\" (click)=\\\"onInputClick($event)\\\" (blur)=\\\"onInputBlur($event)\\\"\\n                    [readonly]=\\\"readonlyInput\\\" (input)=\\\"onUserInput($event)\\\" [ngStyle]=\\\"inputStyle\\\" [class]=\\\"inputStyleClass\\\" [placeholder]=\\\"placeholder||''\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\"\\n                    [ngClass]=\\\"'ui-inputtext ui-widget ui-state-default ui-corner-all'\\\" autocomplete=\\\"off\\\"\\n                    ><button type=\\\"button\\\" [icon]=\\\"icon\\\" pButton *ngIf=\\\"showIcon\\\" (click)=\\\"onButtonClick($event,inputfield)\\\" class=\\\"ui-datepicker-trigger ui-calendar-button\\\"\\n                    [ngClass]=\\\"{'ui-state-disabled':disabled}\\\" [disabled]=\\\"disabled\\\" tabindex=\\\"-1\\\"></button>\\n            </ng-template>\\n            <div #datepicker [class]=\\\"panelStyleClass\\\" [ngClass]=\\\"{'ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all': true, 'ui-datepicker-inline':inline,'ui-shadow':!inline,'ui-state-disabled':disabled,'ui-datepicker-timeonly':timeOnly}\\\"\\n                [ngStyle]=\\\"{'display': inline ? 'inline-block' : (overlayVisible ? 'block' : 'none')}\\\" (click)=\\\"onDatePickerClick($event)\\\" [@overlayState]=\\\"inline ? 'visible' : (overlayVisible ? 'visible' : 'hidden')\\\">\\n\\n                <div class=\\\"ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all\\\" *ngIf=\\\"!timeOnly && (overlayVisible || inline)\\\">\\n                    <ng-content select=\\\"p-header\\\"></ng-content>\\n                    <a class=\\\"ui-datepicker-prev ui-corner-all\\\" href=\\\"#\\\" (click)=\\\"prevMonth($event)\\\">\\n                        <span class=\\\"fa fa-angle-left\\\"></span>\\n                    </a>\\n                    <a class=\\\"ui-datepicker-next ui-corner-all\\\" href=\\\"#\\\" (click)=\\\"nextMonth($event)\\\">\\n                        <span class=\\\"fa fa-angle-right\\\"></span>\\n                    </a>\\n                    <div class=\\\"ui-datepicker-title\\\">\\n                        <span class=\\\"ui-datepicker-month\\\" *ngIf=\\\"!monthNavigator\\\">{{locale.monthNames[currentMonth]}}</span>\\n                        <select class=\\\"ui-datepicker-month\\\" *ngIf=\\\"monthNavigator\\\" (change)=\\\"onMonthDropdownChange($event.target.value)\\\">\\n                            <option [value]=\\\"i\\\" *ngFor=\\\"let month of locale.monthNames;let i = index\\\" [selected]=\\\"i == currentMonth\\\">{{month}}</option>\\n                        </select>\\n                        <select class=\\\"ui-datepicker-year\\\" *ngIf=\\\"yearNavigator\\\" (change)=\\\"onYearDropdownChange($event.target.value)\\\">\\n                            <option [value]=\\\"year\\\" *ngFor=\\\"let year of yearOptions\\\" [selected]=\\\"year == currentYear\\\">{{year}}</option>\\n                        </select>\\n                        <span class=\\\"ui-datepicker-year\\\" *ngIf=\\\"!yearNavigator\\\">{{currentYear}}</span>\\n                    </div>\\n                </div>\\n                <table class=\\\"ui-datepicker-calendar\\\" *ngIf=\\\"!timeOnly && (overlayVisible || inline)\\\">\\n                    <thead>\\n                        <tr>\\n                            <th scope=\\\"col\\\" *ngFor=\\\"let weekDay of weekDays;let begin = first; let end = last\\\">\\n                                <span>{{weekDay}}</span>\\n                            </th>\\n                        </tr>\\n                    </thead>\\n                    <tbody>\\n                        <tr *ngFor=\\\"let week of dates\\\">\\n                            <td *ngFor=\\\"let date of week\\\" [ngClass]=\\\"{'ui-datepicker-other-month ui-state-disabled':date.otherMonth,\\n                                'ui-datepicker-current-day':isSelected(date),'ui-datepicker-today':date.today}\\\">\\n                                <a class=\\\"ui-state-default\\\" href=\\\"#\\\" *ngIf=\\\"date.otherMonth ? showOtherMonths : true\\\"\\n                                    [ngClass]=\\\"{'ui-state-active':isSelected(date), 'ui-state-highlight':date.today, 'ui-state-disabled':!date.selectable}\\\"\\n                                    (click)=\\\"onDateSelect($event,date)\\\" draggable=\\\"false\\\">\\n                                    <ng-container *ngIf=\\\"!dateTemplate\\\">{{date.day}}</ng-container>\\n                                    <ng-container *ngTemplateOutlet=\\\"dateTemplate; context: {$implicit: date}\\\"></ng-container>\\n                                </a>\\n                            </td>\\n                        </tr>\\n                    </tbody>\\n                </table>\\n                <div class=\\\"ui-timepicker ui-widget-header ui-corner-all\\\" *ngIf=\\\"showTime||timeOnly\\\">\\n                    <div class=\\\"ui-hour-picker\\\">\\n                        <a href=\\\"#\\\" (click)=\\\"incrementHour($event)\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span [ngStyle]=\\\"{'display': currentHour < 10 ? 'inline': 'none'}\\\">0</span><span>{{currentHour}}</span>\\n                        <a href=\\\"#\\\" (click)=\\\"decrementHour($event)\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-separator\\\">\\n                        <a href=\\\"#\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span>:</span>\\n                        <a href=\\\"#\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-minute-picker\\\">\\n                        <a href=\\\"#\\\" (click)=\\\"incrementMinute($event)\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span [ngStyle]=\\\"{'display': currentMinute < 10 ? 'inline': 'none'}\\\">0</span><span>{{currentMinute}}</span>\\n                        <a href=\\\"#\\\" (click)=\\\"decrementMinute($event)\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-separator\\\" *ngIf=\\\"showSeconds\\\">\\n                        <a href=\\\"#\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span>:</span>\\n                        <a href=\\\"#\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-second-picker\\\" *ngIf=\\\"showSeconds\\\">\\n                        <a href=\\\"#\\\" (click)=\\\"incrementSecond($event)\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span [ngStyle]=\\\"{'display': currentSecond < 10 ? 'inline': 'none'}\\\">0</span><span>{{currentSecond}}</span>\\n                        <a href=\\\"#\\\" (click)=\\\"decrementSecond($event)\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                    <div class=\\\"ui-ampm-picker\\\" *ngIf=\\\"hourFormat=='12'\\\">\\n                        <a href=\\\"#\\\" (click)=\\\"toggleAMPM($event)\\\">\\n                            <span class=\\\"fa fa-angle-up\\\"></span>\\n                        </a>\\n                        <span>{{pm ? 'PM' : 'AM'}}</span>\\n                        <a href=\\\"#\\\" (click)=\\\"toggleAMPM($event)\\\">\\n                            <span class=\\\"fa fa-angle-down\\\"></span>\\n                        </a>\\n                    </div>\\n                </div>\\n                <div class=\\\"ui-datepicker-buttonbar ui-widget-header\\\" *ngIf=\\\"showButtonBar\\\">\\n                    <div class=\\\"ui-g\\\">\\n                        <div class=\\\"ui-g-6\\\">\\n                            <button type=\\\"button\\\" [label]=\\\"_locale.today\\\" (click)=\\\"onTodayButtonClick($event)\\\" pButton [ngClass]=\\\"[todayButtonStyleClass]\\\"></button>\\n                        </div>\\n                        <div class=\\\"ui-g-6\\\">\\n                            <button type=\\\"button\\\" [label]=\\\"_locale.clear\\\" (click)=\\\"onClearButtonClick($event)\\\" pButton [ngClass]=\\\"[clearButtonStyleClass]\\\"></button>\\n                        </div>\\n                    </div>\\n                </div>\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n        </span>\\n    \",\n            animations: [\n                animations_1.trigger('overlayState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [domhandler_1.DomHandler, exports.CALENDAR_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], Calendar);\n    return Calendar;\n}());\nexports.Calendar = Calendar;\nvar CalendarModule = /** @class */ (function () {\n    function CalendarModule() {\n    }\n    CalendarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule, shared_1.SharedModule],\n            exports: [Calendar, button_1.ButtonModule, shared_1.SharedModule],\n            declarations: [Calendar]\n        })\n    ], CalendarModule);\n    return CalendarModule;\n}());\nexports.CalendarModule = CalendarModule;\n//# sourceMappingURL=calendar.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/calendar/calendar.js\n// module id = 728\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar Card = /** @class */ (function () {\n    function Card(el) {\n        this.el = el;\n    }\n    Card.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Card.prototype, \"title\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Card.prototype, \"subtitle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Card.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Card.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], Card.prototype, \"headerFacet\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], Card.prototype, \"footerFacet\", void 0);\n    Card = __decorate([\n        core_1.Component({\n            selector: 'p-card',\n            template: \"\\n        <div [ngClass]=\\\"'ui-card ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-card-header\\\" *ngIf=\\\"headerFacet\\\">\\n               <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-card-body\\\">\\n                <div class=\\\"ui-card-title\\\" *ngIf=\\\"title\\\">{{title}}</div>\\n                <div class=\\\"ui-card-subtitle\\\" *ngIf=\\\"subtitle\\\">{{subtitle}}</div>\\n                <div class=\\\"ui-card-content\\\">\\n                    <ng-content></ng-content>\\n                </div>\\n                <div class=\\\"ui-card-footer\\\" *ngIf=\\\"footerFacet\\\">\\n                    <ng-content select=\\\"p-footer\\\"></ng-content>\\n                </div>\\n            </div>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], Card);\n    return Card;\n}());\nexports.Card = Card;\nvar CardModule = /** @class */ (function () {\n    function CardModule() {\n    }\n    CardModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Card, shared_1.SharedModule],\n            declarations: [Card]\n        })\n    ], CardModule);\n    return CardModule;\n}());\nexports.CardModule = CardModule;\n//# sourceMappingURL=card.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/card/card.js\n// module id = 729\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar shared_1 = require(\"../common/shared\");\nvar common_1 = require(\"@angular/common\");\nvar Carousel = /** @class */ (function () {\n    function Carousel(el, domHandler, renderer, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.numVisible = 3;\n        this.firstVisible = 0;\n        this.circular = false;\n        this.breakpoint = 560;\n        this.responsive = true;\n        this.autoplayInterval = 0;\n        this.effectDuration = '1s';\n        this.easing = 'ease-out';\n        this.pageLinks = 3;\n        this.onPage = new core_1.EventEmitter();\n        this.left = 0;\n    }\n    Carousel.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Object.defineProperty(Carousel.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            this.handleDataChange();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Carousel.prototype.handleDataChange = function () {\n        if (this.value && this.value.length) {\n            if (this.value.length && this.firstVisible >= this.value.length) {\n                this.setPage(this.totalPages - 1);\n            }\n        }\n        else {\n            this.setPage(0);\n        }\n        this.valuesChanged = true;\n    };\n    Carousel.prototype.ngAfterViewChecked = function () {\n        if (this.valuesChanged && this.containerViewChild.nativeElement.offsetParent) {\n            this.render();\n            this.valuesChanged = false;\n        }\n    };\n    Carousel.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.responsive) {\n            this.documentResponsiveListener = this.renderer.listen('window', 'resize', function (event) {\n                _this.updateState();\n            });\n        }\n    };\n    Carousel.prototype.updateLinks = function () {\n        this.anchorPageLinks = [];\n        for (var i = 0; i < this.totalPages; i++) {\n            this.anchorPageLinks.push(i);\n        }\n    };\n    Carousel.prototype.updateDropdown = function () {\n        this.selectDropdownOptions = [];\n        for (var i = 0; i < this.totalPages; i++) {\n            this.selectDropdownOptions.push(i);\n        }\n    };\n    Carousel.prototype.updateMobileDropdown = function () {\n        this.mobileDropdownOptions = [];\n        if (this.value && this.value.length) {\n            for (var i = 0; i < this.value.length; i++) {\n                this.mobileDropdownOptions.push(i);\n            }\n        }\n    };\n    Carousel.prototype.render = function () {\n        if (this.autoplayInterval) {\n            this.stopAutoplay();\n        }\n        this.items = this.domHandler.find(this.itemsViewChild.nativeElement, 'li');\n        this.calculateColumns();\n        this.calculateItemWidths();\n        if (!this.responsive) {\n            this.containerViewChild.nativeElement.style.width = (this.domHandler.width(this.containerViewChild.nativeElement)) + 'px';\n        }\n        if (this.autoplayInterval) {\n            this.circular = true;\n            this.startAutoplay();\n        }\n        this.updateMobileDropdown();\n        this.updateLinks();\n        this.updateDropdown();\n        this.cd.detectChanges();\n    };\n    Carousel.prototype.calculateItemWidths = function () {\n        var firstItem = (this.items && this.items.length) ? this.items[0] : null;\n        if (firstItem) {\n            for (var i = 0; i < this.items.length; i++) {\n                this.items[i].style.width = ((this.domHandler.innerWidth(this.viewportViewChild.nativeElement) - (this.domHandler.getHorizontalMargin(firstItem) * this.columns)) / this.columns) + 'px';\n            }\n        }\n    };\n    Carousel.prototype.calculateColumns = function () {\n        if (window.innerWidth <= this.breakpoint) {\n            this.shrinked = true;\n            this.columns = 1;\n        }\n        else {\n            this.shrinked = false;\n            this.columns = this.numVisible;\n        }\n        this.page = Math.floor(this.firstVisible / this.columns);\n    };\n    Carousel.prototype.onNextNav = function () {\n        var lastPage = (this.page === (this.totalPages - 1));\n        if (!lastPage)\n            this.setPage(this.page + 1);\n        else if (this.circular)\n            this.setPage(0);\n    };\n    Carousel.prototype.onPrevNav = function () {\n        if (this.page !== 0)\n            this.setPage(this.page - 1);\n        else if (this.circular)\n            this.setPage(this.totalPages - 1);\n    };\n    Carousel.prototype.setPageWithLink = function (event, p) {\n        this.setPage(p);\n        event.preventDefault();\n    };\n    Carousel.prototype.setPage = function (p, enforce) {\n        if (p !== this.page || enforce) {\n            this.page = p;\n            this.left = (-1 * (this.domHandler.innerWidth(this.viewportViewChild.nativeElement) * this.page));\n            this.firstVisible = this.page * this.columns;\n            this.onPage.emit({\n                page: this.page\n            });\n        }\n    };\n    Carousel.prototype.onDropdownChange = function (val) {\n        this.setPage(parseInt(val));\n    };\n    Object.defineProperty(Carousel.prototype, \"displayPageLinks\", {\n        get: function () {\n            return (this.totalPages <= this.pageLinks && !this.shrinked);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Carousel.prototype, \"displayPageDropdown\", {\n        get: function () {\n            return (this.totalPages > this.pageLinks && !this.shrinked);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Carousel.prototype, \"totalPages\", {\n        get: function () {\n            return (this.value && this.value.length) ? Math.ceil(this.value.length / this.columns) : 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Carousel.prototype.routerDisplay = function () {\n        var win = window;\n        if (win.innerWidth <= this.breakpoint)\n            return true;\n        else\n            return false;\n    };\n    Carousel.prototype.updateState = function () {\n        var win = window;\n        if (win.innerWidth <= this.breakpoint) {\n            this.shrinked = true;\n            this.columns = 1;\n        }\n        else if (this.shrinked) {\n            this.shrinked = false;\n            this.columns = this.numVisible;\n            this.updateLinks();\n            this.updateDropdown();\n        }\n        this.calculateItemWidths();\n        this.setPage(Math.floor(this.firstVisible / this.columns), true);\n    };\n    Carousel.prototype.startAutoplay = function () {\n        var _this = this;\n        this.interval = setInterval(function () {\n            if (_this.page === (_this.totalPages - 1))\n                _this.setPage(0);\n            else\n                _this.setPage(_this.page + 1);\n        }, this.autoplayInterval);\n    };\n    Carousel.prototype.stopAutoplay = function () {\n        clearInterval(this.interval);\n    };\n    Carousel.prototype.ngOnDestroy = function () {\n        if (this.documentResponsiveListener) {\n            this.documentResponsiveListener();\n        }\n        if (this.autoplayInterval) {\n            this.stopAutoplay();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"numVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"firstVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Carousel.prototype, \"headerText\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Carousel.prototype, \"circular\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"breakpoint\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Carousel.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"autoplayInterval\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Carousel.prototype, \"effectDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Carousel.prototype, \"easing\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Carousel.prototype, \"pageLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Carousel.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Carousel.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Carousel.prototype, \"onPage\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Carousel.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Carousel.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('viewport'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Carousel.prototype, \"viewportViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('items'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Carousel.prototype, \"itemsViewChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Carousel.prototype, \"value\", null);\n    Carousel = __decorate([\n        core_1.Component({\n            selector: 'p-carousel',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-carousel ui-widget ui-widget-content ui-corner-all':true}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-carousel-header ui-widget-header ui-corner-all\\\">\\n                <span class=\\\"ui-carousel-header-title\\\">{{headerText}}</span>\\n                <span class=\\\"ui-carousel-button ui-carousel-next-button fa fa-arrow-circle-right\\\" (click)=\\\"onNextNav()\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':(page === (totalPages-1)) && !circular}\\\" *ngIf=\\\"value&&value.length\\\"></span>\\n                <span class=\\\"ui-carousel-button ui-carousel-prev-button fa fa-arrow-circle-left\\\" (click)=\\\"onPrevNav()\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':(page === 0 && !circular)}\\\" *ngIf=\\\"value&&value.length\\\"></span>\\n                <div *ngIf=\\\"displayPageLinks\\\" class=\\\"ui-carousel-page-links\\\">\\n                    <a href=\\\"#\\\" (click)=\\\"setPageWithLink($event,i)\\\" class=\\\"ui-carousel-page-link fa fa-circle-o\\\" *ngFor=\\\"let links of anchorPageLinks;let i=index\\\" [ngClass]=\\\"{'fa-dot-circle-o':page===i}\\\"></a>\\n                </div>\\n                <select *ngIf=\\\"displayPageDropdown\\\" class=\\\"ui-carousel-dropdown ui-widget ui-state-default ui-corner-left\\\" [value]=\\\"page\\\" (change)=\\\"onDropdownChange($event.target.value)\\\">\\n                    <option *ngFor=\\\"let option of selectDropdownOptions\\\" [value]=\\\"option\\\" [selected]=\\\"value == option\\\">{{option+1}}</option>\\n                </select>\\n                <select *ngIf=\\\"responsive&&value&&value.length\\\" class=\\\"ui-carousel-mobiledropdown ui-widget ui-state-default ui-corner-left\\\" [value]=\\\"page\\\" (change)=\\\"onDropdownChange($event.target.value)\\\"\\n                    [style.display]=\\\"shrinked ? 'block' : 'none'\\\">\\n                    <option *ngFor=\\\"let option of mobileDropdownOptions\\\" [value]=\\\"option\\\" [selected]=\\\"value == option\\\">{{option+1}}</option>\\n                </select>\\n            </div>\\n            <div #viewport class=\\\"ui-carousel-viewport\\\">\\n                <ul #items class=\\\"ui-carousel-items\\\" [style.left.px]=\\\"left\\\" [style.transitionProperty]=\\\"'left'\\\" \\n                            [style.transitionDuration]=\\\"effectDuration\\\" [style.transitionTimingFunction]=\\\"easing\\\">\\n                    <li *ngFor=\\\"let item of value\\\" class=\\\"ui-carousel-item ui-widget-content ui-corner-all\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item}\\\"></ng-container>\\n                    </li>\\n                </ul>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], Carousel);\n    return Carousel;\n}());\nexports.Carousel = Carousel;\nvar CarouselModule = /** @class */ (function () {\n    function CarouselModule() {\n    }\n    CarouselModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [Carousel, shared_1.SharedModule],\n            declarations: [Carousel]\n        })\n    ], CarouselModule);\n    return CarouselModule;\n}());\nexports.CarouselModule = CarouselModule;\n//# sourceMappingURL=carousel.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/carousel/carousel.js\n// module id = 730\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar UIChart = /** @class */ (function () {\n    function UIChart(el) {\n        this.el = el;\n        this.options = {};\n        this.responsive = true;\n        this.onDataSelect = new core_1.EventEmitter();\n    }\n    Object.defineProperty(UIChart.prototype, \"data\", {\n        get: function () {\n            return this._data;\n        },\n        set: function (val) {\n            this._data = val;\n            this.reinit();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    UIChart.prototype.ngAfterViewInit = function () {\n        this.initChart();\n        this.initialized = true;\n    };\n    UIChart.prototype.onCanvasClick = function (event) {\n        if (this.chart) {\n            var element = this.chart.getElementAtEvent(event);\n            var dataset = this.chart.getDatasetAtEvent(event);\n            if (element && element[0] && dataset) {\n                this.onDataSelect.emit({ originalEvent: event, element: element[0], dataset: dataset });\n            }\n        }\n    };\n    UIChart.prototype.initChart = function () {\n        var opts = this.options || {};\n        opts.responsive = this.responsive;\n        this.chart = new Chart(this.el.nativeElement.children[0].children[0], {\n            type: this.type,\n            data: this.data,\n            options: this.options\n        });\n    };\n    UIChart.prototype.getCanvas = function () {\n        return this.el.nativeElement.children[0].children[0];\n    };\n    UIChart.prototype.getBase64Image = function () {\n        return this.chart.toBase64Image();\n    };\n    UIChart.prototype.generateLegend = function () {\n        if (this.chart) {\n            this.chart.generateLegend();\n        }\n    };\n    UIChart.prototype.refresh = function () {\n        if (this.chart) {\n            this.chart.update();\n        }\n    };\n    UIChart.prototype.reinit = function () {\n        if (this.chart) {\n            this.chart.destroy();\n            this.initChart();\n        }\n    };\n    UIChart.prototype.ngOnDestroy = function () {\n        if (this.chart) {\n            this.chart.destroy();\n            this.initialized = false;\n            this.chart = null;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIChart.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UIChart.prototype, \"options\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIChart.prototype, \"width\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIChart.prototype, \"height\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], UIChart.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], UIChart.prototype, \"onDataSelect\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], UIChart.prototype, \"data\", null);\n    UIChart = __decorate([\n        core_1.Component({\n            selector: 'p-chart',\n            template: \"\\n        <div style=\\\"position:relative\\\" [style.width]=\\\"responsive ? null : width\\\" [style.height]=\\\"responsive ? null : height\\\">\\n            <canvas [attr.width]=\\\"responsive ? null : width\\\" [attr.height]=\\\"responsive ? null : height\\\" (click)=\\\"onCanvasClick($event)\\\"></canvas>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], UIChart);\n    return UIChart;\n}());\nexports.UIChart = UIChart;\nvar ChartModule = /** @class */ (function () {\n    function ChartModule() {\n    }\n    ChartModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [UIChart],\n            declarations: [UIChart]\n        })\n    ], ChartModule);\n    return ChartModule;\n}());\nexports.ChartModule = ChartModule;\n//# sourceMappingURL=chart.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/chart/chart.js\n// module id = 731\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar forms_1 = require(\"@angular/forms\");\nexports.CHECKBOX_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Checkbox; }),\n    multi: true\n};\nvar Checkbox = /** @class */ (function () {\n    function Checkbox(cd) {\n        this.cd = cd;\n        this.onChange = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.focused = false;\n        this.checked = false;\n    }\n    Checkbox.prototype.onClick = function (event, checkbox, focus) {\n        event.preventDefault();\n        if (this.disabled) {\n            return;\n        }\n        this.checked = !this.checked;\n        this.updateModel();\n        if (focus) {\n            checkbox.focus();\n        }\n    };\n    Checkbox.prototype.updateModel = function () {\n        if (!this.binary) {\n            if (this.checked)\n                this.addValue();\n            else\n                this.removeValue();\n            this.onModelChange(this.model);\n            if (this.formControl) {\n                this.formControl.setValue(this.model);\n            }\n        }\n        else {\n            this.onModelChange(this.checked);\n        }\n        this.onChange.emit(this.checked);\n    };\n    Checkbox.prototype.handleChange = function (event) {\n        this.checked = event.target.checked;\n        this.updateModel();\n    };\n    Checkbox.prototype.isChecked = function () {\n        if (this.binary)\n            return this.model;\n        else\n            return this.model && this.model.indexOf(this.value) > -1;\n    };\n    Checkbox.prototype.removeValue = function () {\n        var _this = this;\n        this.model = this.model.filter(function (val) { return val !== _this.value; });\n    };\n    Checkbox.prototype.addValue = function () {\n        if (this.model)\n            this.model = this.model.concat([this.value]);\n        else\n            this.model = [this.value];\n    };\n    Checkbox.prototype.onFocus = function (event) {\n        this.focused = true;\n    };\n    Checkbox.prototype.onBlur = function (event) {\n        this.focused = false;\n        this.onModelTouched();\n    };\n    Checkbox.prototype.writeValue = function (model) {\n        this.model = model;\n        this.checked = this.isChecked();\n        this.cd.markForCheck();\n    };\n    Checkbox.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Checkbox.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Checkbox.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Checkbox.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Checkbox.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"binary\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Checkbox.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Checkbox.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Checkbox.prototype, \"labelStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", forms_1.FormControl)\n    ], Checkbox.prototype, \"formControl\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Checkbox.prototype, \"onChange\", void 0);\n    Checkbox = __decorate([\n        core_1.Component({\n            selector: 'p-checkbox',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-chkbox ui-widget'\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #cb type=\\\"checkbox\\\" [attr.id]=\\\"inputId\\\" [name]=\\\"name\\\" [value]=\\\"value\\\" [checked]=\\\"checked\\\" (focus)=\\\"onFocus($event)\\\" (blur)=\\\"onBlur($event)\\\"\\n                [ngClass]=\\\"{'ui-state-focus':focused}\\\" (change)=\\\"handleChange($event)\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\">\\n            </div>\\n            <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" (click)=\\\"onClick($event,cb,true)\\\"\\n                        [ngClass]=\\\"{'ui-state-active':checked,'ui-state-disabled':disabled,'ui-state-focus':focused}\\\">\\n                <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':checked}\\\"></span>\\n            </div>\\n        </div>\\n        <label (click)=\\\"onClick($event,cb,true)\\\" [class]=\\\"labelStyleClass\\\"\\n                [ngClass]=\\\"{'ui-chkbox-label': true, 'ui-label-active':checked, 'ui-label-disabled':disabled, 'ui-label-focus':focused}\\\"\\n                *ngIf=\\\"label\\\" [attr.for]=\\\"inputId\\\">{{label}}</label>\\n    \",\n            providers: [exports.CHECKBOX_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ChangeDetectorRef])\n    ], Checkbox);\n    return Checkbox;\n}());\nexports.Checkbox = Checkbox;\nvar CheckboxModule = /** @class */ (function () {\n    function CheckboxModule() {\n    }\n    CheckboxModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Checkbox],\n            declarations: [Checkbox]\n        })\n    ], CheckboxModule);\n    return CheckboxModule;\n}());\nexports.CheckboxModule = CheckboxModule;\n//# sourceMappingURL=checkbox.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/checkbox/checkbox.js\n// module id = 732\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar CodeHighlighter = /** @class */ (function () {\n    function CodeHighlighter(el) {\n        this.el = el;\n    }\n    CodeHighlighter.prototype.ngAfterViewInit = function () {\n        if (window['Prism']) {\n            window['Prism'].highlightElement(this.el.nativeElement);\n        }\n    };\n    CodeHighlighter = __decorate([\n        core_1.Directive({\n            selector: '[pCode]'\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], CodeHighlighter);\n    return CodeHighlighter;\n}());\nexports.CodeHighlighter = CodeHighlighter;\nvar CodeHighlighterModule = /** @class */ (function () {\n    function CodeHighlighterModule() {\n    }\n    CodeHighlighterModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [CodeHighlighter],\n            declarations: [CodeHighlighter]\n        })\n    ], CodeHighlighterModule);\n    return CodeHighlighterModule;\n}());\nexports.CodeHighlighterModule = CodeHighlighterModule;\n//# sourceMappingURL=codehighlighter.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/codehighlighter/codehighlighter.js\n// module id = 733\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar forms_1 = require(\"@angular/forms\");\nexports.COLORPICKER_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return ColorPicker; }),\n    multi: true\n};\nvar ColorPicker = /** @class */ (function () {\n    function ColorPicker(el, domHandler, renderer, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.format = 'hex';\n        this.onChange = new core_1.EventEmitter();\n        this.defaultColor = 'ff0000';\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    ColorPicker.prototype.ngAfterViewInit = function () {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panelViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.panelViewChild.nativeElement, this.appendTo);\n        }\n    };\n    ColorPicker.prototype.ngAfterViewChecked = function () {\n        if (this.shown) {\n            this.onShow();\n            this.shown = false;\n        }\n    };\n    ColorPicker.prototype.onHueMousedown = function (event) {\n        if (this.disabled) {\n            return;\n        }\n        this.bindDocumentMousemoveListener();\n        this.bindDocumentMouseupListener();\n        this.hueDragging = true;\n        this.pickHue(event);\n    };\n    ColorPicker.prototype.pickHue = function (event) {\n        var top = this.hueViewChild.nativeElement.getBoundingClientRect().top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);\n        this.value = this.validateHSB({\n            h: Math.floor(360 * (150 - Math.max(0, Math.min(150, (event.pageY - top)))) / 150),\n            s: this.value.s,\n            b: this.value.b\n        });\n        this.updateColorSelector();\n        this.updateUI();\n        this.updateModel();\n        this.onChange.emit({ originalEvent: event, value: this.getValueToUpdate() });\n    };\n    ColorPicker.prototype.onColorMousedown = function (event) {\n        if (this.disabled) {\n            return;\n        }\n        this.bindDocumentMousemoveListener();\n        this.bindDocumentMouseupListener();\n        this.colorDragging = true;\n        this.pickColor(event);\n    };\n    ColorPicker.prototype.pickColor = function (event) {\n        var rect = this.colorSelectorViewChild.nativeElement.getBoundingClientRect();\n        var top = rect.top + (window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0);\n        var left = rect.left + document.body.scrollLeft;\n        var saturation = Math.floor(100 * (Math.max(0, Math.min(150, (event.pageX - left)))) / 150);\n        var brightness = Math.floor(100 * (150 - Math.max(0, Math.min(150, (event.pageY - top)))) / 150);\n        this.value = this.validateHSB({\n            h: this.value.h,\n            s: saturation,\n            b: brightness\n        });\n        this.updateUI();\n        this.updateModel();\n        this.onChange.emit({ originalEvent: event, value: this.getValueToUpdate() });\n    };\n    ColorPicker.prototype.getValueToUpdate = function () {\n        var val;\n        switch (this.format) {\n            case 'hex':\n                val = '#' + this.HSBtoHEX(this.value);\n                break;\n            case 'rgb':\n                val = this.HSBtoRGB(this.value);\n                break;\n            case 'hsb':\n                val = this.value;\n                break;\n        }\n        return val;\n    };\n    ColorPicker.prototype.updateModel = function () {\n        this.onModelChange(this.getValueToUpdate());\n    };\n    ColorPicker.prototype.writeValue = function (value) {\n        if (value) {\n            switch (this.format) {\n                case 'hex':\n                    this.value = this.HEXtoHSB(value);\n                    break;\n                case 'rgb':\n                    this.value = this.RGBtoHSB(value);\n                    break;\n                case 'hsb':\n                    this.value = value;\n                    break;\n            }\n        }\n        else {\n            this.value = this.HEXtoHSB(this.defaultColor);\n        }\n        this.updateColorSelector();\n        this.updateUI();\n    };\n    ColorPicker.prototype.updateColorSelector = function () {\n        this.colorSelectorViewChild.nativeElement.style.backgroundColor = '#' + this.HSBtoHEX(this.value);\n    };\n    ColorPicker.prototype.updateUI = function () {\n        this.colorHandleViewChild.nativeElement.style.left = Math.floor(150 * this.value.s / 100) + 'px';\n        this.colorHandleViewChild.nativeElement.style.top = Math.floor(150 * (100 - this.value.b) / 100) + 'px';\n        this.hueHandleViewChild.nativeElement.style.top = Math.floor(150 - (150 * this.value.h / 360)) + 'px';\n        this.inputBgColor = '#' + this.HSBtoHEX(this.value);\n    };\n    ColorPicker.prototype.onInputFocus = function () {\n        this.onModelTouched();\n    };\n    ColorPicker.prototype.show = function () {\n        this.panelViewChild.nativeElement.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n        this.panelVisible = true;\n        this.shown = true;\n    };\n    ColorPicker.prototype.hide = function () {\n        this.panelVisible = false;\n        this.unbindDocumentClickListener();\n    };\n    ColorPicker.prototype.onShow = function () {\n        this.alignPanel();\n        this.bindDocumentClickListener();\n    };\n    ColorPicker.prototype.alignPanel = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.panelViewChild.nativeElement, this.inputViewChild.nativeElement);\n        else\n            this.domHandler.relativePosition(this.panelViewChild.nativeElement, this.inputViewChild.nativeElement);\n    };\n    ColorPicker.prototype.onInputClick = function () {\n        this.selfClick = true;\n        this.togglePanel();\n    };\n    ColorPicker.prototype.togglePanel = function () {\n        if (!this.panelVisible)\n            this.show();\n        else\n            this.hide();\n    };\n    ColorPicker.prototype.onInputKeydown = function (event) {\n        switch (event.which) {\n            //space\n            case 32:\n                this.togglePanel();\n                event.preventDefault();\n                break;\n            //escape and tab\n            case 27:\n            case 9:\n                this.hide();\n                break;\n        }\n    };\n    ColorPicker.prototype.onPanelClick = function () {\n        this.selfClick = true;\n    };\n    ColorPicker.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    ColorPicker.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    ColorPicker.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    ColorPicker.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.selfClick) {\n                    _this.panelVisible = false;\n                    _this.unbindDocumentClickListener();\n                }\n                _this.selfClick = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    ColorPicker.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    ColorPicker.prototype.bindDocumentMousemoveListener = function () {\n        var _this = this;\n        if (!this.documentMousemoveListener) {\n            this.documentMousemoveListener = this.renderer.listen('document', 'mousemove', function (event) {\n                if (_this.colorDragging) {\n                    _this.pickColor(event);\n                }\n                if (_this.hueDragging) {\n                    _this.pickHue(event);\n                }\n            });\n        }\n    };\n    ColorPicker.prototype.unbindDocumentMousemoveListener = function () {\n        if (this.documentMousemoveListener) {\n            this.documentMousemoveListener();\n            this.documentMousemoveListener = null;\n        }\n    };\n    ColorPicker.prototype.bindDocumentMouseupListener = function () {\n        var _this = this;\n        if (!this.documentMouseupListener) {\n            this.documentMouseupListener = this.renderer.listen('document', 'mouseup', function () {\n                _this.colorDragging = false;\n                _this.hueDragging = false;\n                _this.unbindDocumentMousemoveListener();\n                _this.unbindDocumentMouseupListener();\n            });\n        }\n    };\n    ColorPicker.prototype.unbindDocumentMouseupListener = function () {\n        if (this.documentMouseupListener) {\n            this.documentMouseupListener();\n            this.documentMouseupListener = null;\n        }\n    };\n    ColorPicker.prototype.validateHSB = function (hsb) {\n        return {\n            h: Math.min(360, Math.max(0, hsb.h)),\n            s: Math.min(100, Math.max(0, hsb.s)),\n            b: Math.min(100, Math.max(0, hsb.b))\n        };\n    };\n    ColorPicker.prototype.validateRGB = function (rgb) {\n        return {\n            r: Math.min(255, Math.max(0, rgb.r)),\n            g: Math.min(255, Math.max(0, rgb.g)),\n            b: Math.min(255, Math.max(0, rgb.b))\n        };\n    };\n    ColorPicker.prototype.validateHEX = function (hex) {\n        var len = 6 - hex.length;\n        if (len > 0) {\n            var o = [];\n            for (var i = 0; i < len; i++) {\n                o.push('0');\n            }\n            o.push(hex);\n            hex = o.join('');\n        }\n        return hex;\n    };\n    ColorPicker.prototype.HEXtoRGB = function (hex) {\n        var hexValue = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);\n        return { r: hexValue >> 16, g: (hexValue & 0x00FF00) >> 8, b: (hexValue & 0x0000FF) };\n    };\n    ColorPicker.prototype.HEXtoHSB = function (hex) {\n        return this.RGBtoHSB(this.HEXtoRGB(hex));\n    };\n    ColorPicker.prototype.RGBtoHSB = function (rgb) {\n        var hsb = {\n            h: 0,\n            s: 0,\n            b: 0\n        };\n        var min = Math.min(rgb.r, rgb.g, rgb.b);\n        var max = Math.max(rgb.r, rgb.g, rgb.b);\n        var delta = max - min;\n        hsb.b = max;\n        if (max != 0) {\n        }\n        hsb.s = max != 0 ? 255 * delta / max : 0;\n        if (hsb.s != 0) {\n            if (rgb.r == max) {\n                hsb.h = (rgb.g - rgb.b) / delta;\n            }\n            else if (rgb.g == max) {\n                hsb.h = 2 + (rgb.b - rgb.r) / delta;\n            }\n            else {\n                hsb.h = 4 + (rgb.r - rgb.g) / delta;\n            }\n        }\n        else {\n            hsb.h = -1;\n        }\n        hsb.h *= 60;\n        if (hsb.h < 0) {\n            hsb.h += 360;\n        }\n        hsb.s *= 100 / 255;\n        hsb.b *= 100 / 255;\n        return hsb;\n    };\n    ColorPicker.prototype.HSBtoRGB = function (hsb) {\n        var rgb = {\n            r: null, g: null, b: null\n        };\n        var h = Math.round(hsb.h);\n        var s = Math.round(hsb.s * 255 / 100);\n        var v = Math.round(hsb.b * 255 / 100);\n        if (s == 0) {\n            rgb = {\n                r: v,\n                g: v,\n                b: v\n            };\n        }\n        else {\n            var t1 = v;\n            var t2 = (255 - s) * v / 255;\n            var t3 = (t1 - t2) * (h % 60) / 60;\n            if (h == 360)\n                h = 0;\n            if (h < 60) {\n                rgb.r = t1;\n                rgb.b = t2;\n                rgb.g = t2 + t3;\n            }\n            else if (h < 120) {\n                rgb.g = t1;\n                rgb.b = t2;\n                rgb.r = t1 - t3;\n            }\n            else if (h < 180) {\n                rgb.g = t1;\n                rgb.r = t2;\n                rgb.b = t2 + t3;\n            }\n            else if (h < 240) {\n                rgb.b = t1;\n                rgb.r = t2;\n                rgb.g = t1 - t3;\n            }\n            else if (h < 300) {\n                rgb.b = t1;\n                rgb.g = t2;\n                rgb.r = t2 + t3;\n            }\n            else if (h < 360) {\n                rgb.r = t1;\n                rgb.g = t2;\n                rgb.b = t1 - t3;\n            }\n            else {\n                rgb.r = 0;\n                rgb.g = 0;\n                rgb.b = 0;\n            }\n        }\n        return { r: Math.round(rgb.r), g: Math.round(rgb.g), b: Math.round(rgb.b) };\n    };\n    ColorPicker.prototype.RGBtoHEX = function (rgb) {\n        var hex = [\n            rgb.r.toString(16),\n            rgb.g.toString(16),\n            rgb.b.toString(16)\n        ];\n        for (var key in hex) {\n            if (hex[key].length == 1) {\n                hex[key] = '0' + hex[key];\n            }\n        }\n        return hex.join('');\n    };\n    ColorPicker.prototype.HSBtoHEX = function (hsb) {\n        return this.RGBtoHEX(this.HSBtoRGB(hsb));\n    };\n    ColorPicker.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panelViewChild.nativeElement);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ColorPicker.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ColorPicker.prototype, \"inline\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"format\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ColorPicker.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ColorPicker.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], ColorPicker.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.ViewChild('panel'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"panelViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('colorSelector'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"colorSelectorViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('colorHandle'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"colorHandleViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('hue'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"hueViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('hueHandle'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"hueHandleViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('input'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ColorPicker.prototype, \"inputViewChild\", void 0);\n    ColorPicker = __decorate([\n        core_1.Component({\n            selector: 'p-colorPicker',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [ngClass]=\\\"{'ui-colorpicker ui-widget':true,'ui-colorpicker-overlay':!inline,'ui-colorpicker-dragging':colorDragging||hueDragging}\\\">\\n            <input #input type=\\\"text\\\" *ngIf=\\\"!inline\\\" class=\\\"ui-colorpicker-preview ui-inputtext ui-state-default ui-corner-all\\\" readonly=\\\"readonly\\\" [ngClass]=\\\"{'ui-state-disabled': disabled}\\\"\\n                (focus)=\\\"onInputFocus()\\\" (click)=\\\"onInputClick()\\\" (keydown)=\\\"onInputKeydown($event)\\\" [attr.id]=\\\"inputId\\\" [attr.tabindex]=\\\"tabindex\\\" [disabled]=\\\"disabled\\\"\\n                [style.backgroundColor]=\\\"inputBgColor\\\">\\n            <div #panel [ngClass]=\\\"{'ui-colorpicker-panel ui-corner-all': true, 'ui-colorpicker-overlay-panel ui-shadow':!inline, 'ui-state-disabled': disabled}\\\" (click)=\\\"onPanelClick()\\\"\\n                [@panelState]=\\\"inline ? 'visible' : (panelVisible ? 'visible' : 'hidden')\\\" [style.display]=\\\"inline ? 'block' : (panelVisible ? 'block' : 'none')\\\">\\n                <div class=\\\"ui-colorpicker-content\\\">\\n                    <div #colorSelector class=\\\"ui-colorpicker-color-selector\\\" (mousedown)=\\\"onColorMousedown($event)\\\">\\n                        <div class=\\\"ui-colorpicker-color\\\">\\n                            <div #colorHandle class=\\\"ui-colorpicker-color-handle\\\"></div>\\n                        </div>\\n                    </div>\\n                    <div #hue class=\\\"ui-colorpicker-hue\\\" (mousedown)=\\\"onHueMousedown($event)\\\">\\n                        <div #hueHandle class=\\\"ui-colorpicker-hue-handle\\\"></div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler, exports.COLORPICKER_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], ColorPicker);\n    return ColorPicker;\n}());\nexports.ColorPicker = ColorPicker;\nvar ColorPickerModule = /** @class */ (function () {\n    function ColorPickerModule() {\n    }\n    ColorPickerModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ColorPicker],\n            declarations: [ColorPicker]\n        })\n    ], ColorPickerModule);\n    return ColorPickerModule;\n}());\nexports.ColorPickerModule = ColorPickerModule;\n//# sourceMappingURL=colorpicker.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/colorpicker/colorpicker.js\n// module id = 734\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar shared_1 = require(\"../common/shared\");\nvar button_1 = require(\"../button/button\");\nvar confirmationservice_1 = require(\"../common/confirmationservice\");\nvar ConfirmDialog = /** @class */ (function () {\n    function ConfirmDialog(el, domHandler, renderer, confirmationService, zone) {\n        var _this = this;\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.confirmationService = confirmationService;\n        this.zone = zone;\n        this.acceptIcon = 'fa-check';\n        this.acceptLabel = 'Yes';\n        this.acceptVisible = true;\n        this.rejectIcon = 'fa-close';\n        this.rejectLabel = 'No';\n        this.rejectVisible = true;\n        this.closeOnEscape = true;\n        this.closable = true;\n        this.responsive = true;\n        this.subscription = confirmationService.requireConfirmation$.subscribe(function (confirmation) {\n            if (confirmation.key === _this.key) {\n                _this.confirmation = confirmation;\n                _this.message = _this.confirmation.message || _this.message;\n                _this.icon = _this.confirmation.icon || _this.icon;\n                _this.header = _this.confirmation.header || _this.header;\n                _this.rejectVisible = _this.confirmation.rejectVisible == null ? _this.rejectVisible : _this.confirmation.rejectVisible;\n                _this.acceptVisible = _this.confirmation.acceptVisible == null ? _this.acceptVisible : _this.confirmation.acceptVisible;\n                _this.acceptLabel = _this.confirmation.acceptLabel || _this.acceptLabel;\n                _this.rejectLabel = _this.confirmation.rejectLabel || _this.rejectLabel;\n                if (_this.confirmation.accept) {\n                    _this.confirmation.acceptEvent = new core_1.EventEmitter();\n                    _this.confirmation.acceptEvent.subscribe(_this.confirmation.accept);\n                }\n                if (_this.confirmation.reject) {\n                    _this.confirmation.rejectEvent = new core_1.EventEmitter();\n                    _this.confirmation.rejectEvent.subscribe(_this.confirmation.reject);\n                }\n                _this.visible = true;\n            }\n        });\n    }\n    Object.defineProperty(ConfirmDialog.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (val) {\n            this._visible = val;\n            if (this._visible) {\n                if (!this.positionInitialized) {\n                    this.center();\n                    this.positionInitialized = true;\n                }\n                this.el.nativeElement.children[0].style.zIndex = ++domhandler_1.DomHandler.zindex;\n                this.bindGlobalListeners();\n                this.executePostShowActions = true;\n            }\n            if (this._visible)\n                this.enableModality();\n            else\n                this.disableModality();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ConfirmDialog.prototype.ngAfterViewInit = function () {\n        this.contentContainer = this.domHandler.findSingle(this.el.nativeElement, '.ui-dialog-content');\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.el.nativeElement);\n            else\n                this.domHandler.appendChild(this.el.nativeElement, this.appendTo);\n        }\n    };\n    ConfirmDialog.prototype.ngAfterViewChecked = function () {\n        if (this.executePostShowActions) {\n            this.domHandler.findSingle(this.el.nativeElement.children[0], 'button').focus();\n            this.executePostShowActions = false;\n        }\n    };\n    ConfirmDialog.prototype.center = function () {\n        var container = this.el.nativeElement.children[0];\n        var elementWidth = this.domHandler.getOuterWidth(container);\n        var elementHeight = this.domHandler.getOuterHeight(container);\n        if (elementWidth == 0 && elementHeight == 0) {\n            container.style.visibility = 'hidden';\n            container.style.display = 'block';\n            elementWidth = this.domHandler.getOuterWidth(container);\n            elementHeight = this.domHandler.getOuterHeight(container);\n            container.style.display = 'none';\n            container.style.visibility = 'visible';\n        }\n        var viewport = this.domHandler.getViewport();\n        var x = (viewport.width - elementWidth) / 2;\n        var y = (viewport.height - elementHeight) / 2;\n        container.style.left = x + 'px';\n        container.style.top = y + 'px';\n    };\n    ConfirmDialog.prototype.enableModality = function () {\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = this.el.nativeElement.children[0].style.zIndex - 1;\n            this.domHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-dialog-mask');\n            document.body.appendChild(this.mask);\n            this.domHandler.addClass(document.body, 'ui-overflow-hidden');\n        }\n    };\n    ConfirmDialog.prototype.disableModality = function () {\n        if (this.mask) {\n            document.body.removeChild(this.mask);\n            this.domHandler.removeClass(document.body, 'ui-overflow-hidden');\n            this.mask = null;\n        }\n    };\n    ConfirmDialog.prototype.close = function (event) {\n        if (this.confirmation.rejectEvent) {\n            this.confirmation.rejectEvent.emit();\n        }\n        this.hide();\n        event.preventDefault();\n    };\n    ConfirmDialog.prototype.hide = function () {\n        this.visible = false;\n        this.unbindGlobalListeners();\n    };\n    ConfirmDialog.prototype.moveOnTop = function () {\n        this.el.nativeElement.children[0].style.zIndex = ++domhandler_1.DomHandler.zindex;\n    };\n    ConfirmDialog.prototype.bindGlobalListeners = function () {\n        var _this = this;\n        if (this.closeOnEscape && this.closable && !this.documentEscapeListener) {\n            this.documentEscapeListener = this.renderer.listen('document', 'keydown', function (event) {\n                if (event.which == 27) {\n                    if (_this.el.nativeElement.children[0].style.zIndex == domhandler_1.DomHandler.zindex && _this.visible) {\n                        _this.close(event);\n                    }\n                }\n            });\n        }\n        if (this.responsive) {\n            this.zone.runOutsideAngular(function () {\n                _this.documentResponsiveListener = _this.center.bind(_this);\n                window.addEventListener('resize', _this.documentResponsiveListener);\n            });\n        }\n    };\n    ConfirmDialog.prototype.unbindGlobalListeners = function () {\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n        if (this.documentResponsiveListener) {\n            window.removeEventListener('resize', this.documentResponsiveListener);\n            this.documentResponsiveListener = null;\n        }\n    };\n    ConfirmDialog.prototype.ngOnDestroy = function () {\n        this.disableModality();\n        if (this.documentResponsiveListener) {\n            this.documentResponsiveListener();\n        }\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n        }\n        if (this.appendTo && this.appendTo === 'body') {\n            document.body.removeChild(this.el.nativeElement);\n        }\n        this.subscription.unsubscribe();\n    };\n    ConfirmDialog.prototype.accept = function () {\n        if (this.confirmation.acceptEvent) {\n            this.confirmation.acceptEvent.emit();\n        }\n        this.hide();\n        this.confirmation = null;\n    };\n    ConfirmDialog.prototype.reject = function () {\n        if (this.confirmation.rejectEvent) {\n            this.confirmation.rejectEvent.emit();\n        }\n        this.hide();\n        this.confirmation = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"icon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"message\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"acceptIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"acceptLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"acceptVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"rejectIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"rejectLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"rejectVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"acceptButtonStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"rejectButtonStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ConfirmDialog.prototype, \"width\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ConfirmDialog.prototype, \"height\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"closeOnEscape\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"rtl\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ConfirmDialog.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ConfirmDialog.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ConfirmDialog.prototype, \"key\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], ConfirmDialog.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], ConfirmDialog.prototype, \"visible\", null);\n    ConfirmDialog = __decorate([\n        core_1.Component({\n            selector: 'p-confirmDialog',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-dialog ui-confirmdialog ui-widget ui-widget-content ui-corner-all ui-shadow':true,'ui-dialog-rtl':rtl}\\\" \\n            [style.display]=\\\"visible ? 'block' : 'none'\\\" [style.width.px]=\\\"width\\\" [style.height.px]=\\\"height\\\" (mousedown)=\\\"moveOnTop()\\\" [@dialogState]=\\\"visible ? 'visible' : 'hidden'\\\">\\n            <div class=\\\"ui-dialog-titlebar ui-widget-header ui-helper-clearfix ui-corner-top\\\">\\n                <span class=\\\"ui-dialog-title\\\" *ngIf=\\\"header\\\">{{header}}</span>\\n                <a *ngIf=\\\"closable\\\" [ngClass]=\\\"{'ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all':true}\\\" href=\\\"#\\\" role=\\\"button\\\" (click)=\\\"close($event)\\\">\\n                    <span class=\\\"fa fa-fw fa-close\\\"></span>\\n                </a>\\n            </div>\\n            <div class=\\\"ui-dialog-content ui-widget-content\\\">\\n                <i [ngClass]=\\\"'fa'\\\" [class]=\\\"icon\\\" *ngIf=\\\"icon\\\"></i>\\n                <span class=\\\"ui-confirmdialog-message\\\" [innerHTML]=\\\"message\\\"></span>\\n            </div>\\n            <div class=\\\"ui-dialog-footer ui-widget-content\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-dialog-footer ui-widget-content\\\" *ngIf=\\\"!footer\\\">\\n                <button type=\\\"button\\\" pButton [icon]=\\\"acceptIcon\\\" [label]=\\\"acceptLabel\\\" (click)=\\\"accept()\\\" [class]=\\\"acceptButtonStyleClass\\\" *ngIf=\\\"acceptVisible\\\"></button>\\n                <button type=\\\"button\\\" pButton [icon]=\\\"rejectIcon\\\" [label]=\\\"rejectLabel\\\" (click)=\\\"reject()\\\" [class]=\\\"rejectButtonStyleClass\\\" *ngIf=\\\"rejectVisible\\\"></button>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('dialogState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler,\n            core_1.Renderer2, confirmationservice_1.ConfirmationService, core_1.NgZone])\n    ], ConfirmDialog);\n    return ConfirmDialog;\n}());\nexports.ConfirmDialog = ConfirmDialog;\nvar ConfirmDialogModule = /** @class */ (function () {\n    function ConfirmDialogModule() {\n    }\n    ConfirmDialogModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule],\n            exports: [ConfirmDialog, button_1.ButtonModule, shared_1.SharedModule],\n            declarations: [ConfirmDialog]\n        })\n    ], ConfirmDialogModule);\n    return ConfirmDialogModule;\n}());\nexports.ConfirmDialogModule = ConfirmDialogModule;\n//# sourceMappingURL=confirmdialog.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/confirmdialog/confirmdialog.js\n// module id = 735\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar router_1 = require(\"@angular/router\");\nvar ContextMenuSub = /** @class */ (function () {\n    function ContextMenuSub(domHandler, contextMenu) {\n        this.domHandler = domHandler;\n        this.contextMenu = contextMenu;\n    }\n    ContextMenuSub.prototype.onItemMouseEnter = function (event, item, menuitem) {\n        if (menuitem.disabled) {\n            return;\n        }\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n        this.activeItem = item;\n        var nextElement = item.children[0].nextElementSibling;\n        if (nextElement) {\n            var sublist = nextElement.children[0];\n            sublist.style.zIndex = ++domhandler_1.DomHandler.zindex;\n            this.position(sublist, item);\n        }\n    };\n    ContextMenuSub.prototype.onItemMouseLeave = function (event, link) {\n        var _this = this;\n        this.hideTimeout = setTimeout(function () {\n            _this.activeItem = null;\n        }, 1000);\n    };\n    ContextMenuSub.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    };\n    ContextMenuSub.prototype.listClick = function (event) {\n        this.activeItem = null;\n    };\n    ContextMenuSub.prototype.position = function (sublist, item) {\n        this.containerLeft = this.domHandler.getOffset(item.parentElement);\n        var viewport = this.domHandler.getViewport();\n        var sublistWidth = sublist.offsetParent ? sublist.offsetWidth : this.domHandler.getHiddenElementOuterWidth(sublist);\n        var itemOuterWidth = this.domHandler.getOuterWidth(item.children[0]);\n        sublist.style.top = '0px';\n        if ((parseInt(this.containerLeft.left) + itemOuterWidth + sublistWidth) > (viewport.width - this.calculateScrollbarWidth())) {\n            sublist.style.left = -sublistWidth + 'px';\n        }\n        else {\n            sublist.style.left = itemOuterWidth + 'px';\n        }\n    };\n    ContextMenuSub.prototype.calculateScrollbarWidth = function () {\n        var scrollDiv = document.createElement(\"div\");\n        scrollDiv.className = \"ui-scrollbar-measure\";\n        document.body.appendChild(scrollDiv);\n        var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n        document.body.removeChild(scrollDiv);\n        return scrollbarWidth;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ContextMenuSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ContextMenuSub.prototype, \"root\", void 0);\n    ContextMenuSub = __decorate([\n        core_1.Component({\n            selector: 'p-contextMenuSub',\n            template: \"\\n        <ul [ngClass]=\\\"{'ui-widget-content ui-corner-all ui-submenu-list ui-shadow':!root}\\\" class=\\\"ui-menu-list\\\" (click)=\\\"listClick($event)\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"(root ? item : item.items)\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': child.visible === false}\\\">\\n                <li *ngIf=\\\"!child.separator\\\" #item [ngClass]=\\\"{'ui-menuitem ui-corner-all':true,'ui-menuitem-active':item==activeItem,'ui-helper-hidden': child.visible === false}\\\"\\n                    (mouseenter)=\\\"onItemMouseEnter($event,item,child)\\\" (mouseleave)=\\\"onItemMouseLeave($event,item)\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\" (click)=\\\"itemClick($event, child)\\\"\\n                        [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':child.disabled}\\\" [ngStyle]=\\\"child.style\\\" [class]=\\\"child.styleClass\\\">\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" \\n                        [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        (click)=\\\"itemClick($event, child)\\\" [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':child.disabled}\\\" \\n                        [ngStyle]=\\\"child.style\\\" [class]=\\\"child.styleClass\\\">\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                    </a>\\n                    <p-contextMenuSub class=\\\"ui-submenu\\\" [item]=\\\"child\\\" *ngIf=\\\"child.items\\\"></p-contextMenuSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __param(1, core_1.Inject(core_1.forwardRef(function () { return ContextMenu; }))),\n        __metadata(\"design:paramtypes\", [domhandler_1.DomHandler, ContextMenu])\n    ], ContextMenuSub);\n    return ContextMenuSub;\n}());\nexports.ContextMenuSub = ContextMenuSub;\nvar ContextMenu = /** @class */ (function () {\n    function ContextMenu(el, domHandler, renderer, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.zone = zone;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    ContextMenu.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.global) {\n            this.rightClickListener = this.renderer.listen('document', 'contextmenu', function (event) {\n                _this.show(event);\n                event.preventDefault();\n            });\n        }\n        else if (this.target) {\n            this.rightClickListener = this.renderer.listen(this.target, 'contextmenu', function (event) {\n                _this.show(event);\n                event.preventDefault();\n                event.stopPropagation();\n            });\n        }\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.containerViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);\n        }\n    };\n    ContextMenu.prototype.show = function (event) {\n        this.position(event);\n        this.moveOnTop();\n        this.containerViewChild.nativeElement.style.display = 'block';\n        this.domHandler.fadeIn(this.containerViewChild.nativeElement, 250);\n        this.bindGlobalListeners();\n        if (event) {\n            event.preventDefault();\n        }\n    };\n    ContextMenu.prototype.hide = function () {\n        this.containerViewChild.nativeElement.style.display = 'none';\n        this.unbindGlobalListeners();\n    };\n    ContextMenu.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    ContextMenu.prototype.toggle = function (event) {\n        if (this.containerViewChild.nativeElement.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n    };\n    ContextMenu.prototype.position = function (event) {\n        if (event) {\n            var left = event.pageX + 1;\n            var top_1 = event.pageY + 1;\n            var width = this.containerViewChild.nativeElement.offsetParent ? this.containerViewChild.nativeElement.offsetWidth : this.domHandler.getHiddenElementOuterWidth(this.containerViewChild.nativeElement);\n            var height = this.containerViewChild.nativeElement.offsetParent ? this.containerViewChild.nativeElement.offsetHeight : this.domHandler.getHiddenElementOuterHeight(this.containerViewChild.nativeElement);\n            var viewport = this.domHandler.getViewport();\n            //flip\n            if (left + width - document.body.scrollLeft > viewport.width) {\n                left -= width;\n            }\n            //flip\n            if (top_1 + height - document.body.scrollTop > viewport.height) {\n                top_1 -= height;\n            }\n            //fit\n            if (left < document.body.scrollLeft) {\n                left = document.body.scrollLeft;\n            }\n            //fit\n            if (top_1 < document.body.scrollTop) {\n                top_1 = document.body.scrollTop;\n            }\n            this.containerViewChild.nativeElement.style.left = left + 'px';\n            this.containerViewChild.nativeElement.style.top = top_1 + 'px';\n        }\n    };\n    ContextMenu.prototype.bindGlobalListeners = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n                if (_this.containerViewChild.nativeElement.offsetParent && event.button !== 2) {\n                    _this.hide();\n                }\n            });\n        }\n        this.zone.runOutsideAngular(function () {\n            if (!_this.windowResizeListener) {\n                _this.windowResizeListener = _this.onWindowResize.bind(_this);\n                window.addEventListener('resize', _this.windowResizeListener);\n            }\n        });\n    };\n    ContextMenu.prototype.unbindGlobalListeners = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n        if (this.windowResizeListener) {\n            window.removeEventListener('resize', this.windowResizeListener);\n            this.windowResizeListener = null;\n        }\n    };\n    ContextMenu.prototype.onWindowResize = function (event) {\n        if (this.containerViewChild.nativeElement.offsetParent) {\n            this.hide();\n        }\n    };\n    ContextMenu.prototype.ngOnDestroy = function () {\n        this.unbindGlobalListeners();\n        if (this.rightClickListener) {\n            this.rightClickListener();\n        }\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], ContextMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ContextMenu.prototype, \"global\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ContextMenu.prototype, \"target\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ContextMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ContextMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ContextMenu.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ContextMenu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], ContextMenu.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ContextMenu.prototype, \"containerViewChild\", void 0);\n    ContextMenu = __decorate([\n        core_1.Component({\n            selector: 'p-contextMenu',\n            template: \"\\n        <div #container [ngClass]=\\\"'ui-contextmenu ui-widget ui-widget-content ui-corner-all ui-shadow'\\\" \\n            [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\">\\n            <p-contextMenuSub [item]=\\\"model\\\" root=\\\"root\\\"></p-contextMenuSub>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.NgZone])\n    ], ContextMenu);\n    return ContextMenu;\n}());\nexports.ContextMenu = ContextMenu;\nvar ContextMenuModule = /** @class */ (function () {\n    function ContextMenuModule() {\n    }\n    ContextMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [ContextMenu, router_1.RouterModule],\n            declarations: [ContextMenu, ContextMenuSub]\n        })\n    ], ContextMenuModule);\n    return ContextMenuModule;\n}());\nexports.ContextMenuModule = ContextMenuModule;\n//# sourceMappingURL=contextmenu.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/contextmenu/contextmenu.js\n// module id = 736\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar paginator_1 = require(\"../paginator/paginator\");\nvar DataGrid = /** @class */ (function () {\n    function DataGrid(el, differs) {\n        this.el = el;\n        this.differs = differs;\n        this.pageLinks = 5;\n        this.emptyMessage = 'No records found';\n        this.onLazyLoad = new core_1.EventEmitter();\n        this.paginatorPosition = 'bottom';\n        this.alwaysShowPaginator = true;\n        this.trackBy = function (index, item) { return item; };\n        this.immutable = true;\n        this.onPage = new core_1.EventEmitter();\n        this.first = 0;\n        this.page = 0;\n        this.differ = differs.find([]).create(null);\n    }\n    DataGrid.prototype.ngAfterViewInit = function () {\n        if (this.lazy) {\n            this.onLazyLoad.emit({\n                first: this.first,\n                rows: this.rows\n            });\n        }\n    };\n    DataGrid.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Object.defineProperty(DataGrid.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            if (this.immutable) {\n                this.handleDataChange();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataGrid.prototype.handleDataChange = function () {\n        if (this.paginator) {\n            this.updatePaginator();\n        }\n        this.updateDataToRender(this.value);\n    };\n    DataGrid.prototype.ngDoCheck = function () {\n        if (!this.immutable) {\n            var changes = this.differ.diff(this.value);\n            if (changes) {\n                this.handleDataChange();\n            }\n        }\n    };\n    DataGrid.prototype.updatePaginator = function () {\n        //total records\n        this.totalRecords = this.lazy ? this.totalRecords : (this.value ? this.value.length : 0);\n        //first\n        if (this.totalRecords && this.first >= this.totalRecords) {\n            var numberOfPages = Math.ceil(this.totalRecords / this.rows);\n            this.first = Math.max((numberOfPages - 1) * this.rows, 0);\n        }\n    };\n    DataGrid.prototype.paginate = function (event) {\n        this.first = event.first;\n        this.rows = event.rows;\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            this.updateDataToRender(this.value);\n        }\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n    };\n    DataGrid.prototype.updateDataToRender = function (datasource) {\n        if (this.paginator && datasource) {\n            this.dataToRender = [];\n            var startIndex = this.lazy ? 0 : this.first;\n            for (var i = startIndex; i < (startIndex + this.rows); i++) {\n                if (i >= datasource.length) {\n                    break;\n                }\n                this.dataToRender.push(datasource[i]);\n            }\n        }\n        else {\n            this.dataToRender = datasource;\n        }\n    };\n    DataGrid.prototype.isEmpty = function () {\n        return !this.dataToRender || (this.dataToRender.length == 0);\n    };\n    DataGrid.prototype.createLazyLoadMetadata = function () {\n        return {\n            first: this.first,\n            rows: this.rows\n        };\n    };\n    DataGrid.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataGrid.prototype, \"paginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataGrid.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataGrid.prototype, \"totalRecords\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataGrid.prototype, \"pageLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataGrid.prototype, \"rowsPerPageOptions\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataGrid.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataGrid.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataGrid.prototype, \"onLazyLoad\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataGrid.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataGrid.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataGrid.prototype, \"paginatorPosition\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataGrid.prototype, \"alwaysShowPaginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataGrid.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataGrid.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataGrid.prototype, \"paginatorDropdownAppendTo\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataGrid.prototype, \"onPage\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], DataGrid.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], DataGrid.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataGrid.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], DataGrid.prototype, \"value\", null);\n    DataGrid = __decorate([\n        core_1.Component({\n            selector: 'p-dataGrid',\n            template: \"\\n        <div [ngClass]=\\\"'ui-datagrid ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-datagrid-header ui-widget-header ui-corner-top\\\" *ngIf=\\\"header\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n                (onPageChange)=\\\"paginate($event)\\\" styleClass=\\\"ui-paginator-top\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\\\"\\n                [dropdownAppendTo]=\\\"paginatorDropdownAppendTo\\\"></p-paginator>\\n            <div class=\\\"ui-datagrid-content ui-widget-content\\\">\\n                <div class=\\\"ui-g\\\">\\n                    <ng-template ngFor [ngForOf]=\\\"dataToRender\\\" [ngForTemplate]=\\\"itemTemplate\\\" [ngForTrackBy]=\\\"trackBy\\\"></ng-template>\\n                    <div *ngIf=\\\"isEmpty()\\\" class=\\\"ui-widget-content ui-g-12\\\">{{emptyMessage}}</div>\\n                </div>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n                (onPageChange)=\\\"paginate($event)\\\" styleClass=\\\"ui-paginator-bottom\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\\\"\\n                [dropdownAppendTo]=\\\"paginatorDropdownAppendTo\\\"></p-paginator>\\n            <div class=\\\"ui-datagrid-footer ui-widget-footer ui-corner-bottom\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.IterableDiffers])\n    ], DataGrid);\n    return DataGrid;\n}());\nexports.DataGrid = DataGrid;\nvar DataGridModule = /** @class */ (function () {\n    function DataGridModule() {\n    }\n    DataGridModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule, paginator_1.PaginatorModule],\n            exports: [DataGrid, shared_1.SharedModule],\n            declarations: [DataGrid]\n        })\n    ], DataGridModule);\n    return DataGridModule;\n}());\nexports.DataGridModule = DataGridModule;\n//# sourceMappingURL=datagrid.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/datagrid/datagrid.js\n// module id = 737\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar paginator_1 = require(\"../paginator/paginator\");\nvar DataList = /** @class */ (function () {\n    function DataList(el, differs) {\n        this.el = el;\n        this.differs = differs;\n        this.pageLinks = 5;\n        this.onLazyLoad = new core_1.EventEmitter();\n        this.paginatorPosition = 'bottom';\n        this.emptyMessage = 'No records found';\n        this.alwaysShowPaginator = true;\n        this.trackBy = function (index, item) { return item; };\n        this.immutable = true;\n        this.onPage = new core_1.EventEmitter();\n        this.first = 0;\n        this.page = 0;\n        this.differ = differs.find([]).create(null);\n    }\n    DataList.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    DataList.prototype.ngAfterViewInit = function () {\n        if (this.lazy) {\n            this.onLazyLoad.emit({\n                first: this.first,\n                rows: this.rows\n            });\n        }\n    };\n    Object.defineProperty(DataList.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            if (this.immutable) {\n                this.handleDataChange();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataList.prototype.handleDataChange = function () {\n        if (this.paginator) {\n            this.updatePaginator();\n        }\n        this.updateDataToRender(this.value);\n    };\n    DataList.prototype.ngDoCheck = function () {\n        if (!this.immutable) {\n            var changes = this.differ.diff(this.value);\n            if (changes) {\n                this.handleDataChange();\n            }\n        }\n    };\n    DataList.prototype.updatePaginator = function () {\n        //total records\n        this.totalRecords = this.lazy ? this.totalRecords : (this.value ? this.value.length : 0);\n        //first\n        if (this.totalRecords && this.first >= this.totalRecords) {\n            var numberOfPages = Math.ceil(this.totalRecords / this.rows);\n            this.first = Math.max((numberOfPages - 1) * this.rows, 0);\n        }\n    };\n    DataList.prototype.paginate = function (event) {\n        this.first = event.first;\n        this.rows = event.rows;\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            this.updateDataToRender(this.value);\n        }\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n    };\n    DataList.prototype.updateDataToRender = function (datasource) {\n        if (this.paginator && datasource) {\n            this.dataToRender = [];\n            var startIndex = this.lazy ? 0 : this.first;\n            for (var i = startIndex; i < (startIndex + this.rows); i++) {\n                if (i >= datasource.length) {\n                    break;\n                }\n                this.dataToRender.push(datasource[i]);\n            }\n        }\n        else {\n            this.dataToRender = datasource;\n        }\n    };\n    DataList.prototype.isEmpty = function () {\n        return !this.dataToRender || (this.dataToRender.length == 0);\n    };\n    DataList.prototype.createLazyLoadMetadata = function () {\n        return {\n            first: this.first,\n            rows: this.rows\n        };\n    };\n    DataList.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"paginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataList.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataList.prototype, \"totalRecords\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataList.prototype, \"pageLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataList.prototype, \"rowsPerPageOptions\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataList.prototype, \"onLazyLoad\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataList.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataList.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataList.prototype, \"paginatorPosition\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataList.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"alwaysShowPaginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataList.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataList.prototype, \"scrollable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataList.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataList.prototype, \"paginatorDropdownAppendTo\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataList.prototype, \"onPage\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], DataList.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], DataList.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataList.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], DataList.prototype, \"value\", null);\n    DataList = __decorate([\n        core_1.Component({\n            selector: 'p-dataList',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-datalist ui-widget': true, 'ui-datalist-scrollable': scrollable}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-datalist-header ui-widget-header ui-corner-top\\\" *ngIf=\\\"header\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n            (onPageChange)=\\\"paginate($event)\\\" styleClass=\\\"ui-paginator-top\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\\\"\\n            [dropdownAppendTo]=\\\"paginatorDropdownAppendTo\\\"></p-paginator>\\n            <div class=\\\"ui-datalist-content ui-widget-content\\\" [ngStyle]=\\\"{'max-height': scrollHeight}\\\">\\n                <div *ngIf=\\\"isEmpty()\\\" class=\\\"ui-datalist-emptymessage\\\">{{emptyMessage}}</div>\\n                <ul class=\\\"ui-datalist-data\\\">\\n                    <li *ngFor=\\\"let item of dataToRender;let i = index;trackBy: trackBy\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: (i + first)}\\\"></ng-container>\\n                    </li>\\n                </ul>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n            (onPageChange)=\\\"paginate($event)\\\" styleClass=\\\"ui-paginator-bottom\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\\\"\\n            [dropdownAppendTo]=\\\"paginatorDropdownAppendTo\\\"></p-paginator>\\n            <div class=\\\"ui-datalist-footer ui-widget-header ui-corner-bottom\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.IterableDiffers])\n    ], DataList);\n    return DataList;\n}());\nexports.DataList = DataList;\nvar DataListModule = /** @class */ (function () {\n    function DataListModule() {\n    }\n    DataListModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, paginator_1.PaginatorModule],\n            exports: [DataList, shared_1.SharedModule],\n            declarations: [DataList]\n        })\n    ], DataListModule);\n    return DataListModule;\n}());\nexports.DataListModule = DataListModule;\n//# sourceMappingURL=datalist.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/datalist/datalist.js\n// module id = 738\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar DataScroller = /** @class */ (function () {\n    function DataScroller(el, renderer, domHandler, zone) {\n        this.el = el;\n        this.renderer = renderer;\n        this.domHandler = domHandler;\n        this.zone = zone;\n        this.buffer = 0.9;\n        this.trackBy = function (index, item) { return item; };\n        this.onLazyLoad = new core_1.EventEmitter();\n        this.dataToRender = [];\n        this.first = 0;\n        this.page = 0;\n    }\n    DataScroller.prototype.ngOnInit = function () {\n        this.load();\n    };\n    DataScroller.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.loader) {\n            this.loaderClickListener = this.renderer.listen(this.loader, 'click', function () {\n                _this.load();\n            });\n        }\n        else {\n            this.bindScrollListener();\n        }\n    };\n    DataScroller.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    DataScroller.prototype.load = function () {\n        if (this.lazy) {\n            this.onLazyLoad.emit({\n                first: this.page * this.rows,\n                rows: this.rows\n            });\n        }\n        this.page = this.page + 1;\n    };\n    DataScroller.prototype.shouldLoad = function () {\n        if (this.lazy)\n            return (this.rows * this.page < this.totalRecords);\n        else\n            return this.value && this.value.length && (this.rows * this.page < this.value.length);\n    };\n    DataScroller.prototype.reset = function () {\n        this.page = 0;\n    };\n    DataScroller.prototype.isEmpty = function () {\n        return !this.value || (this.value.length == 0);\n    };\n    DataScroller.prototype.bindScrollListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            if (_this.inline) {\n                _this.inlineScrollListener = _this.onInlineScroll.bind(_this);\n                _this.contentViewChild.nativeElement.addEventListener('scroll', _this.inlineScrollListener);\n            }\n            else {\n                _this.windowScrollListener = _this.onWindowScroll.bind(_this);\n                window.addEventListener('scroll', _this.windowScrollListener);\n            }\n        });\n    };\n    DataScroller.prototype.unbindScrollListener = function () {\n        if (this.inlineScrollListener) {\n            this.contentViewChild.nativeElement.removeEventListener('scroll', this.inlineScrollListener);\n        }\n        if (this.windowScrollListener) {\n            window.removeEventListener('scroll', this.windowScrollListener);\n        }\n        if (this.loaderClickListener) {\n            this.loaderClickListener();\n            this.loaderClickListener = null;\n        }\n    };\n    DataScroller.prototype.onInlineScroll = function () {\n        var _this = this;\n        var scrollTop = this.contentViewChild.nativeElement.scrollTop;\n        var scrollHeight = this.contentViewChild.nativeElement.scrollHeight;\n        var viewportHeight = this.contentViewChild.nativeElement.clientHeight;\n        if ((scrollTop >= ((scrollHeight * this.buffer) - (viewportHeight)))) {\n            if (this.shouldLoad()) {\n                this.zone.run(function () {\n                    _this.load();\n                });\n            }\n        }\n    };\n    DataScroller.prototype.onWindowScroll = function () {\n        var _this = this;\n        var docBody = document.body;\n        var docElement = document.documentElement;\n        var scrollTop = (window.pageYOffset || document.documentElement.scrollTop);\n        var winHeight = docElement.clientHeight;\n        var docHeight = Math.max(docBody.scrollHeight, docBody.offsetHeight, winHeight, docElement.scrollHeight, docElement.offsetHeight);\n        if (scrollTop >= ((docHeight * this.buffer) - winHeight)) {\n            if (this.shouldLoad()) {\n                this.zone.run(function () {\n                    _this.load();\n                });\n            }\n        }\n    };\n    DataScroller.prototype.ngOnDestroy = function () {\n        this.unbindScrollListener();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataScroller.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataScroller.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataScroller.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataScroller.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataScroller.prototype, \"buffer\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataScroller.prototype, \"inline\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"loader\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataScroller.prototype, \"totalRecords\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataScroller.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], DataScroller.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataScroller.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ViewChild('content'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], DataScroller.prototype, \"contentViewChild\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataScroller.prototype, \"onLazyLoad\", void 0);\n    DataScroller = __decorate([\n        core_1.Component({\n            selector: 'p-dataScroller',\n            template: \"\\n    <div [ngClass]=\\\"{'ui-datascroller ui-widget': true, 'ui-datascroller-inline': inline}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n        <div class=\\\"ui-datascroller-header ui-widget-header ui-corner-top\\\" *ngIf=\\\"header\\\">\\n            <ng-content select=\\\"p-header\\\"></ng-content>\\n        </div>\\n        <div #content class=\\\"ui-datascroller-content ui-widget-content\\\" [ngStyle]=\\\"{'max-height': scrollHeight}\\\">\\n            <ul class=\\\"ui-datascroller-list\\\">\\n                <li *ngFor=\\\"let item of value | slice:first:(first + (page * rows)); trackBy: trackBy; let i = index\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: i}\\\"></ng-container>\\n                </li>\\n            </ul>\\n        </div>\\n        <div class=\\\"ui-datascroller-footer ui-widget-header ui-corner-bottom\\\" *ngIf=\\\"footer\\\">\\n            <ng-content select=\\\"p-footer\\\"></ng-content>\\n        </div>\\n    </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.Renderer2, domhandler_1.DomHandler, core_1.NgZone])\n    ], DataScroller);\n    return DataScroller;\n}());\nexports.DataScroller = DataScroller;\nvar DataScrollerModule = /** @class */ (function () {\n    function DataScrollerModule() {\n    }\n    DataScrollerModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [DataScroller, shared_1.SharedModule],\n            declarations: [DataScroller]\n        })\n    ], DataScrollerModule);\n    return DataScrollerModule;\n}());\nexports.DataScrollerModule = DataScrollerModule;\n//# sourceMappingURL=datascroller.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/datascroller/datascroller.js\n// module id = 739\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar forms_1 = require(\"@angular/forms\");\nvar shared_1 = require(\"../common/shared\");\nvar paginator_1 = require(\"../paginator/paginator\");\nvar shared_2 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar objectutils_1 = require(\"../utils/objectutils\");\nvar DTRadioButton = /** @class */ (function () {\n    function DTRadioButton() {\n        this.onClick = new core_1.EventEmitter();\n    }\n    DTRadioButton.prototype.handleClick = function (event) {\n        this.onClick.emit(event);\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DTRadioButton.prototype, \"checked\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DTRadioButton.prototype, \"onClick\", void 0);\n    DTRadioButton = __decorate([\n        core_1.Component({\n            selector: 'p-dtRadioButton',\n            template: \"\\n        <div class=\\\"ui-radiobutton ui-widget\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input type=\\\"radio\\\" [checked]=\\\"checked\\\">\\n            </div>\\n            <div class=\\\"ui-radiobutton-box ui-widget ui-radiobutton-relative ui-state-default\\\" (click)=\\\"handleClick($event)\\\"\\n                        [ngClass]=\\\"{'ui-state-active':checked}\\\">\\n                <span class=\\\"ui-radiobutton-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-circle':checked}\\\"></span>\\n            </div>\\n        </div>\\n    \"\n        })\n    ], DTRadioButton);\n    return DTRadioButton;\n}());\nexports.DTRadioButton = DTRadioButton;\nvar DTCheckbox = /** @class */ (function () {\n    function DTCheckbox() {\n        this.onChange = new core_1.EventEmitter();\n    }\n    DTCheckbox.prototype.handleClick = function (event) {\n        if (!this.disabled) {\n            this.onChange.emit({ originalEvent: event, checked: !this.checked });\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DTCheckbox.prototype, \"checked\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DTCheckbox.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DTCheckbox.prototype, \"onChange\", void 0);\n    DTCheckbox = __decorate([\n        core_1.Component({\n            selector: 'p-dtCheckbox',\n            template: \"\\n        <div class=\\\"ui-chkbox ui-widget\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input type=\\\"checkbox\\\" [checked]=\\\"checked\\\">\\n            </div>\\n            <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" (click)=\\\"handleClick($event)\\\"\\n                        [ngClass]=\\\"{'ui-state-active':checked&&!disabled,'ui-state-disabled':disabled}\\\">\\n                <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':checked}\\\"></span>\\n            </div>\\n        </div>\\n    \"\n        })\n    ], DTCheckbox);\n    return DTCheckbox;\n}());\nexports.DTCheckbox = DTCheckbox;\nvar ColumnHeaders = /** @class */ (function () {\n    function ColumnHeaders(dt) {\n        this.dt = dt;\n    }\n    __decorate([\n        core_1.Input(\"pColumnHeaders\"),\n        __metadata(\"design:type\", Array)\n    ], ColumnHeaders.prototype, \"columns\", void 0);\n    ColumnHeaders = __decorate([\n        core_1.Component({\n            selector: '[pColumnHeaders]',\n            template: \"\\n        <ng-template ngFor let-col [ngForOf]=\\\"columns\\\" let-lastCol=\\\"last\\\">\\n            <th #headerCell [attr.id]=\\\"col.colId\\\" [ngStyle]=\\\"col.headerStyle||col.style\\\" [class]=\\\"col.headerStyleClass||col.styleClass\\\" (click)=\\\"dt.sort($event,col)\\\" [attr.colspan]=\\\"col.colspan\\\" [attr.rowspan]=\\\"col.rowspan\\\"\\n                [ngClass]=\\\"{'ui-state-default ui-unselectable-text':true, 'ui-sortable-column': col.sortable, 'ui-state-active': dt.isSorted(col), 'ui-resizable-column': dt.resizableColumns, 'ui-selection-column':col.selectionMode,\\n                            'ui-helper-hidden': col.hidden}\\\"\\n                (dragstart)=\\\"dt.onColumnDragStart($event)\\\" (dragleave)=\\\"dt.onColumnDragleave($event)\\\" (drop)=\\\"dt.onColumnDrop($event)\\\" (mousedown)=\\\"dt.onHeaderMousedown($event,headerCell)\\\"\\n                [attr.tabindex]=\\\"col.sortable ? dt.tabindex : null\\\" (keydown)=\\\"dt.onHeaderKeydown($event,col)\\\"\\n                [attr.scope]=\\\"col.scope||(col.colspan ? 'colgroup' : 'col')\\\">\\n                <span class=\\\"ui-column-resizer ui-clickable\\\" *ngIf=\\\"dt.resizableColumns && col.resizable && ((dt.columnResizeMode == 'fit' && !lastCol) || dt.columnResizeMode == 'expand')\\\" (mousedown)=\\\"dt.initColumnResize($event)\\\"></span>\\n                <span class=\\\"ui-column-title\\\" *ngIf=\\\"!col.selectionMode&&!col.headerTemplate\\\">{{col.header}}</span>\\n                <span class=\\\"ui-column-title\\\" *ngIf=\\\"col.headerTemplate\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"col.headerTemplate; context: {$implicit: col}\\\"></ng-container>\\n                </span>\\n                <span class=\\\"ui-sortable-column-icon fa fa-fw fa-sort\\\" *ngIf=\\\"col.sortable\\\"\\n                     [ngClass]=\\\"{'fa-sort-desc': (dt.getSortOrder(col) == -1),'fa-sort-asc': (dt.getSortOrder(col) == 1)}\\\"></span>\\n                <input [attr.type]=\\\"col.filterType\\\" class=\\\"ui-column-filter ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [attr.maxlength]=\\\"col.filterMaxlength\\\" [attr.placeholder]=\\\"col.filterPlaceholder\\\" *ngIf=\\\"col.filter&&!col.filterTemplate\\\" [value]=\\\"dt.filters[col.filterField||col.field] ? dt.filters[col.filterField||col.field].value : ''\\\"\\n                    (click)=\\\"dt.onFilterInputClick($event)\\\" (input)=\\\"dt.onFilterKeyup($event.target.value, col.filterField||col.field, col.filterMatchMode)\\\"/>\\n                <ng-container *ngIf=\\\"col.filter && col.filterTemplate\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"col.filterTemplate; context: {$implicit: col}\\\"></ng-container>\\n                </ng-container>\\n                <p-dtCheckbox *ngIf=\\\"col.selectionMode=='multiple' && dt.showHeaderCheckbox === true\\\" (onChange)=\\\"dt.toggleRowsWithCheckbox($event)\\\" [checked]=\\\"dt.allSelected\\\" [disabled]=\\\"dt.isEmpty()\\\"></p-dtCheckbox>\\n            </th>\\n        </ng-template>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),\n        __metadata(\"design:paramtypes\", [DataTable])\n    ], ColumnHeaders);\n    return ColumnHeaders;\n}());\nexports.ColumnHeaders = ColumnHeaders;\nvar ColumnFooters = /** @class */ (function () {\n    function ColumnFooters(dt) {\n        this.dt = dt;\n    }\n    __decorate([\n        core_1.Input(\"pColumnFooters\"),\n        __metadata(\"design:type\", Array)\n    ], ColumnFooters.prototype, \"columns\", void 0);\n    ColumnFooters = __decorate([\n        core_1.Component({\n            selector: '[pColumnFooters]',\n            template: \"\\n        <td *ngFor=\\\"let col of columns\\\" [ngStyle]=\\\"col.footerStyle||col.style\\\" [class]=\\\"col.footerStyleClass||col.styleClass\\\"\\n            [attr.colspan]=\\\"col.colspan\\\" [attr.rowspan]=\\\"col.rowspan\\\"\\n            [ngClass]=\\\"{'ui-state-default':true, 'ui-helper-hidden': col.hidden}\\\">\\n            <span class=\\\"ui-column-footer\\\" *ngIf=\\\"!col.footerTemplate\\\">{{col.footer}}</span>\\n            <span class=\\\"ui-column-footer\\\" *ngIf=\\\"col.footerTemplate\\\">\\n                <ng-container *ngTemplateOutlet=\\\"col.footerTemplate; context: {$implicit: col}\\\"></ng-container>\\n            </span>\\n        </td>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),\n        __metadata(\"design:paramtypes\", [DataTable])\n    ], ColumnFooters);\n    return ColumnFooters;\n}());\nexports.ColumnFooters = ColumnFooters;\nvar TableBody = /** @class */ (function () {\n    function TableBody(dt) {\n        this.dt = dt;\n    }\n    TableBody.prototype.visibleColumns = function () {\n        return this.columns ? this.columns.filter(function (c) { return !c.hidden; }) : [];\n    };\n    __decorate([\n        core_1.Input(\"pTableBody\"),\n        __metadata(\"design:type\", Array)\n    ], TableBody.prototype, \"columns\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TableBody.prototype, \"data\", void 0);\n    TableBody = __decorate([\n        core_1.Component({\n            selector: '[pTableBody]',\n            template: \"\\n        <ng-template ngFor let-rowData [ngForOf]=\\\"data\\\" let-even=\\\"even\\\" let-odd=\\\"odd\\\" let-rowIndex=\\\"index\\\" [ngForTrackBy]=\\\"dt.rowTrackBy\\\">\\n            <tr #rowGroupElement class=\\\"ui-widget-header ui-rowgroup-header\\\"\\n                *ngIf=\\\"dt.rowGroupMode=='subheader' && (rowIndex === 0||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex - 1], dt.groupField)))\\\"\\n                (click)=\\\"dt.onRowGroupClick($event)\\\" [ngStyle]=\\\"{'cursor': dt.sortableRowGroup ? 'pointer' : 'auto'}\\\">\\n                <td [attr.colspan]=\\\"dt.visibleColumns().length\\\">\\n                    <a href=\\\"#\\\" *ngIf=\\\"dt.expandableRowGroups\\\" (click)=\\\"dt.toggleRowGroup($event,rowData)\\\">\\n                        <span class=\\\"fa fa-fw\\\" [ngClass]=\\\"dt.isRowGroupExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon\\\"></span>\\n                    </a>\\n                    <span class=\\\"ui-rowgroup-header-name\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"dt.rowGroupHeaderTemplate; context: {$implicit: rowData}\\\"></ng-container>\\n                    </span>\\n                </td>\\n            </tr>\\n            <tr #rowElement *ngIf=\\\"!dt.expandableRowGroups||dt.isRowGroupExpanded(rowData)\\\"\\n                    (click)=\\\"dt.handleRowClick($event, rowData, rowIndex)\\\" (dblclick)=\\\"dt.rowDblclick($event,rowData)\\\" (contextmenu)=\\\"dt.onRowRightClick($event,rowData)\\\" (touchend)=\\\"dt.handleRowTouchEnd($event)\\\"\\n                    [ngClass]=\\\"[even&&dt.rowGroupMode!='rowspan'? 'ui-datatable-even':'',\\n                                odd&&dt.rowGroupMode!='rowspan'?'ui-datatable-odd':'',\\n                                dt.isSelected(rowData)? 'ui-state-highlight': '',\\n                                dt.isRowExpanded(rowData) ? 'ui-expanded-row': '',\\n                                dt.getRowStyleClass(rowData,rowIndex)]\\\">\\n                <ng-template ngFor let-col [ngForOf]=\\\"columns\\\" let-colIndex=\\\"index\\\">\\n                    <td #cell *ngIf=\\\"!dt.rowGroupMode || (dt.rowGroupMode == 'subheader') ||\\n                        (dt.rowGroupMode=='rowspan' && ((dt.sortField==col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) || (dt.sortField!=col.field)))\\\"\\n                        [ngStyle]=\\\"col.bodyStyle||col.style\\\" [class]=\\\"col.bodyStyleClass||col.styleClass\\\" (click)=\\\"dt.switchCellToEditMode(cell,col,rowData)\\\"\\n                        [ngClass]=\\\"{'ui-editable-column':col.editable,'ui-selection-column':col.selectionMode, 'ui-helper-hidden': col.hidden}\\\"\\n                        [attr.rowspan]=\\\"(dt.rowGroupMode=='rowspan' && dt.sortField == col.field && dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].index == rowIndex) ? dt.rowGroupMetadata[dt.resolveFieldData(rowData,dt.sortField)].size : null\\\">\\n                        <span class=\\\"ui-column-title\\\" *ngIf=\\\"dt.responsive\\\">{{col.header}}</span>\\n                        <span class=\\\"ui-cell-data\\\" *ngIf=\\\"!col.bodyTemplate && !col.expander && !col.selectionMode\\\">{{dt.resolveFieldData(rowData,col.field)}}</span>\\n                        <span class=\\\"ui-cell-data\\\" *ngIf=\\\"col.bodyTemplate\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"col.bodyTemplate; context: {$implicit: col, rowData: rowData, rowIndex: (rowIndex + dt.first)}\\\"></ng-container>\\n                        </span>\\n                        <div class=\\\"ui-cell-editor\\\" *ngIf=\\\"col.editable\\\">\\n                            <input *ngIf=\\\"!col.editorTemplate\\\" type=\\\"text\\\" [(ngModel)]=\\\"rowData[col.field]\\\"\\n                                (keydown)=\\\"dt.onCellEditorKeydown($event, col, rowData, rowIndex)\\\" (blur)=\\\"dt.onCellEditorBlur($event, col, rowData, rowIndex)\\\"\\n                                (input)=\\\"dt.onCellEditorInput($event, col, rowData, rowIndex)\\\" (change)=\\\"dt.onCellEditorChange($event, col, rowData, rowIndex)\\\"\\n                                class=\\\"ui-inputtext ui-widget ui-state-default ui-corner-all\\\"/>\\n                            <a *ngIf=\\\"col.editorTemplate\\\" class=\\\"ui-cell-editor-proxy-focus\\\" href=\\\"#\\\" (focus)=\\\"dt.onCustomEditorFocusPrev($event)\\\"></a>\\n                            <ng-container *ngTemplateOutlet=\\\"col.editorTemplate; context: {$implicit: col, rowData: rowData, rowIndex: rowIndex}\\\"></ng-container>\\n                            <a *ngIf=\\\"col.editorTemplate\\\" class=\\\"ui-cell-editor-proxy-focus\\\" href=\\\"#\\\" (focus)=\\\"dt.onCustomEditorFocusNext($event)\\\"></a>\\n                        </div>\\n                        <a href=\\\"#\\\" *ngIf=\\\"col.expander\\\" (click)=\\\"dt.toggleRow(rowData,$event)\\\">\\n                            <span class=\\\"ui-row-toggler fa fa-fw ui-clickable\\\" [ngClass]=\\\"dt.isRowExpanded(rowData) ? dt.expandedIcon : dt.collapsedIcon\\\"></span>\\n                        </a>\\n                        <p-dtRadioButton *ngIf=\\\"col.selectionMode=='single'\\\" (onClick)=\\\"dt.selectRowWithRadio($event, rowData)\\\" [checked]=\\\"dt.isSelected(rowData)\\\"></p-dtRadioButton>\\n                        <p-dtCheckbox *ngIf=\\\"col.selectionMode=='multiple'\\\" (onChange)=\\\"dt.toggleRowWithCheckbox($event,rowData)\\\" [checked]=\\\"dt.isSelected(rowData)\\\"></p-dtCheckbox>\\n                    </td>\\n                </ng-template>\\n            </tr>\\n            <tr *ngIf=\\\"dt.expandableRows && dt.isRowExpanded(rowData)\\\" class=\\\"ui-expanded-row-content\\\">\\n                <td [attr.colspan]=\\\"dt.visibleColumns().length\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"dt.rowExpansionTemplate; context: {$implicit: rowData, rowIndex: rowIndex}\\\"></ng-container>\\n                </td>\\n            </tr>\\n            <tr class=\\\"ui-widget-header ui-rowgroup-footer\\\" *ngIf=\\\"dt.rowGroupFooterTemplate && dt.rowGroupMode=='subheader' && ((rowIndex === dt.dataToRender.length - 1)||(dt.resolveFieldData(rowData,dt.groupField) !== dt.resolveFieldData(dt.dataToRender[rowIndex + 1],dt.groupField))) && (!dt.expandableRowGroups || dt.isRowGroupExpanded(rowData))\\\">\\n                <ng-container *ngTemplateOutlet=\\\"dt.rowGroupFooterTemplate; context: {$implicit: rowData}\\\"></ng-container>\\n            </tr>\\n        </ng-template>\\n\\n        <tr *ngIf=\\\"dt.isEmpty()\\\" class=\\\"ui-widget-content ui-datatable-emptymessage-row\\\" [style.visibility]=\\\"dt.loading ? 'hidden' : 'visible'\\\">\\n            <td [attr.colspan]=\\\"dt.visibleColumns().length\\\" class=\\\"ui-datatable-emptymessage\\\">\\n                <span *ngIf=\\\"!dt.emptyMessageTemplate\\\">{{dt.emptyMessage}}</span>\\n                <ng-template *ngIf=\\\"dt.emptyMessageTemplate\\\">\\n                    <ng-container *ngTemplateOutlet=\\\"dt.emptyMessageTemplate\\\"></ng-container>\\n                </ng-template>\\n            </td>\\n        </tr>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),\n        __metadata(\"design:paramtypes\", [DataTable])\n    ], TableBody);\n    return TableBody;\n}());\nexports.TableBody = TableBody;\nvar ScrollableView = /** @class */ (function () {\n    function ScrollableView(dt, domHandler, el, renderer, zone) {\n        this.dt = dt;\n        this.domHandler = domHandler;\n        this.el = el;\n        this.renderer = renderer;\n        this.zone = zone;\n        this.onVirtualScroll = new core_1.EventEmitter();\n    }\n    ScrollableView.prototype.ngAfterViewInit = function () {\n        this.initScrolling();\n    };\n    ScrollableView.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        if (this.virtualScroll && !this.rowHeight) {\n            var row = this.domHandler.findSingle(this.scrollTable, 'tr.ui-widget-content:not(.ui-datatable-emptymessage-row)');\n            if (row) {\n                this.rowHeight = this.domHandler.getOuterHeight(row);\n            }\n        }\n        if (!this.frozen) {\n            this.zone.runOutsideAngular(function () {\n                setTimeout(function () {\n                    _this.alignScrollBar();\n                }, 1);\n            });\n        }\n    };\n    ScrollableView.prototype.initScrolling = function () {\n        var _this = this;\n        this.scrollHeader = this.scrollHeaderViewChild.nativeElement;\n        this.scrollHeaderBox = this.scrollHeaderBoxViewChild.nativeElement;\n        this.scrollBody = this.scrollBodyViewChild.nativeElement;\n        this.scrollTable = this.scrollTableViewChild.nativeElement;\n        this.scrollTableWrapper = this.scrollTableWrapperViewChild.nativeElement;\n        this.scrollFooter = this.scrollFooterViewChild ? this.scrollFooterViewChild.nativeElement : null;\n        this.scrollFooterBox = this.scrollFooterBoxViewChild ? this.scrollFooterBoxViewChild.nativeElement : null;\n        this.setScrollHeight();\n        if (!this.frozen) {\n            this.zone.runOutsideAngular(function () {\n                _this.scrollHeader.addEventListener('scroll', _this.onHeaderScroll.bind(_this));\n                _this.scrollBody.addEventListener('scroll', _this.onBodyScroll.bind(_this));\n            });\n        }\n        if (!this.frozen) {\n            this.alignScrollBar();\n        }\n        else {\n            this.scrollBody.style.paddingBottom = this.domHandler.calculateScrollbarWidth() + 'px';\n        }\n    };\n    ScrollableView.prototype.onBodyScroll = function (event) {\n        var _this = this;\n        var frozenView = this.el.nativeElement.previousElementSibling;\n        if (frozenView) {\n            var frozenScrollBody = this.domHandler.findSingle(frozenView, '.ui-datatable-scrollable-body');\n        }\n        this.scrollHeaderBox.style.marginLeft = -1 * this.scrollBody.scrollLeft + 'px';\n        if (this.scrollFooterBox) {\n            this.scrollFooterBox.style.marginLeft = -1 * this.scrollBody.scrollLeft + 'px';\n        }\n        if (frozenScrollBody) {\n            frozenScrollBody.scrollTop = this.scrollBody.scrollTop;\n        }\n        if (this.virtualScroll) {\n            var viewport = this.domHandler.getOuterHeight(this.scrollBody);\n            var tableHeight = this.domHandler.getOuterHeight(this.scrollTable);\n            var pageHeight_1 = this.rowHeight * this.dt.rows;\n            var virtualTableHeight = this.domHandler.getOuterHeight(this.scrollTableWrapper);\n            var pageCount = (virtualTableHeight / pageHeight_1) || 1;\n            if (this.scrollBody.scrollTop + viewport > parseFloat(this.scrollTable.style.top) + tableHeight || this.scrollBody.scrollTop < parseFloat(this.scrollTable.style.top)) {\n                var page_1 = Math.floor((this.scrollBody.scrollTop * pageCount) / (this.scrollBody.scrollHeight)) + 1;\n                this.onVirtualScroll.emit({\n                    page: page_1,\n                    callback: function () {\n                        _this.scrollTable.style.top = ((page_1 - 1) * pageHeight_1) + 'px';\n                    }\n                });\n            }\n        }\n    };\n    ScrollableView.prototype.setScrollHeight = function () {\n        if (this.dt.scrollHeight) {\n            if (this.dt.scrollHeight.indexOf('%') !== -1) {\n                this.scrollBody.style.visibility = 'hidden';\n                this.scrollBody.style.height = '100px'; //temporary height to calculate static height\n                var containerHeight = this.domHandler.getOuterHeight(this.dt.el.nativeElement.children[0]);\n                var relativeHeight = this.domHandler.getOuterHeight(this.dt.el.nativeElement.parentElement) * parseInt(this.dt.scrollHeight) / 100;\n                var staticHeight = containerHeight - 100; //total height of headers, footers, paginators\n                var scrollBodyHeight = (relativeHeight - staticHeight);\n                this.scrollBody.style.height = 'auto';\n                this.scrollBody.style.maxHeight = scrollBodyHeight + 'px';\n                this.scrollBody.style.visibility = 'visible';\n            }\n            else {\n                this.scrollBody.style.maxHeight = this.dt.scrollHeight;\n            }\n        }\n    };\n    ScrollableView.prototype.onHeaderScroll = function (event) {\n        this.scrollHeader.scrollLeft = 0;\n    };\n    ScrollableView.prototype.hasVerticalOverflow = function () {\n        return this.domHandler.getOuterHeight(this.scrollTable) > this.domHandler.getOuterHeight(this.scrollBody);\n    };\n    ScrollableView.prototype.alignScrollBar = function () {\n        var scrollBarWidth = this.hasVerticalOverflow() ? this.domHandler.calculateScrollbarWidth() : 0;\n        this.scrollHeaderBox.style.marginRight = scrollBarWidth + 'px';\n        if (this.scrollFooterBox) {\n            this.scrollFooterBox.style.marginRight = scrollBarWidth + 'px';\n        }\n    };\n    ScrollableView.prototype.ngOnDestroy = function () {\n        this.scrollHeader.removeEventListener('scroll', this.onHeaderScroll);\n        this.scrollBody.removeEventListener('scroll', this.onBodyScroll);\n    };\n    __decorate([\n        core_1.Input(\"pScrollableView\"),\n        __metadata(\"design:type\", Array)\n    ], ScrollableView.prototype, \"columns\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", shared_2.HeaderColumnGroup)\n    ], ScrollableView.prototype, \"headerColumnGroup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", shared_2.HeaderColumnGroup)\n    ], ScrollableView.prototype, \"footerColumnGroup\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollHeader'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollHeaderViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollHeaderBox'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollHeaderBoxViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollBody'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollBodyViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollTable'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollTableViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollTableWrapper'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollTableWrapperViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollFooter'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollFooterViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('scrollFooterBox'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollableView.prototype, \"scrollFooterBoxViewChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ScrollableView.prototype, \"frozen\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ScrollableView.prototype, \"width\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ScrollableView.prototype, \"virtualScroll\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], ScrollableView.prototype, \"onVirtualScroll\", void 0);\n    ScrollableView = __decorate([\n        core_1.Component({\n            selector: '[pScrollableView]',\n            template: \"\\n        <div #scrollHeader class=\\\"ui-widget-header ui-datatable-scrollable-header\\\" [ngStyle]=\\\"{'width': width}\\\">\\n            <div #scrollHeaderBox  class=\\\"ui-datatable-scrollable-header-box\\\">\\n                <table [ngClass]=\\\"dt.tableStyleClass\\\" [ngStyle]=\\\"dt.tableStyle\\\">\\n                    <thead class=\\\"ui-datatable-thead\\\">\\n                        <tr *ngIf=\\\"!headerColumnGroup\\\" class=\\\"ui-state-default\\\" [pColumnHeaders]=\\\"columns\\\"></tr>\\n                        <ng-template [ngIf]=\\\"headerColumnGroup\\\">\\n                            <tr *ngFor=\\\"let headerRow of headerColumnGroup.rows\\\" class=\\\"ui-state-default\\\" [pColumnHeaders]=\\\"headerRow.columns\\\"></tr>\\n                        </ng-template>\\n                    </thead>\\n                    <tbody *ngIf=\\\"dt.frozenValue\\\" [ngClass]=\\\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (dt.rowHover||dt.selectionMode)}\\\" [pTableBody]=\\\"columns\\\" [data]=\\\"dt.frozenValue\\\"></tbody>\\n                </table>\\n            </div>\\n        </div>\\n        <div #scrollBody class=\\\"ui-datatable-scrollable-body\\\" [ngStyle]=\\\"{'width': width}\\\">\\n            <div #scrollTableWrapper class=\\\"ui-datatable-scrollable-table-wrapper\\\" style=\\\"position:relative\\\">\\n                <table #scrollTable [class]=\\\"dt.tableStyleClass\\\" [ngStyle]=\\\"dt.tableStyle\\\" [ngClass]=\\\"{'ui-datatable-virtual-table':virtualScroll}\\\" style=\\\"top:0px\\\">\\n                    <colgroup class=\\\"ui-datatable-scrollable-colgroup\\\">\\n                        <col *ngFor=\\\"let col of columns\\\" [ngStyle]=\\\"col.headerStyle||col.style\\\" [ngClass]=\\\"{'ui-helper-hidden': col.hidden}\\\"/>\\n                    </colgroup>\\n                    <tbody [ngClass]=\\\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (dt.rowHover||dt.selectionMode)}\\\" [pTableBody]=\\\"columns\\\" [data]=\\\"dt.dataToRender\\\"></tbody>\\n                </table>\\n            </div>\\n        </div>\\n        <div #scrollFooter class=\\\"ui-widget-header ui-datatable-scrollable-footer\\\" [ngStyle]=\\\"{'width': width}\\\" *ngIf=\\\"dt.hasFooter()\\\">\\n            <div #scrollFooterBox  class=\\\"ui-datatable-scrollable-footer-box\\\">\\n                <table [ngClass]=\\\"dt.tableStyleClass\\\" [ngStyle]=\\\"dt.tableStyle\\\">\\n                    <tfoot class=\\\"ui-datatable-tfoot\\\">\\n                        <tr *ngIf=\\\"!footerColumnGroup\\\" [pColumnFooters]=\\\"columns\\\" class=\\\"ui-state-default\\\"></tr>\\n                        <ng-template [ngIf]=\\\"footerColumnGroup\\\">\\n                            <tr *ngFor=\\\"let footerRow of footerColumnGroup.rows\\\" class=\\\"ui-state-default\\\" [pColumnFooters]=\\\"footerRow.columns\\\"></tr>\\n                        </ng-template>\\n                    </tfoot>\\n                </table>\\n            </div>\\n        </div>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return DataTable; }))),\n        __metadata(\"design:paramtypes\", [DataTable, domhandler_1.DomHandler, core_1.ElementRef, core_1.Renderer2, core_1.NgZone])\n    ], ScrollableView);\n    return ScrollableView;\n}());\nexports.ScrollableView = ScrollableView;\nvar DataTable = /** @class */ (function () {\n    function DataTable(el, domHandler, differs, renderer, changeDetector, objectUtils, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.differs = differs;\n        this.renderer = renderer;\n        this.changeDetector = changeDetector;\n        this.objectUtils = objectUtils;\n        this.zone = zone;\n        this.pageLinks = 5;\n        this.selectionChange = new core_1.EventEmitter();\n        this.showHeaderCheckbox = true;\n        this.onRowClick = new core_1.EventEmitter();\n        this.onRowSelect = new core_1.EventEmitter();\n        this.onRowUnselect = new core_1.EventEmitter();\n        this.onRowDblclick = new core_1.EventEmitter();\n        this.onHeaderCheckboxToggle = new core_1.EventEmitter();\n        this.onContextMenuSelect = new core_1.EventEmitter();\n        this.filterDelay = 300;\n        this.onLazyLoad = new core_1.EventEmitter();\n        this.columnResizeMode = 'fit';\n        this.onColResize = new core_1.EventEmitter();\n        this.onColReorder = new core_1.EventEmitter();\n        this.sortMode = 'single';\n        this.defaultSortOrder = 1;\n        this.csvSeparator = ',';\n        this.exportFilename = 'download';\n        this.emptyMessage = 'No records found';\n        this.paginatorPosition = 'bottom';\n        this.alwaysShowPaginator = true;\n        this.metaKeySelection = true;\n        this.rowTrackBy = function (index, item) { return item; };\n        this.immutable = true;\n        this.compareSelectionBy = 'deepEquals';\n        this.onEditInit = new core_1.EventEmitter();\n        this.onEditComplete = new core_1.EventEmitter();\n        this.onEdit = new core_1.EventEmitter();\n        this.onEditCancel = new core_1.EventEmitter();\n        this.onPage = new core_1.EventEmitter();\n        this.onSort = new core_1.EventEmitter();\n        this.onFilter = new core_1.EventEmitter();\n        this.rowExpandMode = 'multiple';\n        this.expandedIcon = 'fa-chevron-circle-down';\n        this.collapsedIcon = 'fa-chevron-circle-right';\n        this.tabindex = 1;\n        this.sortableRowGroup = true;\n        this.filters = {};\n        this.loadingIcon = 'fa-circle-o-notch';\n        this.virtualScrollDelay = 500;\n        this.rowGroupExpandMode = 'multiple';\n        this.valueChange = new core_1.EventEmitter();\n        this.firstChange = new core_1.EventEmitter();\n        this.onRowExpand = new core_1.EventEmitter();\n        this.onRowCollapse = new core_1.EventEmitter();\n        this.onRowGroupExpand = new core_1.EventEmitter();\n        this.onRowGroupCollapse = new core_1.EventEmitter();\n        this.page = 0;\n        this.columnsChanged = false;\n        this._first = 0;\n        this._sortOrder = 1;\n        this.filterConstraints = {\n            startsWith: function (value, filter) {\n                if (filter === undefined || filter === null || filter.trim() === '') {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                var filterValue = filter.toLowerCase();\n                return value.toString().toLowerCase().slice(0, filterValue.length) === filterValue;\n            },\n            contains: function (value, filter) {\n                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                return value.toString().toLowerCase().indexOf(filter.toLowerCase()) !== -1;\n            },\n            endsWith: function (value, filter) {\n                if (filter === undefined || filter === null || filter.trim() === '') {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                var filterValue = filter.toString().toLowerCase();\n                return value.toString().toLowerCase().indexOf(filterValue, value.toString().length - filterValue.length) !== -1;\n            },\n            equals: function (value, filter) {\n                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                return value.toString().toLowerCase() == filter.toString().toLowerCase();\n            },\n            notEquals: function (value, filter) {\n                if (filter === undefined || filter === null || (typeof filter === 'string' && filter.trim() === '')) {\n                    return false;\n                }\n                if (value === undefined || value === null) {\n                    return true;\n                }\n                return value.toString().toLowerCase() != filter.toString().toLowerCase();\n            },\n            in: function (value, filter) {\n                if (filter === undefined || filter === null || filter.length === 0) {\n                    return true;\n                }\n                if (value === undefined || value === null) {\n                    return false;\n                }\n                for (var i = 0; i < filter.length; i++) {\n                    if (filter[i] === value)\n                        return true;\n                }\n                return false;\n            }\n        };\n        this.differ = differs.find([]).create(null);\n    }\n    DataTable.prototype.ngOnInit = function () {\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n    };\n    DataTable.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.initColumns();\n        this.initColumnGroups();\n        this.columnsSubscription = this.cols.changes.subscribe(function (_) {\n            _this.initColumns();\n            _this.changeDetector.markForCheck();\n        });\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'rowexpansion':\n                    _this.rowExpansionTemplate = item.template;\n                    break;\n                case 'rowgroupheader':\n                    _this.rowGroupHeaderTemplate = item.template;\n                    break;\n                case 'rowgroupfooter':\n                    _this.rowGroupFooterTemplate = item.template;\n                    break;\n                case 'emptymessage':\n                    _this.emptyMessageTemplate = item.template;\n                    break;\n                case 'paginatorLeft':\n                    _this.paginatorLeftTemplate = item.template;\n                    break;\n                case 'paginatorRight':\n                    _this.paginatorRightTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    DataTable.prototype.ngAfterViewChecked = function () {\n        if (this.columnsChanged && this.el.nativeElement.offsetParent) {\n            if (this.resizableColumns) {\n                this.initResizableColumns();\n            }\n            if (this.reorderableColumns) {\n                this.initColumnReordering();\n            }\n            this.columnsChanged = false;\n        }\n        if (this.totalRecordsChanged && this.virtualScroll && this.virtualScrollableTableWrapper && this.virtualScrollableTableWrapper.offsetParent) {\n            var row = this.domHandler.findSingle(this.virtualScrollableTableWrapper, 'tr.ui-widget-content');\n            var rowHeight = this.domHandler.getOuterHeight(row);\n            this.virtualTableHeight = this._totalRecords * rowHeight;\n            this.virtualScrollableTableWrapper.style.height = this.virtualTableHeight + 'px';\n            this.totalRecordsChanged = false;\n        }\n    };\n    DataTable.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.globalFilter) {\n            this.globalFilterFunction = this.renderer.listen(this.globalFilter, 'keyup', function () {\n                if (_this.filterTimeout) {\n                    clearTimeout(_this.filterTimeout);\n                }\n                _this.filterTimeout = setTimeout(function () {\n                    _this._filter();\n                    _this.filterTimeout = null;\n                }, _this.filterDelay);\n            });\n        }\n        this.virtualScrollableTableWrapper = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-datatable-scrollable-table-wrapper');\n        this.initialized = true;\n    };\n    Object.defineProperty(DataTable.prototype, \"multiSortMeta\", {\n        get: function () {\n            return this._multiSortMeta;\n        },\n        set: function (val) {\n            this._multiSortMeta = val;\n            if (this.sortMode === 'multiple') {\n                this.sortMultiple();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"sortField\", {\n        get: function () {\n            return this._sortField;\n        },\n        set: function (val) {\n            this._sortField = val;\n            if (this.sortMode === 'single') {\n                this.sortSingle();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"sortOrder\", {\n        get: function () {\n            return this._sortOrder;\n        },\n        set: function (val) {\n            this._sortOrder = val;\n            if (this.sortMode === 'single') {\n                this.sortSingle();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            if (this.immutable) {\n                this._value = val ? val.slice() : null;\n                this.handleDataChange();\n            }\n            else {\n                this._value = val;\n            }\n            this.valueChange.emit(this.value);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"first\", {\n        get: function () {\n            return this._first;\n        },\n        set: function (val) {\n            var shouldPaginate = this.initialized && this._first !== val;\n            this._first = val;\n            if (shouldPaginate) {\n                this.paginate();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"totalRecords\", {\n        get: function () {\n            return this._totalRecords;\n        },\n        set: function (val) {\n            this._totalRecords = val;\n            this.totalRecordsChanged = true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DataTable.prototype, \"selection\", {\n        get: function () {\n            return this._selection;\n        },\n        set: function (val) {\n            this._selection = val;\n            if (this.dataKey && !this.preventSelectionKeysPropagation) {\n                this.selectionKeys = {};\n                if (this._selection) {\n                    if (Array.isArray(this._selection)) {\n                        for (var _i = 0, _a = this._selection; _i < _a.length; _i++) {\n                            var data = _a[_i];\n                            this.selectionKeys[String(this.objectUtils.resolveFieldData(data, this.dataKey))] = 1;\n                        }\n                    }\n                    else {\n                        this.selectionKeys[String(this.objectUtils.resolveFieldData(this._selection, this.dataKey))] = 1;\n                    }\n                }\n            }\n            this.preventSelectionKeysPropagation = false;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataTable.prototype.ngDoCheck = function () {\n        if (!this.immutable) {\n            var changes = this.differ.diff(this.value);\n            if (changes) {\n                this.handleDataChange();\n            }\n        }\n    };\n    DataTable.prototype.handleDataChange = function () {\n        var _this = this;\n        if (this.paginator) {\n            this.updatePaginator();\n        }\n        if (this.virtualScroll && this.virtualScrollCallback) {\n            this.virtualScrollCallback();\n        }\n        if (!this.lazy) {\n            if (this.hasFilter()) {\n                this._filter();\n            }\n            if (this.preventSortPropagation) {\n                this.preventSortPropagation = false;\n            }\n            else if (this.sortField || this.multiSortMeta) {\n                if (!this.sortColumn && this.columns) {\n                    this.sortColumn = this.columns.find(function (col) { return col.field === _this.sortField && col.sortable === 'custom'; });\n                }\n                if (this.sortMode == 'single')\n                    this.sortSingle();\n                else if (this.sortMode == 'multiple')\n                    this.sortMultiple();\n            }\n        }\n        this.updateDataToRender(this.filteredValue || this.value);\n    };\n    DataTable.prototype.initColumns = function () {\n        this.columns = this.cols.toArray();\n        this.initScrollableColumns();\n        this.columnsChanged = true;\n    };\n    DataTable.prototype.initScrollableColumns = function () {\n        this.scrollableColumns = [];\n        this.frozenColumns = [];\n        for (var _i = 0, _a = this.columns; _i < _a.length; _i++) {\n            var col = _a[_i];\n            if (col.frozen)\n                this.frozenColumns.push(col);\n            else\n                this.scrollableColumns.push(col);\n        }\n    };\n    DataTable.prototype.initColumnGroups = function () {\n        var headerColumnsGroups = this.headerColumnGroups.toArray();\n        var footerColumnsGroups = this.footerColumnGroups.toArray();\n        for (var _i = 0, headerColumnsGroups_1 = headerColumnsGroups; _i < headerColumnsGroups_1.length; _i++) {\n            var columnGroup = headerColumnsGroups_1[_i];\n            if (columnGroup.frozen)\n                this.frozenHeaderColumnGroup = columnGroup;\n            else\n                this.scrollableHeaderColumnGroup = columnGroup;\n        }\n        for (var _a = 0, footerColumnsGroups_1 = footerColumnsGroups; _a < footerColumnsGroups_1.length; _a++) {\n            var columnGroup = footerColumnsGroups_1[_a];\n            if (columnGroup.frozen)\n                this.frozenFooterColumnGroup = columnGroup;\n            else\n                this.scrollableFooterColumnGroup = columnGroup;\n        }\n    };\n    DataTable.prototype.resolveFieldData = function (data, field) {\n        return this.objectUtils.resolveFieldData(data, field);\n    };\n    DataTable.prototype.updateRowGroupMetadata = function () {\n        this.rowGroupMetadata = {};\n        if (this.dataToRender) {\n            for (var i = 0; i < this.dataToRender.length; i++) {\n                var rowData = this.dataToRender[i];\n                var group = this.resolveFieldData(rowData, this.sortField);\n                if (i == 0) {\n                    this.rowGroupMetadata[group] = { index: 0, size: 1 };\n                }\n                else {\n                    var previousRowData = this.dataToRender[i - 1];\n                    var previousRowGroup = this.resolveFieldData(previousRowData, this.sortField);\n                    if (group === previousRowGroup) {\n                        this.rowGroupMetadata[group].size++;\n                    }\n                    else {\n                        this.rowGroupMetadata[group] = { index: i, size: 1 };\n                    }\n                }\n            }\n        }\n    };\n    DataTable.prototype.updatePaginator = function () {\n        //total records\n        this.updateTotalRecords();\n        //first\n        if (this.totalRecords && this.first >= this.totalRecords) {\n            var numberOfPages = Math.ceil(this.totalRecords / this.rows);\n            this._first = Math.max((numberOfPages - 1) * this.rows, 0);\n        }\n    };\n    DataTable.prototype.updateTotalRecords = function () {\n        this.totalRecords = this.lazy ? this.totalRecords : (this.value ? this.value.length : 0);\n    };\n    DataTable.prototype.onPageChange = function (event) {\n        this._first = event.first;\n        this.firstChange.emit(this.first);\n        this.rows = event.rows;\n        this.paginate();\n    };\n    DataTable.prototype.paginate = function () {\n        if (this.lazy)\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        else\n            this.updateDataToRender(this.filteredValue || this.value);\n        this.onPage.emit({\n            first: this.first,\n            rows: this.rows\n        });\n    };\n    DataTable.prototype.updateDataToRender = function (datasource) {\n        if ((this.paginator || this.virtualScroll) && datasource) {\n            this.dataToRender = [];\n            var startIndex = this.lazy ? 0 : this.first;\n            var endIndex = this.virtualScroll ? this.first + this.rows * 2 : startIndex + this.rows;\n            for (var i = startIndex; i < endIndex; i++) {\n                if (i >= datasource.length) {\n                    break;\n                }\n                this.dataToRender.push(datasource[i]);\n            }\n        }\n        else {\n            this.dataToRender = datasource;\n        }\n        if (this.rowGroupMode) {\n            this.updateRowGroupMetadata();\n        }\n        this.changeDetector.markForCheck();\n    };\n    DataTable.prototype.onVirtualScroll = function (event) {\n        var _this = this;\n        this._first = (event.page - 1) * this.rows;\n        this.virtualScrollCallback = event.callback;\n        this.zone.run(function () {\n            if (_this.virtualScrollTimer) {\n                clearTimeout(_this.virtualScrollTimer);\n            }\n            _this.virtualScrollTimer = setTimeout(function () {\n                if (_this.lazy)\n                    _this.onLazyLoad.emit(_this.createLazyLoadMetadata());\n                else\n                    _this.updateDataToRender(_this.filteredValue || _this.value);\n            }, _this.virtualScrollDelay);\n        });\n    };\n    DataTable.prototype.onHeaderKeydown = function (event, column) {\n        if (event.keyCode == 13) {\n            this.sort(event, column);\n            event.preventDefault();\n        }\n    };\n    DataTable.prototype.onHeaderMousedown = function (event, header) {\n        if (this.reorderableColumns) {\n            if (event.target.nodeName !== 'INPUT') {\n                header.draggable = true;\n            }\n            else if (event.target.nodeName === 'INPUT') {\n                header.draggable = false;\n            }\n        }\n    };\n    DataTable.prototype.sort = function (event, column) {\n        if (!column.sortable) {\n            return;\n        }\n        var targetNode = event.target;\n        if (this.domHandler.hasClass(targetNode, 'ui-sortable-column') || this.domHandler.hasClass(targetNode, 'ui-column-title') || this.domHandler.hasClass(targetNode, 'ui-sortable-column-icon')) {\n            if (!this.immutable) {\n                this.preventSortPropagation = true;\n            }\n            var columnSortField = column.sortField || column.field;\n            this._sortOrder = (this.sortField === columnSortField) ? this.sortOrder * -1 : this.defaultSortOrder;\n            this._sortField = columnSortField;\n            this.sortColumn = column;\n            var metaKey = event.metaKey || event.ctrlKey;\n            if (this.sortMode == 'multiple') {\n                if (!this.multiSortMeta || !metaKey) {\n                    this._multiSortMeta = [];\n                }\n                this.addSortMeta({ field: this.sortField, order: this.sortOrder });\n            }\n            if (this.lazy) {\n                this._first = 0;\n                this.onLazyLoad.emit(this.createLazyLoadMetadata());\n            }\n            else {\n                if (this.sortMode == 'multiple')\n                    this.sortMultiple();\n                else\n                    this.sortSingle();\n            }\n            this.onSort.emit({\n                field: this.sortField,\n                order: this.sortOrder,\n                multisortmeta: this.multiSortMeta\n            });\n        }\n        this.updateDataToRender(this.filteredValue || this.value);\n    };\n    DataTable.prototype.sortSingle = function () {\n        var _this = this;\n        if (this.value) {\n            if (this.sortColumn && this.sortColumn.sortable === 'custom') {\n                this.preventSortPropagation = true;\n                this.sortColumn.sortFunction.emit({\n                    field: this.sortField,\n                    order: this.sortOrder\n                });\n            }\n            else {\n                this.value.sort(function (data1, data2) {\n                    var value1 = _this.resolveFieldData(data1, _this.sortField);\n                    var value2 = _this.resolveFieldData(data2, _this.sortField);\n                    var result = null;\n                    if (value1 == null && value2 != null)\n                        result = -1;\n                    else if (value1 != null && value2 == null)\n                        result = 1;\n                    else if (value1 == null && value2 == null)\n                        result = 0;\n                    else if (typeof value1 === 'string' && typeof value2 === 'string')\n                        result = value1.localeCompare(value2);\n                    else\n                        result = (value1 < value2) ? -1 : (value1 > value2) ? 1 : 0;\n                    return (_this.sortOrder * result);\n                });\n            }\n            this._first = 0;\n            if (this.hasFilter()) {\n                this._filter();\n            }\n        }\n    };\n    DataTable.prototype.sortMultiple = function () {\n        var _this = this;\n        if (this.value) {\n            this.value.sort(function (data1, data2) {\n                return _this.multisortField(data1, data2, _this.multiSortMeta, 0);\n            });\n            if (this.hasFilter()) {\n                this._filter();\n            }\n        }\n    };\n    DataTable.prototype.multisortField = function (data1, data2, multiSortMeta, index) {\n        var value1 = this.resolveFieldData(data1, multiSortMeta[index].field);\n        var value2 = this.resolveFieldData(data2, multiSortMeta[index].field);\n        var result = null;\n        if (typeof value1 == 'string' || value1 instanceof String) {\n            if (value1.localeCompare && (value1 != value2)) {\n                return (multiSortMeta[index].order * value1.localeCompare(value2));\n            }\n        }\n        else {\n            result = (value1 < value2) ? -1 : 1;\n        }\n        if (value1 == value2) {\n            return (multiSortMeta.length - 1) > (index) ? (this.multisortField(data1, data2, multiSortMeta, index + 1)) : 0;\n        }\n        return (multiSortMeta[index].order * result);\n    };\n    DataTable.prototype.addSortMeta = function (meta) {\n        var index = -1;\n        for (var i = 0; i < this.multiSortMeta.length; i++) {\n            if (this.multiSortMeta[i].field === meta.field) {\n                index = i;\n                break;\n            }\n        }\n        if (index >= 0)\n            this.multiSortMeta[index] = meta;\n        else\n            this.multiSortMeta.push(meta);\n    };\n    DataTable.prototype.isSorted = function (column) {\n        if (!column.sortable) {\n            return false;\n        }\n        var columnSortField = column.sortField || column.field;\n        if (this.sortMode === 'single') {\n            return (this.sortField && columnSortField === this.sortField);\n        }\n        else if (this.sortMode === 'multiple') {\n            var sorted = false;\n            if (this.multiSortMeta) {\n                for (var i = 0; i < this.multiSortMeta.length; i++) {\n                    if (this.multiSortMeta[i].field == columnSortField) {\n                        sorted = true;\n                        break;\n                    }\n                }\n            }\n            return sorted;\n        }\n    };\n    DataTable.prototype.getSortOrder = function (column) {\n        var order = 0;\n        var columnSortField = column.sortField || column.field;\n        if (this.sortMode === 'single') {\n            if (this.sortField && columnSortField === this.sortField) {\n                order = this.sortOrder;\n            }\n        }\n        else if (this.sortMode === 'multiple') {\n            if (this.multiSortMeta) {\n                for (var i = 0; i < this.multiSortMeta.length; i++) {\n                    if (this.multiSortMeta[i].field == columnSortField) {\n                        order = this.multiSortMeta[i].order;\n                        break;\n                    }\n                }\n            }\n        }\n        return order;\n    };\n    DataTable.prototype.onRowGroupClick = function (event) {\n        if (this.rowGroupToggleClick) {\n            this.rowGroupToggleClick = false;\n            return;\n        }\n        if (this.sortableRowGroup) {\n            var targetNode = event.target.nodeName;\n            if ((targetNode == 'TD' || (targetNode == 'SPAN' && !this.domHandler.hasClass(event.target, 'ui-clickable')))) {\n                if (this.sortField != this.groupField) {\n                    this._sortField = this.groupField;\n                    this.sortSingle();\n                }\n                else {\n                    this._sortOrder = -1 * this.sortOrder;\n                    this.sortSingle();\n                }\n            }\n        }\n    };\n    DataTable.prototype.clearSelectionRange = function (event) {\n        var rangeStart, rangeEnd;\n        if (this.rangeRowIndex > this.anchorRowIndex) {\n            rangeStart = this.anchorRowIndex;\n            rangeEnd = this.rangeRowIndex;\n        }\n        else if (this.rangeRowIndex < this.anchorRowIndex) {\n            rangeStart = this.rangeRowIndex;\n            rangeEnd = this.anchorRowIndex;\n        }\n        else {\n            rangeStart = this.rangeRowIndex;\n            rangeEnd = this.rangeRowIndex;\n        }\n        var _loop_1 = function (i) {\n            var rangeRowData = this_1.dataToRender[i];\n            var selectionIndex = this_1.findIndexInSelection(rangeRowData);\n            this_1._selection = this_1.selection.filter(function (val, i) { return i != selectionIndex; });\n            var dataKeyValue = this_1.dataKey ? String(this_1.resolveFieldData(rangeRowData, this_1.dataKey)) : null;\n            if (dataKeyValue) {\n                delete this_1.selectionKeys[dataKeyValue];\n            }\n            this_1.onRowUnselect.emit({ originalEvent: event, data: rangeRowData, type: 'row' });\n        };\n        var this_1 = this;\n        for (var i = rangeStart; i <= rangeEnd; i++) {\n            _loop_1(i);\n        }\n    };\n    DataTable.prototype.selectRange = function (event, rowIndex) {\n        var rangeStart, rangeEnd;\n        if (this.anchorRowIndex > rowIndex) {\n            rangeStart = rowIndex;\n            rangeEnd = this.anchorRowIndex;\n        }\n        else if (this.anchorRowIndex < rowIndex) {\n            rangeStart = this.anchorRowIndex;\n            rangeEnd = rowIndex;\n        }\n        else {\n            rangeStart = rowIndex;\n            rangeEnd = rowIndex;\n        }\n        for (var i = rangeStart; i <= rangeEnd; i++) {\n            var rangeRowData = this.dataToRender[i];\n            this._selection = this.selection.concat([rangeRowData]);\n            this.selectionChange.emit(this.selection);\n            var dataKeyValue = this.dataKey ? String(this.resolveFieldData(rangeRowData, this.dataKey)) : null;\n            if (dataKeyValue) {\n                this.selectionKeys[dataKeyValue] = 1;\n            }\n            this.onRowSelect.emit({ originalEvent: event, data: rangeRowData, type: 'row' });\n        }\n    };\n    DataTable.prototype.handleRowClick = function (event, rowData, index) {\n        if (this.preventRowClickPropagation) {\n            this.preventRowClickPropagation = false;\n            return;\n        }\n        var targetNode = event.target.nodeName;\n        if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || (this.domHandler.hasClass(event.target, 'ui-clickable'))) {\n            return;\n        }\n        this.onRowClick.next({ originalEvent: event, data: rowData });\n        if (this.selectionMode) {\n            if (this.isMultipleSelectionMode() && event.shiftKey && this.anchorRowIndex != null) {\n                this.domHandler.clearSelection();\n                if (this.rangeRowIndex != null) {\n                    this.clearSelectionRange(event);\n                }\n                this.rangeRowIndex = index;\n                this.selectRange(event, index);\n            }\n            else {\n                var selected = this.isSelected(rowData);\n                var metaSelection = this.rowTouched ? false : this.metaKeySelection;\n                var dataKeyValue = this.dataKey ? String(this.resolveFieldData(rowData, this.dataKey)) : null;\n                this.anchorRowIndex = index;\n                this.rangeRowIndex = index;\n                if (metaSelection) {\n                    var metaKey = event.metaKey || event.ctrlKey;\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this._selection = null;\n                            this.selectionKeys = {};\n                            this.selectionChange.emit(null);\n                        }\n                        else {\n                            var selectionIndex_1 = this.findIndexInSelection(rowData);\n                            this._selection = this.selection.filter(function (val, i) { return i != selectionIndex_1; });\n                            this.selectionChange.emit(this.selection);\n                            if (dataKeyValue) {\n                                delete this.selectionKeys[dataKeyValue];\n                            }\n                        }\n                        this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                    }\n                    else {\n                        if (this.isSingleSelectionMode()) {\n                            this._selection = rowData;\n                            this.selectionChange.emit(rowData);\n                            if (dataKeyValue) {\n                                this.selectionKeys = {};\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                        else if (this.isMultipleSelectionMode()) {\n                            if (metaKey) {\n                                this._selection = this.selection || [];\n                            }\n                            else {\n                                this._selection = [];\n                                this.selectionKeys = {};\n                            }\n                            this._selection = this.selection.concat([rowData]);\n                            this.selectionChange.emit(this.selection);\n                            if (dataKeyValue) {\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                        this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                    }\n                }\n                else {\n                    if (this.isSingleSelectionMode()) {\n                        if (selected) {\n                            this._selection = null;\n                            this.selectionKeys = {};\n                            this.selectionChange.emit(this.selection);\n                            this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                        }\n                        else {\n                            this._selection = rowData;\n                            this.selectionChange.emit(this.selection);\n                            this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                            if (dataKeyValue) {\n                                this.selectionKeys = {};\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                    }\n                    else {\n                        if (selected) {\n                            var selectionIndex_2 = this.findIndexInSelection(rowData);\n                            this._selection = this.selection.filter(function (val, i) { return i != selectionIndex_2; });\n                            this.selectionChange.emit(this.selection);\n                            this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                            if (dataKeyValue) {\n                                delete this.selectionKeys[dataKeyValue];\n                            }\n                        }\n                        else {\n                            this._selection = (this.selection || []).concat([rowData]);\n                            this.selectionChange.emit(this.selection);\n                            this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'row' });\n                            if (dataKeyValue) {\n                                this.selectionKeys[dataKeyValue] = 1;\n                            }\n                        }\n                    }\n                }\n            }\n            this.preventSelectionKeysPropagation = true;\n        }\n        this.rowTouched = false;\n    };\n    DataTable.prototype.handleRowTouchEnd = function (event) {\n        this.rowTouched = true;\n    };\n    DataTable.prototype.selectRowWithRadio = function (event, rowData) {\n        if (this.selection != rowData) {\n            this._selection = rowData;\n            this.selectionChange.emit(this.selection);\n            this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'radiobutton' });\n            if (this.dataKey) {\n                this.selectionKeys = {};\n                this.selectionKeys[String(this.resolveFieldData(rowData, this.dataKey))] = 1;\n            }\n        }\n        else {\n            this._selection = null;\n            this.selectionChange.emit(this.selection);\n            this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'radiobutton' });\n        }\n        this.preventSelectionKeysPropagation = true;\n        this.preventRowClickPropagation = true;\n    };\n    DataTable.prototype.toggleRowWithCheckbox = function (event, rowData) {\n        var selectionIndex = this.findIndexInSelection(rowData);\n        this.selection = this.selection || [];\n        var dataKeyValue = this.dataKey ? String(this.resolveFieldData(rowData, this.dataKey)) : null;\n        if (selectionIndex != -1) {\n            this._selection = this.selection.filter(function (val, i) { return i != selectionIndex; });\n            this.selectionChange.emit(this.selection);\n            this.onRowUnselect.emit({ originalEvent: event, data: rowData, type: 'checkbox' });\n            if (dataKeyValue) {\n                delete this.selectionKeys[dataKeyValue];\n            }\n        }\n        else {\n            this._selection = this.selection.concat([rowData]);\n            this.selectionChange.emit(this.selection);\n            this.onRowSelect.emit({ originalEvent: event, data: rowData, type: 'checkbox' });\n            if (dataKeyValue) {\n                this.selectionKeys[dataKeyValue] = 1;\n            }\n        }\n        this.preventSelectionKeysPropagation = true;\n        this.preventRowClickPropagation = true;\n    };\n    DataTable.prototype.toggleRowsWithCheckbox = function (event) {\n        if (event.checked)\n            this.selection = this.headerCheckboxToggleAllPages ? this.value.slice() : this.dataToRender.slice();\n        else\n            this.selection = [];\n        this.selectionChange.emit(this.selection);\n        this.onHeaderCheckboxToggle.emit({ originalEvent: event, checked: event.checked });\n    };\n    DataTable.prototype.onRowRightClick = function (event, rowData) {\n        if (this.contextMenu) {\n            var selectionIndex = this.findIndexInSelection(rowData);\n            var selected = selectionIndex != -1;\n            var dataKeyValue = this.dataKey ? String(this.resolveFieldData(rowData, this.dataKey)) : null;\n            if (!selected) {\n                if (this.isSingleSelectionMode()) {\n                    this.selection = rowData;\n                    this.selectionChange.emit(rowData);\n                }\n                else if (this.isMultipleSelectionMode()) {\n                    this.selection = [rowData];\n                    this.selectionChange.emit(this.selection);\n                }\n                if (this.dataKey) {\n                    this.selectionKeys[String(this.resolveFieldData(rowData, this.dataKey))] = 1;\n                    this.preventSelectionKeysPropagation = true;\n                }\n            }\n            this.contextMenu.show(event);\n            this.onContextMenuSelect.emit({ originalEvent: event, data: rowData });\n        }\n    };\n    DataTable.prototype.rowDblclick = function (event, rowData) {\n        this.onRowDblclick.emit({ originalEvent: event, data: rowData });\n    };\n    DataTable.prototype.isSingleSelectionMode = function () {\n        return this.selectionMode === 'single';\n    };\n    DataTable.prototype.isMultipleSelectionMode = function () {\n        return this.selectionMode === 'multiple';\n    };\n    DataTable.prototype.findIndexInSelection = function (rowData) {\n        var index = -1;\n        if (this.selection) {\n            for (var i = 0; i < this.selection.length; i++) {\n                if (this.equals(rowData, this.selection[i])) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    DataTable.prototype.isSelected = function (rowData) {\n        if (rowData && this.selection) {\n            if (this.dataKey) {\n                return this.selectionKeys[this.objectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;\n            }\n            else {\n                if (this.selection instanceof Array)\n                    return this.findIndexInSelection(rowData) > -1;\n                else\n                    return this.equals(rowData, this.selection);\n            }\n        }\n        return false;\n    };\n    DataTable.prototype.equals = function (data1, data2) {\n        return this.compareSelectionBy === 'equals' ? (data1 === data2) : this.objectUtils.equals(data1, data2, this.dataKey);\n    };\n    Object.defineProperty(DataTable.prototype, \"allSelected\", {\n        get: function () {\n            if (this.headerCheckboxToggleAllPages) {\n                return this.selection && this.value && this.selection.length === this.value.length;\n            }\n            else {\n                var val = true;\n                if (this.dataToRender && this.selection && (this.dataToRender.length <= this.selection.length)) {\n                    for (var _i = 0, _a = this.dataToRender; _i < _a.length; _i++) {\n                        var data = _a[_i];\n                        if (!this.isSelected(data)) {\n                            val = false;\n                            break;\n                        }\n                    }\n                }\n                else {\n                    val = false;\n                }\n                return val;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataTable.prototype.onFilterKeyup = function (value, field, matchMode) {\n        var _this = this;\n        if (this.filterTimeout) {\n            clearTimeout(this.filterTimeout);\n        }\n        this.filterTimeout = setTimeout(function () {\n            _this.filter(value, field, matchMode);\n            _this.filterTimeout = null;\n        }, this.filterDelay);\n    };\n    DataTable.prototype.filter = function (value, field, matchMode) {\n        if (!this.isFilterBlank(value))\n            this.filters[field] = { value: value, matchMode: matchMode };\n        else if (this.filters[field])\n            delete this.filters[field];\n        this._filter();\n    };\n    DataTable.prototype.isFilterBlank = function (filter) {\n        if (filter !== null && filter !== undefined) {\n            if ((typeof filter === 'string' && filter.trim().length == 0) || (filter instanceof Array && filter.length == 0))\n                return true;\n            else\n                return false;\n        }\n        return true;\n    };\n    DataTable.prototype._filter = function () {\n        this._first = 0;\n        if (this.lazy) {\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        }\n        else {\n            if (!this.value || !this.columns) {\n                return;\n            }\n            this.filteredValue = [];\n            for (var i = 0; i < this.value.length; i++) {\n                var localMatch = true;\n                var globalMatch = false;\n                for (var j = 0; j < this.columns.length; j++) {\n                    var col = this.columns[j], filterMeta = this.filters[col.filterField || col.field];\n                    //local\n                    if (filterMeta) {\n                        var filterValue = filterMeta.value, filterField = col.filterField || col.field, filterMatchMode = filterMeta.matchMode || 'startsWith', dataFieldValue = this.resolveFieldData(this.value[i], filterField);\n                        var filterConstraint = this.filterConstraints[filterMatchMode];\n                        if (!filterConstraint(dataFieldValue, filterValue)) {\n                            localMatch = false;\n                        }\n                        if (!localMatch) {\n                            break;\n                        }\n                    }\n                    //global\n                    if (!col.excludeGlobalFilter && this.globalFilter && !globalMatch) {\n                        globalMatch = this.filterConstraints['contains'](this.resolveFieldData(this.value[i], col.filterField || col.field), this.globalFilter.value);\n                    }\n                }\n                var matches = localMatch;\n                if (this.globalFilter) {\n                    matches = localMatch && globalMatch;\n                }\n                if (matches) {\n                    this.filteredValue.push(this.value[i]);\n                }\n            }\n            if (this.filteredValue.length === this.value.length) {\n                this.filteredValue = null;\n            }\n            if (this.paginator) {\n                this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;\n            }\n            this.updateDataToRender(this.filteredValue || this.value);\n        }\n        this.onFilter.emit({\n            filters: this.filters,\n            filteredValue: this.filteredValue || this.value\n        });\n    };\n    DataTable.prototype.hasFilter = function () {\n        var empty = true;\n        for (var prop in this.filters) {\n            if (this.filters.hasOwnProperty(prop)) {\n                empty = false;\n                break;\n            }\n        }\n        return !empty || (this.globalFilter && this.globalFilter.value && this.globalFilter.value.trim().length);\n    };\n    DataTable.prototype.onFilterInputClick = function (event) {\n        event.stopPropagation();\n    };\n    DataTable.prototype.switchCellToEditMode = function (cell, column, rowData) {\n        var _this = this;\n        if (!this.selectionMode && this.editable && column.editable) {\n            this.editorClick = true;\n            this.bindDocumentEditListener();\n            if (cell != this.editingCell) {\n                if (this.editingCell && this.domHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length == 0) {\n                    this.domHandler.removeClass(this.editingCell, 'ui-cell-editing');\n                }\n                this.editingCell = cell;\n                this.onEditInit.emit({ column: column, data: rowData });\n                this.domHandler.addClass(cell, 'ui-cell-editing');\n                var focusable_1 = this.domHandler.findSingle(cell, '.ui-cell-editor input, .ui-cell-editor textarea');\n                if (focusable_1) {\n                    setTimeout(function () { return _this.domHandler.invokeElementMethod(focusable_1, 'focus'); }, 50);\n                }\n            }\n        }\n    };\n    DataTable.prototype.switchCellToViewMode = function (element) {\n        this.editingCell = null;\n        var cell = this.findCell(element);\n        this.domHandler.removeClass(cell, 'ui-cell-editing');\n        this.unbindDocumentEditListener();\n    };\n    DataTable.prototype.closeCell = function () {\n        if (this.editingCell) {\n            this.domHandler.removeClass(this.editingCell, 'ui-cell-editing');\n            this.editingCell = null;\n            this.unbindDocumentEditListener();\n        }\n    };\n    DataTable.prototype.bindDocumentEditListener = function () {\n        var _this = this;\n        if (!this.documentEditListener) {\n            this.documentEditListener = this.renderer.listen('document', 'click', function (event) {\n                if (!_this.editorClick && event.button !== 2) {\n                    _this.closeCell();\n                }\n                _this.editorClick = false;\n            });\n        }\n    };\n    DataTable.prototype.unbindDocumentEditListener = function () {\n        if (this.documentEditListener) {\n            this.documentEditListener();\n            this.documentEditListener = null;\n        }\n    };\n    DataTable.prototype.onCellEditorKeydown = function (event, column, rowData, rowIndex) {\n        if (this.editable) {\n            //enter\n            if (event.keyCode == 13) {\n                if (this.domHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length == 0) {\n                    this.switchCellToViewMode(event.target);\n                    event.preventDefault();\n                }\n            }\n            else if (event.keyCode == 27) {\n                this.switchCellToViewMode(event.target);\n                event.preventDefault();\n            }\n            else if (event.keyCode == 9) {\n                if (event.shiftKey)\n                    this.moveToPreviousCell(event);\n                else\n                    this.moveToNextCell(event);\n            }\n        }\n    };\n    DataTable.prototype.onCellEditorInput = function (event, column, rowData, rowIndex) {\n        if (this.editable) {\n            this.onEdit.emit({ originalEvent: event, column: column, data: rowData, index: rowIndex });\n        }\n    };\n    DataTable.prototype.onCellEditorChange = function (event, column, rowData, rowIndex) {\n        if (this.editable) {\n            this.editChanged = true;\n            this.onEditComplete.emit({ column: column, data: rowData, index: rowIndex });\n        }\n    };\n    DataTable.prototype.onCellEditorBlur = function (event, column, rowData, rowIndex) {\n        if (this.editable) {\n            if (this.editChanged)\n                this.editChanged = false;\n            else\n                this.onEditCancel.emit({ column: column, data: rowData, index: rowIndex });\n        }\n    };\n    DataTable.prototype.moveToPreviousCell = function (event) {\n        var currentCell = this.findCell(event.target);\n        var row = currentCell.parentElement;\n        var targetCell = this.findPreviousEditableColumn(currentCell);\n        if (targetCell) {\n            this.domHandler.invokeElementMethod(targetCell, 'click');\n            event.preventDefault();\n        }\n    };\n    DataTable.prototype.moveToNextCell = function (event) {\n        var currentCell = this.findCell(event.target);\n        var row = currentCell.parentElement;\n        var targetCell = this.findNextEditableColumn(currentCell);\n        if (targetCell) {\n            this.domHandler.invokeElementMethod(targetCell, 'click');\n            event.preventDefault();\n        }\n    };\n    DataTable.prototype.findPreviousEditableColumn = function (cell) {\n        var prevCell = cell.previousElementSibling;\n        if (!prevCell) {\n            var previousRow = cell.parentElement.previousElementSibling;\n            if (previousRow) {\n                prevCell = previousRow.lastElementChild;\n            }\n        }\n        if (prevCell) {\n            if (this.domHandler.hasClass(prevCell, 'ui-editable-column'))\n                return prevCell;\n            else\n                return this.findPreviousEditableColumn(prevCell);\n        }\n        else {\n            return null;\n        }\n    };\n    DataTable.prototype.findNextEditableColumn = function (cell) {\n        var nextCell = cell.nextElementSibling;\n        if (!nextCell) {\n            var nextRow = cell.parentElement.nextElementSibling;\n            if (nextRow) {\n                nextCell = nextRow.firstElementChild;\n            }\n        }\n        if (nextCell) {\n            if (this.domHandler.hasClass(nextCell, 'ui-editable-column'))\n                return nextCell;\n            else\n                return this.findNextEditableColumn(nextCell);\n        }\n        else {\n            return null;\n        }\n    };\n    DataTable.prototype.onCustomEditorFocusPrev = function (event) {\n        this.moveToPreviousCell(event);\n    };\n    DataTable.prototype.onCustomEditorFocusNext = function (event) {\n        this.moveToNextCell(event);\n    };\n    DataTable.prototype.findCell = function (element) {\n        if (element) {\n            var cell = element;\n            while (cell && cell.tagName != 'TD') {\n                cell = cell.parentElement;\n            }\n            return cell;\n        }\n        else {\n            return null;\n        }\n    };\n    DataTable.prototype.initResizableColumns = function () {\n        this.tbody = this.domHandler.findSingle(this.el.nativeElement, 'tbody.ui-datatable-data');\n        this.resizerHelper = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-column-resizer-helper');\n        this.fixColumnWidths();\n    };\n    DataTable.prototype.onDocumentMouseMove = function (event) {\n        if (this.columnResizing) {\n            this.onColumnResize(event);\n        }\n    };\n    DataTable.prototype.onDocumentMouseUp = function (event) {\n        if (this.columnResizing) {\n            this.columnResizing = false;\n            this.onColumnResizeEnd(event);\n        }\n    };\n    DataTable.prototype.bindColumnResizeEvents = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            window.document.addEventListener('mousemove', _this.onDocumentMouseMove.bind(_this));\n        });\n        this.documentColumnResizeEndListener = this.renderer.listen('document', 'mouseup', function (event) {\n            if (_this.columnResizing) {\n                _this.columnResizing = false;\n                _this.onColumnResizeEnd(event);\n            }\n        });\n    };\n    DataTable.prototype.unbindColumnResizeEvents = function () {\n        window.document.removeEventListener('mousemove', this.onDocumentMouseMove);\n        if (this.documentColumnResizeEndListener) {\n            this.documentColumnResizeEndListener();\n            this.documentColumnResizeEndListener = null;\n        }\n    };\n    DataTable.prototype.initColumnResize = function (event) {\n        this.bindColumnResizeEvents();\n        var container = this.el.nativeElement.children[0];\n        var containerLeft = this.domHandler.getOffset(container).left;\n        this.resizeColumn = event.target.parentElement;\n        this.columnResizing = true;\n        this.lastResizerHelperX = (event.pageX - containerLeft + container.scrollLeft);\n    };\n    DataTable.prototype.onColumnResize = function (event) {\n        var container = this.el.nativeElement.children[0];\n        var containerLeft = this.domHandler.getOffset(container).left;\n        this.domHandler.addClass(container, 'ui-unselectable-text');\n        this.resizerHelper.style.height = container.offsetHeight + 'px';\n        this.resizerHelper.style.top = 0 + 'px';\n        this.resizerHelper.style.left = (event.pageX - containerLeft + container.scrollLeft) + 'px';\n        this.resizerHelper.style.display = 'block';\n    };\n    DataTable.prototype.onColumnResizeEnd = function (event) {\n        var delta = this.resizerHelper.offsetLeft - this.lastResizerHelperX;\n        var columnWidth = this.resizeColumn.offsetWidth;\n        var newColumnWidth = columnWidth + delta;\n        var minWidth = this.resizeColumn.style.minWidth || 15;\n        if (columnWidth + delta > parseInt(minWidth)) {\n            if (this.columnResizeMode === 'fit') {\n                var nextColumn = this.resizeColumn.nextElementSibling;\n                while (this.domHandler.hasClass(nextColumn, 'ui-helper-hidden')) {\n                    nextColumn = nextColumn.nextElementSibling;\n                }\n                if (nextColumn) {\n                    var nextColumnWidth = nextColumn.offsetWidth - delta;\n                    var nextColumnMinWidth = nextColumn.style.minWidth || 15;\n                    if (newColumnWidth > 15 && nextColumnWidth > parseInt(nextColumnMinWidth)) {\n                        this.resizeColumn.style.width = newColumnWidth + 'px';\n                        if (nextColumn) {\n                            nextColumn.style.width = nextColumnWidth + 'px';\n                        }\n                        if (this.scrollable) {\n                            var colGroup = this.domHandler.findSingle(this.el.nativeElement, 'colgroup.ui-datatable-scrollable-colgroup');\n                            var resizeColumnIndex = this.domHandler.index(this.resizeColumn);\n                            colGroup.children[resizeColumnIndex].style.width = newColumnWidth + 'px';\n                            if (nextColumn) {\n                                colGroup.children[resizeColumnIndex + 1].style.width = nextColumnWidth + 'px';\n                            }\n                        }\n                    }\n                }\n            }\n            else if (this.columnResizeMode === 'expand') {\n                this.tbody.parentElement.style.width = this.tbody.parentElement.offsetWidth + delta + 'px';\n                this.resizeColumn.style.width = newColumnWidth + 'px';\n                var containerWidth = this.tbody.parentElement.style.width;\n                if (this.scrollable) {\n                    this.domHandler.findSingle(this.el.nativeElement, '.ui-datatable-scrollable-header-box').children[0].style.width = containerWidth;\n                    var colGroup = this.domHandler.findSingle(this.el.nativeElement, 'colgroup.ui-datatable-scrollable-colgroup');\n                    var resizeColumnIndex = this.domHandler.index(this.resizeColumn);\n                    colGroup.children[resizeColumnIndex].style.width = newColumnWidth + 'px';\n                }\n                else {\n                    this.el.nativeElement.children[0].style.width = containerWidth;\n                }\n            }\n            this.onColResize.emit({\n                element: this.resizeColumn,\n                delta: delta\n            });\n        }\n        this.resizerHelper.style.display = 'none';\n        this.resizeColumn = null;\n        this.domHandler.removeClass(this.el.nativeElement.children[0], 'ui-unselectable-text');\n        this.unbindColumnResizeEvents();\n    };\n    DataTable.prototype.fixColumnWidths = function () {\n        var columns = this.domHandler.find(this.el.nativeElement, 'th.ui-resizable-column');\n        var bodyCols;\n        for (var i = 0; i < columns.length; i++) {\n            columns[i].style.width = columns[i].offsetWidth + 'px';\n        }\n        if (this.scrollable) {\n            var colGroup = this.domHandler.findSingle(this.el.nativeElement, 'colgroup.ui-datatable-scrollable-colgroup');\n            bodyCols = colGroup.children;\n            if (bodyCols) {\n                for (var i = 0; i < bodyCols.length; i++) {\n                    bodyCols[i].style.width = columns[i].offsetWidth + 'px';\n                }\n            }\n        }\n    };\n    DataTable.prototype.onColumnDragStart = function (event) {\n        var _this = this;\n        if (this.columnResizing) {\n            event.preventDefault();\n            return;\n        }\n        this.draggedColumn = this.findParentHeader(event.target);\n        event.dataTransfer.setData('text', 'b'); // Firefox requires this to make dragging possible\n        this.zone.runOutsideAngular(function () {\n            window.document.addEventListener('dragover', _this.onColumnDragover.bind(_this));\n        });\n    };\n    DataTable.prototype.onColumnDragover = function (event) {\n        var dropHeader = this.findParentHeader(event.target);\n        if (this.reorderableColumns && this.draggedColumn && dropHeader) {\n            event.preventDefault();\n            var container = this.el.nativeElement.children[0];\n            var containerOffset = this.domHandler.getOffset(container);\n            var dropHeaderOffset = this.domHandler.getOffset(dropHeader);\n            if (this.draggedColumn != dropHeader) {\n                var targetLeft = dropHeaderOffset.left - containerOffset.left;\n                var targetTop = containerOffset.top - dropHeaderOffset.top;\n                var columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;\n                this.reorderIndicatorUp.style.top = dropHeaderOffset.top - containerOffset.top - (this.iconHeight - 1) + 'px';\n                this.reorderIndicatorDown.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';\n                if (event.pageX > columnCenter) {\n                    this.reorderIndicatorUp.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.iconWidth / 2)) + 'px';\n                    this.reorderIndicatorDown.style.left = (targetLeft + dropHeader.offsetWidth - Math.ceil(this.iconWidth / 2)) + 'px';\n                    this.dropPosition = 1;\n                }\n                else {\n                    this.reorderIndicatorUp.style.left = (targetLeft - Math.ceil(this.iconWidth / 2)) + 'px';\n                    this.reorderIndicatorDown.style.left = (targetLeft - Math.ceil(this.iconWidth / 2)) + 'px';\n                    this.dropPosition = -1;\n                }\n                this.reorderIndicatorUp.style.display = 'block';\n                this.reorderIndicatorDown.style.display = 'block';\n            }\n            else {\n                event.dataTransfer.dropEffect = 'none';\n            }\n        }\n    };\n    DataTable.prototype.onColumnDragleave = function (event) {\n        if (this.reorderableColumns && this.draggedColumn) {\n            event.preventDefault();\n            this.reorderIndicatorUp.style.display = 'none';\n            this.reorderIndicatorDown.style.display = 'none';\n            window.document.removeEventListener('dragover', this.onColumnDragover);\n        }\n    };\n    DataTable.prototype.onColumnDrop = function (event) {\n        event.preventDefault();\n        if (this.draggedColumn) {\n            var dragIndex = this.domHandler.index(this.draggedColumn);\n            var dropIndex = this.domHandler.index(this.findParentHeader(event.target));\n            var allowDrop = (dragIndex != dropIndex);\n            if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {\n                allowDrop = false;\n            }\n            if (allowDrop) {\n                this.objectUtils.reorderArray(this.columns, dragIndex, dropIndex);\n                if (this.scrollable) {\n                    this.initScrollableColumns();\n                }\n                this.onColReorder.emit({\n                    dragIndex: dragIndex,\n                    dropIndex: dropIndex,\n                    columns: this.columns\n                });\n            }\n            this.reorderIndicatorUp.style.display = 'none';\n            this.reorderIndicatorDown.style.display = 'none';\n            this.draggedColumn.draggable = false;\n            this.draggedColumn = null;\n            this.dropPosition = null;\n        }\n    };\n    DataTable.prototype.initColumnReordering = function () {\n        this.reorderIndicatorUp = this.domHandler.findSingle(this.el.nativeElement.children[0], 'span.ui-datatable-reorder-indicator-up');\n        this.reorderIndicatorDown = this.domHandler.findSingle(this.el.nativeElement.children[0], 'span.ui-datatable-reorder-indicator-down');\n        this.iconWidth = this.domHandler.getHiddenElementOuterWidth(this.reorderIndicatorUp);\n        this.iconHeight = this.domHandler.getHiddenElementOuterHeight(this.reorderIndicatorUp);\n    };\n    DataTable.prototype.findParentHeader = function (element) {\n        if (element.nodeName == 'TH') {\n            return element;\n        }\n        else {\n            var parent_1 = element.parentElement;\n            while (parent_1.nodeName != 'TH') {\n                parent_1 = parent_1.parentElement;\n                if (!parent_1)\n                    break;\n            }\n            return parent_1;\n        }\n    };\n    DataTable.prototype.hasFooter = function () {\n        if (this.footerColumnGroups && this.footerColumnGroups.first) {\n            return true;\n        }\n        else {\n            if (this.columns) {\n                for (var i = 0; i < this.columns.length; i++) {\n                    if (this.columns[i].footer || this.columns[i].footerTemplate) {\n                        return true;\n                    }\n                }\n            }\n        }\n        return false;\n    };\n    DataTable.prototype.isEmpty = function () {\n        return !this.dataToRender || (this.dataToRender.length == 0);\n    };\n    DataTable.prototype.createLazyLoadMetadata = function () {\n        return {\n            first: this.first,\n            rows: this.virtualScroll ? this.rows * 2 : this.rows,\n            sortField: this.sortField,\n            sortOrder: this.sortOrder,\n            filters: this.filters,\n            globalFilter: this.globalFilter ? this.globalFilter.value : null,\n            multiSortMeta: this.multiSortMeta\n        };\n    };\n    DataTable.prototype.toggleRow = function (row, event) {\n        if (!this.expandedRows) {\n            this.expandedRows = [];\n        }\n        var expandedRowIndex = this.findExpandedRowIndex(row);\n        if (expandedRowIndex != -1) {\n            this.expandedRows.splice(expandedRowIndex, 1);\n            this.onRowCollapse.emit({\n                originalEvent: event,\n                data: row\n            });\n        }\n        else {\n            if (this.rowExpandMode === 'single') {\n                this.expandedRows = [];\n            }\n            this.expandedRows.push(row);\n            this.onRowExpand.emit({\n                originalEvent: event,\n                data: row\n            });\n        }\n        if (event) {\n            event.preventDefault();\n        }\n    };\n    DataTable.prototype.findExpandedRowIndex = function (row) {\n        var index = -1;\n        if (this.expandedRows) {\n            for (var i = 0; i < this.expandedRows.length; i++) {\n                if (this.expandedRows[i] == row) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    DataTable.prototype.isRowExpanded = function (row) {\n        return this.findExpandedRowIndex(row) != -1;\n    };\n    DataTable.prototype.findExpandedRowGroupIndex = function (row) {\n        var index = -1;\n        if (this.expandedRowsGroups && this.expandedRowsGroups.length) {\n            for (var i = 0; i < this.expandedRowsGroups.length; i++) {\n                var group = this.expandedRowsGroups[i];\n                var rowGroupField = this.resolveFieldData(row, this.groupField);\n                if (rowGroupField === group) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    DataTable.prototype.isRowGroupExpanded = function (row) {\n        return this.findExpandedRowGroupIndex(row) != -1;\n    };\n    DataTable.prototype.toggleRowGroup = function (event, row) {\n        if (!this.expandedRowsGroups) {\n            this.expandedRowsGroups = [];\n        }\n        this.rowGroupToggleClick = true;\n        var index = this.findExpandedRowGroupIndex(row);\n        var rowGroupField = this.resolveFieldData(row, this.groupField);\n        if (index >= 0) {\n            this.expandedRowsGroups.splice(index, 1);\n            this.onRowGroupCollapse.emit({\n                originalEvent: event,\n                group: rowGroupField\n            });\n        }\n        else {\n            if (this.rowGroupExpandMode === 'single') {\n                this.expandedRowsGroups = [];\n            }\n            this.expandedRowsGroups.push(rowGroupField);\n            this.onRowGroupExpand.emit({\n                originalEvent: event,\n                group: rowGroupField\n            });\n        }\n        event.preventDefault();\n    };\n    DataTable.prototype.reset = function () {\n        this._sortField = null;\n        this._sortOrder = 1;\n        this.filteredValue = null;\n        this.filters = {};\n        this._first = 0;\n        this.firstChange.emit(this._first);\n        this.updateTotalRecords();\n        if (this.lazy)\n            this.onLazyLoad.emit(this.createLazyLoadMetadata());\n        else\n            this.updateDataToRender(this.value);\n    };\n    DataTable.prototype.exportCSV = function (options) {\n        var _this = this;\n        var data = this.filteredValue || this.value;\n        var csv = '\\ufeff';\n        if (options && options.selectionOnly) {\n            data = this.selection || [];\n        }\n        //headers\n        for (var i = 0; i < this.columns.length; i++) {\n            var column = this.columns[i];\n            if (column.exportable && column.field) {\n                csv += '\"' + (column.header || column.field) + '\"';\n                if (i < (this.columns.length - 1)) {\n                    csv += this.csvSeparator;\n                }\n            }\n        }\n        //body\n        data.forEach(function (record, i) {\n            csv += '\\n';\n            for (var i_1 = 0; i_1 < _this.columns.length; i_1++) {\n                var column = _this.columns[i_1];\n                if (column.exportable && column.field) {\n                    var cellData = _this.resolveFieldData(record, column.field);\n                    if (cellData != null)\n                        cellData = String(cellData).replace(/\"/g, '\"\"');\n                    else\n                        cellData = '';\n                    csv += '\"' + cellData + '\"';\n                    if (i_1 < (_this.columns.length - 1)) {\n                        csv += _this.csvSeparator;\n                    }\n                }\n            }\n        });\n        var blob = new Blob([csv], {\n            type: 'text/csv;charset=utf-8;'\n        });\n        if (window.navigator.msSaveOrOpenBlob) {\n            navigator.msSaveOrOpenBlob(blob, this.exportFilename + '.csv');\n        }\n        else {\n            var link = document.createElement(\"a\");\n            link.style.display = 'none';\n            document.body.appendChild(link);\n            if (link.download !== undefined) {\n                link.setAttribute('href', URL.createObjectURL(blob));\n                link.setAttribute('download', this.exportFilename + '.csv');\n                link.click();\n            }\n            else {\n                csv = 'data:text/csv;charset=utf-8,' + csv;\n                window.open(encodeURI(csv));\n            }\n            document.body.removeChild(link);\n        }\n    };\n    DataTable.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    DataTable.prototype.getRowStyleClass = function (rowData, rowIndex) {\n        var styleClass = 'ui-widget-content';\n        if (this.rowStyleClass) {\n            var rowClass = this.rowStyleClass.call(this, rowData, rowIndex);\n            if (rowClass) {\n                styleClass += ' ' + rowClass;\n            }\n        }\n        else if (this.rowStyleMap && this.dataKey) {\n            var rowClass = this.rowStyleMap[rowData[this.dataKey]];\n            if (rowClass) {\n                styleClass += ' ' + rowClass;\n            }\n        }\n        return styleClass;\n    };\n    DataTable.prototype.visibleColumns = function () {\n        return this.columns ? this.columns.filter(function (c) { return !c.hidden; }) : [];\n    };\n    Object.defineProperty(DataTable.prototype, \"containerWidth\", {\n        get: function () {\n            if (this.scrollable) {\n                if (this.scrollWidth) {\n                    return this.scrollWidth;\n                }\n                else if (this.frozenWidth && this.unfrozenWidth) {\n                    return parseFloat(this.frozenWidth) + parseFloat(this.unfrozenWidth) + 'px';\n                }\n            }\n            else {\n                return this.style ? this.style.width : null;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    DataTable.prototype.hasFrozenColumns = function () {\n        return this.frozenColumns && this.frozenColumns.length > 0;\n    };\n    DataTable.prototype.ngOnDestroy = function () {\n        //remove event listener\n        if (this.globalFilterFunction) {\n            this.globalFilterFunction();\n        }\n        if (this.resizableColumns) {\n            this.unbindColumnResizeEvents();\n        }\n        this.unbindDocumentEditListener();\n        if (this.columnsSubscription) {\n            this.columnsSubscription.unsubscribe();\n        }\n        if (this.virtualScrollCallback) {\n            this.virtualScrollCallback = null;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"paginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"pageLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataTable.prototype, \"rowsPerPageOptions\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"stacked\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"selectionChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"editable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"showHeaderCheckbox\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowUnselect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowDblclick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onHeaderCheckboxToggle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"headerCheckboxToggleAllPages\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onContextMenuSelect\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"filterDelay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"lazy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onLazyLoad\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"resizableColumns\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"columnResizeMode\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onColResize\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"reorderableColumns\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onColReorder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"scrollable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"virtualScroll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"scrollWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"frozenWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"unfrozenWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"tableStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"tableStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"globalFilter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"sortMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"defaultSortOrder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"groupField\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"contextMenu\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"csvSeparator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"exportFilename\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"paginatorPosition\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"alwaysShowPaginator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataTable.prototype, \"rowTrackBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataTable.prototype, \"frozenValue\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"compareSelectionBy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onEditInit\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onEditComplete\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onEdit\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onEditCancel\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onPage\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onSort\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onFilter\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_2.Header),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_2.Footer),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"expandableRows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataTable.prototype, \"expandedRows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"expandableRowGroups\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"rowExpandMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], DataTable.prototype, \"expandedRowsGroups\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"expandedIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"collapsedIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], DataTable.prototype, \"rowStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"rowStyleMap\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"rowGroupMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"sortableRowGroup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"sortFile\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"rowHover\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], DataTable.prototype, \"filters\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], DataTable.prototype, \"loading\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"loadingIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], DataTable.prototype, \"virtualScrollDelay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], DataTable.prototype, \"rowGroupExpandMode\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"valueChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"firstChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowExpand\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowCollapse\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowGroupExpand\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DataTable.prototype, \"onRowGroupCollapse\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataTable.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.Column),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataTable.prototype, \"cols\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.HeaderColumnGroup),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataTable.prototype, \"headerColumnGroups\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.FooterColumnGroup),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], DataTable.prototype, \"footerColumnGroups\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], DataTable.prototype, \"multiSortMeta\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], DataTable.prototype, \"sortField\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], DataTable.prototype, \"sortOrder\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], DataTable.prototype, \"value\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], DataTable.prototype, \"first\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], DataTable.prototype, \"totalRecords\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object),\n        __metadata(\"design:paramtypes\", [Object])\n    ], DataTable.prototype, \"selection\", null);\n    DataTable = __decorate([\n        core_1.Component({\n            selector: 'p-dataTable',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [style.width]=\\\"containerWidth\\\"\\n            [ngClass]=\\\"{'ui-datatable ui-widget':true,'ui-datatable-reflow':responsive,'ui-datatable-stacked':stacked,'ui-datatable-resizable':resizableColumns,'ui-datatable-scrollable':scrollable}\\\">\\n            <div class=\\\"ui-datatable-loading ui-widget-overlay\\\" *ngIf=\\\"loading\\\"></div>\\n            <div class=\\\"ui-datatable-loading-content\\\" *ngIf=\\\"loading\\\">\\n                <i [class]=\\\"'fa fa-spin fa-2x ' + loadingIcon\\\"></i>\\n            </div>\\n            <div class=\\\"ui-datatable-header ui-widget-header\\\" *ngIf=\\\"header\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" styleClass=\\\"ui-paginator-top\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n                (onPageChange)=\\\"onPageChange($event)\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'top' || paginatorPosition =='both')\\\"\\n                [templateLeft]=\\\"paginatorLeftTemplate\\\" [templateRight]=\\\"paginatorRightTemplate\\\"></p-paginator>\\n            <div class=\\\"ui-datatable-tablewrapper\\\" *ngIf=\\\"!scrollable\\\">\\n                <table [ngClass]=\\\"tableStyleClass\\\" [ngStyle]=\\\"tableStyle\\\">\\n                    <thead class=\\\"ui-datatable-thead\\\">\\n                        <tr *ngIf=\\\"!headerColumnGroups || !headerColumnGroups.first\\\" class=\\\"ui-state-default\\\" [pColumnHeaders]=\\\"columns\\\"></tr>\\n                        <ng-template [ngIf]=\\\"headerColumnGroups && headerColumnGroups.first\\\">\\n                            <tr *ngFor=\\\"let headerRow of headerColumnGroups.first.rows\\\" class=\\\"ui-state-default\\\" [pColumnHeaders]=\\\"headerRow.columns\\\"></tr>\\n                        </ng-template>\\n                    </thead>\\n                    <tfoot *ngIf=\\\"hasFooter()\\\" class=\\\"ui-datatable-tfoot\\\">\\n                        <tr *ngIf=\\\"!footerColumnGroups.first\\\" class=\\\"ui-state-default\\\" [pColumnFooters]=\\\"columns\\\"></tr>\\n                        <ng-template [ngIf]=\\\"footerColumnGroups.first\\\">\\n                            <tr *ngFor=\\\"let footerRow of footerColumnGroups.first.rows\\\" class=\\\"ui-state-default\\\" [pColumnFooters]=\\\"footerRow.columns\\\"></tr>\\n                        </ng-template>\\n                    </tfoot>\\n                    <tbody [ngClass]=\\\"{'ui-datatable-data ui-widget-content': true, 'ui-datatable-hoverable-rows': (rowHover||selectionMode)}\\\" [pTableBody]=\\\"columns\\\" [data]=\\\"dataToRender\\\"></tbody>\\n                </table>\\n            </div>\\n            \\n            <ng-template [ngIf]=\\\"scrollable\\\">\\n                <div class=\\\"ui-datatable-scrollable-wrapper ui-helper-clearfix\\\">\\n                    <div *ngIf=\\\"hasFrozenColumns()\\\" [pScrollableView]=\\\"frozenColumns\\\" frozen=\\\"true\\\"\\n                        [headerColumnGroup]=\\\"frozenHeaderColumnGroup\\\" [footerColumnGroup]=\\\"frozenFooterColumnGroup\\\"\\n                        [ngStyle]=\\\"{'width':this.frozenWidth}\\\" class=\\\"ui-datatable-scrollable-view ui-datatable-frozen-view\\\"></div>\\n                    <div [pScrollableView]=\\\"scrollableColumns\\\" [ngStyle]=\\\"{'width':this.unfrozenWidth, 'left': this.frozenWidth}\\\"\\n                        [headerColumnGroup]=\\\"scrollableHeaderColumnGroup\\\" [footerColumnGroup]=\\\"scrollableFooterColumnGroup\\\"\\n                        class=\\\"ui-datatable-scrollable-view\\\" [virtualScroll]=\\\"virtualScroll\\\" (onVirtualScroll)=\\\"onVirtualScroll($event)\\\"\\n                        [ngClass]=\\\"{'ui-datatable-unfrozen-view': hasFrozenColumns()}\\\"></div>\\n                </div>\\n            </ng-template>\\n            \\n            <p-paginator [rows]=\\\"rows\\\" [first]=\\\"first\\\" [totalRecords]=\\\"totalRecords\\\" [pageLinkSize]=\\\"pageLinks\\\" styleClass=\\\"ui-paginator-bottom\\\" [alwaysShow]=\\\"alwaysShowPaginator\\\"\\n                (onPageChange)=\\\"onPageChange($event)\\\" [rowsPerPageOptions]=\\\"rowsPerPageOptions\\\" *ngIf=\\\"paginator && (paginatorPosition === 'bottom' || paginatorPosition =='both')\\\"\\n                [templateLeft]=\\\"paginatorLeftTemplate\\\" [templateRight]=\\\"paginatorRightTemplate\\\"></p-paginator>\\n            <div class=\\\"ui-datatable-footer ui-widget-header\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n            \\n            <div class=\\\"ui-column-resizer-helper ui-state-highlight\\\" style=\\\"display:none\\\"></div>\\n            <span class=\\\"fa fa-arrow-down ui-datatable-reorder-indicator-up\\\" style=\\\"position: absolute; display: none;\\\"></span>\\n            <span class=\\\"fa fa-arrow-up ui-datatable-reorder-indicator-down\\\" style=\\\"position: absolute; display: none;\\\"></span>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.IterableDiffers,\n            core_1.Renderer2, core_1.ChangeDetectorRef, objectutils_1.ObjectUtils,\n            core_1.NgZone])\n    ], DataTable);\n    return DataTable;\n}());\nexports.DataTable = DataTable;\nvar DataTableModule = /** @class */ (function () {\n    function DataTableModule() {\n    }\n    DataTableModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule, paginator_1.PaginatorModule, forms_1.FormsModule],\n            exports: [DataTable, shared_1.SharedModule],\n            declarations: [DataTable, DTRadioButton, DTCheckbox, ColumnHeaders, ColumnFooters, TableBody, ScrollableView]\n        })\n    ], DataTableModule);\n    return DataTableModule;\n}());\nexports.DataTableModule = DataTableModule;\n//# sourceMappingURL=datatable.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/datatable/datatable.js\n// module id = 740\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar DeferredLoader = /** @class */ (function () {\n    function DeferredLoader(el, domHandler, renderer, viewContainer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.viewContainer = viewContainer;\n        this.onLoad = new core_1.EventEmitter();\n    }\n    DeferredLoader.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.shouldLoad()) {\n            this.load();\n        }\n        this.documentScrollListener = this.renderer.listen('window', 'scroll', function () {\n            if (_this.shouldLoad()) {\n                _this.load();\n                _this.documentScrollListener();\n                _this.documentScrollListener = null;\n            }\n        });\n    };\n    DeferredLoader.prototype.shouldLoad = function () {\n        var rect = this.el.nativeElement.getBoundingClientRect();\n        var docElement = document.documentElement;\n        var scrollTop = (window.pageYOffset || document.documentElement.scrollTop);\n        var winHeight = docElement.clientHeight;\n        return (winHeight >= rect.top);\n    };\n    DeferredLoader.prototype.load = function () {\n        this.view = this.viewContainer.createEmbeddedView(this.template);\n        this.onLoad.emit();\n    };\n    DeferredLoader.prototype.ngOnDestroy = function () {\n        this.view = null;\n        if (this.documentScrollListener) {\n            this.documentScrollListener();\n        }\n    };\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], DeferredLoader.prototype, \"onLoad\", void 0);\n    __decorate([\n        core_1.ContentChild(core_1.TemplateRef),\n        __metadata(\"design:type\", core_1.TemplateRef)\n    ], DeferredLoader.prototype, \"template\", void 0);\n    DeferredLoader = __decorate([\n        core_1.Directive({\n            selector: '[pDefer]',\n            host: {},\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ViewContainerRef])\n    ], DeferredLoader);\n    return DeferredLoader;\n}());\nexports.DeferredLoader = DeferredLoader;\nvar DeferModule = /** @class */ (function () {\n    function DeferModule() {\n    }\n    DeferModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [DeferredLoader],\n            declarations: [DeferredLoader]\n        })\n    ], DeferModule);\n    return DeferModule;\n}());\nexports.DeferModule = DeferModule;\n//# sourceMappingURL=defer.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/defer/defer.js\n// module id = 741\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar shared_1 = require(\"../common/shared\");\nvar idx = 0;\nvar Dialog = /** @class */ (function () {\n    function Dialog(el, domHandler, renderer, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.zone = zone;\n        this.draggable = true;\n        this.resizable = true;\n        this.minWidth = 150;\n        this.minHeight = 150;\n        this.closeOnEscape = true;\n        this.closable = true;\n        this.responsive = true;\n        this.showHeader = true;\n        this.breakpoint = 640;\n        this.blockScroll = false;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.minX = 0;\n        this.minY = 0;\n        this.autoAlign = true;\n        this.focusOnShow = true;\n        this.onShow = new core_1.EventEmitter();\n        this.onHide = new core_1.EventEmitter();\n        this.visibleChange = new core_1.EventEmitter();\n        this.id = \"ui-dialog-\" + idx++;\n    }\n    Object.defineProperty(Dialog.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (val) {\n            this._visible = val;\n            if (this.initialized && this.containerViewChild && this.containerViewChild.nativeElement) {\n                if (this._visible)\n                    this.show();\n                else {\n                    if (this.preventVisibleChangePropagation)\n                        this.preventVisibleChangePropagation = false;\n                    else\n                        this.hide();\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Dialog.prototype.ngAfterViewChecked = function () {\n        var _this = this;\n        if (this.executePostDisplayActions) {\n            this.onShow.emit({});\n            this.positionOverlay();\n            if (this.focusOnShow) {\n                this.focus();\n            }\n            this.currentHeight = this.domHandler.getOuterHeight(this.containerViewChild.nativeElement);\n            this.executePostDisplayActions = false;\n        }\n        else if (this.autoAlign && this.visible) {\n            this.zone.runOutsideAngular(function () {\n                setTimeout(function () {\n                    var height = _this.domHandler.getOuterHeight(_this.containerViewChild.nativeElement);\n                    if (height !== _this.currentHeight) {\n                        _this.currentHeight = height;\n                        _this.positionOverlay();\n                    }\n                }, 50);\n            });\n        }\n    };\n    Dialog.prototype.focus = function () {\n        var focusable = this.domHandler.findSingle(this.containerViewChild.nativeElement, 'button');\n        if (focusable) {\n            focusable.focus();\n        }\n    };\n    Dialog.prototype.show = function () {\n        this.executePostDisplayActions = true;\n        this.moveOnTop();\n        this.bindGlobalListeners();\n        if (this.modal) {\n            this.enableModality();\n        }\n    };\n    Dialog.prototype.positionOverlay = function () {\n        var viewport = this.domHandler.getViewport();\n        if (this.domHandler.getOuterHeight(this.containerViewChild.nativeElement) > viewport.height) {\n            this.contentViewChild.nativeElement.style.height = (viewport.height * .75) + 'px';\n        }\n        if (this.positionLeft >= 0 && this.positionTop >= 0) {\n            this.containerViewChild.nativeElement.style.left = this.positionLeft + 'px';\n            this.containerViewChild.nativeElement.style.top = this.positionTop + 'px';\n        }\n        else if (this.positionTop >= 0) {\n            this.center();\n            this.containerViewChild.nativeElement.style.top = this.positionTop + 'px';\n        }\n        else {\n            this.center();\n        }\n    };\n    Dialog.prototype.hide = function () {\n        this.onHide.emit({});\n        this.unbindMaskClickListener();\n        this.unbindGlobalListeners();\n        this.dragging = false;\n        if (this.modal) {\n            this.disableModality();\n        }\n    };\n    Dialog.prototype.close = function (event) {\n        this.preventVisibleChangePropagation = true;\n        this.hide();\n        this.visibleChange.emit(false);\n        event.preventDefault();\n    };\n    Dialog.prototype.ngAfterViewInit = function () {\n        this.initialized = true;\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.containerViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);\n        }\n        if (this.visible) {\n            this.show();\n        }\n    };\n    Dialog.prototype.center = function () {\n        var elementWidth = this.domHandler.getOuterWidth(this.containerViewChild.nativeElement);\n        var elementHeight = this.domHandler.getOuterHeight(this.containerViewChild.nativeElement);\n        if (elementWidth == 0 && elementHeight == 0) {\n            this.containerViewChild.nativeElement.style.visibility = 'hidden';\n            this.containerViewChild.nativeElement.style.display = 'block';\n            elementWidth = this.domHandler.getOuterWidth(this.containerViewChild.nativeElement);\n            elementHeight = this.domHandler.getOuterHeight(this.containerViewChild.nativeElement);\n            this.containerViewChild.nativeElement.style.display = 'none';\n            this.containerViewChild.nativeElement.style.visibility = 'visible';\n        }\n        var viewport = this.domHandler.getViewport();\n        var x = Math.max((viewport.width - elementWidth) / 2, 0);\n        var y = Math.max((viewport.height - elementHeight) / 2, 0);\n        this.containerViewChild.nativeElement.style.left = x + 'px';\n        this.containerViewChild.nativeElement.style.top = y + 'px';\n    };\n    Dialog.prototype.enableModality = function () {\n        var _this = this;\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = String(parseInt(this.containerViewChild.nativeElement.style.zIndex) - 1);\n            var maskStyleClass = 'ui-widget-overlay ui-dialog-mask';\n            if (this.blockScroll) {\n                maskStyleClass += ' ui-dialog-mask-scrollblocker';\n            }\n            this.domHandler.addMultipleClasses(this.mask, maskStyleClass);\n            if (this.closable && this.dismissableMask) {\n                this.maskClickListener = this.renderer.listen(this.mask, 'click', function (event) {\n                    _this.close(event);\n                });\n            }\n            document.body.appendChild(this.mask);\n            if (this.blockScroll) {\n                this.domHandler.addClass(document.body, 'ui-overflow-hidden');\n            }\n        }\n    };\n    Dialog.prototype.disableModality = function () {\n        if (this.mask) {\n            document.body.removeChild(this.mask);\n            if (this.blockScroll) {\n                var bodyChildren = document.body.children;\n                var hasBlockerMasks = void 0;\n                for (var i = 0; i < bodyChildren.length; i++) {\n                    var bodyChild = bodyChildren[i];\n                    if (this.domHandler.hasClass(bodyChild, 'ui-dialog-mask-scrollblocker')) {\n                        hasBlockerMasks = true;\n                        break;\n                    }\n                }\n                if (!hasBlockerMasks) {\n                    this.domHandler.removeClass(document.body, 'ui-overflow-hidden');\n                }\n            }\n            this.mask = null;\n        }\n    };\n    Dialog.prototype.unbindMaskClickListener = function () {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n        }\n    };\n    Dialog.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    Dialog.prototype.onCloseMouseDown = function (event) {\n        this.closeIconMouseDown = true;\n    };\n    Dialog.prototype.initDrag = function (event) {\n        if (this.closeIconMouseDown) {\n            this.closeIconMouseDown = false;\n            return;\n        }\n        if (this.draggable) {\n            this.dragging = true;\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n            this.domHandler.addClass(document.body, 'ui-unselectable-text');\n        }\n    };\n    Dialog.prototype.onDrag = function (event) {\n        if (this.dragging) {\n            var deltaX = event.pageX - this.lastPageX;\n            var deltaY = event.pageY - this.lastPageY;\n            var leftPos = parseInt(this.containerViewChild.nativeElement.style.left) + deltaX;\n            var topPos = parseInt(this.containerViewChild.nativeElement.style.top) + deltaY;\n            if (leftPos >= this.minX) {\n                this.containerViewChild.nativeElement.style.left = leftPos + 'px';\n            }\n            if (topPos >= this.minY) {\n                this.containerViewChild.nativeElement.style.top = topPos + 'px';\n            }\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n        }\n    };\n    Dialog.prototype.endDrag = function (event) {\n        if (this.draggable) {\n            this.dragging = false;\n            this.domHandler.removeClass(document.body, 'ui-unselectable-text');\n        }\n    };\n    Dialog.prototype.initResize = function (event) {\n        if (this.resizable) {\n            this.preWidth = null;\n            this.resizing = true;\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n            this.domHandler.addClass(document.body, 'ui-unselectable-text');\n        }\n    };\n    Dialog.prototype.onResize = function (event) {\n        if (this.resizing) {\n            var deltaX = event.pageX - this.lastPageX;\n            var deltaY = event.pageY - this.lastPageY;\n            var containerWidth = this.domHandler.getOuterWidth(this.containerViewChild.nativeElement);\n            var containerHeight = this.domHandler.getOuterHeight(this.containerViewChild.nativeElement);\n            var contentHeight = this.domHandler.getOuterHeight(this.contentViewChild.nativeElement);\n            var newWidth = containerWidth + deltaX;\n            var newHeight = containerHeight + deltaY;\n            if (newWidth > this.minWidth) {\n                this.containerViewChild.nativeElement.style.width = newWidth + 'px';\n            }\n            if (newHeight > this.minHeight) {\n                this.containerViewChild.nativeElement.style.height = newHeight + 'px';\n                this.contentViewChild.nativeElement.style.height = contentHeight + deltaY + 'px';\n            }\n            this.lastPageX = event.pageX;\n            this.lastPageY = event.pageY;\n        }\n    };\n    Dialog.prototype.onResizeEnd = function (event) {\n        if (this.resizing) {\n            this.resizing = false;\n            this.domHandler.removeClass(document.body, 'ui-unselectable-text');\n        }\n    };\n    Dialog.prototype.bindGlobalListeners = function () {\n        if (this.draggable) {\n            this.bindDocumentDragListener();\n            this.bindDocumentDragEndListener();\n        }\n        if (this.resizable) {\n            this.bindDocumentResizeListeners();\n        }\n        if (this.responsive) {\n            this.bindDocumentResponsiveListener();\n        }\n        if (this.closeOnEscape && this.closable) {\n            this.bindDocumentEscapeListener();\n        }\n    };\n    Dialog.prototype.unbindGlobalListeners = function () {\n        this.unbindDocumentDragListener();\n        this.unbindDocumentDragEndListener();\n        this.unbindDocumentResizeListeners();\n        this.unbindDocumentResponsiveListener();\n        this.unbindDocumentEscapeListener();\n    };\n    Dialog.prototype.bindDocumentDragListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.documentDragListener = _this.onDrag.bind(_this);\n            window.document.addEventListener('mousemove', _this.documentDragListener);\n        });\n    };\n    Dialog.prototype.unbindDocumentDragListener = function () {\n        if (this.documentDragListener) {\n            window.document.removeEventListener('mousemove', this.documentDragListener);\n            this.documentDragListener = null;\n        }\n    };\n    Dialog.prototype.bindDocumentDragEndListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.documentDragEndListener = _this.endDrag.bind(_this);\n            window.document.addEventListener('mouseup', _this.documentDragEndListener);\n        });\n    };\n    Dialog.prototype.unbindDocumentDragEndListener = function () {\n        if (this.documentDragEndListener) {\n            window.document.removeEventListener('mouseup', this.documentDragEndListener);\n            this.documentDragEndListener = null;\n        }\n    };\n    Dialog.prototype.bindDocumentResizeListeners = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.documentResizeListener = _this.onResize.bind(_this);\n            _this.documentResizeEndListener = _this.onResizeEnd.bind(_this);\n            window.document.addEventListener('mousemove', _this.documentResizeListener);\n            window.document.addEventListener('mouseup', _this.documentResizeEndListener);\n        });\n    };\n    Dialog.prototype.unbindDocumentResizeListeners = function () {\n        if (this.documentResizeListener && this.documentResizeEndListener) {\n            window.document.removeEventListener('mouseup', this.documentResizeListener);\n            window.document.removeEventListener('mouseup', this.documentResizeEndListener);\n            this.documentResizeListener = null;\n            this.documentResizeEndListener = null;\n        }\n    };\n    Dialog.prototype.bindDocumentResponsiveListener = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.documentResponsiveListener = _this.onWindowResize.bind(_this);\n            window.addEventListener('resize', _this.documentResponsiveListener);\n        });\n    };\n    Dialog.prototype.unbindDocumentResponsiveListener = function () {\n        if (this.documentResponsiveListener) {\n            window.removeEventListener('resize', this.documentResponsiveListener);\n            this.documentResponsiveListener = null;\n        }\n    };\n    Dialog.prototype.onWindowResize = function (event) {\n        var viewport = this.domHandler.getViewport();\n        var width = this.domHandler.getOuterWidth(this.containerViewChild.nativeElement);\n        if (viewport.width <= this.breakpoint) {\n            if (!this.preWidth) {\n                this.preWidth = width;\n            }\n            this.containerViewChild.nativeElement.style.left = '0px';\n            this.containerViewChild.nativeElement.style.width = '100%';\n        }\n        else {\n            this.containerViewChild.nativeElement.style.width = this.preWidth + 'px';\n            this.positionOverlay();\n        }\n    };\n    Dialog.prototype.bindDocumentEscapeListener = function () {\n        var _this = this;\n        this.documentEscapeListener = this.renderer.listen('document', 'keydown', function (event) {\n            if (event.which == 27) {\n                if (parseInt(_this.containerViewChild.nativeElement.style.zIndex) == domhandler_1.DomHandler.zindex) {\n                    _this.close(event);\n                }\n            }\n        });\n    };\n    Dialog.prototype.unbindDocumentEscapeListener = function () {\n        if (this.documentEscapeListener) {\n            this.documentEscapeListener();\n            this.documentEscapeListener = null;\n        }\n    };\n    Dialog.prototype.ngOnDestroy = function () {\n        this.initialized = false;\n        this.disableModality();\n        this.unbindGlobalListeners();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);\n        }\n        this.unbindMaskClickListener();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dialog.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"draggable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"resizable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"minWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"minHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"width\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"height\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"positionLeft\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"positionTop\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"contentStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"modal\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"closeOnEscape\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"dismissableMask\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"rtl\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Dialog.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Dialog.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"showHeader\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"breakpoint\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"blockScroll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"minX\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Dialog.prototype, \"minY\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"autoAlign\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Dialog.prototype, \"focusOnShow\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.Header, { descendants: false }),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Dialog.prototype, \"headerFacet\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.Footer, { descendants: false }),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Dialog.prototype, \"footerFacet\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dialog.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('titlebar'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dialog.prototype, \"headerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('content'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Dialog.prototype, \"contentViewChild\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dialog.prototype, \"onShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dialog.prototype, \"onHide\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Dialog.prototype, \"visibleChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Dialog.prototype, \"visible\", null);\n    Dialog = __decorate([\n        core_1.Component({\n            selector: 'p-dialog',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-dialog ui-widget ui-widget-content ui-corner-all ui-shadow':true, 'ui-dialog-rtl':rtl,'ui-dialog-draggable':draggable}\\\" [style.display]=\\\"visible ? 'block' : 'none'\\\"\\n            [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [style.width.px]=\\\"width\\\" [style.height.px]=\\\"height\\\" [style.minWidth.px]=\\\"minWidth\\\" [style.minHeight.px]=\\\"minHeight\\\" (mousedown)=\\\"moveOnTop()\\\" [@dialogState]=\\\"visible ? 'visible' : 'hidden'\\\"\\n            role=\\\"dialog\\\" [attr.aria-labelledby]=\\\"id + '-label'\\\">\\n            <div #titlebar class=\\\"ui-dialog-titlebar ui-widget-header ui-helper-clearfix ui-corner-top\\\"\\n                (mousedown)=\\\"initDrag($event)\\\" *ngIf=\\\"showHeader\\\">\\n                <span [attr.id]=\\\"id + '-label'\\\" class=\\\"ui-dialog-title\\\" *ngIf=\\\"header\\\">{{header}}</span>\\n                <span [attr.id]=\\\"id + '-label'\\\" class=\\\"ui-dialog-title\\\" *ngIf=\\\"headerFacet && headerFacet.first\\\">\\n                    <ng-content select=\\\"p-header\\\"></ng-content>\\n                </span>\\n                <a *ngIf=\\\"closable\\\" [ngClass]=\\\"{'ui-dialog-titlebar-icon ui-dialog-titlebar-close ui-corner-all':true}\\\" href=\\\"#\\\" role=\\\"button\\\" (click)=\\\"close($event)\\\" (mousedown)=\\\"onCloseMouseDown($event)\\\">\\n                    <span class=\\\"fa fa-fw fa-close\\\"></span>\\n                </a>\\n            </div>\\n            <div #content class=\\\"ui-dialog-content ui-widget-content\\\" [ngStyle]=\\\"contentStyle\\\">\\n                <ng-content></ng-content>\\n            </div>\\n            <div class=\\\"ui-dialog-footer ui-widget-content\\\" *ngIf=\\\"footerFacet && footerFacet.first\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n            <div *ngIf=\\\"resizable\\\" class=\\\"ui-resizable-handle ui-resizable-se ui-icon ui-icon-gripsmall-diagonal-se\\\" style=\\\"z-index: 90;\\\"\\n                (mousedown)=\\\"initResize($event)\\\"></div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('dialogState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.NgZone])\n    ], Dialog);\n    return Dialog;\n}());\nexports.Dialog = Dialog;\nvar DialogModule = /** @class */ (function () {\n    function DialogModule() {\n    }\n    DialogModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Dialog, shared_1.SharedModule],\n            declarations: [Dialog]\n        })\n    ], DialogModule);\n    return DialogModule;\n}());\nexports.DialogModule = DialogModule;\n//# sourceMappingURL=dialog.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/dialog/dialog.js\n// module id = 742\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar forms_1 = require(\"@angular/forms\");\nexports.EDITOR_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Editor; }),\n    multi: true\n};\nvar Editor = /** @class */ (function () {\n    function Editor(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.onTextChange = new core_1.EventEmitter();\n        this.onSelectionChange = new core_1.EventEmitter();\n        this.onInit = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Editor.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        var editorElement = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-editor-content');\n        var toolbarElement = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-editor-toolbar');\n        this.quill = new Quill(editorElement, {\n            modules: {\n                toolbar: toolbarElement\n            },\n            placeholder: this.placeholder,\n            readOnly: this.readonly,\n            theme: 'snow',\n            formats: this.formats\n        });\n        if (this.value) {\n            this.quill.pasteHTML(this.value);\n        }\n        this.quill.on('text-change', function (delta, oldContents, source) {\n            if (source === 'user') {\n                var html = editorElement.children[0].innerHTML;\n                var text = _this.quill.getText().trim();\n                if (text.length === 0) {\n                    html = null;\n                }\n                _this.onTextChange.emit({\n                    htmlValue: html,\n                    textValue: text,\n                    delta: delta,\n                    source: source\n                });\n                _this.onModelChange(html);\n                _this.onModelTouched();\n            }\n        });\n        this.quill.on('selection-change', function (range, oldRange, source) {\n            _this.onSelectionChange.emit({\n                range: range,\n                oldRange: oldRange,\n                source: source\n            });\n        });\n        this.onInit.emit({\n            editor: this.quill\n        });\n    };\n    Editor.prototype.writeValue = function (value) {\n        this.value = value;\n        if (this.quill) {\n            if (value)\n                this.quill.pasteHTML(value);\n            else\n                this.quill.setText('');\n        }\n    };\n    Editor.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Editor.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Editor.prototype.getQuill = function () {\n        return this.quill;\n    };\n    Object.defineProperty(Editor.prototype, \"readonly\", {\n        get: function () {\n            return this._readonly;\n        },\n        set: function (val) {\n            this._readonly = val;\n            if (this.quill) {\n                if (this._readonly)\n                    this.quill.disable();\n                else\n                    this.quill.enable();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Editor.prototype, \"onTextChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Editor.prototype, \"onSelectionChange\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], Editor.prototype, \"toolbar\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Editor.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Editor.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Editor.prototype, \"placeholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Editor.prototype, \"formats\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Editor.prototype, \"onInit\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Editor.prototype, \"readonly\", null);\n    Editor = __decorate([\n        core_1.Component({\n            selector: 'p-editor',\n            template: \"\\n        <div [ngClass]=\\\"'ui-widget ui-editor-container ui-corner-all'\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-editor-toolbar ui-widget-header ui-corner-top\\\" *ngIf=\\\"toolbar\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-editor-toolbar ui-widget-header ui-corner-top\\\" *ngIf=\\\"!toolbar\\\">\\n                <span class=\\\"ql-formats\\\">\\n                    <select class=\\\"ql-header\\\">\\n                      <option value=\\\"1\\\">Heading</option>\\n                      <option value=\\\"2\\\">Subheading</option>\\n                      <option selected>Normal</option>\\n                    </select>\\n                    <select class=\\\"ql-font\\\">\\n                      <option selected>Sans Serif</option>\\n                      <option value=\\\"serif\\\">Serif</option>\\n                      <option value=\\\"monospace\\\">Monospace</option>\\n                    </select>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                    <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                    <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <select class=\\\"ql-color\\\"></select>\\n                    <select class=\\\"ql-background\\\"></select>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <button class=\\\"ql-list\\\" value=\\\"ordered\\\" aria-label=\\\"Ordered List\\\"></button>\\n                    <button class=\\\"ql-list\\\" value=\\\"bullet\\\" aria-label=\\\"Unordered List\\\"></button>\\n                    <select class=\\\"ql-align\\\">\\n                        <option selected></option>\\n                        <option value=\\\"center\\\"></option>\\n                        <option value=\\\"right\\\"></option>\\n                        <option value=\\\"justify\\\"></option>\\n                    </select>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <button class=\\\"ql-link\\\" aria-label=\\\"Insert Link\\\"></button>\\n                    <button class=\\\"ql-image\\\" aria-label=\\\"Insert Image\\\"></button>\\n                    <button class=\\\"ql-code-block\\\" aria-label=\\\"Insert Code Block\\\"></button>\\n                </span>\\n                <span class=\\\"ql-formats\\\">\\n                    <button class=\\\"ql-clean\\\" aria-label=\\\"Remove Styles\\\"></button>\\n                </span>\\n            </div>\\n            <div class=\\\"ui-editor-content\\\" [ngStyle]=\\\"style\\\"></div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, exports.EDITOR_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Editor);\n    return Editor;\n}());\nexports.Editor = Editor;\nvar EditorModule = /** @class */ (function () {\n    function EditorModule() {\n    }\n    EditorModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Editor, shared_1.SharedModule],\n            declarations: [Editor]\n        })\n    ], EditorModule);\n    return EditorModule;\n}());\nexports.EditorModule = EditorModule;\n//# sourceMappingURL=editor.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/editor/editor.js\n// module id = 743\n// module chunks = 0","/*!\n * Quill Editor v1.3.7\n * https://quilljs.com/\n * Copyright (c) 2014, Jason Chen\n * Copyright (c) 2013, salesforce.com\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"Quill\"] = factory();\n\telse\n\t\troot[\"Quill\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 109);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar format_1 = __webpack_require__(18);\nvar leaf_1 = __webpack_require__(19);\nvar scroll_1 = __webpack_require__(45);\nvar inline_1 = __webpack_require__(46);\nvar block_1 = __webpack_require__(47);\nvar embed_1 = __webpack_require__(48);\nvar text_1 = __webpack_require__(49);\nvar attributor_1 = __webpack_require__(12);\nvar class_1 = __webpack_require__(32);\nvar style_1 = __webpack_require__(33);\nvar store_1 = __webpack_require__(31);\nvar Registry = __webpack_require__(1);\nvar Parchment = {\n    Scope: Registry.Scope,\n    create: Registry.create,\n    find: Registry.find,\n    query: Registry.query,\n    register: Registry.register,\n    Container: container_1.default,\n    Format: format_1.default,\n    Leaf: leaf_1.default,\n    Embed: embed_1.default,\n    Scroll: scroll_1.default,\n    Block: block_1.default,\n    Inline: inline_1.default,\n    Text: text_1.default,\n    Attributor: {\n        Attribute: attributor_1.default,\n        Class: class_1.default,\n        Style: style_1.default,\n        Store: store_1.default,\n    },\n};\nexports.default = Parchment;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar ParchmentError = /** @class */ (function (_super) {\n    __extends(ParchmentError, _super);\n    function ParchmentError(message) {\n        var _this = this;\n        message = '[Parchment] ' + message;\n        _this = _super.call(this, message) || this;\n        _this.message = message;\n        _this.name = _this.constructor.name;\n        return _this;\n    }\n    return ParchmentError;\n}(Error));\nexports.ParchmentError = ParchmentError;\nvar attributes = {};\nvar classes = {};\nvar tags = {};\nvar types = {};\nexports.DATA_KEY = '__blot';\nvar Scope;\n(function (Scope) {\n    Scope[Scope[\"TYPE\"] = 3] = \"TYPE\";\n    Scope[Scope[\"LEVEL\"] = 12] = \"LEVEL\";\n    Scope[Scope[\"ATTRIBUTE\"] = 13] = \"ATTRIBUTE\";\n    Scope[Scope[\"BLOT\"] = 14] = \"BLOT\";\n    Scope[Scope[\"INLINE\"] = 7] = \"INLINE\";\n    Scope[Scope[\"BLOCK\"] = 11] = \"BLOCK\";\n    Scope[Scope[\"BLOCK_BLOT\"] = 10] = \"BLOCK_BLOT\";\n    Scope[Scope[\"INLINE_BLOT\"] = 6] = \"INLINE_BLOT\";\n    Scope[Scope[\"BLOCK_ATTRIBUTE\"] = 9] = \"BLOCK_ATTRIBUTE\";\n    Scope[Scope[\"INLINE_ATTRIBUTE\"] = 5] = \"INLINE_ATTRIBUTE\";\n    Scope[Scope[\"ANY\"] = 15] = \"ANY\";\n})(Scope = exports.Scope || (exports.Scope = {}));\nfunction create(input, value) {\n    var match = query(input);\n    if (match == null) {\n        throw new ParchmentError(\"Unable to create \" + input + \" blot\");\n    }\n    var BlotClass = match;\n    var node = \n    // @ts-ignore\n    input instanceof Node || input['nodeType'] === Node.TEXT_NODE ? input : BlotClass.create(value);\n    return new BlotClass(node, value);\n}\nexports.create = create;\nfunction find(node, bubble) {\n    if (bubble === void 0) { bubble = false; }\n    if (node == null)\n        return null;\n    // @ts-ignore\n    if (node[exports.DATA_KEY] != null)\n        return node[exports.DATA_KEY].blot;\n    if (bubble)\n        return find(node.parentNode, bubble);\n    return null;\n}\nexports.find = find;\nfunction query(query, scope) {\n    if (scope === void 0) { scope = Scope.ANY; }\n    var match;\n    if (typeof query === 'string') {\n        match = types[query] || attributes[query];\n        // @ts-ignore\n    }\n    else if (query instanceof Text || query['nodeType'] === Node.TEXT_NODE) {\n        match = types['text'];\n    }\n    else if (typeof query === 'number') {\n        if (query & Scope.LEVEL & Scope.BLOCK) {\n            match = types['block'];\n        }\n        else if (query & Scope.LEVEL & Scope.INLINE) {\n            match = types['inline'];\n        }\n    }\n    else if (query instanceof HTMLElement) {\n        var names = (query.getAttribute('class') || '').split(/\\s+/);\n        for (var i in names) {\n            match = classes[names[i]];\n            if (match)\n                break;\n        }\n        match = match || tags[query.tagName];\n    }\n    if (match == null)\n        return null;\n    // @ts-ignore\n    if (scope & Scope.LEVEL & match.scope && scope & Scope.TYPE & match.scope)\n        return match;\n    return null;\n}\nexports.query = query;\nfunction register() {\n    var Definitions = [];\n    for (var _i = 0; _i < arguments.length; _i++) {\n        Definitions[_i] = arguments[_i];\n    }\n    if (Definitions.length > 1) {\n        return Definitions.map(function (d) {\n            return register(d);\n        });\n    }\n    var Definition = Definitions[0];\n    if (typeof Definition.blotName !== 'string' && typeof Definition.attrName !== 'string') {\n        throw new ParchmentError('Invalid definition');\n    }\n    else if (Definition.blotName === 'abstract') {\n        throw new ParchmentError('Cannot register abstract class');\n    }\n    types[Definition.blotName || Definition.attrName] = Definition;\n    if (typeof Definition.keyName === 'string') {\n        attributes[Definition.keyName] = Definition;\n    }\n    else {\n        if (Definition.className != null) {\n            classes[Definition.className] = Definition;\n        }\n        if (Definition.tagName != null) {\n            if (Array.isArray(Definition.tagName)) {\n                Definition.tagName = Definition.tagName.map(function (tagName) {\n                    return tagName.toUpperCase();\n                });\n            }\n            else {\n                Definition.tagName = Definition.tagName.toUpperCase();\n            }\n            var tagNames = Array.isArray(Definition.tagName) ? Definition.tagName : [Definition.tagName];\n            tagNames.forEach(function (tag) {\n                if (tags[tag] == null || Definition.className == null) {\n                    tags[tag] = Definition;\n                }\n            });\n        }\n    }\n    return Definition;\n}\nexports.register = register;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar diff = __webpack_require__(51);\nvar equal = __webpack_require__(11);\nvar extend = __webpack_require__(3);\nvar op = __webpack_require__(20);\n\n\nvar NULL_CHARACTER = String.fromCharCode(0);  // Placeholder char for embed in diff()\n\n\nvar Delta = function (ops) {\n  // Assume we are given a well formed ops\n  if (Array.isArray(ops)) {\n    this.ops = ops;\n  } else if (ops != null && Array.isArray(ops.ops)) {\n    this.ops = ops.ops;\n  } else {\n    this.ops = [];\n  }\n};\n\n\nDelta.prototype.insert = function (text, attributes) {\n  var newOp = {};\n  if (text.length === 0) return this;\n  newOp.insert = text;\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype['delete'] = function (length) {\n  if (length <= 0) return this;\n  return this.push({ 'delete': length });\n};\n\nDelta.prototype.retain = function (length, attributes) {\n  if (length <= 0) return this;\n  var newOp = { retain: length };\n  if (attributes != null && typeof attributes === 'object' && Object.keys(attributes).length > 0) {\n    newOp.attributes = attributes;\n  }\n  return this.push(newOp);\n};\n\nDelta.prototype.push = function (newOp) {\n  var index = this.ops.length;\n  var lastOp = this.ops[index - 1];\n  newOp = extend(true, {}, newOp);\n  if (typeof lastOp === 'object') {\n    if (typeof newOp['delete'] === 'number' && typeof lastOp['delete'] === 'number') {\n      this.ops[index - 1] = { 'delete': lastOp['delete'] + newOp['delete'] };\n      return this;\n    }\n    // Since it does not matter if we insert before or after deleting at the same index,\n    // always prefer to insert first\n    if (typeof lastOp['delete'] === 'number' && newOp.insert != null) {\n      index -= 1;\n      lastOp = this.ops[index - 1];\n      if (typeof lastOp !== 'object') {\n        this.ops.unshift(newOp);\n        return this;\n      }\n    }\n    if (equal(newOp.attributes, lastOp.attributes)) {\n      if (typeof newOp.insert === 'string' && typeof lastOp.insert === 'string') {\n        this.ops[index - 1] = { insert: lastOp.insert + newOp.insert };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      } else if (typeof newOp.retain === 'number' && typeof lastOp.retain === 'number') {\n        this.ops[index - 1] = { retain: lastOp.retain + newOp.retain };\n        if (typeof newOp.attributes === 'object') this.ops[index - 1].attributes = newOp.attributes\n        return this;\n      }\n    }\n  }\n  if (index === this.ops.length) {\n    this.ops.push(newOp);\n  } else {\n    this.ops.splice(index, 0, newOp);\n  }\n  return this;\n};\n\nDelta.prototype.chop = function () {\n  var lastOp = this.ops[this.ops.length - 1];\n  if (lastOp && lastOp.retain && !lastOp.attributes) {\n    this.ops.pop();\n  }\n  return this;\n};\n\nDelta.prototype.filter = function (predicate) {\n  return this.ops.filter(predicate);\n};\n\nDelta.prototype.forEach = function (predicate) {\n  this.ops.forEach(predicate);\n};\n\nDelta.prototype.map = function (predicate) {\n  return this.ops.map(predicate);\n};\n\nDelta.prototype.partition = function (predicate) {\n  var passed = [], failed = [];\n  this.forEach(function(op) {\n    var target = predicate(op) ? passed : failed;\n    target.push(op);\n  });\n  return [passed, failed];\n};\n\nDelta.prototype.reduce = function (predicate, initial) {\n  return this.ops.reduce(predicate, initial);\n};\n\nDelta.prototype.changeLength = function () {\n  return this.reduce(function (length, elem) {\n    if (elem.insert) {\n      return length + op.length(elem);\n    } else if (elem.delete) {\n      return length - elem.delete;\n    }\n    return length;\n  }, 0);\n};\n\nDelta.prototype.length = function () {\n  return this.reduce(function (length, elem) {\n    return length + op.length(elem);\n  }, 0);\n};\n\nDelta.prototype.slice = function (start, end) {\n  start = start || 0;\n  if (typeof end !== 'number') end = Infinity;\n  var ops = [];\n  var iter = op.iterator(this.ops);\n  var index = 0;\n  while (index < end && iter.hasNext()) {\n    var nextOp;\n    if (index < start) {\n      nextOp = iter.next(start - index);\n    } else {\n      nextOp = iter.next(end - index);\n      ops.push(nextOp);\n    }\n    index += op.length(nextOp);\n  }\n  return new Delta(ops);\n};\n\n\nDelta.prototype.compose = function (other) {\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var ops = [];\n  var firstOther = otherIter.peek();\n  if (firstOther != null && typeof firstOther.retain === 'number' && firstOther.attributes == null) {\n    var firstLeft = firstOther.retain;\n    while (thisIter.peekType() === 'insert' && thisIter.peekLength() <= firstLeft) {\n      firstLeft -= thisIter.peekLength();\n      ops.push(thisIter.next());\n    }\n    if (firstOther.retain - firstLeft > 0) {\n      otherIter.next(firstOther.retain - firstLeft);\n    }\n  }\n  var delta = new Delta(ops);\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else if (thisIter.peekType() === 'delete') {\n      delta.push(thisIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (typeof otherOp.retain === 'number') {\n        var newOp = {};\n        if (typeof thisOp.retain === 'number') {\n          newOp.retain = length;\n        } else {\n          newOp.insert = thisOp.insert;\n        }\n        // Preserve null when composing with a retain, otherwise remove it for inserts\n        var attributes = op.attributes.compose(thisOp.attributes, otherOp.attributes, typeof thisOp.retain === 'number');\n        if (attributes) newOp.attributes = attributes;\n        delta.push(newOp);\n\n        // Optimization if rest of other is just retain\n        if (!otherIter.hasNext() && equal(delta.ops[delta.ops.length - 1], newOp)) {\n          var rest = new Delta(thisIter.rest());\n          return delta.concat(rest).chop();\n        }\n\n      // Other op should be delete, we could be an insert or retain\n      // Insert + delete cancels out\n      } else if (typeof otherOp['delete'] === 'number' && typeof thisOp.retain === 'number') {\n        delta.push(otherOp);\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.concat = function (other) {\n  var delta = new Delta(this.ops.slice());\n  if (other.ops.length > 0) {\n    delta.push(other.ops[0]);\n    delta.ops = delta.ops.concat(other.ops.slice(1));\n  }\n  return delta;\n};\n\nDelta.prototype.diff = function (other, index) {\n  if (this.ops === other.ops) {\n    return new Delta();\n  }\n  var strings = [this, other].map(function (delta) {\n    return delta.map(function (op) {\n      if (op.insert != null) {\n        return typeof op.insert === 'string' ? op.insert : NULL_CHARACTER;\n      }\n      var prep = (delta === other) ? 'on' : 'with';\n      throw new Error('diff() called ' + prep + ' non-document');\n    }).join('');\n  });\n  var delta = new Delta();\n  var diffResult = diff(strings[0], strings[1], index);\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  diffResult.forEach(function (component) {\n    var length = component[1].length;\n    while (length > 0) {\n      var opLength = 0;\n      switch (component[0]) {\n        case diff.INSERT:\n          opLength = Math.min(otherIter.peekLength(), length);\n          delta.push(otherIter.next(opLength));\n          break;\n        case diff.DELETE:\n          opLength = Math.min(length, thisIter.peekLength());\n          thisIter.next(opLength);\n          delta['delete'](opLength);\n          break;\n        case diff.EQUAL:\n          opLength = Math.min(thisIter.peekLength(), otherIter.peekLength(), length);\n          var thisOp = thisIter.next(opLength);\n          var otherOp = otherIter.next(opLength);\n          if (equal(thisOp.insert, otherOp.insert)) {\n            delta.retain(opLength, op.attributes.diff(thisOp.attributes, otherOp.attributes));\n          } else {\n            delta.push(otherOp)['delete'](opLength);\n          }\n          break;\n      }\n      length -= opLength;\n    }\n  });\n  return delta.chop();\n};\n\nDelta.prototype.eachLine = function (predicate, newline) {\n  newline = newline || '\\n';\n  var iter = op.iterator(this.ops);\n  var line = new Delta();\n  var i = 0;\n  while (iter.hasNext()) {\n    if (iter.peekType() !== 'insert') return;\n    var thisOp = iter.peek();\n    var start = op.length(thisOp) - iter.peekLength();\n    var index = typeof thisOp.insert === 'string' ?\n      thisOp.insert.indexOf(newline, start) - start : -1;\n    if (index < 0) {\n      line.push(iter.next());\n    } else if (index > 0) {\n      line.push(iter.next(index));\n    } else {\n      if (predicate(line, iter.next(1).attributes || {}, i) === false) {\n        return;\n      }\n      i += 1;\n      line = new Delta();\n    }\n  }\n  if (line.length() > 0) {\n    predicate(line, {}, i);\n  }\n};\n\nDelta.prototype.transform = function (other, priority) {\n  priority = !!priority;\n  if (typeof other === 'number') {\n    return this.transformPosition(other, priority);\n  }\n  var thisIter = op.iterator(this.ops);\n  var otherIter = op.iterator(other.ops);\n  var delta = new Delta();\n  while (thisIter.hasNext() || otherIter.hasNext()) {\n    if (thisIter.peekType() === 'insert' && (priority || otherIter.peekType() !== 'insert')) {\n      delta.retain(op.length(thisIter.next()));\n    } else if (otherIter.peekType() === 'insert') {\n      delta.push(otherIter.next());\n    } else {\n      var length = Math.min(thisIter.peekLength(), otherIter.peekLength());\n      var thisOp = thisIter.next(length);\n      var otherOp = otherIter.next(length);\n      if (thisOp['delete']) {\n        // Our delete either makes their delete redundant or removes their retain\n        continue;\n      } else if (otherOp['delete']) {\n        delta.push(otherOp);\n      } else {\n        // We retain either their retain or insert\n        delta.retain(length, op.attributes.transform(thisOp.attributes, otherOp.attributes, priority));\n      }\n    }\n  }\n  return delta.chop();\n};\n\nDelta.prototype.transformPosition = function (index, priority) {\n  priority = !!priority;\n  var thisIter = op.iterator(this.ops);\n  var offset = 0;\n  while (thisIter.hasNext() && offset <= index) {\n    var length = thisIter.peekLength();\n    var nextType = thisIter.peekType();\n    thisIter.next();\n    if (nextType === 'delete') {\n      index -= Math.min(length, index - offset);\n      continue;\n    } else if (nextType === 'insert' && (offset < index || !priority)) {\n      index += length;\n    }\n    offset += length;\n  }\n  return index;\n};\n\n\nmodule.exports = Delta;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BlockEmbed = exports.bubbleFormats = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar NEWLINE_LENGTH = 1;\n\nvar BlockEmbed = function (_Parchment$Embed) {\n  _inherits(BlockEmbed, _Parchment$Embed);\n\n  function BlockEmbed() {\n    _classCallCheck(this, BlockEmbed);\n\n    return _possibleConstructorReturn(this, (BlockEmbed.__proto__ || Object.getPrototypeOf(BlockEmbed)).apply(this, arguments));\n  }\n\n  _createClass(BlockEmbed, [{\n    key: 'attach',\n    value: function attach() {\n      _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'attach', this).call(this);\n      this.attributes = new _parchment2.default.Attributor.Store(this.domNode);\n    }\n  }, {\n    key: 'delta',\n    value: function delta() {\n      return new _quillDelta2.default().insert(this.value(), (0, _extend2.default)(this.formats(), this.attributes.values()));\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      var attribute = _parchment2.default.query(name, _parchment2.default.Scope.BLOCK_ATTRIBUTE);\n      if (attribute != null) {\n        this.attributes.attribute(attribute, value);\n      }\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      this.format(name, value);\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (typeof value === 'string' && value.endsWith('\\n')) {\n        var block = _parchment2.default.create(Block.blotName);\n        this.parent.insertBefore(block, index === 0 ? this : this.next);\n        block.insertAt(0, value.slice(0, -1));\n      } else {\n        _get(BlockEmbed.prototype.__proto__ || Object.getPrototypeOf(BlockEmbed.prototype), 'insertAt', this).call(this, index, value, def);\n      }\n    }\n  }]);\n\n  return BlockEmbed;\n}(_parchment2.default.Embed);\n\nBlockEmbed.scope = _parchment2.default.Scope.BLOCK_BLOT;\n// It is important for cursor behavior BlockEmbeds use tags that are block level elements\n\n\nvar Block = function (_Parchment$Block) {\n  _inherits(Block, _Parchment$Block);\n\n  function Block(domNode) {\n    _classCallCheck(this, Block);\n\n    var _this2 = _possibleConstructorReturn(this, (Block.__proto__ || Object.getPrototypeOf(Block)).call(this, domNode));\n\n    _this2.cache = {};\n    return _this2;\n  }\n\n  _createClass(Block, [{\n    key: 'delta',\n    value: function delta() {\n      if (this.cache.delta == null) {\n        this.cache.delta = this.descendants(_parchment2.default.Leaf).reduce(function (delta, leaf) {\n          if (leaf.length() === 0) {\n            return delta;\n          } else {\n            return delta.insert(leaf.value(), bubbleFormats(leaf));\n          }\n        }, new _quillDelta2.default()).insert('\\n', bubbleFormats(this));\n      }\n      return this.cache.delta;\n    }\n  }, {\n    key: 'deleteAt',\n    value: function deleteAt(index, length) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'deleteAt', this).call(this, index, length);\n      this.cache = {};\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (length <= 0) return;\n      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n        if (index + length === this.length()) {\n          this.format(name, value);\n        }\n      } else {\n        _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'formatAt', this).call(this, index, Math.min(length, this.length() - index - 1), name, value);\n      }\n      this.cache = {};\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null) return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, index, value, def);\n      if (value.length === 0) return;\n      var lines = value.split('\\n');\n      var text = lines.shift();\n      if (text.length > 0) {\n        if (index < this.length() - 1 || this.children.tail == null) {\n          _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertAt', this).call(this, Math.min(index, this.length() - 1), text);\n        } else {\n          this.children.tail.insertAt(this.children.tail.length(), text);\n        }\n        this.cache = {};\n      }\n      var block = this;\n      lines.reduce(function (index, line) {\n        block = block.split(index, true);\n        block.insertAt(0, line);\n        return line.length;\n      }, index + text.length);\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      var head = this.children.head;\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'insertBefore', this).call(this, blot, ref);\n      if (head instanceof _break2.default) {\n        head.remove();\n      }\n      this.cache = {};\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      if (this.cache.length == null) {\n        this.cache.length = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'length', this).call(this) + NEWLINE_LENGTH;\n      }\n      return this.cache.length;\n    }\n  }, {\n    key: 'moveChildren',\n    value: function moveChildren(target, ref) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'moveChildren', this).call(this, target, ref);\n      this.cache = {};\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'optimize', this).call(this, context);\n      this.cache = {};\n    }\n  }, {\n    key: 'path',\n    value: function path(index) {\n      return _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'path', this).call(this, index, true);\n    }\n  }, {\n    key: 'removeChild',\n    value: function removeChild(child) {\n      _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'removeChild', this).call(this, child);\n      this.cache = {};\n    }\n  }, {\n    key: 'split',\n    value: function split(index) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (force && (index === 0 || index >= this.length() - NEWLINE_LENGTH)) {\n        var clone = this.clone();\n        if (index === 0) {\n          this.parent.insertBefore(clone, this);\n          return this;\n        } else {\n          this.parent.insertBefore(clone, this.next);\n          return clone;\n        }\n      } else {\n        var next = _get(Block.prototype.__proto__ || Object.getPrototypeOf(Block.prototype), 'split', this).call(this, index, force);\n        this.cache = {};\n        return next;\n      }\n    }\n  }]);\n\n  return Block;\n}(_parchment2.default.Block);\n\nBlock.blotName = 'block';\nBlock.tagName = 'P';\nBlock.defaultChild = 'break';\nBlock.allowedChildren = [_inline2.default, _parchment2.default.Embed, _text2.default];\n\nfunction bubbleFormats(blot) {\n  var formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  if (blot == null) return formats;\n  if (typeof blot.formats === 'function') {\n    formats = (0, _extend2.default)(formats, blot.formats());\n  }\n  if (blot.parent == null || blot.parent.blotName == 'scroll' || blot.parent.statics.scope !== blot.statics.scope) {\n    return formats;\n  }\n  return bubbleFormats(blot.parent, formats);\n}\n\nexports.bubbleFormats = bubbleFormats;\nexports.BlockEmbed = BlockEmbed;\nexports.default = Block;\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.overload = exports.expandConfig = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\n__webpack_require__(50);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _editor = __webpack_require__(14);\n\nvar _editor2 = _interopRequireDefault(_editor);\n\nvar _emitter3 = __webpack_require__(8);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _selection = __webpack_require__(15);\n\nvar _selection2 = _interopRequireDefault(_selection);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _theme = __webpack_require__(34);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill');\n\nvar Quill = function () {\n  _createClass(Quill, null, [{\n    key: 'debug',\n    value: function debug(limit) {\n      if (limit === true) {\n        limit = 'log';\n      }\n      _logger2.default.level(limit);\n    }\n  }, {\n    key: 'find',\n    value: function find(node) {\n      return node.__quill || _parchment2.default.find(node);\n    }\n  }, {\n    key: 'import',\n    value: function _import(name) {\n      if (this.imports[name] == null) {\n        debug.error('Cannot import ' + name + '. Are you sure it was registered?');\n      }\n      return this.imports[name];\n    }\n  }, {\n    key: 'register',\n    value: function register(path, target) {\n      var _this = this;\n\n      var overwrite = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n      if (typeof path !== 'string') {\n        var name = path.attrName || path.blotName;\n        if (typeof name === 'string') {\n          // register(Blot | Attributor, overwrite)\n          this.register('formats/' + name, path, target);\n        } else {\n          Object.keys(path).forEach(function (key) {\n            _this.register(key, path[key], target);\n          });\n        }\n      } else {\n        if (this.imports[path] != null && !overwrite) {\n          debug.warn('Overwriting ' + path + ' with', target);\n        }\n        this.imports[path] = target;\n        if ((path.startsWith('blots/') || path.startsWith('formats/')) && target.blotName !== 'abstract') {\n          _parchment2.default.register(target);\n        } else if (path.startsWith('modules') && typeof target.register === 'function') {\n          target.register();\n        }\n      }\n    }\n  }]);\n\n  function Quill(container) {\n    var _this2 = this;\n\n    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n    _classCallCheck(this, Quill);\n\n    this.options = expandConfig(container, options);\n    this.container = this.options.container;\n    if (this.container == null) {\n      return debug.error('Invalid Quill container', container);\n    }\n    if (this.options.debug) {\n      Quill.debug(this.options.debug);\n    }\n    var html = this.container.innerHTML.trim();\n    this.container.classList.add('ql-container');\n    this.container.innerHTML = '';\n    this.container.__quill = this;\n    this.root = this.addContainer('ql-editor');\n    this.root.classList.add('ql-blank');\n    this.root.setAttribute('data-gramm', false);\n    this.scrollingContainer = this.options.scrollingContainer || this.root;\n    this.emitter = new _emitter4.default();\n    this.scroll = _parchment2.default.create(this.root, {\n      emitter: this.emitter,\n      whitelist: this.options.formats\n    });\n    this.editor = new _editor2.default(this.scroll);\n    this.selection = new _selection2.default(this.scroll, this.emitter);\n    this.theme = new this.options.theme(this, this.options);\n    this.keyboard = this.theme.addModule('keyboard');\n    this.clipboard = this.theme.addModule('clipboard');\n    this.history = this.theme.addModule('history');\n    this.theme.init();\n    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type) {\n      if (type === _emitter4.default.events.TEXT_CHANGE) {\n        _this2.root.classList.toggle('ql-blank', _this2.editor.isBlank());\n      }\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_UPDATE, function (source, mutations) {\n      var range = _this2.selection.lastRange;\n      var index = range && range.length === 0 ? range.index : undefined;\n      modify.call(_this2, function () {\n        return _this2.editor.update(null, mutations, index);\n      }, source);\n    });\n    var contents = this.clipboard.convert('<div class=\\'ql-editor\\' style=\"white-space: normal;\">' + html + '<p><br></p></div>');\n    this.setContents(contents);\n    this.history.clear();\n    if (this.options.placeholder) {\n      this.root.setAttribute('data-placeholder', this.options.placeholder);\n    }\n    if (this.options.readOnly) {\n      this.disable();\n    }\n  }\n\n  _createClass(Quill, [{\n    key: 'addContainer',\n    value: function addContainer(container) {\n      var refNode = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      if (typeof container === 'string') {\n        var className = container;\n        container = document.createElement('div');\n        container.classList.add(className);\n      }\n      this.container.insertBefore(container, refNode);\n      return container;\n    }\n  }, {\n    key: 'blur',\n    value: function blur() {\n      this.selection.setRange(null);\n    }\n  }, {\n    key: 'deleteText',\n    value: function deleteText(index, length, source) {\n      var _this3 = this;\n\n      var _overload = overload(index, length, source);\n\n      var _overload2 = _slicedToArray(_overload, 4);\n\n      index = _overload2[0];\n      length = _overload2[1];\n      source = _overload2[3];\n\n      return modify.call(this, function () {\n        return _this3.editor.deleteText(index, length);\n      }, source, index, -1 * length);\n    }\n  }, {\n    key: 'disable',\n    value: function disable() {\n      this.enable(false);\n    }\n  }, {\n    key: 'enable',\n    value: function enable() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.scroll.enable(enabled);\n      this.container.classList.toggle('ql-disabled', !enabled);\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      var scrollTop = this.scrollingContainer.scrollTop;\n      this.selection.focus();\n      this.scrollingContainer.scrollTop = scrollTop;\n      this.scrollIntoView();\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      var _this4 = this;\n\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        var range = _this4.getSelection(true);\n        var change = new _quillDelta2.default();\n        if (range == null) {\n          return change;\n        } else if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK)) {\n          change = _this4.editor.formatLine(range.index, range.length, _defineProperty({}, name, value));\n        } else if (range.length === 0) {\n          _this4.selection.format(name, value);\n          return change;\n        } else {\n          change = _this4.editor.formatText(range.index, range.length, _defineProperty({}, name, value));\n        }\n        _this4.setSelection(range, _emitter4.default.sources.SILENT);\n        return change;\n      }, source);\n    }\n  }, {\n    key: 'formatLine',\n    value: function formatLine(index, length, name, value, source) {\n      var _this5 = this;\n\n      var formats = void 0;\n\n      var _overload3 = overload(index, length, name, value, source);\n\n      var _overload4 = _slicedToArray(_overload3, 4);\n\n      index = _overload4[0];\n      length = _overload4[1];\n      formats = _overload4[2];\n      source = _overload4[3];\n\n      return modify.call(this, function () {\n        return _this5.editor.formatLine(index, length, formats);\n      }, source, index, 0);\n    }\n  }, {\n    key: 'formatText',\n    value: function formatText(index, length, name, value, source) {\n      var _this6 = this;\n\n      var formats = void 0;\n\n      var _overload5 = overload(index, length, name, value, source);\n\n      var _overload6 = _slicedToArray(_overload5, 4);\n\n      index = _overload6[0];\n      length = _overload6[1];\n      formats = _overload6[2];\n      source = _overload6[3];\n\n      return modify.call(this, function () {\n        return _this6.editor.formatText(index, length, formats);\n      }, source, index, 0);\n    }\n  }, {\n    key: 'getBounds',\n    value: function getBounds(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var bounds = void 0;\n      if (typeof index === 'number') {\n        bounds = this.selection.getBounds(index, length);\n      } else {\n        bounds = this.selection.getBounds(index.index, index.length);\n      }\n      var containerBounds = this.container.getBoundingClientRect();\n      return {\n        bottom: bounds.bottom - containerBounds.top,\n        height: bounds.height,\n        left: bounds.left - containerBounds.left,\n        right: bounds.right - containerBounds.left,\n        top: bounds.top - containerBounds.top,\n        width: bounds.width\n      };\n    }\n  }, {\n    key: 'getContents',\n    value: function getContents() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n      var _overload7 = overload(index, length);\n\n      var _overload8 = _slicedToArray(_overload7, 2);\n\n      index = _overload8[0];\n      length = _overload8[1];\n\n      return this.editor.getContents(index, length);\n    }\n  }, {\n    key: 'getFormat',\n    value: function getFormat() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getSelection(true);\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      if (typeof index === 'number') {\n        return this.editor.getFormat(index, length);\n      } else {\n        return this.editor.getFormat(index.index, index.length);\n      }\n    }\n  }, {\n    key: 'getIndex',\n    value: function getIndex(blot) {\n      return blot.offset(this.scroll);\n    }\n  }, {\n    key: 'getLength',\n    value: function getLength() {\n      return this.scroll.length();\n    }\n  }, {\n    key: 'getLeaf',\n    value: function getLeaf(index) {\n      return this.scroll.leaf(index);\n    }\n  }, {\n    key: 'getLine',\n    value: function getLine(index) {\n      return this.scroll.line(index);\n    }\n  }, {\n    key: 'getLines',\n    value: function getLines() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n      if (typeof index !== 'number') {\n        return this.scroll.lines(index.index, index.length);\n      } else {\n        return this.scroll.lines(index, length);\n      }\n    }\n  }, {\n    key: 'getModule',\n    value: function getModule(name) {\n      return this.theme.modules[name];\n    }\n  }, {\n    key: 'getSelection',\n    value: function getSelection() {\n      var focus = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n\n      if (focus) this.focus();\n      this.update(); // Make sure we access getRange with editor in consistent state\n      return this.selection.getRange()[0];\n    }\n  }, {\n    key: 'getText',\n    value: function getText() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getLength() - index;\n\n      var _overload9 = overload(index, length);\n\n      var _overload10 = _slicedToArray(_overload9, 2);\n\n      index = _overload10[0];\n      length = _overload10[1];\n\n      return this.editor.getText(index, length);\n    }\n  }, {\n    key: 'hasFocus',\n    value: function hasFocus() {\n      return this.selection.hasFocus();\n    }\n  }, {\n    key: 'insertEmbed',\n    value: function insertEmbed(index, embed, value) {\n      var _this7 = this;\n\n      var source = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : Quill.sources.API;\n\n      return modify.call(this, function () {\n        return _this7.editor.insertEmbed(index, embed, value);\n      }, source, index);\n    }\n  }, {\n    key: 'insertText',\n    value: function insertText(index, text, name, value, source) {\n      var _this8 = this;\n\n      var formats = void 0;\n\n      var _overload11 = overload(index, 0, name, value, source);\n\n      var _overload12 = _slicedToArray(_overload11, 4);\n\n      index = _overload12[0];\n      formats = _overload12[2];\n      source = _overload12[3];\n\n      return modify.call(this, function () {\n        return _this8.editor.insertText(index, text, formats);\n      }, source, index, text.length);\n    }\n  }, {\n    key: 'isEnabled',\n    value: function isEnabled() {\n      return !this.container.classList.contains('ql-disabled');\n    }\n  }, {\n    key: 'off',\n    value: function off() {\n      return this.emitter.off.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'on',\n    value: function on() {\n      return this.emitter.on.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'once',\n    value: function once() {\n      return this.emitter.once.apply(this.emitter, arguments);\n    }\n  }, {\n    key: 'pasteHTML',\n    value: function pasteHTML(index, html, source) {\n      this.clipboard.dangerouslyPasteHTML(index, html, source);\n    }\n  }, {\n    key: 'removeFormat',\n    value: function removeFormat(index, length, source) {\n      var _this9 = this;\n\n      var _overload13 = overload(index, length, source);\n\n      var _overload14 = _slicedToArray(_overload13, 4);\n\n      index = _overload14[0];\n      length = _overload14[1];\n      source = _overload14[3];\n\n      return modify.call(this, function () {\n        return _this9.editor.removeFormat(index, length);\n      }, source, index);\n    }\n  }, {\n    key: 'scrollIntoView',\n    value: function scrollIntoView() {\n      this.selection.scrollIntoView(this.scrollingContainer);\n    }\n  }, {\n    key: 'setContents',\n    value: function setContents(delta) {\n      var _this10 = this;\n\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        delta = new _quillDelta2.default(delta);\n        var length = _this10.getLength();\n        var deleted = _this10.editor.deleteText(0, length);\n        var applied = _this10.editor.applyDelta(delta);\n        var lastOp = applied.ops[applied.ops.length - 1];\n        if (lastOp != null && typeof lastOp.insert === 'string' && lastOp.insert[lastOp.insert.length - 1] === '\\n') {\n          _this10.editor.deleteText(_this10.getLength() - 1, 1);\n          applied.delete(1);\n        }\n        var ret = deleted.compose(applied);\n        return ret;\n      }, source);\n    }\n  }, {\n    key: 'setSelection',\n    value: function setSelection(index, length, source) {\n      if (index == null) {\n        this.selection.setRange(null, length || Quill.sources.API);\n      } else {\n        var _overload15 = overload(index, length, source);\n\n        var _overload16 = _slicedToArray(_overload15, 4);\n\n        index = _overload16[0];\n        length = _overload16[1];\n        source = _overload16[3];\n\n        this.selection.setRange(new _selection.Range(index, length), source);\n        if (source !== _emitter4.default.sources.SILENT) {\n          this.selection.scrollIntoView(this.scrollingContainer);\n        }\n      }\n    }\n  }, {\n    key: 'setText',\n    value: function setText(text) {\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      var delta = new _quillDelta2.default().insert(text);\n      return this.setContents(delta, source);\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n      var change = this.scroll.update(source); // Will update selection before selection.update() does if text changes\n      this.selection.update(source);\n      return change;\n    }\n  }, {\n    key: 'updateContents',\n    value: function updateContents(delta) {\n      var _this11 = this;\n\n      var source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _emitter4.default.sources.API;\n\n      return modify.call(this, function () {\n        delta = new _quillDelta2.default(delta);\n        return _this11.editor.applyDelta(delta, source);\n      }, source, true);\n    }\n  }]);\n\n  return Quill;\n}();\n\nQuill.DEFAULTS = {\n  bounds: null,\n  formats: null,\n  modules: {},\n  placeholder: '',\n  readOnly: false,\n  scrollingContainer: null,\n  strict: true,\n  theme: 'default'\n};\nQuill.events = _emitter4.default.events;\nQuill.sources = _emitter4.default.sources;\n// eslint-disable-next-line no-undef\nQuill.version =  false ? 'dev' : \"1.3.7\";\n\nQuill.imports = {\n  'delta': _quillDelta2.default,\n  'parchment': _parchment2.default,\n  'core/module': _module2.default,\n  'core/theme': _theme2.default\n};\n\nfunction expandConfig(container, userConfig) {\n  userConfig = (0, _extend2.default)(true, {\n    container: container,\n    modules: {\n      clipboard: true,\n      keyboard: true,\n      history: true\n    }\n  }, userConfig);\n  if (!userConfig.theme || userConfig.theme === Quill.DEFAULTS.theme) {\n    userConfig.theme = _theme2.default;\n  } else {\n    userConfig.theme = Quill.import('themes/' + userConfig.theme);\n    if (userConfig.theme == null) {\n      throw new Error('Invalid theme ' + userConfig.theme + '. Did you register it?');\n    }\n  }\n  var themeConfig = (0, _extend2.default)(true, {}, userConfig.theme.DEFAULTS);\n  [themeConfig, userConfig].forEach(function (config) {\n    config.modules = config.modules || {};\n    Object.keys(config.modules).forEach(function (module) {\n      if (config.modules[module] === true) {\n        config.modules[module] = {};\n      }\n    });\n  });\n  var moduleNames = Object.keys(themeConfig.modules).concat(Object.keys(userConfig.modules));\n  var moduleConfig = moduleNames.reduce(function (config, name) {\n    var moduleClass = Quill.import('modules/' + name);\n    if (moduleClass == null) {\n      debug.error('Cannot load ' + name + ' module. Are you sure you registered it?');\n    } else {\n      config[name] = moduleClass.DEFAULTS || {};\n    }\n    return config;\n  }, {});\n  // Special case toolbar shorthand\n  if (userConfig.modules != null && userConfig.modules.toolbar && userConfig.modules.toolbar.constructor !== Object) {\n    userConfig.modules.toolbar = {\n      container: userConfig.modules.toolbar\n    };\n  }\n  userConfig = (0, _extend2.default)(true, {}, Quill.DEFAULTS, { modules: moduleConfig }, themeConfig, userConfig);\n  ['bounds', 'container', 'scrollingContainer'].forEach(function (key) {\n    if (typeof userConfig[key] === 'string') {\n      userConfig[key] = document.querySelector(userConfig[key]);\n    }\n  });\n  userConfig.modules = Object.keys(userConfig.modules).reduce(function (config, name) {\n    if (userConfig.modules[name]) {\n      config[name] = userConfig.modules[name];\n    }\n    return config;\n  }, {});\n  return userConfig;\n}\n\n// Handle selection preservation and TEXT_CHANGE emission\n// common to modification APIs\nfunction modify(modifier, source, index, shift) {\n  if (this.options.strict && !this.isEnabled() && source === _emitter4.default.sources.USER) {\n    return new _quillDelta2.default();\n  }\n  var range = index == null ? null : this.getSelection();\n  var oldDelta = this.editor.delta;\n  var change = modifier();\n  if (range != null) {\n    if (index === true) index = range.index;\n    if (shift == null) {\n      range = shiftRange(range, change, source);\n    } else if (shift !== 0) {\n      range = shiftRange(range, index, shift, source);\n    }\n    this.setSelection(range, _emitter4.default.sources.SILENT);\n  }\n  if (change.length() > 0) {\n    var _emitter;\n\n    var args = [_emitter4.default.events.TEXT_CHANGE, change, oldDelta, source];\n    (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n    if (source !== _emitter4.default.sources.SILENT) {\n      var _emitter2;\n\n      (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n    }\n  }\n  return change;\n}\n\nfunction overload(index, length, name, value, source) {\n  var formats = {};\n  if (typeof index.index === 'number' && typeof index.length === 'number') {\n    // Allow for throwaway end (used by insertText/insertEmbed)\n    if (typeof length !== 'number') {\n      source = value, value = name, name = length, length = index.length, index = index.index;\n    } else {\n      length = index.length, index = index.index;\n    }\n  } else if (typeof length !== 'number') {\n    source = value, value = name, name = length, length = 0;\n  }\n  // Handle format being object, two format name/value strings or excluded\n  if ((typeof name === 'undefined' ? 'undefined' : _typeof(name)) === 'object') {\n    formats = name;\n    source = value;\n  } else if (typeof name === 'string') {\n    if (value != null) {\n      formats[name] = value;\n    } else {\n      source = name;\n    }\n  }\n  // Handle optional source\n  source = source || _emitter4.default.sources.API;\n  return [index, length, formats, source];\n}\n\nfunction shiftRange(range, index, length, source) {\n  if (range == null) return null;\n  var start = void 0,\n      end = void 0;\n  if (index instanceof _quillDelta2.default) {\n    var _map = [range.index, range.index + range.length].map(function (pos) {\n      return index.transformPosition(pos, source !== _emitter4.default.sources.USER);\n    });\n\n    var _map2 = _slicedToArray(_map, 2);\n\n    start = _map2[0];\n    end = _map2[1];\n  } else {\n    var _map3 = [range.index, range.index + range.length].map(function (pos) {\n      if (pos < index || pos === index && source === _emitter4.default.sources.USER) return pos;\n      if (length >= 0) {\n        return pos + length;\n      } else {\n        return Math.max(index, pos + length);\n      }\n    });\n\n    var _map4 = _slicedToArray(_map3, 2);\n\n    start = _map4[0];\n    end = _map4[1];\n  }\n  return new _selection.Range(start, end - start);\n}\n\nexports.expandConfig = expandConfig;\nexports.overload = overload;\nexports.default = Quill;\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Inline = function (_Parchment$Inline) {\n  _inherits(Inline, _Parchment$Inline);\n\n  function Inline() {\n    _classCallCheck(this, Inline);\n\n    return _possibleConstructorReturn(this, (Inline.__proto__ || Object.getPrototypeOf(Inline)).apply(this, arguments));\n  }\n\n  _createClass(Inline, [{\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (Inline.compare(this.statics.blotName, name) < 0 && _parchment2.default.query(name, _parchment2.default.Scope.BLOT)) {\n        var blot = this.isolate(index, length);\n        if (value) {\n          blot.wrap(name, value);\n        }\n      } else {\n        _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'formatAt', this).call(this, index, length, name, value);\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Inline.prototype.__proto__ || Object.getPrototypeOf(Inline.prototype), 'optimize', this).call(this, context);\n      if (this.parent instanceof Inline && Inline.compare(this.statics.blotName, this.parent.statics.blotName) > 0) {\n        var parent = this.parent.isolate(this.offset(), this.length());\n        this.moveChildren(parent);\n        parent.wrap(this);\n      }\n    }\n  }], [{\n    key: 'compare',\n    value: function compare(self, other) {\n      var selfIndex = Inline.order.indexOf(self);\n      var otherIndex = Inline.order.indexOf(other);\n      if (selfIndex >= 0 || otherIndex >= 0) {\n        return selfIndex - otherIndex;\n      } else if (self === other) {\n        return 0;\n      } else if (self < other) {\n        return -1;\n      } else {\n        return 1;\n      }\n    }\n  }]);\n\n  return Inline;\n}(_parchment2.default.Inline);\n\nInline.allowedChildren = [Inline, _parchment2.default.Embed, _text2.default];\n// Lower index means deeper in the DOM tree, since not found (-1) is for embeds\nInline.order = ['cursor', 'inline', // Must be lower\n'underline', 'strike', 'italic', 'bold', 'script', 'link', 'code' // Must be higher\n];\n\nexports.default = Inline;\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TextBlot = function (_Parchment$Text) {\n  _inherits(TextBlot, _Parchment$Text);\n\n  function TextBlot() {\n    _classCallCheck(this, TextBlot);\n\n    return _possibleConstructorReturn(this, (TextBlot.__proto__ || Object.getPrototypeOf(TextBlot)).apply(this, arguments));\n  }\n\n  return TextBlot;\n}(_parchment2.default.Text);\n\nexports.default = TextBlot;\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _eventemitter = __webpack_require__(54);\n\nvar _eventemitter2 = _interopRequireDefault(_eventemitter);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:events');\n\nvar EVENTS = ['selectionchange', 'mousedown', 'mouseup', 'click'];\n\nEVENTS.forEach(function (eventName) {\n  document.addEventListener(eventName, function () {\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n\n    [].slice.call(document.querySelectorAll('.ql-container')).forEach(function (node) {\n      // TODO use WeakMap\n      if (node.__quill && node.__quill.emitter) {\n        var _node$__quill$emitter;\n\n        (_node$__quill$emitter = node.__quill.emitter).handleDOM.apply(_node$__quill$emitter, args);\n      }\n    });\n  });\n});\n\nvar Emitter = function (_EventEmitter) {\n  _inherits(Emitter, _EventEmitter);\n\n  function Emitter() {\n    _classCallCheck(this, Emitter);\n\n    var _this = _possibleConstructorReturn(this, (Emitter.__proto__ || Object.getPrototypeOf(Emitter)).call(this));\n\n    _this.listeners = {};\n    _this.on('error', debug.error);\n    return _this;\n  }\n\n  _createClass(Emitter, [{\n    key: 'emit',\n    value: function emit() {\n      debug.log.apply(debug, arguments);\n      _get(Emitter.prototype.__proto__ || Object.getPrototypeOf(Emitter.prototype), 'emit', this).apply(this, arguments);\n    }\n  }, {\n    key: 'handleDOM',\n    value: function handleDOM(event) {\n      for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n        args[_key2 - 1] = arguments[_key2];\n      }\n\n      (this.listeners[event.type] || []).forEach(function (_ref) {\n        var node = _ref.node,\n            handler = _ref.handler;\n\n        if (event.target === node || node.contains(event.target)) {\n          handler.apply(undefined, [event].concat(args));\n        }\n      });\n    }\n  }, {\n    key: 'listenDOM',\n    value: function listenDOM(eventName, node, handler) {\n      if (!this.listeners[eventName]) {\n        this.listeners[eventName] = [];\n      }\n      this.listeners[eventName].push({ node: node, handler: handler });\n    }\n  }]);\n\n  return Emitter;\n}(_eventemitter2.default);\n\nEmitter.events = {\n  EDITOR_CHANGE: 'editor-change',\n  SCROLL_BEFORE_UPDATE: 'scroll-before-update',\n  SCROLL_OPTIMIZE: 'scroll-optimize',\n  SCROLL_UPDATE: 'scroll-update',\n  SELECTION_CHANGE: 'selection-change',\n  TEXT_CHANGE: 'text-change'\n};\nEmitter.sources = {\n  API: 'api',\n  SILENT: 'silent',\n  USER: 'user'\n};\n\nexports.default = Emitter;\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Module = function Module(quill) {\n  var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n  _classCallCheck(this, Module);\n\n  this.quill = quill;\n  this.options = options;\n};\n\nModule.DEFAULTS = {};\n\nexports.default = Module;\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar levels = ['error', 'warn', 'log', 'info'];\nvar level = 'warn';\n\nfunction debug(method) {\n  if (levels.indexOf(method) <= levels.indexOf(level)) {\n    var _console;\n\n    for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    (_console = console)[method].apply(_console, args); // eslint-disable-line no-console\n  }\n}\n\nfunction namespace(ns) {\n  return levels.reduce(function (logger, method) {\n    logger[method] = debug.bind(console, method, ns);\n    return logger;\n  }, {});\n}\n\ndebug.level = namespace.level = function (newLevel) {\n  level = newLevel;\n};\n\nexports.default = namespace;\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar pSlice = Array.prototype.slice;\nvar objectKeys = __webpack_require__(52);\nvar isArguments = __webpack_require__(53);\n\nvar deepEqual = module.exports = function (actual, expected, opts) {\n  if (!opts) opts = {};\n  // 7.1. All identical values are equivalent, as determined by ===.\n  if (actual === expected) {\n    return true;\n\n  } else if (actual instanceof Date && expected instanceof Date) {\n    return actual.getTime() === expected.getTime();\n\n  // 7.3. Other pairs that do not both pass typeof value == 'object',\n  // equivalence is determined by ==.\n  } else if (!actual || !expected || typeof actual != 'object' && typeof expected != 'object') {\n    return opts.strict ? actual === expected : actual == expected;\n\n  // 7.4. For all other Object pairs, including Array objects, equivalence is\n  // determined by having the same number of owned properties (as verified\n  // with Object.prototype.hasOwnProperty.call), the same set of keys\n  // (although not necessarily the same order), equivalent values for every\n  // corresponding key, and an identical 'prototype' property. Note: this\n  // accounts for both named and indexed properties on Arrays.\n  } else {\n    return objEquiv(actual, expected, opts);\n  }\n}\n\nfunction isUndefinedOrNull(value) {\n  return value === null || value === undefined;\n}\n\nfunction isBuffer (x) {\n  if (!x || typeof x !== 'object' || typeof x.length !== 'number') return false;\n  if (typeof x.copy !== 'function' || typeof x.slice !== 'function') {\n    return false;\n  }\n  if (x.length > 0 && typeof x[0] !== 'number') return false;\n  return true;\n}\n\nfunction objEquiv(a, b, opts) {\n  var i, key;\n  if (isUndefinedOrNull(a) || isUndefinedOrNull(b))\n    return false;\n  // an identical 'prototype' property.\n  if (a.prototype !== b.prototype) return false;\n  //~~~I've managed to break Object.keys through screwy arguments passing.\n  //   Converting to array solves the problem.\n  if (isArguments(a)) {\n    if (!isArguments(b)) {\n      return false;\n    }\n    a = pSlice.call(a);\n    b = pSlice.call(b);\n    return deepEqual(a, b, opts);\n  }\n  if (isBuffer(a)) {\n    if (!isBuffer(b)) {\n      return false;\n    }\n    if (a.length !== b.length) return false;\n    for (i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) return false;\n    }\n    return true;\n  }\n  try {\n    var ka = objectKeys(a),\n        kb = objectKeys(b);\n  } catch (e) {//happens when one is a string literal and the other isn't\n    return false;\n  }\n  // having the same number of owned properties (keys incorporates\n  // hasOwnProperty)\n  if (ka.length != kb.length)\n    return false;\n  //the same set of keys (although not necessarily the same order),\n  ka.sort();\n  kb.sort();\n  //~~~cheap key test\n  for (i = ka.length - 1; i >= 0; i--) {\n    if (ka[i] != kb[i])\n      return false;\n  }\n  //equivalent values for every corresponding key, and\n  //~~~possibly expensive deep test\n  for (i = ka.length - 1; i >= 0; i--) {\n    key = ka[i];\n    if (!deepEqual(a[key], b[key], opts)) return false;\n  }\n  return typeof a === typeof b;\n}\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar Attributor = /** @class */ (function () {\n    function Attributor(attrName, keyName, options) {\n        if (options === void 0) { options = {}; }\n        this.attrName = attrName;\n        this.keyName = keyName;\n        var attributeBit = Registry.Scope.TYPE & Registry.Scope.ATTRIBUTE;\n        if (options.scope != null) {\n            // Ignore type bits, force attribute bit\n            this.scope = (options.scope & Registry.Scope.LEVEL) | attributeBit;\n        }\n        else {\n            this.scope = Registry.Scope.ATTRIBUTE;\n        }\n        if (options.whitelist != null)\n            this.whitelist = options.whitelist;\n    }\n    Attributor.keys = function (node) {\n        return [].map.call(node.attributes, function (item) {\n            return item.name;\n        });\n    };\n    Attributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        node.setAttribute(this.keyName, value);\n        return true;\n    };\n    Attributor.prototype.canAdd = function (node, value) {\n        var match = Registry.query(node, Registry.Scope.BLOT & (this.scope | Registry.Scope.TYPE));\n        if (match == null)\n            return false;\n        if (this.whitelist == null)\n            return true;\n        if (typeof value === 'string') {\n            return this.whitelist.indexOf(value.replace(/[\"']/g, '')) > -1;\n        }\n        else {\n            return this.whitelist.indexOf(value) > -1;\n        }\n    };\n    Attributor.prototype.remove = function (node) {\n        node.removeAttribute(this.keyName);\n    };\n    Attributor.prototype.value = function (node) {\n        var value = node.getAttribute(this.keyName);\n        if (this.canAdd(node, value) && value) {\n            return value;\n        }\n        return '';\n    };\n    return Attributor;\n}());\nexports.default = Attributor;\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.Code = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Code = function (_Inline) {\n  _inherits(Code, _Inline);\n\n  function Code() {\n    _classCallCheck(this, Code);\n\n    return _possibleConstructorReturn(this, (Code.__proto__ || Object.getPrototypeOf(Code)).apply(this, arguments));\n  }\n\n  return Code;\n}(_inline2.default);\n\nCode.blotName = 'code';\nCode.tagName = 'CODE';\n\nvar CodeBlock = function (_Block) {\n  _inherits(CodeBlock, _Block);\n\n  function CodeBlock() {\n    _classCallCheck(this, CodeBlock);\n\n    return _possibleConstructorReturn(this, (CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock)).apply(this, arguments));\n  }\n\n  _createClass(CodeBlock, [{\n    key: 'delta',\n    value: function delta() {\n      var _this3 = this;\n\n      var text = this.domNode.textContent;\n      if (text.endsWith('\\n')) {\n        // Should always be true\n        text = text.slice(0, -1);\n      }\n      return text.split('\\n').reduce(function (delta, frag) {\n        return delta.insert(frag).insert('\\n', _this3.formats());\n      }, new _quillDelta2.default());\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      if (name === this.statics.blotName && value) return;\n\n      var _descendant = this.descendant(_text2.default, this.length() - 1),\n          _descendant2 = _slicedToArray(_descendant, 1),\n          text = _descendant2[0];\n\n      if (text != null) {\n        text.deleteAt(text.length() - 1, 1);\n      }\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'format', this).call(this, name, value);\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, name, value) {\n      if (length === 0) return;\n      if (_parchment2.default.query(name, _parchment2.default.Scope.BLOCK) == null || name === this.statics.blotName && value === this.statics.formats(this.domNode)) {\n        return;\n      }\n      var nextNewline = this.newlineIndex(index);\n      if (nextNewline < 0 || nextNewline >= index + length) return;\n      var prevNewline = this.newlineIndex(index, true) + 1;\n      var isolateLength = nextNewline - prevNewline + 1;\n      var blot = this.isolate(prevNewline, isolateLength);\n      var next = blot.next;\n      blot.format(name, value);\n      if (next instanceof CodeBlock) {\n        next.formatAt(0, index - prevNewline + length - isolateLength, name, value);\n      }\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null) return;\n\n      var _descendant3 = this.descendant(_text2.default, index),\n          _descendant4 = _slicedToArray(_descendant3, 2),\n          text = _descendant4[0],\n          offset = _descendant4[1];\n\n      text.insertAt(offset, value);\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      var length = this.domNode.textContent.length;\n      if (!this.domNode.textContent.endsWith('\\n')) {\n        return length + 1;\n      }\n      return length;\n    }\n  }, {\n    key: 'newlineIndex',\n    value: function newlineIndex(searchIndex) {\n      var reverse = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      if (!reverse) {\n        var offset = this.domNode.textContent.slice(searchIndex).indexOf('\\n');\n        return offset > -1 ? searchIndex + offset : -1;\n      } else {\n        return this.domNode.textContent.slice(0, searchIndex).lastIndexOf('\\n');\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      if (!this.domNode.textContent.endsWith('\\n')) {\n        this.appendChild(_parchment2.default.create('text', '\\n'));\n      }\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'optimize', this).call(this, context);\n      var next = this.next;\n      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && this.statics.formats(this.domNode) === next.statics.formats(next.domNode)) {\n        next.optimize(context);\n        next.moveChildren(this);\n        next.remove();\n      }\n    }\n  }, {\n    key: 'replace',\n    value: function replace(target) {\n      _get(CodeBlock.prototype.__proto__ || Object.getPrototypeOf(CodeBlock.prototype), 'replace', this).call(this, target);\n      [].slice.call(this.domNode.querySelectorAll('*')).forEach(function (node) {\n        var blot = _parchment2.default.find(node);\n        if (blot == null) {\n          node.parentNode.removeChild(node);\n        } else if (blot instanceof _parchment2.default.Embed) {\n          blot.remove();\n        } else {\n          blot.unwrap();\n        }\n      });\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var domNode = _get(CodeBlock.__proto__ || Object.getPrototypeOf(CodeBlock), 'create', this).call(this, value);\n      domNode.setAttribute('spellcheck', false);\n      return domNode;\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      return true;\n    }\n  }]);\n\n  return CodeBlock;\n}(_block2.default);\n\nCodeBlock.blotName = 'code-block';\nCodeBlock.tagName = 'PRE';\nCodeBlock.TAB = '  ';\n\nexports.Code = Code;\nexports.default = CodeBlock;\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _cursor = __webpack_require__(24);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ASCII = /^[ -~]*$/;\n\nvar Editor = function () {\n  function Editor(scroll) {\n    _classCallCheck(this, Editor);\n\n    this.scroll = scroll;\n    this.delta = this.getDelta();\n  }\n\n  _createClass(Editor, [{\n    key: 'applyDelta',\n    value: function applyDelta(delta) {\n      var _this = this;\n\n      var consumeNextNewline = false;\n      this.scroll.update();\n      var scrollLength = this.scroll.length();\n      this.scroll.batchStart();\n      delta = normalizeDelta(delta);\n      delta.reduce(function (index, op) {\n        var length = op.retain || op.delete || op.insert.length || 1;\n        var attributes = op.attributes || {};\n        if (op.insert != null) {\n          if (typeof op.insert === 'string') {\n            var text = op.insert;\n            if (text.endsWith('\\n') && consumeNextNewline) {\n              consumeNextNewline = false;\n              text = text.slice(0, -1);\n            }\n            if (index >= scrollLength && !text.endsWith('\\n')) {\n              consumeNextNewline = true;\n            }\n            _this.scroll.insertAt(index, text);\n\n            var _scroll$line = _this.scroll.line(index),\n                _scroll$line2 = _slicedToArray(_scroll$line, 2),\n                line = _scroll$line2[0],\n                offset = _scroll$line2[1];\n\n            var formats = (0, _extend2.default)({}, (0, _block.bubbleFormats)(line));\n            if (line instanceof _block2.default) {\n              var _line$descendant = line.descendant(_parchment2.default.Leaf, offset),\n                  _line$descendant2 = _slicedToArray(_line$descendant, 1),\n                  leaf = _line$descendant2[0];\n\n              formats = (0, _extend2.default)(formats, (0, _block.bubbleFormats)(leaf));\n            }\n            attributes = _op2.default.attributes.diff(formats, attributes) || {};\n          } else if (_typeof(op.insert) === 'object') {\n            var key = Object.keys(op.insert)[0]; // There should only be one key\n            if (key == null) return index;\n            _this.scroll.insertAt(index, key, op.insert[key]);\n          }\n          scrollLength += length;\n        }\n        Object.keys(attributes).forEach(function (name) {\n          _this.scroll.formatAt(index, length, name, attributes[name]);\n        });\n        return index + length;\n      }, 0);\n      delta.reduce(function (index, op) {\n        if (typeof op.delete === 'number') {\n          _this.scroll.deleteAt(index, op.delete);\n          return index;\n        }\n        return index + (op.retain || op.insert.length || 1);\n      }, 0);\n      this.scroll.batchEnd();\n      return this.update(delta);\n    }\n  }, {\n    key: 'deleteText',\n    value: function deleteText(index, length) {\n      this.scroll.deleteAt(index, length);\n      return this.update(new _quillDelta2.default().retain(index).delete(length));\n    }\n  }, {\n    key: 'formatLine',\n    value: function formatLine(index, length) {\n      var _this2 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      this.scroll.update();\n      Object.keys(formats).forEach(function (format) {\n        if (_this2.scroll.whitelist != null && !_this2.scroll.whitelist[format]) return;\n        var lines = _this2.scroll.lines(index, Math.max(length, 1));\n        var lengthRemaining = length;\n        lines.forEach(function (line) {\n          var lineLength = line.length();\n          if (!(line instanceof _code2.default)) {\n            line.format(format, formats[format]);\n          } else {\n            var codeIndex = index - line.offset(_this2.scroll);\n            var codeLength = line.newlineIndex(codeIndex + lengthRemaining) - codeIndex + 1;\n            line.formatAt(codeIndex, codeLength, format, formats[format]);\n          }\n          lengthRemaining -= lineLength;\n        });\n      });\n      this.scroll.optimize();\n      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'formatText',\n    value: function formatText(index, length) {\n      var _this3 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      Object.keys(formats).forEach(function (format) {\n        _this3.scroll.formatAt(index, length, format, formats[format]);\n      });\n      return this.update(new _quillDelta2.default().retain(index).retain(length, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'getContents',\n    value: function getContents(index, length) {\n      return this.delta.slice(index, index + length);\n    }\n  }, {\n    key: 'getDelta',\n    value: function getDelta() {\n      return this.scroll.lines().reduce(function (delta, line) {\n        return delta.concat(line.delta());\n      }, new _quillDelta2.default());\n    }\n  }, {\n    key: 'getFormat',\n    value: function getFormat(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var lines = [],\n          leaves = [];\n      if (length === 0) {\n        this.scroll.path(index).forEach(function (path) {\n          var _path = _slicedToArray(path, 1),\n              blot = _path[0];\n\n          if (blot instanceof _block2.default) {\n            lines.push(blot);\n          } else if (blot instanceof _parchment2.default.Leaf) {\n            leaves.push(blot);\n          }\n        });\n      } else {\n        lines = this.scroll.lines(index, length);\n        leaves = this.scroll.descendants(_parchment2.default.Leaf, index, length);\n      }\n      var formatsArr = [lines, leaves].map(function (blots) {\n        if (blots.length === 0) return {};\n        var formats = (0, _block.bubbleFormats)(blots.shift());\n        while (Object.keys(formats).length > 0) {\n          var blot = blots.shift();\n          if (blot == null) return formats;\n          formats = combineFormats((0, _block.bubbleFormats)(blot), formats);\n        }\n        return formats;\n      });\n      return _extend2.default.apply(_extend2.default, formatsArr);\n    }\n  }, {\n    key: 'getText',\n    value: function getText(index, length) {\n      return this.getContents(index, length).filter(function (op) {\n        return typeof op.insert === 'string';\n      }).map(function (op) {\n        return op.insert;\n      }).join('');\n    }\n  }, {\n    key: 'insertEmbed',\n    value: function insertEmbed(index, embed, value) {\n      this.scroll.insertAt(index, embed, value);\n      return this.update(new _quillDelta2.default().retain(index).insert(_defineProperty({}, embed, value)));\n    }\n  }, {\n    key: 'insertText',\n    value: function insertText(index, text) {\n      var _this4 = this;\n\n      var formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      this.scroll.insertAt(index, text);\n      Object.keys(formats).forEach(function (format) {\n        _this4.scroll.formatAt(index, text.length, format, formats[format]);\n      });\n      return this.update(new _quillDelta2.default().retain(index).insert(text, (0, _clone2.default)(formats)));\n    }\n  }, {\n    key: 'isBlank',\n    value: function isBlank() {\n      if (this.scroll.children.length == 0) return true;\n      if (this.scroll.children.length > 1) return false;\n      var block = this.scroll.children.head;\n      if (block.statics.blotName !== _block2.default.blotName) return false;\n      if (block.children.length > 1) return false;\n      return block.children.head instanceof _break2.default;\n    }\n  }, {\n    key: 'removeFormat',\n    value: function removeFormat(index, length) {\n      var text = this.getText(index, length);\n\n      var _scroll$line3 = this.scroll.line(index + length),\n          _scroll$line4 = _slicedToArray(_scroll$line3, 2),\n          line = _scroll$line4[0],\n          offset = _scroll$line4[1];\n\n      var suffixLength = 0,\n          suffix = new _quillDelta2.default();\n      if (line != null) {\n        if (!(line instanceof _code2.default)) {\n          suffixLength = line.length() - offset;\n        } else {\n          suffixLength = line.newlineIndex(offset) - offset + 1;\n        }\n        suffix = line.delta().slice(offset, offset + suffixLength - 1).insert('\\n');\n      }\n      var contents = this.getContents(index, length + suffixLength);\n      var diff = contents.diff(new _quillDelta2.default().insert(text).concat(suffix));\n      var delta = new _quillDelta2.default().retain(index).concat(diff);\n      return this.applyDelta(delta);\n    }\n  }, {\n    key: 'update',\n    value: function update(change) {\n      var mutations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n      var cursorIndex = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;\n\n      var oldDelta = this.delta;\n      if (mutations.length === 1 && mutations[0].type === 'characterData' && mutations[0].target.data.match(ASCII) && _parchment2.default.find(mutations[0].target)) {\n        // Optimization for character changes\n        var textBlot = _parchment2.default.find(mutations[0].target);\n        var formats = (0, _block.bubbleFormats)(textBlot);\n        var index = textBlot.offset(this.scroll);\n        var oldValue = mutations[0].oldValue.replace(_cursor2.default.CONTENTS, '');\n        var oldText = new _quillDelta2.default().insert(oldValue);\n        var newText = new _quillDelta2.default().insert(textBlot.value());\n        var diffDelta = new _quillDelta2.default().retain(index).concat(oldText.diff(newText, cursorIndex));\n        change = diffDelta.reduce(function (delta, op) {\n          if (op.insert) {\n            return delta.insert(op.insert, formats);\n          } else {\n            return delta.push(op);\n          }\n        }, new _quillDelta2.default());\n        this.delta = oldDelta.compose(change);\n      } else {\n        this.delta = this.getDelta();\n        if (!change || !(0, _deepEqual2.default)(oldDelta.compose(change), this.delta)) {\n          change = oldDelta.diff(this.delta, cursorIndex);\n        }\n      }\n      return change;\n    }\n  }]);\n\n  return Editor;\n}();\n\nfunction combineFormats(formats, combined) {\n  return Object.keys(combined).reduce(function (merged, name) {\n    if (formats[name] == null) return merged;\n    if (combined[name] === formats[name]) {\n      merged[name] = combined[name];\n    } else if (Array.isArray(combined[name])) {\n      if (combined[name].indexOf(formats[name]) < 0) {\n        merged[name] = combined[name].concat([formats[name]]);\n      }\n    } else {\n      merged[name] = [combined[name], formats[name]];\n    }\n    return merged;\n  }, {});\n}\n\nfunction normalizeDelta(delta) {\n  return delta.reduce(function (delta, op) {\n    if (op.insert === 1) {\n      var attributes = (0, _clone2.default)(op.attributes);\n      delete attributes['image'];\n      return delta.insert({ image: op.attributes.image }, attributes);\n    }\n    if (op.attributes != null && (op.attributes.list === true || op.attributes.bullet === true)) {\n      op = (0, _clone2.default)(op);\n      if (op.attributes.list) {\n        op.attributes.list = 'ordered';\n      } else {\n        op.attributes.list = 'bullet';\n        delete op.attributes.bullet;\n      }\n    }\n    if (typeof op.insert === 'string') {\n      var text = op.insert.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n      return delta.insert(text, op.attributes);\n    }\n    return delta.push(op);\n  }, new _quillDelta2.default());\n}\n\nexports.default = Editor;\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.Range = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _emitter3 = __webpack_require__(8);\n\nvar _emitter4 = _interopRequireDefault(_emitter3);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar debug = (0, _logger2.default)('quill:selection');\n\nvar Range = function Range(index) {\n  var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n  _classCallCheck(this, Range);\n\n  this.index = index;\n  this.length = length;\n};\n\nvar Selection = function () {\n  function Selection(scroll, emitter) {\n    var _this = this;\n\n    _classCallCheck(this, Selection);\n\n    this.emitter = emitter;\n    this.scroll = scroll;\n    this.composing = false;\n    this.mouseDown = false;\n    this.root = this.scroll.domNode;\n    this.cursor = _parchment2.default.create('cursor', this);\n    // savedRange is last non-null range\n    this.lastRange = this.savedRange = new Range(0, 0);\n    this.handleComposition();\n    this.handleDragging();\n    this.emitter.listenDOM('selectionchange', document, function () {\n      if (!_this.mouseDown) {\n        setTimeout(_this.update.bind(_this, _emitter4.default.sources.USER), 1);\n      }\n    });\n    this.emitter.on(_emitter4.default.events.EDITOR_CHANGE, function (type, delta) {\n      if (type === _emitter4.default.events.TEXT_CHANGE && delta.length() > 0) {\n        _this.update(_emitter4.default.sources.SILENT);\n      }\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_BEFORE_UPDATE, function () {\n      if (!_this.hasFocus()) return;\n      var native = _this.getNativeRange();\n      if (native == null) return;\n      if (native.start.node === _this.cursor.textNode) return; // cursor.restore() will handle\n      // TODO unclear if this has negative side effects\n      _this.emitter.once(_emitter4.default.events.SCROLL_UPDATE, function () {\n        try {\n          _this.setNativeRange(native.start.node, native.start.offset, native.end.node, native.end.offset);\n        } catch (ignored) {}\n      });\n    });\n    this.emitter.on(_emitter4.default.events.SCROLL_OPTIMIZE, function (mutations, context) {\n      if (context.range) {\n        var _context$range = context.range,\n            startNode = _context$range.startNode,\n            startOffset = _context$range.startOffset,\n            endNode = _context$range.endNode,\n            endOffset = _context$range.endOffset;\n\n        _this.setNativeRange(startNode, startOffset, endNode, endOffset);\n      }\n    });\n    this.update(_emitter4.default.sources.SILENT);\n  }\n\n  _createClass(Selection, [{\n    key: 'handleComposition',\n    value: function handleComposition() {\n      var _this2 = this;\n\n      this.root.addEventListener('compositionstart', function () {\n        _this2.composing = true;\n      });\n      this.root.addEventListener('compositionend', function () {\n        _this2.composing = false;\n        if (_this2.cursor.parent) {\n          var range = _this2.cursor.restore();\n          if (!range) return;\n          setTimeout(function () {\n            _this2.setNativeRange(range.startNode, range.startOffset, range.endNode, range.endOffset);\n          }, 1);\n        }\n      });\n    }\n  }, {\n    key: 'handleDragging',\n    value: function handleDragging() {\n      var _this3 = this;\n\n      this.emitter.listenDOM('mousedown', document.body, function () {\n        _this3.mouseDown = true;\n      });\n      this.emitter.listenDOM('mouseup', document.body, function () {\n        _this3.mouseDown = false;\n        _this3.update(_emitter4.default.sources.USER);\n      });\n    }\n  }, {\n    key: 'focus',\n    value: function focus() {\n      if (this.hasFocus()) return;\n      this.root.focus();\n      this.setRange(this.savedRange);\n    }\n  }, {\n    key: 'format',\n    value: function format(_format, value) {\n      if (this.scroll.whitelist != null && !this.scroll.whitelist[_format]) return;\n      this.scroll.update();\n      var nativeRange = this.getNativeRange();\n      if (nativeRange == null || !nativeRange.native.collapsed || _parchment2.default.query(_format, _parchment2.default.Scope.BLOCK)) return;\n      if (nativeRange.start.node !== this.cursor.textNode) {\n        var blot = _parchment2.default.find(nativeRange.start.node, false);\n        if (blot == null) return;\n        // TODO Give blot ability to not split\n        if (blot instanceof _parchment2.default.Leaf) {\n          var after = blot.split(nativeRange.start.offset);\n          blot.parent.insertBefore(this.cursor, after);\n        } else {\n          blot.insertBefore(this.cursor, nativeRange.start.node); // Should never happen\n        }\n        this.cursor.attach();\n      }\n      this.cursor.format(_format, value);\n      this.scroll.optimize();\n      this.setNativeRange(this.cursor.textNode, this.cursor.textNode.data.length);\n      this.update();\n    }\n  }, {\n    key: 'getBounds',\n    value: function getBounds(index) {\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n      var scrollLength = this.scroll.length();\n      index = Math.min(index, scrollLength - 1);\n      length = Math.min(index + length, scrollLength - 1) - index;\n      var node = void 0,\n          _scroll$leaf = this.scroll.leaf(index),\n          _scroll$leaf2 = _slicedToArray(_scroll$leaf, 2),\n          leaf = _scroll$leaf2[0],\n          offset = _scroll$leaf2[1];\n      if (leaf == null) return null;\n\n      var _leaf$position = leaf.position(offset, true);\n\n      var _leaf$position2 = _slicedToArray(_leaf$position, 2);\n\n      node = _leaf$position2[0];\n      offset = _leaf$position2[1];\n\n      var range = document.createRange();\n      if (length > 0) {\n        range.setStart(node, offset);\n\n        var _scroll$leaf3 = this.scroll.leaf(index + length);\n\n        var _scroll$leaf4 = _slicedToArray(_scroll$leaf3, 2);\n\n        leaf = _scroll$leaf4[0];\n        offset = _scroll$leaf4[1];\n\n        if (leaf == null) return null;\n\n        var _leaf$position3 = leaf.position(offset, true);\n\n        var _leaf$position4 = _slicedToArray(_leaf$position3, 2);\n\n        node = _leaf$position4[0];\n        offset = _leaf$position4[1];\n\n        range.setEnd(node, offset);\n        return range.getBoundingClientRect();\n      } else {\n        var side = 'left';\n        var rect = void 0;\n        if (node instanceof Text) {\n          if (offset < node.data.length) {\n            range.setStart(node, offset);\n            range.setEnd(node, offset + 1);\n          } else {\n            range.setStart(node, offset - 1);\n            range.setEnd(node, offset);\n            side = 'right';\n          }\n          rect = range.getBoundingClientRect();\n        } else {\n          rect = leaf.domNode.getBoundingClientRect();\n          if (offset > 0) side = 'right';\n        }\n        return {\n          bottom: rect.top + rect.height,\n          height: rect.height,\n          left: rect[side],\n          right: rect[side],\n          top: rect.top,\n          width: 0\n        };\n      }\n    }\n  }, {\n    key: 'getNativeRange',\n    value: function getNativeRange() {\n      var selection = document.getSelection();\n      if (selection == null || selection.rangeCount <= 0) return null;\n      var nativeRange = selection.getRangeAt(0);\n      if (nativeRange == null) return null;\n      var range = this.normalizeNative(nativeRange);\n      debug.info('getNativeRange', range);\n      return range;\n    }\n  }, {\n    key: 'getRange',\n    value: function getRange() {\n      var normalized = this.getNativeRange();\n      if (normalized == null) return [null, null];\n      var range = this.normalizedToRange(normalized);\n      return [range, normalized];\n    }\n  }, {\n    key: 'hasFocus',\n    value: function hasFocus() {\n      return document.activeElement === this.root;\n    }\n  }, {\n    key: 'normalizedToRange',\n    value: function normalizedToRange(range) {\n      var _this4 = this;\n\n      var positions = [[range.start.node, range.start.offset]];\n      if (!range.native.collapsed) {\n        positions.push([range.end.node, range.end.offset]);\n      }\n      var indexes = positions.map(function (position) {\n        var _position = _slicedToArray(position, 2),\n            node = _position[0],\n            offset = _position[1];\n\n        var blot = _parchment2.default.find(node, true);\n        var index = blot.offset(_this4.scroll);\n        if (offset === 0) {\n          return index;\n        } else if (blot instanceof _parchment2.default.Container) {\n          return index + blot.length();\n        } else {\n          return index + blot.index(node, offset);\n        }\n      });\n      var end = Math.min(Math.max.apply(Math, _toConsumableArray(indexes)), this.scroll.length() - 1);\n      var start = Math.min.apply(Math, [end].concat(_toConsumableArray(indexes)));\n      return new Range(start, end - start);\n    }\n  }, {\n    key: 'normalizeNative',\n    value: function normalizeNative(nativeRange) {\n      if (!contains(this.root, nativeRange.startContainer) || !nativeRange.collapsed && !contains(this.root, nativeRange.endContainer)) {\n        return null;\n      }\n      var range = {\n        start: { node: nativeRange.startContainer, offset: nativeRange.startOffset },\n        end: { node: nativeRange.endContainer, offset: nativeRange.endOffset },\n        native: nativeRange\n      };\n      [range.start, range.end].forEach(function (position) {\n        var node = position.node,\n            offset = position.offset;\n        while (!(node instanceof Text) && node.childNodes.length > 0) {\n          if (node.childNodes.length > offset) {\n            node = node.childNodes[offset];\n            offset = 0;\n          } else if (node.childNodes.length === offset) {\n            node = node.lastChild;\n            offset = node instanceof Text ? node.data.length : node.childNodes.length + 1;\n          } else {\n            break;\n          }\n        }\n        position.node = node, position.offset = offset;\n      });\n      return range;\n    }\n  }, {\n    key: 'rangeToNative',\n    value: function rangeToNative(range) {\n      var _this5 = this;\n\n      var indexes = range.collapsed ? [range.index] : [range.index, range.index + range.length];\n      var args = [];\n      var scrollLength = this.scroll.length();\n      indexes.forEach(function (index, i) {\n        index = Math.min(scrollLength - 1, index);\n        var node = void 0,\n            _scroll$leaf5 = _this5.scroll.leaf(index),\n            _scroll$leaf6 = _slicedToArray(_scroll$leaf5, 2),\n            leaf = _scroll$leaf6[0],\n            offset = _scroll$leaf6[1];\n        var _leaf$position5 = leaf.position(offset, i !== 0);\n\n        var _leaf$position6 = _slicedToArray(_leaf$position5, 2);\n\n        node = _leaf$position6[0];\n        offset = _leaf$position6[1];\n\n        args.push(node, offset);\n      });\n      if (args.length < 2) {\n        args = args.concat(args);\n      }\n      return args;\n    }\n  }, {\n    key: 'scrollIntoView',\n    value: function scrollIntoView(scrollingContainer) {\n      var range = this.lastRange;\n      if (range == null) return;\n      var bounds = this.getBounds(range.index, range.length);\n      if (bounds == null) return;\n      var limit = this.scroll.length() - 1;\n\n      var _scroll$line = this.scroll.line(Math.min(range.index, limit)),\n          _scroll$line2 = _slicedToArray(_scroll$line, 1),\n          first = _scroll$line2[0];\n\n      var last = first;\n      if (range.length > 0) {\n        var _scroll$line3 = this.scroll.line(Math.min(range.index + range.length, limit));\n\n        var _scroll$line4 = _slicedToArray(_scroll$line3, 1);\n\n        last = _scroll$line4[0];\n      }\n      if (first == null || last == null) return;\n      var scrollBounds = scrollingContainer.getBoundingClientRect();\n      if (bounds.top < scrollBounds.top) {\n        scrollingContainer.scrollTop -= scrollBounds.top - bounds.top;\n      } else if (bounds.bottom > scrollBounds.bottom) {\n        scrollingContainer.scrollTop += bounds.bottom - scrollBounds.bottom;\n      }\n    }\n  }, {\n    key: 'setNativeRange',\n    value: function setNativeRange(startNode, startOffset) {\n      var endNode = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : startNode;\n      var endOffset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : startOffset;\n      var force = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n      debug.info('setNativeRange', startNode, startOffset, endNode, endOffset);\n      if (startNode != null && (this.root.parentNode == null || startNode.parentNode == null || endNode.parentNode == null)) {\n        return;\n      }\n      var selection = document.getSelection();\n      if (selection == null) return;\n      if (startNode != null) {\n        if (!this.hasFocus()) this.root.focus();\n        var native = (this.getNativeRange() || {}).native;\n        if (native == null || force || startNode !== native.startContainer || startOffset !== native.startOffset || endNode !== native.endContainer || endOffset !== native.endOffset) {\n\n          if (startNode.tagName == \"BR\") {\n            startOffset = [].indexOf.call(startNode.parentNode.childNodes, startNode);\n            startNode = startNode.parentNode;\n          }\n          if (endNode.tagName == \"BR\") {\n            endOffset = [].indexOf.call(endNode.parentNode.childNodes, endNode);\n            endNode = endNode.parentNode;\n          }\n          var range = document.createRange();\n          range.setStart(startNode, startOffset);\n          range.setEnd(endNode, endOffset);\n          selection.removeAllRanges();\n          selection.addRange(range);\n        }\n      } else {\n        selection.removeAllRanges();\n        this.root.blur();\n        document.body.focus(); // root.blur() not enough on IE11+Travis+SauceLabs (but not local VMs)\n      }\n    }\n  }, {\n    key: 'setRange',\n    value: function setRange(range) {\n      var force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _emitter4.default.sources.API;\n\n      if (typeof force === 'string') {\n        source = force;\n        force = false;\n      }\n      debug.info('setRange', range);\n      if (range != null) {\n        var args = this.rangeToNative(range);\n        this.setNativeRange.apply(this, _toConsumableArray(args).concat([force]));\n      } else {\n        this.setNativeRange(null);\n      }\n      this.update(source);\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _emitter4.default.sources.USER;\n\n      var oldRange = this.lastRange;\n\n      var _getRange = this.getRange(),\n          _getRange2 = _slicedToArray(_getRange, 2),\n          lastRange = _getRange2[0],\n          nativeRange = _getRange2[1];\n\n      this.lastRange = lastRange;\n      if (this.lastRange != null) {\n        this.savedRange = this.lastRange;\n      }\n      if (!(0, _deepEqual2.default)(oldRange, this.lastRange)) {\n        var _emitter;\n\n        if (!this.composing && nativeRange != null && nativeRange.native.collapsed && nativeRange.start.node !== this.cursor.textNode) {\n          this.cursor.restore();\n        }\n        var args = [_emitter4.default.events.SELECTION_CHANGE, (0, _clone2.default)(this.lastRange), (0, _clone2.default)(oldRange), source];\n        (_emitter = this.emitter).emit.apply(_emitter, [_emitter4.default.events.EDITOR_CHANGE].concat(args));\n        if (source !== _emitter4.default.sources.SILENT) {\n          var _emitter2;\n\n          (_emitter2 = this.emitter).emit.apply(_emitter2, args);\n        }\n      }\n    }\n  }]);\n\n  return Selection;\n}();\n\nfunction contains(parent, descendant) {\n  try {\n    // Firefox inserts inaccessible nodes around video elements\n    descendant.parentNode;\n  } catch (e) {\n    return false;\n  }\n  // IE11 has bug with Text nodes\n  // https://connect.microsoft.com/IE/feedback/details/780874/node-contains-is-incorrect\n  if (descendant instanceof Text) {\n    descendant = descendant.parentNode;\n  }\n  return parent.contains(descendant);\n}\n\nexports.Range = Range;\nexports.default = Selection;\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Break = function (_Parchment$Embed) {\n  _inherits(Break, _Parchment$Embed);\n\n  function Break() {\n    _classCallCheck(this, Break);\n\n    return _possibleConstructorReturn(this, (Break.__proto__ || Object.getPrototypeOf(Break)).apply(this, arguments));\n  }\n\n  _createClass(Break, [{\n    key: 'insertInto',\n    value: function insertInto(parent, ref) {\n      if (parent.children.length === 0) {\n        _get(Break.prototype.__proto__ || Object.getPrototypeOf(Break.prototype), 'insertInto', this).call(this, parent, ref);\n      } else {\n        this.remove();\n      }\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      return 0;\n    }\n  }, {\n    key: 'value',\n    value: function value() {\n      return '';\n    }\n  }], [{\n    key: 'value',\n    value: function value() {\n      return undefined;\n    }\n  }]);\n\n  return Break;\n}(_parchment2.default.Embed);\n\nBreak.blotName = 'break';\nBreak.tagName = 'BR';\n\nexports.default = Break;\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar linked_list_1 = __webpack_require__(44);\nvar shadow_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar ContainerBlot = /** @class */ (function (_super) {\n    __extends(ContainerBlot, _super);\n    function ContainerBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.build();\n        return _this;\n    }\n    ContainerBlot.prototype.appendChild = function (other) {\n        this.insertBefore(other);\n    };\n    ContainerBlot.prototype.attach = function () {\n        _super.prototype.attach.call(this);\n        this.children.forEach(function (child) {\n            child.attach();\n        });\n    };\n    ContainerBlot.prototype.build = function () {\n        var _this = this;\n        this.children = new linked_list_1.default();\n        // Need to be reversed for if DOM nodes already in order\n        [].slice\n            .call(this.domNode.childNodes)\n            .reverse()\n            .forEach(function (node) {\n            try {\n                var child = makeBlot(node);\n                _this.insertBefore(child, _this.children.head || undefined);\n            }\n            catch (err) {\n                if (err instanceof Registry.ParchmentError)\n                    return;\n                else\n                    throw err;\n            }\n        });\n    };\n    ContainerBlot.prototype.deleteAt = function (index, length) {\n        if (index === 0 && length === this.length()) {\n            return this.remove();\n        }\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.deleteAt(offset, length);\n        });\n    };\n    ContainerBlot.prototype.descendant = function (criteria, index) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if ((criteria.blotName == null && criteria(child)) ||\n            (criteria.blotName != null && child instanceof criteria)) {\n            return [child, offset];\n        }\n        else if (child instanceof ContainerBlot) {\n            return child.descendant(criteria, offset);\n        }\n        else {\n            return [null, -1];\n        }\n    };\n    ContainerBlot.prototype.descendants = function (criteria, index, length) {\n        if (index === void 0) { index = 0; }\n        if (length === void 0) { length = Number.MAX_VALUE; }\n        var descendants = [];\n        var lengthLeft = length;\n        this.children.forEachAt(index, length, function (child, index, length) {\n            if ((criteria.blotName == null && criteria(child)) ||\n                (criteria.blotName != null && child instanceof criteria)) {\n                descendants.push(child);\n            }\n            if (child instanceof ContainerBlot) {\n                descendants = descendants.concat(child.descendants(criteria, index, lengthLeft));\n            }\n            lengthLeft -= length;\n        });\n        return descendants;\n    };\n    ContainerBlot.prototype.detach = function () {\n        this.children.forEach(function (child) {\n            child.detach();\n        });\n        _super.prototype.detach.call(this);\n    };\n    ContainerBlot.prototype.formatAt = function (index, length, name, value) {\n        this.children.forEachAt(index, length, function (child, offset, length) {\n            child.formatAt(offset, length, name, value);\n        });\n    };\n    ContainerBlot.prototype.insertAt = function (index, value, def) {\n        var _a = this.children.find(index), child = _a[0], offset = _a[1];\n        if (child) {\n            child.insertAt(offset, value, def);\n        }\n        else {\n            var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n            this.appendChild(blot);\n        }\n    };\n    ContainerBlot.prototype.insertBefore = function (childBlot, refBlot) {\n        if (this.statics.allowedChildren != null &&\n            !this.statics.allowedChildren.some(function (child) {\n                return childBlot instanceof child;\n            })) {\n            throw new Registry.ParchmentError(\"Cannot insert \" + childBlot.statics.blotName + \" into \" + this.statics.blotName);\n        }\n        childBlot.insertInto(this, refBlot);\n    };\n    ContainerBlot.prototype.length = function () {\n        return this.children.reduce(function (memo, child) {\n            return memo + child.length();\n        }, 0);\n    };\n    ContainerBlot.prototype.moveChildren = function (targetParent, refNode) {\n        this.children.forEach(function (child) {\n            targetParent.insertBefore(child, refNode);\n        });\n    };\n    ContainerBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        if (this.children.length === 0) {\n            if (this.statics.defaultChild != null) {\n                var child = Registry.create(this.statics.defaultChild);\n                this.appendChild(child);\n                child.optimize(context);\n            }\n            else {\n                this.remove();\n            }\n        }\n    };\n    ContainerBlot.prototype.path = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var _a = this.children.find(index, inclusive), child = _a[0], offset = _a[1];\n        var position = [[this, index]];\n        if (child instanceof ContainerBlot) {\n            return position.concat(child.path(offset, inclusive));\n        }\n        else if (child != null) {\n            position.push([child, offset]);\n        }\n        return position;\n    };\n    ContainerBlot.prototype.removeChild = function (child) {\n        this.children.remove(child);\n    };\n    ContainerBlot.prototype.replace = function (target) {\n        if (target instanceof ContainerBlot) {\n            target.moveChildren(this);\n        }\n        _super.prototype.replace.call(this, target);\n    };\n    ContainerBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = this.clone();\n        this.parent.insertBefore(after, this.next);\n        this.children.forEachAt(index, this.length(), function (child, offset, length) {\n            child = child.split(offset, force);\n            after.appendChild(child);\n        });\n        return after;\n    };\n    ContainerBlot.prototype.unwrap = function () {\n        this.moveChildren(this.parent, this.next);\n        this.remove();\n    };\n    ContainerBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        var addedNodes = [];\n        var removedNodes = [];\n        mutations.forEach(function (mutation) {\n            if (mutation.target === _this.domNode && mutation.type === 'childList') {\n                addedNodes.push.apply(addedNodes, mutation.addedNodes);\n                removedNodes.push.apply(removedNodes, mutation.removedNodes);\n            }\n        });\n        removedNodes.forEach(function (node) {\n            // Check node has actually been removed\n            // One exception is Chrome does not immediately remove IFRAMEs\n            // from DOM but MutationRecord is correct in its reported removal\n            if (node.parentNode != null &&\n                // @ts-ignore\n                node.tagName !== 'IFRAME' &&\n                document.body.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n                return;\n            }\n            var blot = Registry.find(node);\n            if (blot == null)\n                return;\n            if (blot.domNode.parentNode == null || blot.domNode.parentNode === _this.domNode) {\n                blot.detach();\n            }\n        });\n        addedNodes\n            .filter(function (node) {\n            return node.parentNode == _this.domNode;\n        })\n            .sort(function (a, b) {\n            if (a === b)\n                return 0;\n            if (a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING) {\n                return 1;\n            }\n            return -1;\n        })\n            .forEach(function (node) {\n            var refBlot = null;\n            if (node.nextSibling != null) {\n                refBlot = Registry.find(node.nextSibling);\n            }\n            var blot = makeBlot(node);\n            if (blot.next != refBlot || blot.next == null) {\n                if (blot.parent != null) {\n                    blot.parent.removeChild(_this);\n                }\n                _this.insertBefore(blot, refBlot || undefined);\n            }\n        });\n    };\n    return ContainerBlot;\n}(shadow_1.default));\nfunction makeBlot(node) {\n    var blot = Registry.find(node);\n    if (blot == null) {\n        try {\n            blot = Registry.create(node);\n        }\n        catch (e) {\n            blot = Registry.create(Registry.Scope.INLINE);\n            [].slice.call(node.childNodes).forEach(function (child) {\n                // @ts-ignore\n                blot.domNode.appendChild(child);\n            });\n            if (node.parentNode) {\n                node.parentNode.replaceChild(blot.domNode, node);\n            }\n            blot.attach();\n        }\n    }\n    return blot;\n}\nexports.default = ContainerBlot;\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nvar store_1 = __webpack_require__(31);\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar FormatBlot = /** @class */ (function (_super) {\n    __extends(FormatBlot, _super);\n    function FormatBlot(domNode) {\n        var _this = _super.call(this, domNode) || this;\n        _this.attributes = new store_1.default(_this.domNode);\n        return _this;\n    }\n    FormatBlot.formats = function (domNode) {\n        if (typeof this.tagName === 'string') {\n            return true;\n        }\n        else if (Array.isArray(this.tagName)) {\n            return domNode.tagName.toLowerCase();\n        }\n        return undefined;\n    };\n    FormatBlot.prototype.format = function (name, value) {\n        var format = Registry.query(name);\n        if (format instanceof attributor_1.default) {\n            this.attributes.attribute(format, value);\n        }\n        else if (value) {\n            if (format != null && (name !== this.statics.blotName || this.formats()[name] !== value)) {\n                this.replaceWith(name, value);\n            }\n        }\n    };\n    FormatBlot.prototype.formats = function () {\n        var formats = this.attributes.values();\n        var format = this.statics.formats(this.domNode);\n        if (format != null) {\n            formats[this.statics.blotName] = format;\n        }\n        return formats;\n    };\n    FormatBlot.prototype.replaceWith = function (name, value) {\n        var replacement = _super.prototype.replaceWith.call(this, name, value);\n        this.attributes.copy(replacement);\n        return replacement;\n    };\n    FormatBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        _super.prototype.update.call(this, mutations, context);\n        if (mutations.some(function (mutation) {\n            return mutation.target === _this.domNode && mutation.type === 'attributes';\n        })) {\n            this.attributes.build();\n        }\n    };\n    FormatBlot.prototype.wrap = function (name, value) {\n        var wrapper = _super.prototype.wrap.call(this, name, value);\n        if (wrapper instanceof FormatBlot && wrapper.statics.scope === this.statics.scope) {\n            this.attributes.move(wrapper);\n        }\n        return wrapper;\n    };\n    return FormatBlot;\n}(container_1.default));\nexports.default = FormatBlot;\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar shadow_1 = __webpack_require__(30);\nvar Registry = __webpack_require__(1);\nvar LeafBlot = /** @class */ (function (_super) {\n    __extends(LeafBlot, _super);\n    function LeafBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    LeafBlot.value = function (domNode) {\n        return true;\n    };\n    LeafBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node ||\n            this.domNode.compareDocumentPosition(node) & Node.DOCUMENT_POSITION_CONTAINED_BY) {\n            return Math.min(offset, 1);\n        }\n        return -1;\n    };\n    LeafBlot.prototype.position = function (index, inclusive) {\n        var offset = [].indexOf.call(this.parent.domNode.childNodes, this.domNode);\n        if (index > 0)\n            offset += 1;\n        return [this.parent.domNode, offset];\n    };\n    LeafBlot.prototype.value = function () {\n        var _a;\n        return _a = {}, _a[this.statics.blotName] = this.statics.value(this.domNode) || true, _a;\n    };\n    LeafBlot.scope = Registry.Scope.INLINE_BLOT;\n    return LeafBlot;\n}(shadow_1.default));\nexports.default = LeafBlot;\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar equal = __webpack_require__(11);\nvar extend = __webpack_require__(3);\n\n\nvar lib = {\n  attributes: {\n    compose: function (a, b, keepNull) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = extend(true, {}, b);\n      if (!keepNull) {\n        attributes = Object.keys(attributes).reduce(function (copy, key) {\n          if (attributes[key] != null) {\n            copy[key] = attributes[key];\n          }\n          return copy;\n        }, {});\n      }\n      for (var key in a) {\n        if (a[key] !== undefined && b[key] === undefined) {\n          attributes[key] = a[key];\n        }\n      }\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    diff: function(a, b) {\n      if (typeof a !== 'object') a = {};\n      if (typeof b !== 'object') b = {};\n      var attributes = Object.keys(a).concat(Object.keys(b)).reduce(function (attributes, key) {\n        if (!equal(a[key], b[key])) {\n          attributes[key] = b[key] === undefined ? null : b[key];\n        }\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    },\n\n    transform: function (a, b, priority) {\n      if (typeof a !== 'object') return b;\n      if (typeof b !== 'object') return undefined;\n      if (!priority) return b;  // b simply overwrites us without priority\n      var attributes = Object.keys(b).reduce(function (attributes, key) {\n        if (a[key] === undefined) attributes[key] = b[key];  // null is a valid value\n        return attributes;\n      }, {});\n      return Object.keys(attributes).length > 0 ? attributes : undefined;\n    }\n  },\n\n  iterator: function (ops) {\n    return new Iterator(ops);\n  },\n\n  length: function (op) {\n    if (typeof op['delete'] === 'number') {\n      return op['delete'];\n    } else if (typeof op.retain === 'number') {\n      return op.retain;\n    } else {\n      return typeof op.insert === 'string' ? op.insert.length : 1;\n    }\n  }\n};\n\n\nfunction Iterator(ops) {\n  this.ops = ops;\n  this.index = 0;\n  this.offset = 0;\n};\n\nIterator.prototype.hasNext = function () {\n  return this.peekLength() < Infinity;\n};\n\nIterator.prototype.next = function (length) {\n  if (!length) length = Infinity;\n  var nextOp = this.ops[this.index];\n  if (nextOp) {\n    var offset = this.offset;\n    var opLength = lib.length(nextOp)\n    if (length >= opLength - offset) {\n      length = opLength - offset;\n      this.index += 1;\n      this.offset = 0;\n    } else {\n      this.offset += length;\n    }\n    if (typeof nextOp['delete'] === 'number') {\n      return { 'delete': length };\n    } else {\n      var retOp = {};\n      if (nextOp.attributes) {\n        retOp.attributes = nextOp.attributes;\n      }\n      if (typeof nextOp.retain === 'number') {\n        retOp.retain = length;\n      } else if (typeof nextOp.insert === 'string') {\n        retOp.insert = nextOp.insert.substr(offset, length);\n      } else {\n        // offset should === 0, length should === 1\n        retOp.insert = nextOp.insert;\n      }\n      return retOp;\n    }\n  } else {\n    return { retain: Infinity };\n  }\n};\n\nIterator.prototype.peek = function () {\n  return this.ops[this.index];\n};\n\nIterator.prototype.peekLength = function () {\n  if (this.ops[this.index]) {\n    // Should never return 0 if our index is being managed correctly\n    return lib.length(this.ops[this.index]) - this.offset;\n  } else {\n    return Infinity;\n  }\n};\n\nIterator.prototype.peekType = function () {\n  if (this.ops[this.index]) {\n    if (typeof this.ops[this.index]['delete'] === 'number') {\n      return 'delete';\n    } else if (typeof this.ops[this.index].retain === 'number') {\n      return 'retain';\n    } else {\n      return 'insert';\n    }\n  }\n  return 'retain';\n};\n\nIterator.prototype.rest = function () {\n  if (!this.hasNext()) {\n    return [];\n  } else if (this.offset === 0) {\n    return this.ops.slice(this.index);\n  } else {\n    var offset = this.offset;\n    var index = this.index;\n    var next = this.next();\n    var rest = this.ops.slice(this.index);\n    this.offset = offset;\n    this.index = index;\n    return [next].concat(rest);\n  }\n};\n\n\nmodule.exports = lib;\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\nvar clone = (function() {\n'use strict';\n\nfunction _instanceof(obj, type) {\n  return type != null && obj instanceof type;\n}\n\nvar nativeMap;\ntry {\n  nativeMap = Map;\n} catch(_) {\n  // maybe a reference error because no `Map`. Give it a dummy value that no\n  // value will ever be an instanceof.\n  nativeMap = function() {};\n}\n\nvar nativeSet;\ntry {\n  nativeSet = Set;\n} catch(_) {\n  nativeSet = function() {};\n}\n\nvar nativePromise;\ntry {\n  nativePromise = Promise;\n} catch(_) {\n  nativePromise = function() {};\n}\n\n/**\n * Clones (copies) an Object using deep copying.\n *\n * This function supports circular references by default, but if you are certain\n * there are no circular references in your object, you can save some CPU time\n * by calling clone(obj, false).\n *\n * Caution: if `circular` is false and `parent` contains circular references,\n * your program may enter an infinite loop and crash.\n *\n * @param `parent` - the object to be cloned\n * @param `circular` - set to true if the object to be cloned may contain\n *    circular references. (optional - true by default)\n * @param `depth` - set to a number if the object is only to be cloned to\n *    a particular depth. (optional - defaults to Infinity)\n * @param `prototype` - sets the prototype to be used when cloning an object.\n *    (optional - defaults to parent prototype).\n * @param `includeNonEnumerable` - set to true if the non-enumerable properties\n *    should be cloned as well. Non-enumerable properties on the prototype\n *    chain will be ignored. (optional - false by default)\n*/\nfunction clone(parent, circular, depth, prototype, includeNonEnumerable) {\n  if (typeof circular === 'object') {\n    depth = circular.depth;\n    prototype = circular.prototype;\n    includeNonEnumerable = circular.includeNonEnumerable;\n    circular = circular.circular;\n  }\n  // maintain two arrays for circular references, where corresponding parents\n  // and children have the same index\n  var allParents = [];\n  var allChildren = [];\n\n  var useBuffer = typeof Buffer != 'undefined';\n\n  if (typeof circular == 'undefined')\n    circular = true;\n\n  if (typeof depth == 'undefined')\n    depth = Infinity;\n\n  // recurse this function so we don't reset allParents and allChildren\n  function _clone(parent, depth) {\n    // cloning null always returns null\n    if (parent === null)\n      return null;\n\n    if (depth === 0)\n      return parent;\n\n    var child;\n    var proto;\n    if (typeof parent != 'object') {\n      return parent;\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      child = new nativeMap();\n    } else if (_instanceof(parent, nativeSet)) {\n      child = new nativeSet();\n    } else if (_instanceof(parent, nativePromise)) {\n      child = new nativePromise(function (resolve, reject) {\n        parent.then(function(value) {\n          resolve(_clone(value, depth - 1));\n        }, function(err) {\n          reject(_clone(err, depth - 1));\n        });\n      });\n    } else if (clone.__isArray(parent)) {\n      child = [];\n    } else if (clone.__isRegExp(parent)) {\n      child = new RegExp(parent.source, __getRegExpFlags(parent));\n      if (parent.lastIndex) child.lastIndex = parent.lastIndex;\n    } else if (clone.__isDate(parent)) {\n      child = new Date(parent.getTime());\n    } else if (useBuffer && Buffer.isBuffer(parent)) {\n      if (Buffer.allocUnsafe) {\n        // Node.js >= 4.5.0\n        child = Buffer.allocUnsafe(parent.length);\n      } else {\n        // Older Node.js versions\n        child = new Buffer(parent.length);\n      }\n      parent.copy(child);\n      return child;\n    } else if (_instanceof(parent, Error)) {\n      child = Object.create(parent);\n    } else {\n      if (typeof prototype == 'undefined') {\n        proto = Object.getPrototypeOf(parent);\n        child = Object.create(proto);\n      }\n      else {\n        child = Object.create(prototype);\n        proto = prototype;\n      }\n    }\n\n    if (circular) {\n      var index = allParents.indexOf(parent);\n\n      if (index != -1) {\n        return allChildren[index];\n      }\n      allParents.push(parent);\n      allChildren.push(child);\n    }\n\n    if (_instanceof(parent, nativeMap)) {\n      parent.forEach(function(value, key) {\n        var keyChild = _clone(key, depth - 1);\n        var valueChild = _clone(value, depth - 1);\n        child.set(keyChild, valueChild);\n      });\n    }\n    if (_instanceof(parent, nativeSet)) {\n      parent.forEach(function(value) {\n        var entryChild = _clone(value, depth - 1);\n        child.add(entryChild);\n      });\n    }\n\n    for (var i in parent) {\n      var attrs;\n      if (proto) {\n        attrs = Object.getOwnPropertyDescriptor(proto, i);\n      }\n\n      if (attrs && attrs.set == null) {\n        continue;\n      }\n      child[i] = _clone(parent[i], depth - 1);\n    }\n\n    if (Object.getOwnPropertySymbols) {\n      var symbols = Object.getOwnPropertySymbols(parent);\n      for (var i = 0; i < symbols.length; i++) {\n        // Don't need to worry about cloning a symbol because it is a primitive,\n        // like a number or string.\n        var symbol = symbols[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, symbol);\n        if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {\n          continue;\n        }\n        child[symbol] = _clone(parent[symbol], depth - 1);\n        if (!descriptor.enumerable) {\n          Object.defineProperty(child, symbol, {\n            enumerable: false\n          });\n        }\n      }\n    }\n\n    if (includeNonEnumerable) {\n      var allPropertyNames = Object.getOwnPropertyNames(parent);\n      for (var i = 0; i < allPropertyNames.length; i++) {\n        var propertyName = allPropertyNames[i];\n        var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName);\n        if (descriptor && descriptor.enumerable) {\n          continue;\n        }\n        child[propertyName] = _clone(parent[propertyName], depth - 1);\n        Object.defineProperty(child, propertyName, {\n          enumerable: false\n        });\n      }\n    }\n\n    return child;\n  }\n\n  return _clone(parent, depth);\n}\n\n/**\n * Simple flat clone using prototype, accepts only objects, usefull for property\n * override on FLAT configuration object (no nested props).\n *\n * USE WITH CAUTION! This may not behave as you wish if you do not know how this\n * works.\n */\nclone.clonePrototype = function clonePrototype(parent) {\n  if (parent === null)\n    return null;\n\n  var c = function () {};\n  c.prototype = parent;\n  return new c();\n};\n\n// private utility functions\n\nfunction __objToStr(o) {\n  return Object.prototype.toString.call(o);\n}\nclone.__objToStr = __objToStr;\n\nfunction __isDate(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Date]';\n}\nclone.__isDate = __isDate;\n\nfunction __isArray(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object Array]';\n}\nclone.__isArray = __isArray;\n\nfunction __isRegExp(o) {\n  return typeof o === 'object' && __objToStr(o) === '[object RegExp]';\n}\nclone.__isRegExp = __isRegExp;\n\nfunction __getRegExpFlags(re) {\n  var flags = '';\n  if (re.global) flags += 'g';\n  if (re.ignoreCase) flags += 'i';\n  if (re.multiline) flags += 'm';\n  return flags;\n}\nclone.__getRegExpFlags = __getRegExpFlags;\n\nreturn clone;\n})();\n\nif (typeof module === 'object' && module.exports) {\n  module.exports = clone;\n}\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction isLine(blot) {\n  return blot instanceof _block2.default || blot instanceof _block.BlockEmbed;\n}\n\nvar Scroll = function (_Parchment$Scroll) {\n  _inherits(Scroll, _Parchment$Scroll);\n\n  function Scroll(domNode, config) {\n    _classCallCheck(this, Scroll);\n\n    var _this = _possibleConstructorReturn(this, (Scroll.__proto__ || Object.getPrototypeOf(Scroll)).call(this, domNode));\n\n    _this.emitter = config.emitter;\n    if (Array.isArray(config.whitelist)) {\n      _this.whitelist = config.whitelist.reduce(function (whitelist, format) {\n        whitelist[format] = true;\n        return whitelist;\n      }, {});\n    }\n    // Some reason fixes composition issues with character languages in Windows/Chrome, Safari\n    _this.domNode.addEventListener('DOMNodeInserted', function () {});\n    _this.optimize();\n    _this.enable();\n    return _this;\n  }\n\n  _createClass(Scroll, [{\n    key: 'batchStart',\n    value: function batchStart() {\n      this.batch = true;\n    }\n  }, {\n    key: 'batchEnd',\n    value: function batchEnd() {\n      this.batch = false;\n      this.optimize();\n    }\n  }, {\n    key: 'deleteAt',\n    value: function deleteAt(index, length) {\n      var _line = this.line(index),\n          _line2 = _slicedToArray(_line, 2),\n          first = _line2[0],\n          offset = _line2[1];\n\n      var _line3 = this.line(index + length),\n          _line4 = _slicedToArray(_line3, 1),\n          last = _line4[0];\n\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'deleteAt', this).call(this, index, length);\n      if (last != null && first !== last && offset > 0) {\n        if (first instanceof _block.BlockEmbed || last instanceof _block.BlockEmbed) {\n          this.optimize();\n          return;\n        }\n        if (first instanceof _code2.default) {\n          var newlineIndex = first.newlineIndex(first.length(), true);\n          if (newlineIndex > -1) {\n            first = first.split(newlineIndex + 1);\n            if (first === last) {\n              this.optimize();\n              return;\n            }\n          }\n        } else if (last instanceof _code2.default) {\n          var _newlineIndex = last.newlineIndex(0);\n          if (_newlineIndex > -1) {\n            last.split(_newlineIndex + 1);\n          }\n        }\n        var ref = last.children.head instanceof _break2.default ? null : last.children.head;\n        first.moveChildren(last, ref);\n        first.remove();\n      }\n      this.optimize();\n    }\n  }, {\n    key: 'enable',\n    value: function enable() {\n      var enabled = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n      this.domNode.setAttribute('contenteditable', enabled);\n    }\n  }, {\n    key: 'formatAt',\n    value: function formatAt(index, length, format, value) {\n      if (this.whitelist != null && !this.whitelist[format]) return;\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'formatAt', this).call(this, index, length, format, value);\n      this.optimize();\n    }\n  }, {\n    key: 'insertAt',\n    value: function insertAt(index, value, def) {\n      if (def != null && this.whitelist != null && !this.whitelist[value]) return;\n      if (index >= this.length()) {\n        if (def == null || _parchment2.default.query(value, _parchment2.default.Scope.BLOCK) == null) {\n          var blot = _parchment2.default.create(this.statics.defaultChild);\n          this.appendChild(blot);\n          if (def == null && value.endsWith('\\n')) {\n            value = value.slice(0, -1);\n          }\n          blot.insertAt(0, value, def);\n        } else {\n          var embed = _parchment2.default.create(value, def);\n          this.appendChild(embed);\n        }\n      } else {\n        _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertAt', this).call(this, index, value, def);\n      }\n      this.optimize();\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      if (blot.statics.scope === _parchment2.default.Scope.INLINE_BLOT) {\n        var wrapper = _parchment2.default.create(this.statics.defaultChild);\n        wrapper.appendChild(blot);\n        blot = wrapper;\n      }\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'insertBefore', this).call(this, blot, ref);\n    }\n  }, {\n    key: 'leaf',\n    value: function leaf(index) {\n      return this.path(index).pop() || [null, -1];\n    }\n  }, {\n    key: 'line',\n    value: function line(index) {\n      if (index === this.length()) {\n        return this.line(index - 1);\n      }\n      return this.descendant(isLine, index);\n    }\n  }, {\n    key: 'lines',\n    value: function lines() {\n      var index = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n      var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE;\n\n      var getLines = function getLines(blot, index, length) {\n        var lines = [],\n            lengthLeft = length;\n        blot.children.forEachAt(index, length, function (child, index, length) {\n          if (isLine(child)) {\n            lines.push(child);\n          } else if (child instanceof _parchment2.default.Container) {\n            lines = lines.concat(getLines(child, index, lengthLeft));\n          }\n          lengthLeft -= length;\n        });\n        return lines;\n      };\n      return getLines(this, index, length);\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize() {\n      var mutations = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n      if (this.batch === true) return;\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'optimize', this).call(this, mutations, context);\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_OPTIMIZE, mutations, context);\n      }\n    }\n  }, {\n    key: 'path',\n    value: function path(index) {\n      return _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'path', this).call(this, index).slice(1); // Exclude self\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations) {\n      if (this.batch === true) return;\n      var source = _emitter2.default.sources.USER;\n      if (typeof mutations === 'string') {\n        source = mutations;\n      }\n      if (!Array.isArray(mutations)) {\n        mutations = this.observer.takeRecords();\n      }\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_BEFORE_UPDATE, source, mutations);\n      }\n      _get(Scroll.prototype.__proto__ || Object.getPrototypeOf(Scroll.prototype), 'update', this).call(this, mutations.concat([])); // pass copy\n      if (mutations.length > 0) {\n        this.emitter.emit(_emitter2.default.events.SCROLL_UPDATE, source, mutations);\n      }\n    }\n  }]);\n\n  return Scroll;\n}(_parchment2.default.Scroll);\n\nScroll.blotName = 'scroll';\nScroll.className = 'ql-editor';\nScroll.tagName = 'DIV';\nScroll.defaultChild = 'block';\nScroll.allowedChildren = [_block2.default, _block.BlockEmbed, _container2.default];\n\nexports.default = Scroll;\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SHORTKEY = exports.default = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _clone = __webpack_require__(21);\n\nvar _clone2 = _interopRequireDefault(_clone);\n\nvar _deepEqual = __webpack_require__(11);\n\nvar _deepEqual2 = _interopRequireDefault(_deepEqual);\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _op = __webpack_require__(20);\n\nvar _op2 = _interopRequireDefault(_op);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:keyboard');\n\nvar SHORTKEY = /Mac/i.test(navigator.platform) ? 'metaKey' : 'ctrlKey';\n\nvar Keyboard = function (_Module) {\n  _inherits(Keyboard, _Module);\n\n  _createClass(Keyboard, null, [{\n    key: 'match',\n    value: function match(evt, binding) {\n      binding = normalize(binding);\n      if (['altKey', 'ctrlKey', 'metaKey', 'shiftKey'].some(function (key) {\n        return !!binding[key] !== evt[key] && binding[key] !== null;\n      })) {\n        return false;\n      }\n      return binding.key === (evt.which || evt.keyCode);\n    }\n  }]);\n\n  function Keyboard(quill, options) {\n    _classCallCheck(this, Keyboard);\n\n    var _this = _possibleConstructorReturn(this, (Keyboard.__proto__ || Object.getPrototypeOf(Keyboard)).call(this, quill, options));\n\n    _this.bindings = {};\n    Object.keys(_this.options.bindings).forEach(function (name) {\n      if (name === 'list autofill' && quill.scroll.whitelist != null && !quill.scroll.whitelist['list']) {\n        return;\n      }\n      if (_this.options.bindings[name]) {\n        _this.addBinding(_this.options.bindings[name]);\n      }\n    });\n    _this.addBinding({ key: Keyboard.keys.ENTER, shiftKey: null }, handleEnter);\n    _this.addBinding({ key: Keyboard.keys.ENTER, metaKey: null, ctrlKey: null, altKey: null }, function () {});\n    if (/Firefox/i.test(navigator.userAgent)) {\n      // Need to handle delete and backspace for Firefox in the general case #1171\n      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true }, handleBackspace);\n      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true }, handleDelete);\n    } else {\n      _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: true, prefix: /^.?$/ }, handleBackspace);\n      _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: true, suffix: /^.?$/ }, handleDelete);\n    }\n    _this.addBinding({ key: Keyboard.keys.BACKSPACE }, { collapsed: false }, handleDeleteRange);\n    _this.addBinding({ key: Keyboard.keys.DELETE }, { collapsed: false }, handleDeleteRange);\n    _this.addBinding({ key: Keyboard.keys.BACKSPACE, altKey: null, ctrlKey: null, metaKey: null, shiftKey: null }, { collapsed: true, offset: 0 }, handleBackspace);\n    _this.listen();\n    return _this;\n  }\n\n  _createClass(Keyboard, [{\n    key: 'addBinding',\n    value: function addBinding(key) {\n      var context = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      var handler = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n      var binding = normalize(key);\n      if (binding == null || binding.key == null) {\n        return debug.warn('Attempted to add invalid keyboard binding', binding);\n      }\n      if (typeof context === 'function') {\n        context = { handler: context };\n      }\n      if (typeof handler === 'function') {\n        handler = { handler: handler };\n      }\n      binding = (0, _extend2.default)(binding, context, handler);\n      this.bindings[binding.key] = this.bindings[binding.key] || [];\n      this.bindings[binding.key].push(binding);\n    }\n  }, {\n    key: 'listen',\n    value: function listen() {\n      var _this2 = this;\n\n      this.quill.root.addEventListener('keydown', function (evt) {\n        if (evt.defaultPrevented) return;\n        var which = evt.which || evt.keyCode;\n        var bindings = (_this2.bindings[which] || []).filter(function (binding) {\n          return Keyboard.match(evt, binding);\n        });\n        if (bindings.length === 0) return;\n        var range = _this2.quill.getSelection();\n        if (range == null || !_this2.quill.hasFocus()) return;\n\n        var _quill$getLine = _this2.quill.getLine(range.index),\n            _quill$getLine2 = _slicedToArray(_quill$getLine, 2),\n            line = _quill$getLine2[0],\n            offset = _quill$getLine2[1];\n\n        var _quill$getLeaf = _this2.quill.getLeaf(range.index),\n            _quill$getLeaf2 = _slicedToArray(_quill$getLeaf, 2),\n            leafStart = _quill$getLeaf2[0],\n            offsetStart = _quill$getLeaf2[1];\n\n        var _ref = range.length === 0 ? [leafStart, offsetStart] : _this2.quill.getLeaf(range.index + range.length),\n            _ref2 = _slicedToArray(_ref, 2),\n            leafEnd = _ref2[0],\n            offsetEnd = _ref2[1];\n\n        var prefixText = leafStart instanceof _parchment2.default.Text ? leafStart.value().slice(0, offsetStart) : '';\n        var suffixText = leafEnd instanceof _parchment2.default.Text ? leafEnd.value().slice(offsetEnd) : '';\n        var curContext = {\n          collapsed: range.length === 0,\n          empty: range.length === 0 && line.length() <= 1,\n          format: _this2.quill.getFormat(range),\n          offset: offset,\n          prefix: prefixText,\n          suffix: suffixText\n        };\n        var prevented = bindings.some(function (binding) {\n          if (binding.collapsed != null && binding.collapsed !== curContext.collapsed) return false;\n          if (binding.empty != null && binding.empty !== curContext.empty) return false;\n          if (binding.offset != null && binding.offset !== curContext.offset) return false;\n          if (Array.isArray(binding.format)) {\n            // any format is present\n            if (binding.format.every(function (name) {\n              return curContext.format[name] == null;\n            })) {\n              return false;\n            }\n          } else if (_typeof(binding.format) === 'object') {\n            // all formats must match\n            if (!Object.keys(binding.format).every(function (name) {\n              if (binding.format[name] === true) return curContext.format[name] != null;\n              if (binding.format[name] === false) return curContext.format[name] == null;\n              return (0, _deepEqual2.default)(binding.format[name], curContext.format[name]);\n            })) {\n              return false;\n            }\n          }\n          if (binding.prefix != null && !binding.prefix.test(curContext.prefix)) return false;\n          if (binding.suffix != null && !binding.suffix.test(curContext.suffix)) return false;\n          return binding.handler.call(_this2, range, curContext) !== true;\n        });\n        if (prevented) {\n          evt.preventDefault();\n        }\n      });\n    }\n  }]);\n\n  return Keyboard;\n}(_module2.default);\n\nKeyboard.keys = {\n  BACKSPACE: 8,\n  TAB: 9,\n  ENTER: 13,\n  ESCAPE: 27,\n  LEFT: 37,\n  UP: 38,\n  RIGHT: 39,\n  DOWN: 40,\n  DELETE: 46\n};\n\nKeyboard.DEFAULTS = {\n  bindings: {\n    'bold': makeFormatHandler('bold'),\n    'italic': makeFormatHandler('italic'),\n    'underline': makeFormatHandler('underline'),\n    'indent': {\n      // highlight tab or tab at beginning of list, indent or blockquote\n      key: Keyboard.keys.TAB,\n      format: ['blockquote', 'indent', 'list'],\n      handler: function handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '+1', _quill2.default.sources.USER);\n      }\n    },\n    'outdent': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      format: ['blockquote', 'indent', 'list'],\n      // highlight tab or tab at beginning of list, indent or blockquote\n      handler: function handler(range, context) {\n        if (context.collapsed && context.offset !== 0) return true;\n        this.quill.format('indent', '-1', _quill2.default.sources.USER);\n      }\n    },\n    'outdent backspace': {\n      key: Keyboard.keys.BACKSPACE,\n      collapsed: true,\n      shiftKey: null,\n      metaKey: null,\n      ctrlKey: null,\n      altKey: null,\n      format: ['indent', 'list'],\n      offset: 0,\n      handler: function handler(range, context) {\n        if (context.format.indent != null) {\n          this.quill.format('indent', '-1', _quill2.default.sources.USER);\n        } else if (context.format.list != null) {\n          this.quill.format('list', false, _quill2.default.sources.USER);\n        }\n      }\n    },\n    'indent code-block': makeCodeBlockHandler(true),\n    'outdent code-block': makeCodeBlockHandler(false),\n    'remove tab': {\n      key: Keyboard.keys.TAB,\n      shiftKey: true,\n      collapsed: true,\n      prefix: /\\t$/,\n      handler: function handler(range) {\n        this.quill.deleteText(range.index - 1, 1, _quill2.default.sources.USER);\n      }\n    },\n    'tab': {\n      key: Keyboard.keys.TAB,\n      handler: function handler(range) {\n        this.quill.history.cutoff();\n        var delta = new _quillDelta2.default().retain(range.index).delete(range.length).insert('\\t');\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n      }\n    },\n    'list empty enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['list'],\n      empty: true,\n      handler: function handler(range, context) {\n        this.quill.format('list', false, _quill2.default.sources.USER);\n        if (context.format.indent) {\n          this.quill.format('indent', false, _quill2.default.sources.USER);\n        }\n      }\n    },\n    'checklist enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: { list: 'checked' },\n      handler: function handler(range) {\n        var _quill$getLine3 = this.quill.getLine(range.index),\n            _quill$getLine4 = _slicedToArray(_quill$getLine3, 2),\n            line = _quill$getLine4[0],\n            offset = _quill$getLine4[1];\n\n        var formats = (0, _extend2.default)({}, line.formats(), { list: 'checked' });\n        var delta = new _quillDelta2.default().retain(range.index).insert('\\n', formats).retain(line.length() - offset - 1).retain(1, { list: 'unchecked' });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'header enter': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['header'],\n      suffix: /^$/,\n      handler: function handler(range, context) {\n        var _quill$getLine5 = this.quill.getLine(range.index),\n            _quill$getLine6 = _slicedToArray(_quill$getLine5, 2),\n            line = _quill$getLine6[0],\n            offset = _quill$getLine6[1];\n\n        var delta = new _quillDelta2.default().retain(range.index).insert('\\n', context.format).retain(line.length() - offset - 1).retain(1, { header: null });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n        this.quill.scrollIntoView();\n      }\n    },\n    'list autofill': {\n      key: ' ',\n      collapsed: true,\n      format: { list: false },\n      prefix: /^\\s*?(\\d+\\.|-|\\*|\\[ ?\\]|\\[x\\])$/,\n      handler: function handler(range, context) {\n        var length = context.prefix.length;\n\n        var _quill$getLine7 = this.quill.getLine(range.index),\n            _quill$getLine8 = _slicedToArray(_quill$getLine7, 2),\n            line = _quill$getLine8[0],\n            offset = _quill$getLine8[1];\n\n        if (offset > length) return true;\n        var value = void 0;\n        switch (context.prefix.trim()) {\n          case '[]':case '[ ]':\n            value = 'unchecked';\n            break;\n          case '[x]':\n            value = 'checked';\n            break;\n          case '-':case '*':\n            value = 'bullet';\n            break;\n          default:\n            value = 'ordered';\n        }\n        this.quill.insertText(range.index, ' ', _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        var delta = new _quillDelta2.default().retain(range.index - offset).delete(length + 1).retain(line.length() - 2 - offset).retain(1, { list: value });\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n        this.quill.history.cutoff();\n        this.quill.setSelection(range.index - length, _quill2.default.sources.SILENT);\n      }\n    },\n    'code exit': {\n      key: Keyboard.keys.ENTER,\n      collapsed: true,\n      format: ['code-block'],\n      prefix: /\\n\\n$/,\n      suffix: /^\\s+$/,\n      handler: function handler(range) {\n        var _quill$getLine9 = this.quill.getLine(range.index),\n            _quill$getLine10 = _slicedToArray(_quill$getLine9, 2),\n            line = _quill$getLine10[0],\n            offset = _quill$getLine10[1];\n\n        var delta = new _quillDelta2.default().retain(range.index + line.length() - offset - 2).retain(1, { 'code-block': null }).delete(1);\n        this.quill.updateContents(delta, _quill2.default.sources.USER);\n      }\n    },\n    'embed left': makeEmbedArrowHandler(Keyboard.keys.LEFT, false),\n    'embed left shift': makeEmbedArrowHandler(Keyboard.keys.LEFT, true),\n    'embed right': makeEmbedArrowHandler(Keyboard.keys.RIGHT, false),\n    'embed right shift': makeEmbedArrowHandler(Keyboard.keys.RIGHT, true)\n  }\n};\n\nfunction makeEmbedArrowHandler(key, shiftKey) {\n  var _ref3;\n\n  var where = key === Keyboard.keys.LEFT ? 'prefix' : 'suffix';\n  return _ref3 = {\n    key: key,\n    shiftKey: shiftKey,\n    altKey: null\n  }, _defineProperty(_ref3, where, /^$/), _defineProperty(_ref3, 'handler', function handler(range) {\n    var index = range.index;\n    if (key === Keyboard.keys.RIGHT) {\n      index += range.length + 1;\n    }\n\n    var _quill$getLeaf3 = this.quill.getLeaf(index),\n        _quill$getLeaf4 = _slicedToArray(_quill$getLeaf3, 1),\n        leaf = _quill$getLeaf4[0];\n\n    if (!(leaf instanceof _parchment2.default.Embed)) return true;\n    if (key === Keyboard.keys.LEFT) {\n      if (shiftKey) {\n        this.quill.setSelection(range.index - 1, range.length + 1, _quill2.default.sources.USER);\n      } else {\n        this.quill.setSelection(range.index - 1, _quill2.default.sources.USER);\n      }\n    } else {\n      if (shiftKey) {\n        this.quill.setSelection(range.index, range.length + 1, _quill2.default.sources.USER);\n      } else {\n        this.quill.setSelection(range.index + range.length + 1, _quill2.default.sources.USER);\n      }\n    }\n    return false;\n  }), _ref3;\n}\n\nfunction handleBackspace(range, context) {\n  if (range.index === 0 || this.quill.getLength() <= 1) return;\n\n  var _quill$getLine11 = this.quill.getLine(range.index),\n      _quill$getLine12 = _slicedToArray(_quill$getLine11, 1),\n      line = _quill$getLine12[0];\n\n  var formats = {};\n  if (context.offset === 0) {\n    var _quill$getLine13 = this.quill.getLine(range.index - 1),\n        _quill$getLine14 = _slicedToArray(_quill$getLine13, 1),\n        prev = _quill$getLine14[0];\n\n    if (prev != null && prev.length() > 1) {\n      var curFormats = line.formats();\n      var prevFormats = this.quill.getFormat(range.index - 1, 1);\n      formats = _op2.default.attributes.diff(curFormats, prevFormats) || {};\n    }\n  }\n  // Check for astral symbols\n  var length = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]$/.test(context.prefix) ? 2 : 1;\n  this.quill.deleteText(range.index - length, length, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index - length, length, formats, _quill2.default.sources.USER);\n  }\n  this.quill.focus();\n}\n\nfunction handleDelete(range, context) {\n  // Check for astral symbols\n  var length = /^[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/.test(context.suffix) ? 2 : 1;\n  if (range.index >= this.quill.getLength() - length) return;\n  var formats = {},\n      nextLength = 0;\n\n  var _quill$getLine15 = this.quill.getLine(range.index),\n      _quill$getLine16 = _slicedToArray(_quill$getLine15, 1),\n      line = _quill$getLine16[0];\n\n  if (context.offset >= line.length() - 1) {\n    var _quill$getLine17 = this.quill.getLine(range.index + 1),\n        _quill$getLine18 = _slicedToArray(_quill$getLine17, 1),\n        next = _quill$getLine18[0];\n\n    if (next) {\n      var curFormats = line.formats();\n      var nextFormats = this.quill.getFormat(range.index, 1);\n      formats = _op2.default.attributes.diff(curFormats, nextFormats) || {};\n      nextLength = next.length();\n    }\n  }\n  this.quill.deleteText(range.index, length, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index + nextLength - 1, length, formats, _quill2.default.sources.USER);\n  }\n}\n\nfunction handleDeleteRange(range) {\n  var lines = this.quill.getLines(range);\n  var formats = {};\n  if (lines.length > 1) {\n    var firstFormats = lines[0].formats();\n    var lastFormats = lines[lines.length - 1].formats();\n    formats = _op2.default.attributes.diff(lastFormats, firstFormats) || {};\n  }\n  this.quill.deleteText(range, _quill2.default.sources.USER);\n  if (Object.keys(formats).length > 0) {\n    this.quill.formatLine(range.index, 1, formats, _quill2.default.sources.USER);\n  }\n  this.quill.setSelection(range.index, _quill2.default.sources.SILENT);\n  this.quill.focus();\n}\n\nfunction handleEnter(range, context) {\n  var _this3 = this;\n\n  if (range.length > 0) {\n    this.quill.scroll.deleteAt(range.index, range.length); // So we do not trigger text-change\n  }\n  var lineFormats = Object.keys(context.format).reduce(function (lineFormats, format) {\n    if (_parchment2.default.query(format, _parchment2.default.Scope.BLOCK) && !Array.isArray(context.format[format])) {\n      lineFormats[format] = context.format[format];\n    }\n    return lineFormats;\n  }, {});\n  this.quill.insertText(range.index, '\\n', lineFormats, _quill2.default.sources.USER);\n  // Earlier scroll.deleteAt might have messed up our selection,\n  // so insertText's built in selection preservation is not reliable\n  this.quill.setSelection(range.index + 1, _quill2.default.sources.SILENT);\n  this.quill.focus();\n  Object.keys(context.format).forEach(function (name) {\n    if (lineFormats[name] != null) return;\n    if (Array.isArray(context.format[name])) return;\n    if (name === 'link') return;\n    _this3.quill.format(name, context.format[name], _quill2.default.sources.USER);\n  });\n}\n\nfunction makeCodeBlockHandler(indent) {\n  return {\n    key: Keyboard.keys.TAB,\n    shiftKey: !indent,\n    format: { 'code-block': true },\n    handler: function handler(range) {\n      var CodeBlock = _parchment2.default.query('code-block');\n      var index = range.index,\n          length = range.length;\n\n      var _quill$scroll$descend = this.quill.scroll.descendant(CodeBlock, index),\n          _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n          block = _quill$scroll$descend2[0],\n          offset = _quill$scroll$descend2[1];\n\n      if (block == null) return;\n      var scrollIndex = this.quill.getIndex(block);\n      var start = block.newlineIndex(offset, true) + 1;\n      var end = block.newlineIndex(scrollIndex + offset + length);\n      var lines = block.domNode.textContent.slice(start, end).split('\\n');\n      offset = 0;\n      lines.forEach(function (line, i) {\n        if (indent) {\n          block.insertAt(start + offset, CodeBlock.TAB);\n          offset += CodeBlock.TAB.length;\n          if (i === 0) {\n            index += CodeBlock.TAB.length;\n          } else {\n            length += CodeBlock.TAB.length;\n          }\n        } else if (line.startsWith(CodeBlock.TAB)) {\n          block.deleteAt(start + offset, CodeBlock.TAB.length);\n          offset -= CodeBlock.TAB.length;\n          if (i === 0) {\n            index -= CodeBlock.TAB.length;\n          } else {\n            length -= CodeBlock.TAB.length;\n          }\n        }\n        offset += line.length + 1;\n      });\n      this.quill.update(_quill2.default.sources.USER);\n      this.quill.setSelection(index, length, _quill2.default.sources.SILENT);\n    }\n  };\n}\n\nfunction makeFormatHandler(format) {\n  return {\n    key: format[0].toUpperCase(),\n    shortKey: true,\n    handler: function handler(range, context) {\n      this.quill.format(format, !context.format[format], _quill2.default.sources.USER);\n    }\n  };\n}\n\nfunction normalize(binding) {\n  if (typeof binding === 'string' || typeof binding === 'number') {\n    return normalize({ key: binding });\n  }\n  if ((typeof binding === 'undefined' ? 'undefined' : _typeof(binding)) === 'object') {\n    binding = (0, _clone2.default)(binding, false);\n  }\n  if (typeof binding.key === 'string') {\n    if (Keyboard.keys[binding.key.toUpperCase()] != null) {\n      binding.key = Keyboard.keys[binding.key.toUpperCase()];\n    } else if (binding.key.length === 1) {\n      binding.key = binding.key.toUpperCase().charCodeAt(0);\n    } else {\n      return null;\n    }\n  }\n  if (binding.shortKey) {\n    binding[SHORTKEY] = binding.shortKey;\n    delete binding.shortKey;\n  }\n  return binding;\n}\n\nexports.default = Keyboard;\nexports.SHORTKEY = SHORTKEY;\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Cursor = function (_Parchment$Embed) {\n  _inherits(Cursor, _Parchment$Embed);\n\n  _createClass(Cursor, null, [{\n    key: 'value',\n    value: function value() {\n      return undefined;\n    }\n  }]);\n\n  function Cursor(domNode, selection) {\n    _classCallCheck(this, Cursor);\n\n    var _this = _possibleConstructorReturn(this, (Cursor.__proto__ || Object.getPrototypeOf(Cursor)).call(this, domNode));\n\n    _this.selection = selection;\n    _this.textNode = document.createTextNode(Cursor.CONTENTS);\n    _this.domNode.appendChild(_this.textNode);\n    _this._length = 0;\n    return _this;\n  }\n\n  _createClass(Cursor, [{\n    key: 'detach',\n    value: function detach() {\n      // super.detach() will also clear domNode.__blot\n      if (this.parent != null) this.parent.removeChild(this);\n    }\n  }, {\n    key: 'format',\n    value: function format(name, value) {\n      if (this._length !== 0) {\n        return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'format', this).call(this, name, value);\n      }\n      var target = this,\n          index = 0;\n      while (target != null && target.statics.scope !== _parchment2.default.Scope.BLOCK_BLOT) {\n        index += target.offset(target.parent);\n        target = target.parent;\n      }\n      if (target != null) {\n        this._length = Cursor.CONTENTS.length;\n        target.optimize();\n        target.formatAt(index, Cursor.CONTENTS.length, name, value);\n        this._length = 0;\n      }\n    }\n  }, {\n    key: 'index',\n    value: function index(node, offset) {\n      if (node === this.textNode) return 0;\n      return _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'index', this).call(this, node, offset);\n    }\n  }, {\n    key: 'length',\n    value: function length() {\n      return this._length;\n    }\n  }, {\n    key: 'position',\n    value: function position() {\n      return [this.textNode, this.textNode.data.length];\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      _get(Cursor.prototype.__proto__ || Object.getPrototypeOf(Cursor.prototype), 'remove', this).call(this);\n      this.parent = null;\n    }\n  }, {\n    key: 'restore',\n    value: function restore() {\n      if (this.selection.composing || this.parent == null) return;\n      var textNode = this.textNode;\n      var range = this.selection.getNativeRange();\n      var restoreText = void 0,\n          start = void 0,\n          end = void 0;\n      if (range != null && range.start.node === textNode && range.end.node === textNode) {\n        var _ref = [textNode, range.start.offset, range.end.offset];\n        restoreText = _ref[0];\n        start = _ref[1];\n        end = _ref[2];\n      }\n      // Link format will insert text outside of anchor tag\n      while (this.domNode.lastChild != null && this.domNode.lastChild !== this.textNode) {\n        this.domNode.parentNode.insertBefore(this.domNode.lastChild, this.domNode);\n      }\n      if (this.textNode.data !== Cursor.CONTENTS) {\n        var text = this.textNode.data.split(Cursor.CONTENTS).join('');\n        if (this.next instanceof _text2.default) {\n          restoreText = this.next.domNode;\n          this.next.insertAt(0, text);\n          this.textNode.data = Cursor.CONTENTS;\n        } else {\n          this.textNode.data = text;\n          this.parent.insertBefore(_parchment2.default.create(this.textNode), this);\n          this.textNode = document.createTextNode(Cursor.CONTENTS);\n          this.domNode.appendChild(this.textNode);\n        }\n      }\n      this.remove();\n      if (start != null) {\n        var _map = [start, end].map(function (offset) {\n          return Math.max(0, Math.min(restoreText.data.length, offset - 1));\n        });\n\n        var _map2 = _slicedToArray(_map, 2);\n\n        start = _map2[0];\n        end = _map2[1];\n\n        return {\n          startNode: restoreText,\n          startOffset: start,\n          endNode: restoreText,\n          endOffset: end\n        };\n      }\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations, context) {\n      var _this2 = this;\n\n      if (mutations.some(function (mutation) {\n        return mutation.type === 'characterData' && mutation.target === _this2.textNode;\n      })) {\n        var range = this.restore();\n        if (range) context.range = range;\n      }\n    }\n  }, {\n    key: 'value',\n    value: function value() {\n      return '';\n    }\n  }]);\n\n  return Cursor;\n}(_parchment2.default.Embed);\n\nCursor.blotName = 'cursor';\nCursor.className = 'ql-cursor';\nCursor.tagName = 'span';\nCursor.CONTENTS = '\\uFEFF'; // Zero width no break space\n\n\nexports.default = Cursor;\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Container = function (_Parchment$Container) {\n  _inherits(Container, _Parchment$Container);\n\n  function Container() {\n    _classCallCheck(this, Container);\n\n    return _possibleConstructorReturn(this, (Container.__proto__ || Object.getPrototypeOf(Container)).apply(this, arguments));\n  }\n\n  return Container;\n}(_parchment2.default.Container);\n\nContainer.allowedChildren = [_block2.default, _block.BlockEmbed, Container];\n\nexports.default = Container;\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.ColorStyle = exports.ColorClass = exports.ColorAttributor = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorAttributor = function (_Parchment$Attributor) {\n  _inherits(ColorAttributor, _Parchment$Attributor);\n\n  function ColorAttributor() {\n    _classCallCheck(this, ColorAttributor);\n\n    return _possibleConstructorReturn(this, (ColorAttributor.__proto__ || Object.getPrototypeOf(ColorAttributor)).apply(this, arguments));\n  }\n\n  _createClass(ColorAttributor, [{\n    key: 'value',\n    value: function value(domNode) {\n      var value = _get(ColorAttributor.prototype.__proto__ || Object.getPrototypeOf(ColorAttributor.prototype), 'value', this).call(this, domNode);\n      if (!value.startsWith('rgb(')) return value;\n      value = value.replace(/^[^\\d]+/, '').replace(/[^\\d]+$/, '');\n      return '#' + value.split(',').map(function (component) {\n        return ('00' + parseInt(component).toString(16)).slice(-2);\n      }).join('');\n    }\n  }]);\n\n  return ColorAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar ColorClass = new _parchment2.default.Attributor.Class('color', 'ql-color', {\n  scope: _parchment2.default.Scope.INLINE\n});\nvar ColorStyle = new ColorAttributor('color', 'color', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nexports.ColorAttributor = ColorAttributor;\nexports.ColorClass = ColorClass;\nexports.ColorStyle = ColorStyle;\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.sanitize = exports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Link = function (_Inline) {\n  _inherits(Link, _Inline);\n\n  function Link() {\n    _classCallCheck(this, Link);\n\n    return _possibleConstructorReturn(this, (Link.__proto__ || Object.getPrototypeOf(Link)).apply(this, arguments));\n  }\n\n  _createClass(Link, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (name !== this.statics.blotName || !value) return _get(Link.prototype.__proto__ || Object.getPrototypeOf(Link.prototype), 'format', this).call(this, name, value);\n      value = this.constructor.sanitize(value);\n      this.domNode.setAttribute('href', value);\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Link.__proto__ || Object.getPrototypeOf(Link), 'create', this).call(this, value);\n      value = this.sanitize(value);\n      node.setAttribute('href', value);\n      node.setAttribute('rel', 'noopener noreferrer');\n      node.setAttribute('target', '_blank');\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return domNode.getAttribute('href');\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return _sanitize(url, this.PROTOCOL_WHITELIST) ? url : this.SANITIZED_URL;\n    }\n  }]);\n\n  return Link;\n}(_inline2.default);\n\nLink.blotName = 'link';\nLink.tagName = 'A';\nLink.SANITIZED_URL = 'about:blank';\nLink.PROTOCOL_WHITELIST = ['http', 'https', 'mailto', 'tel'];\n\nfunction _sanitize(url, protocols) {\n  var anchor = document.createElement('a');\n  anchor.href = url;\n  var protocol = anchor.href.slice(0, anchor.href.indexOf(':'));\n  return protocols.indexOf(protocol) > -1;\n}\n\nexports.default = Link;\nexports.sanitize = _sanitize;\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _dropdown = __webpack_require__(107);\n\nvar _dropdown2 = _interopRequireDefault(_dropdown);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar optionsCounter = 0;\n\nfunction toggleAriaAttribute(element, attribute) {\n  element.setAttribute(attribute, !(element.getAttribute(attribute) === 'true'));\n}\n\nvar Picker = function () {\n  function Picker(select) {\n    var _this = this;\n\n    _classCallCheck(this, Picker);\n\n    this.select = select;\n    this.container = document.createElement('span');\n    this.buildPicker();\n    this.select.style.display = 'none';\n    this.select.parentNode.insertBefore(this.container, this.select);\n\n    this.label.addEventListener('mousedown', function () {\n      _this.togglePicker();\n    });\n    this.label.addEventListener('keydown', function (event) {\n      switch (event.keyCode) {\n        // Allows the \"Enter\" key to open the picker\n        case _keyboard2.default.keys.ENTER:\n          _this.togglePicker();\n          break;\n\n        // Allows the \"Escape\" key to close the picker\n        case _keyboard2.default.keys.ESCAPE:\n          _this.escape();\n          event.preventDefault();\n          break;\n        default:\n      }\n    });\n    this.select.addEventListener('change', this.update.bind(this));\n  }\n\n  _createClass(Picker, [{\n    key: 'togglePicker',\n    value: function togglePicker() {\n      this.container.classList.toggle('ql-expanded');\n      // Toggle aria-expanded and aria-hidden to make the picker accessible\n      toggleAriaAttribute(this.label, 'aria-expanded');\n      toggleAriaAttribute(this.options, 'aria-hidden');\n    }\n  }, {\n    key: 'buildItem',\n    value: function buildItem(option) {\n      var _this2 = this;\n\n      var item = document.createElement('span');\n      item.tabIndex = '0';\n      item.setAttribute('role', 'button');\n\n      item.classList.add('ql-picker-item');\n      if (option.hasAttribute('value')) {\n        item.setAttribute('data-value', option.getAttribute('value'));\n      }\n      if (option.textContent) {\n        item.setAttribute('data-label', option.textContent);\n      }\n      item.addEventListener('click', function () {\n        _this2.selectItem(item, true);\n      });\n      item.addEventListener('keydown', function (event) {\n        switch (event.keyCode) {\n          // Allows the \"Enter\" key to select an item\n          case _keyboard2.default.keys.ENTER:\n            _this2.selectItem(item, true);\n            event.preventDefault();\n            break;\n\n          // Allows the \"Escape\" key to close the picker\n          case _keyboard2.default.keys.ESCAPE:\n            _this2.escape();\n            event.preventDefault();\n            break;\n          default:\n        }\n      });\n\n      return item;\n    }\n  }, {\n    key: 'buildLabel',\n    value: function buildLabel() {\n      var label = document.createElement('span');\n      label.classList.add('ql-picker-label');\n      label.innerHTML = _dropdown2.default;\n      label.tabIndex = '0';\n      label.setAttribute('role', 'button');\n      label.setAttribute('aria-expanded', 'false');\n      this.container.appendChild(label);\n      return label;\n    }\n  }, {\n    key: 'buildOptions',\n    value: function buildOptions() {\n      var _this3 = this;\n\n      var options = document.createElement('span');\n      options.classList.add('ql-picker-options');\n\n      // Don't want screen readers to read this until options are visible\n      options.setAttribute('aria-hidden', 'true');\n      options.tabIndex = '-1';\n\n      // Need a unique id for aria-controls\n      options.id = 'ql-picker-options-' + optionsCounter;\n      optionsCounter += 1;\n      this.label.setAttribute('aria-controls', options.id);\n\n      this.options = options;\n\n      [].slice.call(this.select.options).forEach(function (option) {\n        var item = _this3.buildItem(option);\n        options.appendChild(item);\n        if (option.selected === true) {\n          _this3.selectItem(item);\n        }\n      });\n      this.container.appendChild(options);\n    }\n  }, {\n    key: 'buildPicker',\n    value: function buildPicker() {\n      var _this4 = this;\n\n      [].slice.call(this.select.attributes).forEach(function (item) {\n        _this4.container.setAttribute(item.name, item.value);\n      });\n      this.container.classList.add('ql-picker');\n      this.label = this.buildLabel();\n      this.buildOptions();\n    }\n  }, {\n    key: 'escape',\n    value: function escape() {\n      var _this5 = this;\n\n      // Close menu and return focus to trigger label\n      this.close();\n      // Need setTimeout for accessibility to ensure that the browser executes\n      // focus on the next process thread and after any DOM content changes\n      setTimeout(function () {\n        return _this5.label.focus();\n      }, 1);\n    }\n  }, {\n    key: 'close',\n    value: function close() {\n      this.container.classList.remove('ql-expanded');\n      this.label.setAttribute('aria-expanded', 'false');\n      this.options.setAttribute('aria-hidden', 'true');\n    }\n  }, {\n    key: 'selectItem',\n    value: function selectItem(item) {\n      var trigger = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n      var selected = this.container.querySelector('.ql-selected');\n      if (item === selected) return;\n      if (selected != null) {\n        selected.classList.remove('ql-selected');\n      }\n      if (item == null) return;\n      item.classList.add('ql-selected');\n      this.select.selectedIndex = [].indexOf.call(item.parentNode.children, item);\n      if (item.hasAttribute('data-value')) {\n        this.label.setAttribute('data-value', item.getAttribute('data-value'));\n      } else {\n        this.label.removeAttribute('data-value');\n      }\n      if (item.hasAttribute('data-label')) {\n        this.label.setAttribute('data-label', item.getAttribute('data-label'));\n      } else {\n        this.label.removeAttribute('data-label');\n      }\n      if (trigger) {\n        if (typeof Event === 'function') {\n          this.select.dispatchEvent(new Event('change'));\n        } else if ((typeof Event === 'undefined' ? 'undefined' : _typeof(Event)) === 'object') {\n          // IE11\n          var event = document.createEvent('Event');\n          event.initEvent('change', true, true);\n          this.select.dispatchEvent(event);\n        }\n        this.close();\n      }\n    }\n  }, {\n    key: 'update',\n    value: function update() {\n      var option = void 0;\n      if (this.select.selectedIndex > -1) {\n        var item = this.container.querySelector('.ql-picker-options').children[this.select.selectedIndex];\n        option = this.select.options[this.select.selectedIndex];\n        this.selectItem(item);\n      } else {\n        this.selectItem(null);\n      }\n      var isActive = option != null && option !== this.select.querySelector('option[selected]');\n      this.label.classList.toggle('ql-active', isActive);\n    }\n  }]);\n\n  return Picker;\n}();\n\nexports.default = Picker;\n\n/***/ }),\n/* 29 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _break = __webpack_require__(16);\n\nvar _break2 = _interopRequireDefault(_break);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nvar _cursor = __webpack_require__(24);\n\nvar _cursor2 = _interopRequireDefault(_cursor);\n\nvar _embed = __webpack_require__(35);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nvar _scroll = __webpack_require__(22);\n\nvar _scroll2 = _interopRequireDefault(_scroll);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nvar _clipboard = __webpack_require__(55);\n\nvar _clipboard2 = _interopRequireDefault(_clipboard);\n\nvar _history = __webpack_require__(42);\n\nvar _history2 = _interopRequireDefault(_history);\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_quill2.default.register({\n  'blots/block': _block2.default,\n  'blots/block/embed': _block.BlockEmbed,\n  'blots/break': _break2.default,\n  'blots/container': _container2.default,\n  'blots/cursor': _cursor2.default,\n  'blots/embed': _embed2.default,\n  'blots/inline': _inline2.default,\n  'blots/scroll': _scroll2.default,\n  'blots/text': _text2.default,\n\n  'modules/clipboard': _clipboard2.default,\n  'modules/history': _history2.default,\n  'modules/keyboard': _keyboard2.default\n});\n\n_parchment2.default.register(_block2.default, _break2.default, _cursor2.default, _inline2.default, _scroll2.default, _text2.default);\n\nexports.default = _quill2.default;\n\n/***/ }),\n/* 30 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar Registry = __webpack_require__(1);\nvar ShadowBlot = /** @class */ (function () {\n    function ShadowBlot(domNode) {\n        this.domNode = domNode;\n        // @ts-ignore\n        this.domNode[Registry.DATA_KEY] = { blot: this };\n    }\n    Object.defineProperty(ShadowBlot.prototype, \"statics\", {\n        // Hack for accessing inherited static methods\n        get: function () {\n            return this.constructor;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    ShadowBlot.create = function (value) {\n        if (this.tagName == null) {\n            throw new Registry.ParchmentError('Blot definition missing tagName');\n        }\n        var node;\n        if (Array.isArray(this.tagName)) {\n            if (typeof value === 'string') {\n                value = value.toUpperCase();\n                if (parseInt(value).toString() === value) {\n                    value = parseInt(value);\n                }\n            }\n            if (typeof value === 'number') {\n                node = document.createElement(this.tagName[value - 1]);\n            }\n            else if (this.tagName.indexOf(value) > -1) {\n                node = document.createElement(value);\n            }\n            else {\n                node = document.createElement(this.tagName[0]);\n            }\n        }\n        else {\n            node = document.createElement(this.tagName);\n        }\n        if (this.className) {\n            node.classList.add(this.className);\n        }\n        return node;\n    };\n    ShadowBlot.prototype.attach = function () {\n        if (this.parent != null) {\n            this.scroll = this.parent.scroll;\n        }\n    };\n    ShadowBlot.prototype.clone = function () {\n        var domNode = this.domNode.cloneNode(false);\n        return Registry.create(domNode);\n    };\n    ShadowBlot.prototype.detach = function () {\n        if (this.parent != null)\n            this.parent.removeChild(this);\n        // @ts-ignore\n        delete this.domNode[Registry.DATA_KEY];\n    };\n    ShadowBlot.prototype.deleteAt = function (index, length) {\n        var blot = this.isolate(index, length);\n        blot.remove();\n    };\n    ShadowBlot.prototype.formatAt = function (index, length, name, value) {\n        var blot = this.isolate(index, length);\n        if (Registry.query(name, Registry.Scope.BLOT) != null && value) {\n            blot.wrap(name, value);\n        }\n        else if (Registry.query(name, Registry.Scope.ATTRIBUTE) != null) {\n            var parent = Registry.create(this.statics.scope);\n            blot.wrap(parent);\n            parent.format(name, value);\n        }\n    };\n    ShadowBlot.prototype.insertAt = function (index, value, def) {\n        var blot = def == null ? Registry.create('text', value) : Registry.create(value, def);\n        var ref = this.split(index);\n        this.parent.insertBefore(blot, ref);\n    };\n    ShadowBlot.prototype.insertInto = function (parentBlot, refBlot) {\n        if (refBlot === void 0) { refBlot = null; }\n        if (this.parent != null) {\n            this.parent.children.remove(this);\n        }\n        var refDomNode = null;\n        parentBlot.children.insertBefore(this, refBlot);\n        if (refBlot != null) {\n            refDomNode = refBlot.domNode;\n        }\n        if (this.domNode.parentNode != parentBlot.domNode ||\n            this.domNode.nextSibling != refDomNode) {\n            parentBlot.domNode.insertBefore(this.domNode, refDomNode);\n        }\n        this.parent = parentBlot;\n        this.attach();\n    };\n    ShadowBlot.prototype.isolate = function (index, length) {\n        var target = this.split(index);\n        target.split(length);\n        return target;\n    };\n    ShadowBlot.prototype.length = function () {\n        return 1;\n    };\n    ShadowBlot.prototype.offset = function (root) {\n        if (root === void 0) { root = this.parent; }\n        if (this.parent == null || this == root)\n            return 0;\n        return this.parent.children.offset(this) + this.parent.offset(root);\n    };\n    ShadowBlot.prototype.optimize = function (context) {\n        // TODO clean up once we use WeakMap\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY] != null) {\n            // @ts-ignore\n            delete this.domNode[Registry.DATA_KEY].mutations;\n        }\n    };\n    ShadowBlot.prototype.remove = function () {\n        if (this.domNode.parentNode != null) {\n            this.domNode.parentNode.removeChild(this.domNode);\n        }\n        this.detach();\n    };\n    ShadowBlot.prototype.replace = function (target) {\n        if (target.parent == null)\n            return;\n        target.parent.insertBefore(this, target.next);\n        target.remove();\n    };\n    ShadowBlot.prototype.replaceWith = function (name, value) {\n        var replacement = typeof name === 'string' ? Registry.create(name, value) : name;\n        replacement.replace(this);\n        return replacement;\n    };\n    ShadowBlot.prototype.split = function (index, force) {\n        return index === 0 ? this : this.next;\n    };\n    ShadowBlot.prototype.update = function (mutations, context) {\n        // Nothing to do by default\n    };\n    ShadowBlot.prototype.wrap = function (name, value) {\n        var wrapper = typeof name === 'string' ? Registry.create(name, value) : name;\n        if (this.parent != null) {\n            this.parent.insertBefore(wrapper, this.next);\n        }\n        wrapper.appendChild(this);\n        return wrapper;\n    };\n    ShadowBlot.blotName = 'abstract';\n    return ShadowBlot;\n}());\nexports.default = ShadowBlot;\n\n\n/***/ }),\n/* 31 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nvar class_1 = __webpack_require__(32);\nvar style_1 = __webpack_require__(33);\nvar Registry = __webpack_require__(1);\nvar AttributorStore = /** @class */ (function () {\n    function AttributorStore(domNode) {\n        this.attributes = {};\n        this.domNode = domNode;\n        this.build();\n    }\n    AttributorStore.prototype.attribute = function (attribute, value) {\n        // verb\n        if (value) {\n            if (attribute.add(this.domNode, value)) {\n                if (attribute.value(this.domNode) != null) {\n                    this.attributes[attribute.attrName] = attribute;\n                }\n                else {\n                    delete this.attributes[attribute.attrName];\n                }\n            }\n        }\n        else {\n            attribute.remove(this.domNode);\n            delete this.attributes[attribute.attrName];\n        }\n    };\n    AttributorStore.prototype.build = function () {\n        var _this = this;\n        this.attributes = {};\n        var attributes = attributor_1.default.keys(this.domNode);\n        var classes = class_1.default.keys(this.domNode);\n        var styles = style_1.default.keys(this.domNode);\n        attributes\n            .concat(classes)\n            .concat(styles)\n            .forEach(function (name) {\n            var attr = Registry.query(name, Registry.Scope.ATTRIBUTE);\n            if (attr instanceof attributor_1.default) {\n                _this.attributes[attr.attrName] = attr;\n            }\n        });\n    };\n    AttributorStore.prototype.copy = function (target) {\n        var _this = this;\n        Object.keys(this.attributes).forEach(function (key) {\n            var value = _this.attributes[key].value(_this.domNode);\n            target.format(key, value);\n        });\n    };\n    AttributorStore.prototype.move = function (target) {\n        var _this = this;\n        this.copy(target);\n        Object.keys(this.attributes).forEach(function (key) {\n            _this.attributes[key].remove(_this.domNode);\n        });\n        this.attributes = {};\n    };\n    AttributorStore.prototype.values = function () {\n        var _this = this;\n        return Object.keys(this.attributes).reduce(function (attributes, name) {\n            attributes[name] = _this.attributes[name].value(_this.domNode);\n            return attributes;\n        }, {});\n    };\n    return AttributorStore;\n}());\nexports.default = AttributorStore;\n\n\n/***/ }),\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nfunction match(node, prefix) {\n    var className = node.getAttribute('class') || '';\n    return className.split(/\\s+/).filter(function (name) {\n        return name.indexOf(prefix + \"-\") === 0;\n    });\n}\nvar ClassAttributor = /** @class */ (function (_super) {\n    __extends(ClassAttributor, _super);\n    function ClassAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ClassAttributor.keys = function (node) {\n        return (node.getAttribute('class') || '').split(/\\s+/).map(function (name) {\n            return name\n                .split('-')\n                .slice(0, -1)\n                .join('-');\n        });\n    };\n    ClassAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        this.remove(node);\n        node.classList.add(this.keyName + \"-\" + value);\n        return true;\n    };\n    ClassAttributor.prototype.remove = function (node) {\n        var matches = match(node, this.keyName);\n        matches.forEach(function (name) {\n            node.classList.remove(name);\n        });\n        if (node.classList.length === 0) {\n            node.removeAttribute('class');\n        }\n    };\n    ClassAttributor.prototype.value = function (node) {\n        var result = match(node, this.keyName)[0] || '';\n        var value = result.slice(this.keyName.length + 1); // +1 for hyphen\n        return this.canAdd(node, value) ? value : '';\n    };\n    return ClassAttributor;\n}(attributor_1.default));\nexports.default = ClassAttributor;\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar attributor_1 = __webpack_require__(12);\nfunction camelize(name) {\n    var parts = name.split('-');\n    var rest = parts\n        .slice(1)\n        .map(function (part) {\n        return part[0].toUpperCase() + part.slice(1);\n    })\n        .join('');\n    return parts[0] + rest;\n}\nvar StyleAttributor = /** @class */ (function (_super) {\n    __extends(StyleAttributor, _super);\n    function StyleAttributor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    StyleAttributor.keys = function (node) {\n        return (node.getAttribute('style') || '').split(';').map(function (value) {\n            var arr = value.split(':');\n            return arr[0].trim();\n        });\n    };\n    StyleAttributor.prototype.add = function (node, value) {\n        if (!this.canAdd(node, value))\n            return false;\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = value;\n        return true;\n    };\n    StyleAttributor.prototype.remove = function (node) {\n        // @ts-ignore\n        node.style[camelize(this.keyName)] = '';\n        if (!node.getAttribute('style')) {\n            node.removeAttribute('style');\n        }\n    };\n    StyleAttributor.prototype.value = function (node) {\n        // @ts-ignore\n        var value = node.style[camelize(this.keyName)];\n        return this.canAdd(node, value) ? value : '';\n    };\n    return StyleAttributor;\n}(attributor_1.default));\nexports.default = StyleAttributor;\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Theme = function () {\n  function Theme(quill, options) {\n    _classCallCheck(this, Theme);\n\n    this.quill = quill;\n    this.options = options;\n    this.modules = {};\n  }\n\n  _createClass(Theme, [{\n    key: 'init',\n    value: function init() {\n      var _this = this;\n\n      Object.keys(this.options.modules).forEach(function (name) {\n        if (_this.modules[name] == null) {\n          _this.addModule(name);\n        }\n      });\n    }\n  }, {\n    key: 'addModule',\n    value: function addModule(name) {\n      var moduleClass = this.quill.constructor.import('modules/' + name);\n      this.modules[name] = new moduleClass(this.quill, this.options.modules[name] || {});\n      return this.modules[name];\n    }\n  }]);\n\n  return Theme;\n}();\n\nTheme.DEFAULTS = {\n  modules: {}\n};\nTheme.themes = {\n  'default': Theme\n};\n\nexports.default = Theme;\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _text = __webpack_require__(7);\n\nvar _text2 = _interopRequireDefault(_text);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar GUARD_TEXT = '\\uFEFF';\n\nvar Embed = function (_Parchment$Embed) {\n  _inherits(Embed, _Parchment$Embed);\n\n  function Embed(node) {\n    _classCallCheck(this, Embed);\n\n    var _this = _possibleConstructorReturn(this, (Embed.__proto__ || Object.getPrototypeOf(Embed)).call(this, node));\n\n    _this.contentNode = document.createElement('span');\n    _this.contentNode.setAttribute('contenteditable', false);\n    [].slice.call(_this.domNode.childNodes).forEach(function (childNode) {\n      _this.contentNode.appendChild(childNode);\n    });\n    _this.leftGuard = document.createTextNode(GUARD_TEXT);\n    _this.rightGuard = document.createTextNode(GUARD_TEXT);\n    _this.domNode.appendChild(_this.leftGuard);\n    _this.domNode.appendChild(_this.contentNode);\n    _this.domNode.appendChild(_this.rightGuard);\n    return _this;\n  }\n\n  _createClass(Embed, [{\n    key: 'index',\n    value: function index(node, offset) {\n      if (node === this.leftGuard) return 0;\n      if (node === this.rightGuard) return 1;\n      return _get(Embed.prototype.__proto__ || Object.getPrototypeOf(Embed.prototype), 'index', this).call(this, node, offset);\n    }\n  }, {\n    key: 'restore',\n    value: function restore(node) {\n      var range = void 0,\n          textNode = void 0;\n      var text = node.data.split(GUARD_TEXT).join('');\n      if (node === this.leftGuard) {\n        if (this.prev instanceof _text2.default) {\n          var prevLength = this.prev.length();\n          this.prev.insertAt(prevLength, text);\n          range = {\n            startNode: this.prev.domNode,\n            startOffset: prevLength + text.length\n          };\n        } else {\n          textNode = document.createTextNode(text);\n          this.parent.insertBefore(_parchment2.default.create(textNode), this);\n          range = {\n            startNode: textNode,\n            startOffset: text.length\n          };\n        }\n      } else if (node === this.rightGuard) {\n        if (this.next instanceof _text2.default) {\n          this.next.insertAt(0, text);\n          range = {\n            startNode: this.next.domNode,\n            startOffset: text.length\n          };\n        } else {\n          textNode = document.createTextNode(text);\n          this.parent.insertBefore(_parchment2.default.create(textNode), this.next);\n          range = {\n            startNode: textNode,\n            startOffset: text.length\n          };\n        }\n      }\n      node.data = GUARD_TEXT;\n      return range;\n    }\n  }, {\n    key: 'update',\n    value: function update(mutations, context) {\n      var _this2 = this;\n\n      mutations.forEach(function (mutation) {\n        if (mutation.type === 'characterData' && (mutation.target === _this2.leftGuard || mutation.target === _this2.rightGuard)) {\n          var range = _this2.restore(mutation.target);\n          if (range) context.range = range;\n        }\n      });\n    }\n  }]);\n\n  return Embed;\n}(_parchment2.default.Embed);\n\nexports.default = Embed;\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.AlignStyle = exports.AlignClass = exports.AlignAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: ['right', 'center', 'justify']\n};\n\nvar AlignAttribute = new _parchment2.default.Attributor.Attribute('align', 'align', config);\nvar AlignClass = new _parchment2.default.Attributor.Class('align', 'ql-align', config);\nvar AlignStyle = new _parchment2.default.Attributor.Style('align', 'text-align', config);\n\nexports.AlignAttribute = AlignAttribute;\nexports.AlignClass = AlignClass;\nexports.AlignStyle = AlignStyle;\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.BackgroundStyle = exports.BackgroundClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _color = __webpack_require__(26);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar BackgroundClass = new _parchment2.default.Attributor.Class('background', 'ql-bg', {\n  scope: _parchment2.default.Scope.INLINE\n});\nvar BackgroundStyle = new _color.ColorAttributor('background', 'background-color', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nexports.BackgroundClass = BackgroundClass;\nexports.BackgroundStyle = BackgroundStyle;\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.DirectionStyle = exports.DirectionClass = exports.DirectionAttribute = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar config = {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: ['rtl']\n};\n\nvar DirectionAttribute = new _parchment2.default.Attributor.Attribute('direction', 'dir', config);\nvar DirectionClass = new _parchment2.default.Attributor.Class('direction', 'ql-direction', config);\nvar DirectionStyle = new _parchment2.default.Attributor.Style('direction', 'direction', config);\n\nexports.DirectionAttribute = DirectionAttribute;\nexports.DirectionClass = DirectionClass;\nexports.DirectionStyle = DirectionStyle;\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.FontClass = exports.FontStyle = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar config = {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['serif', 'monospace']\n};\n\nvar FontClass = new _parchment2.default.Attributor.Class('font', 'ql-font', config);\n\nvar FontStyleAttributor = function (_Parchment$Attributor) {\n  _inherits(FontStyleAttributor, _Parchment$Attributor);\n\n  function FontStyleAttributor() {\n    _classCallCheck(this, FontStyleAttributor);\n\n    return _possibleConstructorReturn(this, (FontStyleAttributor.__proto__ || Object.getPrototypeOf(FontStyleAttributor)).apply(this, arguments));\n  }\n\n  _createClass(FontStyleAttributor, [{\n    key: 'value',\n    value: function value(node) {\n      return _get(FontStyleAttributor.prototype.__proto__ || Object.getPrototypeOf(FontStyleAttributor.prototype), 'value', this).call(this, node).replace(/[\"']/g, '');\n    }\n  }]);\n\n  return FontStyleAttributor;\n}(_parchment2.default.Attributor.Style);\n\nvar FontStyle = new FontStyleAttributor('font', 'font-family', config);\n\nexports.FontStyle = FontStyle;\nexports.FontClass = FontClass;\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.SizeStyle = exports.SizeClass = undefined;\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nvar SizeClass = new _parchment2.default.Attributor.Class('size', 'ql-size', {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['small', 'large', 'huge']\n});\nvar SizeStyle = new _parchment2.default.Attributor.Style('size', 'font-size', {\n  scope: _parchment2.default.Scope.INLINE,\n  whitelist: ['10px', '18px', '32px']\n});\n\nexports.SizeClass = SizeClass;\nexports.SizeStyle = SizeStyle;\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nmodule.exports = {\n  'align': {\n    '': __webpack_require__(76),\n    'center': __webpack_require__(77),\n    'right': __webpack_require__(78),\n    'justify': __webpack_require__(79)\n  },\n  'background': __webpack_require__(80),\n  'blockquote': __webpack_require__(81),\n  'bold': __webpack_require__(82),\n  'clean': __webpack_require__(83),\n  'code': __webpack_require__(58),\n  'code-block': __webpack_require__(58),\n  'color': __webpack_require__(84),\n  'direction': {\n    '': __webpack_require__(85),\n    'rtl': __webpack_require__(86)\n  },\n  'float': {\n    'center': __webpack_require__(87),\n    'full': __webpack_require__(88),\n    'left': __webpack_require__(89),\n    'right': __webpack_require__(90)\n  },\n  'formula': __webpack_require__(91),\n  'header': {\n    '1': __webpack_require__(92),\n    '2': __webpack_require__(93)\n  },\n  'italic': __webpack_require__(94),\n  'image': __webpack_require__(95),\n  'indent': {\n    '+1': __webpack_require__(96),\n    '-1': __webpack_require__(97)\n  },\n  'link': __webpack_require__(98),\n  'list': {\n    'ordered': __webpack_require__(99),\n    'bullet': __webpack_require__(100),\n    'check': __webpack_require__(101)\n  },\n  'script': {\n    'sub': __webpack_require__(102),\n    'super': __webpack_require__(103)\n  },\n  'strike': __webpack_require__(104),\n  'underline': __webpack_require__(105),\n  'video': __webpack_require__(106)\n};\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.getLastChangeIndex = exports.default = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar History = function (_Module) {\n  _inherits(History, _Module);\n\n  function History(quill, options) {\n    _classCallCheck(this, History);\n\n    var _this = _possibleConstructorReturn(this, (History.__proto__ || Object.getPrototypeOf(History)).call(this, quill, options));\n\n    _this.lastRecorded = 0;\n    _this.ignoreChange = false;\n    _this.clear();\n    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (eventName, delta, oldDelta, source) {\n      if (eventName !== _quill2.default.events.TEXT_CHANGE || _this.ignoreChange) return;\n      if (!_this.options.userOnly || source === _quill2.default.sources.USER) {\n        _this.record(delta, oldDelta);\n      } else {\n        _this.transform(delta);\n      }\n    });\n    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true }, _this.undo.bind(_this));\n    _this.quill.keyboard.addBinding({ key: 'Z', shortKey: true, shiftKey: true }, _this.redo.bind(_this));\n    if (/Win/i.test(navigator.platform)) {\n      _this.quill.keyboard.addBinding({ key: 'Y', shortKey: true }, _this.redo.bind(_this));\n    }\n    return _this;\n  }\n\n  _createClass(History, [{\n    key: 'change',\n    value: function change(source, dest) {\n      if (this.stack[source].length === 0) return;\n      var delta = this.stack[source].pop();\n      this.stack[dest].push(delta);\n      this.lastRecorded = 0;\n      this.ignoreChange = true;\n      this.quill.updateContents(delta[source], _quill2.default.sources.USER);\n      this.ignoreChange = false;\n      var index = getLastChangeIndex(delta[source]);\n      this.quill.setSelection(index);\n    }\n  }, {\n    key: 'clear',\n    value: function clear() {\n      this.stack = { undo: [], redo: [] };\n    }\n  }, {\n    key: 'cutoff',\n    value: function cutoff() {\n      this.lastRecorded = 0;\n    }\n  }, {\n    key: 'record',\n    value: function record(changeDelta, oldDelta) {\n      if (changeDelta.ops.length === 0) return;\n      this.stack.redo = [];\n      var undoDelta = this.quill.getContents().diff(oldDelta);\n      var timestamp = Date.now();\n      if (this.lastRecorded + this.options.delay > timestamp && this.stack.undo.length > 0) {\n        var delta = this.stack.undo.pop();\n        undoDelta = undoDelta.compose(delta.undo);\n        changeDelta = delta.redo.compose(changeDelta);\n      } else {\n        this.lastRecorded = timestamp;\n      }\n      this.stack.undo.push({\n        redo: changeDelta,\n        undo: undoDelta\n      });\n      if (this.stack.undo.length > this.options.maxStack) {\n        this.stack.undo.shift();\n      }\n    }\n  }, {\n    key: 'redo',\n    value: function redo() {\n      this.change('redo', 'undo');\n    }\n  }, {\n    key: 'transform',\n    value: function transform(delta) {\n      this.stack.undo.forEach(function (change) {\n        change.undo = delta.transform(change.undo, true);\n        change.redo = delta.transform(change.redo, true);\n      });\n      this.stack.redo.forEach(function (change) {\n        change.undo = delta.transform(change.undo, true);\n        change.redo = delta.transform(change.redo, true);\n      });\n    }\n  }, {\n    key: 'undo',\n    value: function undo() {\n      this.change('undo', 'redo');\n    }\n  }]);\n\n  return History;\n}(_module2.default);\n\nHistory.DEFAULTS = {\n  delay: 1000,\n  maxStack: 100,\n  userOnly: false\n};\n\nfunction endsWithNewlineChange(delta) {\n  var lastOp = delta.ops[delta.ops.length - 1];\n  if (lastOp == null) return false;\n  if (lastOp.insert != null) {\n    return typeof lastOp.insert === 'string' && lastOp.insert.endsWith('\\n');\n  }\n  if (lastOp.attributes != null) {\n    return Object.keys(lastOp.attributes).some(function (attr) {\n      return _parchment2.default.query(attr, _parchment2.default.Scope.BLOCK) != null;\n    });\n  }\n  return false;\n}\n\nfunction getLastChangeIndex(delta) {\n  var deleteLength = delta.reduce(function (length, op) {\n    length += op.delete || 0;\n    return length;\n  }, 0);\n  var changeIndex = delta.length() - deleteLength;\n  if (endsWithNewlineChange(delta)) {\n    changeIndex -= 1;\n  }\n  return changeIndex;\n}\n\nexports.default = History;\nexports.getLastChangeIndex = getLastChangeIndex;\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BaseTooltip = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _keyboard = __webpack_require__(23);\n\nvar _keyboard2 = _interopRequireDefault(_keyboard);\n\nvar _theme = __webpack_require__(34);\n\nvar _theme2 = _interopRequireDefault(_theme);\n\nvar _colorPicker = __webpack_require__(59);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(60);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _tooltip = __webpack_require__(61);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ALIGNS = [false, 'center', 'right', 'justify'];\n\nvar COLORS = [\"#000000\", \"#e60000\", \"#ff9900\", \"#ffff00\", \"#008a00\", \"#0066cc\", \"#9933ff\", \"#ffffff\", \"#facccc\", \"#ffebcc\", \"#ffffcc\", \"#cce8cc\", \"#cce0f5\", \"#ebd6ff\", \"#bbbbbb\", \"#f06666\", \"#ffc266\", \"#ffff66\", \"#66b966\", \"#66a3e0\", \"#c285ff\", \"#888888\", \"#a10000\", \"#b26b00\", \"#b2b200\", \"#006100\", \"#0047b2\", \"#6b24b2\", \"#444444\", \"#5c0000\", \"#663d00\", \"#666600\", \"#003700\", \"#002966\", \"#3d1466\"];\n\nvar FONTS = [false, 'serif', 'monospace'];\n\nvar HEADERS = ['1', '2', '3', false];\n\nvar SIZES = ['small', false, 'large', 'huge'];\n\nvar BaseTheme = function (_Theme) {\n  _inherits(BaseTheme, _Theme);\n\n  function BaseTheme(quill, options) {\n    _classCallCheck(this, BaseTheme);\n\n    var _this = _possibleConstructorReturn(this, (BaseTheme.__proto__ || Object.getPrototypeOf(BaseTheme)).call(this, quill, options));\n\n    var listener = function listener(e) {\n      if (!document.body.contains(quill.root)) {\n        return document.body.removeEventListener('click', listener);\n      }\n      if (_this.tooltip != null && !_this.tooltip.root.contains(e.target) && document.activeElement !== _this.tooltip.textbox && !_this.quill.hasFocus()) {\n        _this.tooltip.hide();\n      }\n      if (_this.pickers != null) {\n        _this.pickers.forEach(function (picker) {\n          if (!picker.container.contains(e.target)) {\n            picker.close();\n          }\n        });\n      }\n    };\n    quill.emitter.listenDOM('click', document.body, listener);\n    return _this;\n  }\n\n  _createClass(BaseTheme, [{\n    key: 'addModule',\n    value: function addModule(name) {\n      var module = _get(BaseTheme.prototype.__proto__ || Object.getPrototypeOf(BaseTheme.prototype), 'addModule', this).call(this, name);\n      if (name === 'toolbar') {\n        this.extendToolbar(module);\n      }\n      return module;\n    }\n  }, {\n    key: 'buildButtons',\n    value: function buildButtons(buttons, icons) {\n      buttons.forEach(function (button) {\n        var className = button.getAttribute('class') || '';\n        className.split(/\\s+/).forEach(function (name) {\n          if (!name.startsWith('ql-')) return;\n          name = name.slice('ql-'.length);\n          if (icons[name] == null) return;\n          if (name === 'direction') {\n            button.innerHTML = icons[name][''] + icons[name]['rtl'];\n          } else if (typeof icons[name] === 'string') {\n            button.innerHTML = icons[name];\n          } else {\n            var value = button.value || '';\n            if (value != null && icons[name][value]) {\n              button.innerHTML = icons[name][value];\n            }\n          }\n        });\n      });\n    }\n  }, {\n    key: 'buildPickers',\n    value: function buildPickers(selects, icons) {\n      var _this2 = this;\n\n      this.pickers = selects.map(function (select) {\n        if (select.classList.contains('ql-align')) {\n          if (select.querySelector('option') == null) {\n            fillSelect(select, ALIGNS);\n          }\n          return new _iconPicker2.default(select, icons.align);\n        } else if (select.classList.contains('ql-background') || select.classList.contains('ql-color')) {\n          var format = select.classList.contains('ql-background') ? 'background' : 'color';\n          if (select.querySelector('option') == null) {\n            fillSelect(select, COLORS, format === 'background' ? '#ffffff' : '#000000');\n          }\n          return new _colorPicker2.default(select, icons[format]);\n        } else {\n          if (select.querySelector('option') == null) {\n            if (select.classList.contains('ql-font')) {\n              fillSelect(select, FONTS);\n            } else if (select.classList.contains('ql-header')) {\n              fillSelect(select, HEADERS);\n            } else if (select.classList.contains('ql-size')) {\n              fillSelect(select, SIZES);\n            }\n          }\n          return new _picker2.default(select);\n        }\n      });\n      var update = function update() {\n        _this2.pickers.forEach(function (picker) {\n          picker.update();\n        });\n      };\n      this.quill.on(_emitter2.default.events.EDITOR_CHANGE, update);\n    }\n  }]);\n\n  return BaseTheme;\n}(_theme2.default);\n\nBaseTheme.DEFAULTS = (0, _extend2.default)(true, {}, _theme2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        formula: function formula() {\n          this.quill.theme.tooltip.edit('formula');\n        },\n        image: function image() {\n          var _this3 = this;\n\n          var fileInput = this.container.querySelector('input.ql-image[type=file]');\n          if (fileInput == null) {\n            fileInput = document.createElement('input');\n            fileInput.setAttribute('type', 'file');\n            fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\n            fileInput.classList.add('ql-image');\n            fileInput.addEventListener('change', function () {\n              if (fileInput.files != null && fileInput.files[0] != null) {\n                var reader = new FileReader();\n                reader.onload = function (e) {\n                  var range = _this3.quill.getSelection(true);\n                  _this3.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert({ image: e.target.result }), _emitter2.default.sources.USER);\n                  _this3.quill.setSelection(range.index + 1, _emitter2.default.sources.SILENT);\n                  fileInput.value = \"\";\n                };\n                reader.readAsDataURL(fileInput.files[0]);\n              }\n            });\n            this.container.appendChild(fileInput);\n          }\n          fileInput.click();\n        },\n        video: function video() {\n          this.quill.theme.tooltip.edit('video');\n        }\n      }\n    }\n  }\n});\n\nvar BaseTooltip = function (_Tooltip) {\n  _inherits(BaseTooltip, _Tooltip);\n\n  function BaseTooltip(quill, boundsContainer) {\n    _classCallCheck(this, BaseTooltip);\n\n    var _this4 = _possibleConstructorReturn(this, (BaseTooltip.__proto__ || Object.getPrototypeOf(BaseTooltip)).call(this, quill, boundsContainer));\n\n    _this4.textbox = _this4.root.querySelector('input[type=\"text\"]');\n    _this4.listen();\n    return _this4;\n  }\n\n  _createClass(BaseTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this5 = this;\n\n      this.textbox.addEventListener('keydown', function (event) {\n        if (_keyboard2.default.match(event, 'enter')) {\n          _this5.save();\n          event.preventDefault();\n        } else if (_keyboard2.default.match(event, 'escape')) {\n          _this5.cancel();\n          event.preventDefault();\n        }\n      });\n    }\n  }, {\n    key: 'cancel',\n    value: function cancel() {\n      this.hide();\n    }\n  }, {\n    key: 'edit',\n    value: function edit() {\n      var mode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'link';\n      var preview = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;\n\n      this.root.classList.remove('ql-hidden');\n      this.root.classList.add('ql-editing');\n      if (preview != null) {\n        this.textbox.value = preview;\n      } else if (mode !== this.root.getAttribute('data-mode')) {\n        this.textbox.value = '';\n      }\n      this.position(this.quill.getBounds(this.quill.selection.savedRange));\n      this.textbox.select();\n      this.textbox.setAttribute('placeholder', this.textbox.getAttribute('data-' + mode) || '');\n      this.root.setAttribute('data-mode', mode);\n    }\n  }, {\n    key: 'restoreFocus',\n    value: function restoreFocus() {\n      var scrollTop = this.quill.scrollingContainer.scrollTop;\n      this.quill.focus();\n      this.quill.scrollingContainer.scrollTop = scrollTop;\n    }\n  }, {\n    key: 'save',\n    value: function save() {\n      var value = this.textbox.value;\n      switch (this.root.getAttribute('data-mode')) {\n        case 'link':\n          {\n            var scrollTop = this.quill.root.scrollTop;\n            if (this.linkRange) {\n              this.quill.formatText(this.linkRange, 'link', value, _emitter2.default.sources.USER);\n              delete this.linkRange;\n            } else {\n              this.restoreFocus();\n              this.quill.format('link', value, _emitter2.default.sources.USER);\n            }\n            this.quill.root.scrollTop = scrollTop;\n            break;\n          }\n        case 'video':\n          {\n            value = extractVideoUrl(value);\n          } // eslint-disable-next-line no-fallthrough\n        case 'formula':\n          {\n            if (!value) break;\n            var range = this.quill.getSelection(true);\n            if (range != null) {\n              var index = range.index + range.length;\n              this.quill.insertEmbed(index, this.root.getAttribute('data-mode'), value, _emitter2.default.sources.USER);\n              if (this.root.getAttribute('data-mode') === 'formula') {\n                this.quill.insertText(index + 1, ' ', _emitter2.default.sources.USER);\n              }\n              this.quill.setSelection(index + 2, _emitter2.default.sources.USER);\n            }\n            break;\n          }\n        default:\n      }\n      this.textbox.value = '';\n      this.hide();\n    }\n  }]);\n\n  return BaseTooltip;\n}(_tooltip2.default);\n\nfunction extractVideoUrl(url) {\n  var match = url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtube\\.com\\/watch.*v=([a-zA-Z0-9_-]+)/) || url.match(/^(?:(https?):\\/\\/)?(?:(?:www|m)\\.)?youtu\\.be\\/([a-zA-Z0-9_-]+)/);\n  if (match) {\n    return (match[1] || 'https') + '://www.youtube.com/embed/' + match[2] + '?showinfo=0';\n  }\n  if (match = url.match(/^(?:(https?):\\/\\/)?(?:www\\.)?vimeo\\.com\\/(\\d+)/)) {\n    // eslint-disable-line no-cond-assign\n    return (match[1] || 'https') + '://player.vimeo.com/video/' + match[2] + '/';\n  }\n  return url;\n}\n\nfunction fillSelect(select, values) {\n  var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n  values.forEach(function (value) {\n    var option = document.createElement('option');\n    if (value === defaultValue) {\n      option.setAttribute('selected', 'selected');\n    } else {\n      option.setAttribute('value', value);\n    }\n    select.appendChild(option);\n  });\n}\n\nexports.BaseTooltip = BaseTooltip;\nexports.default = BaseTheme;\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedList = /** @class */ (function () {\n    function LinkedList() {\n        this.head = this.tail = null;\n        this.length = 0;\n    }\n    LinkedList.prototype.append = function () {\n        var nodes = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            nodes[_i] = arguments[_i];\n        }\n        this.insertBefore(nodes[0], null);\n        if (nodes.length > 1) {\n            this.append.apply(this, nodes.slice(1));\n        }\n    };\n    LinkedList.prototype.contains = function (node) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            if (cur === node)\n                return true;\n        }\n        return false;\n    };\n    LinkedList.prototype.insertBefore = function (node, refNode) {\n        if (!node)\n            return;\n        node.next = refNode;\n        if (refNode != null) {\n            node.prev = refNode.prev;\n            if (refNode.prev != null) {\n                refNode.prev.next = node;\n            }\n            refNode.prev = node;\n            if (refNode === this.head) {\n                this.head = node;\n            }\n        }\n        else if (this.tail != null) {\n            this.tail.next = node;\n            node.prev = this.tail;\n            this.tail = node;\n        }\n        else {\n            node.prev = null;\n            this.head = this.tail = node;\n        }\n        this.length += 1;\n    };\n    LinkedList.prototype.offset = function (target) {\n        var index = 0, cur = this.head;\n        while (cur != null) {\n            if (cur === target)\n                return index;\n            index += cur.length();\n            cur = cur.next;\n        }\n        return -1;\n    };\n    LinkedList.prototype.remove = function (node) {\n        if (!this.contains(node))\n            return;\n        if (node.prev != null)\n            node.prev.next = node.next;\n        if (node.next != null)\n            node.next.prev = node.prev;\n        if (node === this.head)\n            this.head = node.next;\n        if (node === this.tail)\n            this.tail = node.prev;\n        this.length -= 1;\n    };\n    LinkedList.prototype.iterator = function (curNode) {\n        if (curNode === void 0) { curNode = this.head; }\n        // TODO use yield when we can\n        return function () {\n            var ret = curNode;\n            if (curNode != null)\n                curNode = curNode.next;\n            return ret;\n        };\n    };\n    LinkedList.prototype.find = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            var length = cur.length();\n            if (index < length ||\n                (inclusive && index === length && (cur.next == null || cur.next.length() !== 0))) {\n                return [cur, index];\n            }\n            index -= length;\n        }\n        return [null, 0];\n    };\n    LinkedList.prototype.forEach = function (callback) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            callback(cur);\n        }\n    };\n    LinkedList.prototype.forEachAt = function (index, length, callback) {\n        if (length <= 0)\n            return;\n        var _a = this.find(index), startNode = _a[0], offset = _a[1];\n        var cur, curIndex = index - offset, next = this.iterator(startNode);\n        while ((cur = next()) && curIndex < index + length) {\n            var curLength = cur.length();\n            if (index > curIndex) {\n                callback(cur, index - curIndex, Math.min(length, curIndex + curLength - index));\n            }\n            else {\n                callback(cur, 0, Math.min(curLength, index + length - curIndex));\n            }\n            curIndex += curLength;\n        }\n    };\n    LinkedList.prototype.map = function (callback) {\n        return this.reduce(function (memo, cur) {\n            memo.push(callback(cur));\n            return memo;\n        }, []);\n    };\n    LinkedList.prototype.reduce = function (callback, memo) {\n        var cur, next = this.iterator();\n        while ((cur = next())) {\n            memo = callback(memo, cur);\n        }\n        return memo;\n    };\n    return LinkedList;\n}());\nexports.default = LinkedList;\n\n\n/***/ }),\n/* 45 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar container_1 = __webpack_require__(17);\nvar Registry = __webpack_require__(1);\nvar OBSERVER_CONFIG = {\n    attributes: true,\n    characterData: true,\n    characterDataOldValue: true,\n    childList: true,\n    subtree: true,\n};\nvar MAX_OPTIMIZE_ITERATIONS = 100;\nvar ScrollBlot = /** @class */ (function (_super) {\n    __extends(ScrollBlot, _super);\n    function ScrollBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.scroll = _this;\n        _this.observer = new MutationObserver(function (mutations) {\n            _this.update(mutations);\n        });\n        _this.observer.observe(_this.domNode, OBSERVER_CONFIG);\n        _this.attach();\n        return _this;\n    }\n    ScrollBlot.prototype.detach = function () {\n        _super.prototype.detach.call(this);\n        this.observer.disconnect();\n    };\n    ScrollBlot.prototype.deleteAt = function (index, length) {\n        this.update();\n        if (index === 0 && length === this.length()) {\n            this.children.forEach(function (child) {\n                child.remove();\n            });\n        }\n        else {\n            _super.prototype.deleteAt.call(this, index, length);\n        }\n    };\n    ScrollBlot.prototype.formatAt = function (index, length, name, value) {\n        this.update();\n        _super.prototype.formatAt.call(this, index, length, name, value);\n    };\n    ScrollBlot.prototype.insertAt = function (index, value, def) {\n        this.update();\n        _super.prototype.insertAt.call(this, index, value, def);\n    };\n    ScrollBlot.prototype.optimize = function (mutations, context) {\n        var _this = this;\n        if (mutations === void 0) { mutations = []; }\n        if (context === void 0) { context = {}; }\n        _super.prototype.optimize.call(this, context);\n        // We must modify mutations directly, cannot make copy and then modify\n        var records = [].slice.call(this.observer.takeRecords());\n        // Array.push currently seems to be implemented by a non-tail recursive function\n        // so we cannot just mutations.push.apply(mutations, this.observer.takeRecords());\n        while (records.length > 0)\n            mutations.push(records.pop());\n        // TODO use WeakMap\n        var mark = function (blot, markParent) {\n            if (markParent === void 0) { markParent = true; }\n            if (blot == null || blot === _this)\n                return;\n            if (blot.domNode.parentNode == null)\n                return;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [];\n            }\n            if (markParent)\n                mark(blot.parent);\n        };\n        var optimize = function (blot) {\n            // Post-order traversal\n            if (\n            // @ts-ignore\n            blot.domNode[Registry.DATA_KEY] == null ||\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations == null) {\n                return;\n            }\n            if (blot instanceof container_1.default) {\n                blot.children.forEach(optimize);\n            }\n            blot.optimize(context);\n        };\n        var remaining = mutations;\n        for (var i = 0; remaining.length > 0; i += 1) {\n            if (i >= MAX_OPTIMIZE_ITERATIONS) {\n                throw new Error('[Parchment] Maximum optimize iterations reached');\n            }\n            remaining.forEach(function (mutation) {\n                var blot = Registry.find(mutation.target, true);\n                if (blot == null)\n                    return;\n                if (blot.domNode === mutation.target) {\n                    if (mutation.type === 'childList') {\n                        mark(Registry.find(mutation.previousSibling, false));\n                        [].forEach.call(mutation.addedNodes, function (node) {\n                            var child = Registry.find(node, false);\n                            mark(child, false);\n                            if (child instanceof container_1.default) {\n                                child.children.forEach(function (grandChild) {\n                                    mark(grandChild, false);\n                                });\n                            }\n                        });\n                    }\n                    else if (mutation.type === 'attributes') {\n                        mark(blot.prev);\n                    }\n                }\n                mark(blot);\n            });\n            this.children.forEach(optimize);\n            remaining = [].slice.call(this.observer.takeRecords());\n            records = remaining.slice();\n            while (records.length > 0)\n                mutations.push(records.pop());\n        }\n    };\n    ScrollBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (context === void 0) { context = {}; }\n        mutations = mutations || this.observer.takeRecords();\n        // TODO use WeakMap\n        mutations\n            .map(function (mutation) {\n            var blot = Registry.find(mutation.target, true);\n            if (blot == null)\n                return null;\n            // @ts-ignore\n            if (blot.domNode[Registry.DATA_KEY].mutations == null) {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations = [mutation];\n                return blot;\n            }\n            else {\n                // @ts-ignore\n                blot.domNode[Registry.DATA_KEY].mutations.push(mutation);\n                return null;\n            }\n        })\n            .forEach(function (blot) {\n            if (blot == null ||\n                blot === _this ||\n                //@ts-ignore\n                blot.domNode[Registry.DATA_KEY] == null)\n                return;\n            // @ts-ignore\n            blot.update(blot.domNode[Registry.DATA_KEY].mutations || [], context);\n        });\n        // @ts-ignore\n        if (this.domNode[Registry.DATA_KEY].mutations != null) {\n            // @ts-ignore\n            _super.prototype.update.call(this, this.domNode[Registry.DATA_KEY].mutations, context);\n        }\n        this.optimize(mutations, context);\n    };\n    ScrollBlot.blotName = 'scroll';\n    ScrollBlot.defaultChild = 'block';\n    ScrollBlot.scope = Registry.Scope.BLOCK_BLOT;\n    ScrollBlot.tagName = 'DIV';\n    return ScrollBlot;\n}(container_1.default));\nexports.default = ScrollBlot;\n\n\n/***/ }),\n/* 46 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\n// Shallow object comparison\nfunction isEqual(obj1, obj2) {\n    if (Object.keys(obj1).length !== Object.keys(obj2).length)\n        return false;\n    // @ts-ignore\n    for (var prop in obj1) {\n        // @ts-ignore\n        if (obj1[prop] !== obj2[prop])\n            return false;\n    }\n    return true;\n}\nvar InlineBlot = /** @class */ (function (_super) {\n    __extends(InlineBlot, _super);\n    function InlineBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    InlineBlot.formats = function (domNode) {\n        if (domNode.tagName === InlineBlot.tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    InlineBlot.prototype.format = function (name, value) {\n        var _this = this;\n        if (name === this.statics.blotName && !value) {\n            this.children.forEach(function (child) {\n                if (!(child instanceof format_1.default)) {\n                    child = child.wrap(InlineBlot.blotName, true);\n                }\n                _this.attributes.copy(child);\n            });\n            this.unwrap();\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    InlineBlot.prototype.formatAt = function (index, length, name, value) {\n        if (this.formats()[name] != null || Registry.query(name, Registry.Scope.ATTRIBUTE)) {\n            var blot = this.isolate(index, length);\n            blot.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    InlineBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        var formats = this.formats();\n        if (Object.keys(formats).length === 0) {\n            return this.unwrap(); // unformatted span\n        }\n        var next = this.next;\n        if (next instanceof InlineBlot && next.prev === this && isEqual(formats, next.formats())) {\n            next.moveChildren(this);\n            next.remove();\n        }\n    };\n    InlineBlot.blotName = 'inline';\n    InlineBlot.scope = Registry.Scope.INLINE_BLOT;\n    InlineBlot.tagName = 'SPAN';\n    return InlineBlot;\n}(format_1.default));\nexports.default = InlineBlot;\n\n\n/***/ }),\n/* 47 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar format_1 = __webpack_require__(18);\nvar Registry = __webpack_require__(1);\nvar BlockBlot = /** @class */ (function (_super) {\n    __extends(BlockBlot, _super);\n    function BlockBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    BlockBlot.formats = function (domNode) {\n        var tagName = Registry.query(BlockBlot.blotName).tagName;\n        if (domNode.tagName === tagName)\n            return undefined;\n        return _super.formats.call(this, domNode);\n    };\n    BlockBlot.prototype.format = function (name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) == null) {\n            return;\n        }\n        else if (name === this.statics.blotName && !value) {\n            this.replaceWith(BlockBlot.blotName);\n        }\n        else {\n            _super.prototype.format.call(this, name, value);\n        }\n    };\n    BlockBlot.prototype.formatAt = function (index, length, name, value) {\n        if (Registry.query(name, Registry.Scope.BLOCK) != null) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    BlockBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null || Registry.query(value, Registry.Scope.INLINE) != null) {\n            // Insert text or inline\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n        else {\n            var after = this.split(index);\n            var blot = Registry.create(value, def);\n            after.parent.insertBefore(blot, after);\n        }\n    };\n    BlockBlot.prototype.update = function (mutations, context) {\n        if (navigator.userAgent.match(/Trident/)) {\n            this.build();\n        }\n        else {\n            _super.prototype.update.call(this, mutations, context);\n        }\n    };\n    BlockBlot.blotName = 'block';\n    BlockBlot.scope = Registry.Scope.BLOCK_BLOT;\n    BlockBlot.tagName = 'P';\n    return BlockBlot;\n}(format_1.default));\nexports.default = BlockBlot;\n\n\n/***/ }),\n/* 48 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar EmbedBlot = /** @class */ (function (_super) {\n    __extends(EmbedBlot, _super);\n    function EmbedBlot() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    EmbedBlot.formats = function (domNode) {\n        return undefined;\n    };\n    EmbedBlot.prototype.format = function (name, value) {\n        // super.formatAt wraps, which is what we want in general,\n        // but this allows subclasses to overwrite for formats\n        // that just apply to particular embeds\n        _super.prototype.formatAt.call(this, 0, this.length(), name, value);\n    };\n    EmbedBlot.prototype.formatAt = function (index, length, name, value) {\n        if (index === 0 && length === this.length()) {\n            this.format(name, value);\n        }\n        else {\n            _super.prototype.formatAt.call(this, index, length, name, value);\n        }\n    };\n    EmbedBlot.prototype.formats = function () {\n        return this.statics.formats(this.domNode);\n    };\n    return EmbedBlot;\n}(leaf_1.default));\nexports.default = EmbedBlot;\n\n\n/***/ }),\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar leaf_1 = __webpack_require__(19);\nvar Registry = __webpack_require__(1);\nvar TextBlot = /** @class */ (function (_super) {\n    __extends(TextBlot, _super);\n    function TextBlot(node) {\n        var _this = _super.call(this, node) || this;\n        _this.text = _this.statics.value(_this.domNode);\n        return _this;\n    }\n    TextBlot.create = function (value) {\n        return document.createTextNode(value);\n    };\n    TextBlot.value = function (domNode) {\n        var text = domNode.data;\n        // @ts-ignore\n        if (text['normalize'])\n            text = text['normalize']();\n        return text;\n    };\n    TextBlot.prototype.deleteAt = function (index, length) {\n        this.domNode.data = this.text = this.text.slice(0, index) + this.text.slice(index + length);\n    };\n    TextBlot.prototype.index = function (node, offset) {\n        if (this.domNode === node) {\n            return offset;\n        }\n        return -1;\n    };\n    TextBlot.prototype.insertAt = function (index, value, def) {\n        if (def == null) {\n            this.text = this.text.slice(0, index) + value + this.text.slice(index);\n            this.domNode.data = this.text;\n        }\n        else {\n            _super.prototype.insertAt.call(this, index, value, def);\n        }\n    };\n    TextBlot.prototype.length = function () {\n        return this.text.length;\n    };\n    TextBlot.prototype.optimize = function (context) {\n        _super.prototype.optimize.call(this, context);\n        this.text = this.statics.value(this.domNode);\n        if (this.text.length === 0) {\n            this.remove();\n        }\n        else if (this.next instanceof TextBlot && this.next.prev === this) {\n            this.insertAt(this.length(), this.next.value());\n            this.next.remove();\n        }\n    };\n    TextBlot.prototype.position = function (index, inclusive) {\n        if (inclusive === void 0) { inclusive = false; }\n        return [this.domNode, index];\n    };\n    TextBlot.prototype.split = function (index, force) {\n        if (force === void 0) { force = false; }\n        if (!force) {\n            if (index === 0)\n                return this;\n            if (index === this.length())\n                return this.next;\n        }\n        var after = Registry.create(this.domNode.splitText(index));\n        this.parent.insertBefore(after, this.next);\n        this.text = this.statics.value(this.domNode);\n        return after;\n    };\n    TextBlot.prototype.update = function (mutations, context) {\n        var _this = this;\n        if (mutations.some(function (mutation) {\n            return mutation.type === 'characterData' && mutation.target === _this.domNode;\n        })) {\n            this.text = this.statics.value(this.domNode);\n        }\n    };\n    TextBlot.prototype.value = function () {\n        return this.text;\n    };\n    TextBlot.blotName = 'text';\n    TextBlot.scope = Registry.Scope.INLINE_BLOT;\n    return TextBlot;\n}(leaf_1.default));\nexports.default = TextBlot;\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar elem = document.createElement('div');\nelem.classList.toggle('test-class', false);\nif (elem.classList.contains('test-class')) {\n  var _toggle = DOMTokenList.prototype.toggle;\n  DOMTokenList.prototype.toggle = function (token, force) {\n    if (arguments.length > 1 && !this.contains(token) === !force) {\n      return force;\n    } else {\n      return _toggle.call(this, token);\n    }\n  };\n}\n\nif (!String.prototype.startsWith) {\n  String.prototype.startsWith = function (searchString, position) {\n    position = position || 0;\n    return this.substr(position, searchString.length) === searchString;\n  };\n}\n\nif (!String.prototype.endsWith) {\n  String.prototype.endsWith = function (searchString, position) {\n    var subjectString = this.toString();\n    if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {\n      position = subjectString.length;\n    }\n    position -= searchString.length;\n    var lastIndex = subjectString.indexOf(searchString, position);\n    return lastIndex !== -1 && lastIndex === position;\n  };\n}\n\nif (!Array.prototype.find) {\n  Object.defineProperty(Array.prototype, \"find\", {\n    value: function value(predicate) {\n      if (this === null) {\n        throw new TypeError('Array.prototype.find called on null or undefined');\n      }\n      if (typeof predicate !== 'function') {\n        throw new TypeError('predicate must be a function');\n      }\n      var list = Object(this);\n      var length = list.length >>> 0;\n      var thisArg = arguments[1];\n      var value;\n\n      for (var i = 0; i < length; i++) {\n        value = list[i];\n        if (predicate.call(thisArg, value, i, list)) {\n          return value;\n        }\n      }\n      return undefined;\n    }\n  });\n}\n\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  // Disable resizing in Firefox\n  document.execCommand(\"enableObjectResizing\", false, false);\n  // Disable automatic linkifying in IE11\n  document.execCommand(\"autoUrlDetect\", false, false);\n});\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports) {\n\n/**\n * This library modifies the diff-patch-match library by Neil Fraser\n * by removing the patch and match functionality and certain advanced\n * options in the diff function. The original license is as follows:\n *\n * ===\n *\n * Diff Match and Patch\n *\n * Copyright 2006 Google Inc.\n * http://code.google.com/p/google-diff-match-patch/\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n\n/**\n * The data structure representing a diff is an array of tuples:\n * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]\n * which means: delete 'Hello', add 'Goodbye' and keep ' world.'\n */\nvar DIFF_DELETE = -1;\nvar DIFF_INSERT = 1;\nvar DIFF_EQUAL = 0;\n\n\n/**\n * Find the differences between two texts.  Simplifies the problem by stripping\n * any common prefix or suffix off the texts before diffing.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {Int} cursor_pos Expected edit position in text1 (optional)\n * @return {Array} Array of diff tuples.\n */\nfunction diff_main(text1, text2, cursor_pos) {\n  // Check for equality (speedup).\n  if (text1 == text2) {\n    if (text1) {\n      return [[DIFF_EQUAL, text1]];\n    }\n    return [];\n  }\n\n  // Check cursor_pos within bounds\n  if (cursor_pos < 0 || text1.length < cursor_pos) {\n    cursor_pos = null;\n  }\n\n  // Trim off common prefix (speedup).\n  var commonlength = diff_commonPrefix(text1, text2);\n  var commonprefix = text1.substring(0, commonlength);\n  text1 = text1.substring(commonlength);\n  text2 = text2.substring(commonlength);\n\n  // Trim off common suffix (speedup).\n  commonlength = diff_commonSuffix(text1, text2);\n  var commonsuffix = text1.substring(text1.length - commonlength);\n  text1 = text1.substring(0, text1.length - commonlength);\n  text2 = text2.substring(0, text2.length - commonlength);\n\n  // Compute the diff on the middle block.\n  var diffs = diff_compute_(text1, text2);\n\n  // Restore the prefix and suffix.\n  if (commonprefix) {\n    diffs.unshift([DIFF_EQUAL, commonprefix]);\n  }\n  if (commonsuffix) {\n    diffs.push([DIFF_EQUAL, commonsuffix]);\n  }\n  diff_cleanupMerge(diffs);\n  if (cursor_pos != null) {\n    diffs = fix_cursor(diffs, cursor_pos);\n  }\n  diffs = fix_emoji(diffs);\n  return diffs;\n};\n\n\n/**\n * Find the differences between two texts.  Assumes that the texts do not\n * have any common prefix or suffix.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_compute_(text1, text2) {\n  var diffs;\n\n  if (!text1) {\n    // Just add some text (speedup).\n    return [[DIFF_INSERT, text2]];\n  }\n\n  if (!text2) {\n    // Just delete some text (speedup).\n    return [[DIFF_DELETE, text1]];\n  }\n\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  var i = longtext.indexOf(shorttext);\n  if (i != -1) {\n    // Shorter text is inside the longer text (speedup).\n    diffs = [[DIFF_INSERT, longtext.substring(0, i)],\n             [DIFF_EQUAL, shorttext],\n             [DIFF_INSERT, longtext.substring(i + shorttext.length)]];\n    // Swap insertions for deletions if diff is reversed.\n    if (text1.length > text2.length) {\n      diffs[0][0] = diffs[2][0] = DIFF_DELETE;\n    }\n    return diffs;\n  }\n\n  if (shorttext.length == 1) {\n    // Single character string.\n    // After the previous speedup, the character can't be an equality.\n    return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n  }\n\n  // Check to see if the problem can be split in two.\n  var hm = diff_halfMatch_(text1, text2);\n  if (hm) {\n    // A half-match was found, sort out the return data.\n    var text1_a = hm[0];\n    var text1_b = hm[1];\n    var text2_a = hm[2];\n    var text2_b = hm[3];\n    var mid_common = hm[4];\n    // Send both pairs off for separate processing.\n    var diffs_a = diff_main(text1_a, text2_a);\n    var diffs_b = diff_main(text1_b, text2_b);\n    // Merge the results.\n    return diffs_a.concat([[DIFF_EQUAL, mid_common]], diffs_b);\n  }\n\n  return diff_bisect_(text1, text2);\n};\n\n\n/**\n * Find the 'middle snake' of a diff, split the problem in two\n * and return the recursively constructed diff.\n * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @return {Array} Array of diff tuples.\n * @private\n */\nfunction diff_bisect_(text1, text2) {\n  // Cache the text lengths to prevent multiple calls.\n  var text1_length = text1.length;\n  var text2_length = text2.length;\n  var max_d = Math.ceil((text1_length + text2_length) / 2);\n  var v_offset = max_d;\n  var v_length = 2 * max_d;\n  var v1 = new Array(v_length);\n  var v2 = new Array(v_length);\n  // Setting all elements to -1 is faster in Chrome & Firefox than mixing\n  // integers and undefined.\n  for (var x = 0; x < v_length; x++) {\n    v1[x] = -1;\n    v2[x] = -1;\n  }\n  v1[v_offset + 1] = 0;\n  v2[v_offset + 1] = 0;\n  var delta = text1_length - text2_length;\n  // If the total number of characters is odd, then the front path will collide\n  // with the reverse path.\n  var front = (delta % 2 != 0);\n  // Offsets for start and end of k loop.\n  // Prevents mapping of space beyond the grid.\n  var k1start = 0;\n  var k1end = 0;\n  var k2start = 0;\n  var k2end = 0;\n  for (var d = 0; d < max_d; d++) {\n    // Walk the front path one step.\n    for (var k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n      var k1_offset = v_offset + k1;\n      var x1;\n      if (k1 == -d || (k1 != d && v1[k1_offset - 1] < v1[k1_offset + 1])) {\n        x1 = v1[k1_offset + 1];\n      } else {\n        x1 = v1[k1_offset - 1] + 1;\n      }\n      var y1 = x1 - k1;\n      while (x1 < text1_length && y1 < text2_length &&\n             text1.charAt(x1) == text2.charAt(y1)) {\n        x1++;\n        y1++;\n      }\n      v1[k1_offset] = x1;\n      if (x1 > text1_length) {\n        // Ran off the right of the graph.\n        k1end += 2;\n      } else if (y1 > text2_length) {\n        // Ran off the bottom of the graph.\n        k1start += 2;\n      } else if (front) {\n        var k2_offset = v_offset + delta - k1;\n        if (k2_offset >= 0 && k2_offset < v_length && v2[k2_offset] != -1) {\n          // Mirror x2 onto top-left coordinate system.\n          var x2 = text1_length - v2[k2_offset];\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n\n    // Walk the reverse path one step.\n    for (var k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n      var k2_offset = v_offset + k2;\n      var x2;\n      if (k2 == -d || (k2 != d && v2[k2_offset - 1] < v2[k2_offset + 1])) {\n        x2 = v2[k2_offset + 1];\n      } else {\n        x2 = v2[k2_offset - 1] + 1;\n      }\n      var y2 = x2 - k2;\n      while (x2 < text1_length && y2 < text2_length &&\n             text1.charAt(text1_length - x2 - 1) ==\n             text2.charAt(text2_length - y2 - 1)) {\n        x2++;\n        y2++;\n      }\n      v2[k2_offset] = x2;\n      if (x2 > text1_length) {\n        // Ran off the left of the graph.\n        k2end += 2;\n      } else if (y2 > text2_length) {\n        // Ran off the top of the graph.\n        k2start += 2;\n      } else if (!front) {\n        var k1_offset = v_offset + delta - k2;\n        if (k1_offset >= 0 && k1_offset < v_length && v1[k1_offset] != -1) {\n          var x1 = v1[k1_offset];\n          var y1 = v_offset + x1 - k1_offset;\n          // Mirror x2 onto top-left coordinate system.\n          x2 = text1_length - x2;\n          if (x1 >= x2) {\n            // Overlap detected.\n            return diff_bisectSplit_(text1, text2, x1, y1);\n          }\n        }\n      }\n    }\n  }\n  // Diff took too long and hit the deadline or\n  // number of diffs equals number of characters, no commonality at all.\n  return [[DIFF_DELETE, text1], [DIFF_INSERT, text2]];\n};\n\n\n/**\n * Given the location of the 'middle snake', split the diff in two parts\n * and recurse.\n * @param {string} text1 Old string to be diffed.\n * @param {string} text2 New string to be diffed.\n * @param {number} x Index of split point in text1.\n * @param {number} y Index of split point in text2.\n * @return {Array} Array of diff tuples.\n */\nfunction diff_bisectSplit_(text1, text2, x, y) {\n  var text1a = text1.substring(0, x);\n  var text2a = text2.substring(0, y);\n  var text1b = text1.substring(x);\n  var text2b = text2.substring(y);\n\n  // Compute both diffs serially.\n  var diffs = diff_main(text1a, text2a);\n  var diffsb = diff_main(text1b, text2b);\n\n  return diffs.concat(diffsb);\n};\n\n\n/**\n * Determine the common prefix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the start of each\n *     string.\n */\nfunction diff_commonPrefix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 || text1.charAt(0) != text2.charAt(0)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerstart = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(pointerstart, pointermid) ==\n        text2.substring(pointerstart, pointermid)) {\n      pointermin = pointermid;\n      pointerstart = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Determine the common suffix of two strings.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {number} The number of characters common to the end of each string.\n */\nfunction diff_commonSuffix(text1, text2) {\n  // Quick check for common null cases.\n  if (!text1 || !text2 ||\n      text1.charAt(text1.length - 1) != text2.charAt(text2.length - 1)) {\n    return 0;\n  }\n  // Binary search.\n  // Performance analysis: http://neil.fraser.name/news/2007/10/09/\n  var pointermin = 0;\n  var pointermax = Math.min(text1.length, text2.length);\n  var pointermid = pointermax;\n  var pointerend = 0;\n  while (pointermin < pointermid) {\n    if (text1.substring(text1.length - pointermid, text1.length - pointerend) ==\n        text2.substring(text2.length - pointermid, text2.length - pointerend)) {\n      pointermin = pointermid;\n      pointerend = pointermin;\n    } else {\n      pointermax = pointermid;\n    }\n    pointermid = Math.floor((pointermax - pointermin) / 2 + pointermin);\n  }\n  return pointermid;\n};\n\n\n/**\n * Do the two texts share a substring which is at least half the length of the\n * longer text?\n * This speedup can produce non-minimal diffs.\n * @param {string} text1 First string.\n * @param {string} text2 Second string.\n * @return {Array.<string>} Five element Array, containing the prefix of\n *     text1, the suffix of text1, the prefix of text2, the suffix of\n *     text2 and the common middle.  Or null if there was no match.\n */\nfunction diff_halfMatch_(text1, text2) {\n  var longtext = text1.length > text2.length ? text1 : text2;\n  var shorttext = text1.length > text2.length ? text2 : text1;\n  if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {\n    return null;  // Pointless.\n  }\n\n  /**\n   * Does a substring of shorttext exist within longtext such that the substring\n   * is at least half the length of longtext?\n   * Closure, but does not reference any external variables.\n   * @param {string} longtext Longer string.\n   * @param {string} shorttext Shorter string.\n   * @param {number} i Start index of quarter length substring within longtext.\n   * @return {Array.<string>} Five element Array, containing the prefix of\n   *     longtext, the suffix of longtext, the prefix of shorttext, the suffix\n   *     of shorttext and the common middle.  Or null if there was no match.\n   * @private\n   */\n  function diff_halfMatchI_(longtext, shorttext, i) {\n    // Start with a 1/4 length substring at position i as a seed.\n    var seed = longtext.substring(i, i + Math.floor(longtext.length / 4));\n    var j = -1;\n    var best_common = '';\n    var best_longtext_a, best_longtext_b, best_shorttext_a, best_shorttext_b;\n    while ((j = shorttext.indexOf(seed, j + 1)) != -1) {\n      var prefixLength = diff_commonPrefix(longtext.substring(i),\n                                           shorttext.substring(j));\n      var suffixLength = diff_commonSuffix(longtext.substring(0, i),\n                                           shorttext.substring(0, j));\n      if (best_common.length < suffixLength + prefixLength) {\n        best_common = shorttext.substring(j - suffixLength, j) +\n            shorttext.substring(j, j + prefixLength);\n        best_longtext_a = longtext.substring(0, i - suffixLength);\n        best_longtext_b = longtext.substring(i + prefixLength);\n        best_shorttext_a = shorttext.substring(0, j - suffixLength);\n        best_shorttext_b = shorttext.substring(j + prefixLength);\n      }\n    }\n    if (best_common.length * 2 >= longtext.length) {\n      return [best_longtext_a, best_longtext_b,\n              best_shorttext_a, best_shorttext_b, best_common];\n    } else {\n      return null;\n    }\n  }\n\n  // First check if the second quarter is the seed for a half-match.\n  var hm1 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 4));\n  // Check again based on the third quarter.\n  var hm2 = diff_halfMatchI_(longtext, shorttext,\n                             Math.ceil(longtext.length / 2));\n  var hm;\n  if (!hm1 && !hm2) {\n    return null;\n  } else if (!hm2) {\n    hm = hm1;\n  } else if (!hm1) {\n    hm = hm2;\n  } else {\n    // Both matched.  Select the longest.\n    hm = hm1[4].length > hm2[4].length ? hm1 : hm2;\n  }\n\n  // A half-match was found, sort out the return data.\n  var text1_a, text1_b, text2_a, text2_b;\n  if (text1.length > text2.length) {\n    text1_a = hm[0];\n    text1_b = hm[1];\n    text2_a = hm[2];\n    text2_b = hm[3];\n  } else {\n    text2_a = hm[0];\n    text2_b = hm[1];\n    text1_a = hm[2];\n    text1_b = hm[3];\n  }\n  var mid_common = hm[4];\n  return [text1_a, text1_b, text2_a, text2_b, mid_common];\n};\n\n\n/**\n * Reorder and merge like edit sections.  Merge equalities.\n * Any edit section can move as long as it doesn't cross an equality.\n * @param {Array} diffs Array of diff tuples.\n */\nfunction diff_cleanupMerge(diffs) {\n  diffs.push([DIFF_EQUAL, '']);  // Add a dummy entry at the end.\n  var pointer = 0;\n  var count_delete = 0;\n  var count_insert = 0;\n  var text_delete = '';\n  var text_insert = '';\n  var commonlength;\n  while (pointer < diffs.length) {\n    switch (diffs[pointer][0]) {\n      case DIFF_INSERT:\n        count_insert++;\n        text_insert += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_DELETE:\n        count_delete++;\n        text_delete += diffs[pointer][1];\n        pointer++;\n        break;\n      case DIFF_EQUAL:\n        // Upon reaching an equality, check for prior redundancies.\n        if (count_delete + count_insert > 1) {\n          if (count_delete !== 0 && count_insert !== 0) {\n            // Factor out any common prefixies.\n            commonlength = diff_commonPrefix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              if ((pointer - count_delete - count_insert) > 0 &&\n                  diffs[pointer - count_delete - count_insert - 1][0] ==\n                  DIFF_EQUAL) {\n                diffs[pointer - count_delete - count_insert - 1][1] +=\n                    text_insert.substring(0, commonlength);\n              } else {\n                diffs.splice(0, 0, [DIFF_EQUAL,\n                                    text_insert.substring(0, commonlength)]);\n                pointer++;\n              }\n              text_insert = text_insert.substring(commonlength);\n              text_delete = text_delete.substring(commonlength);\n            }\n            // Factor out any common suffixies.\n            commonlength = diff_commonSuffix(text_insert, text_delete);\n            if (commonlength !== 0) {\n              diffs[pointer][1] = text_insert.substring(text_insert.length -\n                  commonlength) + diffs[pointer][1];\n              text_insert = text_insert.substring(0, text_insert.length -\n                  commonlength);\n              text_delete = text_delete.substring(0, text_delete.length -\n                  commonlength);\n            }\n          }\n          // Delete the offending records and add the merged ones.\n          if (count_delete === 0) {\n            diffs.splice(pointer - count_insert,\n                count_delete + count_insert, [DIFF_INSERT, text_insert]);\n          } else if (count_insert === 0) {\n            diffs.splice(pointer - count_delete,\n                count_delete + count_insert, [DIFF_DELETE, text_delete]);\n          } else {\n            diffs.splice(pointer - count_delete - count_insert,\n                count_delete + count_insert, [DIFF_DELETE, text_delete],\n                [DIFF_INSERT, text_insert]);\n          }\n          pointer = pointer - count_delete - count_insert +\n                    (count_delete ? 1 : 0) + (count_insert ? 1 : 0) + 1;\n        } else if (pointer !== 0 && diffs[pointer - 1][0] == DIFF_EQUAL) {\n          // Merge this equality with the previous one.\n          diffs[pointer - 1][1] += diffs[pointer][1];\n          diffs.splice(pointer, 1);\n        } else {\n          pointer++;\n        }\n        count_insert = 0;\n        count_delete = 0;\n        text_delete = '';\n        text_insert = '';\n        break;\n    }\n  }\n  if (diffs[diffs.length - 1][1] === '') {\n    diffs.pop();  // Remove the dummy entry at the end.\n  }\n\n  // Second pass: look for single edits surrounded on both sides by equalities\n  // which can be shifted sideways to eliminate an equality.\n  // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC\n  var changes = false;\n  pointer = 1;\n  // Intentionally ignore the first and last element (don't need checking).\n  while (pointer < diffs.length - 1) {\n    if (diffs[pointer - 1][0] == DIFF_EQUAL &&\n        diffs[pointer + 1][0] == DIFF_EQUAL) {\n      // This is a single edit surrounded by equalities.\n      if (diffs[pointer][1].substring(diffs[pointer][1].length -\n          diffs[pointer - 1][1].length) == diffs[pointer - 1][1]) {\n        // Shift the edit over the previous equality.\n        diffs[pointer][1] = diffs[pointer - 1][1] +\n            diffs[pointer][1].substring(0, diffs[pointer][1].length -\n                                        diffs[pointer - 1][1].length);\n        diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];\n        diffs.splice(pointer - 1, 1);\n        changes = true;\n      } else if (diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) ==\n          diffs[pointer + 1][1]) {\n        // Shift the edit over the next equality.\n        diffs[pointer - 1][1] += diffs[pointer + 1][1];\n        diffs[pointer][1] =\n            diffs[pointer][1].substring(diffs[pointer + 1][1].length) +\n            diffs[pointer + 1][1];\n        diffs.splice(pointer + 1, 1);\n        changes = true;\n      }\n    }\n    pointer++;\n  }\n  // If shifts were made, the diff needs reordering and another shift sweep.\n  if (changes) {\n    diff_cleanupMerge(diffs);\n  }\n};\n\n\nvar diff = diff_main;\ndiff.INSERT = DIFF_INSERT;\ndiff.DELETE = DIFF_DELETE;\ndiff.EQUAL = DIFF_EQUAL;\n\nmodule.exports = diff;\n\n/*\n * Modify a diff such that the cursor position points to the start of a change:\n * E.g.\n *   cursor_normalize_diff([[DIFF_EQUAL, 'abc']], 1)\n *     => [1, [[DIFF_EQUAL, 'a'], [DIFF_EQUAL, 'bc']]]\n *   cursor_normalize_diff([[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xyz']], 2)\n *     => [2, [[DIFF_INSERT, 'new'], [DIFF_DELETE, 'xy'], [DIFF_DELETE, 'z']]]\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} A tuple [cursor location in the modified diff, modified diff]\n */\nfunction cursor_normalize_diff (diffs, cursor_pos) {\n  if (cursor_pos === 0) {\n    return [DIFF_EQUAL, diffs];\n  }\n  for (var current_pos = 0, i = 0; i < diffs.length; i++) {\n    var d = diffs[i];\n    if (d[0] === DIFF_DELETE || d[0] === DIFF_EQUAL) {\n      var next_pos = current_pos + d[1].length;\n      if (cursor_pos === next_pos) {\n        return [i + 1, diffs];\n      } else if (cursor_pos < next_pos) {\n        // copy to prevent side effects\n        diffs = diffs.slice();\n        // split d into two diff changes\n        var split_pos = cursor_pos - current_pos;\n        var d_left = [d[0], d[1].slice(0, split_pos)];\n        var d_right = [d[0], d[1].slice(split_pos)];\n        diffs.splice(i, 1, d_left, d_right);\n        return [i + 1, diffs];\n      } else {\n        current_pos = next_pos;\n      }\n    }\n  }\n  throw new Error('cursor_pos is out of bounds!')\n}\n\n/*\n * Modify a diff such that the edit position is \"shifted\" to the proposed edit location (cursor_position).\n *\n * Case 1)\n *   Check if a naive shift is possible:\n *     [0, X], [ 1, Y] -> [ 1, Y], [0, X]    (if X + Y === Y + X)\n *     [0, X], [-1, Y] -> [-1, Y], [0, X]    (if X + Y === Y + X) - holds same result\n * Case 2)\n *   Check if the following shifts are possible:\n *     [0, 'pre'], [ 1, 'prefix'] -> [ 1, 'pre'], [0, 'pre'], [ 1, 'fix']\n *     [0, 'pre'], [-1, 'prefix'] -> [-1, 'pre'], [0, 'pre'], [-1, 'fix']\n *         ^            ^\n *         d          d_next\n *\n * @param {Array} diffs Array of diff tuples\n * @param {Int} cursor_pos Suggested edit position. Must not be out of bounds!\n * @return {Array} Array of diff tuples\n */\nfunction fix_cursor (diffs, cursor_pos) {\n  var norm = cursor_normalize_diff(diffs, cursor_pos);\n  var ndiffs = norm[1];\n  var cursor_pointer = norm[0];\n  var d = ndiffs[cursor_pointer];\n  var d_next = ndiffs[cursor_pointer + 1];\n\n  if (d == null) {\n    // Text was deleted from end of original string,\n    // cursor is now out of bounds in new string\n    return diffs;\n  } else if (d[0] !== DIFF_EQUAL) {\n    // A modification happened at the cursor location.\n    // This is the expected outcome, so we can return the original diff.\n    return diffs;\n  } else {\n    if (d_next != null && d[1] + d_next[1] === d_next[1] + d[1]) {\n      // Case 1)\n      // It is possible to perform a naive shift\n      ndiffs.splice(cursor_pointer, 2, d_next, d)\n      return merge_tuples(ndiffs, cursor_pointer, 2)\n    } else if (d_next != null && d_next[1].indexOf(d[1]) === 0) {\n      // Case 2)\n      // d[1] is a prefix of d_next[1]\n      // We can assume that d_next[0] !== 0, since d[0] === 0\n      // Shift edit locations..\n      ndiffs.splice(cursor_pointer, 2, [d_next[0], d[1]], [0, d[1]]);\n      var suffix = d_next[1].slice(d[1].length);\n      if (suffix.length > 0) {\n        ndiffs.splice(cursor_pointer + 2, 0, [d_next[0], suffix]);\n      }\n      return merge_tuples(ndiffs, cursor_pointer, 3)\n    } else {\n      // Not possible to perform any modification\n      return diffs;\n    }\n  }\n}\n\n/*\n * Check diff did not split surrogate pairs.\n * Ex. [0, '\\uD83D'], [-1, '\\uDC36'], [1, '\\uDC2F'] -> [-1, '\\uD83D\\uDC36'], [1, '\\uD83D\\uDC2F']\n *     '\\uD83D\\uDC36' === '🐶', '\\uD83D\\uDC2F' === '🐯'\n *\n * @param {Array} diffs Array of diff tuples\n * @return {Array} Array of diff tuples\n */\nfunction fix_emoji (diffs) {\n  var compact = false;\n  var starts_with_pair_end = function(str) {\n    return str.charCodeAt(0) >= 0xDC00 && str.charCodeAt(0) <= 0xDFFF;\n  }\n  var ends_with_pair_start = function(str) {\n    return str.charCodeAt(str.length-1) >= 0xD800 && str.charCodeAt(str.length-1) <= 0xDBFF;\n  }\n  for (var i = 2; i < diffs.length; i += 1) {\n    if (diffs[i-2][0] === DIFF_EQUAL && ends_with_pair_start(diffs[i-2][1]) &&\n        diffs[i-1][0] === DIFF_DELETE && starts_with_pair_end(diffs[i-1][1]) &&\n        diffs[i][0] === DIFF_INSERT && starts_with_pair_end(diffs[i][1])) {\n      compact = true;\n\n      diffs[i-1][1] = diffs[i-2][1].slice(-1) + diffs[i-1][1];\n      diffs[i][1] = diffs[i-2][1].slice(-1) + diffs[i][1];\n\n      diffs[i-2][1] = diffs[i-2][1].slice(0, -1);\n    }\n  }\n  if (!compact) {\n    return diffs;\n  }\n  var fixed_diffs = [];\n  for (var i = 0; i < diffs.length; i += 1) {\n    if (diffs[i][1].length > 0) {\n      fixed_diffs.push(diffs[i]);\n    }\n  }\n  return fixed_diffs;\n}\n\n/*\n * Try to merge tuples with their neigbors in a given range.\n * E.g. [0, 'a'], [0, 'b'] -> [0, 'ab']\n *\n * @param {Array} diffs Array of diff tuples.\n * @param {Int} start Position of the first element to merge (diffs[start] is also merged with diffs[start - 1]).\n * @param {Int} length Number of consecutive elements to check.\n * @return {Array} Array of merged diff tuples.\n */\nfunction merge_tuples (diffs, start, length) {\n  // Check from (start-1) to (start+length).\n  for (var i = start + length - 1; i >= 0 && i >= start - 1; i--) {\n    if (i + 1 < diffs.length) {\n      var left_d = diffs[i];\n      var right_d = diffs[i+1];\n      if (left_d[0] === right_d[1]) {\n        diffs.splice(i, 2, [left_d[0], left_d[1] + right_d[1]]);\n      }\n    }\n  }\n  return diffs;\n}\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports) {\n\nexports = module.exports = typeof Object.keys === 'function'\n  ? Object.keys : shim;\n\nexports.shim = shim;\nfunction shim (obj) {\n  var keys = [];\n  for (var key in obj) keys.push(key);\n  return keys;\n}\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nvar supportsArgumentsClass = (function(){\n  return Object.prototype.toString.call(arguments)\n})() == '[object Arguments]';\n\nexports = module.exports = supportsArgumentsClass ? supported : unsupported;\n\nexports.supported = supported;\nfunction supported(object) {\n  return Object.prototype.toString.call(object) == '[object Arguments]';\n};\n\nexports.unsupported = unsupported;\nfunction unsupported(object){\n  return object &&\n    typeof object == 'object' &&\n    typeof object.length == 'number' &&\n    Object.prototype.hasOwnProperty.call(object, 'callee') &&\n    !Object.prototype.propertyIsEnumerable.call(object, 'callee') ||\n    false;\n};\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports) {\n\n'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @api private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {Mixed} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @api private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @api public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @api public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Boolean} exists Only check if there are listeners.\n * @returns {Array|Boolean}\n * @api public\n */\nEventEmitter.prototype.listeners = function listeners(event, exists) {\n  var evt = prefix ? prefix + event : event\n    , available = this._events[evt];\n\n  if (exists) return !!available;\n  if (!available) return [];\n  if (available.fn) return [available.fn];\n\n  for (var i = 0, l = available.length, ee = new Array(l); i < l; i++) {\n    ee[i] = available[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @api public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  var listener = new EE(fn, context || this)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn The listener function.\n * @param {Mixed} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  var listener = new EE(fn, context || this, true)\n    , evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) this._events[evt] = listener, this._eventsCount++;\n  else if (!this._events[evt].fn) this._events[evt].push(listener);\n  else this._events[evt] = [this._events[evt], listener];\n\n  return this;\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {String|Symbol} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {Mixed} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n         listeners.fn === fn\n      && (!once || listeners.once)\n      && (!context || listeners.context === context)\n    ) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n           listeners[i].fn !== fn\n        || (once && !listeners[i].once)\n        || (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else if (--this._eventsCount === 0) this._events = new Events();\n    else delete this._events[evt];\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {String|Symbol} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @api public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) {\n      if (--this._eventsCount === 0) this._events = new Events();\n      else delete this._events[evt];\n    }\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// This function doesn't apply anymore.\n//\nEventEmitter.prototype.setMaxListeners = function setMaxListeners() {\n  return this;\n};\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.matchText = exports.matchSpacing = exports.matchNewline = exports.matchBlot = exports.matchAttributor = exports.default = undefined;\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend2 = __webpack_require__(3);\n\nvar _extend3 = _interopRequireDefault(_extend2);\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _align = __webpack_require__(36);\n\nvar _background = __webpack_require__(37);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _color = __webpack_require__(26);\n\nvar _direction = __webpack_require__(38);\n\nvar _font = __webpack_require__(39);\n\nvar _size = __webpack_require__(40);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:clipboard');\n\nvar DOM_KEY = '__ql-matcher';\n\nvar CLIPBOARD_CONFIG = [[Node.TEXT_NODE, matchText], [Node.TEXT_NODE, matchNewline], ['br', matchBreak], [Node.ELEMENT_NODE, matchNewline], [Node.ELEMENT_NODE, matchBlot], [Node.ELEMENT_NODE, matchSpacing], [Node.ELEMENT_NODE, matchAttributor], [Node.ELEMENT_NODE, matchStyles], ['li', matchIndent], ['b', matchAlias.bind(matchAlias, 'bold')], ['i', matchAlias.bind(matchAlias, 'italic')], ['style', matchIgnore]];\n\nvar ATTRIBUTE_ATTRIBUTORS = [_align.AlignAttribute, _direction.DirectionAttribute].reduce(function (memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nvar STYLE_ATTRIBUTORS = [_align.AlignStyle, _background.BackgroundStyle, _color.ColorStyle, _direction.DirectionStyle, _font.FontStyle, _size.SizeStyle].reduce(function (memo, attr) {\n  memo[attr.keyName] = attr;\n  return memo;\n}, {});\n\nvar Clipboard = function (_Module) {\n  _inherits(Clipboard, _Module);\n\n  function Clipboard(quill, options) {\n    _classCallCheck(this, Clipboard);\n\n    var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this, quill, options));\n\n    _this.quill.root.addEventListener('paste', _this.onPaste.bind(_this));\n    _this.container = _this.quill.addContainer('ql-clipboard');\n    _this.container.setAttribute('contenteditable', true);\n    _this.container.setAttribute('tabindex', -1);\n    _this.matchers = [];\n    CLIPBOARD_CONFIG.concat(_this.options.matchers).forEach(function (_ref) {\n      var _ref2 = _slicedToArray(_ref, 2),\n          selector = _ref2[0],\n          matcher = _ref2[1];\n\n      if (!options.matchVisual && matcher === matchSpacing) return;\n      _this.addMatcher(selector, matcher);\n    });\n    return _this;\n  }\n\n  _createClass(Clipboard, [{\n    key: 'addMatcher',\n    value: function addMatcher(selector, matcher) {\n      this.matchers.push([selector, matcher]);\n    }\n  }, {\n    key: 'convert',\n    value: function convert(html) {\n      if (typeof html === 'string') {\n        this.container.innerHTML = html.replace(/\\>\\r?\\n +\\</g, '><'); // Remove spaces between tags\n        return this.convert();\n      }\n      var formats = this.quill.getFormat(this.quill.selection.savedRange.index);\n      if (formats[_code2.default.blotName]) {\n        var text = this.container.innerText;\n        this.container.innerHTML = '';\n        return new _quillDelta2.default().insert(text, _defineProperty({}, _code2.default.blotName, formats[_code2.default.blotName]));\n      }\n\n      var _prepareMatching = this.prepareMatching(),\n          _prepareMatching2 = _slicedToArray(_prepareMatching, 2),\n          elementMatchers = _prepareMatching2[0],\n          textMatchers = _prepareMatching2[1];\n\n      var delta = traverse(this.container, elementMatchers, textMatchers);\n      // Remove trailing newline\n      if (deltaEndsWith(delta, '\\n') && delta.ops[delta.ops.length - 1].attributes == null) {\n        delta = delta.compose(new _quillDelta2.default().retain(delta.length() - 1).delete(1));\n      }\n      debug.log('convert', this.container.innerHTML, delta);\n      this.container.innerHTML = '';\n      return delta;\n    }\n  }, {\n    key: 'dangerouslyPasteHTML',\n    value: function dangerouslyPasteHTML(index, html) {\n      var source = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _quill2.default.sources.API;\n\n      if (typeof index === 'string') {\n        this.quill.setContents(this.convert(index), html);\n        this.quill.setSelection(0, _quill2.default.sources.SILENT);\n      } else {\n        var paste = this.convert(html);\n        this.quill.updateContents(new _quillDelta2.default().retain(index).concat(paste), source);\n        this.quill.setSelection(index + paste.length(), _quill2.default.sources.SILENT);\n      }\n    }\n  }, {\n    key: 'onPaste',\n    value: function onPaste(e) {\n      var _this2 = this;\n\n      if (e.defaultPrevented || !this.quill.isEnabled()) return;\n      var range = this.quill.getSelection();\n      var delta = new _quillDelta2.default().retain(range.index);\n      var scrollTop = this.quill.scrollingContainer.scrollTop;\n      this.container.focus();\n      this.quill.selection.update(_quill2.default.sources.SILENT);\n      setTimeout(function () {\n        delta = delta.concat(_this2.convert()).delete(range.length);\n        _this2.quill.updateContents(delta, _quill2.default.sources.USER);\n        // range.length contributes to delta.length()\n        _this2.quill.setSelection(delta.length() - range.length, _quill2.default.sources.SILENT);\n        _this2.quill.scrollingContainer.scrollTop = scrollTop;\n        _this2.quill.focus();\n      }, 1);\n    }\n  }, {\n    key: 'prepareMatching',\n    value: function prepareMatching() {\n      var _this3 = this;\n\n      var elementMatchers = [],\n          textMatchers = [];\n      this.matchers.forEach(function (pair) {\n        var _pair = _slicedToArray(pair, 2),\n            selector = _pair[0],\n            matcher = _pair[1];\n\n        switch (selector) {\n          case Node.TEXT_NODE:\n            textMatchers.push(matcher);\n            break;\n          case Node.ELEMENT_NODE:\n            elementMatchers.push(matcher);\n            break;\n          default:\n            [].forEach.call(_this3.container.querySelectorAll(selector), function (node) {\n              // TODO use weakmap\n              node[DOM_KEY] = node[DOM_KEY] || [];\n              node[DOM_KEY].push(matcher);\n            });\n            break;\n        }\n      });\n      return [elementMatchers, textMatchers];\n    }\n  }]);\n\n  return Clipboard;\n}(_module2.default);\n\nClipboard.DEFAULTS = {\n  matchers: [],\n  matchVisual: true\n};\n\nfunction applyFormat(delta, format, value) {\n  if ((typeof format === 'undefined' ? 'undefined' : _typeof(format)) === 'object') {\n    return Object.keys(format).reduce(function (delta, key) {\n      return applyFormat(delta, key, format[key]);\n    }, delta);\n  } else {\n    return delta.reduce(function (delta, op) {\n      if (op.attributes && op.attributes[format]) {\n        return delta.push(op);\n      } else {\n        return delta.insert(op.insert, (0, _extend3.default)({}, _defineProperty({}, format, value), op.attributes));\n      }\n    }, new _quillDelta2.default());\n  }\n}\n\nfunction computeStyle(node) {\n  if (node.nodeType !== Node.ELEMENT_NODE) return {};\n  var DOM_KEY = '__ql-computed-style';\n  return node[DOM_KEY] || (node[DOM_KEY] = window.getComputedStyle(node));\n}\n\nfunction deltaEndsWith(delta, text) {\n  var endText = \"\";\n  for (var i = delta.ops.length - 1; i >= 0 && endText.length < text.length; --i) {\n    var op = delta.ops[i];\n    if (typeof op.insert !== 'string') break;\n    endText = op.insert + endText;\n  }\n  return endText.slice(-1 * text.length) === text;\n}\n\nfunction isLine(node) {\n  if (node.childNodes.length === 0) return false; // Exclude embed blocks\n  var style = computeStyle(node);\n  return ['block', 'list-item'].indexOf(style.display) > -1;\n}\n\nfunction traverse(node, elementMatchers, textMatchers) {\n  // Post-order\n  if (node.nodeType === node.TEXT_NODE) {\n    return textMatchers.reduce(function (delta, matcher) {\n      return matcher(node, delta);\n    }, new _quillDelta2.default());\n  } else if (node.nodeType === node.ELEMENT_NODE) {\n    return [].reduce.call(node.childNodes || [], function (delta, childNode) {\n      var childrenDelta = traverse(childNode, elementMatchers, textMatchers);\n      if (childNode.nodeType === node.ELEMENT_NODE) {\n        childrenDelta = elementMatchers.reduce(function (childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n        childrenDelta = (childNode[DOM_KEY] || []).reduce(function (childrenDelta, matcher) {\n          return matcher(childNode, childrenDelta);\n        }, childrenDelta);\n      }\n      return delta.concat(childrenDelta);\n    }, new _quillDelta2.default());\n  } else {\n    return new _quillDelta2.default();\n  }\n}\n\nfunction matchAlias(format, node, delta) {\n  return applyFormat(delta, format, true);\n}\n\nfunction matchAttributor(node, delta) {\n  var attributes = _parchment2.default.Attributor.Attribute.keys(node);\n  var classes = _parchment2.default.Attributor.Class.keys(node);\n  var styles = _parchment2.default.Attributor.Style.keys(node);\n  var formats = {};\n  attributes.concat(classes).concat(styles).forEach(function (name) {\n    var attr = _parchment2.default.query(name, _parchment2.default.Scope.ATTRIBUTE);\n    if (attr != null) {\n      formats[attr.attrName] = attr.value(node);\n      if (formats[attr.attrName]) return;\n    }\n    attr = ATTRIBUTE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n    attr = STYLE_ATTRIBUTORS[name];\n    if (attr != null && (attr.attrName === name || attr.keyName === name)) {\n      attr = STYLE_ATTRIBUTORS[name];\n      formats[attr.attrName] = attr.value(node) || undefined;\n    }\n  });\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  return delta;\n}\n\nfunction matchBlot(node, delta) {\n  var match = _parchment2.default.query(node);\n  if (match == null) return delta;\n  if (match.prototype instanceof _parchment2.default.Embed) {\n    var embed = {};\n    var value = match.value(node);\n    if (value != null) {\n      embed[match.blotName] = value;\n      delta = new _quillDelta2.default().insert(embed, match.formats(node));\n    }\n  } else if (typeof match.formats === 'function') {\n    delta = applyFormat(delta, match.blotName, match.formats(node));\n  }\n  return delta;\n}\n\nfunction matchBreak(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    delta.insert('\\n');\n  }\n  return delta;\n}\n\nfunction matchIgnore() {\n  return new _quillDelta2.default();\n}\n\nfunction matchIndent(node, delta) {\n  var match = _parchment2.default.query(node);\n  if (match == null || match.blotName !== 'list-item' || !deltaEndsWith(delta, '\\n')) {\n    return delta;\n  }\n  var indent = -1,\n      parent = node.parentNode;\n  while (!parent.classList.contains('ql-clipboard')) {\n    if ((_parchment2.default.query(parent) || {}).blotName === 'list') {\n      indent += 1;\n    }\n    parent = parent.parentNode;\n  }\n  if (indent <= 0) return delta;\n  return delta.compose(new _quillDelta2.default().retain(delta.length() - 1).retain(1, { indent: indent }));\n}\n\nfunction matchNewline(node, delta) {\n  if (!deltaEndsWith(delta, '\\n')) {\n    if (isLine(node) || delta.length() > 0 && node.nextSibling && isLine(node.nextSibling)) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchSpacing(node, delta) {\n  if (isLine(node) && node.nextElementSibling != null && !deltaEndsWith(delta, '\\n\\n')) {\n    var nodeHeight = node.offsetHeight + parseFloat(computeStyle(node).marginTop) + parseFloat(computeStyle(node).marginBottom);\n    if (node.nextElementSibling.offsetTop > node.offsetTop + nodeHeight * 1.5) {\n      delta.insert('\\n');\n    }\n  }\n  return delta;\n}\n\nfunction matchStyles(node, delta) {\n  var formats = {};\n  var style = node.style || {};\n  if (style.fontStyle && computeStyle(node).fontStyle === 'italic') {\n    formats.italic = true;\n  }\n  if (style.fontWeight && (computeStyle(node).fontWeight.startsWith('bold') || parseInt(computeStyle(node).fontWeight) >= 700)) {\n    formats.bold = true;\n  }\n  if (Object.keys(formats).length > 0) {\n    delta = applyFormat(delta, formats);\n  }\n  if (parseFloat(style.textIndent || 0) > 0) {\n    // Could be 0.5in\n    delta = new _quillDelta2.default().insert('\\t').concat(delta);\n  }\n  return delta;\n}\n\nfunction matchText(node, delta) {\n  var text = node.data;\n  // Word represents empty line with <o:p>&nbsp;</o:p>\n  if (node.parentNode.tagName === 'O:P') {\n    return delta.insert(text.trim());\n  }\n  if (text.trim().length === 0 && node.parentNode.classList.contains('ql-clipboard')) {\n    return delta;\n  }\n  if (!computeStyle(node.parentNode).whiteSpace.startsWith('pre')) {\n    // eslint-disable-next-line func-style\n    var replacer = function replacer(collapse, match) {\n      match = match.replace(/[^\\u00a0]/g, ''); // \\u00a0 is nbsp;\n      return match.length < 1 && collapse ? ' ' : match;\n    };\n    text = text.replace(/\\r\\n/g, ' ').replace(/\\n/g, ' ');\n    text = text.replace(/\\s\\s+/g, replacer.bind(replacer, true)); // collapse whitespace\n    if (node.previousSibling == null && isLine(node.parentNode) || node.previousSibling != null && isLine(node.previousSibling)) {\n      text = text.replace(/^\\s+/, replacer.bind(replacer, false));\n    }\n    if (node.nextSibling == null && isLine(node.parentNode) || node.nextSibling != null && isLine(node.nextSibling)) {\n      text = text.replace(/\\s+$/, replacer.bind(replacer, false));\n    }\n  }\n  return delta.insert(text);\n}\n\nexports.default = Clipboard;\nexports.matchAttributor = matchAttributor;\nexports.matchBlot = matchBlot;\nexports.matchNewline = matchNewline;\nexports.matchSpacing = matchSpacing;\nexports.matchText = matchText;\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Bold = function (_Inline) {\n  _inherits(Bold, _Inline);\n\n  function Bold() {\n    _classCallCheck(this, Bold);\n\n    return _possibleConstructorReturn(this, (Bold.__proto__ || Object.getPrototypeOf(Bold)).apply(this, arguments));\n  }\n\n  _createClass(Bold, [{\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(Bold.prototype.__proto__ || Object.getPrototypeOf(Bold.prototype), 'optimize', this).call(this, context);\n      if (this.domNode.tagName !== this.statics.tagName[0]) {\n        this.replaceWith(this.statics.blotName);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create() {\n      return _get(Bold.__proto__ || Object.getPrototypeOf(Bold), 'create', this).call(this);\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      return true;\n    }\n  }]);\n\n  return Bold;\n}(_inline2.default);\n\nBold.blotName = 'bold';\nBold.tagName = ['STRONG', 'B'];\n\nexports.default = Bold;\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.addControls = exports.default = undefined;\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _quillDelta = __webpack_require__(2);\n\nvar _quillDelta2 = _interopRequireDefault(_quillDelta);\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _logger = __webpack_require__(10);\n\nvar _logger2 = _interopRequireDefault(_logger);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar debug = (0, _logger2.default)('quill:toolbar');\n\nvar Toolbar = function (_Module) {\n  _inherits(Toolbar, _Module);\n\n  function Toolbar(quill, options) {\n    _classCallCheck(this, Toolbar);\n\n    var _this = _possibleConstructorReturn(this, (Toolbar.__proto__ || Object.getPrototypeOf(Toolbar)).call(this, quill, options));\n\n    if (Array.isArray(_this.options.container)) {\n      var container = document.createElement('div');\n      addControls(container, _this.options.container);\n      quill.container.parentNode.insertBefore(container, quill.container);\n      _this.container = container;\n    } else if (typeof _this.options.container === 'string') {\n      _this.container = document.querySelector(_this.options.container);\n    } else {\n      _this.container = _this.options.container;\n    }\n    if (!(_this.container instanceof HTMLElement)) {\n      var _ret;\n\n      return _ret = debug.error('Container required for toolbar', _this.options), _possibleConstructorReturn(_this, _ret);\n    }\n    _this.container.classList.add('ql-toolbar');\n    _this.controls = [];\n    _this.handlers = {};\n    Object.keys(_this.options.handlers).forEach(function (format) {\n      _this.addHandler(format, _this.options.handlers[format]);\n    });\n    [].forEach.call(_this.container.querySelectorAll('button, select'), function (input) {\n      _this.attach(input);\n    });\n    _this.quill.on(_quill2.default.events.EDITOR_CHANGE, function (type, range) {\n      if (type === _quill2.default.events.SELECTION_CHANGE) {\n        _this.update(range);\n      }\n    });\n    _this.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n      var _this$quill$selection = _this.quill.selection.getRange(),\n          _this$quill$selection2 = _slicedToArray(_this$quill$selection, 1),\n          range = _this$quill$selection2[0]; // quill.getSelection triggers update\n\n\n      _this.update(range);\n    });\n    return _this;\n  }\n\n  _createClass(Toolbar, [{\n    key: 'addHandler',\n    value: function addHandler(format, handler) {\n      this.handlers[format] = handler;\n    }\n  }, {\n    key: 'attach',\n    value: function attach(input) {\n      var _this2 = this;\n\n      var format = [].find.call(input.classList, function (className) {\n        return className.indexOf('ql-') === 0;\n      });\n      if (!format) return;\n      format = format.slice('ql-'.length);\n      if (input.tagName === 'BUTTON') {\n        input.setAttribute('type', 'button');\n      }\n      if (this.handlers[format] == null) {\n        if (this.quill.scroll.whitelist != null && this.quill.scroll.whitelist[format] == null) {\n          debug.warn('ignoring attaching to disabled format', format, input);\n          return;\n        }\n        if (_parchment2.default.query(format) == null) {\n          debug.warn('ignoring attaching to nonexistent format', format, input);\n          return;\n        }\n      }\n      var eventName = input.tagName === 'SELECT' ? 'change' : 'click';\n      input.addEventListener(eventName, function (e) {\n        var value = void 0;\n        if (input.tagName === 'SELECT') {\n          if (input.selectedIndex < 0) return;\n          var selected = input.options[input.selectedIndex];\n          if (selected.hasAttribute('selected')) {\n            value = false;\n          } else {\n            value = selected.value || false;\n          }\n        } else {\n          if (input.classList.contains('ql-active')) {\n            value = false;\n          } else {\n            value = input.value || !input.hasAttribute('value');\n          }\n          e.preventDefault();\n        }\n        _this2.quill.focus();\n\n        var _quill$selection$getR = _this2.quill.selection.getRange(),\n            _quill$selection$getR2 = _slicedToArray(_quill$selection$getR, 1),\n            range = _quill$selection$getR2[0];\n\n        if (_this2.handlers[format] != null) {\n          _this2.handlers[format].call(_this2, value);\n        } else if (_parchment2.default.query(format).prototype instanceof _parchment2.default.Embed) {\n          value = prompt('Enter ' + format);\n          if (!value) return;\n          _this2.quill.updateContents(new _quillDelta2.default().retain(range.index).delete(range.length).insert(_defineProperty({}, format, value)), _quill2.default.sources.USER);\n        } else {\n          _this2.quill.format(format, value, _quill2.default.sources.USER);\n        }\n        _this2.update(range);\n      });\n      // TODO use weakmap\n      this.controls.push([format, input]);\n    }\n  }, {\n    key: 'update',\n    value: function update(range) {\n      var formats = range == null ? {} : this.quill.getFormat(range);\n      this.controls.forEach(function (pair) {\n        var _pair = _slicedToArray(pair, 2),\n            format = _pair[0],\n            input = _pair[1];\n\n        if (input.tagName === 'SELECT') {\n          var option = void 0;\n          if (range == null) {\n            option = null;\n          } else if (formats[format] == null) {\n            option = input.querySelector('option[selected]');\n          } else if (!Array.isArray(formats[format])) {\n            var value = formats[format];\n            if (typeof value === 'string') {\n              value = value.replace(/\\\"/g, '\\\\\"');\n            }\n            option = input.querySelector('option[value=\"' + value + '\"]');\n          }\n          if (option == null) {\n            input.value = ''; // TODO make configurable?\n            input.selectedIndex = -1;\n          } else {\n            option.selected = true;\n          }\n        } else {\n          if (range == null) {\n            input.classList.remove('ql-active');\n          } else if (input.hasAttribute('value')) {\n            // both being null should match (default values)\n            // '1' should match with 1 (headers)\n            var isActive = formats[format] === input.getAttribute('value') || formats[format] != null && formats[format].toString() === input.getAttribute('value') || formats[format] == null && !input.getAttribute('value');\n            input.classList.toggle('ql-active', isActive);\n          } else {\n            input.classList.toggle('ql-active', formats[format] != null);\n          }\n        }\n      });\n    }\n  }]);\n\n  return Toolbar;\n}(_module2.default);\n\nToolbar.DEFAULTS = {};\n\nfunction addButton(container, format, value) {\n  var input = document.createElement('button');\n  input.setAttribute('type', 'button');\n  input.classList.add('ql-' + format);\n  if (value != null) {\n    input.value = value;\n  }\n  container.appendChild(input);\n}\n\nfunction addControls(container, groups) {\n  if (!Array.isArray(groups[0])) {\n    groups = [groups];\n  }\n  groups.forEach(function (controls) {\n    var group = document.createElement('span');\n    group.classList.add('ql-formats');\n    controls.forEach(function (control) {\n      if (typeof control === 'string') {\n        addButton(group, control);\n      } else {\n        var format = Object.keys(control)[0];\n        var value = control[format];\n        if (Array.isArray(value)) {\n          addSelect(group, format, value);\n        } else {\n          addButton(group, format, value);\n        }\n      }\n    });\n    container.appendChild(group);\n  });\n}\n\nfunction addSelect(container, format, values) {\n  var input = document.createElement('select');\n  input.classList.add('ql-' + format);\n  values.forEach(function (value) {\n    var option = document.createElement('option');\n    if (value !== false) {\n      option.setAttribute('value', value);\n    } else {\n      option.setAttribute('selected', 'selected');\n    }\n    input.appendChild(option);\n  });\n  container.appendChild(input);\n}\n\nToolbar.DEFAULTS = {\n  container: null,\n  handlers: {\n    clean: function clean() {\n      var _this3 = this;\n\n      var range = this.quill.getSelection();\n      if (range == null) return;\n      if (range.length == 0) {\n        var formats = this.quill.getFormat();\n        Object.keys(formats).forEach(function (name) {\n          // Clean functionality in existing apps only clean inline formats\n          if (_parchment2.default.query(name, _parchment2.default.Scope.INLINE) != null) {\n            _this3.quill.format(name, false);\n          }\n        });\n      } else {\n        this.quill.removeFormat(range, _quill2.default.sources.USER);\n      }\n    },\n    direction: function direction(value) {\n      var align = this.quill.getFormat()['align'];\n      if (value === 'rtl' && align == null) {\n        this.quill.format('align', 'right', _quill2.default.sources.USER);\n      } else if (!value && align === 'right') {\n        this.quill.format('align', false, _quill2.default.sources.USER);\n      }\n      this.quill.format('direction', value, _quill2.default.sources.USER);\n    },\n    indent: function indent(value) {\n      var range = this.quill.getSelection();\n      var formats = this.quill.getFormat(range);\n      var indent = parseInt(formats.indent || 0);\n      if (value === '+1' || value === '-1') {\n        var modifier = value === '+1' ? 1 : -1;\n        if (formats.direction === 'rtl') modifier *= -1;\n        this.quill.format('indent', indent + modifier, _quill2.default.sources.USER);\n      }\n    },\n    link: function link(value) {\n      if (value === true) {\n        value = prompt('Enter link URL:');\n      }\n      this.quill.format('link', value, _quill2.default.sources.USER);\n    },\n    list: function list(value) {\n      var range = this.quill.getSelection();\n      var formats = this.quill.getFormat(range);\n      if (value === 'check') {\n        if (formats['list'] === 'checked' || formats['list'] === 'unchecked') {\n          this.quill.format('list', false, _quill2.default.sources.USER);\n        } else {\n          this.quill.format('list', 'unchecked', _quill2.default.sources.USER);\n        }\n      } else {\n        this.quill.format('list', value, _quill2.default.sources.USER);\n      }\n    }\n  }\n};\n\nexports.default = Toolbar;\nexports.addControls = addControls;\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"5 7 3 9 5 11\\\"></polyline> <polyline class=\\\"ql-even ql-stroke\\\" points=\\\"13 7 15 9 13 11\\\"></polyline> <line class=ql-stroke x1=10 x2=8 y1=5 y2=13></line> </svg>\";\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ColorPicker = function (_Picker) {\n  _inherits(ColorPicker, _Picker);\n\n  function ColorPicker(select, label) {\n    _classCallCheck(this, ColorPicker);\n\n    var _this = _possibleConstructorReturn(this, (ColorPicker.__proto__ || Object.getPrototypeOf(ColorPicker)).call(this, select));\n\n    _this.label.innerHTML = label;\n    _this.container.classList.add('ql-color-picker');\n    [].slice.call(_this.container.querySelectorAll('.ql-picker-item'), 0, 7).forEach(function (item) {\n      item.classList.add('ql-primary');\n    });\n    return _this;\n  }\n\n  _createClass(ColorPicker, [{\n    key: 'buildItem',\n    value: function buildItem(option) {\n      var item = _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'buildItem', this).call(this, option);\n      item.style.backgroundColor = option.getAttribute('value') || '';\n      return item;\n    }\n  }, {\n    key: 'selectItem',\n    value: function selectItem(item, trigger) {\n      _get(ColorPicker.prototype.__proto__ || Object.getPrototypeOf(ColorPicker.prototype), 'selectItem', this).call(this, item, trigger);\n      var colorLabel = this.label.querySelector('.ql-color-label');\n      var value = item ? item.getAttribute('data-value') || '' : '';\n      if (colorLabel) {\n        if (colorLabel.tagName === 'line') {\n          colorLabel.style.stroke = value;\n        } else {\n          colorLabel.style.fill = value;\n        }\n      }\n    }\n  }]);\n\n  return ColorPicker;\n}(_picker2.default);\n\nexports.default = ColorPicker;\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IconPicker = function (_Picker) {\n  _inherits(IconPicker, _Picker);\n\n  function IconPicker(select, icons) {\n    _classCallCheck(this, IconPicker);\n\n    var _this = _possibleConstructorReturn(this, (IconPicker.__proto__ || Object.getPrototypeOf(IconPicker)).call(this, select));\n\n    _this.container.classList.add('ql-icon-picker');\n    [].forEach.call(_this.container.querySelectorAll('.ql-picker-item'), function (item) {\n      item.innerHTML = icons[item.getAttribute('data-value') || ''];\n    });\n    _this.defaultItem = _this.container.querySelector('.ql-selected');\n    _this.selectItem(_this.defaultItem);\n    return _this;\n  }\n\n  _createClass(IconPicker, [{\n    key: 'selectItem',\n    value: function selectItem(item, trigger) {\n      _get(IconPicker.prototype.__proto__ || Object.getPrototypeOf(IconPicker.prototype), 'selectItem', this).call(this, item, trigger);\n      item = item || this.defaultItem;\n      this.label.innerHTML = item.innerHTML;\n    }\n  }]);\n\n  return IconPicker;\n}(_picker2.default);\n\nexports.default = IconPicker;\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Tooltip = function () {\n  function Tooltip(quill, boundsContainer) {\n    var _this = this;\n\n    _classCallCheck(this, Tooltip);\n\n    this.quill = quill;\n    this.boundsContainer = boundsContainer || document.body;\n    this.root = quill.addContainer('ql-tooltip');\n    this.root.innerHTML = this.constructor.TEMPLATE;\n    if (this.quill.root === this.quill.scrollingContainer) {\n      this.quill.root.addEventListener('scroll', function () {\n        _this.root.style.marginTop = -1 * _this.quill.root.scrollTop + 'px';\n      });\n    }\n    this.hide();\n  }\n\n  _createClass(Tooltip, [{\n    key: 'hide',\n    value: function hide() {\n      this.root.classList.add('ql-hidden');\n    }\n  }, {\n    key: 'position',\n    value: function position(reference) {\n      var left = reference.left + reference.width / 2 - this.root.offsetWidth / 2;\n      // root.scrollTop should be 0 if scrollContainer !== root\n      var top = reference.bottom + this.quill.root.scrollTop;\n      this.root.style.left = left + 'px';\n      this.root.style.top = top + 'px';\n      this.root.classList.remove('ql-flip');\n      var containerBounds = this.boundsContainer.getBoundingClientRect();\n      var rootBounds = this.root.getBoundingClientRect();\n      var shift = 0;\n      if (rootBounds.right > containerBounds.right) {\n        shift = containerBounds.right - rootBounds.right;\n        this.root.style.left = left + shift + 'px';\n      }\n      if (rootBounds.left < containerBounds.left) {\n        shift = containerBounds.left - rootBounds.left;\n        this.root.style.left = left + shift + 'px';\n      }\n      if (rootBounds.bottom > containerBounds.bottom) {\n        var height = rootBounds.bottom - rootBounds.top;\n        var verticalShift = reference.bottom - reference.top + height;\n        this.root.style.top = top - verticalShift + 'px';\n        this.root.classList.add('ql-flip');\n      }\n      return shift;\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      this.root.classList.remove('ql-editing');\n      this.root.classList.remove('ql-hidden');\n    }\n  }]);\n\n  return Tooltip;\n}();\n\nexports.default = Tooltip;\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(43);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _selection = __webpack_require__(15);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [[{ header: ['1', '2', '3', false] }], ['bold', 'italic', 'underline', 'link'], [{ list: 'ordered' }, { list: 'bullet' }], ['clean']];\n\nvar SnowTheme = function (_BaseTheme) {\n  _inherits(SnowTheme, _BaseTheme);\n\n  function SnowTheme(quill, options) {\n    _classCallCheck(this, SnowTheme);\n\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n\n    var _this = _possibleConstructorReturn(this, (SnowTheme.__proto__ || Object.getPrototypeOf(SnowTheme)).call(this, quill, options));\n\n    _this.quill.container.classList.add('ql-snow');\n    return _this;\n  }\n\n  _createClass(SnowTheme, [{\n    key: 'extendToolbar',\n    value: function extendToolbar(toolbar) {\n      toolbar.container.classList.add('ql-snow');\n      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n      this.tooltip = new SnowTooltip(this.quill, this.options.bounds);\n      if (toolbar.container.querySelector('.ql-link')) {\n        this.quill.keyboard.addBinding({ key: 'K', shortKey: true }, function (range, context) {\n          toolbar.handlers['link'].call(toolbar, !context.format.link);\n        });\n      }\n    }\n  }]);\n\n  return SnowTheme;\n}(_base2.default);\n\nSnowTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function link(value) {\n          if (value) {\n            var range = this.quill.getSelection();\n            if (range == null || range.length == 0) return;\n            var preview = this.quill.getText(range);\n            if (/^\\S+@\\S+\\.\\S+$/.test(preview) && preview.indexOf('mailto:') !== 0) {\n              preview = 'mailto:' + preview;\n            }\n            var tooltip = this.quill.theme.tooltip;\n            tooltip.edit('link', preview);\n          } else {\n            this.quill.format('link', false);\n          }\n        }\n      }\n    }\n  }\n});\n\nvar SnowTooltip = function (_BaseTooltip) {\n  _inherits(SnowTooltip, _BaseTooltip);\n\n  function SnowTooltip(quill, bounds) {\n    _classCallCheck(this, SnowTooltip);\n\n    var _this2 = _possibleConstructorReturn(this, (SnowTooltip.__proto__ || Object.getPrototypeOf(SnowTooltip)).call(this, quill, bounds));\n\n    _this2.preview = _this2.root.querySelector('a.ql-preview');\n    return _this2;\n  }\n\n  _createClass(SnowTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this3 = this;\n\n      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'listen', this).call(this);\n      this.root.querySelector('a.ql-action').addEventListener('click', function (event) {\n        if (_this3.root.classList.contains('ql-editing')) {\n          _this3.save();\n        } else {\n          _this3.edit('link', _this3.preview.textContent);\n        }\n        event.preventDefault();\n      });\n      this.root.querySelector('a.ql-remove').addEventListener('click', function (event) {\n        if (_this3.linkRange != null) {\n          var range = _this3.linkRange;\n          _this3.restoreFocus();\n          _this3.quill.formatText(range, 'link', false, _emitter2.default.sources.USER);\n          delete _this3.linkRange;\n        }\n        event.preventDefault();\n        _this3.hide();\n      });\n      this.quill.on(_emitter2.default.events.SELECTION_CHANGE, function (range, oldRange, source) {\n        if (range == null) return;\n        if (range.length === 0 && source === _emitter2.default.sources.USER) {\n          var _quill$scroll$descend = _this3.quill.scroll.descendant(_link2.default, range.index),\n              _quill$scroll$descend2 = _slicedToArray(_quill$scroll$descend, 2),\n              link = _quill$scroll$descend2[0],\n              offset = _quill$scroll$descend2[1];\n\n          if (link != null) {\n            _this3.linkRange = new _selection.Range(range.index - offset, link.length());\n            var preview = _link2.default.formats(link.domNode);\n            _this3.preview.textContent = preview;\n            _this3.preview.setAttribute('href', preview);\n            _this3.show();\n            _this3.position(_this3.quill.getBounds(_this3.linkRange));\n            return;\n          }\n        } else {\n          delete _this3.linkRange;\n        }\n        _this3.hide();\n      });\n    }\n  }, {\n    key: 'show',\n    value: function show() {\n      _get(SnowTooltip.prototype.__proto__ || Object.getPrototypeOf(SnowTooltip.prototype), 'show', this).call(this);\n      this.root.removeAttribute('data-mode');\n    }\n  }]);\n\n  return SnowTooltip;\n}(_base.BaseTooltip);\n\nSnowTooltip.TEMPLATE = ['<a class=\"ql-preview\" rel=\"noopener noreferrer\" target=\"_blank\" href=\"about:blank\"></a>', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-action\"></a>', '<a class=\"ql-remove\"></a>'].join('');\n\nexports.default = SnowTheme;\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _core = __webpack_require__(29);\n\nvar _core2 = _interopRequireDefault(_core);\n\nvar _align = __webpack_require__(36);\n\nvar _direction = __webpack_require__(38);\n\nvar _indent = __webpack_require__(64);\n\nvar _blockquote = __webpack_require__(65);\n\nvar _blockquote2 = _interopRequireDefault(_blockquote);\n\nvar _header = __webpack_require__(66);\n\nvar _header2 = _interopRequireDefault(_header);\n\nvar _list = __webpack_require__(67);\n\nvar _list2 = _interopRequireDefault(_list);\n\nvar _background = __webpack_require__(37);\n\nvar _color = __webpack_require__(26);\n\nvar _font = __webpack_require__(39);\n\nvar _size = __webpack_require__(40);\n\nvar _bold = __webpack_require__(56);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nvar _italic = __webpack_require__(68);\n\nvar _italic2 = _interopRequireDefault(_italic);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nvar _script = __webpack_require__(69);\n\nvar _script2 = _interopRequireDefault(_script);\n\nvar _strike = __webpack_require__(70);\n\nvar _strike2 = _interopRequireDefault(_strike);\n\nvar _underline = __webpack_require__(71);\n\nvar _underline2 = _interopRequireDefault(_underline);\n\nvar _image = __webpack_require__(72);\n\nvar _image2 = _interopRequireDefault(_image);\n\nvar _video = __webpack_require__(73);\n\nvar _video2 = _interopRequireDefault(_video);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nvar _formula = __webpack_require__(74);\n\nvar _formula2 = _interopRequireDefault(_formula);\n\nvar _syntax = __webpack_require__(75);\n\nvar _syntax2 = _interopRequireDefault(_syntax);\n\nvar _toolbar = __webpack_require__(57);\n\nvar _toolbar2 = _interopRequireDefault(_toolbar);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nvar _picker = __webpack_require__(28);\n\nvar _picker2 = _interopRequireDefault(_picker);\n\nvar _colorPicker = __webpack_require__(59);\n\nvar _colorPicker2 = _interopRequireDefault(_colorPicker);\n\nvar _iconPicker = __webpack_require__(60);\n\nvar _iconPicker2 = _interopRequireDefault(_iconPicker);\n\nvar _tooltip = __webpack_require__(61);\n\nvar _tooltip2 = _interopRequireDefault(_tooltip);\n\nvar _bubble = __webpack_require__(108);\n\nvar _bubble2 = _interopRequireDefault(_bubble);\n\nvar _snow = __webpack_require__(62);\n\nvar _snow2 = _interopRequireDefault(_snow);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n_core2.default.register({\n  'attributors/attribute/direction': _direction.DirectionAttribute,\n\n  'attributors/class/align': _align.AlignClass,\n  'attributors/class/background': _background.BackgroundClass,\n  'attributors/class/color': _color.ColorClass,\n  'attributors/class/direction': _direction.DirectionClass,\n  'attributors/class/font': _font.FontClass,\n  'attributors/class/size': _size.SizeClass,\n\n  'attributors/style/align': _align.AlignStyle,\n  'attributors/style/background': _background.BackgroundStyle,\n  'attributors/style/color': _color.ColorStyle,\n  'attributors/style/direction': _direction.DirectionStyle,\n  'attributors/style/font': _font.FontStyle,\n  'attributors/style/size': _size.SizeStyle\n}, true);\n\n_core2.default.register({\n  'formats/align': _align.AlignClass,\n  'formats/direction': _direction.DirectionClass,\n  'formats/indent': _indent.IndentClass,\n\n  'formats/background': _background.BackgroundStyle,\n  'formats/color': _color.ColorStyle,\n  'formats/font': _font.FontClass,\n  'formats/size': _size.SizeClass,\n\n  'formats/blockquote': _blockquote2.default,\n  'formats/code-block': _code2.default,\n  'formats/header': _header2.default,\n  'formats/list': _list2.default,\n\n  'formats/bold': _bold2.default,\n  'formats/code': _code.Code,\n  'formats/italic': _italic2.default,\n  'formats/link': _link2.default,\n  'formats/script': _script2.default,\n  'formats/strike': _strike2.default,\n  'formats/underline': _underline2.default,\n\n  'formats/image': _image2.default,\n  'formats/video': _video2.default,\n\n  'formats/list/item': _list.ListItem,\n\n  'modules/formula': _formula2.default,\n  'modules/syntax': _syntax2.default,\n  'modules/toolbar': _toolbar2.default,\n\n  'themes/bubble': _bubble2.default,\n  'themes/snow': _snow2.default,\n\n  'ui/icons': _icons2.default,\n  'ui/picker': _picker2.default,\n  'ui/icon-picker': _iconPicker2.default,\n  'ui/color-picker': _colorPicker2.default,\n  'ui/tooltip': _tooltip2.default\n}, true);\n\nexports.default = _core2.default;\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.IndentClass = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar IdentAttributor = function (_Parchment$Attributor) {\n  _inherits(IdentAttributor, _Parchment$Attributor);\n\n  function IdentAttributor() {\n    _classCallCheck(this, IdentAttributor);\n\n    return _possibleConstructorReturn(this, (IdentAttributor.__proto__ || Object.getPrototypeOf(IdentAttributor)).apply(this, arguments));\n  }\n\n  _createClass(IdentAttributor, [{\n    key: 'add',\n    value: function add(node, value) {\n      if (value === '+1' || value === '-1') {\n        var indent = this.value(node) || 0;\n        value = value === '+1' ? indent + 1 : indent - 1;\n      }\n      if (value === 0) {\n        this.remove(node);\n        return true;\n      } else {\n        return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'add', this).call(this, node, value);\n      }\n    }\n  }, {\n    key: 'canAdd',\n    value: function canAdd(node, value) {\n      return _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, value) || _get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'canAdd', this).call(this, node, parseInt(value));\n    }\n  }, {\n    key: 'value',\n    value: function value(node) {\n      return parseInt(_get(IdentAttributor.prototype.__proto__ || Object.getPrototypeOf(IdentAttributor.prototype), 'value', this).call(this, node)) || undefined; // Don't return NaN\n    }\n  }]);\n\n  return IdentAttributor;\n}(_parchment2.default.Attributor.Class);\n\nvar IndentClass = new IdentAttributor('indent', 'ql-indent', {\n  scope: _parchment2.default.Scope.BLOCK,\n  whitelist: [1, 2, 3, 4, 5, 6, 7, 8]\n});\n\nexports.IndentClass = IndentClass;\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Blockquote = function (_Block) {\n  _inherits(Blockquote, _Block);\n\n  function Blockquote() {\n    _classCallCheck(this, Blockquote);\n\n    return _possibleConstructorReturn(this, (Blockquote.__proto__ || Object.getPrototypeOf(Blockquote)).apply(this, arguments));\n  }\n\n  return Blockquote;\n}(_block2.default);\n\nBlockquote.blotName = 'blockquote';\nBlockquote.tagName = 'blockquote';\n\nexports.default = Blockquote;\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Header = function (_Block) {\n  _inherits(Header, _Block);\n\n  function Header() {\n    _classCallCheck(this, Header);\n\n    return _possibleConstructorReturn(this, (Header.__proto__ || Object.getPrototypeOf(Header)).apply(this, arguments));\n  }\n\n  _createClass(Header, null, [{\n    key: 'formats',\n    value: function formats(domNode) {\n      return this.tagName.indexOf(domNode.tagName) + 1;\n    }\n  }]);\n\n  return Header;\n}(_block2.default);\n\nHeader.blotName = 'header';\nHeader.tagName = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6'];\n\nexports.default = Header;\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.ListItem = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _block = __webpack_require__(4);\n\nvar _block2 = _interopRequireDefault(_block);\n\nvar _container = __webpack_require__(25);\n\nvar _container2 = _interopRequireDefault(_container);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ListItem = function (_Block) {\n  _inherits(ListItem, _Block);\n\n  function ListItem() {\n    _classCallCheck(this, ListItem);\n\n    return _possibleConstructorReturn(this, (ListItem.__proto__ || Object.getPrototypeOf(ListItem)).apply(this, arguments));\n  }\n\n  _createClass(ListItem, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (name === List.blotName && !value) {\n        this.replaceWith(_parchment2.default.create(this.statics.scope));\n      } else {\n        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }, {\n    key: 'remove',\n    value: function remove() {\n      if (this.prev == null && this.next == null) {\n        this.parent.remove();\n      } else {\n        _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'remove', this).call(this);\n      }\n    }\n  }, {\n    key: 'replaceWith',\n    value: function replaceWith(name, value) {\n      this.parent.isolate(this.offset(this.parent), this.length());\n      if (name === this.parent.statics.blotName) {\n        this.parent.replaceWith(name, value);\n        return this;\n      } else {\n        this.parent.unwrap();\n        return _get(ListItem.prototype.__proto__ || Object.getPrototypeOf(ListItem.prototype), 'replaceWith', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'formats',\n    value: function formats(domNode) {\n      return domNode.tagName === this.tagName ? undefined : _get(ListItem.__proto__ || Object.getPrototypeOf(ListItem), 'formats', this).call(this, domNode);\n    }\n  }]);\n\n  return ListItem;\n}(_block2.default);\n\nListItem.blotName = 'list-item';\nListItem.tagName = 'LI';\n\nvar List = function (_Container) {\n  _inherits(List, _Container);\n\n  _createClass(List, null, [{\n    key: 'create',\n    value: function create(value) {\n      var tagName = value === 'ordered' ? 'OL' : 'UL';\n      var node = _get(List.__proto__ || Object.getPrototypeOf(List), 'create', this).call(this, tagName);\n      if (value === 'checked' || value === 'unchecked') {\n        node.setAttribute('data-checked', value === 'checked');\n      }\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      if (domNode.tagName === 'OL') return 'ordered';\n      if (domNode.tagName === 'UL') {\n        if (domNode.hasAttribute('data-checked')) {\n          return domNode.getAttribute('data-checked') === 'true' ? 'checked' : 'unchecked';\n        } else {\n          return 'bullet';\n        }\n      }\n      return undefined;\n    }\n  }]);\n\n  function List(domNode) {\n    _classCallCheck(this, List);\n\n    var _this2 = _possibleConstructorReturn(this, (List.__proto__ || Object.getPrototypeOf(List)).call(this, domNode));\n\n    var listEventHandler = function listEventHandler(e) {\n      if (e.target.parentNode !== domNode) return;\n      var format = _this2.statics.formats(domNode);\n      var blot = _parchment2.default.find(e.target);\n      if (format === 'checked') {\n        blot.format('list', 'unchecked');\n      } else if (format === 'unchecked') {\n        blot.format('list', 'checked');\n      }\n    };\n\n    domNode.addEventListener('touchstart', listEventHandler);\n    domNode.addEventListener('mousedown', listEventHandler);\n    return _this2;\n  }\n\n  _createClass(List, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (this.children.length > 0) {\n        this.children.tail.format(name, value);\n      }\n    }\n  }, {\n    key: 'formats',\n    value: function formats() {\n      // We don't inherit from FormatBlot\n      return _defineProperty({}, this.statics.blotName, this.statics.formats(this.domNode));\n    }\n  }, {\n    key: 'insertBefore',\n    value: function insertBefore(blot, ref) {\n      if (blot instanceof ListItem) {\n        _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'insertBefore', this).call(this, blot, ref);\n      } else {\n        var index = ref == null ? this.length() : ref.offset(this);\n        var after = this.split(index);\n        after.parent.insertBefore(blot, after);\n      }\n    }\n  }, {\n    key: 'optimize',\n    value: function optimize(context) {\n      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'optimize', this).call(this, context);\n      var next = this.next;\n      if (next != null && next.prev === this && next.statics.blotName === this.statics.blotName && next.domNode.tagName === this.domNode.tagName && next.domNode.getAttribute('data-checked') === this.domNode.getAttribute('data-checked')) {\n        next.moveChildren(this);\n        next.remove();\n      }\n    }\n  }, {\n    key: 'replace',\n    value: function replace(target) {\n      if (target.statics.blotName !== this.statics.blotName) {\n        var item = _parchment2.default.create(this.statics.defaultChild);\n        target.moveChildren(item);\n        this.appendChild(item);\n      }\n      _get(List.prototype.__proto__ || Object.getPrototypeOf(List.prototype), 'replace', this).call(this, target);\n    }\n  }]);\n\n  return List;\n}(_container2.default);\n\nList.blotName = 'list';\nList.scope = _parchment2.default.Scope.BLOCK_BLOT;\nList.tagName = ['OL', 'UL'];\nList.defaultChild = 'list-item';\nList.allowedChildren = [ListItem];\n\nexports.ListItem = ListItem;\nexports.default = List;\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _bold = __webpack_require__(56);\n\nvar _bold2 = _interopRequireDefault(_bold);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Italic = function (_Bold) {\n  _inherits(Italic, _Bold);\n\n  function Italic() {\n    _classCallCheck(this, Italic);\n\n    return _possibleConstructorReturn(this, (Italic.__proto__ || Object.getPrototypeOf(Italic)).apply(this, arguments));\n  }\n\n  return Italic;\n}(_bold2.default);\n\nItalic.blotName = 'italic';\nItalic.tagName = ['EM', 'I'];\n\nexports.default = Italic;\n\n/***/ }),\n/* 69 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Script = function (_Inline) {\n  _inherits(Script, _Inline);\n\n  function Script() {\n    _classCallCheck(this, Script);\n\n    return _possibleConstructorReturn(this, (Script.__proto__ || Object.getPrototypeOf(Script)).apply(this, arguments));\n  }\n\n  _createClass(Script, null, [{\n    key: 'create',\n    value: function create(value) {\n      if (value === 'super') {\n        return document.createElement('sup');\n      } else if (value === 'sub') {\n        return document.createElement('sub');\n      } else {\n        return _get(Script.__proto__ || Object.getPrototypeOf(Script), 'create', this).call(this, value);\n      }\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      if (domNode.tagName === 'SUB') return 'sub';\n      if (domNode.tagName === 'SUP') return 'super';\n      return undefined;\n    }\n  }]);\n\n  return Script;\n}(_inline2.default);\n\nScript.blotName = 'script';\nScript.tagName = ['SUB', 'SUP'];\n\nexports.default = Script;\n\n/***/ }),\n/* 70 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Strike = function (_Inline) {\n  _inherits(Strike, _Inline);\n\n  function Strike() {\n    _classCallCheck(this, Strike);\n\n    return _possibleConstructorReturn(this, (Strike.__proto__ || Object.getPrototypeOf(Strike)).apply(this, arguments));\n  }\n\n  return Strike;\n}(_inline2.default);\n\nStrike.blotName = 'strike';\nStrike.tagName = 'S';\n\nexports.default = Strike;\n\n/***/ }),\n/* 71 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _inline = __webpack_require__(6);\n\nvar _inline2 = _interopRequireDefault(_inline);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar Underline = function (_Inline) {\n  _inherits(Underline, _Inline);\n\n  function Underline() {\n    _classCallCheck(this, Underline);\n\n    return _possibleConstructorReturn(this, (Underline.__proto__ || Object.getPrototypeOf(Underline)).apply(this, arguments));\n  }\n\n  return Underline;\n}(_inline2.default);\n\nUnderline.blotName = 'underline';\nUnderline.tagName = 'U';\n\nexports.default = Underline;\n\n/***/ }),\n/* 72 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _link = __webpack_require__(27);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['alt', 'height', 'width'];\n\nvar Image = function (_Parchment$Embed) {\n  _inherits(Image, _Parchment$Embed);\n\n  function Image() {\n    _classCallCheck(this, Image);\n\n    return _possibleConstructorReturn(this, (Image.__proto__ || Object.getPrototypeOf(Image)).apply(this, arguments));\n  }\n\n  _createClass(Image, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (ATTRIBUTES.indexOf(name) > -1) {\n        if (value) {\n          this.domNode.setAttribute(name, value);\n        } else {\n          this.domNode.removeAttribute(name);\n        }\n      } else {\n        _get(Image.prototype.__proto__ || Object.getPrototypeOf(Image.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Image.__proto__ || Object.getPrototypeOf(Image), 'create', this).call(this, value);\n      if (typeof value === 'string') {\n        node.setAttribute('src', this.sanitize(value));\n      }\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return ATTRIBUTES.reduce(function (formats, attribute) {\n        if (domNode.hasAttribute(attribute)) {\n          formats[attribute] = domNode.getAttribute(attribute);\n        }\n        return formats;\n      }, {});\n    }\n  }, {\n    key: 'match',\n    value: function match(url) {\n      return (/\\.(jpe?g|gif|png)$/.test(url) || /^data:image\\/.+;base64/.test(url)\n      );\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return (0, _link.sanitize)(url, ['http', 'https', 'data']) ? url : '//:0';\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('src');\n    }\n  }]);\n\n  return Image;\n}(_parchment2.default.Embed);\n\nImage.blotName = 'image';\nImage.tagName = 'IMG';\n\nexports.default = Image;\n\n/***/ }),\n/* 73 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _block = __webpack_require__(4);\n\nvar _link = __webpack_require__(27);\n\nvar _link2 = _interopRequireDefault(_link);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar ATTRIBUTES = ['height', 'width'];\n\nvar Video = function (_BlockEmbed) {\n  _inherits(Video, _BlockEmbed);\n\n  function Video() {\n    _classCallCheck(this, Video);\n\n    return _possibleConstructorReturn(this, (Video.__proto__ || Object.getPrototypeOf(Video)).apply(this, arguments));\n  }\n\n  _createClass(Video, [{\n    key: 'format',\n    value: function format(name, value) {\n      if (ATTRIBUTES.indexOf(name) > -1) {\n        if (value) {\n          this.domNode.setAttribute(name, value);\n        } else {\n          this.domNode.removeAttribute(name);\n        }\n      } else {\n        _get(Video.prototype.__proto__ || Object.getPrototypeOf(Video.prototype), 'format', this).call(this, name, value);\n      }\n    }\n  }], [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(Video.__proto__ || Object.getPrototypeOf(Video), 'create', this).call(this, value);\n      node.setAttribute('frameborder', '0');\n      node.setAttribute('allowfullscreen', true);\n      node.setAttribute('src', this.sanitize(value));\n      return node;\n    }\n  }, {\n    key: 'formats',\n    value: function formats(domNode) {\n      return ATTRIBUTES.reduce(function (formats, attribute) {\n        if (domNode.hasAttribute(attribute)) {\n          formats[attribute] = domNode.getAttribute(attribute);\n        }\n        return formats;\n      }, {});\n    }\n  }, {\n    key: 'sanitize',\n    value: function sanitize(url) {\n      return _link2.default.sanitize(url);\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('src');\n    }\n  }]);\n\n  return Video;\n}(_block.BlockEmbed);\n\nVideo.blotName = 'video';\nVideo.className = 'ql-video';\nVideo.tagName = 'IFRAME';\n\nexports.default = Video;\n\n/***/ }),\n/* 74 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.FormulaBlot = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _embed = __webpack_require__(35);\n\nvar _embed2 = _interopRequireDefault(_embed);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar FormulaBlot = function (_Embed) {\n  _inherits(FormulaBlot, _Embed);\n\n  function FormulaBlot() {\n    _classCallCheck(this, FormulaBlot);\n\n    return _possibleConstructorReturn(this, (FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot)).apply(this, arguments));\n  }\n\n  _createClass(FormulaBlot, null, [{\n    key: 'create',\n    value: function create(value) {\n      var node = _get(FormulaBlot.__proto__ || Object.getPrototypeOf(FormulaBlot), 'create', this).call(this, value);\n      if (typeof value === 'string') {\n        window.katex.render(value, node, {\n          throwOnError: false,\n          errorColor: '#f00'\n        });\n        node.setAttribute('data-value', value);\n      }\n      return node;\n    }\n  }, {\n    key: 'value',\n    value: function value(domNode) {\n      return domNode.getAttribute('data-value');\n    }\n  }]);\n\n  return FormulaBlot;\n}(_embed2.default);\n\nFormulaBlot.blotName = 'formula';\nFormulaBlot.className = 'ql-formula';\nFormulaBlot.tagName = 'SPAN';\n\nvar Formula = function (_Module) {\n  _inherits(Formula, _Module);\n\n  _createClass(Formula, null, [{\n    key: 'register',\n    value: function register() {\n      _quill2.default.register(FormulaBlot, true);\n    }\n  }]);\n\n  function Formula() {\n    _classCallCheck(this, Formula);\n\n    var _this2 = _possibleConstructorReturn(this, (Formula.__proto__ || Object.getPrototypeOf(Formula)).call(this));\n\n    if (window.katex == null) {\n      throw new Error('Formula module requires KaTeX.');\n    }\n    return _this2;\n  }\n\n  return Formula;\n}(_module2.default);\n\nexports.FormulaBlot = FormulaBlot;\nexports.default = Formula;\n\n/***/ }),\n/* 75 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.CodeToken = exports.CodeBlock = undefined;\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _parchment = __webpack_require__(0);\n\nvar _parchment2 = _interopRequireDefault(_parchment);\n\nvar _quill = __webpack_require__(5);\n\nvar _quill2 = _interopRequireDefault(_quill);\n\nvar _module = __webpack_require__(9);\n\nvar _module2 = _interopRequireDefault(_module);\n\nvar _code = __webpack_require__(13);\n\nvar _code2 = _interopRequireDefault(_code);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar SyntaxCodeBlock = function (_CodeBlock) {\n  _inherits(SyntaxCodeBlock, _CodeBlock);\n\n  function SyntaxCodeBlock() {\n    _classCallCheck(this, SyntaxCodeBlock);\n\n    return _possibleConstructorReturn(this, (SyntaxCodeBlock.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock)).apply(this, arguments));\n  }\n\n  _createClass(SyntaxCodeBlock, [{\n    key: 'replaceWith',\n    value: function replaceWith(block) {\n      this.domNode.textContent = this.domNode.textContent;\n      this.attach();\n      _get(SyntaxCodeBlock.prototype.__proto__ || Object.getPrototypeOf(SyntaxCodeBlock.prototype), 'replaceWith', this).call(this, block);\n    }\n  }, {\n    key: 'highlight',\n    value: function highlight(_highlight) {\n      var text = this.domNode.textContent;\n      if (this.cachedText !== text) {\n        if (text.trim().length > 0 || this.cachedText == null) {\n          this.domNode.innerHTML = _highlight(text);\n          this.domNode.normalize();\n          this.attach();\n        }\n        this.cachedText = text;\n      }\n    }\n  }]);\n\n  return SyntaxCodeBlock;\n}(_code2.default);\n\nSyntaxCodeBlock.className = 'ql-syntax';\n\nvar CodeToken = new _parchment2.default.Attributor.Class('token', 'hljs', {\n  scope: _parchment2.default.Scope.INLINE\n});\n\nvar Syntax = function (_Module) {\n  _inherits(Syntax, _Module);\n\n  _createClass(Syntax, null, [{\n    key: 'register',\n    value: function register() {\n      _quill2.default.register(CodeToken, true);\n      _quill2.default.register(SyntaxCodeBlock, true);\n    }\n  }]);\n\n  function Syntax(quill, options) {\n    _classCallCheck(this, Syntax);\n\n    var _this2 = _possibleConstructorReturn(this, (Syntax.__proto__ || Object.getPrototypeOf(Syntax)).call(this, quill, options));\n\n    if (typeof _this2.options.highlight !== 'function') {\n      throw new Error('Syntax module requires highlight.js. Please include the library on the page before Quill.');\n    }\n    var timer = null;\n    _this2.quill.on(_quill2.default.events.SCROLL_OPTIMIZE, function () {\n      clearTimeout(timer);\n      timer = setTimeout(function () {\n        _this2.highlight();\n        timer = null;\n      }, _this2.options.interval);\n    });\n    _this2.highlight();\n    return _this2;\n  }\n\n  _createClass(Syntax, [{\n    key: 'highlight',\n    value: function highlight() {\n      var _this3 = this;\n\n      if (this.quill.selection.composing) return;\n      this.quill.update(_quill2.default.sources.USER);\n      var range = this.quill.getSelection();\n      this.quill.scroll.descendants(SyntaxCodeBlock).forEach(function (code) {\n        code.highlight(_this3.options.highlight);\n      });\n      this.quill.update(_quill2.default.sources.SILENT);\n      if (range != null) {\n        this.quill.setSelection(range, _quill2.default.sources.SILENT);\n      }\n    }\n  }]);\n\n  return Syntax;\n}(_module2.default);\n\nSyntax.DEFAULTS = {\n  highlight: function () {\n    if (window.hljs == null) return null;\n    return function (text) {\n      var result = window.hljs.highlightAuto(text);\n      return result.value;\n    };\n  }(),\n  interval: 1000\n};\n\nexports.CodeBlock = SyntaxCodeBlock;\nexports.CodeToken = CodeToken;\nexports.default = Syntax;\n\n/***/ }),\n/* 76 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=13 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=9 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 77 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=14 x2=4 y1=14 y2=14></line> <line class=ql-stroke x1=12 x2=6 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 78 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=5 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=9 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 79 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=15 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=15 x2=3 y1=14 y2=14></line> <line class=ql-stroke x1=15 x2=3 y1=4 y2=4></line> </svg>\";\n\n/***/ }),\n/* 80 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <g class=\\\"ql-fill ql-color-label\\\"> <polygon points=\\\"6 6.868 6 6 5 6 5 7 5.942 7 6 6.868\\\"></polygon> <rect height=1 width=1 x=4 y=4></rect> <polygon points=\\\"6.817 5 6 5 6 6 6.38 6 6.817 5\\\"></polygon> <rect height=1 width=1 x=2 y=6></rect> <rect height=1 width=1 x=3 y=5></rect> <rect height=1 width=1 x=4 y=7></rect> <polygon points=\\\"4 11.439 4 11 3 11 3 12 3.755 12 4 11.439\\\"></polygon> <rect height=1 width=1 x=2 y=12></rect> <rect height=1 width=1 x=2 y=9></rect> <rect height=1 width=1 x=2 y=15></rect> <polygon points=\\\"4.63 10 4 10 4 11 4.192 11 4.63 10\\\"></polygon> <rect height=1 width=1 x=3 y=8></rect> <path d=M10.832,4.2L11,4.582V4H10.708A1.948,1.948,0,0,1,10.832,4.2Z></path> <path d=M7,4.582L7.168,4.2A1.929,1.929,0,0,1,7.292,4H7V4.582Z></path> <path d=M8,13H7.683l-0.351.8a1.933,1.933,0,0,1-.124.2H8V13Z></path> <rect height=1 width=1 x=12 y=2></rect> <rect height=1 width=1 x=11 y=3></rect> <path d=M9,3H8V3.282A1.985,1.985,0,0,1,9,3Z></path> <rect height=1 width=1 x=2 y=3></rect> <rect height=1 width=1 x=6 y=2></rect> <rect height=1 width=1 x=3 y=2></rect> <rect height=1 width=1 x=5 y=3></rect> <rect height=1 width=1 x=9 y=2></rect> <rect height=1 width=1 x=15 y=14></rect> <polygon points=\\\"13.447 10.174 13.469 10.225 13.472 10.232 13.808 11 14 11 14 10 13.37 10 13.447 10.174\\\"></polygon> <rect height=1 width=1 x=13 y=7></rect> <rect height=1 width=1 x=15 y=5></rect> <rect height=1 width=1 x=14 y=6></rect> <rect height=1 width=1 x=15 y=8></rect> <rect height=1 width=1 x=14 y=9></rect> <path d=M3.775,14H3v1H4V14.314A1.97,1.97,0,0,1,3.775,14Z></path> <rect height=1 width=1 x=14 y=3></rect> <polygon points=\\\"12 6.868 12 6 11.62 6 12 6.868\\\"></polygon> <rect height=1 width=1 x=15 y=2></rect> <rect height=1 width=1 x=12 y=5></rect> <rect height=1 width=1 x=13 y=4></rect> <polygon points=\\\"12.933 9 13 9 13 8 12.495 8 12.933 9\\\"></polygon> <rect height=1 width=1 x=9 y=14></rect> <rect height=1 width=1 x=8 y=15></rect> <path d=M6,14.926V15H7V14.316A1.993,1.993,0,0,1,6,14.926Z></path> <rect height=1 width=1 x=5 y=15></rect> <path d=M10.668,13.8L10.317,13H10v1h0.792A1.947,1.947,0,0,1,10.668,13.8Z></path> <rect height=1 width=1 x=11 y=15></rect> <path d=M14.332,12.2a1.99,1.99,0,0,1,.166.8H15V12H14.245Z></path> <rect height=1 width=1 x=14 y=15></rect> <rect height=1 width=1 x=15 y=11></rect> </g> <polyline class=ql-stroke points=\\\"5.5 13 9 5 12.5 13\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=11 y2=11></line> </svg>\";\n\n/***/ }),\n/* 81 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=4 y=5></rect> <rect class=\\\"ql-fill ql-stroke\\\" height=3 width=3 x=11 y=5></rect> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M7,8c0,4.031-3,5-3,5></path> <path class=\\\"ql-even ql-fill ql-stroke\\\" d=M14,8c0,4.031-3,5-3,5></path> </svg>\";\n\n/***/ }),\n/* 82 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,4H9.5A2.5,2.5,0,0,1,12,6.5v0A2.5,2.5,0,0,1,9.5,9H5A0,0,0,0,1,5,9V4A0,0,0,0,1,5,4Z></path> <path class=ql-stroke d=M5,9h5.5A2.5,2.5,0,0,1,13,11.5v0A2.5,2.5,0,0,1,10.5,14H5a0,0,0,0,1,0,0V9A0,0,0,0,1,5,9Z></path> </svg>\";\n\n/***/ }),\n/* 83 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=5 x2=13 y1=3 y2=3></line> <line class=ql-stroke x1=6 x2=9.35 y1=12 y2=3></line> <line class=ql-stroke x1=11 x2=15 y1=11 y2=15></line> <line class=ql-stroke x1=15 x2=11 y1=11 y2=15></line> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=7 x=2 y=14></rect> </svg>\";\n\n/***/ }),\n/* 84 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-color-label ql-stroke ql-transparent\\\" x1=3 x2=15 y1=15 y2=15></line> <polyline class=ql-stroke points=\\\"5.5 11 9 3 12.5 11\\\"></polyline> <line class=ql-stroke x1=11.63 x2=6.38 y1=9 y2=9></line> </svg>\";\n\n/***/ }),\n/* 85 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"3 11 5 9 3 7 3 11\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=15 x2=11 y1=4 y2=4></line> <path class=ql-fill d=M11,3a3,3,0,0,0,0,6h1V3H11Z></path> <rect class=ql-fill height=11 width=1 x=11 y=4></rect> <rect class=ql-fill height=11 width=1 x=13 y=4></rect> </svg>\";\n\n/***/ }),\n/* 86 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=\\\"ql-stroke ql-fill\\\" points=\\\"15 12 13 10 15 8 15 12\\\"></polygon> <line class=\\\"ql-stroke ql-fill\\\" x1=9 x2=5 y1=4 y2=4></line> <path class=ql-fill d=M5,3A3,3,0,0,0,5,9H6V3H5Z></path> <rect class=ql-fill height=11 width=1 x=5 y=4></rect> <rect class=ql-fill height=11 width=1 x=7 y=4></rect> </svg>\";\n\n/***/ }),\n/* 87 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M14,16H4a1,1,0,0,1,0-2H14A1,1,0,0,1,14,16Z /> <path class=ql-fill d=M14,4H4A1,1,0,0,1,4,2H14A1,1,0,0,1,14,4Z /> <rect class=ql-fill x=3 y=6 width=12 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 88 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M13,16H5a1,1,0,0,1,0-2h8A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H5A1,1,0,0,1,5,2h8A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=2 y=6 width=14 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 89 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15,8H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,8Z /> <path class=ql-fill d=M15,12H13a1,1,0,0,1,0-2h2A1,1,0,0,1,15,12Z /> <path class=ql-fill d=M15,16H5a1,1,0,0,1,0-2H15A1,1,0,0,1,15,16Z /> <path class=ql-fill d=M15,4H5A1,1,0,0,1,5,2H15A1,1,0,0,1,15,4Z /> <rect class=ql-fill x=2 y=6 width=8 height=6 rx=1 ry=1 /> </svg>\";\n\n/***/ }),\n/* 90 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M5,8H3A1,1,0,0,1,3,6H5A1,1,0,0,1,5,8Z /> <path class=ql-fill d=M5,12H3a1,1,0,0,1,0-2H5A1,1,0,0,1,5,12Z /> <path class=ql-fill d=M13,16H3a1,1,0,0,1,0-2H13A1,1,0,0,1,13,16Z /> <path class=ql-fill d=M13,4H3A1,1,0,0,1,3,2H13A1,1,0,0,1,13,4Z /> <rect class=ql-fill x=8 y=6 width=8 height=6 rx=1 ry=1 transform=\\\"translate(24 18) rotate(-180)\\\"/> </svg>\";\n\n/***/ }),\n/* 91 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M11.759,2.482a2.561,2.561,0,0,0-3.53.607A7.656,7.656,0,0,0,6.8,6.2C6.109,9.188,5.275,14.677,4.15,14.927a1.545,1.545,0,0,0-1.3-.933A0.922,0.922,0,0,0,2,15.036S1.954,16,4.119,16s3.091-2.691,3.7-5.553c0.177-.826.36-1.726,0.554-2.6L8.775,6.2c0.381-1.421.807-2.521,1.306-2.676a1.014,1.014,0,0,0,1.02.56A0.966,0.966,0,0,0,11.759,2.482Z></path> <rect class=ql-fill height=1.6 rx=0.8 ry=0.8 width=5 x=5.15 y=6.2></rect> <path class=ql-fill d=M13.663,12.027a1.662,1.662,0,0,1,.266-0.276q0.193,0.069.456,0.138a2.1,2.1,0,0,0,.535.069,1.075,1.075,0,0,0,.767-0.3,1.044,1.044,0,0,0,.314-0.8,0.84,0.84,0,0,0-.238-0.619,0.8,0.8,0,0,0-.594-0.239,1.154,1.154,0,0,0-.781.3,4.607,4.607,0,0,0-.781,1q-0.091.15-.218,0.346l-0.246.38c-0.068-.288-0.137-0.582-0.212-0.885-0.459-1.847-2.494-.984-2.941-0.8-0.482.2-.353,0.647-0.094,0.529a0.869,0.869,0,0,1,1.281.585c0.217,0.751.377,1.436,0.527,2.038a5.688,5.688,0,0,1-.362.467,2.69,2.69,0,0,1-.264.271q-0.221-.08-0.471-0.147a2.029,2.029,0,0,0-.522-0.066,1.079,1.079,0,0,0-.768.3A1.058,1.058,0,0,0,9,15.131a0.82,0.82,0,0,0,.832.852,1.134,1.134,0,0,0,.787-0.3,5.11,5.11,0,0,0,.776-0.993q0.141-.219.215-0.34c0.046-.076.122-0.194,0.223-0.346a2.786,2.786,0,0,0,.918,1.726,2.582,2.582,0,0,0,2.376-.185c0.317-.181.212-0.565,0-0.494A0.807,0.807,0,0,1,14.176,15a5.159,5.159,0,0,1-.913-2.446l0,0Q13.487,12.24,13.663,12.027Z></path> </svg>\";\n\n/***/ }),\n/* 92 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M10,4V14a1,1,0,0,1-2,0V10H3v4a1,1,0,0,1-2,0V4A1,1,0,0,1,3,4V8H8V4a1,1,0,0,1,2,0Zm6.06787,9.209H14.98975V7.59863a.54085.54085,0,0,0-.605-.60547h-.62744a1.01119,1.01119,0,0,0-.748.29688L11.645,8.56641a.5435.5435,0,0,0-.022.8584l.28613.30762a.53861.53861,0,0,0,.84717.0332l.09912-.08789a1.2137,1.2137,0,0,0,.2417-.35254h.02246s-.01123.30859-.01123.60547V13.209H12.041a.54085.54085,0,0,0-.605.60547v.43945a.54085.54085,0,0,0,.605.60547h4.02686a.54085.54085,0,0,0,.605-.60547v-.43945A.54085.54085,0,0,0,16.06787,13.209Z /> </svg>\";\n\n/***/ }),\n/* 93 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewBox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M16.73975,13.81445v.43945a.54085.54085,0,0,1-.605.60547H11.855a.58392.58392,0,0,1-.64893-.60547V14.0127c0-2.90527,3.39941-3.42187,3.39941-4.55469a.77675.77675,0,0,0-.84717-.78125,1.17684,1.17684,0,0,0-.83594.38477c-.2749.26367-.561.374-.85791.13184l-.4292-.34082c-.30811-.24219-.38525-.51758-.1543-.81445a2.97155,2.97155,0,0,1,2.45361-1.17676,2.45393,2.45393,0,0,1,2.68408,2.40918c0,2.45312-3.1792,2.92676-3.27832,3.93848h2.79443A.54085.54085,0,0,1,16.73975,13.81445ZM9,3A.99974.99974,0,0,0,8,4V8H3V4A1,1,0,0,0,1,4V14a1,1,0,0,0,2,0V10H8v4a1,1,0,0,0,2,0V4A.99974.99974,0,0,0,9,3Z /> </svg>\";\n\n/***/ }),\n/* 94 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=13 y1=4 y2=4></line> <line class=ql-stroke x1=5 x2=11 y1=14 y2=14></line> <line class=ql-stroke x1=8 x2=10 y1=14 y2=4></line> </svg>\";\n\n/***/ }),\n/* 95 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=10 width=12 x=3 y=4></rect> <circle class=ql-fill cx=6 cy=7 r=1></circle> <polyline class=\\\"ql-even ql-fill\\\" points=\\\"5 12 5 11 7 9 8 10 11 7 13 9 13 12 5 12\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 96 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=\\\"ql-fill ql-stroke\\\" points=\\\"3 7 3 11 5 9 3 7\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 97 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=3 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"5 7 5 11 3 9 5 7\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 98 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=11 y1=7 y2=11></line> <path class=\\\"ql-even ql-stroke\\\" d=M8.9,4.577a3.476,3.476,0,0,1,.36,4.679A3.476,3.476,0,0,1,4.577,8.9C3.185,7.5,2.035,6.4,4.217,4.217S7.5,3.185,8.9,4.577Z></path> <path class=\\\"ql-even ql-stroke\\\" d=M13.423,9.1a3.476,3.476,0,0,0-4.679-.36,3.476,3.476,0,0,0,.36,4.679c1.392,1.392,2.5,2.542,4.679.36S14.815,10.5,13.423,9.1Z></path> </svg>\";\n\n/***/ }),\n/* 99 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=7 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=7 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=7 x2=15 y1=14 y2=14></line> <line class=\\\"ql-stroke ql-thin\\\" x1=2.5 x2=4.5 y1=5.5 y2=5.5></line> <path class=ql-fill d=M3.5,6A0.5,0.5,0,0,1,3,5.5V3.085l-0.276.138A0.5,0.5,0,0,1,2.053,3c-0.124-.247-0.023-0.324.224-0.447l1-.5A0.5,0.5,0,0,1,4,2.5v3A0.5,0.5,0,0,1,3.5,6Z></path> <path class=\\\"ql-stroke ql-thin\\\" d=M4.5,10.5h-2c0-.234,1.85-1.076,1.85-2.234A0.959,0.959,0,0,0,2.5,8.156></path> <path class=\\\"ql-stroke ql-thin\\\" d=M2.5,14.846a0.959,0.959,0,0,0,1.85-.109A0.7,0.7,0,0,0,3.75,14a0.688,0.688,0,0,0,.6-0.736,0.959,0.959,0,0,0-1.85-.109></path> </svg>\";\n\n/***/ }),\n/* 100 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=6 x2=15 y1=4 y2=4></line> <line class=ql-stroke x1=6 x2=15 y1=9 y2=9></line> <line class=ql-stroke x1=6 x2=15 y1=14 y2=14></line> <line class=ql-stroke x1=3 x2=3 y1=4 y2=4></line> <line class=ql-stroke x1=3 x2=3 y1=9 y2=9></line> <line class=ql-stroke x1=3 x2=3 y1=14 y2=14></line> </svg>\";\n\n/***/ }),\n/* 101 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg class=\\\"\\\" viewbox=\\\"0 0 18 18\\\"> <line class=ql-stroke x1=9 x2=15 y1=4 y2=4></line> <polyline class=ql-stroke points=\\\"3 4 4 5 6 3\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=14 y2=14></line> <polyline class=ql-stroke points=\\\"3 14 4 15 6 13\\\"></polyline> <line class=ql-stroke x1=9 x2=15 y1=9 y2=9></line> <polyline class=ql-stroke points=\\\"3 9 4 10 6 8\\\"></polyline> </svg>\";\n\n/***/ }),\n/* 102 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,15H13.861a3.858,3.858,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.921,1.921,0,0,0,12.021,11.7a0.50013,0.50013,0,1,0,.957.291h0a0.914,0.914,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.076-1.16971,1.86982-1.93971,2.43082A1.45639,1.45639,0,0,0,12,15.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,15Z /> <path class=ql-fill d=M9.65,5.241a1,1,0,0,0-1.409.108L6,7.964,3.759,5.349A1,1,0,0,0,2.192,6.59178Q2.21541,6.6213,2.241,6.649L4.684,9.5,2.241,12.35A1,1,0,0,0,3.71,13.70722q0.02557-.02768.049-0.05722L6,11.036,8.241,13.65a1,1,0,1,0,1.567-1.24277Q9.78459,12.3777,9.759,12.35L7.316,9.5,9.759,6.651A1,1,0,0,0,9.65,5.241Z /> </svg>\";\n\n/***/ }),\n/* 103 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-fill d=M15.5,7H13.861a4.015,4.015,0,0,0,1.914-2.975,1.8,1.8,0,0,0-1.6-1.751A1.922,1.922,0,0,0,12.021,3.7a0.5,0.5,0,1,0,.957.291,0.917,0.917,0,0,1,1.053-.725,0.81,0.81,0,0,1,.744.762c0,1.077-1.164,1.925-1.934,2.486A1.423,1.423,0,0,0,12,7.5a0.5,0.5,0,0,0,.5.5h3A0.5,0.5,0,0,0,15.5,7Z /> <path class=ql-fill d=M9.651,5.241a1,1,0,0,0-1.41.108L6,7.964,3.759,5.349a1,1,0,1,0-1.519,1.3L4.683,9.5,2.241,12.35a1,1,0,1,0,1.519,1.3L6,11.036,8.241,13.65a1,1,0,0,0,1.519-1.3L7.317,9.5,9.759,6.651A1,1,0,0,0,9.651,5.241Z /> </svg>\";\n\n/***/ }),\n/* 104 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <line class=\\\"ql-stroke ql-thin\\\" x1=15.5 x2=2.5 y1=8.5 y2=9.5></line> <path class=ql-fill d=M9.007,8C6.542,7.791,6,7.519,6,6.5,6,5.792,7.283,5,9,5c1.571,0,2.765.679,2.969,1.309a1,1,0,0,0,1.9-.617C13.356,4.106,11.354,3,9,3,6.2,3,4,4.538,4,6.5a3.2,3.2,0,0,0,.5,1.843Z></path> <path class=ql-fill d=M8.984,10C11.457,10.208,12,10.479,12,11.5c0,0.708-1.283,1.5-3,1.5-1.571,0-2.765-.679-2.969-1.309a1,1,0,1,0-1.9.617C4.644,13.894,6.646,15,9,15c2.8,0,5-1.538,5-3.5a3.2,3.2,0,0,0-.5-1.843Z></path> </svg>\";\n\n/***/ }),\n/* 105 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <path class=ql-stroke d=M5,3V9a4.012,4.012,0,0,0,4,4H9a4.012,4.012,0,0,0,4-4V3></path> <rect class=ql-fill height=1 rx=0.5 ry=0.5 width=12 x=3 y=15></rect> </svg>\";\n\n/***/ }),\n/* 106 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <rect class=ql-stroke height=12 width=12 x=3 y=3></rect> <rect class=ql-fill height=12 width=1 x=5 y=3></rect> <rect class=ql-fill height=12 width=1 x=12 y=3></rect> <rect class=ql-fill height=2 width=8 x=5 y=8></rect> <rect class=ql-fill height=1 width=3 x=3 y=5></rect> <rect class=ql-fill height=1 width=3 x=3 y=7></rect> <rect class=ql-fill height=1 width=3 x=3 y=10></rect> <rect class=ql-fill height=1 width=3 x=3 y=12></rect> <rect class=ql-fill height=1 width=3 x=12 y=5></rect> <rect class=ql-fill height=1 width=3 x=12 y=7></rect> <rect class=ql-fill height=1 width=3 x=12 y=10></rect> <rect class=ql-fill height=1 width=3 x=12 y=12></rect> </svg>\";\n\n/***/ }),\n/* 107 */\n/***/ (function(module, exports) {\n\nmodule.exports = \"<svg viewbox=\\\"0 0 18 18\\\"> <polygon class=ql-stroke points=\\\"7 11 9 13 11 11 7 11\\\"></polygon> <polygon class=ql-stroke points=\\\"7 7 9 5 11 7 7 7\\\"></polygon> </svg>\";\n\n/***/ }),\n/* 108 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nexports.default = exports.BubbleTooltip = undefined;\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _extend = __webpack_require__(3);\n\nvar _extend2 = _interopRequireDefault(_extend);\n\nvar _emitter = __webpack_require__(8);\n\nvar _emitter2 = _interopRequireDefault(_emitter);\n\nvar _base = __webpack_require__(43);\n\nvar _base2 = _interopRequireDefault(_base);\n\nvar _selection = __webpack_require__(15);\n\nvar _icons = __webpack_require__(41);\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nvar TOOLBAR_CONFIG = [['bold', 'italic', 'link'], [{ header: 1 }, { header: 2 }, 'blockquote']];\n\nvar BubbleTheme = function (_BaseTheme) {\n  _inherits(BubbleTheme, _BaseTheme);\n\n  function BubbleTheme(quill, options) {\n    _classCallCheck(this, BubbleTheme);\n\n    if (options.modules.toolbar != null && options.modules.toolbar.container == null) {\n      options.modules.toolbar.container = TOOLBAR_CONFIG;\n    }\n\n    var _this = _possibleConstructorReturn(this, (BubbleTheme.__proto__ || Object.getPrototypeOf(BubbleTheme)).call(this, quill, options));\n\n    _this.quill.container.classList.add('ql-bubble');\n    return _this;\n  }\n\n  _createClass(BubbleTheme, [{\n    key: 'extendToolbar',\n    value: function extendToolbar(toolbar) {\n      this.tooltip = new BubbleTooltip(this.quill, this.options.bounds);\n      this.tooltip.root.appendChild(toolbar.container);\n      this.buildButtons([].slice.call(toolbar.container.querySelectorAll('button')), _icons2.default);\n      this.buildPickers([].slice.call(toolbar.container.querySelectorAll('select')), _icons2.default);\n    }\n  }]);\n\n  return BubbleTheme;\n}(_base2.default);\n\nBubbleTheme.DEFAULTS = (0, _extend2.default)(true, {}, _base2.default.DEFAULTS, {\n  modules: {\n    toolbar: {\n      handlers: {\n        link: function link(value) {\n          if (!value) {\n            this.quill.format('link', false);\n          } else {\n            this.quill.theme.tooltip.edit();\n          }\n        }\n      }\n    }\n  }\n});\n\nvar BubbleTooltip = function (_BaseTooltip) {\n  _inherits(BubbleTooltip, _BaseTooltip);\n\n  function BubbleTooltip(quill, bounds) {\n    _classCallCheck(this, BubbleTooltip);\n\n    var _this2 = _possibleConstructorReturn(this, (BubbleTooltip.__proto__ || Object.getPrototypeOf(BubbleTooltip)).call(this, quill, bounds));\n\n    _this2.quill.on(_emitter2.default.events.EDITOR_CHANGE, function (type, range, oldRange, source) {\n      if (type !== _emitter2.default.events.SELECTION_CHANGE) return;\n      if (range != null && range.length > 0 && source === _emitter2.default.sources.USER) {\n        _this2.show();\n        // Lock our width so we will expand beyond our offsetParent boundaries\n        _this2.root.style.left = '0px';\n        _this2.root.style.width = '';\n        _this2.root.style.width = _this2.root.offsetWidth + 'px';\n        var lines = _this2.quill.getLines(range.index, range.length);\n        if (lines.length === 1) {\n          _this2.position(_this2.quill.getBounds(range));\n        } else {\n          var lastLine = lines[lines.length - 1];\n          var index = _this2.quill.getIndex(lastLine);\n          var length = Math.min(lastLine.length() - 1, range.index + range.length - index);\n          var _bounds = _this2.quill.getBounds(new _selection.Range(index, length));\n          _this2.position(_bounds);\n        }\n      } else if (document.activeElement !== _this2.textbox && _this2.quill.hasFocus()) {\n        _this2.hide();\n      }\n    });\n    return _this2;\n  }\n\n  _createClass(BubbleTooltip, [{\n    key: 'listen',\n    value: function listen() {\n      var _this3 = this;\n\n      _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'listen', this).call(this);\n      this.root.querySelector('.ql-close').addEventListener('click', function () {\n        _this3.root.classList.remove('ql-editing');\n      });\n      this.quill.on(_emitter2.default.events.SCROLL_OPTIMIZE, function () {\n        // Let selection be restored by toolbar handlers before repositioning\n        setTimeout(function () {\n          if (_this3.root.classList.contains('ql-hidden')) return;\n          var range = _this3.quill.getSelection();\n          if (range != null) {\n            _this3.position(_this3.quill.getBounds(range));\n          }\n        }, 1);\n      });\n    }\n  }, {\n    key: 'cancel',\n    value: function cancel() {\n      this.show();\n    }\n  }, {\n    key: 'position',\n    value: function position(reference) {\n      var shift = _get(BubbleTooltip.prototype.__proto__ || Object.getPrototypeOf(BubbleTooltip.prototype), 'position', this).call(this, reference);\n      var arrow = this.root.querySelector('.ql-tooltip-arrow');\n      arrow.style.marginLeft = '';\n      if (shift === 0) return shift;\n      arrow.style.marginLeft = -1 * shift - arrow.offsetWidth / 2 + 'px';\n    }\n  }]);\n\n  return BubbleTooltip;\n}(_base.BaseTooltip);\n\nBubbleTooltip.TEMPLATE = ['<span class=\"ql-tooltip-arrow\"></span>', '<div class=\"ql-tooltip-editor\">', '<input type=\"text\" data-formula=\"e=mc^2\" data-link=\"https://quilljs.com\" data-video=\"Embed URL\">', '<a class=\"ql-close\"></a>', '</div>'].join('');\n\nexports.BubbleTooltip = BubbleTooltip;\nexports.default = BubbleTheme;\n\n/***/ }),\n/* 109 */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(63);\n\n\n/***/ })\n/******/ ])[\"default\"];\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/quill/dist/quill.js\n// module id = 744\n// module chunks = 0","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <http://feross.org>\n * @license  MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n  ? global.TYPED_ARRAY_SUPPORT\n  : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n  try {\n    var arr = new Uint8Array(1)\n    arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n    return arr.foo() === 42 && // typed array instances can be augmented\n        typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n        arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n  } catch (e) {\n    return false\n  }\n}\n\nfunction kMaxLength () {\n  return Buffer.TYPED_ARRAY_SUPPORT\n    ? 0x7fffffff\n    : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length')\n  }\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length)\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length)\n    }\n    that.length = length\n  }\n\n  return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length)\n  }\n\n  // Common case.\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error(\n        'If encoding is specified then the first argument must be a string'\n      )\n    }\n    return allocUnsafe(this, arg)\n  }\n  return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype\n  return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number')\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length)\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset)\n  }\n\n  return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype\n  Buffer.__proto__ = Uint8Array\n  if (typeof Symbol !== 'undefined' && Symbol.species &&\n      Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    })\n  }\n}\n\nfunction assertSize (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number')\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative')\n  }\n}\n\nfunction alloc (that, size, fill, encoding) {\n  assertSize(size)\n  if (size <= 0) {\n    return createBuffer(that, size)\n  }\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string'\n      ? createBuffer(that, size).fill(fill, encoding)\n      : createBuffer(that, size).fill(fill)\n  }\n  return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n  assertSize(size)\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0\n    }\n  }\n  return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8'\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding')\n  }\n\n  var length = byteLength(string, encoding) | 0\n  that = createBuffer(that, length)\n\n  var actual = that.write(string, encoding)\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual)\n  }\n\n  return that\n}\n\nfunction fromArrayLike (that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0\n  that = createBuffer(that, length)\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255\n  }\n  return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n  array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds')\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds')\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array)\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset)\n  } else {\n    array = new Uint8Array(array, byteOffset, length)\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array\n    that.__proto__ = Buffer.prototype\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array)\n  }\n  return that\n}\n\nfunction fromObject (that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0\n    that = createBuffer(that, len)\n\n    if (that.length === 0) {\n      return that\n    }\n\n    obj.copy(that, 0, 0, len)\n    return that\n  }\n\n  if (obj) {\n    if ((typeof ArrayBuffer !== 'undefined' &&\n        obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0)\n      }\n      return fromArrayLike(that, obj)\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data)\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n                         'size: 0x' + kMaxLength().toString(16) + ' bytes')\n  }\n  return length | 0\n}\n\nfunction SlowBuffer (length) {\n  if (+length != length) { // eslint-disable-line eqeqeq\n    length = 0\n  }\n  return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n  return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers')\n  }\n\n  if (a === b) return 0\n\n  var x = a.length\n  var y = b.length\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i]\n      y = b[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true\n    default:\n      return false\n  }\n}\n\nBuffer.concat = function concat (list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers')\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0)\n  }\n\n  var i\n  if (length === undefined) {\n    length = 0\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length)\n  var pos = 0\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i]\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers')\n    }\n    buf.copy(buffer, pos)\n    pos += buf.length\n  }\n  return buffer\n}\n\nfunction byteLength (string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length\n  }\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n      (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength\n  }\n  if (typeof string !== 'string') {\n    string = '' + string\n  }\n\n  var len = string.length\n  if (len === 0) return 0\n\n  // Use a for loop to avoid recursion\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2\n      case 'hex':\n        return len >>> 1\n      case 'base64':\n        return base64ToBytes(string).length\n      default:\n        if (loweredCase) return utf8ToBytes(string).length // assume utf8\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n  var loweredCase = false\n\n  // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n  if (start === undefined || start < 0) {\n    start = 0\n  }\n  // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n  if (start > this.length) {\n    return ''\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length\n  }\n\n  if (end <= 0) {\n    return ''\n  }\n\n  // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n  end >>>= 0\n  start >>>= 0\n\n  if (end <= start) {\n    return ''\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end)\n\n      case 'ascii':\n        return asciiSlice(this, start, end)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end)\n\n      case 'base64':\n        return base64Slice(this, start, end)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = (encoding + '').toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n  var i = b[n]\n  b[n] = b[m]\n  b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n  var len = this.length\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits')\n  }\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1)\n  }\n  return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n  var len = this.length\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits')\n  }\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3)\n    swap(this, i + 1, i + 2)\n  }\n  return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n  var len = this.length\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits')\n  }\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7)\n    swap(this, i + 1, i + 6)\n    swap(this, i + 2, i + 5)\n    swap(this, i + 3, i + 4)\n  }\n  return this\n}\n\nBuffer.prototype.toString = function toString () {\n  var length = this.length | 0\n  if (length === 0) return ''\n  if (arguments.length === 0) return utf8Slice(this, 0, length)\n  return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n  if (this === b) return true\n  return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n  var str = ''\n  var max = exports.INSPECT_MAX_BYTES\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n    if (this.length > max) str += ' ... '\n  }\n  return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer')\n  }\n\n  if (start === undefined) {\n    start = 0\n  }\n  if (end === undefined) {\n    end = target ? target.length : 0\n  }\n  if (thisStart === undefined) {\n    thisStart = 0\n  }\n  if (thisEnd === undefined) {\n    thisEnd = this.length\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index')\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0\n  }\n  if (thisStart >= thisEnd) {\n    return -1\n  }\n  if (start >= end) {\n    return 1\n  }\n\n  start >>>= 0\n  end >>>= 0\n  thisStart >>>= 0\n  thisEnd >>>= 0\n\n  if (this === target) return 0\n\n  var x = thisEnd - thisStart\n  var y = end - start\n  var len = Math.min(x, y)\n\n  var thisCopy = this.slice(thisStart, thisEnd)\n  var targetCopy = target.slice(start, end)\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i]\n      y = targetCopy[i]\n      break\n    }\n  }\n\n  if (x < y) return -1\n  if (y < x) return 1\n  return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1\n\n  // Normalize byteOffset\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset\n    byteOffset = 0\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000\n  }\n  byteOffset = +byteOffset  // Coerce to Number.\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : (buffer.length - 1)\n  }\n\n  // Normalize byteOffset: negative offsets start from the end of the buffer\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1\n    else byteOffset = buffer.length - 1\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0\n    else return -1\n  }\n\n  // Normalize val\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding)\n  }\n\n  // Finally, search either indexOf (if dir is true) or lastIndexOf\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1\n    }\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n  } else if (typeof val === 'number') {\n    val = val & 0xFF // Search for a byte value [0-255]\n    if (Buffer.TYPED_ARRAY_SUPPORT &&\n        typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n      }\n    }\n    return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n  }\n\n  throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1\n  var arrLength = arr.length\n  var valLength = val.length\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase()\n    if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n        encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1\n      }\n      indexSize = 2\n      arrLength /= 2\n      valLength /= 2\n      byteOffset /= 2\n    }\n  }\n\n  function read (buf, i) {\n    if (indexSize === 1) {\n      return buf[i]\n    } else {\n      return buf.readUInt16BE(i * indexSize)\n    }\n  }\n\n  var i\n  if (dir) {\n    var foundIndex = -1\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex\n        foundIndex = -1\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false\n          break\n        }\n      }\n      if (found) return i\n    }\n  }\n\n  return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n  offset = Number(offset) || 0\n  var remaining = buf.length - offset\n  if (!length) {\n    length = remaining\n  } else {\n    length = Number(length)\n    if (length > remaining) {\n      length = remaining\n    }\n  }\n\n  // must be an even number of digits\n  var strLen = string.length\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n  if (length > strLen / 2) {\n    length = strLen / 2\n  }\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16)\n    if (isNaN(parsed)) return i\n    buf[offset + i] = parsed\n  }\n  return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8'\n    length = this.length\n    offset = 0\n  // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset\n    length = this.length\n    offset = 0\n  // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0\n    if (isFinite(length)) {\n      length = length | 0\n      if (encoding === undefined) encoding = 'utf8'\n    } else {\n      encoding = length\n      length = undefined\n    }\n  // legacy write(string, encoding, offset, length) - remove in v0.13\n  } else {\n    throw new Error(\n      'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n    )\n  }\n\n  var remaining = this.length - offset\n  if (length === undefined || length > remaining) length = remaining\n\n  if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds')\n  }\n\n  if (!encoding) encoding = 'utf8'\n\n  var loweredCase = false\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length)\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length)\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length)\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length)\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length)\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length)\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n        encoding = ('' + encoding).toLowerCase()\n        loweredCase = true\n    }\n  }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  }\n}\n\nfunction base64Slice (buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf)\n  } else {\n    return base64.fromByteArray(buf.slice(start, end))\n  }\n}\n\nfunction utf8Slice (buf, start, end) {\n  end = Math.min(buf.length, end)\n  var res = []\n\n  var i = start\n  while (i < end) {\n    var firstByte = buf[i]\n    var codePoint = null\n    var bytesPerSequence = (firstByte > 0xEF) ? 4\n      : (firstByte > 0xDF) ? 3\n      : (firstByte > 0xBF) ? 2\n      : 1\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte\n          }\n          break\n        case 2:\n          secondByte = buf[i + 1]\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 3:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint\n            }\n          }\n          break\n        case 4:\n          secondByte = buf[i + 1]\n          thirdByte = buf[i + 2]\n          fourthByte = buf[i + 3]\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint\n            }\n          }\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD\n      bytesPerSequence = 1\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n      codePoint = 0xDC00 | codePoint & 0x3FF\n    }\n\n    res.push(codePoint)\n    i += bytesPerSequence\n  }\n\n  return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n  var len = codePoints.length\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n  }\n\n  // Decode in chunks to avoid \"call stack size exceeded\".\n  var res = ''\n  var i = 0\n  while (i < len) {\n    res += String.fromCharCode.apply(\n      String,\n      codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n    )\n  }\n  return res\n}\n\nfunction asciiSlice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F)\n  }\n  return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n  var ret = ''\n  end = Math.min(buf.length, end)\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i])\n  }\n  return ret\n}\n\nfunction hexSlice (buf, start, end) {\n  var len = buf.length\n\n  if (!start || start < 0) start = 0\n  if (!end || end < 0 || end > len) end = len\n\n  var out = ''\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i])\n  }\n  return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n  var bytes = buf.slice(start, end)\n  var res = ''\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n  }\n  return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n  var len = this.length\n  start = ~~start\n  end = end === undefined ? len : ~~end\n\n  if (start < 0) {\n    start += len\n    if (start < 0) start = 0\n  } else if (start > len) {\n    start = len\n  }\n\n  if (end < 0) {\n    end += len\n    if (end < 0) end = 0\n  } else if (end > len) {\n    end = len\n  }\n\n  if (end < start) end = start\n\n  var newBuf\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end)\n    newBuf.__proto__ = Buffer.prototype\n  } else {\n    var sliceLen = end - start\n    newBuf = new Buffer(sliceLen, undefined)\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start]\n    }\n  }\n\n  return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n  if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length)\n  }\n\n  var val = this[offset + --byteLength]\n  var mul = 1\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul\n  }\n\n  return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return ((this[offset]) |\n      (this[offset + 1] << 8) |\n      (this[offset + 2] << 16)) +\n      (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] * 0x1000000) +\n    ((this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var val = this[offset]\n  var mul = 1\n  var i = 0\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n  var i = byteLength\n  var mul = 1\n  var val = this[offset + --i]\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul\n  }\n  mul *= 0x80\n\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n  return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length)\n  if (!(this[offset] & 0x80)) return (this[offset])\n  return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset] | (this[offset + 1] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length)\n  var val = this[offset + 1] | (this[offset] << 8)\n  return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset]) |\n    (this[offset + 1] << 8) |\n    (this[offset + 2] << 16) |\n    (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n\n  return (this[offset] << 24) |\n    (this[offset + 1] << 16) |\n    (this[offset + 2] << 8) |\n    (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length)\n  return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length)\n  return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var mul = 1\n  var i = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  byteLength = byteLength | 0\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1\n    checkInt(this, value, offset, byteLength, maxBytes, 0)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = (value / mul) & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n      (littleEndian ? i : 1 - i) * 8\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = (value >>> 24)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 1] = (value >>> 8)\n    this[offset] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = 0\n  var mul = 1\n  var sub = 0\n  this[offset] = value & 0xFF\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1)\n\n    checkInt(this, value, offset, byteLength, limit - 1, -limit)\n  }\n\n  var i = byteLength - 1\n  var mul = 1\n  var sub = 0\n  this[offset + i] = value & 0xFF\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1\n    }\n    this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n  }\n\n  return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n  if (value < 0) value = 0xff + value + 1\n  this[offset] = (value & 0xff)\n  return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n  } else {\n    objectWriteUInt16(this, value, offset, true)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 8)\n    this[offset + 1] = (value & 0xff)\n  } else {\n    objectWriteUInt16(this, value, offset, false)\n  }\n  return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value & 0xff)\n    this[offset + 1] = (value >>> 8)\n    this[offset + 2] = (value >>> 16)\n    this[offset + 3] = (value >>> 24)\n  } else {\n    objectWriteUInt32(this, value, offset, true)\n  }\n  return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n  value = +value\n  offset = offset | 0\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n  if (value < 0) value = 0xffffffff + value + 1\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = (value >>> 24)\n    this[offset + 1] = (value >>> 16)\n    this[offset + 2] = (value >>> 8)\n    this[offset + 3] = (value & 0xff)\n  } else {\n    objectWriteUInt32(this, value, offset, false)\n  }\n  return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range')\n  if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 23, 4)\n  return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n  }\n  ieee754.write(buf, value, offset, littleEndian, 52, 8)\n  return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n  if (!start) start = 0\n  if (!end && end !== 0) end = this.length\n  if (targetStart >= target.length) targetStart = target.length\n  if (!targetStart) targetStart = 0\n  if (end > 0 && end < start) end = start\n\n  // Copy 0 bytes; we're done\n  if (end === start) return 0\n  if (target.length === 0 || this.length === 0) return 0\n\n  // Fatal error conditions\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds')\n  }\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n  if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n  // Are we oob?\n  if (end > this.length) end = this.length\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start\n  }\n\n  var len = end - start\n  var i\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start]\n    }\n  } else {\n    Uint8Array.prototype.set.call(\n      target,\n      this.subarray(start, start + len),\n      targetStart\n    )\n  }\n\n  return len\n}\n\n// Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start\n      start = 0\n      end = this.length\n    } else if (typeof end === 'string') {\n      encoding = end\n      end = this.length\n    }\n    if (val.length === 1) {\n      var code = val.charCodeAt(0)\n      if (code < 256) {\n        val = code\n      }\n    }\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string')\n    }\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding)\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255\n  }\n\n  // Invalid ranges are not set to a default, so can range check early.\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index')\n  }\n\n  if (end <= start) {\n    return this\n  }\n\n  start = start >>> 0\n  end = end === undefined ? this.length : end >>> 0\n\n  if (!val) val = 0\n\n  var i\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val)\n      ? val\n      : utf8ToBytes(new Buffer(val, encoding).toString())\n    var len = bytes.length\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len]\n    }\n  }\n\n  return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n  // Node converts strings with length < 2 to ''\n  if (str.length < 2) return ''\n  // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n  while (str.length % 4 !== 0) {\n    str = str + '='\n  }\n  return str\n}\n\nfunction stringtrim (str) {\n  if (str.trim) return str.trim()\n  return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n  if (n < 16) return '0' + n.toString(16)\n  return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n  units = units || Infinity\n  var codePoint\n  var length = string.length\n  var leadSurrogate = null\n  var bytes = []\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i)\n\n    // is surrogate component\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n          continue\n        }\n\n        // valid lead\n        leadSurrogate = codePoint\n\n        continue\n      }\n\n      // 2 leads in a row\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n        leadSurrogate = codePoint\n        continue\n      }\n\n      // valid surrogate pair\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n    }\n\n    leadSurrogate = null\n\n    // encode utf8\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break\n      bytes.push(codePoint)\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break\n      bytes.push(\n        codePoint >> 0x6 | 0xC0,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break\n      bytes.push(\n        codePoint >> 0xC | 0xE0,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break\n      bytes.push(\n        codePoint >> 0x12 | 0xF0,\n        codePoint >> 0xC & 0x3F | 0x80,\n        codePoint >> 0x6 & 0x3F | 0x80,\n        codePoint & 0x3F | 0x80\n      )\n    } else {\n      throw new Error('Invalid code point')\n    }\n  }\n\n  return bytes\n}\n\nfunction asciiToBytes (str) {\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF)\n  }\n  return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n  var c, hi, lo\n  var byteArray = []\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break\n\n    c = str.charCodeAt(i)\n    hi = c >> 8\n    lo = c % 256\n    byteArray.push(lo)\n    byteArray.push(hi)\n  }\n\n  return byteArray\n}\n\nfunction base64ToBytes (str) {\n  return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if ((i + offset >= dst.length) || (i >= src.length)) break\n    dst[i + offset] = src[i]\n  }\n  return i\n}\n\nfunction isnan (val) {\n  return val !== val // eslint-disable-line no-self-compare\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/node-libs-browser/node_modules/buffer/index.js\n// module id = 745\n// module chunks = 0","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i]\n  revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n  var len = b64.length\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4')\n  }\n\n  // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n  var validLen = b64.indexOf('=')\n  if (validLen === -1) validLen = len\n\n  var placeHoldersLen = validLen === len\n    ? 0\n    : 4 - (validLen % 4)\n\n  return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n  return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n  var tmp\n  var lens = getLens(b64)\n  var validLen = lens[0]\n  var placeHoldersLen = lens[1]\n\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n  var curByte = 0\n\n  // if there are placeholders, only get up to the last complete 4 chars\n  var len = placeHoldersLen > 0\n    ? validLen - 4\n    : validLen\n\n  var i\n  for (i = 0; i < len; i += 4) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 18) |\n      (revLookup[b64.charCodeAt(i + 1)] << 12) |\n      (revLookup[b64.charCodeAt(i + 2)] << 6) |\n      revLookup[b64.charCodeAt(i + 3)]\n    arr[curByte++] = (tmp >> 16) & 0xFF\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 2) |\n      (revLookup[b64.charCodeAt(i + 1)] >> 4)\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp =\n      (revLookup[b64.charCodeAt(i)] << 10) |\n      (revLookup[b64.charCodeAt(i + 1)] << 4) |\n      (revLookup[b64.charCodeAt(i + 2)] >> 2)\n    arr[curByte++] = (tmp >> 8) & 0xFF\n    arr[curByte++] = tmp & 0xFF\n  }\n\n  return arr\n}\n\nfunction tripletToBase64 (num) {\n  return lookup[num >> 18 & 0x3F] +\n    lookup[num >> 12 & 0x3F] +\n    lookup[num >> 6 & 0x3F] +\n    lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n  var tmp\n  var output = []\n  for (var i = start; i < end; i += 3) {\n    tmp =\n      ((uint8[i] << 16) & 0xFF0000) +\n      ((uint8[i + 1] << 8) & 0xFF00) +\n      (uint8[i + 2] & 0xFF)\n    output.push(tripletToBase64(tmp))\n  }\n  return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n  var tmp\n  var len = uint8.length\n  var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n  var parts = []\n  var maxChunkLength = 16383 // must be multiple of 3\n\n  // go through the array every three bytes, we'll deal with trailing stuff later\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(\n      uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n    ))\n  }\n\n  // pad the end with zeros, but make sure to not forget the extra bytes\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 2] +\n      lookup[(tmp << 4) & 0x3F] +\n      '=='\n    )\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n    parts.push(\n      lookup[tmp >> 10] +\n      lookup[(tmp >> 4) & 0x3F] +\n      lookup[(tmp << 2) & 0x3F] +\n      '='\n    )\n  }\n\n  return parts.join('')\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/base64-js/index.js\n// module id = 746\n// module chunks = 0","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ieee754/index.js\n// module id = 747\n// module chunks = 0","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/isarray/index.js\n// module id = 748\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar idx = 0;\nvar Fieldset = /** @class */ (function () {\n    function Fieldset(el) {\n        this.el = el;\n        this.collapsed = false;\n        this.collapsedChange = new core_1.EventEmitter();\n        this.onBeforeToggle = new core_1.EventEmitter();\n        this.onAfterToggle = new core_1.EventEmitter();\n        this.id = \"ui-fieldset-\" + idx++;\n    }\n    Fieldset.prototype.toggle = function (event) {\n        if (this.animating) {\n            return false;\n        }\n        this.animating = true;\n        this.onBeforeToggle.emit({ originalEvent: event, collapsed: this.collapsed });\n        if (this.collapsed)\n            this.expand(event);\n        else\n            this.collapse(event);\n        this.onAfterToggle.emit({ originalEvent: event, collapsed: this.collapsed });\n        event.preventDefault();\n    };\n    Fieldset.prototype.expand = function (event) {\n        this.collapsed = false;\n        this.collapsedChange.emit(this.collapsed);\n    };\n    Fieldset.prototype.collapse = function (event) {\n        this.collapsed = true;\n        this.collapsedChange.emit(this.collapsed);\n    };\n    Fieldset.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Fieldset.prototype.onToggleDone = function (event) {\n        this.animating = false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Fieldset.prototype, \"legend\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Fieldset.prototype, \"toggleable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Fieldset.prototype, \"collapsed\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Fieldset.prototype, \"collapsedChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Fieldset.prototype, \"onBeforeToggle\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Fieldset.prototype, \"onAfterToggle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Fieldset.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Fieldset.prototype, \"styleClass\", void 0);\n    Fieldset = __decorate([\n        core_1.Component({\n            selector: 'p-fieldset',\n            template: \"\\n        <fieldset [attr.id]=\\\"id\\\" [ngClass]=\\\"{'ui-fieldset ui-widget ui-widget-content ui-corner-all': true, 'ui-fieldset-toggleable': toggleable}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <legend class=\\\"ui-fieldset-legend ui-corner-all ui-state-default ui-unselectable-text\\\">\\n                <ng-container *ngIf=\\\"toggleable; else legendContent\\\">\\n                    <a href=\\\"#\\\" (click)=\\\"toggle($event)\\\" [attr.aria-controls]=\\\"id + '-content'\\\" [attr.aria-expanded]=\\\"!collapsed\\\" [attr.tabindex]=\\\"toggleable ? null : -1\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"legendContent\\\"></ng-container>\\n                    </a>\\n                </ng-container>\\n                <ng-template #legendContent>\\n                    <span class=\\\"ui-fieldset-toggler fa fa-w\\\" *ngIf=\\\"toggleable\\\" [ngClass]=\\\"{'fa-minus': !collapsed,'fa-plus':collapsed}\\\"></span>\\n                    <span class=\\\"ui-fieldset-legend-text\\\">{{legend}}</span>\\n                    <ng-content select=\\\"p-header\\\"></ng-content>\\n                </ng-template>\\n            </legend>\\n            <div [attr.id]=\\\"id + '-content'\\\" class=\\\"ui-fieldset-content-wrapper\\\" [@fieldsetContent]=\\\"collapsed ? 'hidden' : 'visible'\\\" \\n                        [ngClass]=\\\"{'ui-fieldset-content-wrapper-overflown': collapsed||animating}\\\" [attr.aria-hidden]=\\\"collapsed\\\"\\n                         (@fieldsetContent.done)=\\\"onToggleDone($event)\\\" role=\\\"region\\\">\\n                <div class=\\\"ui-fieldset-content\\\">\\n                    <ng-content></ng-content>\\n                </div>\\n            </div>\\n        </fieldset>\\n    \",\n            animations: [\n                animations_1.trigger('fieldsetContent', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0px'\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*'\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], Fieldset);\n    return Fieldset;\n}());\nexports.Fieldset = Fieldset;\nvar FieldsetModule = /** @class */ (function () {\n    function FieldsetModule() {\n    }\n    FieldsetModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Fieldset, shared_1.SharedModule],\n            declarations: [Fieldset]\n        })\n    ], FieldsetModule);\n    return FieldsetModule;\n}());\nexports.FieldsetModule = FieldsetModule;\n//# sourceMappingURL=fieldset.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/fieldset/fieldset.js\n// module id = 749\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar platform_browser_1 = require(\"@angular/platform-browser\");\nvar button_1 = require(\"../button/button\");\nvar messages_1 = require(\"../messages/messages\");\nvar progressbar_1 = require(\"../progressbar/progressbar\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar shared_1 = require(\"../common/shared\");\nvar FileUpload = /** @class */ (function () {\n    function FileUpload(el, domHandler, sanitizer, zone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.sanitizer = sanitizer;\n        this.zone = zone;\n        this.method = 'POST';\n        this.invalidFileSizeMessageSummary = '{0}: Invalid file size, ';\n        this.invalidFileSizeMessageDetail = 'maximum upload size is {0}.';\n        this.invalidFileTypeMessageSummary = '{0}: Invalid file type, ';\n        this.invalidFileTypeMessageDetail = 'allowed file types: {0}.';\n        this.previewWidth = 50;\n        this.chooseLabel = 'Choose';\n        this.uploadLabel = 'Upload';\n        this.cancelLabel = 'Cancel';\n        this.showUploadButton = true;\n        this.showCancelButton = true;\n        this.mode = 'advanced';\n        this.onBeforeUpload = new core_1.EventEmitter();\n        this.onBeforeSend = new core_1.EventEmitter();\n        this.onUpload = new core_1.EventEmitter();\n        this.onError = new core_1.EventEmitter();\n        this.onClear = new core_1.EventEmitter();\n        this.onRemove = new core_1.EventEmitter();\n        this.onSelect = new core_1.EventEmitter();\n        this.onProgress = new core_1.EventEmitter();\n        this.uploadHandler = new core_1.EventEmitter();\n        this.progress = 0;\n    }\n    FileUpload.prototype.ngOnInit = function () {\n        this.files = [];\n    };\n    FileUpload.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'file':\n                    _this.fileTemplate = item.template;\n                    break;\n                case 'content':\n                    _this.contentTemplate = item.template;\n                    break;\n                case 'toolbar':\n                    _this.toolbarTemplate = item.template;\n                    break;\n                default:\n                    _this.fileTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    FileUpload.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        if (this.mode === 'advanced') {\n            this.zone.runOutsideAngular(function () {\n                _this.content.nativeElement.addEventListener('dragover', _this.onDragOver.bind(_this));\n            });\n        }\n    };\n    FileUpload.prototype.onFileSelect = function (event) {\n        if (event.type !== 'drop' && this.isIE11() && this.duplicateIEEvent) {\n            this.duplicateIEEvent = false;\n            return;\n        }\n        this.msgs = [];\n        if (!this.multiple) {\n            this.files = [];\n        }\n        var files = event.dataTransfer ? event.dataTransfer.files : event.target.files;\n        for (var i = 0; i < files.length; i++) {\n            var file = files[i];\n            if (!this.isFileSelected(file)) {\n                if (this.validate(file)) {\n                    if (this.isImage(file)) {\n                        file.objectURL = this.sanitizer.bypassSecurityTrustUrl((window.URL.createObjectURL(files[i])));\n                    }\n                    this.files.push(files[i]);\n                }\n            }\n        }\n        this.onSelect.emit({ originalEvent: event, files: files });\n        if (this.hasFiles() && this.auto) {\n            this.upload();\n        }\n        if (event.type !== 'drop' && this.isIE11()) {\n            this.clearIEInput();\n        }\n        else {\n            this.clearInputElement();\n        }\n    };\n    FileUpload.prototype.isFileSelected = function (file) {\n        for (var _i = 0, _a = this.files; _i < _a.length; _i++) {\n            var sFile = _a[_i];\n            if ((sFile.name + sFile.type + sFile.size) === (file.name + file.type + file.size)) {\n                return true;\n            }\n        }\n        return false;\n    };\n    FileUpload.prototype.isIE11 = function () {\n        return !!window['MSInputMethodContext'] && !!document['documentMode'];\n    };\n    FileUpload.prototype.validate = function (file) {\n        if (this.accept && !this.isFileTypeValid(file)) {\n            this.msgs.push({\n                severity: 'error',\n                summary: this.invalidFileTypeMessageSummary.replace('{0}', file.name),\n                detail: this.invalidFileTypeMessageDetail.replace('{0}', this.accept)\n            });\n            return false;\n        }\n        if (this.maxFileSize && file.size > this.maxFileSize) {\n            this.msgs.push({\n                severity: 'error',\n                summary: this.invalidFileSizeMessageSummary.replace('{0}', file.name),\n                detail: this.invalidFileSizeMessageDetail.replace('{0}', this.formatSize(this.maxFileSize))\n            });\n            return false;\n        }\n        return true;\n    };\n    FileUpload.prototype.isFileTypeValid = function (file) {\n        var acceptableTypes = this.accept.split(',');\n        for (var _i = 0, acceptableTypes_1 = acceptableTypes; _i < acceptableTypes_1.length; _i++) {\n            var type = acceptableTypes_1[_i];\n            var acceptable = this.isWildcard(type) ? this.getTypeClass(file.type) === this.getTypeClass(type)\n                : file.type == type || this.getFileExtension(file) === type;\n            if (acceptable) {\n                return true;\n            }\n        }\n        return false;\n    };\n    FileUpload.prototype.getTypeClass = function (fileType) {\n        return fileType.substring(0, fileType.indexOf('/'));\n    };\n    FileUpload.prototype.isWildcard = function (fileType) {\n        return fileType.indexOf('*') !== -1;\n    };\n    FileUpload.prototype.getFileExtension = function (file) {\n        return '.' + file.name.split('.').pop();\n    };\n    FileUpload.prototype.isImage = function (file) {\n        return /^image\\//.test(file.type);\n    };\n    FileUpload.prototype.onImageLoad = function (img) {\n        window.URL.revokeObjectURL(img.src);\n    };\n    FileUpload.prototype.upload = function () {\n        var _this = this;\n        if (this.customUpload) {\n            this.uploadHandler.emit({\n                files: this.files\n            });\n        }\n        else {\n            this.msgs = [];\n            var xhr_1 = new XMLHttpRequest(), formData = new FormData();\n            this.onBeforeUpload.emit({\n                'xhr': xhr_1,\n                'formData': formData\n            });\n            for (var i = 0; i < this.files.length; i++) {\n                formData.append(this.name, this.files[i], this.files[i].name);\n            }\n            xhr_1.upload.addEventListener('progress', function (e) {\n                if (e.lengthComputable) {\n                    _this.progress = Math.round((e.loaded * 100) / e.total);\n                }\n                _this.onProgress.emit({ originalEvent: e, progress: _this.progress });\n            }, false);\n            xhr_1.onreadystatechange = function () {\n                if (xhr_1.readyState == 4) {\n                    _this.progress = 0;\n                    if (xhr_1.status >= 200 && xhr_1.status < 300)\n                        _this.onUpload.emit({ xhr: xhr_1, files: _this.files });\n                    else\n                        _this.onError.emit({ xhr: xhr_1, files: _this.files });\n                    _this.clear();\n                }\n            };\n            xhr_1.open(this.method, this.url, true);\n            this.onBeforeSend.emit({\n                'xhr': xhr_1,\n                'formData': formData\n            });\n            xhr_1.withCredentials = this.withCredentials;\n            xhr_1.send(formData);\n        }\n    };\n    FileUpload.prototype.clear = function () {\n        this.files = [];\n        this.onClear.emit();\n        this.clearInputElement();\n    };\n    FileUpload.prototype.remove = function (event, index) {\n        this.clearInputElement();\n        this.onRemove.emit({ originalEvent: event, file: this.files[index] });\n        this.files.splice(index, 1);\n    };\n    FileUpload.prototype.clearInputElement = function () {\n        if (this.advancedFileInput && this.advancedFileInput.nativeElement) {\n            this.advancedFileInput.nativeElement.value = '';\n        }\n        if (this.basicFileInput && this.basicFileInput.nativeElement) {\n            this.basicFileInput.nativeElement.value = '';\n        }\n    };\n    FileUpload.prototype.clearIEInput = function () {\n        if (this.advancedFileInput && this.advancedFileInput.nativeElement) {\n            this.duplicateIEEvent = true; //IE11 fix to prevent onFileChange trigger again\n            this.advancedFileInput.nativeElement.value = '';\n        }\n    };\n    FileUpload.prototype.hasFiles = function () {\n        return this.files && this.files.length > 0;\n    };\n    FileUpload.prototype.onDragEnter = function (e) {\n        if (!this.disabled) {\n            e.stopPropagation();\n            e.preventDefault();\n        }\n    };\n    FileUpload.prototype.onDragOver = function (e) {\n        if (!this.disabled) {\n            this.domHandler.addClass(this.content.nativeElement, 'ui-fileupload-highlight');\n            this.dragHighlight = true;\n            e.stopPropagation();\n            e.preventDefault();\n        }\n    };\n    FileUpload.prototype.onDragLeave = function (event) {\n        if (!this.disabled) {\n            this.domHandler.removeClass(this.content.nativeElement, 'ui-fileupload-highlight');\n        }\n    };\n    FileUpload.prototype.onDrop = function (event) {\n        if (!this.disabled) {\n            this.domHandler.removeClass(this.content.nativeElement, 'ui-fileupload-highlight');\n            event.stopPropagation();\n            event.preventDefault();\n            var files = event.dataTransfer ? event.dataTransfer.files : event.target.files;\n            var allowDrop = this.multiple || (files && files.length === 1);\n            if (allowDrop) {\n                this.onFileSelect(event);\n            }\n        }\n    };\n    FileUpload.prototype.onFocus = function () {\n        this.focus = true;\n    };\n    FileUpload.prototype.onBlur = function () {\n        this.focus = false;\n    };\n    FileUpload.prototype.formatSize = function (bytes) {\n        if (bytes == 0) {\n            return '0 B';\n        }\n        var k = 1000, dm = 3, sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'], i = Math.floor(Math.log(bytes) / Math.log(k));\n        return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + ' ' + sizes[i];\n    };\n    FileUpload.prototype.onSimpleUploaderClick = function (event) {\n        if (this.hasFiles()) {\n            this.upload();\n        }\n    };\n    FileUpload.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    FileUpload.prototype.ngOnDestroy = function () {\n        if (this.content && this.content.nativeElement) {\n            this.content.nativeElement.removeEventListener('dragover', this.onDragOver);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"url\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"method\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"accept\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"auto\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"withCredentials\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], FileUpload.prototype, \"maxFileSize\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"invalidFileSizeMessageSummary\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"invalidFileSizeMessageDetail\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"invalidFileTypeMessageSummary\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"invalidFileTypeMessageDetail\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], FileUpload.prototype, \"previewWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"chooseLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"uploadLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"cancelLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"showUploadButton\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"showCancelButton\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], FileUpload.prototype, \"mode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], FileUpload.prototype, \"customUpload\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onBeforeUpload\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onBeforeSend\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onUpload\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onError\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onClear\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onRemove\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"onProgress\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], FileUpload.prototype, \"uploadHandler\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], FileUpload.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.ViewChild('advancedfileinput'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], FileUpload.prototype, \"advancedFileInput\", void 0);\n    __decorate([\n        core_1.ViewChild('basicfileinput'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], FileUpload.prototype, \"basicFileInput\", void 0);\n    __decorate([\n        core_1.ViewChild('content'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], FileUpload.prototype, \"content\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], FileUpload.prototype, \"files\", void 0);\n    FileUpload = __decorate([\n        core_1.Component({\n            selector: 'p-fileUpload',\n            template: \"\\n        <div [ngClass]=\\\"'ui-fileupload ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"mode === 'advanced'\\\">\\n            <div class=\\\"ui-fileupload-buttonbar ui-widget-header ui-corner-top\\\">\\n                <span class=\\\"ui-fileupload-choose\\\" [label]=\\\"chooseLabel\\\" icon=\\\"fa-plus\\\" pButton [ngClass]=\\\"{'ui-state-focus': focus, 'ui-state-disabled':disabled}\\\"> \\n                    <input #advancedfileinput type=\\\"file\\\" (change)=\\\"onFileSelect($event)\\\" [multiple]=\\\"multiple\\\" [accept]=\\\"accept\\\" [disabled]=\\\"disabled\\\" (focus)=\\\"onFocus()\\\" (blur)=\\\"onBlur()\\\">\\n                </span>\\n\\n                <button *ngIf=\\\"!auto&&showUploadButton\\\" type=\\\"button\\\" [label]=\\\"uploadLabel\\\" icon=\\\"fa-upload\\\" pButton (click)=\\\"upload()\\\" [disabled]=\\\"!hasFiles()\\\"></button>\\n                <button *ngIf=\\\"!auto&&showCancelButton\\\" type=\\\"button\\\" [label]=\\\"cancelLabel\\\" icon=\\\"fa-close\\\" pButton (click)=\\\"clear()\\\" [disabled]=\\\"!hasFiles()\\\"></button>\\n            \\n                <ng-container *ngTemplateOutlet=\\\"toolbarTemplate\\\"></ng-container>\\n            </div>\\n            <div #content [ngClass]=\\\"{'ui-fileupload-content ui-widget-content ui-corner-bottom':true}\\\" \\n                (dragenter)=\\\"onDragEnter($event)\\\" (dragleave)=\\\"onDragLeave($event)\\\" (drop)=\\\"onDrop($event)\\\">\\n                <p-progressBar [value]=\\\"progress\\\" [showValue]=\\\"false\\\" *ngIf=\\\"hasFiles()\\\"></p-progressBar>\\n                \\n                <p-messages [value]=\\\"msgs\\\" [enableService]=\\\"false\\\"></p-messages>\\n                \\n                <div class=\\\"ui-fileupload-files\\\" *ngIf=\\\"hasFiles()\\\">\\n                    <div *ngIf=\\\"!fileTemplate\\\">\\n                        <div class=\\\"ui-fileupload-row\\\" *ngFor=\\\"let file of files; let i = index;\\\">\\n                            <div><img [src]=\\\"file.objectURL\\\" *ngIf=\\\"isImage(file)\\\" [width]=\\\"previewWidth\\\" /></div>\\n                            <div>{{file.name}}</div>\\n                            <div>{{formatSize(file.size)}}</div>\\n                            <div><button type=\\\"button\\\" icon=\\\"fa-close\\\" pButton (click)=\\\"remove($event,i)\\\"></button></div>\\n                        </div>\\n                    </div>\\n                    <div *ngIf=\\\"fileTemplate\\\">\\n                        <ng-template ngFor [ngForOf]=\\\"files\\\" [ngForTemplate]=\\\"fileTemplate\\\"></ng-template>\\n                    </div>\\n                </div>\\n                <ng-container *ngTemplateOutlet=\\\"contentTemplate\\\"></ng-container>\\n            </div>\\n        </div>\\n        <span class=\\\"ui-button ui-fileupload-choose ui-widget ui-state-default ui-corner-all ui-button-text-icon-left\\\" *ngIf=\\\"mode === 'basic'\\\" \\n        (mouseup)=\\\"onSimpleUploaderClick($event)\\\"\\n        [ngClass]=\\\"{'ui-fileupload-choose-selected': hasFiles(),'ui-state-focus': focus, 'ui-state-disabled':disabled}\\\">\\n            <span class=\\\"ui-button-icon-left fa\\\" [ngClass]=\\\"{'fa-plus': !hasFiles()||auto, 'fa-upload': hasFiles()&&!auto}\\\"></span>\\n            <span class=\\\"ui-button-text ui-clickable\\\">{{auto ? chooseLabel : hasFiles() ? files[0].name : chooseLabel}}</span>\\n            <input #basicfileinput type=\\\"file\\\" [accept]=\\\"accept\\\" [multiple]=\\\"multiple\\\" [disabled]=\\\"disabled\\\"\\n                (change)=\\\"onFileSelect($event)\\\" *ngIf=\\\"!hasFiles()\\\" (focus)=\\\"onFocus()\\\" (blur)=\\\"onBlur()\\\">\\n        </span>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, platform_browser_1.DomSanitizer, core_1.NgZone])\n    ], FileUpload);\n    return FileUpload;\n}());\nexports.FileUpload = FileUpload;\nvar FileUploadModule = /** @class */ (function () {\n    function FileUploadModule() {\n    }\n    FileUploadModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule, button_1.ButtonModule, progressbar_1.ProgressBarModule, messages_1.MessagesModule],\n            exports: [FileUpload, shared_1.SharedModule, button_1.ButtonModule, progressbar_1.ProgressBarModule, messages_1.MessagesModule],\n            declarations: [FileUpload]\n        })\n    ], FileUploadModule);\n    return FileUploadModule;\n}());\nexports.FileUploadModule = FileUploadModule;\n//# sourceMappingURL=fileupload.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/fileupload/fileupload.js\n// module id = 750\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar Galleria = /** @class */ (function () {\n    function Galleria(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.panelWidth = 600;\n        this.panelHeight = 400;\n        this.frameWidth = 60;\n        this.frameHeight = 40;\n        this.activeIndex = 0;\n        this.showFilmstrip = true;\n        this.autoPlay = true;\n        this.transitionInterval = 4000;\n        this.showCaption = true;\n        this.effectDuration = 500;\n        this.onImageClicked = new core_1.EventEmitter();\n        this.onImageChange = new core_1.EventEmitter();\n        this.stripLeft = 0;\n    }\n    Galleria.prototype.ngAfterViewChecked = function () {\n        if (this.imagesChanged) {\n            this.stopSlideshow();\n            this.render();\n            this.imagesChanged = false;\n        }\n    };\n    Object.defineProperty(Galleria.prototype, \"images\", {\n        get: function () {\n            return this._images;\n        },\n        set: function (value) {\n            this._images = value;\n            this.activeIndex = 0;\n            this.imagesChanged = true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Galleria.prototype.ngAfterViewInit = function () {\n        this.container = this.el.nativeElement.children[0];\n        this.panelWrapper = this.domHandler.findSingle(this.el.nativeElement, 'ul.ui-galleria-panel-wrapper');\n        this.initialized = true;\n        if (this.showFilmstrip) {\n            this.stripWrapper = this.domHandler.findSingle(this.container, 'div.ui-galleria-filmstrip-wrapper');\n            this.strip = this.domHandler.findSingle(this.stripWrapper, 'ul.ui-galleria-filmstrip');\n        }\n        if (this.images && this.images.length) {\n            this.render();\n        }\n    };\n    Galleria.prototype.render = function () {\n        this.panels = this.domHandler.find(this.panelWrapper, 'li.ui-galleria-panel');\n        if (this.showFilmstrip) {\n            this.frames = this.domHandler.find(this.strip, 'li.ui-galleria-frame');\n            this.stripWrapper.style.width = this.domHandler.width(this.panelWrapper) - 50 + 'px';\n            this.stripWrapper.style.height = this.frameHeight + 'px';\n        }\n        if (this.showCaption) {\n            this.caption = this.domHandler.findSingle(this.container, 'div.ui-galleria-caption');\n            this.caption.style.bottom = this.showFilmstrip ? this.domHandler.getOuterHeight(this.stripWrapper, true) + 'px' : 0 + 'px';\n            this.caption.style.width = this.domHandler.width(this.panelWrapper) + 'px';\n        }\n        if (this.autoPlay) {\n            this.startSlideshow();\n        }\n        this.container.style.visibility = 'visible';\n    };\n    Galleria.prototype.startSlideshow = function () {\n        var _this = this;\n        this.interval = setInterval(function () {\n            _this.next();\n        }, this.transitionInterval);\n        this.slideshowActive = true;\n    };\n    Galleria.prototype.stopSlideshow = function () {\n        if (this.interval) {\n            clearInterval(this.interval);\n        }\n        this.slideshowActive = false;\n    };\n    Galleria.prototype.clickNavRight = function () {\n        if (this.slideshowActive) {\n            this.stopSlideshow();\n        }\n        this.next();\n    };\n    Galleria.prototype.clickNavLeft = function () {\n        if (this.slideshowActive) {\n            this.stopSlideshow();\n        }\n        this.prev();\n    };\n    Galleria.prototype.frameClick = function (frame) {\n        if (this.slideshowActive) {\n            this.stopSlideshow();\n        }\n        this.select(this.domHandler.index(frame), false);\n    };\n    Galleria.prototype.prev = function () {\n        if (this.activeIndex !== 0) {\n            this.select(this.activeIndex - 1, true);\n        }\n    };\n    Galleria.prototype.next = function () {\n        if (this.activeIndex !== (this.panels.length - 1)) {\n            this.select(this.activeIndex + 1, true);\n        }\n        else {\n            this.select(0, false);\n            this.stripLeft = 0;\n        }\n    };\n    Galleria.prototype.select = function (index, reposition) {\n        if (index !== this.activeIndex) {\n            var oldPanel = this.panels[this.activeIndex], newPanel = this.panels[index];\n            this.domHandler.fadeIn(newPanel, this.effectDuration);\n            if (this.showFilmstrip) {\n                var oldFrame = this.frames[this.activeIndex], newFrame = this.frames[index];\n                if (reposition === undefined || reposition === true) {\n                    var frameLeft = newFrame.offsetLeft, stepFactor = this.frameWidth + parseInt(getComputedStyle(newFrame)['margin-right'], 10), stripLeft = this.strip.offsetLeft, frameViewportLeft = frameLeft + stripLeft, frameViewportRight = frameViewportLeft + this.frameWidth;\n                    if (frameViewportRight > this.domHandler.width(this.stripWrapper))\n                        this.stripLeft -= stepFactor;\n                    else if (frameViewportLeft < 0)\n                        this.stripLeft += stepFactor;\n                }\n            }\n            this.activeIndex = index;\n            this.onImageChange.emit({ index: index });\n        }\n    };\n    Galleria.prototype.clickImage = function (event, image, i) {\n        this.onImageClicked.emit({ originalEvent: event, image: image, index: i });\n    };\n    Galleria.prototype.ngOnDestroy = function () {\n        this.stopSlideshow();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Galleria.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Galleria.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"panelWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"panelHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"frameWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"frameHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"activeIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Galleria.prototype, \"showFilmstrip\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Galleria.prototype, \"autoPlay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"transitionInterval\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Galleria.prototype, \"showCaption\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Galleria.prototype, \"effectDuration\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", Object)\n    ], Galleria.prototype, \"onImageClicked\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", Object)\n    ], Galleria.prototype, \"onImageChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Galleria.prototype, \"images\", null);\n    Galleria = __decorate([\n        core_1.Component({\n            selector: 'p-galleria',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-galleria ui-widget ui-widget-content ui-corner-all':true}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [style.width.px]=\\\"panelWidth\\\">\\n            <ul class=\\\"ui-galleria-panel-wrapper\\\" [style.width.px]=\\\"panelWidth\\\" [style.height.px]=\\\"panelHeight\\\">\\n                <li *ngFor=\\\"let image of images;let i=index\\\" class=\\\"ui-galleria-panel\\\" [ngClass]=\\\"{'ui-helper-hidden':i!=activeIndex}\\\"\\n                    [style.width.px]=\\\"panelWidth\\\" [style.height.px]=\\\"panelHeight\\\" (click)=\\\"clickImage($event,image,i)\\\">\\n                    <img class=\\\"ui-panel-images\\\" [src]=\\\"image.source\\\" [alt]=\\\"image.alt\\\" [title]=\\\"image.title\\\"/>\\n                </li>\\n            </ul>\\n            <div [ngClass]=\\\"{'ui-galleria-filmstrip-wrapper':true}\\\" *ngIf=\\\"showFilmstrip\\\">\\n                <ul class=\\\"ui-galleria-filmstrip\\\" style=\\\"transition:left 1s\\\" [style.left.px]=\\\"stripLeft\\\">\\n                    <li #frame *ngFor=\\\"let image of images;let i=index\\\" [ngClass]=\\\"{'ui-galleria-frame-active':i==activeIndex}\\\" class=\\\"ui-galleria-frame\\\" (click)=\\\"frameClick(frame)\\\"\\n                        [style.width.px]=\\\"frameWidth\\\" [style.height.px]=\\\"frameHeight\\\" [style.transition]=\\\"'opacity 0.75s ease'\\\">\\n                        <div class=\\\"ui-galleria-frame-content\\\">\\n                            <img [src]=\\\"image.source\\\" [alt]=\\\"image.alt\\\" [title]=\\\"image.title\\\" class=\\\"ui-galleria-frame-image\\\"\\n                                [style.width.px]=\\\"frameWidth\\\" [style.height.px]=\\\"frameHeight\\\">\\n                        </div>\\n                    </li>\\n                </ul>\\n            </div>\\n            <div class=\\\"ui-galleria-nav-prev fa fa-fw fa-chevron-circle-left\\\" (click)=\\\"clickNavLeft()\\\" [style.bottom.px]=\\\"frameHeight/2\\\" *ngIf=\\\"activeIndex !== 0\\\"></div>\\n            <div class=\\\"ui-galleria-nav-next fa fa-fw fa-chevron-circle-right\\\" (click)=\\\"clickNavRight()\\\" [style.bottom.px]=\\\"frameHeight/2\\\"></div>\\n            <div class=\\\"ui-galleria-caption\\\" *ngIf=\\\"showCaption&&images\\\" style=\\\"display:block\\\">\\n                <h4>{{images[activeIndex]?.title}}</h4><p>{{images[activeIndex]?.alt}}</p>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], Galleria);\n    return Galleria;\n}());\nexports.Galleria = Galleria;\nvar GalleriaModule = /** @class */ (function () {\n    function GalleriaModule() {\n    }\n    GalleriaModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Galleria],\n            declarations: [Galleria]\n        })\n    ], GalleriaModule);\n    return GalleriaModule;\n}());\nexports.GalleriaModule = GalleriaModule;\n//# sourceMappingURL=galleria.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/galleria/galleria.js\n// module id = 751\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar GMap = /** @class */ (function () {\n    function GMap(el, differs, cd, zone) {\n        this.el = el;\n        this.cd = cd;\n        this.zone = zone;\n        this.onMapClick = new core_1.EventEmitter();\n        this.onOverlayClick = new core_1.EventEmitter();\n        this.onOverlayDragStart = new core_1.EventEmitter();\n        this.onOverlayDrag = new core_1.EventEmitter();\n        this.onOverlayDragEnd = new core_1.EventEmitter();\n        this.onMapReady = new core_1.EventEmitter();\n        this.onMapDragEnd = new core_1.EventEmitter();\n        this.onZoomChanged = new core_1.EventEmitter();\n        this.differ = differs.find([]).create(null);\n    }\n    GMap.prototype.ngAfterViewChecked = function () {\n        if (!this.map && this.el.nativeElement.offsetParent) {\n            this.initialize();\n        }\n    };\n    GMap.prototype.initialize = function () {\n        var _this = this;\n        this.map = new google.maps.Map(this.el.nativeElement.children[0], this.options);\n        this.onMapReady.emit({\n            map: this.map\n        });\n        if (this.overlays) {\n            for (var _i = 0, _a = this.overlays; _i < _a.length; _i++) {\n                var overlay = _a[_i];\n                overlay.setMap(this.map);\n                this.bindOverlayEvents(overlay);\n            }\n        }\n        this.map.addListener('click', function (event) {\n            _this.zone.run(function () {\n                _this.onMapClick.emit(event);\n            });\n        });\n        this.map.addListener('dragend', function (event) {\n            _this.zone.run(function () {\n                _this.onMapDragEnd.emit(event);\n            });\n        });\n        this.map.addListener('zoom_changed', function (event) {\n            _this.zone.run(function () {\n                _this.onZoomChanged.emit(event);\n            });\n        });\n    };\n    GMap.prototype.bindOverlayEvents = function (overlay) {\n        var _this = this;\n        overlay.addListener('click', function (event) {\n            _this.zone.run(function () {\n                _this.onOverlayClick.emit({\n                    originalEvent: event,\n                    'overlay': overlay,\n                    map: _this.map\n                });\n            });\n        });\n        if (overlay.getDraggable()) {\n            this.bindDragEvents(overlay);\n        }\n    };\n    GMap.prototype.ngDoCheck = function () {\n        var _this = this;\n        var changes = this.differ.diff(this.overlays);\n        if (changes && this.map) {\n            changes.forEachRemovedItem(function (record) {\n                google.maps.event.clearInstanceListeners(record.item);\n                record.item.setMap(null);\n            });\n            changes.forEachAddedItem(function (record) {\n                record.item.setMap(_this.map);\n                record.item.addListener('click', function (event) {\n                    _this.zone.run(function () {\n                        _this.onOverlayClick.emit({\n                            originalEvent: event,\n                            overlay: record.item,\n                            map: _this.map\n                        });\n                    });\n                });\n                if (record.item.getDraggable()) {\n                    _this.bindDragEvents(record.item);\n                }\n            });\n        }\n    };\n    GMap.prototype.bindDragEvents = function (overlay) {\n        var _this = this;\n        overlay.addListener('dragstart', function (event) {\n            _this.zone.run(function () {\n                _this.onOverlayDragStart.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: _this.map\n                });\n            });\n        });\n        overlay.addListener('drag', function (event) {\n            _this.zone.run(function () {\n                _this.onOverlayDrag.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: _this.map\n                });\n            });\n        });\n        overlay.addListener('dragend', function (event) {\n            _this.zone.run(function () {\n                _this.onOverlayDragEnd.emit({\n                    originalEvent: event,\n                    overlay: overlay,\n                    map: _this.map\n                });\n            });\n        });\n    };\n    GMap.prototype.getMap = function () {\n        return this.map;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], GMap.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], GMap.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], GMap.prototype, \"options\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], GMap.prototype, \"overlays\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onMapClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onOverlayClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onOverlayDragStart\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onOverlayDrag\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onOverlayDragEnd\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onMapReady\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onMapDragEnd\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], GMap.prototype, \"onZoomChanged\", void 0);\n    GMap = __decorate([\n        core_1.Component({\n            selector: 'p-gmap',\n            template: \"<div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\"></div>\"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.IterableDiffers, core_1.ChangeDetectorRef, core_1.NgZone])\n    ], GMap);\n    return GMap;\n}());\nexports.GMap = GMap;\nvar GMapModule = /** @class */ (function () {\n    function GMapModule() {\n    }\n    GMapModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [GMap],\n            declarations: [GMap]\n        })\n    ], GMapModule);\n    return GMapModule;\n}());\nexports.GMapModule = GMapModule;\n//# sourceMappingURL=gmap.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/gmap/gmap.js\n// module id = 752\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar messageservice_1 = require(\"../common/messageservice\");\nvar Growl = /** @class */ (function () {\n    function Growl(el, domHandler, differs, messageService, zone) {\n        var _this = this;\n        this.el = el;\n        this.domHandler = domHandler;\n        this.differs = differs;\n        this.messageService = messageService;\n        this.zone = zone;\n        this.life = 3000;\n        this.immutable = true;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.onClick = new core_1.EventEmitter();\n        this.onHover = new core_1.EventEmitter();\n        this.onClose = new core_1.EventEmitter();\n        this.valueChange = new core_1.EventEmitter();\n        this.differ = differs.find([]).create(null);\n        if (messageService) {\n            this.subscription = messageService.messageObserver.subscribe(function (messages) {\n                if (messages) {\n                    if (messages instanceof Array) {\n                        var filteredMessages = messages.filter(function (m) { return _this.key === m.key; });\n                        _this.value = _this.value ? _this.value.concat(filteredMessages) : filteredMessages.slice();\n                    }\n                    else if (_this.key === messages.key) {\n                        _this.value = _this.value ? _this.value.concat([messages]) : [messages];\n                    }\n                }\n                else {\n                    _this.value = null;\n                }\n            });\n        }\n    }\n    Growl.prototype.ngAfterViewInit = function () {\n        if (!this.sticky) {\n            this.initTimeout();\n        }\n    };\n    Object.defineProperty(Growl.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            if (this.containerViewChild && this.containerViewChild.nativeElement && this.immutable) {\n                this.handleValueChange();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Growl.prototype, \"sticky\", {\n        get: function () {\n            return this._sticky;\n        },\n        set: function (value) {\n            if (value && this.timeout) {\n                clearTimeout(this.timeout);\n            }\n            this._sticky = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Growl.prototype.ngDoCheck = function () {\n        if (!this.immutable && this.containerViewChild && this.containerViewChild.nativeElement) {\n            var changes = this.differ.diff(this.value);\n            if (changes) {\n                this.handleValueChange();\n            }\n        }\n    };\n    Growl.prototype.handleValueChange = function () {\n        if (this.preventRerender) {\n            this.preventRerender = false;\n            return;\n        }\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n        this.domHandler.fadeIn(this.containerViewChild.nativeElement, 250);\n        if (!this.sticky) {\n            this.initTimeout();\n        }\n    };\n    Growl.prototype.initTimeout = function () {\n        var _this = this;\n        if (this.timeout) {\n            clearTimeout(this.timeout);\n        }\n        this.zone.runOutsideAngular(function () {\n            _this.timeout = setTimeout(function () {\n                _this.zone.run(function () {\n                    _this.removeAll();\n                });\n            }, _this.life);\n        });\n    };\n    Growl.prototype.remove = function (index, msgel) {\n        var _this = this;\n        this.closeIconClick = true;\n        this.domHandler.fadeOut(msgel, 250);\n        setTimeout(function () {\n            _this.preventRerender = true;\n            _this.onClose.emit({ message: _this.value[index] });\n            if (_this.immutable) {\n                _this._value = _this.value.filter(function (val, i) { return i != index; });\n                _this.valueChange.emit(_this._value);\n            }\n            else {\n                _this._value.splice(index, 1);\n            }\n        }, 250);\n    };\n    Growl.prototype.removeAll = function () {\n        var _this = this;\n        if (this.value && this.value.length) {\n            this.domHandler.fadeOut(this.containerViewChild.nativeElement, 250);\n            setTimeout(function () {\n                _this.value.forEach(function (msg, index) { return _this.onClose.emit({ message: _this.value[index] }); });\n                if (_this.immutable) {\n                    _this.value = [];\n                    _this.valueChange.emit(_this.value);\n                }\n                else {\n                    _this.value.splice(0, _this.value.length);\n                }\n            }, 250);\n        }\n    };\n    Growl.prototype.onMessageClick = function (i) {\n        if (this.closeIconClick)\n            this.closeIconClick = false;\n        else\n            this.onClick.emit({ message: this.value[i] });\n    };\n    Growl.prototype.onMessageHover = function (i) {\n        this.onHover.emit({ message: this.value[i] });\n    };\n    Growl.prototype.ngOnDestroy = function () {\n        if (!this.sticky) {\n            clearTimeout(this.timeout);\n        }\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Growl.prototype, \"life\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Growl.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Growl.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Growl.prototype, \"immutable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Growl.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Growl.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Growl.prototype, \"key\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Growl.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Growl.prototype, \"onHover\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Growl.prototype, \"onClose\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Growl.prototype, \"valueChange\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Growl.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Growl.prototype, \"value\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Growl.prototype, \"sticky\", null);\n    Growl = __decorate([\n        core_1.Component({\n            selector: 'p-growl',\n            template: \"\\n        <div #container [ngClass]=\\\"'ui-growl ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div #msgel *ngFor=\\\"let msg of value;let i = index\\\" class=\\\"ui-growl-item-container ui-state-highlight ui-corner-all ui-shadow\\\" aria-live=\\\"polite\\\"\\n                [ngClass]=\\\"{'ui-growl-message-info':msg.severity == 'info','ui-growl-message-warn':msg.severity == 'warn',\\n                    'ui-growl-message-error':msg.severity == 'error','ui-growl-message-success':msg.severity == 'success'}\\\"\\n                    (click)=\\\"onMessageClick(i)\\\" (mouseenter)=\\\"onMessageHover(i)\\\">\\n                <div class=\\\"ui-growl-item\\\">\\n                     <div class=\\\"ui-growl-icon-close fa fa-close\\\" (click)=\\\"remove(i,msgel)\\\"></div>\\n                     <span class=\\\"ui-growl-image fa fa-2x\\\"\\n                        [ngClass]=\\\"{'fa-info-circle':msg.severity == 'info','fa-exclamation-circle':msg.severity == 'warn',\\n                                'fa-close':msg.severity == 'error','fa-check':msg.severity == 'success'}\\\"></span>\\n                     <div class=\\\"ui-growl-message\\\">\\n                        <span class=\\\"ui-growl-title\\\">{{msg.summary}}</span>\\n                        <p [innerHTML]=\\\"msg.detail||''\\\"></p>\\n                     </div>\\n                     <div style=\\\"clear: both;\\\"></div>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __param(3, core_1.Optional()),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.IterableDiffers, messageservice_1.MessageService, core_1.NgZone])\n    ], Growl);\n    return Growl;\n}());\nexports.Growl = Growl;\nvar GrowlModule = /** @class */ (function () {\n    function GrowlModule() {\n    }\n    GrowlModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Growl],\n            declarations: [Growl]\n        })\n    ], GrowlModule);\n    return GrowlModule;\n}());\nexports.GrowlModule = GrowlModule;\n//# sourceMappingURL=growl.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/growl/growl.js\n// module id = 753\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar button_1 = require(\"../button/button\");\nvar InplaceDisplay = /** @class */ (function () {\n    function InplaceDisplay() {\n    }\n    InplaceDisplay = __decorate([\n        core_1.Component({\n            selector: 'p-inplaceDisplay',\n            template: '<ng-content></ng-content>'\n        })\n    ], InplaceDisplay);\n    return InplaceDisplay;\n}());\nexports.InplaceDisplay = InplaceDisplay;\nvar InplaceContent = /** @class */ (function () {\n    function InplaceContent() {\n    }\n    InplaceContent = __decorate([\n        core_1.Component({\n            selector: 'p-inplaceContent',\n            template: '<ng-content></ng-content>'\n        })\n    ], InplaceContent);\n    return InplaceContent;\n}());\nexports.InplaceContent = InplaceContent;\nvar Inplace = /** @class */ (function () {\n    function Inplace() {\n        this.onActivate = new core_1.EventEmitter();\n        this.onDeactivate = new core_1.EventEmitter();\n    }\n    Inplace.prototype.activate = function (event) {\n        if (!this.disabled) {\n            this.active = true;\n            this.onActivate.emit(event);\n        }\n    };\n    Inplace.prototype.deactivate = function (event) {\n        if (!this.disabled) {\n            this.active = false;\n            this.hover = false;\n            this.onDeactivate.emit(event);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Inplace.prototype, \"active\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Inplace.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Inplace.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Inplace.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Inplace.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Inplace.prototype, \"onActivate\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Inplace.prototype, \"onDeactivate\", void 0);\n    Inplace = __decorate([\n        core_1.Component({\n            selector: 'p-inplace',\n            template: \"\\n        <div [ngClass]=\\\"'ui-inplace ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-inplace-display\\\" (click)=\\\"activate($event)\\\"\\n                [ngClass]=\\\"{'ui-state-disabled':disabled}\\\" *ngIf=\\\"!active\\\">\\n                <ng-content select=\\\"[pInplaceDisplay]\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-inplace-content\\\" *ngIf=\\\"active\\\">\\n                <ng-content select=\\\"[pInplaceContent]\\\"></ng-content>\\n                <button type=\\\"button\\\" icon=\\\"fa-close\\\" pButton (click)=\\\"deactivate($event)\\\" *ngIf=\\\"closable\\\"></button>\\n            </div>\\n        </div>\\n    \"\n        })\n    ], Inplace);\n    return Inplace;\n}());\nexports.Inplace = Inplace;\nvar InplaceModule = /** @class */ (function () {\n    function InplaceModule() {\n    }\n    InplaceModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule],\n            exports: [Inplace, InplaceDisplay, InplaceContent, button_1.ButtonModule],\n            declarations: [Inplace, InplaceDisplay, InplaceContent]\n        })\n    ], InplaceModule);\n    return InplaceModule;\n}());\nexports.InplaceModule = InplaceModule;\n//# sourceMappingURL=inplace.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/inplace/inplace.js\n// module id = 754\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar forms_1 = require(\"@angular/forms\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nexports.INPUTSWITCH_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return InputSwitch; }),\n    multi: true\n};\nvar InputSwitch = /** @class */ (function () {\n    function InputSwitch(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.onLabel = 'On';\n        this.offLabel = 'Off';\n        this.ariaLabelTemplate = \"InputSwitch {0}\";\n        this.onChange = new core_1.EventEmitter();\n        this.checked = false;\n        this.focused = false;\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.initialized = false;\n    }\n    InputSwitch.prototype.ngAfterViewInit = function () {\n        this.container = this.el.nativeElement.children[0];\n        this.handle = this.domHandler.findSingle(this.el.nativeElement, 'div.ui-inputswitch-handle');\n        this.onContainer = this.domHandler.findSingle(this.container, 'div.ui-inputswitch-on');\n        this.offContainer = this.domHandler.findSingle(this.container, 'div.ui-inputswitch-off');\n        this.onLabelChild = this.domHandler.findSingle(this.onContainer, 'span.ui-inputswitch-onlabel');\n        this.offLabelChild = this.domHandler.findSingle(this.offContainer, 'span.ui-inputswitch-offlabel');\n    };\n    InputSwitch.prototype.ngAfterViewChecked = function () {\n        if (this.container && this.container.offsetParent && !this.initialized) {\n            this.render();\n        }\n    };\n    InputSwitch.prototype.render = function () {\n        var onContainerWidth = this.domHandler.width(this.onContainer), offContainerWidth = this.domHandler.width(this.offContainer), spanPadding = this.domHandler.innerWidth(this.offLabelChild) - this.domHandler.width(this.offLabelChild), handleMargins = this.domHandler.getOuterWidth(this.handle) - this.domHandler.innerWidth(this.handle);\n        var containerWidth = (onContainerWidth > offContainerWidth) ? onContainerWidth : offContainerWidth, handleWidth = containerWidth;\n        this.handle.style.width = handleWidth + 'px';\n        handleWidth = this.domHandler.width(this.handle);\n        containerWidth = containerWidth + handleWidth + 6;\n        var labelWidth = containerWidth - handleWidth - spanPadding - handleMargins;\n        this.container.style.width = containerWidth + 'px';\n        this.onLabelChild.style.width = labelWidth + 'px';\n        this.offLabelChild.style.width = labelWidth + 'px';\n        //position\n        this.offContainer.style.width = (this.domHandler.width(this.container) - 5) + 'px';\n        this.offset = this.domHandler.width(this.container) - this.domHandler.getOuterWidth(this.handle);\n        //default value\n        if (this.checked) {\n            this.handle.style.left = this.offset + 'px';\n            this.onContainer.style.width = this.offset + 'px';\n            this.offLabelChild.style.marginRight = -this.offset + 'px';\n        }\n        else {\n            this.onContainer.style.width = 0 + 'px';\n            this.onLabelChild.style.marginLeft = -this.offset + 'px';\n        }\n        this.initialized = true;\n    };\n    InputSwitch.prototype.toggle = function (event, checkbox) {\n        if (!this.disabled) {\n            if (this.checked) {\n                this.checked = false;\n                this.uncheckUI();\n            }\n            else {\n                this.checked = true;\n                this.checkUI();\n            }\n            this.onModelChange(this.checked);\n            this.onChange.emit({\n                originalEvent: event,\n                checked: this.checked\n            });\n            checkbox.focus();\n        }\n    };\n    InputSwitch.prototype.checkUI = function () {\n        this.onContainer.style.width = this.offset + 'px';\n        this.onLabelChild.style.marginLeft = 0 + 'px';\n        this.offLabelChild.style.marginRight = -this.offset + 'px';\n        this.handle.style.left = this.offset + 'px';\n        this.updateAriaLabel();\n    };\n    InputSwitch.prototype.uncheckUI = function () {\n        this.onContainer.style.width = 0 + 'px';\n        this.onLabelChild.style.marginLeft = -this.offset + 'px';\n        this.offLabelChild.style.marginRight = 0 + 'px';\n        this.handle.style.left = 0 + 'px';\n        this.updateAriaLabel();\n    };\n    InputSwitch.prototype.onFocus = function (event) {\n        this.focused = true;\n    };\n    InputSwitch.prototype.onBlur = function (event) {\n        this.focused = false;\n        this.onModelTouched();\n    };\n    InputSwitch.prototype.writeValue = function (checked) {\n        this.checked = checked;\n        if (this.initialized) {\n            if (this.checked === true)\n                this.checkUI();\n            else\n                this.uncheckUI();\n        }\n    };\n    InputSwitch.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    InputSwitch.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    InputSwitch.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    InputSwitch.prototype.updateAriaLabel = function () {\n        var pattern = /{(.*?)}/, value = this.checked ? this.onLabel : this.offLabel;\n        this.ariaLabel = this.ariaLabelTemplate.replace(this.ariaLabelTemplate.match(pattern)[0], value);\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"onLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"offLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputSwitch.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], InputSwitch.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputSwitch.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], InputSwitch.prototype, \"ariaLabelTemplate\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputSwitch.prototype, \"onChange\", void 0);\n    InputSwitch = __decorate([\n        core_1.Component({\n            selector: 'p-inputSwitch',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-inputswitch ui-widget ui-widget-content ui-corner-all': true,\\n            'ui-state-disabled': disabled,'ui-inputswitch-checked':checked, 'ui-state-focus':focused}\\\" (click)=\\\"toggle($event, in)\\\"\\n            [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-inputswitch-off\\\">\\n                <span class=\\\"ui-inputswitch-offlabel\\\">{{offLabel}}</span>\\n            </div>\\n            <div class=\\\"ui-inputswitch-on\\\">\\n                <span class=\\\"ui-inputswitch-onlabel\\\">{{onLabel}}</span>\\n            </div>\\n            <div [ngClass]=\\\"{'ui-inputswitch-handle ui-state-default':true, 'ui-state-focus':focused}\\\"></div>\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #in type=\\\"checkbox\\\" [attr.aria-label]=\\\"ariaLabel\\\" [attr.aria-labelledby]=\\\"ariaLabelledBy\\\" aria-live=\\\"polite\\\" [attr.id]=\\\"inputId\\\" (focus)=\\\"onFocus($event)\\\" (blur)=\\\"onBlur($event)\\\" readonly=\\\"readonly\\\" [attr.tabindex]=\\\"tabindex\\\"/>\\n            </div>\\n        </div>\\n    \",\n            providers: [exports.INPUTSWITCH_VALUE_ACCESSOR, domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], InputSwitch);\n    return InputSwitch;\n}());\nexports.InputSwitch = InputSwitch;\nvar InputSwitchModule = /** @class */ (function () {\n    function InputSwitchModule() {\n    }\n    InputSwitchModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [InputSwitch],\n            declarations: [InputSwitch]\n        })\n    ], InputSwitchModule);\n    return InputSwitchModule;\n}());\nexports.InputSwitchModule = InputSwitchModule;\n//# sourceMappingURL=inputswitch.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/inputswitch/inputswitch.js\n// module id = 755\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar forms_1 = require(\"@angular/forms\");\nvar common_1 = require(\"@angular/common\");\nvar InputTextarea = /** @class */ (function () {\n    function InputTextarea(el, ngModel) {\n        this.el = el;\n        this.ngModel = ngModel;\n        this.rows = 2;\n        this.cols = 20;\n        this.onResize = new core_1.EventEmitter();\n    }\n    InputTextarea.prototype.ngOnInit = function () {\n        this.rowsDefault = this.rows;\n        this.colsDefault = this.cols;\n    };\n    InputTextarea.prototype.ngDoCheck = function () {\n        this.updateFilledState();\n    };\n    //To trigger change detection to manage ui-state-filled for material labels when there is no value binding\n    InputTextarea.prototype.onInput = function (e) {\n        this.updateFilledState();\n    };\n    InputTextarea.prototype.updateFilledState = function () {\n        this.filled = (this.el.nativeElement.value && this.el.nativeElement.value.length) ||\n            (this.ngModel && this.ngModel.model);\n    };\n    InputTextarea.prototype.onFocus = function (e) {\n        if (this.autoResize) {\n            this.resize(e);\n        }\n    };\n    InputTextarea.prototype.onBlur = function (e) {\n        if (this.autoResize) {\n            this.resize(e);\n        }\n    };\n    InputTextarea.prototype.onKeyup = function (e) {\n        if (this.autoResize) {\n            this.resize(e);\n        }\n    };\n    InputTextarea.prototype.resize = function (event) {\n        var linesCount = 0, lines = this.el.nativeElement.value.split('\\n');\n        for (var i = lines.length - 1; i >= 0; --i) {\n            linesCount += Math.floor((lines[i].length / this.colsDefault) + 1);\n        }\n        this.rows = (linesCount >= this.rowsDefault) ? (linesCount + 1) : this.rowsDefault;\n        this.onResize.emit(event || {});\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], InputTextarea.prototype, \"autoResize\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputTextarea.prototype, \"rows\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], InputTextarea.prototype, \"cols\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], InputTextarea.prototype, \"onResize\", void 0);\n    __decorate([\n        core_1.HostListener('input', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputTextarea.prototype, \"onInput\", null);\n    __decorate([\n        core_1.HostListener('focus', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputTextarea.prototype, \"onFocus\", null);\n    __decorate([\n        core_1.HostListener('blur', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputTextarea.prototype, \"onBlur\", null);\n    __decorate([\n        core_1.HostListener('keyup', ['$event']),\n        __metadata(\"design:type\", Function),\n        __metadata(\"design:paramtypes\", [Object]),\n        __metadata(\"design:returntype\", void 0)\n    ], InputTextarea.prototype, \"onKeyup\", null);\n    InputTextarea = __decorate([\n        core_1.Directive({\n            selector: '[pInputTextarea]',\n            host: {\n                '[class.ui-inputtext]': 'true',\n                '[class.ui-corner-all]': 'true',\n                '[class.ui-state-default]': 'true',\n                '[class.ui-widget]': 'true',\n                '[class.ui-state-filled]': 'filled',\n                '[attr.rows]': 'rows',\n                '[attr.cols]': 'cols'\n            }\n        }),\n        __param(1, core_1.Optional()),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, forms_1.NgModel])\n    ], InputTextarea);\n    return InputTextarea;\n}());\nexports.InputTextarea = InputTextarea;\nvar InputTextareaModule = /** @class */ (function () {\n    function InputTextareaModule() {\n    }\n    InputTextareaModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [InputTextarea],\n            declarations: [InputTextarea]\n        })\n    ], InputTextareaModule);\n    return InputTextareaModule;\n}());\nexports.InputTextareaModule = InputTextareaModule;\n//# sourceMappingURL=inputtextarea.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/inputtextarea/inputtextarea.js\n// module id = 756\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar Lightbox = /** @class */ (function () {\n    function Lightbox(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.type = 'image';\n        this.effectDuration = '500ms';\n    }\n    Lightbox.prototype.onImageClick = function (event, image, i, content) {\n        this.index = i;\n        this.loading = true;\n        content.style.width = 32 + 'px';\n        content.style.height = 32 + 'px';\n        this.show();\n        this.displayImage(image);\n        this.preventDocumentClickListener = true;\n        event.preventDefault();\n    };\n    Lightbox.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.panel = this.domHandler.findSingle(this.el.nativeElement, '.ui-lightbox ');\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panel);\n            else\n                this.domHandler.appendChild(this.panel, this.appendTo);\n        }\n        this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n            if (!_this.preventDocumentClickListener && _this.visible) {\n                _this.hide(event);\n            }\n            _this.preventDocumentClickListener = false;\n        });\n    };\n    Lightbox.prototype.onLinkClick = function (event, content) {\n        this.show();\n        this.preventDocumentClickListener = true;\n        event.preventDefault();\n    };\n    Lightbox.prototype.displayImage = function (image) {\n        var _this = this;\n        setTimeout(function () {\n            _this.currentImage = image;\n            _this.captionText = image.title;\n            _this.center();\n        }, 1000);\n    };\n    Lightbox.prototype.show = function () {\n        this.mask = document.createElement('div');\n        this.mask.style.zIndex = ++domhandler_1.DomHandler.zindex;\n        this.domHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-dialog-mask');\n        document.body.appendChild(this.mask);\n        this.zindex = ++domhandler_1.DomHandler.zindex;\n        this.center();\n        this.visible = true;\n    };\n    Lightbox.prototype.hide = function (event) {\n        this.captionText = null;\n        this.index = null;\n        this.currentImage = null;\n        this.visible = false;\n        this.panel.style.left = 'auto';\n        this.panel.style.top = 'auto';\n        if (this.mask) {\n            document.body.removeChild(this.mask);\n            this.mask = null;\n        }\n        event.preventDefault();\n    };\n    Lightbox.prototype.center = function () {\n        var elementWidth = this.domHandler.getOuterWidth(this.panel);\n        var elementHeight = this.domHandler.getOuterHeight(this.panel);\n        if (elementWidth == 0 && elementHeight == 0) {\n            this.panel.style.visibility = 'hidden';\n            this.panel.style.display = 'block';\n            elementWidth = this.domHandler.getOuterWidth(this.panel);\n            elementHeight = this.domHandler.getOuterHeight(this.panel);\n            this.panel.style.display = 'none';\n            this.panel.style.visibility = 'visible';\n        }\n        var viewport = this.domHandler.getViewport();\n        var x = (viewport.width - elementWidth) / 2;\n        var y = (viewport.height - elementHeight) / 2;\n        this.panel.style.left = x + 'px';\n        this.panel.style.top = y + 'px';\n    };\n    Lightbox.prototype.onImageLoad = function (event, content) {\n        var _this = this;\n        var image = event.target;\n        image.style.visibility = 'hidden';\n        image.style.display = 'block';\n        var imageWidth = this.domHandler.getOuterWidth(image);\n        var imageHeight = this.domHandler.getOuterHeight(image);\n        image.style.display = 'none';\n        image.style.visibility = 'visible';\n        content.style.width = imageWidth + 'px';\n        content.style.height = imageHeight + 'px';\n        this.panel.style.left = parseInt(this.panel.style.left) + (this.domHandler.getOuterWidth(this.panel) - imageWidth) / 2 + 'px';\n        this.panel.style.top = parseInt(this.panel.style.top) + (this.domHandler.getOuterHeight(this.panel) - imageHeight) / 2 + 'px';\n        setTimeout(function () {\n            _this.domHandler.fadeIn(image, 500);\n            image.style.display = 'block';\n            //this.captionText = this.currentImage.title;\n            _this.loading = false;\n        }, parseInt(this.effectDuration));\n    };\n    Lightbox.prototype.prev = function (placeholder) {\n        this.captionText = null;\n        this.loading = true;\n        placeholder.style.display = 'none';\n        if (this.index > 0) {\n            this.displayImage(this.images[--this.index]);\n        }\n    };\n    Lightbox.prototype.next = function (placeholder) {\n        this.captionText = null;\n        this.loading = true;\n        placeholder.style.display = 'none';\n        if (this.index <= (this.images.length - 1)) {\n            this.displayImage(this.images[++this.index]);\n        }\n    };\n    Object.defineProperty(Lightbox.prototype, \"leftVisible\", {\n        get: function () {\n            return this.images && this.images.length && this.index != 0 && !this.loading;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Lightbox.prototype, \"rightVisible\", {\n        get: function () {\n            return this.images && this.images.length && this.index < (this.images.length - 1) && !this.loading;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Lightbox.prototype.ngOnDestroy = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n        }\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.panel);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Lightbox.prototype, \"images\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Lightbox.prototype, \"type\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Lightbox.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Lightbox.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Lightbox.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Lightbox.prototype, \"easing\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Lightbox.prototype, \"effectDuration\", void 0);\n    Lightbox = __decorate([\n        core_1.Component({\n            selector: 'p-lightbox',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"(type == 'image')\\\">\\n            <a *ngFor=\\\"let image of images; let i = index;\\\" [href]=\\\"image.source\\\" (click)=\\\"onImageClick($event,image,i,content)\\\">\\n                <img [src]=\\\"image.thumbnail\\\" [title]=\\\"image.title\\\" [alt]=\\\"image.alt\\\">\\n            </a>\\n        </div>\\n        <span [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"(type == 'content')\\\" (click)=\\\"onLinkClick($event,content)\\\">\\n            <ng-content select=\\\"a\\\"></ng-content>\\n        </span>\\n        <div class=\\\"ui-lightbox ui-widget ui-corner-all ui-shadow\\\" [style.display]=\\\"visible ? 'block' : 'none'\\\" [style.zIndex]=\\\"zindex\\\"\\n            [ngClass]=\\\"{'ui-lightbox-loading': loading}\\\"\\n            [style.transitionProperty]=\\\"'all'\\\" [style.transitionDuration]=\\\"effectDuration\\\" [style.transitionTimingFunction]=\\\"easing\\\" (click)=\\\"preventDocumentClickListener=true\\\">\\n           <div class=\\\"ui-lightbox-content-wrapper\\\">\\n              <a class=\\\"ui-state-default ui-lightbox-nav-left ui-corner-right\\\" [style.zIndex]=\\\"zindex + 1\\\" (click)=\\\"prev(img)\\\"\\n                [ngClass]=\\\"{'ui-helper-hidden':!leftVisible}\\\"><span class=\\\"fa fa-fw fa-caret-left\\\"></span></a>\\n              <div #content class=\\\"ui-lightbox-content ui-corner-all\\\" \\n                [style.transitionProperty]=\\\"'width,height'\\\" [style.transitionDuration]=\\\"effectDuration\\\" [style.transitionTimingFunction]=\\\"easing\\\">\\n                <img #img [src]=\\\"currentImage ? currentImage.source||'' : ''\\\" (load)=\\\"onImageLoad($event,content)\\\" style=\\\"display:none\\\">\\n                <ng-content></ng-content>\\n              </div>\\n              <a class=\\\"ui-state-default ui-lightbox-nav-right ui-corner-left ui-helper-hidden\\\" [style.zIndex]=\\\"zindex + 1\\\" (click)=\\\"next(img)\\\"\\n                [ngClass]=\\\"{'ui-helper-hidden':!rightVisible}\\\"><span class=\\\"fa fa-fw fa-caret-right\\\"></span></a>\\n           </div>\\n           <div class=\\\"ui-lightbox-caption ui-widget-header\\\" [style.display]=\\\"captionText ? 'block' : 'none'\\\">\\n              <span class=\\\"ui-lightbox-caption-text\\\">{{captionText}}</span><a class=\\\"ui-lightbox-close ui-corner-all\\\" href=\\\"#\\\" (click)=\\\"hide($event)\\\"><span class=\\\"fa fa-fw fa-close\\\"></span></a>\\n              <div style=\\\"clear:both\\\"></div>\\n           </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], Lightbox);\n    return Lightbox;\n}());\nexports.Lightbox = Lightbox;\nvar LightboxModule = /** @class */ (function () {\n    function LightboxModule() {\n    }\n    LightboxModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Lightbox],\n            declarations: [Lightbox]\n        })\n    ], LightboxModule);\n    return LightboxModule;\n}());\nexports.LightboxModule = LightboxModule;\n//# sourceMappingURL=lightbox.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/lightbox/lightbox.js\n// module id = 757\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar objectutils_1 = require(\"../utils/objectutils\");\nvar forms_1 = require(\"@angular/forms\");\nexports.LISTBOX_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Listbox; }),\n    multi: true\n};\nvar Listbox = /** @class */ (function () {\n    function Listbox(el, domHandler, objectUtils, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.objectUtils = objectUtils;\n        this.cd = cd;\n        this.checkbox = false;\n        this.filter = false;\n        this.filterMode = 'contains';\n        this.metaKeySelection = true;\n        this.showToggleAll = true;\n        this.onChange = new core_1.EventEmitter();\n        this.onDblClick = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Object.defineProperty(Listbox.prototype, \"options\", {\n        get: function () {\n            return this._options;\n        },\n        set: function (val) {\n            var opts = this.optionLabel ? this.objectUtils.generateSelectItems(val, this.optionLabel) : val;\n            this._options = opts;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Listbox.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Listbox.prototype.writeValue = function (value) {\n        this.value = value;\n        this.cd.markForCheck();\n    };\n    Listbox.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Listbox.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Listbox.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Listbox.prototype.onOptionClick = function (event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        if (!this.checkboxClick) {\n            if (this.multiple)\n                this.onOptionClickMultiple(event, option);\n            else\n                this.onOptionClickSingle(event, option);\n        }\n        else {\n            this.checkboxClick = false;\n        }\n        this.optionTouched = false;\n    };\n    Listbox.prototype.onOptionTouchEnd = function (event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        this.optionTouched = true;\n    };\n    Listbox.prototype.onOptionClickSingle = function (event, option) {\n        var selected = this.isSelected(option);\n        var valueChanged = false;\n        var metaSelection = this.optionTouched ? false : this.metaKeySelection;\n        if (metaSelection) {\n            var metaKey = (event.metaKey || event.ctrlKey);\n            if (selected) {\n                if (metaKey) {\n                    this.value = null;\n                    valueChanged = true;\n                }\n            }\n            else {\n                this.value = option.value;\n                valueChanged = true;\n            }\n        }\n        else {\n            this.value = selected ? null : option.value;\n            valueChanged = true;\n        }\n        if (valueChanged) {\n            this.onModelChange(this.value);\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    };\n    Listbox.prototype.onOptionClickMultiple = function (event, option) {\n        var selected = this.isSelected(option);\n        var valueChanged = false;\n        var metaSelection = this.optionTouched ? false : this.metaKeySelection;\n        if (metaSelection) {\n            var metaKey = (event.metaKey || event.ctrlKey);\n            if (selected) {\n                if (metaKey) {\n                    this.removeOption(option);\n                }\n                else {\n                    this.value = [option.value];\n                }\n                valueChanged = true;\n            }\n            else {\n                this.value = (metaKey) ? this.value || [] : [];\n                this.value = this.value.concat([option.value]);\n                valueChanged = true;\n            }\n        }\n        else {\n            if (selected) {\n                this.removeOption(option);\n            }\n            else {\n                this.value = (this.value || []).concat([option.value]);\n            }\n            valueChanged = true;\n        }\n        if (valueChanged) {\n            this.onModelChange(this.value);\n            this.onChange.emit({\n                originalEvent: event,\n                value: this.value\n            });\n        }\n    };\n    Listbox.prototype.removeOption = function (option) {\n        var _this = this;\n        this.value = this.value.filter(function (val) { return !_this.objectUtils.equals(val, option.value, _this.dataKey); });\n    };\n    Listbox.prototype.isSelected = function (option) {\n        var selected = false;\n        if (this.multiple) {\n            if (this.value) {\n                for (var _i = 0, _a = this.value; _i < _a.length; _i++) {\n                    var val = _a[_i];\n                    if (this.objectUtils.equals(val, option.value, this.dataKey)) {\n                        selected = true;\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            selected = this.objectUtils.equals(this.value, option.value, this.dataKey);\n        }\n        return selected;\n    };\n    Object.defineProperty(Listbox.prototype, \"allChecked\", {\n        get: function () {\n            if (this.filterValue)\n                return this.allFilteredSelected();\n            else\n                return this.value && this.options && (this.value.length === this.options.length);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Listbox.prototype.allFilteredSelected = function () {\n        var allSelected;\n        if (this.value && this.options && this.options.length) {\n            allSelected = true;\n            for (var _i = 0, _a = this.options; _i < _a.length; _i++) {\n                var opt = _a[_i];\n                if (this.isItemVisible(opt)) {\n                    if (!this.isSelected(opt)) {\n                        allSelected = false;\n                        break;\n                    }\n                }\n            }\n        }\n        return allSelected;\n    };\n    Listbox.prototype.onFilter = function (event) {\n        var query = event.target.value.trim().toLowerCase();\n        this.filterValue = query.length ? query : null;\n    };\n    Listbox.prototype.toggleAll = function (event, checkbox) {\n        if (this.disabled || this.readonly || !this.options || this.options.length === 0) {\n            return;\n        }\n        if (checkbox.checked) {\n            this.value = [];\n        }\n        else {\n            if (this.options) {\n                this.value = [];\n                for (var i = 0; i < this.options.length; i++) {\n                    var opt = this.options[i];\n                    if (this.isItemVisible(opt)) {\n                        this.value.push(opt.value);\n                    }\n                }\n            }\n        }\n        checkbox.checked = !checkbox.checked;\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value });\n    };\n    Listbox.prototype.isItemVisible = function (option) {\n        if (this.filterValue) {\n            var visible = void 0;\n            switch (this.filterMode) {\n                case 'startsWith':\n                    visible = option.label.toLowerCase().indexOf(this.filterValue.toLowerCase()) === 0;\n                    break;\n                case 'contains':\n                    visible = option.label.toLowerCase().indexOf(this.filterValue.toLowerCase()) > -1;\n                    break;\n                default:\n                    visible = true;\n            }\n            return visible;\n        }\n        else {\n            return true;\n        }\n    };\n    Listbox.prototype.onDoubleClick = function (event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        this.onDblClick.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    Listbox.prototype.onCheckboxClick = function (event, option) {\n        if (this.disabled || this.readonly) {\n            return;\n        }\n        this.checkboxClick = true;\n        var selected = this.isSelected(option);\n        if (selected) {\n            this.removeOption(option);\n        }\n        else {\n            this.value = this.value ? this.value : [];\n            this.value = this.value.concat([option.value]);\n        }\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    Listbox.prototype.onInputFocus = function (event) {\n        this.focus = true;\n    };\n    Listbox.prototype.onInputBlur = function (event) {\n        this.focus = false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Listbox.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Listbox.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Listbox.prototype, \"listStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"checkbox\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"filter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Listbox.prototype, \"filterMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Listbox.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Listbox.prototype, \"showToggleAll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Listbox.prototype, \"optionLabel\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Listbox.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Listbox.prototype, \"onDblClick\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", Object)\n    ], Listbox.prototype, \"headerFacet\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], Listbox.prototype, \"footerFacet\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Listbox.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], Listbox.prototype, \"options\", null);\n    Listbox = __decorate([\n        core_1.Component({\n            selector: 'p-listbox',\n            template: \"\\n    <div [ngClass]=\\\"{'ui-listbox ui-inputtext ui-widget ui-widget-content ui-corner-all':true,'ui-state-disabled':disabled,'ui-state-focus':focus}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n      <div class=\\\"ui-helper-hidden-accessible\\\">\\n        <input type=\\\"text\\\" readonly=\\\"readonly\\\" (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\">\\n      </div>\\n      <div class=\\\"ui-widget-header ui-corner-all ui-listbox-header ui-helper-clearfix\\\" *ngIf=\\\"headerFacet\\\">\\n        <ng-content select=\\\"p-header\\\"></ng-content>\\n      </div>\\n      <div class=\\\"ui-widget-header ui-corner-all ui-listbox-header ui-helper-clearfix\\\" *ngIf=\\\"(checkbox && multiple) || filter\\\" [ngClass]=\\\"{'ui-listbox-header-w-checkbox': checkbox}\\\">\\n        <div class=\\\"ui-chkbox ui-widget\\\" *ngIf=\\\"checkbox && multiple && showToggleAll\\\">\\n          <div class=\\\"ui-helper-hidden-accessible\\\">\\n            <input #cb type=\\\"checkbox\\\" readonly=\\\"readonly\\\" [checked]=\\\"allChecked\\\">\\n          </div>\\n          <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" [ngClass]=\\\"{'ui-state-active':allChecked}\\\" (click)=\\\"toggleAll($event,cb)\\\">\\n            <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':allChecked}\\\"></span>\\n          </div>\\n        </div>\\n        <div class=\\\"ui-listbox-filter-container\\\" *ngIf=\\\"filter\\\">\\n          <input type=\\\"text\\\" role=\\\"textbox\\\" (input)=\\\"onFilter($event)\\\" class=\\\"ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [disabled]=\\\"disabled\\\">\\n          <span class=\\\"ui-listbox-filter-icon fa fa-search\\\"></span>\\n        </div>\\n      </div>\\n      <div class=\\\"ui-listbox-list-wrapper\\\" [ngStyle]=\\\"listStyle\\\">\\n        <ul class=\\\"ui-listbox-list\\\">\\n          <li *ngFor=\\\"let option of options; let i = index;\\\" [style.display]=\\\"isItemVisible(option) ? 'block' : 'none'\\\"\\n              [ngClass]=\\\"{'ui-listbox-item ui-corner-all':true,'ui-state-highlight':isSelected(option)}\\\"\\n              (click)=\\\"onOptionClick($event,option)\\\" (dblclick)=\\\"onDoubleClick($event,option)\\\" (touchend)=\\\"onOptionTouchEnd($event,option)\\\">\\n            <div class=\\\"ui-chkbox ui-widget\\\" *ngIf=\\\"checkbox && multiple\\\" (click)=\\\"onCheckboxClick($event,option)\\\">\\n              <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input type=\\\"checkbox\\\" [checked]=\\\"isSelected(option)\\\" [disabled]=\\\"disabled\\\">\\n              </div>\\n              <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" [ngClass]=\\\"{'ui-state-active':isSelected(option)}\\\">\\n                <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':isSelected(option)}\\\"></span>\\n              </div>\\n            </div>\\n            <span *ngIf=\\\"!itemTemplate\\\">{{option.label}}</span>\\n            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option, index: i}\\\"></ng-container>\\n          </li>\\n        </ul>\\n      </div>\\n      <div class=\\\"ui-listbox-footer ui-widget-header ui-corner-all\\\" *ngIf=\\\"footerFacet\\\">\\n        <ng-content select=\\\"p-footer\\\"></ng-content>\\n      </div>\\n    </div>\\n  \",\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils, exports.LISTBOX_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, objectutils_1.ObjectUtils, core_1.ChangeDetectorRef])\n    ], Listbox);\n    return Listbox;\n}());\nexports.Listbox = Listbox;\nvar ListboxModule = /** @class */ (function () {\n    function ListboxModule() {\n    }\n    ListboxModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [Listbox, shared_1.SharedModule],\n            declarations: [Listbox]\n        })\n    ], ListboxModule);\n    return ListboxModule;\n}());\nexports.ListboxModule = ListboxModule;\n//# sourceMappingURL=listbox.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/listbox/listbox.js\n// module id = 758\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar router_1 = require(\"@angular/router\");\nvar MegaMenu = /** @class */ (function () {\n    function MegaMenu(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.orientation = 'horizontal';\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    MegaMenu.prototype.onItemMouseEnter = function (event, item, menuitem) {\n        if (menuitem.disabled) {\n            return;\n        }\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n        this.activeItem = item;\n        if (menuitem.items) {\n            var submenu = item.children[0].nextElementSibling;\n            if (submenu) {\n                if (this.autoZIndex) {\n                    submenu.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n                }\n                if (this.orientation === 'horizontal') {\n                    submenu.style.top = this.domHandler.getOuterHeight(item.children[0]) + 'px';\n                    submenu.style.left = '0px';\n                }\n                else if (this.orientation === 'vertical') {\n                    submenu.style.top = '0px';\n                    submenu.style.left = this.domHandler.getOuterWidth(item.children[0]) + 'px';\n                }\n            }\n        }\n    };\n    MegaMenu.prototype.onItemMouseLeave = function (event, link) {\n        var _this = this;\n        this.hideTimeout = setTimeout(function () {\n            _this.activeItem = null;\n        }, 1000);\n    };\n    MegaMenu.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        this.activeItem = null;\n    };\n    MegaMenu.prototype.getColumnClass = function (menuitem) {\n        var length = menuitem.items ? menuitem.items.length : 0;\n        var columnClass;\n        switch (length) {\n            case 2:\n                columnClass = 'ui-g-6';\n                break;\n            case 3:\n                columnClass = 'ui-g-4';\n                break;\n            case 4:\n                columnClass = 'ui-g-3';\n                break;\n            case 6:\n                columnClass = 'ui-g-2';\n                break;\n            default:\n                columnClass = 'ui-g-12';\n                break;\n        }\n        return columnClass;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], MegaMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MegaMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MegaMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MegaMenu.prototype, \"orientation\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MegaMenu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], MegaMenu.prototype, \"baseZIndex\", void 0);\n    MegaMenu = __decorate([\n        core_1.Component({\n            selector: 'p-megaMenu',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\"\\n            [ngClass]=\\\"{'ui-megamenu ui-widget ui-widget-content ui-corner-all':true,'ui-megamenu-horizontal': orientation == 'horizontal','ui-megamenu-vertical': orientation == 'vertical'}\\\">\\n            <ul class=\\\"ui-megamenu-root-list\\\">\\n                <ng-template ngFor let-category [ngForOf]=\\\"model\\\">\\n                    <li *ngIf=\\\"category.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': category.visible === false}\\\">\\n                    <li *ngIf=\\\"!category.separator\\\" #item [ngClass]=\\\"{'ui-menuitem ui-corner-all':true,'ui-menuitem-active':item==activeItem, 'ui-helper-hidden': category.visible === false}\\\"\\n                        (mouseenter)=\\\"onItemMouseEnter($event, item, category)\\\" (mouseleave)=\\\"onItemMouseLeave($event, item)\\\">\\n   \\n                        <a *ngIf=\\\"!category.routerLink\\\" [href]=\\\"category.url||'#'\\\" [attr.target]=\\\"category.target\\\" [attr.title]=\\\"category.title\\\" [attr.id]=\\\"category.id\\\" (click)=\\\"itemClick($event, category)\\\"\\n                            [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':category.disabled}\\\" [ngStyle]=\\\"category.style\\\" [class]=\\\"category.styleClass\\\">\\n                            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"category.icon\\\" [ngClass]=\\\"category.icon\\\"></span>\\n                            <span class=\\\"ui-menuitem-text\\\">{{category.label}}</span>\\n                            <span *ngIf=\\\"category.items\\\" class=\\\"ui-submenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-down':orientation=='horizontal','fa-caret-right':orientation=='vertical'}\\\"></span>\\n                        </a>\\n                        <a *ngIf=\\\"category.routerLink\\\" [routerLink]=\\\"category.routerLink\\\" [queryParams]=\\\"category.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"category.routerLinkActiveOptions||{exact:false}\\\" \\n                            [attr.target]=\\\"category.target\\\" [attr.title]=\\\"category.title\\\" [attr.id]=\\\"category.id\\\"\\n                            (click)=\\\"itemClick($event, category)\\\" [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':category.disabled}\\\" [ngStyle]=\\\"category.style\\\" [class]=\\\"category.styleClass\\\">\\n                            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"category.icon\\\" [ngClass]=\\\"category.icon\\\"></span>\\n                            <span class=\\\"ui-menuitem-text\\\">{{category.label}}</span>\\n                        </a>\\n\\n                        <div class=\\\"ui-megamenu-panel ui-widget-content ui-corner-all ui-shadow\\\" *ngIf=\\\"category.items\\\">\\n                            <div class=\\\"ui-g\\\">\\n                                <ng-template ngFor let-column [ngForOf]=\\\"category.items\\\">\\n                                    <div [class]=\\\"getColumnClass(category)\\\">\\n                                        <ng-template ngFor let-submenu [ngForOf]=\\\"column\\\">\\n                                            <ul class=\\\"ui-megamenu-submenu\\\">\\n                                                <li class=\\\"ui-widget-header ui-megamenu-submenu-header ui-corner-all\\\">{{submenu.label}}</li>\\n                                                <ng-template ngFor let-item [ngForOf]=\\\"submenu.items\\\">\\n                                                    <li *ngIf=\\\"item.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\">\\n                                                    <li *ngIf=\\\"!item.separator\\\" class=\\\"ui-menuitem ui-corner-all\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\">\\n                                                        <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\"\\n                                                            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"itemClick($event, item)\\\">\\n                                                            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"item.icon\\\" [ngClass]=\\\"item.icon\\\"></span>\\n                                                            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                                                        </a>\\n                                                        <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" \\n                                                            [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" \\n                                                             [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\"\\n                                                            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"itemClick($event, item)\\\">\\n                                                            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"item.icon\\\" [ngClass]=\\\"item.icon\\\"></span>\\n                                                            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                                                        </a>\\n                                                    </li>\\n                                                </ng-template>\\n                                            </ul>\\n                                        </ng-template>\\n                                    </div>\\n                                </ng-template>\\n                            </div>\\n                        </div>\\n                    </li>\\n                </ng-template>\\n                <li class=\\\"ui-menuitem ui-menuitem-custom ui-corner-all\\\" *ngIf=\\\"orientation === 'horizontal'\\\">\\n                    <ng-content></ng-content>\\n                </li>\\n            </ul>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], MegaMenu);\n    return MegaMenu;\n}());\nexports.MegaMenu = MegaMenu;\nvar MegaMenuModule = /** @class */ (function () {\n    function MegaMenuModule() {\n    }\n    MegaMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [MegaMenu, router_1.RouterModule],\n            declarations: [MegaMenu]\n        })\n    ], MegaMenuModule);\n    return MegaMenuModule;\n}());\nexports.MegaMenuModule = MegaMenuModule;\n//# sourceMappingURL=megamenu.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/megamenu/megamenu.js\n// module id = 759\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar router_1 = require(\"@angular/router\");\nvar MenuItemContent = /** @class */ (function () {\n    function MenuItemContent(menu) {\n        this.menu = menu;\n    }\n    __decorate([\n        core_1.Input(\"pMenuItemContent\"),\n        __metadata(\"design:type\", Object)\n    ], MenuItemContent.prototype, \"item\", void 0);\n    MenuItemContent = __decorate([\n        core_1.Component({\n            selector: '[pMenuItemContent]',\n            template: \"\\n        <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.data-automationid]=\\\"item.automationId\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\"\\n            [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"menu.itemClick($event, item)\\\">\\n            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"item.icon\\\" [ngClass]=\\\"item.icon\\\"></span>\\n            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n        </a>\\n        <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [attr.data-automationid]=\\\"item.automationId\\\"  [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\"\\n            [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"item.target\\\" [attr.id]=\\\"item.id\\\"\\n             [attr.title]=\\\"item.title\\\" [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"menu.itemClick($event, item)\\\">\\n            <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"item.icon\\\" [ngClass]=\\\"item.icon\\\"></span>\\n            <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n        </a>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return Menu; }))),\n        __metadata(\"design:paramtypes\", [Menu])\n    ], MenuItemContent);\n    return MenuItemContent;\n}());\nexports.MenuItemContent = MenuItemContent;\nvar Menu = /** @class */ (function () {\n    function Menu(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    Menu.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.container = this.containerViewChild.nativeElement;\n        if (this.popup) {\n            if (this.appendTo) {\n                if (this.appendTo === 'body')\n                    document.body.appendChild(this.container);\n                else\n                    this.domHandler.appendChild(this.container, this.appendTo);\n            }\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.preventDocumentDefault) {\n                    _this.hide();\n                }\n                _this.preventDocumentDefault = false;\n            });\n        }\n    };\n    Menu.prototype.toggle = function (event) {\n        if (this.container.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n        this.preventDocumentDefault = true;\n    };\n    Menu.prototype.onResize = function (event) {\n        if (this.onResizeTarget && this.container.offsetParent) {\n            this.domHandler.absolutePosition(this.container, this.onResizeTarget);\n        }\n    };\n    Menu.prototype.show = function (event) {\n        var target = event.currentTarget;\n        this.onResizeTarget = event.currentTarget;\n        this.moveOnTop();\n        this.container.style.display = 'block';\n        this.domHandler.absolutePosition(this.container, target);\n        this.domHandler.fadeIn(this.container, 250);\n        this.preventDocumentDefault = true;\n    };\n    Menu.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    Menu.prototype.hide = function () {\n        this.container.style.display = 'none';\n    };\n    Menu.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        if (this.popup) {\n            this.hide();\n        }\n    };\n    Menu.prototype.ngOnDestroy = function () {\n        if (this.popup) {\n            if (this.documentClickListener) {\n                this.documentClickListener();\n            }\n            if (this.appendTo) {\n                this.el.nativeElement.appendChild(this.container);\n            }\n        }\n    };\n    Menu.prototype.hasSubMenu = function () {\n        if (this.model) {\n            for (var _i = 0, _a = this.model; _i < _a.length; _i++) {\n                var item = _a[_i];\n                if (item.items) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Menu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Menu.prototype, \"popup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Menu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Menu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Menu.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Menu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Menu.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Menu.prototype, \"containerViewChild\", void 0);\n    Menu = __decorate([\n        core_1.Component({\n            selector: 'p-menu',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-menu ui-widget ui-widget-content ui-corner-all':true, 'ui-menu-dynamic ui-shadow':popup}\\\"\\n            [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" (click)=\\\"preventDocumentDefault=true\\\">\\n            <ul>\\n                <ng-template ngFor let-submenu [ngForOf]=\\\"model\\\" *ngIf=\\\"hasSubMenu()\\\">\\n                    <li class=\\\"ui-menu-separator ui-widget-content\\\" *ngIf=\\\"submenu.separator\\\" [ngClass]=\\\"{'ui-helper-hidden': submenu.visible === false}\\\"></li>\\n                    <li class=\\\"ui-submenu-header ui-widget-header ui-corner-all\\\" [attr.data-automationid]=\\\"submenu.automationId\\\" *ngIf=\\\"!submenu.separator\\\" [ngClass]=\\\"{'ui-helper-hidden': submenu.visible === false}\\\">{{submenu.label}}</li>\\n                    <ng-template ngFor let-item [ngForOf]=\\\"submenu.items\\\">\\n                        <li class=\\\"ui-menu-separator ui-widget-content\\\" *ngIf=\\\"item.separator\\\" [ngClass]=\\\"{'ui-helper-hidden': (item.visible === false ||\\u00A0submenu.visible === false)}\\\"></li>\\n                        <li class=\\\"ui-menuitem ui-widget ui-corner-all\\\" *ngIf=\\\"!item.separator\\\" [pMenuItemContent]=\\\"item\\\" [ngClass]=\\\"{'ui-helper-hidden': (item.visible === false || submenu.visible === false)}\\\" [ngStyle]=\\\"item.style\\\" [class]=\\\"item.styleClass\\\"></li>\\n                    </ng-template>\\n                </ng-template>\\n                <ng-template ngFor let-item [ngForOf]=\\\"model\\\" *ngIf=\\\"!hasSubMenu()\\\">\\n                    <li class=\\\"ui-menu-separator ui-widget-content\\\" *ngIf=\\\"item.separator\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\"></li>\\n                    <li class=\\\"ui-menuitem ui-widget ui-corner-all\\\" *ngIf=\\\"!item.separator\\\" [pMenuItemContent]=\\\"item\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\" [ngStyle]=\\\"item.style\\\" [class]=\\\"item.styleClass\\\"></li>\\n                </ng-template>\\n            </ul>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler],\n            host: { '(window:resize)': 'onResize($event)' }\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], Menu);\n    return Menu;\n}());\nexports.Menu = Menu;\nvar MenuModule = /** @class */ (function () {\n    function MenuModule() {\n    }\n    MenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [Menu, router_1.RouterModule],\n            declarations: [Menu, MenuItemContent]\n        })\n    ], MenuModule);\n    return MenuModule;\n}());\nexports.MenuModule = MenuModule;\n//# sourceMappingURL=menu.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/menu/menu.js\n// module id = 760\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar router_1 = require(\"@angular/router\");\nvar MenubarSub = /** @class */ (function () {\n    function MenubarSub(domHandler, renderer, cd) {\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.menuHoverActive = false;\n    }\n    MenubarSub.prototype.onItemMenuClick = function (event, item, menuitem) {\n        if (!this.autoDisplay) {\n            if (menuitem.disabled) {\n                return;\n            }\n            this.activeItem = this.activeMenu ? (this.activeMenu.isEqualNode(item) ? null : item) : item;\n            var nextElement = item.children[0].nextElementSibling;\n            if (nextElement) {\n                var sublist = nextElement.children[0];\n                if (this.autoZIndex) {\n                    sublist.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n                }\n                if (this.root) {\n                    sublist.style.top = this.domHandler.getOuterHeight(item.children[0]) + 'px';\n                    sublist.style.left = '0px';\n                }\n                else {\n                    sublist.style.top = '0px';\n                    sublist.style.left = this.domHandler.getOuterWidth(item.children[0]) + 'px';\n                }\n            }\n            this.menuClick = true;\n            this.menuHoverActive = this.activeMenu ? (!this.activeMenu.isEqualNode(item)) : true;\n            this.activeMenu = this.activeMenu ? (this.activeMenu.isEqualNode(item) ? null : item) : item;\n            this.bindEventListener();\n        }\n    };\n    MenubarSub.prototype.bindEventListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function (event) {\n                if (!_this.menuClick) {\n                    _this.activeItem = null;\n                    _this.menuHoverActive = false;\n                }\n                _this.menuClick = false;\n            });\n        }\n    };\n    MenubarSub.prototype.onItemMouseEnter = function (event, item, menuitem) {\n        if (this.autoDisplay || (!this.autoDisplay && this.root && this.menuHoverActive)) {\n            if (menuitem.disabled) {\n                return;\n            }\n            if (this.hideTimeout) {\n                clearTimeout(this.hideTimeout);\n                this.hideTimeout = null;\n            }\n            this.activeItem = this.activeItem ? (this.activeItem.isEqualNode(item) ? null : item) : item;\n            var nextElement = item.children[0].nextElementSibling;\n            if (nextElement) {\n                var sublist = nextElement.children[0];\n                sublist.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n                if (this.root) {\n                    sublist.style.top = this.domHandler.getOuterHeight(item.children[0]) + 'px';\n                    sublist.style.left = '0px';\n                }\n                else {\n                    sublist.style.top = '0px';\n                    sublist.style.left = this.domHandler.getOuterWidth(item.children[0]) + 'px';\n                }\n            }\n            this.activeMenu = this.activeMenu ? (this.activeMenu.isEqualNode(item) ? null : item) : item;\n        }\n    };\n    MenubarSub.prototype.onItemMouseLeave = function (event) {\n        var _this = this;\n        if (this.autoDisplay) {\n            this.hideTimeout = setTimeout(function () {\n                _this.activeItem = null;\n                _this.cd.markForCheck();\n            }, 250);\n        }\n    };\n    MenubarSub.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        this.activeItem = null;\n    };\n    MenubarSub.prototype.listClick = function (event) {\n        if (this.autoDisplay) {\n            this.activeItem = null;\n        }\n    };\n    MenubarSub.prototype.ngOnDestroy = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MenubarSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MenubarSub.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MenubarSub.prototype, \"autoDisplay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MenubarSub.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], MenubarSub.prototype, \"baseZIndex\", void 0);\n    MenubarSub = __decorate([\n        core_1.Component({\n            selector: 'p-menubarSub',\n            template: \"\\n        <ul [ngClass]=\\\"{'ui-menubar-root-list':root, 'ui-widget-content ui-corner-all ui-submenu-list ui-shadow':!root}\\\"\\n            (click)=\\\"listClick($event)\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"(root ? item : item.items)\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': child.visible === false}\\\">\\n                <li *ngIf=\\\"!child.separator\\\" #listItem [ngClass]=\\\"{'ui-menuitem ui-corner-all':true,\\n                        'ui-menu-parent':child.items,'ui-menuitem-active':listItem==activeItem,'ui-helper-hidden': child.visible === false}\\\"\\n                        (mouseenter)=\\\"onItemMouseEnter($event,listItem,child)\\\" (mouseleave)=\\\"onItemMouseLeave($event)\\\" (click)=\\\"onItemMenuClick($event, listItem, child)\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" [attr.data-automationid]=\\\"child.automationId\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\" (click)=\\\"itemClick($event, child)\\\"\\n                         [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':child.disabled}\\\" [ngStyle]=\\\"child.style\\\" [class]=\\\"child.styleClass\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw\\\" *ngIf=\\\"child.items\\\" [ngClass]=\\\"{'fa-caret-down':root,'fa-caret-right':!root}\\\"></span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [attr.data-automationid]=\\\"child.automationId\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\"\\n                        [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        (click)=\\\"itemClick($event, child)\\\" [ngClass]=\\\"{'ui-menuitem-link ui-corner-all':true,'ui-state-disabled':child.disabled}\\\" [ngStyle]=\\\"child.style\\\" [class]=\\\"child.styleClass\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw\\\" *ngIf=\\\"child.items\\\" [ngClass]=\\\"{'fa-caret-down':root,'fa-caret-right':!root}\\\"></span>\\n                    </a>\\n                    <p-menubarSub class=\\\"ui-submenu\\\" [item]=\\\"child\\\" *ngIf=\\\"child.items\\\" [autoDisplay]=\\\"true\\\"></p-menubarSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], MenubarSub);\n    return MenubarSub;\n}());\nexports.MenubarSub = MenubarSub;\nvar Menubar = /** @class */ (function () {\n    function Menubar(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.autoDisplay = true;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Menubar.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Menubar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Menubar.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Menubar.prototype, \"autoDisplay\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Menubar.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Menubar.prototype, \"baseZIndex\", void 0);\n    Menubar = __decorate([\n        core_1.Component({\n            selector: 'p-menubar',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-menubar ui-widget ui-widget-content ui-corner-all':true}\\\" [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\">\\n            <p-menubarSub [item]=\\\"model\\\" root=\\\"root\\\" [autoDisplay]=\\\"autoDisplay\\\" [baseZIndex]=\\\"baseZIndex\\\" [autoZIndex]=\\\"autoZIndex\\\">\\n                <ng-content></ng-content>\\n            </p-menubarSub>\\n            <div class=\\\"ui-menubar-custom\\\">\\n                <ng-content></ng-content>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], Menubar);\n    return Menubar;\n}());\nexports.Menubar = Menubar;\nvar MenubarModule = /** @class */ (function () {\n    function MenubarModule() {\n    }\n    MenubarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [Menubar, router_1.RouterModule],\n            declarations: [Menubar, MenubarSub]\n        })\n    ], MenubarModule);\n    return MenubarModule;\n}());\nexports.MenubarModule = MenubarModule;\n//# sourceMappingURL=menubar.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/menubar/menubar.js\n// module id = 761\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar UIMessage = /** @class */ (function () {\n    function UIMessage() {\n    }\n    Object.defineProperty(UIMessage.prototype, \"icon\", {\n        get: function () {\n            var icon = null;\n            if (this.severity) {\n                switch (this.severity) {\n                    case 'success':\n                        icon = 'fa fa-check';\n                        break;\n                    case 'info':\n                        icon = 'fa fa-info-circle';\n                        break;\n                    case 'error':\n                        icon = 'fa fa-close';\n                        break;\n                    case 'warn':\n                        icon = 'fa fa-warning';\n                        break;\n                    default:\n                        icon = 'fa fa-info-circle';\n                        break;\n                }\n            }\n            return icon;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIMessage.prototype, \"severity\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UIMessage.prototype, \"text\", void 0);\n    UIMessage = __decorate([\n        core_1.Component({\n            selector: 'p-message',\n            template: \"\\n        <div aria-live=\\\"polite\\\" class=\\\"ui-message ui-widget ui-corner-all\\\" *ngIf=\\\"severity\\\"\\n        [ngClass]=\\\"{'ui-messages-info': (severity === 'info'),\\n                'ui-messages-warn': (severity === 'warn'),\\n                'ui-messages-error': (severity === 'error'),\\n                'ui-messages-success': (severity === 'success')}\\\">\\n            <span class=\\\"ui-message-icon\\\" [ngClass]=\\\"icon\\\"></span>\\n            <span class=\\\"ui-message-text\\\">{{text}}</span>\\n        </div>\\n    \"\n        })\n    ], UIMessage);\n    return UIMessage;\n}());\nexports.UIMessage = UIMessage;\nvar MessageModule = /** @class */ (function () {\n    function MessageModule() {\n    }\n    MessageModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [UIMessage],\n            declarations: [UIMessage]\n        })\n    ], MessageModule);\n    return MessageModule;\n}());\nexports.MessageModule = MessageModule;\n//# sourceMappingURL=message.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/message/message.js\n// module id = 762\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar objectutils_1 = require(\"../utils/objectutils\");\nvar shared_1 = require(\"../common/shared\");\nvar forms_1 = require(\"@angular/forms\");\nexports.MULTISELECT_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return MultiSelect; }),\n    multi: true\n};\nvar MultiSelect = /** @class */ (function () {\n    function MultiSelect(el, domHandler, renderer, objectUtils, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.objectUtils = objectUtils;\n        this.cd = cd;\n        this.scrollHeight = '200px';\n        this.defaultLabel = 'Choose';\n        this.filter = true;\n        this.displaySelectedLabel = true;\n        this.maxSelectedLabels = 3;\n        this.selectedItemsLabel = '{0} items selected';\n        this.showToggleAll = true;\n        this.resetFilterOnHide = false;\n        this.dropdownIcon = 'fa fa-fw fa-caret-down';\n        this.showHeader = true;\n        this.onChange = new core_1.EventEmitter();\n        this.onFocus = new core_1.EventEmitter();\n        this.onBlur = new core_1.EventEmitter();\n        this.onPanelShow = new core_1.EventEmitter();\n        this.onPanelHide = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Object.defineProperty(MultiSelect.prototype, \"options\", {\n        get: function () {\n            return this._options;\n        },\n        set: function (val) {\n            var opts = this.optionLabel ? this.objectUtils.generateSelectItems(val, this.optionLabel) : val;\n            this._options = opts;\n            this.updateLabel();\n        },\n        enumerable: true,\n        configurable: true\n    });\n    MultiSelect.prototype.ngOnInit = function () {\n        this.updateLabel();\n    };\n    MultiSelect.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    MultiSelect.prototype.ngAfterViewInit = function () {\n        this.container = this.containerViewChild.nativeElement;\n        this.panel = this.panelViewChild.nativeElement;\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.panel);\n            else\n                this.domHandler.appendChild(this.panel, this.appendTo);\n        }\n        if (this.overlayVisible) {\n            this.show();\n        }\n    };\n    MultiSelect.prototype.ngAfterViewChecked = function () {\n        if (this.filtered) {\n            if (this.appendTo)\n                this.domHandler.absolutePosition(this.panel, this.container);\n            else\n                this.domHandler.relativePosition(this.panel, this.container);\n            this.filtered = false;\n        }\n    };\n    MultiSelect.prototype.writeValue = function (value) {\n        this.value = value;\n        this.updateLabel();\n        this.updateFilledState();\n        this.cd.markForCheck();\n    };\n    MultiSelect.prototype.updateFilledState = function () {\n        this.filled = (this.valuesAsString != null && this.valuesAsString.length > 0);\n    };\n    MultiSelect.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    MultiSelect.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    MultiSelect.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    MultiSelect.prototype.onItemClick = function (event, value) {\n        var selectionIndex = this.findSelectionIndex(value);\n        if (selectionIndex != -1)\n            this.value = this.value.filter(function (val, i) { return i != selectionIndex; });\n        else\n            this.value = (this.value || []).concat([value]);\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value, itemValue: value });\n        this.updateLabel();\n        this.updateFilledState();\n    };\n    MultiSelect.prototype.isSelected = function (value) {\n        return this.findSelectionIndex(value) != -1;\n    };\n    MultiSelect.prototype.findSelectionIndex = function (val) {\n        var index = -1;\n        if (this.value) {\n            for (var i = 0; i < this.value.length; i++) {\n                if (this.objectUtils.equals(this.value[i], val, this.dataKey)) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    MultiSelect.prototype.toggleAll = function (event, checkbox) {\n        if (checkbox.checked) {\n            this.value = [];\n        }\n        else {\n            var opts = this.getVisibleOptions();\n            if (opts) {\n                this.value = [];\n                for (var i = 0; i < opts.length; i++) {\n                    this.value.push(opts[i].value);\n                }\n            }\n        }\n        checkbox.checked = !checkbox.checked;\n        this.onModelChange(this.value);\n        this.onChange.emit({ originalEvent: event, value: this.value });\n        this.updateLabel();\n    };\n    MultiSelect.prototype.isAllChecked = function () {\n        if (this.filterValue && this.filterValue.trim().length)\n            return this.value && this.visibleOptions && this.visibleOptions.length && (this.value.length == this.visibleOptions.length);\n        else\n            return this.value && this.options && (this.value.length == this.options.length);\n    };\n    MultiSelect.prototype.show = function () {\n        this.overlayVisible = true;\n        this.panel.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n        this.bindDocumentClickListener();\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.panel, this.container);\n        else\n            this.domHandler.relativePosition(this.panel, this.container);\n        this.domHandler.fadeIn(this.panel, 250);\n        this.onPanelShow.emit();\n    };\n    MultiSelect.prototype.hide = function () {\n        this.overlayVisible = false;\n        this.unbindDocumentClickListener();\n        if (this.resetFilterOnHide) {\n            this.filterValue = null;\n            this.filterInputChild.nativeElement.value = null;\n        }\n        this.onPanelHide.emit();\n    };\n    MultiSelect.prototype.close = function (event) {\n        this.hide();\n        event.preventDefault();\n        event.stopPropagation();\n    };\n    MultiSelect.prototype.onMouseclick = function (event, input) {\n        if (this.disabled) {\n            return;\n        }\n        if (!this.panelClick) {\n            if (this.overlayVisible) {\n                this.hide();\n            }\n            else {\n                input.focus();\n                this.show();\n            }\n        }\n        this.selfClick = true;\n    };\n    MultiSelect.prototype.onInputFocus = function (event) {\n        this.focus = true;\n        this.onFocus.emit({ originalEvent: event });\n    };\n    MultiSelect.prototype.onInputBlur = function (event) {\n        this.focus = false;\n        this.onBlur.emit({ originalEvent: event });\n        this.onModelTouched();\n    };\n    MultiSelect.prototype.onInputKeydown = function (event) {\n        switch (event.which) {\n            //down\n            case 40:\n                if (!this.overlayVisible && event.altKey) {\n                    this.show();\n                }\n                event.preventDefault();\n                break;\n            //escape and tab\n            case 27:\n            case 9:\n                this.hide();\n                break;\n        }\n    };\n    MultiSelect.prototype.updateLabel = function () {\n        if (this.value && this.options && this.value.length && this.displaySelectedLabel) {\n            var label = '';\n            for (var i = 0; i < this.value.length; i++) {\n                var itemLabel = this.findLabelByValue(this.value[i]);\n                if (itemLabel) {\n                    if (label.length > 0) {\n                        label = label + ', ';\n                    }\n                    label = label + itemLabel;\n                }\n            }\n            if (this.value.length <= this.maxSelectedLabels) {\n                this.valuesAsString = label;\n            }\n            else {\n                var pattern = /{(.*?)}/;\n                if (pattern.test(this.selectedItemsLabel)) {\n                    this.valuesAsString = this.selectedItemsLabel.replace(this.selectedItemsLabel.match(pattern)[0], this.value.length + '');\n                }\n            }\n        }\n        else {\n            this.valuesAsString = this.defaultLabel;\n        }\n    };\n    MultiSelect.prototype.findLabelByValue = function (val) {\n        var label = null;\n        for (var i = 0; i < this.options.length; i++) {\n            var option = this.options[i];\n            if (val == null && option.value == null || this.objectUtils.equals(val, option.value, this.dataKey)) {\n                label = option.label;\n                break;\n            }\n        }\n        return label;\n    };\n    MultiSelect.prototype.onFilter = function (event) {\n        this.filterValue = event.target.value.trim().toLowerCase();\n        this.visibleOptions = [];\n        for (var i = 0; i < this.options.length; i++) {\n            var option = this.options[i];\n            if (option.label.toLowerCase().indexOf(this.filterValue.toLowerCase()) > -1) {\n                this.visibleOptions.push(option);\n            }\n        }\n        this.filtered = true;\n    };\n    MultiSelect.prototype.isItemVisible = function (option) {\n        if (this.filterValue && this.filterValue.trim().length) {\n            for (var i = 0; i < this.visibleOptions.length; i++) {\n                if (this.visibleOptions[i].value == option.value) {\n                    return true;\n                }\n            }\n        }\n        else {\n            return true;\n        }\n    };\n    MultiSelect.prototype.getVisibleOptions = function () {\n        if (this.filterValue && this.filterValue.trim().length) {\n            var items = [];\n            for (var i = 0; i < this.options.length; i++) {\n                var option = this.options[i];\n                if (option.label.toLowerCase().includes(this.filterValue.toLowerCase())) {\n                    items.push(option);\n                }\n            }\n            return items;\n        }\n        else {\n            return this.options;\n        }\n    };\n    MultiSelect.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.selfClick && !_this.panelClick && _this.overlayVisible) {\n                    _this.hide();\n                }\n                _this.selfClick = false;\n                _this.panelClick = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    MultiSelect.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    MultiSelect.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.container.appendChild(this.panel);\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"scrollHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"defaultLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MultiSelect.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MultiSelect.prototype, \"panelStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"panelStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"filter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"filterPlaceHolder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"overlayVisible\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], MultiSelect.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], MultiSelect.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"displaySelectedLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], MultiSelect.prototype, \"maxSelectedLabels\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"selectedItemsLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"showToggleAll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"resetFilterOnHide\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"dropdownIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], MultiSelect.prototype, \"optionLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], MultiSelect.prototype, \"showHeader\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], MultiSelect.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('panel'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], MultiSelect.prototype, \"panelViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('filterInput'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], MultiSelect.prototype, \"filterInputChild\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], MultiSelect.prototype, \"footerFacet\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], MultiSelect.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onFocus\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onBlur\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onPanelShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], MultiSelect.prototype, \"onPanelHide\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], MultiSelect.prototype, \"options\", null);\n    MultiSelect = __decorate([\n        core_1.Component({\n            selector: 'p-multiSelect',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-multiselect ui-widget ui-state-default ui-corner-all':true,'ui-state-focus':focus,'ui-state-disabled': disabled}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\"\\n            (click)=\\\"onMouseclick($event,in)\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #in type=\\\"text\\\" readonly=\\\"readonly\\\" [attr.id]=\\\"inputId\\\" [attr.name]=\\\"name\\\" (focus)=\\\"onInputFocus($event)\\\" (blur)=\\\"onInputBlur($event)\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\" (keydown)=\\\"onInputKeydown($event)\\\">\\n            </div>\\n            <div class=\\\"ui-multiselect-label-container\\\" [title]=\\\"valuesAsString\\\">\\n                <label class=\\\"ui-multiselect-label ui-corner-all\\\">{{valuesAsString}}</label>\\n            </div>\\n            <div [ngClass]=\\\"{'ui-multiselect-trigger ui-state-default ui-corner-right':true}\\\">\\n                <span class=\\\"ui-multiselect-trigger-icon ui-clickable\\\" [ngClass]=\\\"dropdownIcon\\\"></span>\\n            </div>\\n            <div #panel [ngClass]=\\\"['ui-multiselect-panel ui-widget ui-widget-content ui-corner-all ui-shadow', panelStyleClass||'']\\\" [ngStyle]=\\\"panelStyle\\\"\\n                [style.display]=\\\"overlayVisible ? 'block' : 'none'\\\" (click)=\\\"panelClick=true\\\">\\n                <div class=\\\"ui-widget-header ui-corner-all ui-multiselect-header ui-helper-clearfix\\\" [ngClass]=\\\"{'ui-multiselect-header-no-toggleall': !showToggleAll}\\\" *ngIf=\\\"showHeader\\\">\\n                    <div class=\\\"ui-chkbox ui-widget\\\" *ngIf=\\\"showToggleAll\\\">\\n                        <div class=\\\"ui-helper-hidden-accessible\\\">\\n                            <input #cb type=\\\"checkbox\\\" readonly=\\\"readonly\\\" [checked]=\\\"isAllChecked()\\\">\\n                        </div>\\n                        <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" [ngClass]=\\\"{'ui-state-active':isAllChecked()}\\\" (click)=\\\"toggleAll($event,cb)\\\">\\n                            <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':isAllChecked()}\\\"></span>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"ui-multiselect-filter-container\\\" *ngIf=\\\"filter\\\">\\n                        <input #filterInput type=\\\"text\\\" role=\\\"textbox\\\" (input)=\\\"onFilter($event)\\\" class=\\\"ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [attr.placeholder]=\\\"filterPlaceHolder\\\">\\n                        <span class=\\\"ui-multiselect-filter-icon fa fa-fw fa-search\\\"></span>\\n                    </div>\\n                    <a class=\\\"ui-multiselect-close ui-corner-all\\\" href=\\\"#\\\" (click)=\\\"close($event)\\\">\\n                        <span class=\\\"fa fa-close\\\"></span>\\n                    </a>\\n                </div>\\n                <div class=\\\"ui-multiselect-items-wrapper\\\">\\n                    <ul class=\\\"ui-multiselect-items ui-multiselect-list ui-widget-content ui-widget ui-corner-all ui-helper-reset\\\" [style.max-height]=\\\"scrollHeight||'auto'\\\">\\n                        <li *ngFor=\\\"let option of options; let i = index\\\" class=\\\"ui-multiselect-item ui-corner-all\\\" (click)=\\\"onItemClick($event,option.value)\\\" \\n                            [style.display]=\\\"isItemVisible(option) ? 'block' : 'none'\\\" [ngClass]=\\\"{'ui-state-highlight':isSelected(option.value)}\\\">\\n                            <div class=\\\"ui-chkbox ui-widget\\\">\\n                                <div class=\\\"ui-helper-hidden-accessible\\\">\\n                                    <input #itemcb type=\\\"checkbox\\\" readonly=\\\"readonly\\\" [checked]=\\\"isSelected(option.value)\\\" (focus)=\\\"focusedItemCheckbox=itemcb\\\" (blur)=\\\"focusedItemCheckbox=null\\\" [attr.aria-label]=\\\"option.label\\\">\\n                                </div>\\n                                <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" [ngClass]=\\\"{'ui-state-active':isSelected(option.value), 'ui-state-focus': (focusedItemCheckbox === itemcb)}\\\">\\n                                    <span class=\\\"ui-chkbox-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-check':isSelected(option.value)}\\\"></span>\\n                                </div>\\n                            </div>\\n                            <label *ngIf=\\\"!itemTemplate\\\">{{option.label}}</label>\\n                            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option, index: i}\\\"></ng-container>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"ui-multiselect-footer ui-widget-content\\\" *ngIf=\\\"footerFacet\\\">\\n                    <ng-content select=\\\"p-footer\\\"></ng-content>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            host: {\n                '[class.ui-inputwrapper-filled]': 'filled',\n                '[class.ui-inputwrapper-focus]': 'focus'\n            },\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils, exports.MULTISELECT_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, objectutils_1.ObjectUtils, core_1.ChangeDetectorRef])\n    ], MultiSelect);\n    return MultiSelect;\n}());\nexports.MultiSelect = MultiSelect;\nvar MultiSelectModule = /** @class */ (function () {\n    function MultiSelectModule() {\n    }\n    MultiSelectModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [MultiSelect, shared_1.SharedModule],\n            declarations: [MultiSelect]\n        })\n    ], MultiSelectModule);\n    return MultiSelectModule;\n}());\nexports.MultiSelectModule = MultiSelectModule;\n//# sourceMappingURL=multiselect.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/multiselect/multiselect.js\n// module id = 763\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar button_1 = require(\"../button/button\");\nvar shared_1 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar objectutils_1 = require(\"../utils/objectutils\");\nvar OrderList = /** @class */ (function () {\n    function OrderList(el, domHandler, objectUtils) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.objectUtils = objectUtils;\n        this.metaKeySelection = true;\n        this.trackBy = function (index, item) { return item; };\n        this.onReorder = new core_1.EventEmitter();\n        this.onSelectionChange = new core_1.EventEmitter();\n        this.onFilterEvent = new core_1.EventEmitter();\n    }\n    OrderList.prototype.ngAfterViewInit = function () {\n        this.listContainer = this.domHandler.findSingle(this.el.nativeElement, 'ul.ui-orderlist-list');\n    };\n    OrderList.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    OrderList.prototype.ngAfterViewChecked = function () {\n        if (this.movedUp || this.movedDown) {\n            var listItems = this.domHandler.find(this.listContainer, 'li.ui-state-highlight');\n            var listItem = void 0;\n            if (listItems.length > 0) {\n                if (this.movedUp)\n                    listItem = listItems[0];\n                else\n                    listItem = listItems[listItems.length - 1];\n                this.domHandler.scrollInView(this.listContainer, listItem);\n            }\n            this.movedUp = false;\n            this.movedDown = false;\n        }\n    };\n    Object.defineProperty(OrderList.prototype, \"value\", {\n        get: function () {\n            return this._value;\n        },\n        set: function (val) {\n            this._value = val;\n            if (this.filterValue) {\n                this.filter();\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    OrderList.prototype.onItemClick = function (event, item, index) {\n        var selectedIndex = this.objectUtils.findIndexInList(item, this.selectedItems);\n        var selected = (selectedIndex != -1);\n        var metaSelection = this.itemTouched ? false : this.metaKeySelection;\n        if (metaSelection) {\n            var metaKey = (event.metaKey || event.ctrlKey);\n            if (selected && metaKey) {\n                this.selectedItems.splice(selectedIndex, 1);\n            }\n            else {\n                this.selectedItems = (metaKey) ? this.selectedItems || [] : [];\n                this.selectItem(item, index);\n            }\n        }\n        else {\n            if (selected) {\n                this.selectedItems.splice(selectedIndex, 1);\n            }\n            else {\n                this.selectedItems = this.selectedItems || [];\n                this.selectItem(item, index);\n            }\n        }\n        this.onSelectionChange.emit({ originalEvent: event, value: this.selectedItems });\n        this.itemTouched = false;\n    };\n    OrderList.prototype.selectItem = function (item, index) {\n        this.selectedItems = this.selectedItems || [];\n        this.objectUtils.insertIntoOrderedArray(item, index, this.selectedItems, this.value);\n    };\n    OrderList.prototype.onFilterKeyup = function (event) {\n        this.filterValue = event.target.value.trim().toLowerCase();\n        this.filter();\n        this.onFilterEvent.emit({\n            originalEvent: event,\n            value: this.visibleOptions\n        });\n    };\n    OrderList.prototype.filter = function () {\n        var searchFields = this.filterBy.split(',');\n        this.visibleOptions = this.objectUtils.filter(this.value, searchFields, this.filterValue);\n    };\n    OrderList.prototype.isItemVisible = function (item) {\n        if (this.filterValue && this.filterValue.trim().length) {\n            for (var i = 0; i < this.visibleOptions.length; i++) {\n                if (item == this.visibleOptions[i]) {\n                    return true;\n                }\n            }\n        }\n        else {\n            return true;\n        }\n    };\n    OrderList.prototype.onItemTouchEnd = function (event) {\n        this.itemTouched = true;\n    };\n    OrderList.prototype.isSelected = function (item) {\n        return this.objectUtils.findIndexInList(item, this.selectedItems) != -1;\n    };\n    OrderList.prototype.moveUp = function (event, listElement) {\n        if (this.selectedItems) {\n            for (var i = 0; i < this.selectedItems.length; i++) {\n                var selectedItem = this.selectedItems[i];\n                var selectedItemIndex = this.objectUtils.findIndexInList(selectedItem, this.value);\n                if (selectedItemIndex != 0) {\n                    var movedItem = this.value[selectedItemIndex];\n                    var temp = this.value[selectedItemIndex - 1];\n                    this.value[selectedItemIndex - 1] = movedItem;\n                    this.value[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n            this.movedUp = true;\n            this.onReorder.emit(event);\n        }\n    };\n    OrderList.prototype.moveTop = function (event, listElement) {\n        if (this.selectedItems) {\n            for (var i = 0; i < this.selectedItems.length; i++) {\n                var selectedItem = this.selectedItems[i];\n                var selectedItemIndex = this.objectUtils.findIndexInList(selectedItem, this.value);\n                if (selectedItemIndex != 0) {\n                    var movedItem = this.value.splice(selectedItemIndex, 1)[0];\n                    this.value.unshift(movedItem);\n                    listElement.scrollTop = 0;\n                }\n                else {\n                    break;\n                }\n            }\n            this.onReorder.emit(event);\n            listElement.scrollTop = 0;\n        }\n    };\n    OrderList.prototype.moveDown = function (event, listElement) {\n        if (this.selectedItems) {\n            for (var i = this.selectedItems.length - 1; i >= 0; i--) {\n                var selectedItem = this.selectedItems[i];\n                var selectedItemIndex = this.objectUtils.findIndexInList(selectedItem, this.value);\n                if (selectedItemIndex != (this.value.length - 1)) {\n                    var movedItem = this.value[selectedItemIndex];\n                    var temp = this.value[selectedItemIndex + 1];\n                    this.value[selectedItemIndex + 1] = movedItem;\n                    this.value[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n            this.movedDown = true;\n            this.onReorder.emit(event);\n        }\n    };\n    OrderList.prototype.moveBottom = function (event, listElement) {\n        if (this.selectedItems) {\n            for (var i = this.selectedItems.length - 1; i >= 0; i--) {\n                var selectedItem = this.selectedItems[i];\n                var selectedItemIndex = this.objectUtils.findIndexInList(selectedItem, this.value);\n                if (selectedItemIndex != (this.value.length - 1)) {\n                    var movedItem = this.value.splice(selectedItemIndex, 1)[0];\n                    this.value.push(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n            this.onReorder.emit(event);\n            listElement.scrollTop = listElement.scrollHeight;\n        }\n    };\n    OrderList.prototype.onDragStart = function (event, index) {\n        this.dragging = true;\n        this.draggedItemIndex = index;\n        if (this.dragdropScope) {\n            event.dataTransfer.setData(\"text\", this.dragdropScope);\n        }\n    };\n    OrderList.prototype.onDragOver = function (event, index) {\n        if (this.draggedItemIndex !== index && this.draggedItemIndex + 1 !== index) {\n            this.dragOverItemIndex = index;\n            event.preventDefault();\n        }\n    };\n    OrderList.prototype.onDragLeave = function (event) {\n        this.dragOverItemIndex = null;\n    };\n    OrderList.prototype.onDrop = function (event, index) {\n        var dropIndex = (this.draggedItemIndex > index) ? index : (index === 0) ? 0 : index - 1;\n        this.objectUtils.reorderArray(this.value, this.draggedItemIndex, dropIndex);\n        this.dragOverItemIndex = null;\n        this.onReorder.emit(event);\n        event.preventDefault();\n    };\n    OrderList.prototype.onDragEnd = function (event) {\n        this.dragging = false;\n    };\n    OrderList.prototype.onListMouseMove = function (event) {\n        if (this.dragging) {\n            var offsetY = this.listViewChild.nativeElement.getBoundingClientRect().top + document.body.scrollTop;\n            var bottomDiff = (offsetY + this.listViewChild.nativeElement.clientHeight) - event.pageY;\n            var topDiff = (event.pageY - offsetY);\n            if (bottomDiff < 25 && bottomDiff > 0)\n                this.listViewChild.nativeElement.scrollTop += 15;\n            else if (topDiff < 25 && topDiff > 0)\n                this.listViewChild.nativeElement.scrollTop -= 15;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrderList.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrderList.prototype, \"listStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrderList.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"filterBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"filterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrderList.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrderList.prototype, \"dragdrop\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrderList.prototype, \"dragdropScope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], OrderList.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrderList.prototype, \"onReorder\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrderList.prototype, \"onSelectionChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrderList.prototype, \"onFilterEvent\", void 0);\n    __decorate([\n        core_1.ViewChild('listelement'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], OrderList.prototype, \"listViewChild\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], OrderList.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], OrderList.prototype, \"value\", null);\n    OrderList = __decorate([\n        core_1.Component({\n            selector: 'p-orderList',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-orderlist ui-widget':true,'ui-orderlist-responsive':responsive}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-orderlist-controls\\\">\\n                <button type=\\\"button\\\" pButton icon=\\\"fa-angle-up\\\" (click)=\\\"moveUp($event,listelement)\\\"></button>\\n                <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-up\\\" (click)=\\\"moveTop($event,listelement)\\\"></button>\\n                <button type=\\\"button\\\" pButton icon=\\\"fa-angle-down\\\" (click)=\\\"moveDown($event,listelement)\\\"></button>\\n                <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-down\\\" (click)=\\\"moveBottom($event,listelement)\\\"></button>\\n            </div>\\n            <div class=\\\"ui-orderlist-list-container\\\">\\n                <div class=\\\"ui-orderlist-caption ui-widget-header ui-corner-top\\\" *ngIf=\\\"header\\\">{{header}}</div>\\n                <div class=\\\"ui-orderlist-filter-container ui-widget-content\\\" *ngIf=\\\"filterBy\\\">\\n                    <input type=\\\"text\\\" role=\\\"textbox\\\" (keyup)=\\\"onFilterKeyup($event)\\\" class=\\\"ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [attr.placeholder]=\\\"filterPlaceholder\\\">\\n                    <span class=\\\"ui-orderlist-filter-icon fa fa-search\\\"></span>\\n                </div>\\n                <ul #listelement class=\\\"ui-widget-content ui-orderlist-list ui-corner-bottom\\\" [ngStyle]=\\\"listStyle\\\" (dragover)=\\\"onListMouseMove($event)\\\">\\n                    <ng-template ngFor [ngForTrackBy]=\\\"trackBy\\\" let-item [ngForOf]=\\\"value\\\" let-i=\\\"index\\\" let-l=\\\"last\\\">\\n                        <li class=\\\"ui-orderlist-droppoint\\\" *ngIf=\\\"dragdrop && isItemVisible(item)\\\" (dragover)=\\\"onDragOver($event, i)\\\" (drop)=\\\"onDrop($event, i)\\\" (dragleave)=\\\"onDragLeave($event)\\\" \\n                            [ngClass]=\\\"{'ui-state-highlight': (i === dragOverItemIndex)}\\\"></li>\\n                        <li class=\\\"ui-orderlist-item\\\"\\n                            [ngClass]=\\\"{'ui-state-highlight':isSelected(item)}\\\" \\n                            (click)=\\\"onItemClick($event,item,i)\\\" (touchend)=\\\"onItemTouchEnd($event)\\\"\\n                            [style.display]=\\\"isItemVisible(item) ? 'block' : 'none'\\\"\\n                            [draggable]=\\\"dragdrop\\\" (dragstart)=\\\"onDragStart($event, i)\\\" (dragend)=\\\"onDragEnd($event)\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: i}\\\"></ng-container>\\n                        </li>\\n                        <li class=\\\"ui-orderlist-droppoint\\\" *ngIf=\\\"dragdrop && l\\\" (dragover)=\\\"onDragOver($event, i + 1)\\\" (drop)=\\\"onDrop($event, i + 1)\\\" (dragleave)=\\\"onDragLeave($event)\\\" \\n                            [ngClass]=\\\"{'ui-state-highlight': (i + 1 === dragOverItemIndex)}\\\"></li>\\n                    </ng-template>\\n                </ul>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, objectutils_1.ObjectUtils])\n    ], OrderList);\n    return OrderList;\n}());\nexports.OrderList = OrderList;\nvar OrderListModule = /** @class */ (function () {\n    function OrderListModule() {\n    }\n    OrderListModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule, shared_1.SharedModule],\n            exports: [OrderList, shared_1.SharedModule],\n            declarations: [OrderList]\n        })\n    ], OrderListModule);\n    return OrderListModule;\n}());\nexports.OrderListModule = OrderListModule;\n//# sourceMappingURL=orderlist.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/orderlist/orderlist.js\n// module id = 764\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar shared_1 = require(\"../common/shared\");\nvar shared_2 = require(\"../common/shared\");\nvar OrganizationChartNode = /** @class */ (function () {\n    function OrganizationChartNode(chart) {\n        this.chart = chart;\n    }\n    Object.defineProperty(OrganizationChartNode.prototype, \"leaf\", {\n        get: function () {\n            return this.node.leaf == false ? false : !(this.node.children && this.node.children.length);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(OrganizationChartNode.prototype, \"colspan\", {\n        get: function () {\n            return (this.node.children && this.node.children.length) ? this.node.children.length * 2 : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    OrganizationChartNode.prototype.onNodeClick = function (event, node) {\n        this.chart.onNodeClick(event, node);\n    };\n    OrganizationChartNode.prototype.toggleNode = function (event, node) {\n        node.expanded = !node.expanded;\n        event.preventDefault();\n    };\n    OrganizationChartNode.prototype.isSelected = function () {\n        return this.chart.isSelected(this.node);\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrganizationChartNode.prototype, \"node\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrganizationChartNode.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrganizationChartNode.prototype, \"first\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OrganizationChartNode.prototype, \"last\", void 0);\n    OrganizationChartNode = __decorate([\n        core_1.Component({\n            selector: '[pOrganizationChartNode]',\n            template: \"\\n        <tr *ngIf=\\\"node\\\">\\n            <td [attr.colspan]=\\\"colspan\\\">\\n                <div class=\\\"ui-organizationchart-node-content ui-widget-content ui-corner-all {{node.styleClass}}\\\" \\n                    [ngClass]=\\\"{'ui-organizationchart-selectable-node': chart.selectionMode && node.selectable !== false,'ui-state-highlight':isSelected()}\\\"\\n                    (click)=\\\"onNodeClick($event,node)\\\">\\n                    <div *ngIf=\\\"!chart.getTemplateForNode(node)\\\">{{node.label}}</div>\\n                    <div *ngIf=\\\"chart.getTemplateForNode(node)\\\">\\n                        <ng-container *ngTemplateOutlet=\\\"chart.getTemplateForNode(node); context: {$implicit: node}\\\"></ng-container>\\n                    </div>\\n                    <a *ngIf=\\\"!leaf\\\" href=\\\"#\\\" class=\\\"ui-node-toggler\\\" (click)=\\\"toggleNode($event, node)\\\">\\n                        <i class=\\\"fa ui-node-toggler-icon\\\" [ngClass]=\\\"{'fa-chevron-down': node.expanded, 'fa-chevron-up': !node.expanded}\\\"></i>\\n                    </a>\\n                </div>\\n            </td>\\n        </tr>\\n        <tr [style.visibility]=\\\"!leaf&&node.expanded ? 'inherit' : 'hidden'\\\" class=\\\"ui-organizationchart-lines\\\" [@childState]=\\\"'in'\\\">\\n            <td [attr.colspan]=\\\"colspan\\\">\\n                <div class=\\\"ui-organizationchart-line-down\\\"></div>\\n            </td>\\n        </tr>\\n        <tr [style.visibility]=\\\"!leaf&&node.expanded ? 'inherit' : 'hidden'\\\" class=\\\"ui-organizationchart-lines\\\" [@childState]=\\\"'in'\\\">\\n            <ng-container *ngIf=\\\"node.children && node.children.length === 1\\\">\\n                <td [attr.colspan]=\\\"colspan\\\">\\n                    <div class=\\\"ui-organizationchart-line-down\\\"></div>\\n                </td>\\n            </ng-container>\\n            <ng-container *ngIf=\\\"node.children && node.children.length > 1\\\">\\n                <ng-template ngFor let-child [ngForOf]=\\\"node.children\\\" let-first=\\\"first\\\" let-last=\\\"last\\\">\\n                    <td class=\\\"ui-organizationchart-line-left\\\" [ngClass]=\\\"{'ui-organizationchart-line-top':!first}\\\">&nbsp;</td>\\n                    <td class=\\\"ui-organizationchart-line-right\\\" [ngClass]=\\\"{'ui-organizationchart-line-top':!last}\\\">&nbsp;</td>\\n                </ng-template>\\n            </ng-container>\\n        </tr>\\n        <tr [style.visibility]=\\\"!leaf&&node.expanded ? 'inherit' : 'hidden'\\\" class=\\\"ui-organizationchart-nodes\\\" [@childState]=\\\"'in'\\\">\\n            <td *ngFor=\\\"let child of node.children\\\" colspan=\\\"2\\\">\\n                <table class=\\\"ui-organizationchart-table\\\" pOrganizationChartNode [node]=\\\"child\\\"></table>\\n            </td>\\n        </tr>\\n    \",\n            animations: [\n                animations_1.trigger('childState', [\n                    animations_1.state('in', animations_1.style({ opacity: 1 })),\n                    animations_1.transition('void => *', [\n                        animations_1.style({ opacity: 0 }),\n                        animations_1.animate(150)\n                    ]),\n                    animations_1.transition('* => void', [\n                        animations_1.animate(150, animations_1.style({ opacity: 0 }))\n                    ])\n                ])\n            ],\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return OrganizationChart; }))),\n        __metadata(\"design:paramtypes\", [OrganizationChart])\n    ], OrganizationChartNode);\n    return OrganizationChartNode;\n}());\nexports.OrganizationChartNode = OrganizationChartNode;\nvar OrganizationChart = /** @class */ (function () {\n    function OrganizationChart(el, domHandler) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.selectionChange = new core_1.EventEmitter();\n        this.onNodeSelect = new core_1.EventEmitter();\n        this.onNodeUnselect = new core_1.EventEmitter();\n    }\n    Object.defineProperty(OrganizationChart.prototype, \"root\", {\n        get: function () {\n            return this.value && this.value.length ? this.value[0] : null;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    OrganizationChart.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        if (this.templates.length) {\n            this.templateMap = {};\n        }\n        this.templates.forEach(function (item) {\n            _this.templateMap[item.getType()] = item.template;\n        });\n    };\n    OrganizationChart.prototype.getTemplateForNode = function (node) {\n        if (this.templateMap)\n            return node.type ? this.templateMap[node.type] : this.templateMap['default'];\n        else\n            return null;\n    };\n    OrganizationChart.prototype.onNodeClick = function (event, node) {\n        var eventTarget = event.target;\n        if (eventTarget.className && (eventTarget.className.indexOf('ui-node-toggler') !== -1 || eventTarget.className.indexOf('ui-node-toggler-icon') !== -1)) {\n            return;\n        }\n        else if (this.selectionMode) {\n            if (node.selectable === false) {\n                return;\n            }\n            var index_1 = this.findIndexInSelection(node);\n            var selected = (index_1 >= 0);\n            if (this.selectionMode === 'single') {\n                if (selected) {\n                    this.selection = null;\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                }\n                else {\n                    this.selection = node;\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            }\n            else if (this.selectionMode === 'multiple') {\n                if (selected) {\n                    this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                }\n                else {\n                    this.selection = (this.selection || []).concat([node]);\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            }\n            this.selectionChange.emit(this.selection);\n        }\n    };\n    OrganizationChart.prototype.findIndexInSelection = function (node) {\n        var index = -1;\n        if (this.selectionMode && this.selection) {\n            if (this.selectionMode === 'single') {\n                index = (this.selection == node) ? 0 : -1;\n            }\n            else if (this.selectionMode === 'multiple') {\n                for (var i = 0; i < this.selection.length; i++) {\n                    if (this.selection[i] == node) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n        return index;\n    };\n    OrganizationChart.prototype.isSelected = function (node) {\n        return this.findIndexInSelection(node) != -1;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], OrganizationChart.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrganizationChart.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrganizationChart.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OrganizationChart.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OrganizationChart.prototype, \"selection\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrganizationChart.prototype, \"selectionChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrganizationChart.prototype, \"onNodeSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OrganizationChart.prototype, \"onNodeUnselect\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], OrganizationChart.prototype, \"templates\", void 0);\n    OrganizationChart = __decorate([\n        core_1.Component({\n            selector: 'p-organizationChart',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [ngClass]=\\\"'ui-organizationchart ui-widget'\\\">\\n            <table class=\\\"ui-organizationchart-table\\\" pOrganizationChartNode [node]=\\\"root\\\" *ngIf=\\\"root\\\"></table>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler])\n    ], OrganizationChart);\n    return OrganizationChart;\n}());\nexports.OrganizationChart = OrganizationChart;\nvar OrganizationChartModule = /** @class */ (function () {\n    function OrganizationChartModule() {\n    }\n    OrganizationChartModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [OrganizationChart, shared_1.SharedModule],\n            declarations: [OrganizationChart, OrganizationChartNode]\n        })\n    ], OrganizationChartModule);\n    return OrganizationChartModule;\n}());\nexports.OrganizationChartModule = OrganizationChartModule;\n//# sourceMappingURL=organizationchart.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/organizationchart/organizationchart.js\n// module id = 765\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar animations_1 = require(\"@angular/animations\");\nvar OverlayPanel = /** @class */ (function () {\n    function OverlayPanel(el, domHandler, renderer, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.cd = cd;\n        this.dismissable = true;\n        this.onBeforeShow = new core_1.EventEmitter();\n        this.onAfterShow = new core_1.EventEmitter();\n        this.onBeforeHide = new core_1.EventEmitter();\n        this.onAfterHide = new core_1.EventEmitter();\n        this.visible = false;\n    }\n    OverlayPanel.prototype.ngAfterViewInit = function () {\n        this.container = this.el.nativeElement.children[0];\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.container);\n            else\n                this.domHandler.appendChild(this.container, this.appendTo);\n        }\n    };\n    OverlayPanel.prototype.ngAfterViewChecked = function () {\n        if (this.willShow) {\n            this.domHandler.absolutePosition(this.container, this.target);\n            this.bindDocumentClickListener();\n            this.onAfterShow.emit(null);\n            this.willShow = false;\n        }\n        if (this.willHide) {\n            this.onAfterHide.emit(null);\n            this.willHide = false;\n        }\n    };\n    OverlayPanel.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener && this.dismissable) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.selfClick && !_this.targetClickEvent) {\n                    _this.hide();\n                }\n                _this.selfClick = false;\n                _this.targetClickEvent = false;\n                _this.cd.markForCheck();\n            });\n        }\n    };\n    OverlayPanel.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    OverlayPanel.prototype.toggle = function (event, target) {\n        if (!this.target || this.target === (target || event.currentTarget || event.target)) {\n            if (this.visible)\n                this.hide();\n            else\n                this.show(event, target);\n        }\n        else {\n            this.show(event, target);\n        }\n    };\n    OverlayPanel.prototype.show = function (event, target) {\n        this.onBeforeShow.emit(null);\n        this.target = target || event.currentTarget || event.target;\n        this.container.style.zIndex = ++domhandler_1.DomHandler.zindex;\n        this.visible = true;\n        this.willShow = true;\n        if (event.type === 'click') {\n            this.targetClickEvent = true;\n        }\n    };\n    OverlayPanel.prototype.hide = function () {\n        if (this.visible) {\n            this.onBeforeHide.emit(null);\n            this.willHide = true;\n            this.visible = false;\n            this.selfClick = false;\n            this.targetClickEvent = false;\n            this.unbindDocumentClickListener();\n        }\n    };\n    OverlayPanel.prototype.onPanelClick = function (event) {\n        if (this.closeClick) {\n            this.hide();\n            this.closeClick = false;\n        }\n        else if (this.dismissable) {\n            this.selfClick = true;\n        }\n    };\n    OverlayPanel.prototype.onCloseClick = function (event) {\n        this.closeClick = true;\n        event.preventDefault();\n    };\n    OverlayPanel.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.container);\n        }\n        this.target = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OverlayPanel.prototype, \"dismissable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], OverlayPanel.prototype, \"showCloseIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OverlayPanel.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], OverlayPanel.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], OverlayPanel.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OverlayPanel.prototype, \"onBeforeShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OverlayPanel.prototype, \"onAfterShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OverlayPanel.prototype, \"onBeforeHide\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], OverlayPanel.prototype, \"onAfterHide\", void 0);\n    OverlayPanel = __decorate([\n        core_1.Component({\n            selector: 'p-overlayPanel',\n            template: \"\\n        <div [ngClass]=\\\"'ui-overlaypanel ui-widget ui-widget-content ui-corner-all ui-shadow'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\"\\n            [style.display]=\\\"visible ? 'block' : 'none'\\\" (click)=\\\"onPanelClick($event)\\\" [@panelState]=\\\"visible ? 'visible' : 'hidden'\\\">\\n            <div class=\\\"ui-overlaypanel-content\\\">\\n                <ng-content></ng-content>\\n            </div>\\n            <a href=\\\"#\\\" *ngIf=\\\"showCloseIcon\\\" class=\\\"ui-overlaypanel-close ui-state-default\\\" (click)=\\\"onCloseClick($event)\\\">\\n                <span class=\\\"fa fa-fw fa-close\\\"></span>\\n            </a>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.ChangeDetectorRef])\n    ], OverlayPanel);\n    return OverlayPanel;\n}());\nexports.OverlayPanel = OverlayPanel;\nvar OverlayPanelModule = /** @class */ (function () {\n    function OverlayPanelModule() {\n    }\n    OverlayPanelModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [OverlayPanel],\n            declarations: [OverlayPanel]\n        })\n    ], OverlayPanelModule);\n    return OverlayPanelModule;\n}());\nexports.OverlayPanelModule = OverlayPanelModule;\n//# sourceMappingURL=overlaypanel.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/overlaypanel/overlaypanel.js\n// module id = 766\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar animations_1 = require(\"@angular/animations\");\nvar idx = 0;\nvar Panel = /** @class */ (function () {\n    function Panel(el) {\n        this.el = el;\n        this.collapsed = false;\n        this.expandIcon = 'fa-plus';\n        this.collapseIcon = 'fa-minus';\n        this.showHeader = true;\n        this.collapsedChange = new core_1.EventEmitter();\n        this.onBeforeToggle = new core_1.EventEmitter();\n        this.onAfterToggle = new core_1.EventEmitter();\n        this.id = \"ui-panel-\" + idx++;\n    }\n    Panel.prototype.toggle = function (event) {\n        if (this.animating) {\n            return false;\n        }\n        this.animating = true;\n        this.onBeforeToggle.emit({ originalEvent: event, collapsed: this.collapsed });\n        if (this.toggleable) {\n            if (this.collapsed)\n                this.expand(event);\n            else\n                this.collapse(event);\n        }\n        event.preventDefault();\n    };\n    Panel.prototype.expand = function (event) {\n        this.collapsed = false;\n        this.collapsedChange.emit(this.collapsed);\n    };\n    Panel.prototype.collapse = function (event) {\n        this.collapsed = true;\n        this.collapsedChange.emit(this.collapsed);\n    };\n    Panel.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Panel.prototype.onToggleDone = function (event) {\n        this.animating = false;\n        this.onAfterToggle.emit({ originalEvent: event, collapsed: this.collapsed });\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Panel.prototype, \"toggleable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Panel.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Panel.prototype, \"collapsed\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Panel.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Panel.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Panel.prototype, \"expandIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Panel.prototype, \"collapseIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Panel.prototype, \"showHeader\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Panel.prototype, \"collapsedChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Panel.prototype, \"onBeforeToggle\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Panel.prototype, \"onAfterToggle\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", Object)\n    ], Panel.prototype, \"footerFacet\", void 0);\n    Panel = __decorate([\n        core_1.Component({\n            selector: 'p-panel',\n            template: \"\\n        <div [attr.id]=\\\"id\\\" [ngClass]=\\\"'ui-panel ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-panel-titlebar ui-widget-header ui-helper-clearfix ui-corner-all\\\" *ngIf=\\\"showHeader\\\">\\n                <span class=\\\"ui-panel-title\\\" *ngIf=\\\"header\\\">{{header}}</span>\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n                <a *ngIf=\\\"toggleable\\\" [attr.id]=\\\"id + '-label'\\\" class=\\\"ui-panel-titlebar-icon ui-panel-titlebar-toggler ui-corner-all ui-state-default\\\" href=\\\"#\\\"\\n                    (click)=\\\"toggle($event)\\\" [attr.aria-controls]=\\\"id + '-content'\\\" role=\\\"tab\\\" [attr.aria-expanded]=\\\"!collapsed\\\">\\n                    <span [class]=\\\"collapsed ? 'fa fa-fw ' + expandIcon : 'fa fa-fw ' + collapseIcon\\\"></span>\\n                </a>\\n            </div>\\n            <div [attr.id]=\\\"id + '-content'\\\" class=\\\"ui-panel-content-wrapper\\\" [@panelContent]=\\\"collapsed ? 'hidden' : 'visible'\\\" (@panelContent.done)=\\\"onToggleDone($event)\\\"\\n                [ngClass]=\\\"{'ui-panel-content-wrapper-overflown': collapsed||animating}\\\"\\n                role=\\\"region\\\" [attr.aria-hidden]=\\\"collapsed\\\" [attr.aria-labelledby]=\\\"id + '-label'\\\">\\n                <div class=\\\"ui-panel-content ui-widget-content\\\">\\n                    <ng-content></ng-content>\\n                </div>\\n                \\n                <div class=\\\"ui-panel-footer ui-widget-content\\\" *ngIf=\\\"footerFacet\\\">\\n                    <ng-content select=\\\"p-footer\\\"></ng-content>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelContent', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0',\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*',\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible <=> hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], Panel);\n    return Panel;\n}());\nexports.Panel = Panel;\nvar PanelModule = /** @class */ (function () {\n    function PanelModule() {\n    }\n    PanelModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Panel, shared_1.SharedModule],\n            declarations: [Panel]\n        })\n    ], PanelModule);\n    return PanelModule;\n}());\nexports.PanelModule = PanelModule;\n//# sourceMappingURL=panel.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/panel/panel.js\n// module id = 767\n// module chunks = 0","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n    var extendStatics = Object.setPrototypeOf ||\n        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n        function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar router_1 = require(\"@angular/router\");\nvar BasePanelMenuItem = /** @class */ (function () {\n    function BasePanelMenuItem() {\n    }\n    BasePanelMenuItem.prototype.handleClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        item.expanded = !item.expanded;\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    };\n    return BasePanelMenuItem;\n}());\nexports.BasePanelMenuItem = BasePanelMenuItem;\nvar PanelMenuSub = /** @class */ (function (_super) {\n    __extends(PanelMenuSub, _super);\n    function PanelMenuSub() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PanelMenuSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PanelMenuSub.prototype, \"expanded\", void 0);\n    PanelMenuSub = __decorate([\n        core_1.Component({\n            selector: 'p-panelMenuSub',\n            template: \"\\n        <ul class=\\\"ui-submenu-list\\\" [@submenu]=\\\"expanded ? 'visible' : 'hidden'\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"item.items\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\">\\n                <li *ngIf=\\\"!child.separator\\\" class=\\\"ui-menuitem ui-corner-all\\\" [ngClass]=\\\"child.styleClass\\\" [class.ui-helper-hidden]=\\\"child.visible === false\\\" [ngStyle]=\\\"child.style\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.tabindex]=\\\"item.expanded ? null : '-1'\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" \\n                        (click)=\\\"handleClick($event,child)\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\">\\n                        <span class=\\\"ui-panelmenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!child.expanded,'fa-caret-down':child.expanded}\\\" *ngIf=\\\"child.items\\\"></span\\n                        ><span class=\\\"ui-menuitem-icon fa fa-fw\\\" [ngClass]=\\\"child.icon\\\" *ngIf=\\\"child.icon\\\"></span\\n                        ><span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" \\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" [attr.tabindex]=\\\"item.expanded ? null : '-1'\\\" [attr.id]=\\\"child.id\\\"\\n                        (click)=\\\"handleClick($event,child)\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\">\\n                        <span class=\\\"ui-panelmenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!child.expanded,'fa-caret-down':child.expanded}\\\" *ngIf=\\\"child.items\\\"></span\\n                        ><span class=\\\"ui-menuitem-icon fa fa-fw\\\" [ngClass]=\\\"child.icon\\\" *ngIf=\\\"child.icon\\\"></span\\n                        ><span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                    </a>\\n                    <p-panelMenuSub [item]=\\\"child\\\" [expanded]=\\\"child.expanded\\\" *ngIf=\\\"child.items\\\"></p-panelMenuSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \",\n            animations: [\n                animations_1.trigger('submenu', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0px'\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*'\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        })\n    ], PanelMenuSub);\n    return PanelMenuSub;\n}(BasePanelMenuItem));\nexports.PanelMenuSub = PanelMenuSub;\nvar PanelMenu = /** @class */ (function (_super) {\n    __extends(PanelMenu, _super);\n    function PanelMenu() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.multiple = true;\n        return _this;\n    }\n    PanelMenu.prototype.collapseAll = function () {\n        for (var _i = 0, _a = this.model; _i < _a.length; _i++) {\n            var item = _a[_i];\n            if (item.expanded) {\n                item.expanded = false;\n            }\n        }\n    };\n    PanelMenu.prototype.handleClick = function (event, item) {\n        if (!this.multiple) {\n            for (var _i = 0, _a = this.model; _i < _a.length; _i++) {\n                var modelItem = _a[_i];\n                if (item !== modelItem && modelItem.expanded) {\n                    modelItem.expanded = false;\n                }\n            }\n        }\n        this.animating = true;\n        _super.prototype.handleClick.call(this, event, item);\n    };\n    PanelMenu.prototype.onToggleDone = function () {\n        this.animating = false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], PanelMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PanelMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PanelMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PanelMenu.prototype, \"multiple\", void 0);\n    PanelMenu = __decorate([\n        core_1.Component({\n            selector: 'p-panelMenu',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-panelmenu ui-widget'\\\">\\n            <ng-container *ngFor=\\\"let item of model;let f=first;let l=last;\\\">\\n                <div class=\\\"ui-panelmenu-panel\\\" [ngClass]=\\\"{'ui-helper-hidden': item.visible === false}\\\">\\n                    <div [ngClass]=\\\"{'ui-widget ui-panelmenu-header ui-state-default':true,'ui-corner-top':f,'ui-corner-bottom':l&&!item.expanded,\\n                    'ui-state-active':item.expanded,'ui-state-disabled':item.disabled}\\\" [class]=\\\"item.styleClass\\\" [ngStyle]=\\\"item.style\\\">\\n                        <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" (click)=\\\"handleClick($event,item)\\\"\\n                           [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" class=\\\"ui-panelmenu-header-link\\\">\\n                        <span *ngIf=\\\"item.items\\\" class=\\\"ui-panelmenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!item.expanded,'fa-caret-down':item.expanded}\\\"></span\\n                        ><span class=\\\"ui-menuitem-icon fa fa-fw\\\" [ngClass]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span\\n                        ><span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                        </a>\\n                        <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\"\\n                           (click)=\\\"handleClick($event,item)\\\" [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" class=\\\"ui-panelmenu-header-link\\\">\\n                        <span *ngIf=\\\"item.items\\\" class=\\\"ui-panelmenu-icon fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!item.expanded,'fa-caret-down':item.expanded}\\\"></span\\n                        ><span class=\\\"ui-menuitem-icon fa fa-fw\\\" [ngClass]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span\\n                        ><span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                        </a>\\n                    </div>\\n                    <div *ngIf=\\\"item.items\\\" class=\\\"ui-panelmenu-content-wrapper\\\" [@rootItem]=\\\"item.expanded ? 'visible' : 'hidden'\\\"  (@rootItem.done)=\\\"onToggleDone()\\\"\\n                         [ngClass]=\\\"{'ui-panelmenu-content-wrapper-overflown': !item.expanded||animating}\\\">\\n                        <div class=\\\"ui-panelmenu-content ui-widget-content\\\">\\n                            <p-panelMenuSub [item]=\\\"item\\\" [expanded]=\\\"true\\\" class=\\\"ui-panelmenu-root-submenu\\\"></p-panelMenuSub>\\n                        </div>\\n                    </div>\\n                </div>\\n            </ng-container>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('rootItem', [\n                    animations_1.state('hidden', animations_1.style({\n                        height: '0px'\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        height: '*'\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms cubic-bezier(0.86, 0, 0.07, 1)'))\n                ])\n            ]\n        })\n    ], PanelMenu);\n    return PanelMenu;\n}(BasePanelMenuItem));\nexports.PanelMenu = PanelMenu;\nvar PanelMenuModule = /** @class */ (function () {\n    function PanelMenuModule() {\n    }\n    PanelMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [PanelMenu, router_1.RouterModule],\n            declarations: [PanelMenu, PanelMenuSub]\n        })\n    ], PanelMenuModule);\n    return PanelMenuModule;\n}());\nexports.PanelMenuModule = PanelMenuModule;\n//# sourceMappingURL=panelmenu.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/panelmenu/panelmenu.js\n// module id = 768\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar button_1 = require(\"../button/button\");\nvar shared_1 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar objectutils_1 = require(\"../utils/objectutils\");\nvar PickList = /** @class */ (function () {\n    function PickList(el, domHandler, objectUtils) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.objectUtils = objectUtils;\n        this.trackBy = function (index, item) { return item; };\n        this.showSourceFilter = true;\n        this.showTargetFilter = true;\n        this.metaKeySelection = true;\n        this.showSourceControls = true;\n        this.showTargetControls = true;\n        this.disabled = false;\n        this.onMoveToSource = new core_1.EventEmitter();\n        this.onMoveAllToSource = new core_1.EventEmitter();\n        this.onMoveAllToTarget = new core_1.EventEmitter();\n        this.onMoveToTarget = new core_1.EventEmitter();\n        this.onSourceReorder = new core_1.EventEmitter();\n        this.onTargetReorder = new core_1.EventEmitter();\n        this.onSourceSelect = new core_1.EventEmitter();\n        this.onTargetSelect = new core_1.EventEmitter();\n        this.selectedItemsSource = [];\n        this.selectedItemsTarget = [];\n    }\n    PickList.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'item':\n                    _this.itemTemplate = item.template;\n                    break;\n                default:\n                    _this.itemTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    PickList.prototype.ngAfterViewChecked = function () {\n        if (this.movedUp || this.movedDown) {\n            var listItems = this.domHandler.find(this.reorderedListElement, 'li.ui-state-highlight');\n            var listItem = void 0;\n            if (this.movedUp)\n                listItem = listItems[0];\n            else\n                listItem = listItems[listItems.length - 1];\n            this.domHandler.scrollInView(this.reorderedListElement, listItem);\n            this.movedUp = false;\n            this.movedDown = false;\n            this.reorderedListElement = null;\n        }\n    };\n    PickList.prototype.onItemClick = function (event, item, selectedItems, callback) {\n        if (this.disabled) {\n            return;\n        }\n        var index = this.findIndexInSelection(item, selectedItems);\n        var selected = (index != -1);\n        var metaSelection = this.itemTouched ? false : this.metaKeySelection;\n        if (metaSelection) {\n            var metaKey = (event.metaKey || event.ctrlKey);\n            if (selected && metaKey) {\n                selectedItems.splice(index, 1);\n            }\n            else {\n                if (!metaKey) {\n                    selectedItems.length = 0;\n                }\n                selectedItems.push(item);\n            }\n        }\n        else {\n            if (selected)\n                selectedItems.splice(index, 1);\n            else\n                selectedItems.push(item);\n        }\n        callback.emit({ originalEvent: event, items: selectedItems });\n        this.itemTouched = false;\n    };\n    PickList.prototype.onSourceItemDblClick = function () {\n        if (this.disabled) {\n            return;\n        }\n        this.moveRight();\n    };\n    PickList.prototype.onTargetItemDblClick = function () {\n        if (this.disabled) {\n            return;\n        }\n        this.moveLeft();\n    };\n    PickList.prototype.onFilter = function (event, data, listType) {\n        var query = event.target.value.trim().toLowerCase();\n        if (listType === -1)\n            this.filterValueSource = query;\n        else\n            this.filterValueTarget = query;\n        this.activateFilter(data, listType);\n    };\n    PickList.prototype.activateFilter = function (data, listType) {\n        var searchFields = this.filterBy.split(',');\n        if (listType === -1)\n            this.visibleOptionsSource = this.objectUtils.filter(data, searchFields, this.filterValueSource);\n        else\n            this.visibleOptionsTarget = this.objectUtils.filter(data, searchFields, this.filterValueTarget);\n    };\n    PickList.prototype.isItemVisible = function (item, listType) {\n        if (listType == -1)\n            return this.isVisibleInList(this.visibleOptionsSource, item, this.filterValueSource);\n        else\n            return this.isVisibleInList(this.visibleOptionsTarget, item, this.filterValueTarget);\n    };\n    PickList.prototype.isVisibleInList = function (data, item, filterValue) {\n        if (filterValue && filterValue.trim().length) {\n            for (var i = 0; i < data.length; i++) {\n                if (item == data[i]) {\n                    return true;\n                }\n            }\n        }\n        else {\n            return true;\n        }\n    };\n    PickList.prototype.onItemTouchEnd = function (event) {\n        if (this.disabled) {\n            return;\n        }\n        this.itemTouched = true;\n    };\n    PickList.prototype.sortByIndexInList = function (items, list) {\n        var _this = this;\n        return items.sort(function (item1, item2) {\n            return _this.findIndexInList(item1, list) - _this.findIndexInList(item2, list);\n        });\n    };\n    PickList.prototype.moveUp = function (listElement, list, selectedItems, callback) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for (var i = 0; i < selectedItems.length; i++) {\n                var selectedItem = selectedItems[i];\n                var selectedItemIndex = this.findIndexInList(selectedItem, list);\n                if (selectedItemIndex != 0) {\n                    var movedItem = list[selectedItemIndex];\n                    var temp = list[selectedItemIndex - 1];\n                    list[selectedItemIndex - 1] = movedItem;\n                    list[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n            this.movedUp = true;\n            this.reorderedListElement = listElement;\n            callback.emit({ items: selectedItems });\n        }\n    };\n    PickList.prototype.moveTop = function (listElement, list, selectedItems, callback) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for (var i = 0; i < selectedItems.length; i++) {\n                var selectedItem = selectedItems[i];\n                var selectedItemIndex = this.findIndexInList(selectedItem, list);\n                if (selectedItemIndex != 0) {\n                    var movedItem = list.splice(selectedItemIndex, 1)[0];\n                    list.unshift(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n            listElement.scrollTop = 0;\n            callback.emit({ items: selectedItems });\n        }\n    };\n    PickList.prototype.moveDown = function (listElement, list, selectedItems, callback) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for (var i = selectedItems.length - 1; i >= 0; i--) {\n                var selectedItem = selectedItems[i];\n                var selectedItemIndex = this.findIndexInList(selectedItem, list);\n                if (selectedItemIndex != (list.length - 1)) {\n                    var movedItem = list[selectedItemIndex];\n                    var temp = list[selectedItemIndex + 1];\n                    list[selectedItemIndex + 1] = movedItem;\n                    list[selectedItemIndex] = temp;\n                }\n                else {\n                    break;\n                }\n            }\n            this.movedDown = true;\n            this.reorderedListElement = listElement;\n            callback.emit({ items: selectedItems });\n        }\n    };\n    PickList.prototype.moveBottom = function (listElement, list, selectedItems, callback) {\n        if (selectedItems && selectedItems.length) {\n            selectedItems = this.sortByIndexInList(selectedItems, list);\n            for (var i = selectedItems.length - 1; i >= 0; i--) {\n                var selectedItem = selectedItems[i];\n                var selectedItemIndex = this.findIndexInList(selectedItem, list);\n                if (selectedItemIndex != (list.length - 1)) {\n                    var movedItem = list.splice(selectedItemIndex, 1)[0];\n                    list.push(movedItem);\n                }\n                else {\n                    break;\n                }\n            }\n            listElement.scrollTop = listElement.scrollHeight;\n            callback.emit({ items: selectedItems });\n        }\n    };\n    PickList.prototype.moveRight = function () {\n        if (this.selectedItemsSource && this.selectedItemsSource.length) {\n            for (var i = 0; i < this.selectedItemsSource.length; i++) {\n                var selectedItem = this.selectedItemsSource[i];\n                if (this.findIndexInList(selectedItem, this.target) == -1) {\n                    this.target.push(this.source.splice(this.findIndexInList(selectedItem, this.source), 1)[0]);\n                }\n            }\n            this.onMoveToTarget.emit({\n                items: this.selectedItemsSource\n            });\n            this.selectedItemsSource = [];\n        }\n    };\n    PickList.prototype.moveAllRight = function () {\n        if (this.source) {\n            var movedItems = [];\n            for (var i = 0; i < this.source.length; i++) {\n                if (this.isItemVisible(this.source[i], -1)) {\n                    var removedItem = this.source.splice(i, 1)[0];\n                    this.target.push(removedItem);\n                    movedItems.push(removedItem);\n                    i--;\n                }\n            }\n            this.onMoveToTarget.emit({\n                items: movedItems\n            });\n            this.onMoveAllToTarget.emit({\n                items: movedItems\n            });\n            this.selectedItemsSource = [];\n        }\n    };\n    PickList.prototype.moveLeft = function () {\n        if (this.selectedItemsTarget && this.selectedItemsTarget.length) {\n            for (var i = 0; i < this.selectedItemsTarget.length; i++) {\n                var selectedItem = this.selectedItemsTarget[i];\n                if (this.findIndexInList(selectedItem, this.source) == -1) {\n                    this.source.push(this.target.splice(this.findIndexInList(selectedItem, this.target), 1)[0]);\n                }\n            }\n            this.onMoveToSource.emit({\n                items: this.selectedItemsTarget\n            });\n            this.selectedItemsTarget = [];\n        }\n    };\n    PickList.prototype.moveAllLeft = function () {\n        if (this.target) {\n            var movedItems = [];\n            for (var i = 0; i < this.target.length; i++) {\n                if (this.isItemVisible(this.target[i], 1)) {\n                    var removedItem = this.target.splice(i, 1)[0];\n                    this.source.push(removedItem);\n                    movedItems.push(removedItem);\n                    i--;\n                }\n            }\n            this.onMoveToSource.emit({\n                items: movedItems\n            });\n            this.onMoveAllToSource.emit({\n                items: movedItems\n            });\n            this.selectedItemsTarget = [];\n        }\n    };\n    PickList.prototype.isSelected = function (item, selectedItems) {\n        return this.findIndexInSelection(item, selectedItems) != -1;\n    };\n    PickList.prototype.findIndexInSelection = function (item, selectedItems) {\n        return this.findIndexInList(item, selectedItems);\n    };\n    PickList.prototype.findIndexInList = function (item, list) {\n        var index = -1;\n        if (list) {\n            for (var i = 0; i < list.length; i++) {\n                if (list[i] == item) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    PickList.prototype.onDragStart = function (event, index, listType) {\n        this.dragging = true;\n        this.fromListType = listType;\n        if (listType === -1)\n            this.draggedItemIndexSource = index;\n        else\n            this.draggedItemIndexTarget = index;\n        if (this.dragdropScope) {\n            event.dataTransfer.setData(\"text\", this.dragdropScope);\n        }\n    };\n    PickList.prototype.onDragOver = function (event, index, listType) {\n        if (listType == -1) {\n            if (this.draggedItemIndexSource !== index && this.draggedItemIndexSource + 1 !== index || (this.fromListType === 1)) {\n                this.dragOverItemIndexSource = index;\n                event.preventDefault();\n            }\n        }\n        else {\n            if (this.draggedItemIndexTarget !== index && this.draggedItemIndexTarget + 1 !== index || (this.fromListType === -1)) {\n                this.dragOverItemIndexTarget = index;\n                event.preventDefault();\n            }\n        }\n        this.onListItemDroppoint = true;\n    };\n    PickList.prototype.onDragLeave = function (event, listType) {\n        this.dragOverItemIndexSource = null;\n        this.dragOverItemIndexTarget = null;\n        this.onListItemDroppoint = false;\n    };\n    PickList.prototype.onDrop = function (event, index, listType) {\n        if (this.onListItemDroppoint) {\n            if (listType === -1) {\n                if (this.fromListType === 1)\n                    this.insert(this.draggedItemIndexTarget, this.target, index, this.source, this.onMoveToSource);\n                else\n                    this.objectUtils.reorderArray(this.source, this.draggedItemIndexSource, (this.draggedItemIndexSource > index) ? index : (index === 0) ? 0 : index - 1);\n                this.dragOverItemIndexSource = null;\n            }\n            else {\n                if (this.fromListType === -1)\n                    this.insert(this.draggedItemIndexSource, this.source, index, this.target, this.onMoveToTarget);\n                else\n                    this.objectUtils.reorderArray(this.target, this.draggedItemIndexTarget, (this.draggedItemIndexTarget > index) ? index : (index === 0) ? 0 : index - 1);\n                this.dragOverItemIndexTarget = null;\n            }\n            this.listHighlightTarget = false;\n            this.listHighlightSource = false;\n            event.preventDefault();\n        }\n    };\n    PickList.prototype.onDragEnd = function (event) {\n        this.dragging = false;\n    };\n    PickList.prototype.onListDrop = function (event, listType) {\n        if (!this.onListItemDroppoint) {\n            if (listType === -1) {\n                if (this.fromListType === 1)\n                    this.insert(this.draggedItemIndexTarget, this.target, null, this.source, this.onMoveToSource);\n            }\n            else {\n                if (this.fromListType === -1)\n                    this.insert(this.draggedItemIndexSource, this.source, null, this.target, this.onMoveToTarget);\n            }\n            this.listHighlightTarget = false;\n            this.listHighlightSource = false;\n            event.preventDefault();\n        }\n    };\n    PickList.prototype.insert = function (fromIndex, fromList, toIndex, toList, callback) {\n        var elementtomove = fromList[fromIndex];\n        if (toIndex === null)\n            toList.push(fromList.splice(fromIndex, 1)[0]);\n        else\n            toList.splice(toIndex, 0, fromList.splice(fromIndex, 1)[0]);\n        callback.emit({\n            items: [elementtomove]\n        });\n    };\n    PickList.prototype.onListMouseMove = function (event, listType) {\n        if (this.dragging) {\n            var moveListType = (listType == 0 ? this.listViewSourceChild : this.listViewTargetChild);\n            var offsetY = moveListType.nativeElement.getBoundingClientRect().top + document.body.scrollTop;\n            var bottomDiff = (offsetY + moveListType.nativeElement.clientHeight) - event.pageY;\n            var topDiff = (event.pageY - offsetY);\n            if (bottomDiff < 25 && bottomDiff > 0)\n                moveListType.nativeElement.scrollTop += 15;\n            else if (topDiff < 25 && topDiff > 0)\n                moveListType.nativeElement.scrollTop -= 15;\n        }\n        if (listType === -1) {\n            if (this.fromListType === 1)\n                this.listHighlightSource = true;\n        }\n        else {\n            if (this.fromListType === -1)\n                this.listHighlightTarget = true;\n        }\n        event.preventDefault();\n    };\n    PickList.prototype.onListDragLeave = function () {\n        this.listHighlightTarget = false;\n        this.listHighlightSource = false;\n    };\n    PickList.prototype.resetFilter = function () {\n        this.visibleOptionsSource = null;\n        this.filterValueSource = null;\n        this.visibleOptionsTarget = null;\n        this.filterValueTarget = null;\n        this.sourceFilterViewChild.nativeElement.value = '';\n        this.targetFilterViewChild.nativeElement.value = '';\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], PickList.prototype, \"source\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], PickList.prototype, \"target\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"sourceHeader\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"targetHeader\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"responsive\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"filterBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], PickList.prototype, \"trackBy\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"showSourceFilter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"showTargetFilter\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"dragdrop\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"dragdropScope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PickList.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PickList.prototype, \"sourceStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], PickList.prototype, \"targetStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"showSourceControls\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"showTargetControls\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"sourceFilterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], PickList.prototype, \"targetFilterPlaceholder\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], PickList.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onMoveToSource\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onMoveAllToSource\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onMoveAllToTarget\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onMoveToTarget\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onSourceReorder\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onTargetReorder\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onSourceSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], PickList.prototype, \"onTargetSelect\", void 0);\n    __decorate([\n        core_1.ViewChild('sourcelist'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], PickList.prototype, \"listViewSourceChild\", void 0);\n    __decorate([\n        core_1.ViewChild('targetlist'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], PickList.prototype, \"listViewTargetChild\", void 0);\n    __decorate([\n        core_1.ViewChild('sourceFilter'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], PickList.prototype, \"sourceFilterViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('targetFilter'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], PickList.prototype, \"targetFilterViewChild\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], PickList.prototype, \"templates\", void 0);\n    PickList = __decorate([\n        core_1.Component({\n            selector: 'p-pickList',\n            template: \"\\n        <div [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"{'ui-picklist ui-widget ui-helper-clearfix': true,'ui-picklist-responsive': responsive}\\\">\\n            <div class=\\\"ui-picklist-source-controls ui-picklist-buttons\\\" *ngIf=\\\"showSourceControls\\\">\\n                <div class=\\\"ui-picklist-buttons-cell\\\">\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-up\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveUp(sourcelist,source,selectedItemsSource,onSourceReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-up\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveTop(sourcelist,source,selectedItemsSource,onSourceReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-down\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveDown(sourcelist,source,selectedItemsSource,onSourceReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-down\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveBottom(sourcelist,source,selectedItemsSource,onSourceReorder)\\\"></button>\\n                </div>\\n            </div>\\n            <div class=\\\"ui-picklist-listwrapper ui-picklist-source-wrapper\\\" [ngClass]=\\\"{'ui-picklist-listwrapper-nocontrols':!showSourceControls}\\\">\\n                <div class=\\\"ui-picklist-caption ui-widget-header ui-corner-tl ui-corner-tr\\\" *ngIf=\\\"sourceHeader\\\">{{sourceHeader}}</div>\\n                <div class=\\\"ui-picklist-filter-container ui-widget-content\\\" *ngIf=\\\"filterBy && showSourceFilter !== false\\\">\\n                    <input #sourceFilter type=\\\"text\\\" role=\\\"textbox\\\" (keyup)=\\\"onFilter($event,source,-1)\\\" class=\\\"ui-picklist-filter ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [disabled]=\\\"disabled\\\" [attr.placeholder]=\\\"sourceFilterPlaceholder\\\">\\n                    <span class=\\\"ui-picklist-filter-icon fa fa-search\\\"></span>\\n                </div>\\n                <ul #sourcelist class=\\\"ui-widget-content ui-picklist-list ui-picklist-source ui-corner-bottom\\\" [ngClass]=\\\"{'ui-picklist-highlight': listHighlightSource}\\\" [ngStyle]=\\\"sourceStyle\\\" (dragover)=\\\"onListMouseMove($event,-1)\\\" (dragleave)=\\\"onListDragLeave()\\\" (drop)=\\\"onListDrop($event, -1)\\\">\\n                    <ng-template ngFor let-item [ngForOf]=\\\"source\\\" [ngForTrackBy]=\\\"trackBy\\\" let-i=\\\"index\\\" let-l=\\\"last\\\">\\n                        <li class=\\\"ui-picklist-droppoint\\\" *ngIf=\\\"dragdrop\\\" (dragover)=\\\"onDragOver($event, i, -1)\\\" (drop)=\\\"onDrop($event, i, -1)\\\" (dragleave)=\\\"onDragLeave($event, -1)\\\" \\n                        [ngClass]=\\\"{'ui-picklist-droppoint-highlight': (i === dragOverItemIndexSource)}\\\" [style.display]=\\\"isItemVisible(item, -1) ? 'block' : 'none'\\\"></li>\\n                        <li [ngClass]=\\\"{'ui-picklist-item':true,'ui-state-highlight':isSelected(item,selectedItemsSource), 'ui-state-disabled': disabled}\\\"\\n                            (click)=\\\"onItemClick($event,item,selectedItemsSource,onSourceSelect)\\\" (dblclick)=\\\"onSourceItemDblClick()\\\" (touchend)=\\\"onItemTouchEnd($event)\\\"\\n                            [style.display]=\\\"isItemVisible(item, -1) ? 'block' : 'none'\\\"\\n                            [draggable]=\\\"dragdrop\\\" (dragstart)=\\\"onDragStart($event, i, -1)\\\" (dragend)=\\\"onDragEnd($event)\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: i}\\\"></ng-container>\\n                        </li>\\n                        <li class=\\\"ui-picklist-droppoint\\\" *ngIf=\\\"dragdrop&&l\\\" (dragover)=\\\"onDragOver($event, i + 1, -1)\\\" (drop)=\\\"onDrop($event, i + 1, -1)\\\" (dragleave)=\\\"onDragLeave($event, -1)\\\" \\n                        [ngClass]=\\\"{'ui-picklist-droppoint-highlight': (i + 1 === dragOverItemIndexSource)}\\\"></li>\\n                    </ng-template>\\n                </ul>\\n            </div>\\n            <div class=\\\"ui-picklist-buttons\\\">\\n                <div class=\\\"ui-picklist-buttons-cell\\\">\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-right\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveRight()\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-right\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveAllRight()\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-left\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveLeft()\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-left\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveAllLeft()\\\"></button>\\n                </div>\\n            </div>\\n            <div class=\\\"ui-picklist-listwrapper ui-picklist-target-wrapper\\\" [ngClass]=\\\"{'ui-picklist-listwrapper-nocontrols':!showTargetControls}\\\">\\n                <div class=\\\"ui-picklist-caption ui-widget-header ui-corner-tl ui-corner-tr\\\" *ngIf=\\\"targetHeader\\\">{{targetHeader}}</div>\\n                <div class=\\\"ui-picklist-filter-container ui-widget-content\\\" *ngIf=\\\"filterBy && showTargetFilter !== false\\\">\\n                    <input #targetFilter type=\\\"text\\\" role=\\\"textbox\\\" (keyup)=\\\"onFilter($event,target,1)\\\" class=\\\"ui-picklist-filter ui-inputtext ui-widget ui-state-default ui-corner-all\\\" [disabled]=\\\"disabled\\\" [attr.placeholder]=\\\"targetFilterPlaceholder\\\">\\n                    <span class=\\\"ui-picklist-filter-icon fa fa-search\\\"></span>\\n                </div>\\n                <ul #targetlist class=\\\"ui-widget-content ui-picklist-list ui-picklist-target ui-corner-bottom\\\" [ngClass]=\\\"{'ui-picklist-highlight': listHighlightTarget}\\\" [ngStyle]=\\\"targetStyle\\\" (dragover)=\\\"onListMouseMove($event,1)\\\" (dragleave)=\\\"onListDragLeave()\\\" (drop)=\\\"onListDrop($event,1)\\\">\\n                    <ng-template ngFor let-item [ngForOf]=\\\"target\\\" [ngForTrackBy]=\\\"trackBy\\\" let-i=\\\"index\\\" let-l=\\\"last\\\">\\n                        <li class=\\\"ui-picklist-droppoint\\\" *ngIf=\\\"dragdrop\\\" (dragover)=\\\"onDragOver($event, i, 1)\\\" (drop)=\\\"onDrop($event, i, 1)\\\" (dragleave)=\\\"onDragLeave($event, 1)\\\" \\n                        [ngClass]=\\\"{'ui-picklist-droppoint-highlight': (i === dragOverItemIndexTarget)}\\\" [style.display]=\\\"isItemVisible(item, 1) ? 'block' : 'none'\\\"></li>\\n                        <li [ngClass]=\\\"{'ui-picklist-item':true,'ui-state-highlight':isSelected(item,selectedItemsTarget), 'ui-state-disabled': disabled}\\\"\\n                            (click)=\\\"onItemClick($event,item,selectedItemsTarget,onTargetSelect)\\\" (dblclick)=\\\"onTargetItemDblClick()\\\" (touchend)=\\\"onItemTouchEnd($event)\\\"\\n                            [style.display]=\\\"isItemVisible(item, 1) ? 'block' : 'none'\\\"\\n                            [draggable]=\\\"dragdrop\\\" (dragstart)=\\\"onDragStart($event, i, 1)\\\" (dragend)=\\\"onDragEnd($event)\\\">\\n                            <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: item, index: i}\\\"></ng-container>\\n                        </li>\\n                        <li class=\\\"ui-picklist-droppoint\\\" *ngIf=\\\"dragdrop&&l\\\" (dragover)=\\\"onDragOver($event, i + 1, 1)\\\" (drop)=\\\"onDrop($event, i + 1, 1)\\\" (dragleave)=\\\"onDragLeave($event, 1)\\\" \\n                        [ngClass]=\\\"{'ui-picklist-droppoint-highlight': (i + 1 === dragOverItemIndexTarget)}\\\"></li>\\n                    </ng-template>\\n                </ul>\\n            </div>\\n            <div class=\\\"ui-picklist-target-controls ui-picklist-buttons\\\" *ngIf=\\\"showTargetControls\\\">\\n                <div class=\\\"ui-picklist-buttons-cell\\\">\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-up\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveUp(targetlist,target,selectedItemsTarget,onTargetReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-up\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveTop(targetlist,target,selectedItemsTarget,onTargetReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-down\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveDown(targetlist,target,selectedItemsTarget,onTargetReorder)\\\"></button>\\n                    <button type=\\\"button\\\" pButton icon=\\\"fa-angle-double-down\\\" [disabled]=\\\"disabled\\\" (click)=\\\"moveBottom(targetlist,target,selectedItemsTarget,onTargetReorder)\\\"></button>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler, objectutils_1.ObjectUtils]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, objectutils_1.ObjectUtils])\n    ], PickList);\n    return PickList;\n}());\nexports.PickList = PickList;\nvar PickListModule = /** @class */ (function () {\n    function PickListModule() {\n    }\n    PickListModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule, shared_1.SharedModule],\n            exports: [PickList, shared_1.SharedModule],\n            declarations: [PickList]\n        })\n    ], PickListModule);\n    return PickListModule;\n}());\nexports.PickListModule = PickListModule;\n//# sourceMappingURL=picklist.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/picklist/picklist.js\n// module id = 769\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar ProgressSpinner = /** @class */ (function () {\n    function ProgressSpinner() {\n        this.strokeWidth = \"2\";\n        this.fill = \"none\";\n        this.animationDuration = \"2s\";\n    }\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ProgressSpinner.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressSpinner.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressSpinner.prototype, \"strokeWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressSpinner.prototype, \"fill\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ProgressSpinner.prototype, \"animationDuration\", void 0);\n    ProgressSpinner = __decorate([\n        core_1.Component({\n            selector: 'p-progressSpinner',\n            template: \"\\n        <div class=\\\"ui-progress-spinner\\\" [ngStyle]=\\\"style\\\" [ngClass]=\\\"styleClass\\\">\\n            <svg class=\\\"ui-progress-spinner-svg\\\" viewBox=\\\"25 25 50 50\\\" [style.animation-duration]=\\\"animationDuration\\\">\\n                <circle class=\\\"ui-progress-spinner-circle\\\" cx=\\\"50\\\" cy=\\\"50\\\" r=\\\"20\\\" [attr.fill]=\\\"fill\\\" [attr.stroke-width]=\\\"strokeWidth\\\" stroke-miterlimit=\\\"10\\\"/>\\n            </svg>\\n        </div>\\n    \"\n        })\n    ], ProgressSpinner);\n    return ProgressSpinner;\n}());\nexports.ProgressSpinner = ProgressSpinner;\nvar ProgressSpinnerModule = /** @class */ (function () {\n    function ProgressSpinnerModule() {\n    }\n    ProgressSpinnerModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ProgressSpinner],\n            declarations: [ProgressSpinner]\n        })\n    ], ProgressSpinnerModule);\n    return ProgressSpinnerModule;\n}());\nexports.ProgressSpinnerModule = ProgressSpinnerModule;\n//# sourceMappingURL=progressspinner.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/progressspinner/progressspinner.js\n// module id = 770\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar forms_1 = require(\"@angular/forms\");\nexports.RADIO_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return RadioButton; }),\n    multi: true\n};\nvar RadioButton = /** @class */ (function () {\n    function RadioButton(cd) {\n        this.cd = cd;\n        this.onClick = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    RadioButton.prototype.handleClick = function (event, radioButton, focus) {\n        event.preventDefault();\n        if (this.disabled) {\n            return;\n        }\n        this.select();\n        if (focus) {\n            radioButton.focus();\n        }\n    };\n    RadioButton.prototype.select = function () {\n        if (!this.disabled) {\n            this.onClick.emit(null);\n            this.inputViewChild.nativeElement.checked = true;\n            this.checked = true;\n            this.onModelChange(this.value);\n        }\n    };\n    RadioButton.prototype.writeValue = function (value) {\n        this.checked = (value == this.value);\n        if (this.inputViewChild.nativeElement) {\n            this.inputViewChild.nativeElement.checked = this.checked;\n        }\n        this.cd.markForCheck();\n    };\n    RadioButton.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    RadioButton.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    RadioButton.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    RadioButton.prototype.onFocus = function (event) {\n        this.focused = true;\n    };\n    RadioButton.prototype.onBlur = function (event) {\n        this.focused = false;\n        this.onModelTouched();\n    };\n    RadioButton.prototype.onChange = function (event) {\n        this.select();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], RadioButton.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], RadioButton.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], RadioButton.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], RadioButton.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], RadioButton.prototype, \"labelStyleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], RadioButton.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.ViewChild('rb'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], RadioButton.prototype, \"inputViewChild\", void 0);\n    RadioButton = __decorate([\n        core_1.Component({\n            selector: 'p-radioButton',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-radiobutton ui-widget'\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #rb type=\\\"radio\\\" [attr.id]=\\\"inputId\\\" [attr.name]=\\\"name\\\" [attr.value]=\\\"value\\\" [attr.tabindex]=\\\"tabindex\\\" \\n                    [checked]=\\\"checked\\\" (change)=\\\"onChange($event)\\\" (focus)=\\\"onFocus($event)\\\" (blur)=\\\"onBlur($event)\\\" [disabled]=\\\"disabled\\\">\\n            </div>\\n            <div (click)=\\\"handleClick($event, rb, true)\\\"\\n                [ngClass]=\\\"{'ui-radiobutton-box ui-widget ui-state-default':true,\\n                'ui-state-active':rb.checked,'ui-state-disabled':disabled,'ui-state-focus':focused}\\\">\\n                <span class=\\\"ui-radiobutton-icon ui-clickable\\\" [ngClass]=\\\"{'fa fa-circle':rb.checked}\\\"></span>\\n            </div>\\n        </div>\\n        <label (click)=\\\"select()\\\" [class]=\\\"labelStyleClass\\\"\\n            [ngClass]=\\\"{'ui-radiobutton-label':true, 'ui-label-active':rb.checked, 'ui-label-disabled':disabled, 'ui-label-focus':focused}\\\"\\n            *ngIf=\\\"label\\\" [attr.for]=\\\"inputId\\\">{{label}}</label>\\n    \",\n            providers: [exports.RADIO_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ChangeDetectorRef])\n    ], RadioButton);\n    return RadioButton;\n}());\nexports.RadioButton = RadioButton;\nvar RadioButtonModule = /** @class */ (function () {\n    function RadioButtonModule() {\n    }\n    RadioButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [RadioButton],\n            declarations: [RadioButton]\n        })\n    ], RadioButtonModule);\n    return RadioButtonModule;\n}());\nexports.RadioButtonModule = RadioButtonModule;\n//# sourceMappingURL=radiobutton.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/radiobutton/radiobutton.js\n// module id = 771\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar forms_1 = require(\"@angular/forms\");\nexports.RATING_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Rating; }),\n    multi: true\n};\nvar Rating = /** @class */ (function () {\n    function Rating(cd) {\n        this.cd = cd;\n        this.stars = 5;\n        this.cancel = true;\n        this.iconOnClass = 'fa-star';\n        this.iconOffClass = 'fa-star-o';\n        this.iconCancelClass = 'fa-ban';\n        this.onRate = new core_1.EventEmitter();\n        this.onCancel = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Rating.prototype.ngOnInit = function () {\n        this.starsArray = [];\n        for (var i = 0; i < this.stars; i++) {\n            this.starsArray[i] = i;\n        }\n    };\n    Rating.prototype.rate = function (event, i) {\n        if (!this.readonly && !this.disabled) {\n            this.value = (i + 1);\n            this.onModelChange(this.value);\n            this.onModelTouched();\n            this.onRate.emit({\n                originalEvent: event,\n                value: (i + 1)\n            });\n        }\n        event.preventDefault();\n    };\n    Rating.prototype.clear = function (event) {\n        if (!this.readonly && !this.disabled) {\n            this.value = null;\n            this.onModelChange(this.value);\n            this.onModelTouched();\n            this.onCancel.emit(event);\n        }\n        event.preventDefault();\n    };\n    Rating.prototype.writeValue = function (value) {\n        this.value = value;\n        this.cd.detectChanges();\n    };\n    Rating.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Rating.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Rating.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Rating.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Rating.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Rating.prototype, \"stars\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Rating.prototype, \"cancel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Rating.prototype, \"iconOnClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Rating.prototype, \"iconOnStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Rating.prototype, \"iconOffClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Rating.prototype, \"iconOffStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Rating.prototype, \"iconCancelClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Rating.prototype, \"iconCancelStyle\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Rating.prototype, \"onRate\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Rating.prototype, \"onCancel\", void 0);\n    Rating = __decorate([\n        core_1.Component({\n            selector: 'p-rating',\n            template: \"\\n        <div class=\\\"ui-rating\\\" [ngClass]=\\\"{'ui-state-disabled': disabled}\\\">\\n            <a href=\\\"#\\\" *ngIf=\\\"cancel\\\" (click)=\\\"clear($event)\\\" class=\\\"ui-rating-cancel\\\">\\n                <span class=\\\"ui-rating-icon fa\\\" [ngClass]=\\\"iconCancelClass\\\" [ngStyle]=\\\"iconCancelStyle\\\"></span>\\n            </a>\\n            <a href=\\\"#\\\" *ngFor=\\\"let star of starsArray;let i=index\\\" (click)=\\\"rate($event,i)\\\">\\n                <span class=\\\"ui-rating-icon fa\\\" \\n                    [ngClass]=\\\"(!value || i >= value) ? iconOffClass : iconOnClass\\\"\\n                    [ngStyle]=\\\"(!value || i >= value) ? iconOffStyle : iconOnStyle\\\"\\n                ></span>\\n            </a>\\n        </div>\\n    \",\n            providers: [exports.RATING_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ChangeDetectorRef])\n    ], Rating);\n    return Rating;\n}());\nexports.Rating = Rating;\nvar RatingModule = /** @class */ (function () {\n    function RatingModule() {\n    }\n    RatingModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Rating],\n            declarations: [Rating]\n        })\n    ], RatingModule);\n    return RatingModule;\n}());\nexports.RatingModule = RatingModule;\n//# sourceMappingURL=rating.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/rating/rating.js\n// module id = 772\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar Schedule = /** @class */ (function () {\n    function Schedule(el, differs) {\n        this.el = el;\n        this.aspectRatio = 1.35;\n        this.defaultView = 'month';\n        this.allDaySlot = true;\n        this.allDayText = 'all-day';\n        this.slotDuration = '00:30:00';\n        this.scrollTime = '06:00:00';\n        this.minTime = '00:00:00';\n        this.maxTime = '24:00:00';\n        this.slotEventOverlap = true;\n        this.dragRevertDuration = 500;\n        this.dragOpacity = .75;\n        this.dragScroll = true;\n        this.timezone = false;\n        this.timeFormat = null;\n        this.onDayClick = new core_1.EventEmitter();\n        this.onDrop = new core_1.EventEmitter();\n        this.onEventClick = new core_1.EventEmitter();\n        this.onEventMouseover = new core_1.EventEmitter();\n        this.onEventMouseout = new core_1.EventEmitter();\n        this.onEventDragStart = new core_1.EventEmitter();\n        this.onEventDragStop = new core_1.EventEmitter();\n        this.onEventDrop = new core_1.EventEmitter();\n        this.onEventResizeStart = new core_1.EventEmitter();\n        this.onEventResizeStop = new core_1.EventEmitter();\n        this.onEventResize = new core_1.EventEmitter();\n        this.onViewRender = new core_1.EventEmitter();\n        this.onViewDestroy = new core_1.EventEmitter();\n        this.onNavLinkDayClick = new core_1.EventEmitter();\n        this.onNavLinkWeekClick = new core_1.EventEmitter();\n        this.differ = differs.find([]).create(null);\n        this.initialized = false;\n    }\n    Schedule.prototype.ngOnInit = function () {\n        var _this = this;\n        this.config = {\n            theme: true,\n            header: this.header,\n            isRTL: this.rtl,\n            weekends: this.weekends,\n            hiddenDays: this.hiddenDays,\n            fixedWeekCount: this.fixedWeekCount,\n            weekNumbers: this.weekNumbers,\n            businessHours: this.businessHours,\n            height: this.height,\n            contentHeight: this.contentHeight,\n            aspectRatio: this.aspectRatio,\n            eventLimit: this.eventLimit,\n            defaultDate: this.defaultDate,\n            locale: this.locale,\n            timezone: this.timezone,\n            timeFormat: this.timeFormat,\n            editable: this.editable,\n            droppable: this.droppable,\n            eventStartEditable: this.eventStartEditable,\n            eventDurationEditable: this.eventDurationEditable,\n            defaultView: this.defaultView,\n            allDaySlot: this.allDaySlot,\n            allDayText: this.allDayText,\n            slotDuration: this.slotDuration,\n            slotLabelInterval: this.slotLabelInterval,\n            snapDuration: this.snapDuration,\n            scrollTime: this.scrollTime,\n            minTime: this.minTime,\n            maxTime: this.maxTime,\n            slotEventOverlap: this.slotEventOverlap,\n            nowIndicator: this.nowIndicator,\n            dragRevertDuration: this.dragRevertDuration,\n            dragOpacity: this.dragOpacity,\n            dragScroll: this.dragScroll,\n            eventOverlap: this.eventOverlap,\n            eventConstraint: this.eventConstraint,\n            eventRender: this.eventRender,\n            dayRender: this.dayRender,\n            navLinks: this.navLinks,\n            dayClick: function (date, jsEvent, view) {\n                _this.onDayClick.emit({\n                    'date': date,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            drop: function (date, jsEvent, ui, resourceId) {\n                _this.onDrop.emit({\n                    'date': date,\n                    'jsEvent': jsEvent,\n                    'ui': ui,\n                    'resourceId': resourceId\n                });\n            },\n            eventClick: function (calEvent, jsEvent, view) {\n                _this.onEventClick.emit({\n                    'calEvent': calEvent,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventMouseover: function (calEvent, jsEvent, view) {\n                _this.onEventMouseover.emit({\n                    'calEvent': calEvent,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventMouseout: function (calEvent, jsEvent, view) {\n                _this.onEventMouseout.emit({\n                    'calEvent': calEvent,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventDragStart: function (event, jsEvent, ui, view) {\n                _this.onEventDragStart.emit({\n                    'event': event,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventDragStop: function (event, jsEvent, ui, view) {\n                _this.onEventDragStop.emit({\n                    'event': event,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventDrop: function (event, delta, revertFunc, jsEvent, ui, view) {\n                _this._updateEvent(event);\n                _this.onEventDrop.emit({\n                    'event': event,\n                    'delta': delta,\n                    'revertFunc': revertFunc,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventResizeStart: function (event, jsEvent, ui, view) {\n                _this.onEventResizeStart.emit({\n                    'event': event,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventResizeStop: function (event, jsEvent, ui, view) {\n                _this.onEventResizeStop.emit({\n                    'event': event,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            eventResize: function (event, delta, revertFunc, jsEvent, ui, view) {\n                _this._updateEvent(event);\n                _this.onEventResize.emit({\n                    'event': event,\n                    'delta': delta,\n                    'revertFunc': revertFunc,\n                    'jsEvent': jsEvent,\n                    'view': view\n                });\n            },\n            viewRender: function (view, element) {\n                _this.onViewRender.emit({\n                    'view': view,\n                    'element': element\n                });\n            },\n            viewDestroy: function (view, element) {\n                _this.onViewDestroy.emit({\n                    'view': view,\n                    'element': element\n                });\n            },\n            navLinkDayClick: function (weekStart, jsEvent) {\n                _this.onNavLinkDayClick.emit({\n                    'weekStart': weekStart,\n                    'event': jsEvent\n                });\n            },\n            navLinkWeekClick: function (weekStart, jsEvent) {\n                _this.onNavLinkWeekClick.emit({\n                    'weekStart': weekStart,\n                    'event': jsEvent\n                });\n            }\n        };\n        if (this.options) {\n            for (var prop in this.options) {\n                this.config[prop] = this.options[prop];\n            }\n        }\n    };\n    Schedule.prototype.ngAfterViewChecked = function () {\n        if (!this.initialized && this.el.nativeElement.offsetParent) {\n            this.initialize();\n        }\n    };\n    Schedule.prototype.ngOnChanges = function (changes) {\n        if (this.schedule) {\n            var options = {};\n            for (var change in changes) {\n                if (change !== 'events') {\n                    options[change] = changes[change].currentValue;\n                }\n            }\n            if (Object.keys(options).length) {\n                this.schedule.fullCalendar('option', options);\n            }\n        }\n    };\n    Schedule.prototype.initialize = function () {\n        this.schedule = jQuery(this.el.nativeElement.children[0]);\n        this.schedule.fullCalendar(this.config);\n        if (this.events) {\n            this.schedule.fullCalendar('addEventSource', this.events);\n        }\n        this.initialized = true;\n    };\n    Schedule.prototype.ngDoCheck = function () {\n        var changes = this.differ.diff(this.events);\n        if (this.schedule && changes) {\n            this.schedule.fullCalendar('removeEventSources');\n            if (this.events) {\n                this.schedule.fullCalendar('addEventSource', this.events);\n            }\n        }\n    };\n    Schedule.prototype.ngOnDestroy = function () {\n        jQuery(this.el.nativeElement.children[0]).fullCalendar('destroy');\n        this.initialized = false;\n        this.schedule = null;\n    };\n    Schedule.prototype.gotoDate = function (date) {\n        this.schedule.fullCalendar('gotoDate', date);\n    };\n    Schedule.prototype.prev = function () {\n        this.schedule.fullCalendar('prev');\n    };\n    Schedule.prototype.next = function () {\n        this.schedule.fullCalendar('next');\n    };\n    Schedule.prototype.prevYear = function () {\n        this.schedule.fullCalendar('prevYear');\n    };\n    Schedule.prototype.nextYear = function () {\n        this.schedule.fullCalendar('nextYear');\n    };\n    Schedule.prototype.today = function () {\n        this.schedule.fullCalendar('today');\n    };\n    Schedule.prototype.incrementDate = function (duration) {\n        this.schedule.fullCalendar('incrementDate', duration);\n    };\n    Schedule.prototype.changeView = function (viewName) {\n        this.schedule.fullCalendar('changeView', viewName);\n    };\n    Schedule.prototype.getDate = function () {\n        return this.schedule.fullCalendar('getDate');\n    };\n    Schedule.prototype.updateEvent = function (event) {\n        this.schedule.fullCalendar('updateEvent', event);\n    };\n    Schedule.prototype._findEvent = function (id) {\n        var event;\n        if (this.events) {\n            for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\n                var e = _a[_i];\n                if (e.id === id) {\n                    event = e;\n                    break;\n                }\n            }\n        }\n        return event;\n    };\n    Schedule.prototype._updateEvent = function (event) {\n        var sourceEvent = this._findEvent(event.id);\n        if (sourceEvent) {\n            sourceEvent.start = event.start.format();\n            if (event.end) {\n                sourceEvent.end = event.end.format();\n            }\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Schedule.prototype, \"events\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"rtl\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"weekends\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Schedule.prototype, \"hiddenDays\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"fixedWeekCount\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"weekNumbers\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"businessHours\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"height\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"contentHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Schedule.prototype, \"aspectRatio\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"eventLimit\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"defaultDate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"editable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"droppable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"eventStartEditable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"eventDurationEditable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"defaultView\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"allDaySlot\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"allDayText\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"slotDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"slotLabelInterval\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"snapDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"scrollTime\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"minTime\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"maxTime\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"slotEventOverlap\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"nowIndicator\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Schedule.prototype, \"dragRevertDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Schedule.prototype, \"dragOpacity\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"dragScroll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"eventOverlap\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"eventConstraint\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"locale\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"timezone\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Schedule.prototype, \"timeFormat\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], Schedule.prototype, \"eventRender\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Function)\n    ], Schedule.prototype, \"dayRender\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Schedule.prototype, \"navLinks\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Schedule.prototype, \"options\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onDayClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onDrop\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventMouseover\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventMouseout\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventDragStart\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventDragStop\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventDrop\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventResizeStart\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventResizeStop\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onEventResize\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onViewRender\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onViewDestroy\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onNavLinkDayClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Schedule.prototype, \"onNavLinkWeekClick\", void 0);\n    Schedule = __decorate([\n        core_1.Component({\n            selector: 'p-schedule',\n            template: '<div [ngStyle]=\"style\" [class]=\"styleClass\"></div>'\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.IterableDiffers])\n    ], Schedule);\n    return Schedule;\n}());\nexports.Schedule = Schedule;\nvar ScheduleModule = /** @class */ (function () {\n    function ScheduleModule() {\n    }\n    ScheduleModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Schedule],\n            declarations: [Schedule]\n        })\n    ], ScheduleModule);\n    return ScheduleModule;\n}());\nexports.ScheduleModule = ScheduleModule;\n//# sourceMappingURL=schedule.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/schedule/schedule.js\n// module id = 773\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar ScrollPanel = /** @class */ (function () {\n    function ScrollPanel(el, zone, domHandler) {\n        this.el = el;\n        this.zone = zone;\n        this.domHandler = domHandler;\n        this.timeoutFrame = function (fn) { return setTimeout(fn, 0); };\n    }\n    ScrollPanel.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.zone.runOutsideAngular(function () {\n            _this.moveBar();\n            _this.moveBar = _this.moveBar.bind(_this);\n            _this.onXBarMouseDown = _this.onXBarMouseDown.bind(_this);\n            _this.onYBarMouseDown = _this.onYBarMouseDown.bind(_this);\n            _this.onDocumentMouseMove = _this.onDocumentMouseMove.bind(_this);\n            _this.onDocumentMouseUp = _this.onDocumentMouseUp.bind(_this);\n            window.addEventListener('resize', _this.moveBar);\n            _this.contentViewChild.nativeElement.addEventListener('scroll', _this.moveBar);\n            _this.contentViewChild.nativeElement.addEventListener('mouseenter', _this.moveBar);\n            _this.xBarViewChild.nativeElement.addEventListener('mousedown', _this.onXBarMouseDown);\n            _this.yBarViewChild.nativeElement.addEventListener('mousedown', _this.onYBarMouseDown);\n            _this.calculateContainerHeight();\n            _this.initialized = true;\n        });\n    };\n    ScrollPanel.prototype.calculateContainerHeight = function () {\n        var container = this.containerViewChild.nativeElement;\n        var content = this.contentViewChild.nativeElement;\n        var xBar = this.xBarViewChild.nativeElement;\n        var containerStyles = getComputedStyle(container), xBarStyles = getComputedStyle(xBar), pureContainerHeight = this.domHandler.getHeight(container) - parseInt(xBarStyles['height'], 10);\n        if (containerStyles['max-height'] != \"none\" && pureContainerHeight == 0) {\n            if (content.offsetHeight + parseInt(xBarStyles['height'], 10) > parseInt(containerStyles['max-height'], 10)) {\n                container.style.height = containerStyles['max-height'];\n            }\n            else {\n                container.style.height = content.offsetHeight + parseFloat(containerStyles.paddingTop) + parseFloat(containerStyles.paddingBottom) + parseFloat(containerStyles.borderTopWidth) + parseFloat(containerStyles.borderBottomWidth) + \"px\";\n            }\n        }\n    };\n    ScrollPanel.prototype.moveBar = function () {\n        var _this = this;\n        var container = this.containerViewChild.nativeElement;\n        var content = this.contentViewChild.nativeElement;\n        /* horizontal scroll */\n        var xBar = this.xBarViewChild.nativeElement;\n        var totalWidth = content.scrollWidth;\n        var ownWidth = content.clientWidth;\n        var bottom = (container.clientHeight - xBar.clientHeight) * -1;\n        this.scrollXRatio = ownWidth / totalWidth;\n        /* vertical scroll */\n        var yBar = this.yBarViewChild.nativeElement;\n        var totalHeight = content.scrollHeight;\n        var ownHeight = content.clientHeight;\n        var right = (container.clientWidth - yBar.clientWidth) * -1;\n        this.scrollYRatio = ownHeight / totalHeight;\n        this.requestAnimationFrame(function () {\n            if (_this.scrollXRatio >= 1) {\n                _this.domHandler.addClass(xBar, 'ui-scrollpanel-hidden');\n            }\n            else {\n                _this.domHandler.removeClass(xBar, 'ui-scrollpanel-hidden');\n                xBar.style.cssText = 'width:' + Math.max(_this.scrollXRatio * 100, 10) + '%; left:' + (content.scrollLeft / totalWidth) * 100 + '%;bottom:' + bottom + 'px;';\n            }\n            if (_this.scrollYRatio >= 1) {\n                _this.domHandler.addClass(yBar, 'ui-scrollpanel-hidden');\n            }\n            else {\n                _this.domHandler.removeClass(yBar, 'ui-scrollpanel-hidden');\n                yBar.style.cssText = 'height:' + Math.max(_this.scrollYRatio * 100, 10) + '%; top: calc(' + (content.scrollTop / totalHeight) * 100 + '% - ' + xBar.clientHeight + 'px);right:' + right + 'px;';\n            }\n        });\n    };\n    ScrollPanel.prototype.onYBarMouseDown = function (e) {\n        this.isYBarClicked = true;\n        this.lastPageY = e.pageY;\n        this.domHandler.addClass(this.yBarViewChild.nativeElement, 'ui-scrollpanel-grabbed');\n        this.domHandler.addClass(document.body, 'ui-scrollpanel-grabbed');\n        document.addEventListener('mousemove', this.onDocumentMouseMove);\n        document.addEventListener('mouseup', this.onDocumentMouseUp);\n        e.preventDefault();\n    };\n    ScrollPanel.prototype.onXBarMouseDown = function (e) {\n        this.isXBarClicked = true;\n        this.lastPageX = e.pageX;\n        this.domHandler.addClass(this.xBarViewChild.nativeElement, 'ui-scrollpanel-grabbed');\n        this.domHandler.addClass(document.body, 'ui-scrollpanel-grabbed');\n        document.addEventListener('mousemove', this.onDocumentMouseMove);\n        document.addEventListener('mouseup', this.onDocumentMouseUp);\n        e.preventDefault();\n    };\n    ScrollPanel.prototype.onDocumentMouseMove = function (e) {\n        if (this.isXBarClicked) {\n            this.onMouseMoveForXBar(e);\n        }\n        else if (this.isYBarClicked) {\n            this.onMouseMoveForYBar(e);\n        }\n        else {\n            this.onMouseMoveForXBar(e);\n            this.onMouseMoveForYBar(e);\n        }\n    };\n    ScrollPanel.prototype.onMouseMoveForXBar = function (e) {\n        var _this = this;\n        var deltaX = e.pageX - this.lastPageX;\n        this.lastPageX = e.pageX;\n        this.requestAnimationFrame(function () {\n            _this.contentViewChild.nativeElement.scrollLeft += deltaX / _this.scrollXRatio;\n        });\n    };\n    ScrollPanel.prototype.onMouseMoveForYBar = function (e) {\n        var _this = this;\n        var deltaY = e.pageY - this.lastPageY;\n        this.lastPageY = e.pageY;\n        this.requestAnimationFrame(function () {\n            _this.contentViewChild.nativeElement.scrollTop += deltaY / _this.scrollYRatio;\n        });\n    };\n    ScrollPanel.prototype.onDocumentMouseUp = function (e) {\n        this.domHandler.removeClass(this.yBarViewChild.nativeElement, 'ui-scrollpanel-grabbed');\n        this.domHandler.removeClass(this.xBarViewChild.nativeElement, 'ui-scrollpanel-grabbed');\n        this.domHandler.removeClass(document.body, 'ui-scrollpanel-grabbed');\n        document.removeEventListener('mousemove', this.onDocumentMouseMove);\n        document.removeEventListener('mouseup', this.onDocumentMouseUp);\n        this.isXBarClicked = false;\n        this.isYBarClicked = false;\n    };\n    ScrollPanel.prototype.requestAnimationFrame = function (f) {\n        var frame = window.requestAnimationFrame || this.timeoutFrame;\n        frame(f);\n    };\n    ScrollPanel.prototype.ngOnDestroy = function () {\n        if (this.initialized) {\n            window.removeEventListener('resize', this.moveBar);\n            this.contentViewChild.nativeElement.removeEventListener('scroll', this.moveBar);\n            this.contentViewChild.nativeElement.removeEventListener('mouseenter', this.moveBar);\n            this.xBarViewChild.nativeElement.removeEventListener('mousedown', this.onXBarMouseDown);\n            this.yBarViewChild.nativeElement.removeEventListener('mousedown', this.onYBarMouseDown);\n        }\n    };\n    ScrollPanel.prototype.refresh = function () {\n        this.moveBar();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ScrollPanel.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ScrollPanel.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollPanel.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('content'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollPanel.prototype, \"contentViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('xBar'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollPanel.prototype, \"xBarViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('yBar'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ScrollPanel.prototype, \"yBarViewChild\", void 0);\n    ScrollPanel = __decorate([\n        core_1.Component({\n            selector: 'p-scrollPanel',\n            template: \"\\n        <div #container [ngClass]=\\\"'ui-scrollpanel ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-scrollpanel-wrapper\\\">\\n                <div #content class=\\\"ui-scrollpanel-content\\\">\\n                    <ng-content></ng-content>\\n                </div>\\n            </div>\\n            <div #xBar class=\\\"ui-scrollpanel-bar ui-scrollpanel-bar-x\\\"></div>\\n            <div #yBar class=\\\"ui-scrollpanel-bar ui-scrollpanel-bar-y\\\"></div>   \\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, core_1.NgZone, domhandler_1.DomHandler])\n    ], ScrollPanel);\n    return ScrollPanel;\n}());\nexports.ScrollPanel = ScrollPanel;\nvar ScrollPanelModule = /** @class */ (function () {\n    function ScrollPanelModule() {\n    }\n    ScrollPanelModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ScrollPanel],\n            declarations: [ScrollPanel]\n        })\n    ], ScrollPanelModule);\n    return ScrollPanelModule;\n}());\nexports.ScrollPanelModule = ScrollPanelModule;\n//# sourceMappingURL=scrollpanel.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/scrollpanel/scrollpanel.js\n// module id = 774\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar objectutils_1 = require(\"../utils/objectutils\");\nvar forms_1 = require(\"@angular/forms\");\nexports.SELECTBUTTON_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return SelectButton; }),\n    multi: true\n};\nvar SelectButton = /** @class */ (function () {\n    function SelectButton(objectUtils, cd) {\n        this.objectUtils = objectUtils;\n        this.cd = cd;\n        this.onOptionClick = new core_1.EventEmitter();\n        this.onChange = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    Object.defineProperty(SelectButton.prototype, \"options\", {\n        get: function () {\n            return this._options;\n        },\n        set: function (val) {\n            var opts = this.optionLabel || this.itemTemplate ? this.objectUtils.generateSelectItems(val, this.optionLabel) : val;\n            this._options = opts;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    SelectButton.prototype.writeValue = function (value) {\n        this.value = value;\n        this.cd.markForCheck();\n    };\n    SelectButton.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    SelectButton.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    SelectButton.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    SelectButton.prototype.onItemClick = function (event, option, checkbox, index) {\n        if (this.disabled) {\n            return;\n        }\n        checkbox.focus();\n        if (this.multiple) {\n            var itemIndex_1 = this.findItemIndex(option);\n            if (itemIndex_1 != -1)\n                this.value = this.value.filter(function (val, i) { return i != itemIndex_1; });\n            else\n                this.value = (this.value || []).concat([option.value]);\n        }\n        else {\n            this.value = option.value;\n        }\n        this.onOptionClick.emit({\n            originalEvent: event,\n            option: option,\n            index: index\n        });\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    SelectButton.prototype.onFocus = function (event) {\n        this.focusedItem = event.target;\n    };\n    SelectButton.prototype.onBlur = function (event) {\n        this.focusedItem = null;\n        this.onModelTouched();\n    };\n    SelectButton.prototype.isSelected = function (option) {\n        if (this.multiple)\n            return this.findItemIndex(option) != -1;\n        else\n            return this.objectUtils.equals(option.value, this.value, this.dataKey);\n    };\n    SelectButton.prototype.findItemIndex = function (option) {\n        var index = -1;\n        if (this.value) {\n            for (var i = 0; i < this.value.length; i++) {\n                if (this.value[i] == option.value) {\n                    index = i;\n                    break;\n                }\n            }\n        }\n        return index;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SelectButton.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SelectButton.prototype, \"multiple\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SelectButton.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SelectButton.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SelectButton.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SelectButton.prototype, \"dataKey\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SelectButton.prototype, \"optionLabel\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], SelectButton.prototype, \"onOptionClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], SelectButton.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.ContentChild(core_1.TemplateRef),\n        __metadata(\"design:type\", Object)\n    ], SelectButton.prototype, \"itemTemplate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array),\n        __metadata(\"design:paramtypes\", [Array])\n    ], SelectButton.prototype, \"options\", null);\n    SelectButton = __decorate([\n        core_1.Component({\n            selector: 'p-selectButton',\n            template: \"\\n        <div [ngClass]=\\\"'ui-selectbutton ui-buttonset ui-widget ui-corner-all ui-buttonset-' + options.length\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div *ngFor=\\\"let option of options; let i = index\\\" class=\\\"ui-button ui-widget ui-state-default ui-button-text-only {{option.styleClass}}\\\"\\n                [ngClass]=\\\"{'ui-state-active':isSelected(option), 'ui-state-disabled':disabled, 'ui-state-focus': cbox == focusedItem, \\n                'ui-button-text-icon-left': (option.icon != null), 'ui-button-icon-only': (option.icon && !option.label)}\\\" (click)=\\\"onItemClick($event,option,cbox,i)\\\" [attr.title]=\\\"option.title\\\">\\n                <ng-container *ngIf=\\\"!itemTemplate else customcontent\\\">\\n                    <span [ngClass]=\\\"['ui-clickable', 'ui-button-icon-left']\\\" [class]=\\\"option.icon\\\" *ngIf=\\\"option.icon\\\"></span>\\n                    <span class=\\\"ui-button-text ui-clickable\\\">{{option.label||'ui-btn'}}</span>\\n                </ng-container>\\n                <ng-template #customcontent>\\n                    <ng-container *ngTemplateOutlet=\\\"itemTemplate; context: {$implicit: option.value, index: i}\\\"></ng-container>\\n                </ng-template>\\n                <div class=\\\"ui-helper-hidden-accessible\\\">\\n                    <input #cbox type=\\\"checkbox\\\" [checked]=\\\"isSelected(option)\\\" (focus)=\\\"onFocus($event)\\\" (blur)=\\\"onBlur($event)\\\" [attr.tabindex]=\\\"tabindex\\\" [attr.disabled]=\\\"disabled\\\">\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            providers: [objectutils_1.ObjectUtils, exports.SELECTBUTTON_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [objectutils_1.ObjectUtils, core_1.ChangeDetectorRef])\n    ], SelectButton);\n    return SelectButton;\n}());\nexports.SelectButton = SelectButton;\nvar SelectButtonModule = /** @class */ (function () {\n    function SelectButtonModule() {\n    }\n    SelectButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [SelectButton],\n            declarations: [SelectButton]\n        })\n    ], SelectButtonModule);\n    return SelectButtonModule;\n}());\nexports.SelectButtonModule = SelectButtonModule;\n//# sourceMappingURL=selectbutton.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/selectbutton/selectbutton.js\n// module id = 775\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar router_1 = require(\"@angular/router\");\nvar SlideMenuSub = /** @class */ (function () {\n    function SlideMenuSub(slideMenu) {\n        this.slideMenu = slideMenu;\n        this.backLabel = 'Back';\n        this.easing = 'ease-out';\n    }\n    SlideMenuSub.prototype.itemClick = function (event, item, listitem) {\n        var _this = this;\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        if (item.items && !this.slideMenu.animating) {\n            this.slideMenu.left -= this.slideMenu.menuWidth;\n            this.activeItem = listitem;\n            this.slideMenu.animating = true;\n            setTimeout(function () { return _this.slideMenu.animating = false; }, this.effectDuration);\n        }\n    };\n    SlideMenuSub.prototype.ngOnDestroy = function () {\n        this.activeItem = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenuSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SlideMenuSub.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenuSub.prototype, \"backLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenuSub.prototype, \"menuWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenuSub.prototype, \"effectDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenuSub.prototype, \"easing\", void 0);\n    SlideMenuSub = __decorate([\n        core_1.Component({\n            selector: 'p-slideMenuSub',\n            template: \"\\n        <ul [ngClass]=\\\"{'ui-slidemenu-rootlist':root, 'ui-submenu-list':!root}\\\"\\n            [style.width.px]=\\\"menuWidth\\\" [style.left.px]=\\\"root ? slideMenu.left : slideMenu.menuWidth\\\"\\n            [style.transitionProperty]=\\\"root ? 'left' : 'none'\\\" [style.transitionDuration]=\\\"effectDuration + 'ms'\\\" [style.transitionTimingFunction]=\\\"easing\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"(root ? item : item.items)\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\">\\n                <li *ngIf=\\\"!child.separator\\\" #listitem [ngClass]=\\\"{'ui-menuitem ui-widget ui-corner-all':true,'ui-menuitem-active':listitem==activeItem}\\\"\\n                    [class]=\\\"child.styleClass\\\" [ngStyle]=\\\"child.style\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" \\n                        (click)=\\\"itemClick($event, child, listitem)\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" \\n                        [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\" [href]=\\\"child.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" \\n                        [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" \\n                        (click)=\\\"itemClick($event, child, listitem)\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                    </a>\\n                    <p-slideMenuSub class=\\\"ui-submenu\\\" [item]=\\\"child\\\" [menuWidth]=\\\"menuWidth\\\" *ngIf=\\\"child.items\\\"></p-slideMenuSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return SlideMenu; }))),\n        __metadata(\"design:paramtypes\", [SlideMenu])\n    ], SlideMenuSub);\n    return SlideMenuSub;\n}());\nexports.SlideMenuSub = SlideMenuSub;\nvar SlideMenu = /** @class */ (function () {\n    function SlideMenu(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.menuWidth = 190;\n        this.viewportHeight = 180;\n        this.effectDuration = 250;\n        this.easing = 'ease-out';\n        this.backLabel = 'Back';\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.left = 0;\n        this.animating = false;\n    }\n    SlideMenu.prototype.ngAfterViewInit = function () {\n        var _this = this;\n        this.container = this.containerViewChild.nativeElement;\n        this.backwardElement = this.backwardViewChild.nativeElement;\n        this.slideMenuContentElement = this.slideMenuContentViewChild.nativeElement;\n        this.slideMenuContentElement.style.height = this.viewportHeight - this.domHandler.getHiddenElementOuterHeight(this.backwardElement) + 'px';\n        if (this.popup) {\n            if (this.appendTo) {\n                if (this.appendTo === 'body')\n                    document.body.appendChild(this.container);\n                else\n                    this.domHandler.appendChild(this.container, this.appendTo);\n            }\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.preventDocumentDefault) {\n                    _this.hide();\n                }\n                _this.preventDocumentDefault = false;\n            });\n        }\n    };\n    SlideMenu.prototype.toggle = function (event) {\n        if (this.container.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n    };\n    SlideMenu.prototype.show = function (event) {\n        this.preventDocumentDefault = true;\n        this.moveOnTop();\n        this.container.style.display = 'block';\n        this.domHandler.absolutePosition(this.container, event.target);\n        this.domHandler.fadeIn(this.container, 250);\n    };\n    SlideMenu.prototype.hide = function () {\n        this.container.style.display = 'none';\n    };\n    SlideMenu.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.container.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    SlideMenu.prototype.onClick = function (event) {\n        this.preventDocumentDefault = true;\n    };\n    SlideMenu.prototype.goBack = function () {\n        this.left += this.menuWidth;\n    };\n    SlideMenu.prototype.ngOnDestroy = function () {\n        if (this.popup) {\n            if (this.documentClickListener) {\n                this.documentClickListener();\n            }\n            if (this.appendTo) {\n                this.el.nativeElement.appendChild(this.container);\n            }\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], SlideMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SlideMenu.prototype, \"popup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SlideMenu.prototype, \"menuWidth\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SlideMenu.prototype, \"viewportHeight\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenu.prototype, \"effectDuration\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenu.prototype, \"easing\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SlideMenu.prototype, \"backLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SlideMenu.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SlideMenu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SlideMenu.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SlideMenu.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('backward'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SlideMenu.prototype, \"backwardViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('slideMenuContent'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SlideMenu.prototype, \"slideMenuContentViewChild\", void 0);\n    SlideMenu = __decorate([\n        core_1.Component({\n            selector: 'p-slideMenu',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-slidemenu ui-widget ui-widget-content ui-corner-all':true, 'ui-slidemenu-dynamic ui-shadow':popup}\\\" \\n            [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\" (click)=\\\"onClick($event)\\\">\\n            <div class=\\\"ui-slidemenu-wrapper\\\" [style.height.px]=\\\"viewportHeight\\\">\\n                <div #slideMenuContent class=\\\"ui-slidemenu-content\\\">\\n                    <p-slideMenuSub [item]=\\\"model\\\" root=\\\"root\\\" [menuWidth]=\\\"menuWidth\\\" [effectDuration]=\\\"effectDuration\\\" [easing]=\\\"easing\\\"></p-slideMenuSub>\\n                </div>\\n                <div #backward class=\\\"ui-slidemenu-backward ui-widget-header ui-corner-all\\\" [style.display]=\\\"left ? 'block' : 'none'\\\" (click)=\\\"goBack()\\\">\\n                    <span class=\\\"ui-slidemenu-backward-icon fa fa-fw fa-caret-left\\\"></span><span>{{backLabel}}</span>\\n                </div>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], SlideMenu);\n    return SlideMenu;\n}());\nexports.SlideMenu = SlideMenu;\nvar SlideMenuModule = /** @class */ (function () {\n    function SlideMenuModule() {\n    }\n    SlideMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [SlideMenu, router_1.RouterModule],\n            declarations: [SlideMenu, SlideMenuSub]\n        })\n    ], SlideMenuModule);\n    return SlideMenuModule;\n}());\nexports.SlideMenuModule = SlideMenuModule;\n//# sourceMappingURL=slidemenu.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/slidemenu/slidemenu.js\n// module id = 776\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar forms_1 = require(\"@angular/forms\");\nexports.SLIDER_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return Slider; }),\n    multi: true\n};\nvar Slider = /** @class */ (function () {\n    function Slider(el, domHandler, renderer, ngZone) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.ngZone = ngZone;\n        this.min = 0;\n        this.max = 100;\n        this.orientation = 'horizontal';\n        this.onChange = new core_1.EventEmitter();\n        this.onSlideEnd = new core_1.EventEmitter();\n        this.handleValues = [];\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n        this.handleIndex = 0;\n    }\n    Slider.prototype.onMouseDown = function (event, index) {\n        if (this.disabled) {\n            return;\n        }\n        this.dragging = true;\n        this.updateDomData();\n        this.sliderHandleClick = true;\n        this.handleIndex = index;\n        this.bindDragListeners();\n        event.preventDefault();\n    };\n    Slider.prototype.onTouchStart = function (event, index) {\n        var touchobj = event.changedTouches[0];\n        this.startHandleValue = (this.range) ? this.handleValues[index] : this.handleValue;\n        this.dragging = true;\n        this.handleIndex = index;\n        if (this.orientation === 'horizontal') {\n            this.startx = parseInt(touchobj.clientX, 10);\n            this.barWidth = this.el.nativeElement.children[0].offsetWidth;\n        }\n        else {\n            this.starty = parseInt(touchobj.clientY, 10);\n            this.barHeight = this.el.nativeElement.children[0].offsetHeight;\n        }\n        event.preventDefault();\n    };\n    Slider.prototype.onTouchMove = function (event, index) {\n        var touchobj = event.changedTouches[0], handleValue = 0;\n        if (this.orientation === 'horizontal') {\n            handleValue = Math.floor(((parseInt(touchobj.clientX, 10) - this.startx) * 100) / (this.barWidth)) + this.startHandleValue;\n        }\n        else {\n            handleValue = Math.floor(((this.starty - parseInt(touchobj.clientY, 10)) * 100) / (this.barHeight)) + this.startHandleValue;\n        }\n        this.setValueFromHandle(event, handleValue);\n        event.preventDefault();\n    };\n    Slider.prototype.onBarClick = function (event) {\n        if (this.disabled) {\n            return;\n        }\n        if (!this.sliderHandleClick) {\n            this.updateDomData();\n            this.handleChange(event);\n        }\n        this.sliderHandleClick = false;\n    };\n    Slider.prototype.handleChange = function (event) {\n        var handleValue = this.calculateHandleValue(event);\n        this.setValueFromHandle(event, handleValue);\n    };\n    Slider.prototype.bindDragListeners = function () {\n        var _this = this;\n        this.ngZone.runOutsideAngular(function () {\n            if (!_this.dragListener) {\n                _this.dragListener = _this.renderer.listen('document', 'mousemove', function (event) {\n                    if (_this.dragging) {\n                        _this.ngZone.run(function () {\n                            _this.handleChange(event);\n                        });\n                    }\n                });\n            }\n            if (!_this.mouseupListener) {\n                _this.mouseupListener = _this.renderer.listen('document', 'mouseup', function (event) {\n                    if (_this.dragging) {\n                        _this.dragging = false;\n                        _this.ngZone.run(function () {\n                            if (_this.range) {\n                                _this.onSlideEnd.emit({ originalEvent: event, values: _this.values });\n                            }\n                            else {\n                                _this.onSlideEnd.emit({ originalEvent: event, value: _this.value });\n                            }\n                        });\n                    }\n                });\n            }\n        });\n    };\n    Slider.prototype.unbindDragListeners = function () {\n        if (this.dragListener) {\n            this.dragListener();\n        }\n        if (this.mouseupListener) {\n            this.mouseupListener();\n        }\n    };\n    Slider.prototype.setValueFromHandle = function (event, handleValue) {\n        var newValue = this.getValueFromHandle(handleValue);\n        if (this.range) {\n            if (this.step) {\n                this.handleStepChange(newValue, this.values[this.handleIndex]);\n            }\n            else {\n                this.handleValues[this.handleIndex] = handleValue;\n                this.updateValue(newValue, event);\n            }\n        }\n        else {\n            if (this.step) {\n                this.handleStepChange(newValue, this.value);\n            }\n            else {\n                this.handleValue = handleValue;\n                this.updateValue(newValue, event);\n            }\n        }\n    };\n    Slider.prototype.handleStepChange = function (newValue, oldValue) {\n        var diff = (newValue - oldValue);\n        var val = oldValue;\n        if (diff < 0) {\n            val = oldValue + Math.ceil((newValue - oldValue) / this.step) * this.step;\n        }\n        else if (diff > 0) {\n            val = oldValue + Math.floor((newValue - oldValue) / this.step) * this.step;\n        }\n        this.updateValue(val);\n        this.updateHandleValue();\n    };\n    Slider.prototype.writeValue = function (value) {\n        if (this.range)\n            this.values = value || [0, 0];\n        else\n            this.value = value || 0;\n        this.updateHandleValue();\n    };\n    Slider.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    Slider.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    Slider.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Object.defineProperty(Slider.prototype, \"rangeStartLeft\", {\n        get: function () {\n            return this.isVertical() ? 'auto' : this.handleValues[0] + '%';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Slider.prototype, \"rangeStartBottom\", {\n        get: function () {\n            return this.isVertical() ? this.handleValues[0] + '%' : 'auto';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Slider.prototype, \"rangeEndLeft\", {\n        get: function () {\n            return this.isVertical() ? 'auto' : this.handleValues[1] + '%';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Slider.prototype, \"rangeEndBottom\", {\n        get: function () {\n            return this.isVertical() ? this.handleValues[1] + '%' : 'auto';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Slider.prototype.isVertical = function () {\n        return this.orientation === 'vertical';\n    };\n    Slider.prototype.updateDomData = function () {\n        var rect = this.el.nativeElement.children[0].getBoundingClientRect();\n        this.initX = rect.left + this.domHandler.getWindowScrollLeft();\n        this.initY = rect.top + this.domHandler.getWindowScrollTop();\n        this.barWidth = this.el.nativeElement.children[0].offsetWidth;\n        this.barHeight = this.el.nativeElement.children[0].offsetHeight;\n    };\n    Slider.prototype.calculateHandleValue = function (event) {\n        if (this.orientation === 'horizontal')\n            return ((event.pageX - this.initX) * 100) / (this.barWidth);\n        else\n            return (((this.initY + this.barHeight) - event.pageY) * 100) / (this.barHeight);\n    };\n    Slider.prototype.updateHandleValue = function () {\n        if (this.range) {\n            this.handleValues[0] = (this.values[0] < this.min ? 0 : this.values[0] - this.min) * 100 / (this.max - this.min);\n            this.handleValues[1] = (this.values[1] > this.max ? 100 : this.values[1] - this.min) * 100 / (this.max - this.min);\n        }\n        else {\n            if (this.value < this.min)\n                this.handleValue = 0;\n            else if (this.value > this.max)\n                this.handleValue = 100;\n            else\n                this.handleValue = (this.value - this.min) * 100 / (this.max - this.min);\n        }\n    };\n    Slider.prototype.updateValue = function (val, event) {\n        if (this.range) {\n            var value = val;\n            if (this.handleIndex == 0) {\n                if (value < this.min) {\n                    value = this.min;\n                    this.handleValues[0] = 0;\n                }\n                else if (value > this.values[1]) {\n                    value = this.values[1];\n                    this.handleValues[0] = this.handleValues[1];\n                }\n            }\n            else {\n                if (value > this.max) {\n                    value = this.max;\n                    this.handleValues[1] = 100;\n                }\n                else if (value < this.values[0]) {\n                    value = this.values[0];\n                    this.handleValues[1] = this.handleValues[0];\n                }\n            }\n            this.values[this.handleIndex] = Math.floor(value);\n            this.onModelChange(this.values);\n            this.onChange.emit({ event: event, values: this.values });\n        }\n        else {\n            if (val < this.min) {\n                val = this.min;\n                this.handleValue = 0;\n            }\n            else if (val > this.max) {\n                val = this.max;\n                this.handleValue = 100;\n            }\n            this.value = Math.floor(val);\n            this.onModelChange(this.value);\n            this.onChange.emit({ event: event, value: this.value });\n        }\n    };\n    Slider.prototype.getValueFromHandle = function (handleValue) {\n        return (this.max - this.min) * (handleValue / 100) + this.min;\n    };\n    Slider.prototype.ngOnDestroy = function () {\n        this.unbindDragListeners();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Slider.prototype, \"animate\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Slider.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Slider.prototype, \"min\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Slider.prototype, \"max\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Slider.prototype, \"orientation\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Slider.prototype, \"step\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Slider.prototype, \"range\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Slider.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Slider.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Slider.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Slider.prototype, \"onSlideEnd\", void 0);\n    Slider = __decorate([\n        core_1.Component({\n            selector: 'p-slider',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" [ngClass]=\\\"{'ui-slider ui-widget ui-widget-content ui-corner-all':true,'ui-state-disabled':disabled,\\n            'ui-slider-horizontal':orientation == 'horizontal','ui-slider-vertical':orientation == 'vertical','ui-slider-animate':animate}\\\"\\n            (click)=\\\"onBarClick($event)\\\">\\n            <span *ngIf=\\\"range && orientation == 'horizontal'\\\" class=\\\"ui-slider-range ui-widget-header ui-corner-all\\\" [ngStyle]=\\\"{'left':handleValues[0] + '%',width: (handleValues[1] - handleValues[0] + '%')}\\\"></span>\\n            <span *ngIf=\\\"range && orientation == 'vertical'\\\" class=\\\"ui-slider-range ui-widget-header ui-corner-all\\\" [ngStyle]=\\\"{'bottom':handleValues[0] + '%',height: (handleValues[1] - handleValues[0] + '%')}\\\"></span>\\n            <span *ngIf=\\\"!range && orientation=='vertical'\\\" class=\\\"ui-slider-range ui-slider-range-min ui-widget-header ui-corner-all\\\" [ngStyle]=\\\"{'height': handleValue + '%'}\\\"></span>\\n            <span *ngIf=\\\"!range && orientation=='horizontal'\\\" class=\\\"ui-slider-range ui-slider-range-min ui-widget-header ui-corner-all\\\" [ngStyle]=\\\"{'width': handleValue + '%'}\\\"></span>\\n            <span *ngIf=\\\"!range\\\" class=\\\"ui-slider-handle ui-state-default ui-corner-all ui-clickable\\\" (mousedown)=\\\"onMouseDown($event)\\\" (touchstart)=\\\"onTouchStart($event)\\\" (touchmove)=\\\"onTouchMove($event)\\\" (touchend)=\\\"dragging=false\\\"\\n                [style.transition]=\\\"dragging ? 'none': null\\\" [ngStyle]=\\\"{'left': orientation == 'horizontal' ? handleValue + '%' : null,'bottom': orientation == 'vertical' ? handleValue + '%' : null}\\\"></span>\\n            <span *ngIf=\\\"range\\\" (mousedown)=\\\"onMouseDown($event,0)\\\" (touchstart)=\\\"onTouchStart($event,0)\\\" (touchmove)=\\\"onTouchMove($event,0)\\\" (touchend)=\\\"dragging=false\\\" [style.transition]=\\\"dragging ? 'none': null\\\" class=\\\"ui-slider-handle ui-state-default ui-corner-all ui-clickable\\\" \\n                [ngStyle]=\\\"{'left': rangeStartLeft, 'bottom': rangeStartBottom}\\\" [ngClass]=\\\"{'ui-slider-handle-active':handleIndex==0}\\\"></span>\\n            <span *ngIf=\\\"range\\\" (mousedown)=\\\"onMouseDown($event,1)\\\" (touchstart)=\\\"onTouchStart($event,1)\\\" (touchmove)=\\\"onTouchMove($event,1)\\\" (touchend)=\\\"dragging=false\\\" [style.transition]=\\\"dragging ? 'none': null\\\" class=\\\"ui-slider-handle ui-state-default ui-corner-all ui-clickable\\\" \\n                [ngStyle]=\\\"{'left': rangeEndLeft, 'bottom': rangeEndBottom}\\\" [ngClass]=\\\"{'ui-slider-handle-active':handleIndex==1}\\\"></span>\\n        </div>\\n    \",\n            providers: [exports.SLIDER_VALUE_ACCESSOR, domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, core_1.NgZone])\n    ], Slider);\n    return Slider;\n}());\nexports.Slider = Slider;\nvar SliderModule = /** @class */ (function () {\n    function SliderModule() {\n    }\n    SliderModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Slider],\n            declarations: [Slider]\n        })\n    ], SliderModule);\n    return SliderModule;\n}());\nexports.SliderModule = SliderModule;\n//# sourceMappingURL=slider.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/slider/slider.js\n// module id = 777\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar Sidebar = /** @class */ (function () {\n    function Sidebar(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.position = 'left';\n        this.blockScroll = false;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.modal = true;\n        this.onShow = new core_1.EventEmitter();\n        this.onHide = new core_1.EventEmitter();\n        this.visibleChange = new core_1.EventEmitter();\n    }\n    Sidebar.prototype.ngAfterViewInit = function () {\n        this.initialized = true;\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.containerViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.containerViewChild.nativeElement, this.appendTo);\n        }\n        if (this.visible) {\n            this.show();\n        }\n    };\n    Object.defineProperty(Sidebar.prototype, \"visible\", {\n        get: function () {\n            return this._visible;\n        },\n        set: function (val) {\n            this._visible = val;\n            if (this.initialized && this.containerViewChild && this.containerViewChild.nativeElement) {\n                if (this._visible)\n                    this.show();\n                else {\n                    if (this.preventVisibleChangePropagation)\n                        this.preventVisibleChangePropagation = false;\n                    else\n                        this.hide();\n                }\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Sidebar.prototype.ngAfterViewChecked = function () {\n        if (this.executePostDisplayActions) {\n            this.onShow.emit({});\n            this.executePostDisplayActions = false;\n        }\n    };\n    Sidebar.prototype.show = function () {\n        this.executePostDisplayActions = true;\n        if (this.autoZIndex) {\n            this.containerViewChild.nativeElement.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n        if (this.modal) {\n            this.enableModality();\n        }\n    };\n    Sidebar.prototype.hide = function () {\n        this.onHide.emit({});\n        if (this.modal) {\n            this.disableModality();\n        }\n    };\n    Sidebar.prototype.close = function (event) {\n        this.preventVisibleChangePropagation = true;\n        this.hide();\n        this.visibleChange.emit(false);\n        event.preventDefault();\n    };\n    Sidebar.prototype.enableModality = function () {\n        var _this = this;\n        if (!this.mask) {\n            this.mask = document.createElement('div');\n            this.mask.style.zIndex = String(parseInt(this.containerViewChild.nativeElement.style.zIndex) - 1);\n            this.domHandler.addMultipleClasses(this.mask, 'ui-widget-overlay ui-sidebar-mask');\n            this.maskClickListener = this.renderer.listen(this.mask, 'click', function (event) {\n                _this.close(event);\n            });\n            document.body.appendChild(this.mask);\n            if (this.blockScroll) {\n                this.domHandler.addClass(document.body, 'ui-overflow-hidden');\n            }\n        }\n    };\n    Sidebar.prototype.disableModality = function () {\n        if (this.mask) {\n            this.unbindMaskClickListener();\n            document.body.removeChild(this.mask);\n            if (this.blockScroll) {\n                this.domHandler.removeClass(document.body, 'ui-overflow-hidden');\n            }\n            this.mask = null;\n        }\n    };\n    Sidebar.prototype.unbindMaskClickListener = function () {\n        if (this.maskClickListener) {\n            this.maskClickListener();\n            this.maskClickListener = null;\n        }\n    };\n    Sidebar.prototype.ngOnDestroy = function () {\n        this.initialized = false;\n        if (this.visible) {\n            this.hide();\n        }\n        if (this.appendTo) {\n            this.el.nativeElement.appendChild(this.containerViewChild.nativeElement);\n        }\n        this.unbindMaskClickListener();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Sidebar.prototype, \"position\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Sidebar.prototype, \"fullScreen\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Sidebar.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Sidebar.prototype, \"blockScroll\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Sidebar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Sidebar.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Sidebar.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Sidebar.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Sidebar.prototype, \"modal\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], Sidebar.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Sidebar.prototype, \"onShow\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Sidebar.prototype, \"onHide\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Sidebar.prototype, \"visibleChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], Sidebar.prototype, \"visible\", null);\n    Sidebar = __decorate([\n        core_1.Component({\n            selector: 'p-sidebar',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-sidebar ui-widget ui-widget-content ui-shadow':true, 'ui-sidebar-active': visible, \\n            'ui-sidebar-left': (position === 'left'), 'ui-sidebar-right': (position === 'right'),\\n            'ui-sidebar-top': (position === 'top'), 'ui-sidebar-bottom': (position === 'bottom'), \\n            'ui-sidebar-full': fullScreen}\\\"\\n            [@panelState]=\\\"visible ? 'visible' : 'hidden'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <a [ngClass]=\\\"{'ui-sidebar-close ui-corner-all':true}\\\" href=\\\"#\\\" role=\\\"button\\\" (click)=\\\"close($event)\\\">\\n                <span class=\\\"fa fa-fw fa-close\\\"></span>\\n            </a>\\n            <ng-content></ng-content>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('panelState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('300ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('300ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], Sidebar);\n    return Sidebar;\n}());\nexports.Sidebar = Sidebar;\nvar SidebarModule = /** @class */ (function () {\n    function SidebarModule() {\n    }\n    SidebarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Sidebar],\n            declarations: [Sidebar]\n        })\n    ], SidebarModule);\n    return SidebarModule;\n}());\nexports.SidebarModule = SidebarModule;\n//# sourceMappingURL=sidebar.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/sidebar/sidebar.js\n// module id = 778\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar animations_1 = require(\"@angular/animations\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar button_1 = require(\"../button/button\");\nvar router_1 = require(\"@angular/router\");\nvar router_2 = require(\"@angular/router\");\nvar SplitButton = /** @class */ (function () {\n    function SplitButton(el, domHandler, renderer, router, cd) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.router = router;\n        this.cd = cd;\n        this.iconPos = 'left';\n        this.onClick = new core_1.EventEmitter();\n        this.onDropdownClick = new core_1.EventEmitter();\n        this.menuVisible = false;\n    }\n    SplitButton.prototype.ngAfterViewInit = function () {\n        if (this.appendTo) {\n            if (this.appendTo === 'body')\n                document.body.appendChild(this.overlayViewChild.nativeElement);\n            else\n                this.domHandler.appendChild(this.overlayViewChild.nativeElement, this.appendTo);\n        }\n    };\n    SplitButton.prototype.ngAfterViewChecked = function () {\n        if (this.shown) {\n            this.onShow();\n            this.shown = false;\n        }\n    };\n    SplitButton.prototype.onDefaultButtonClick = function (event) {\n        this.onClick.emit(event);\n    };\n    SplitButton.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        this.menuVisible = false;\n    };\n    SplitButton.prototype.show = function () {\n        this.shown = true;\n        this.menuVisible = !this.menuVisible;\n        this.alignPanel();\n        this.overlayViewChild.nativeElement.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n    };\n    SplitButton.prototype.onShow = function () {\n        this.alignPanel();\n        this.bindDocumentClickListener();\n    };\n    SplitButton.prototype.onDropdownButtonClick = function (event) {\n        this.onDropdownClick.emit(event);\n        this.dropdownClick = true;\n        this.show();\n    };\n    SplitButton.prototype.alignPanel = function () {\n        if (this.appendTo)\n            this.domHandler.absolutePosition(this.overlayViewChild.nativeElement, this.containerViewChild.nativeElement);\n        else\n            this.domHandler.relativePosition(this.overlayViewChild.nativeElement, this.containerViewChild.nativeElement);\n    };\n    SplitButton.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (_this.dropdownClick) {\n                    _this.dropdownClick = false;\n                }\n                else {\n                    _this.menuVisible = false;\n                    _this.unbindDocumentClickListener();\n                    _this.cd.markForCheck();\n                }\n            });\n        }\n    };\n    SplitButton.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    SplitButton.prototype.ngOnDestroy = function () {\n        this.unbindDocumentClickListener();\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], SplitButton.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"icon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"iconPos\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], SplitButton.prototype, \"onClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], SplitButton.prototype, \"onDropdownClick\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SplitButton.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SplitButton.prototype, \"menuStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"menuStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], SplitButton.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], SplitButton.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], SplitButton.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], SplitButton.prototype, \"dir\", void 0);\n    __decorate([\n        core_1.ViewChild('container'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SplitButton.prototype, \"containerViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('defaultbtn'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SplitButton.prototype, \"buttonViewChild\", void 0);\n    __decorate([\n        core_1.ViewChild('overlay'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], SplitButton.prototype, \"overlayViewChild\", void 0);\n    SplitButton = __decorate([\n        core_1.Component({\n            selector: 'p-splitButton',\n            template: \"\\n        <div #container [ngClass]=\\\"{'ui-splitbutton ui-buttonset ui-widget':true,'ui-state-disabled':disabled}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <button #defaultbtn type=\\\"button\\\" pButton [icon]=\\\"icon\\\" [iconPos]=\\\"iconPos\\\" [label]=\\\"label\\\" [cornerStyleClass]=\\\"dir === 'rtl' ? 'ui-corner-right': 'ui-corner-left'\\\" (click)=\\\"onDefaultButtonClick($event)\\\" [disabled]=\\\"disabled\\\" [attr.tabindex]=\\\"tabindex\\\">\\n            </button><button type=\\\"button\\\" pButton class=\\\"ui-splitbutton-menubutton\\\" icon=\\\"fa-caret-down\\\" [cornerStyleClass]=\\\"dir === 'rtl' ? 'ui-corner-left': 'ui-corner-right'\\\" (click)=\\\"onDropdownButtonClick($event)\\\" [disabled]=\\\"disabled\\\"></button>\\n            <div #overlay [ngClass]=\\\"'ui-menu ui-menu-dynamic ui-widget ui-widget-content ui-corner-all ui-helper-clearfix ui-shadow'\\\" [style.display]=\\\"menuVisible ? 'block' : 'none'\\\"\\n                    [ngStyle]=\\\"menuStyle\\\" [class]=\\\"menuStyleClass\\\" [@overlayState]=\\\"menuVisible ? 'visible' : 'hidden'\\\">\\n                <ul class=\\\"ui-menu-list ui-helper-reset\\\">\\n                    <ng-template ngFor let-item [ngForOf]=\\\"model\\\">\\n                        <li class=\\\"ui-menuitem ui-widget ui-corner-all\\\" role=\\\"menuitem\\\" *ngIf=\\\"item.visible !== false\\\">\\n                            <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"item.target\\\"\\n                                [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"itemClick($event, item)\\\">\\n                                <span [ngClass]=\\\"'ui-menuitem-icon fa fa-fw'\\\" [class]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span>\\n                                <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                            </a>\\n                            <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\"\\n                                class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"item.target\\\" [ngClass]=\\\"{'ui-state-disabled':item.disabled}\\\" (click)=\\\"itemClick($event, item)\\\">\\n                                <span [ngClass]=\\\"'ui-menuitem-icon fa fa-fw'\\\" [class]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span>\\n                                <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                            </a>\\n                        </li>\\n                    </ng-template>\\n                </ul>\\n            </div>\\n        </div>\\n    \",\n            animations: [\n                animations_1.trigger('overlayState', [\n                    animations_1.state('hidden', animations_1.style({\n                        opacity: 0\n                    })),\n                    animations_1.state('visible', animations_1.style({\n                        opacity: 1\n                    })),\n                    animations_1.transition('visible => hidden', animations_1.animate('400ms ease-in')),\n                    animations_1.transition('hidden => visible', animations_1.animate('400ms ease-out'))\n                ])\n            ],\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2, router_1.Router, core_1.ChangeDetectorRef])\n    ], SplitButton);\n    return SplitButton;\n}());\nexports.SplitButton = SplitButton;\nvar SplitButtonModule = /** @class */ (function () {\n    function SplitButtonModule() {\n    }\n    SplitButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, button_1.ButtonModule, router_2.RouterModule],\n            exports: [SplitButton, button_1.ButtonModule, router_2.RouterModule],\n            declarations: [SplitButton]\n        })\n    ], SplitButtonModule);\n    return SplitButtonModule;\n}());\nexports.SplitButtonModule = SplitButtonModule;\n//# sourceMappingURL=splitbutton.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/splitbutton/splitbutton.js\n// module id = 779\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar router_1 = require(\"@angular/router\");\nvar Steps = /** @class */ (function () {\n    function Steps() {\n        this.activeIndex = 0;\n        this.readonly = true;\n        this.activeIndexChange = new core_1.EventEmitter();\n    }\n    Steps.prototype.itemClick = function (event, item, i) {\n        if (this.readonly || item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        this.activeIndexChange.emit(i);\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item,\n                index: i\n            });\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], Steps.prototype, \"activeIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Steps.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Steps.prototype, \"readonly\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Steps.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Steps.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Steps.prototype, \"activeIndexChange\", void 0);\n    Steps = __decorate([\n        core_1.Component({\n            selector: 'p-steps',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-steps ui-widget ui-helper-clearfix':true,'ui-steps-readonly':readonly}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ul role=\\\"tablist\\\">\\n                <li *ngFor=\\\"let item of model; let i = index\\\" class=\\\"ui-steps-item\\\" #menuitem\\n                    [ngClass]=\\\"{'ui-state-highlight':(i === activeIndex),'ui-state-default':(i !== activeIndex),\\n                        'ui-state-disabled':item.disabled||(i !== activeIndex && readonly)}\\\">\\n                    <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, item, i)\\\" [attr.target]=\\\"item.target\\\" [attr.id]=\\\"item.id\\\">\\n                        <span class=\\\"ui-steps-number\\\">{{i + 1}}</span>\\n                        <span class=\\\"ui-steps-title\\\">{{item.label}}</span>\\n                    </a>\\n                    <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\" class=\\\"ui-menuitem-link\\\" (click)=\\\"itemClick($event, item, i)\\\" [attr.target]=\\\"item.target\\\" [attr.id]=\\\"item.id\\\">\\n                        <span class=\\\"ui-steps-number\\\">{{i + 1}}</span>\\n                        <span class=\\\"ui-steps-title\\\">{{item.label}}</span>\\n                    </a>\\n                </li>\\n            </ul>\\n        </div>\\n    \"\n        })\n    ], Steps);\n    return Steps;\n}());\nexports.Steps = Steps;\nvar StepsModule = /** @class */ (function () {\n    function StepsModule() {\n    }\n    StepsModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [Steps, router_1.RouterModule],\n            declarations: [Steps]\n        })\n    ], StepsModule);\n    return StepsModule;\n}());\nexports.StepsModule = StepsModule;\n//# sourceMappingURL=steps.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/steps/steps.js\n// module id = 780\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar idx = 0;\nvar TabViewNav = /** @class */ (function () {\n    function TabViewNav() {\n        this.orientation = 'top';\n        this.onTabClick = new core_1.EventEmitter();\n        this.onTabCloseClick = new core_1.EventEmitter();\n    }\n    TabViewNav.prototype.getDefaultHeaderClass = function (tab) {\n        var styleClass = 'ui-state-default ui-corner-' + this.orientation;\n        if (tab.headerStyleClass) {\n            styleClass = styleClass + \" \" + tab.headerStyleClass;\n        }\n        return styleClass;\n    };\n    TabViewNav.prototype.clickTab = function (event, tab) {\n        this.onTabClick.emit({\n            originalEvent: event,\n            tab: tab\n        });\n    };\n    TabViewNav.prototype.clickClose = function (event, tab) {\n        this.onTabCloseClick.emit({\n            originalEvent: event,\n            tab: tab\n        });\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TabViewNav.prototype, \"tabs\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabViewNav.prototype, \"orientation\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabViewNav.prototype, \"onTabClick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabViewNav.prototype, \"onTabCloseClick\", void 0);\n    TabViewNav = __decorate([\n        core_1.Component({\n            selector: '[p-tabViewNav]',\n            host: {\n                '[class.ui-tabview-nav]': 'true',\n                '[class.ui-helper-reset]': 'true',\n                '[class.ui-helper-clearfix]': 'true',\n                '[class.ui-widget-header]': 'true',\n                '[class.ui-corner-all]': 'true'\n            },\n            template: \"\\n        <ng-template ngFor let-tab [ngForOf]=\\\"tabs\\\">\\n            <li [class]=\\\"getDefaultHeaderClass(tab)\\\" [ngStyle]=\\\"tab.headerStyle\\\" role=\\\"presentation\\\"\\n                [ngClass]=\\\"{'ui-tabview-selected ui-state-active': tab.selected, 'ui-state-disabled': tab.disabled}\\\"\\n                (click)=\\\"clickTab($event,tab)\\\" *ngIf=\\\"!tab.closed\\\">\\n                <a [attr.id]=\\\"tab.id + '-label'\\\" href=\\\"#\\\" role=\\\"tab\\\" [attr.aria-selected]=\\\"tab.selected\\\" [attr.aria-controls]=\\\"tab.id\\\">\\n                    <span class=\\\"ui-tabview-left-icon fa\\\" [ngClass]=\\\"tab.leftIcon\\\" *ngIf=\\\"tab.leftIcon\\\"></span>\\n                    <span class=\\\"ui-tabview-title\\\">{{tab.header}}</span>\\n                    <span class=\\\"ui-tabview-right-icon fa\\\" [ngClass]=\\\"tab.rightIcon\\\" *ngIf=\\\"tab.rightIcon\\\"></span>\\n                </a>\\n                <span *ngIf=\\\"tab.closable\\\" class=\\\"ui-tabview-close fa fa-close\\\" (click)=\\\"clickClose($event,tab)\\\"></span>\\n            </li>\\n        </ng-template>\\n    \",\n        })\n    ], TabViewNav);\n    return TabViewNav;\n}());\nexports.TabViewNav = TabViewNav;\nvar TabPanel = /** @class */ (function () {\n    function TabPanel(viewContainer) {\n        this.viewContainer = viewContainer;\n        this.cache = true;\n        this.id = \"ui-tabpanel-\" + idx++;\n    }\n    TabPanel.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.templates.forEach(function (item) {\n            switch (item.getType()) {\n                case 'content':\n                    _this.contentTemplate = item.template;\n                    break;\n                default:\n                    _this.contentTemplate = item.template;\n                    break;\n            }\n        });\n    };\n    Object.defineProperty(TabPanel.prototype, \"selected\", {\n        get: function () {\n            return this._selected;\n        },\n        set: function (val) {\n            this._selected = val;\n            this.loaded = true;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TabPanel.prototype.ngOnDestroy = function () {\n        this.view = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabPanel.prototype, \"header\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabPanel.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabPanel.prototype, \"closable\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TabPanel.prototype, \"headerStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabPanel.prototype, \"headerStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabPanel.prototype, \"leftIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabPanel.prototype, \"rightIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabPanel.prototype, \"cache\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], TabPanel.prototype, \"templates\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], TabPanel.prototype, \"selected\", null);\n    TabPanel = __decorate([\n        core_1.Component({\n            selector: 'p-tabPanel',\n            template: \"\\n        <div [attr.id]=\\\"id\\\" class=\\\"ui-tabview-panel ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': !selected}\\\"\\n            role=\\\"tabpanel\\\" [attr.aria-hidden]=\\\"!selected\\\" [attr.aria-labelledby]=\\\"id + '-label'\\\" *ngIf=\\\"!closed\\\">\\n            <ng-content></ng-content>\\n            <ng-container *ngIf=\\\"contentTemplate && (cache ? loaded : selected)\\\">\\n                <ng-container *ngTemplateOutlet=\\\"contentTemplate\\\"></ng-container>\\n            </ng-container>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ViewContainerRef])\n    ], TabPanel);\n    return TabPanel;\n}());\nexports.TabPanel = TabPanel;\nvar TabView = /** @class */ (function () {\n    function TabView(el) {\n        this.el = el;\n        this.orientation = 'top';\n        this.onChange = new core_1.EventEmitter();\n        this.onClose = new core_1.EventEmitter();\n        this.activeIndexChange = new core_1.EventEmitter();\n    }\n    Object.defineProperty(TabView.prototype, \"lazy\", {\n        get: function () {\n            return this._lazy;\n        },\n        set: function (val) {\n            this._lazy = val;\n            console.log('Lazy property of TabView is deprecated, use an ngTemplate inside a TabPanel instead for Lazy Loading');\n        },\n        enumerable: true,\n        configurable: true\n    });\n    TabView.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.initTabs();\n        this.tabPanels.changes.subscribe(function (_) {\n            _this.initTabs();\n        });\n    };\n    TabView.prototype.initTabs = function () {\n        this.tabs = this.tabPanels.toArray();\n        var selectedTab = this.findSelectedTab();\n        if (!selectedTab && this.tabs.length) {\n            if (this.activeIndex != null && this.tabs.length > this.activeIndex)\n                this.tabs[this.activeIndex].selected = true;\n            else\n                this.tabs[0].selected = true;\n        }\n    };\n    TabView.prototype.open = function (event, tab) {\n        if (tab.disabled) {\n            if (event) {\n                event.preventDefault();\n            }\n            return;\n        }\n        if (!tab.selected) {\n            var selectedTab = this.findSelectedTab();\n            if (selectedTab) {\n                selectedTab.selected = false;\n            }\n            tab.selected = true;\n            var selectedTabIndex = this.findTabIndex(tab);\n            this.preventActiveIndexPropagation = true;\n            this.activeIndexChange.emit(selectedTabIndex);\n            this.onChange.emit({ originalEvent: event, index: selectedTabIndex });\n        }\n        if (event) {\n            event.preventDefault();\n        }\n    };\n    TabView.prototype.close = function (event, tab) {\n        var _this = this;\n        if (this.controlClose) {\n            this.onClose.emit({\n                originalEvent: event,\n                index: this.findTabIndex(tab),\n                close: function () {\n                    _this.closeTab(tab);\n                }\n            });\n        }\n        else {\n            this.closeTab(tab);\n            this.onClose.emit({\n                originalEvent: event,\n                index: this.findTabIndex(tab)\n            });\n        }\n        event.stopPropagation();\n    };\n    TabView.prototype.closeTab = function (tab) {\n        if (tab.disabled) {\n            return;\n        }\n        if (tab.selected) {\n            tab.selected = false;\n            for (var i = 0; i < this.tabs.length; i++) {\n                var tabPanel = this.tabs[i];\n                if (!tabPanel.closed && !tab.disabled) {\n                    tabPanel.selected = true;\n                    break;\n                }\n            }\n        }\n        tab.closed = true;\n    };\n    TabView.prototype.findSelectedTab = function () {\n        for (var i = 0; i < this.tabs.length; i++) {\n            if (this.tabs[i].selected) {\n                return this.tabs[i];\n            }\n        }\n        return null;\n    };\n    TabView.prototype.findTabIndex = function (tab) {\n        var index = -1;\n        for (var i = 0; i < this.tabs.length; i++) {\n            if (this.tabs[i] == tab) {\n                index = i;\n                break;\n            }\n        }\n        return index;\n    };\n    TabView.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Object.defineProperty(TabView.prototype, \"activeIndex\", {\n        get: function () {\n            return this._activeIndex;\n        },\n        set: function (val) {\n            this._activeIndex = val;\n            if (this.preventActiveIndexPropagation) {\n                this.preventActiveIndexPropagation = false;\n                return;\n            }\n            if (this.tabs && this.tabs.length && this._activeIndex != null && this.tabs.length > this._activeIndex) {\n                this.findSelectedTab().selected = false;\n                this.tabs[this._activeIndex].selected = true;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabView.prototype, \"orientation\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TabView.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabView.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabView.prototype, \"controlClose\", void 0);\n    __decorate([\n        core_1.ContentChildren(TabPanel),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], TabView.prototype, \"tabPanels\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabView.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabView.prototype, \"onClose\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TabView.prototype, \"activeIndexChange\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean),\n        __metadata(\"design:paramtypes\", [Boolean])\n    ], TabView.prototype, \"lazy\", null);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number),\n        __metadata(\"design:paramtypes\", [Number])\n    ], TabView.prototype, \"activeIndex\", null);\n    TabView = __decorate([\n        core_1.Component({\n            selector: 'p-tabView',\n            template: \"\\n        <div [ngClass]=\\\"'ui-tabview ui-widget ui-widget-content ui-corner-all ui-tabview-' + orientation\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ul p-tabViewNav role=\\\"tablist\\\" *ngIf=\\\"orientation!='bottom'\\\" [tabs]=\\\"tabs\\\" [orientation]=\\\"orientation\\\"\\n                (onTabClick)=\\\"open($event.originalEvent, $event.tab)\\\" (onTabCloseClick)=\\\"close($event.originalEvent, $event.tab)\\\"></ul>\\n            <div class=\\\"ui-tabview-panels\\\">\\n                <ng-content></ng-content>\\n            </div>\\n            <ul p-tabViewNav role=\\\"tablist\\\" *ngIf=\\\"orientation=='bottom'\\\" [tabs]=\\\"tabs\\\" [orientation]=\\\"orientation\\\"\\n                (onTabClick)=\\\"open($event.originalEvent, $event.tab)\\\" (onTabCloseClick)=\\\"close($event.originalEvent, $event.tab)\\\"></ul>\\n        </div>\\n    \",\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], TabView);\n    return TabView;\n}());\nexports.TabView = TabView;\nvar TabViewModule = /** @class */ (function () {\n    function TabViewModule() {\n    }\n    TabViewModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, shared_1.SharedModule],\n            exports: [TabView, TabPanel, TabViewNav, shared_1.SharedModule],\n            declarations: [TabView, TabPanel, TabViewNav]\n        })\n    ], TabViewModule);\n    return TabViewModule;\n}());\nexports.TabViewModule = TabViewModule;\n//# sourceMappingURL=tabview.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/tabview/tabview.js\n// module id = 781\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar router_1 = require(\"@angular/router\");\nvar TabMenu = /** @class */ (function () {\n    function TabMenu() {\n    }\n    TabMenu.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n        this.activeItem = item;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TabMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TabMenu.prototype, \"activeItem\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TabMenu.prototype, \"popup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TabMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TabMenu.prototype, \"styleClass\", void 0);\n    TabMenu = __decorate([\n        core_1.Component({\n            selector: 'p-tabMenu',\n            template: \"\\n        <div [ngClass]=\\\"'ui-tabmenu ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ul class=\\\"ui-tabmenu-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all\\\" role=\\\"tablist\\\">\\n                <li *ngFor=\\\"let item of model\\\" \\n                    [ngClass]=\\\"{'ui-tabmenuitem ui-state-default ui-corner-top':true,'ui-state-disabled':item.disabled,\\n                        'ui-tabmenuitem-hasicon':item.icon,'ui-state-active':activeItem==item,'ui-helper-hidden': item.visible === false}\\\"\\n                        [routerLinkActive]=\\\"'ui-state-active'\\\" [routerLinkActiveOptions]=\\\"item.routerLinkActiveOptions||{exact:false}\\\">\\n                    <a *ngIf=\\\"!item.routerLink\\\" [href]=\\\"item.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" (click)=\\\"itemClick($event,item)\\\"\\n                        [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\">\\n                        <span class=\\\"ui-menuitem-icon fa\\\" [ngClass]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                    </a>\\n                    <a *ngIf=\\\"item.routerLink\\\" [routerLink]=\\\"item.routerLink\\\" [queryParams]=\\\"item.queryParams\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" (click)=\\\"itemClick($event,item)\\\"\\n                        [attr.target]=\\\"item.target\\\" [attr.title]=\\\"item.title\\\" [attr.id]=\\\"item.id\\\">\\n                        <span class=\\\"ui-menuitem-icon fa\\\" [ngClass]=\\\"item.icon\\\" *ngIf=\\\"item.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{item.label}}</span>\\n                    </a>\\n                </li>\\n            </ul>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        })\n    ], TabMenu);\n    return TabMenu;\n}());\nexports.TabMenu = TabMenu;\nvar TabMenuModule = /** @class */ (function () {\n    function TabMenuModule() {\n    }\n    TabMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [TabMenu, router_1.RouterModule],\n            declarations: [TabMenu]\n        })\n    ], TabMenuModule);\n    return TabMenuModule;\n}());\nexports.TabMenuModule = TabMenuModule;\n//# sourceMappingURL=tabmenu.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/tabmenu/tabmenu.js\n// module id = 782\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar forms_1 = require(\"@angular/forms\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar terminalservice_1 = require(\"./terminalservice\");\nvar Terminal = /** @class */ (function () {\n    function Terminal(el, domHandler, terminalService) {\n        var _this = this;\n        this.el = el;\n        this.domHandler = domHandler;\n        this.terminalService = terminalService;\n        this.commands = [];\n        this.subscription = terminalService.responseHandler.subscribe(function (response) {\n            _this.commands[_this.commands.length - 1].response = response;\n            _this.commandProcessed = true;\n        });\n    }\n    Terminal.prototype.ngAfterViewInit = function () {\n        this.container = this.domHandler.find(this.el.nativeElement, '.ui-terminal')[0];\n    };\n    Terminal.prototype.ngAfterViewChecked = function () {\n        if (this.commandProcessed) {\n            this.container.scrollTop = this.container.scrollHeight;\n            this.commandProcessed = false;\n        }\n    };\n    Object.defineProperty(Terminal.prototype, \"response\", {\n        set: function (value) {\n            if (value) {\n                this.commands[this.commands.length - 1].response = value;\n                this.commandProcessed = true;\n            }\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Terminal.prototype.handleCommand = function (event) {\n        if (event.keyCode == 13) {\n            this.commands.push({ text: this.command });\n            this.terminalService.sendCommand(this.command);\n            this.command = '';\n        }\n    };\n    Terminal.prototype.focus = function (element) {\n        element.focus();\n    };\n    Terminal.prototype.ngOnDestroy = function () {\n        if (this.subscription) {\n            this.subscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Terminal.prototype, \"welcomeMessage\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Terminal.prototype, \"prompt\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Terminal.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Terminal.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String),\n        __metadata(\"design:paramtypes\", [String])\n    ], Terminal.prototype, \"response\", null);\n    Terminal = __decorate([\n        core_1.Component({\n            selector: 'p-terminal',\n            template: \"\\n        <div [ngClass]=\\\"'ui-terminal ui-widget ui-widget-content ui-corner-all'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" (click)=\\\"focus(in)\\\">\\n            <div *ngIf=\\\"welcomeMessage\\\">{{welcomeMessage}}</div>\\n            <div class=\\\"ui-terminal-content\\\">\\n                <div *ngFor=\\\"let command of commands\\\">\\n                    <span>{{prompt}}</span>\\n                    <span class=\\\"ui-terminal-command\\\">{{command.text}}</span>\\n                    <div>{{command.response}}</div>\\n                </div>\\n            </div>\\n            <div>\\n                <span class=\\\"ui-terminal-content-prompt\\\">{{prompt}}</span>\\n                <input #in type=\\\"text\\\" [(ngModel)]=\\\"command\\\" class=\\\"ui-terminal-input\\\" autocomplete=\\\"off\\\" (keydown)=\\\"handleCommand($event)\\\" autofocus>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, terminalservice_1.TerminalService])\n    ], Terminal);\n    return Terminal;\n}());\nexports.Terminal = Terminal;\nvar TerminalModule = /** @class */ (function () {\n    function TerminalModule() {\n    }\n    TerminalModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, forms_1.FormsModule],\n            exports: [Terminal],\n            declarations: [Terminal]\n        })\n    ], TerminalModule);\n    return TerminalModule;\n}());\nexports.TerminalModule = TerminalModule;\n//# sourceMappingURL=terminal.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/terminal/terminal.js\n// module id = 783\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar Subject_1 = require(\"rxjs/Subject\");\nvar TerminalService = /** @class */ (function () {\n    function TerminalService() {\n        this.commandSource = new Subject_1.Subject();\n        this.responseSource = new Subject_1.Subject();\n        this.commandHandler = this.commandSource.asObservable();\n        this.responseHandler = this.responseSource.asObservable();\n    }\n    TerminalService.prototype.sendCommand = function (command) {\n        if (command) {\n            this.commandSource.next(command);\n        }\n    };\n    TerminalService.prototype.sendResponse = function (response) {\n        if (response) {\n            this.responseSource.next(response);\n        }\n    };\n    TerminalService = __decorate([\n        core_1.Injectable()\n    ], TerminalService);\n    return TerminalService;\n}());\nexports.TerminalService = TerminalService;\n//# sourceMappingURL=terminalservice.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/terminal/terminalservice.js\n// module id = 784\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar router_1 = require(\"@angular/router\");\nvar TieredMenuSub = /** @class */ (function () {\n    function TieredMenuSub(domHandler) {\n        this.domHandler = domHandler;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.hideDelay = 250;\n    }\n    TieredMenuSub.prototype.onItemMouseEnter = function (event, item, menuitem) {\n        if (menuitem.disabled) {\n            return;\n        }\n        if (this.hideTimeout) {\n            clearTimeout(this.hideTimeout);\n            this.hideTimeout = null;\n        }\n        this.activeItem = item;\n        var nextElement = item.children[0].nextElementSibling;\n        if (nextElement) {\n            var sublist = nextElement.children[0];\n            if (this.autoZIndex) {\n                sublist.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n            }\n            sublist.style.zIndex = String(++domhandler_1.DomHandler.zindex);\n            sublist.style.top = '0px';\n            sublist.style.left = this.domHandler.getOuterWidth(item.children[0]) + 'px';\n        }\n    };\n    TieredMenuSub.prototype.onItemMouseLeave = function (event) {\n        var _this = this;\n        this.hideTimeout = setTimeout(function () {\n            _this.activeItem = null;\n        }, this.hideDelay);\n    };\n    TieredMenuSub.prototype.itemClick = function (event, item) {\n        if (item.disabled) {\n            event.preventDefault();\n            return true;\n        }\n        if (!item.url) {\n            event.preventDefault();\n        }\n        if (item.command) {\n            item.command({\n                originalEvent: event,\n                item: item\n            });\n        }\n    };\n    TieredMenuSub.prototype.listClick = function (event) {\n        this.activeItem = null;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TieredMenuSub.prototype, \"item\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TieredMenuSub.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TieredMenuSub.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TieredMenuSub.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TieredMenuSub.prototype, \"hideDelay\", void 0);\n    TieredMenuSub = __decorate([\n        core_1.Component({\n            selector: 'p-tieredMenuSub',\n            template: \"\\n        <ul [ngClass]=\\\"{'ui-widget-content ui-corner-all ui-shadow ui-submenu-list': !root}\\\" (click)=\\\"listClick($event)\\\">\\n            <ng-template ngFor let-child [ngForOf]=\\\"(root ? item : item.items)\\\">\\n                <li *ngIf=\\\"child.separator\\\" class=\\\"ui-menu-separator ui-widget-content\\\" [ngClass]=\\\"{'ui-helper-hidden': child.visible === false}\\\">\\n                <li *ngIf=\\\"!child.separator\\\" #listItem [ngClass]=\\\"{'ui-menuitem ui-widget ui-corner-all':true,'ui-menuitem-active':listItem==activeItem,'ui-helper-hidden': child.visible === false}\\\"\\n                    [class]=\\\"child.styleClass\\\" [ngStyle]=\\\"child.style\\\"\\n                    (mouseenter)=\\\"onItemMouseEnter($event, listItem, child)\\\" (mouseleave)=\\\"onItemMouseLeave($event)\\\">\\n                    <a *ngIf=\\\"!child.routerLink\\\" [href]=\\\"child.url||'#'\\\" class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" (click)=\\\"itemClick($event, child)\\\">\\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                    </a>\\n                    <a *ngIf=\\\"child.routerLink\\\" [routerLink]=\\\"child.routerLink\\\" [queryParams]=\\\"child.queryParams\\\" [routerLinkActive]=\\\"'ui-state-active'\\\" \\n                        [routerLinkActiveOptions]=\\\"child.routerLinkActiveOptions||{exact:false}\\\" [href]=\\\"child.url||'#'\\\" \\n                        class=\\\"ui-menuitem-link ui-corner-all\\\" [attr.target]=\\\"child.target\\\" [attr.title]=\\\"child.title\\\" [attr.id]=\\\"child.id\\\"\\n                        [ngClass]=\\\"{'ui-state-disabled':child.disabled}\\\" (click)=\\\"itemClick($event, child)\\\">\\n                        \\n                        <span class=\\\"ui-menuitem-icon fa fa-fw\\\" *ngIf=\\\"child.icon\\\" [ngClass]=\\\"child.icon\\\"></span>\\n                        <span class=\\\"ui-menuitem-text\\\">{{child.label}}</span>\\n                        <span class=\\\"ui-submenu-icon fa fa-fw fa-caret-right\\\" *ngIf=\\\"child.items\\\"></span>\\n                    </a>\\n                    <p-tieredMenuSub class=\\\"ui-submenu\\\" [item]=\\\"child\\\" *ngIf=\\\"child.items\\\" [baseZIndex]=\\\"baseZIndex\\\" [autoZIndex]=\\\"autoZIndex\\\" [hideDelay]=\\\"hideDelay\\\"></p-tieredMenuSub>\\n                </li>\\n            </ng-template>\\n        </ul>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [domhandler_1.DomHandler])\n    ], TieredMenuSub);\n    return TieredMenuSub;\n}());\nexports.TieredMenuSub = TieredMenuSub;\nvar TieredMenu = /** @class */ (function () {\n    function TieredMenu(el, domHandler, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.renderer = renderer;\n        this.autoZIndex = true;\n        this.baseZIndex = 0;\n        this.hideDelay = 250;\n    }\n    TieredMenu.prototype.ngAfterViewInit = function () {\n        this.container = this.el.nativeElement.children[0];\n        if (this.popup) {\n            if (this.appendTo) {\n                if (this.appendTo === 'body')\n                    document.body.appendChild(this.container);\n                else\n                    this.domHandler.appendChild(this.container, this.appendTo);\n            }\n        }\n    };\n    TieredMenu.prototype.toggle = function (event) {\n        if (this.container.offsetParent)\n            this.hide();\n        else\n            this.show(event);\n    };\n    TieredMenu.prototype.show = function (event) {\n        this.preventDocumentDefault = true;\n        this.moveOnTop();\n        this.container.style.display = 'block';\n        this.domHandler.absolutePosition(this.container, event.currentTarget);\n        this.domHandler.fadeIn(this.container, 250);\n        this.bindDocumentClickListener();\n    };\n    TieredMenu.prototype.hide = function () {\n        this.container.style.display = 'none';\n        this.unbindDocumentClickListener();\n    };\n    TieredMenu.prototype.moveOnTop = function () {\n        if (this.autoZIndex) {\n            this.container.style.zIndex = String(this.baseZIndex + (++domhandler_1.DomHandler.zindex));\n        }\n    };\n    TieredMenu.prototype.unbindDocumentClickListener = function () {\n        if (this.documentClickListener) {\n            this.documentClickListener();\n            this.documentClickListener = null;\n        }\n    };\n    TieredMenu.prototype.bindDocumentClickListener = function () {\n        var _this = this;\n        if (!this.documentClickListener) {\n            this.documentClickListener = this.renderer.listen('document', 'click', function () {\n                if (!_this.preventDocumentDefault) {\n                    _this.hide();\n                }\n                _this.preventDocumentDefault = false;\n            });\n        }\n    };\n    TieredMenu.prototype.ngOnDestroy = function () {\n        if (this.popup) {\n            if (this.documentClickListener) {\n                this.unbindDocumentClickListener();\n            }\n            if (this.appendTo) {\n                this.el.nativeElement.appendChild(this.container);\n            }\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TieredMenu.prototype, \"model\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TieredMenu.prototype, \"popup\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TieredMenu.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TieredMenu.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TieredMenu.prototype, \"appendTo\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TieredMenu.prototype, \"autoZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TieredMenu.prototype, \"baseZIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TieredMenu.prototype, \"hideDelay\", void 0);\n    TieredMenu = __decorate([\n        core_1.Component({\n            selector: 'p-tieredMenu',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-tieredmenu ui-widget ui-widget-content ui-corner-all':true, 'ui-tieredmenu-dynamic ui-shadow':popup}\\\" \\n            [class]=\\\"styleClass\\\" [ngStyle]=\\\"style\\\">\\n            <p-tieredMenuSub [item]=\\\"model\\\" root=\\\"root\\\" [baseZIndex]=\\\"baseZIndex\\\" [autoZIndex]=\\\"autoZIndex\\\" [hideDelay]=\\\"hideDelay\\\"></p-tieredMenuSub>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.Renderer2])\n    ], TieredMenu);\n    return TieredMenu;\n}());\nexports.TieredMenu = TieredMenu;\nvar TieredMenuModule = /** @class */ (function () {\n    function TieredMenuModule() {\n    }\n    TieredMenuModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule, router_1.RouterModule],\n            exports: [TieredMenu, router_1.RouterModule],\n            declarations: [TieredMenu, TieredMenuSub]\n        })\n    ], TieredMenuModule);\n    return TieredMenuModule;\n}());\nexports.TieredMenuModule = TieredMenuModule;\n//# sourceMappingURL=tieredmenu.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/tieredmenu/tieredmenu.js\n// module id = 785\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar forms_1 = require(\"@angular/forms\");\nexports.TOGGLEBUTTON_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return ToggleButton; }),\n    multi: true\n};\nvar ToggleButton = /** @class */ (function () {\n    function ToggleButton() {\n        this.onLabel = 'Yes';\n        this.offLabel = 'No';\n        this.onChange = new core_1.EventEmitter();\n        this.checked = false;\n        this.focus = false;\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    ToggleButton.prototype.ngAfterViewInit = function () {\n        this.checkbox = this.checkboxViewChild.nativeElement;\n    };\n    ToggleButton.prototype.getIconClass = function () {\n        var baseClass = 'ui-button-icon-left ui-togglebutton-icon fa fa-fw';\n        return baseClass + ' ' + (this.checked ? this.onIcon : this.offIcon);\n    };\n    ToggleButton.prototype.toggle = function (event) {\n        if (!this.disabled) {\n            this.checked = !this.checked;\n            this.onModelChange(this.checked);\n            this.onModelTouched();\n            this.onChange.emit({\n                originalEvent: event,\n                checked: this.checked\n            });\n            this.checkbox.focus();\n        }\n    };\n    ToggleButton.prototype.onFocus = function () {\n        this.focus = true;\n    };\n    ToggleButton.prototype.onBlur = function () {\n        this.focus = false;\n        this.onModelTouched();\n    };\n    ToggleButton.prototype.writeValue = function (value) {\n        this.checked = value;\n    };\n    ToggleButton.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    ToggleButton.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    ToggleButton.prototype.setDisabledState = function (val) {\n        this.disabled = val;\n    };\n    Object.defineProperty(ToggleButton.prototype, \"hasOnLabel\", {\n        get: function () {\n            return this.onLabel && this.onLabel.length > 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ToggleButton.prototype, \"hasOffLabel\", {\n        get: function () {\n            return this.onLabel && this.onLabel.length > 0;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"onLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"offLabel\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"onIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"offIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], ToggleButton.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], ToggleButton.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], ToggleButton.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], ToggleButton.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], ToggleButton.prototype, \"onChange\", void 0);\n    __decorate([\n        core_1.ViewChild('checkbox'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], ToggleButton.prototype, \"checkboxViewChild\", void 0);\n    ToggleButton = __decorate([\n        core_1.Component({\n            selector: 'p-toggleButton',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-button ui-togglebutton ui-widget ui-state-default ui-corner-all': true, 'ui-button-text-only': (!onIcon&&!offIcon), \\n                'ui-button-text-icon-left': (onIcon&&offIcon&&hasOnLabel&&hasOffLabel), 'ui-button-icon-only': (onIcon&&offIcon&&!hasOnLabel&&!hasOffLabel),\\n                'ui-state-active': checked,'ui-state-focus':focus,'ui-state-disabled':disabled}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" \\n                (click)=\\\"toggle($event)\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #checkbox type=\\\"checkbox\\\" [attr.id]=\\\"inputId\\\" [checked]=\\\"checked\\\" (focus)=\\\"onFocus()\\\" (blur)=\\\"onBlur()\\\" [attr.tabindex]=\\\"tabindex\\\">\\n            </div>\\n            <span *ngIf=\\\"onIcon||offIcon\\\" [class]=\\\"getIconClass()\\\"></span>\\n            <span class=\\\"ui-button-text ui-unselectable-text\\\">{{checked ? hasOnLabel ? onLabel : 'ui-btn' : hasOffLabel ? offLabel : 'ui-btn'}}</span>\\n        </div>\\n    \",\n            providers: [exports.TOGGLEBUTTON_VALUE_ACCESSOR]\n        })\n    ], ToggleButton);\n    return ToggleButton;\n}());\nexports.ToggleButton = ToggleButton;\nvar ToggleButtonModule = /** @class */ (function () {\n    function ToggleButtonModule() {\n    }\n    ToggleButtonModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [ToggleButton],\n            declarations: [ToggleButton]\n        })\n    ], ToggleButtonModule);\n    return ToggleButtonModule;\n}());\nexports.ToggleButtonModule = ToggleButtonModule;\n//# sourceMappingURL=togglebutton.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/togglebutton/togglebutton.js\n// module id = 786\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar Toolbar = /** @class */ (function () {\n    function Toolbar(el) {\n        this.el = el;\n    }\n    Toolbar.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Toolbar.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Toolbar.prototype, \"styleClass\", void 0);\n    Toolbar = __decorate([\n        core_1.Component({\n            selector: 'p-toolbar',\n            template: \"\\n        <div [ngClass]=\\\"'ui-toolbar ui-widget ui-widget-header ui-corner-all ui-helper-clearfix'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <ng-content></ng-content>\\n        </div>\\n    \"\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef])\n    ], Toolbar);\n    return Toolbar;\n}());\nexports.Toolbar = Toolbar;\nvar ToolbarModule = /** @class */ (function () {\n    function ToolbarModule() {\n    }\n    ToolbarModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Toolbar],\n            declarations: [Toolbar]\n        })\n    ], ToolbarModule);\n    return ToolbarModule;\n}());\nexports.ToolbarModule = ToolbarModule;\n//# sourceMappingURL=toolbar.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/toolbar/toolbar.js\n// module id = 787\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar core_2 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar shared_2 = require(\"../common/shared\");\nvar treedragdropservice_1 = require(\"../common/treedragdropservice\");\nvar UITreeNode = /** @class */ (function () {\n    function UITreeNode(tree) {\n        this.tree = tree;\n    }\n    UITreeNode_1 = UITreeNode;\n    UITreeNode.prototype.ngOnInit = function () {\n        this.node.parent = this.parentNode;\n    };\n    UITreeNode.prototype.getIcon = function () {\n        var icon;\n        if (this.node.icon)\n            icon = this.node.icon;\n        else\n            icon = this.node.expanded && this.node.children && this.node.children.length ? this.node.expandedIcon : this.node.collapsedIcon;\n        return UITreeNode_1.ICON_CLASS + ' ' + icon;\n    };\n    UITreeNode.prototype.isLeaf = function () {\n        return this.node.leaf == false ? false : !(this.node.children && this.node.children.length);\n    };\n    UITreeNode.prototype.toggle = function (event) {\n        if (this.node.expanded)\n            this.tree.onNodeCollapse.emit({ originalEvent: event, node: this.node });\n        else\n            this.tree.onNodeExpand.emit({ originalEvent: event, node: this.node });\n        this.node.expanded = !this.node.expanded;\n    };\n    UITreeNode.prototype.onNodeClick = function (event) {\n        this.tree.onNodeClick(event, this.node);\n    };\n    UITreeNode.prototype.onNodeTouchEnd = function () {\n        this.tree.onNodeTouchEnd();\n    };\n    UITreeNode.prototype.onNodeRightClick = function (event) {\n        this.tree.onNodeRightClick(event, this.node);\n    };\n    UITreeNode.prototype.isSelected = function () {\n        return this.tree.isSelected(this.node);\n    };\n    UITreeNode.prototype.onDropPoint = function (event, position) {\n        event.preventDefault();\n        var dragNode = this.tree.dragNode;\n        var dragNodeIndex = this.tree.dragNodeIndex;\n        var dragNodeScope = this.tree.dragNodeScope;\n        var isValidDropPointIndex = this.tree.dragNodeTree === this.tree ? (position === 1 || dragNodeIndex !== this.index - 1) : true;\n        if (this.tree.allowDrop(dragNode, this.node, dragNodeScope) && isValidDropPointIndex) {\n            var newNodeList = this.node.parent ? this.node.parent.children : this.tree.value;\n            this.tree.dragNodeSubNodes.splice(dragNodeIndex, 1);\n            var dropIndex = this.index;\n            if (position < 0) {\n                dropIndex = (this.tree.dragNodeSubNodes === newNodeList) ? ((this.tree.dragNodeIndex > this.index) ? this.index : this.index - 1) : this.index;\n                newNodeList.splice(dropIndex, 0, dragNode);\n            }\n            else {\n                dropIndex = newNodeList.length;\n                newNodeList.push(dragNode);\n            }\n            this.tree.dragDropService.stopDrag({\n                node: dragNode,\n                subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n                index: dragNodeIndex\n            });\n            this.tree.onNodeDrop.emit({\n                originalEvent: event,\n                dragNode: dragNode,\n                dropNode: this.node,\n                dropIndex: dropIndex\n            });\n        }\n        this.draghoverPrev = false;\n        this.draghoverNext = false;\n    };\n    UITreeNode.prototype.onDropPointDragOver = function (event) {\n        event.dataTransfer.dropEffect = 'move';\n        event.preventDefault();\n    };\n    UITreeNode.prototype.onDropPointDragEnter = function (event, position) {\n        if (this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {\n            if (position < 0)\n                this.draghoverPrev = true;\n            else\n                this.draghoverNext = true;\n        }\n    };\n    UITreeNode.prototype.onDropPointDragLeave = function (event) {\n        this.draghoverPrev = false;\n        this.draghoverNext = false;\n    };\n    UITreeNode.prototype.onDragStart = function (event) {\n        if (this.tree.draggableNodes && this.node.draggable !== false) {\n            event.dataTransfer.setData(\"text\", \"data\");\n            this.tree.dragDropService.startDrag({\n                tree: this,\n                node: this.node,\n                subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n                index: this.index,\n                scope: this.tree.draggableScope\n            });\n        }\n        else {\n            event.preventDefault();\n        }\n    };\n    UITreeNode.prototype.onDragStop = function (event) {\n        this.tree.dragDropService.stopDrag({\n            node: this.node,\n            subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n            index: this.index\n        });\n    };\n    UITreeNode.prototype.onDropNodeDragOver = function (event) {\n        event.dataTransfer.dropEffect = 'move';\n        if (this.tree.droppableNodes) {\n            event.preventDefault();\n            event.stopPropagation();\n        }\n    };\n    UITreeNode.prototype.onDropNode = function (event) {\n        if (this.tree.droppableNodes && this.node.droppable !== false) {\n            event.preventDefault();\n            event.stopPropagation();\n            var dragNode = this.tree.dragNode;\n            if (this.tree.allowDrop(dragNode, this.node, this.tree.dragNodeScope)) {\n                var dragNodeIndex = this.tree.dragNodeIndex;\n                this.tree.dragNodeSubNodes.splice(dragNodeIndex, 1);\n                if (this.node.children)\n                    this.node.children.push(dragNode);\n                else\n                    this.node.children = [dragNode];\n                this.tree.dragDropService.stopDrag({\n                    node: dragNode,\n                    subNodes: this.node.parent ? this.node.parent.children : this.tree.value,\n                    index: this.tree.dragNodeIndex\n                });\n                this.tree.onNodeDrop.emit({\n                    originalEvent: event,\n                    dragNode: dragNode,\n                    dropNode: this.node,\n                    index: this.index\n                });\n            }\n        }\n        this.draghoverNode = false;\n    };\n    UITreeNode.prototype.onDropNodeDragEnter = function (event) {\n        if (this.tree.droppableNodes && this.node.droppable !== false && this.tree.allowDrop(this.tree.dragNode, this.node, this.tree.dragNodeScope)) {\n            this.draghoverNode = true;\n        }\n    };\n    UITreeNode.prototype.onDropNodeDragLeave = function (event) {\n        if (this.tree.droppableNodes) {\n            var rect = event.currentTarget.getBoundingClientRect();\n            if (event.x > rect.left + rect.width || event.x < rect.left || event.y >= Math.floor(rect.top + rect.height) || event.y < rect.top) {\n                this.draghoverNode = false;\n            }\n        }\n    };\n    UITreeNode.ICON_CLASS = 'ui-treenode-icon fa fa-fw';\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UITreeNode.prototype, \"node\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UITreeNode.prototype, \"parentNode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], UITreeNode.prototype, \"root\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], UITreeNode.prototype, \"index\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], UITreeNode.prototype, \"firstChild\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], UITreeNode.prototype, \"lastChild\", void 0);\n    UITreeNode = UITreeNode_1 = __decorate([\n        core_1.Component({\n            selector: 'p-treeNode',\n            template: \"\\n        <ng-template [ngIf]=\\\"node\\\">\\n            <li *ngIf=\\\"tree.droppableNodes\\\" class=\\\"ui-treenode-droppoint\\\" [ngClass]=\\\"{'ui-treenode-droppoint-active ui-state-highlight':draghoverPrev}\\\"\\n            (drop)=\\\"onDropPoint($event,-1)\\\" (dragover)=\\\"onDropPointDragOver($event)\\\" (dragenter)=\\\"onDropPointDragEnter($event,-1)\\\" (dragleave)=\\\"onDropPointDragLeave($event)\\\"></li>\\n            <li *ngIf=\\\"!tree.horizontal\\\" [ngClass]=\\\"['ui-treenode',node.styleClass||'', isLeaf() ? 'ui-treenode-leaf': '']\\\">\\n                <div class=\\\"ui-treenode-content\\\" (click)=\\\"onNodeClick($event)\\\" (contextmenu)=\\\"onNodeRightClick($event)\\\" (touchend)=\\\"onNodeTouchEnd()\\\"\\n                    (drop)=\\\"onDropNode($event)\\\" (dragover)=\\\"onDropNodeDragOver($event)\\\" (dragenter)=\\\"onDropNodeDragEnter($event)\\\" (dragleave)=\\\"onDropNodeDragLeave($event)\\\"\\n                    [ngClass]=\\\"{'ui-treenode-selectable':tree.selectionMode && node.selectable !== false,'ui-treenode-dragover':draghoverNode, 'ui-treenode-content-selected':isSelected()}\\\" [draggable]=\\\"tree.draggableNodes\\\" (dragstart)=\\\"onDragStart($event)\\\" (dragend)=\\\"onDragStop($event)\\\">\\n                    <span class=\\\"ui-tree-toggler  fa fa-fw\\\" [ngClass]=\\\"{'fa-caret-right':!node.expanded,'fa-caret-down':node.expanded}\\\"\\n                            (click)=\\\"toggle($event)\\\"></span\\n                    ><div class=\\\"ui-chkbox\\\" *ngIf=\\\"tree.selectionMode == 'checkbox'\\\"><div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\">\\n                        <span class=\\\"ui-chkbox-icon ui-clickable fa\\\" \\n                            [ngClass]=\\\"{'fa-check':isSelected(),'fa-minus':node.partialSelected}\\\"></span></div></div\\n                    ><span [class]=\\\"getIcon()\\\" *ngIf=\\\"node.icon||node.expandedIcon||node.collapsedIcon\\\"></span\\n                    ><span class=\\\"ui-treenode-label ui-corner-all\\\" \\n                        [ngClass]=\\\"{'ui-state-highlight':isSelected()}\\\">\\n                            <span *ngIf=\\\"!tree.getTemplateForNode(node)\\\">{{node.label}}</span>\\n                            <span *ngIf=\\\"tree.getTemplateForNode(node)\\\">\\n                                <ng-container *ngTemplateOutlet=\\\"tree.getTemplateForNode(node); context: {$implicit: node}\\\"></ng-container>\\n                            </span>\\n                    </span>\\n                </div>\\n                <ul class=\\\"ui-treenode-children\\\" style=\\\"display: none;\\\" *ngIf=\\\"node.children && node.expanded\\\" [style.display]=\\\"node.expanded ? 'block' : 'none'\\\">\\n                    <p-treeNode *ngFor=\\\"let childNode of node.children;let firstChild=first;let lastChild=last; let index=index\\\" [node]=\\\"childNode\\\" [parentNode]=\\\"node\\\"\\n                        [firstChild]=\\\"firstChild\\\" [lastChild]=\\\"lastChild\\\" [index]=\\\"index\\\"></p-treeNode>\\n                </ul>\\n            </li>\\n            <li *ngIf=\\\"tree.droppableNodes&&lastChild\\\" class=\\\"ui-treenode-droppoint\\\" [ngClass]=\\\"{'ui-treenode-droppoint-active ui-state-highlight':draghoverNext}\\\"\\n            (drop)=\\\"onDropPoint($event,1)\\\" (dragover)=\\\"onDropPointDragOver($event)\\\" (dragenter)=\\\"onDropPointDragEnter($event,1)\\\" (dragleave)=\\\"onDropPointDragLeave($event)\\\"></li>\\n            <table *ngIf=\\\"tree.horizontal\\\" [class]=\\\"node.styleClass\\\">\\n                <tbody>\\n                    <tr>\\n                        <td class=\\\"ui-treenode-connector\\\" *ngIf=\\\"!root\\\">\\n                            <table class=\\\"ui-treenode-connector-table\\\">\\n                                <tbody>\\n                                    <tr>\\n                                        <td [ngClass]=\\\"{'ui-treenode-connector-line':!firstChild}\\\"></td>\\n                                    </tr>\\n                                    <tr>\\n                                        <td [ngClass]=\\\"{'ui-treenode-connector-line':!lastChild}\\\"></td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </td>\\n                        <td class=\\\"ui-treenode\\\" [ngClass]=\\\"{'ui-treenode-collapsed':!node.expanded}\\\">\\n                            <div class=\\\"ui-treenode-content ui-state-default ui-corner-all\\\" \\n                                [ngClass]=\\\"{'ui-treenode-selectable':tree.selectionMode,'ui-state-highlight':isSelected()}\\\" (click)=\\\"onNodeClick($event)\\\" (contextmenu)=\\\"onNodeRightClick($event)\\\"\\n                                (touchend)=\\\"onNodeTouchEnd()\\\">\\n                                <span class=\\\"ui-tree-toggler fa fa-fw\\\" [ngClass]=\\\"{'fa-plus':!node.expanded,'fa-minus':node.expanded}\\\" *ngIf=\\\"!isLeaf()\\\"\\n                                        (click)=\\\"toggle($event)\\\"></span\\n                                ><span [class]=\\\"getIcon()\\\" *ngIf=\\\"node.icon||node.expandedIcon||node.collapsedIcon\\\"></span\\n                                ><span class=\\\"ui-treenode-label ui-corner-all\\\">\\n                                        <span *ngIf=\\\"!tree.getTemplateForNode(node)\\\">{{node.label}}</span>\\n                                        <span *ngIf=\\\"tree.getTemplateForNode(node)\\\">\\n                                        <ng-container *ngTemplateOutlet=\\\"tree.getTemplateForNode(node); context: {$implicit: node}\\\"></ng-container>\\n                                        </span>\\n                                </span>\\n                            </div>\\n                        </td>\\n                        <td class=\\\"ui-treenode-children-container\\\" *ngIf=\\\"node.children && node.expanded\\\" [style.display]=\\\"node.expanded ? 'table-cell' : 'none'\\\">\\n                            <div class=\\\"ui-treenode-children\\\">\\n                                <p-treeNode *ngFor=\\\"let childNode of node.children;let firstChild=first;let lastChild=last;\\\" [node]=\\\"childNode\\\" \\n                                        [firstChild]=\\\"firstChild\\\" [lastChild]=\\\"lastChild\\\"></p-treeNode>\\n                            </div>\\n                        </td>\\n                    </tr>\\n                </tbody>\\n            </table>\\n        </ng-template>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return Tree; }))),\n        __metadata(\"design:paramtypes\", [Tree])\n    ], UITreeNode);\n    return UITreeNode;\n    var UITreeNode_1;\n}());\nexports.UITreeNode = UITreeNode;\nvar Tree = /** @class */ (function () {\n    function Tree(el, dragDropService) {\n        this.el = el;\n        this.dragDropService = dragDropService;\n        this.selectionChange = new core_1.EventEmitter();\n        this.onNodeSelect = new core_1.EventEmitter();\n        this.onNodeUnselect = new core_1.EventEmitter();\n        this.onNodeExpand = new core_1.EventEmitter();\n        this.onNodeCollapse = new core_1.EventEmitter();\n        this.onNodeContextMenuSelect = new core_1.EventEmitter();\n        this.onNodeDrop = new core_1.EventEmitter();\n        this.layout = 'vertical';\n        this.metaKeySelection = true;\n        this.propagateSelectionUp = true;\n        this.propagateSelectionDown = true;\n        this.loadingIcon = 'fa-circle-o-notch';\n        this.emptyMessage = 'No records found';\n    }\n    Tree.prototype.ngOnInit = function () {\n        var _this = this;\n        if (this.droppableNodes) {\n            this.dragStartSubscription = this.dragDropService.dragStart$.subscribe(function (event) {\n                _this.dragNodeTree = event.tree;\n                _this.dragNode = event.node;\n                _this.dragNodeSubNodes = event.subNodes;\n                _this.dragNodeIndex = event.index;\n                _this.dragNodeScope = event.scope;\n            });\n            this.dragStopSubscription = this.dragDropService.dragStop$.subscribe(function (event) {\n                _this.dragNodeTree = null;\n                _this.dragNode = null;\n                _this.dragNodeSubNodes = null;\n                _this.dragNodeIndex = null;\n                _this.dragNodeScope = null;\n                _this.dragHover = false;\n            });\n        }\n    };\n    Object.defineProperty(Tree.prototype, \"horizontal\", {\n        get: function () {\n            return this.layout == 'horizontal';\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Tree.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        if (this.templates.length) {\n            this.templateMap = {};\n        }\n        this.templates.forEach(function (item) {\n            _this.templateMap[item.name] = item.template;\n        });\n    };\n    Tree.prototype.onNodeClick = function (event, node) {\n        var eventTarget = event.target;\n        if (eventTarget.className && eventTarget.className.indexOf('ui-tree-toggler') === 0) {\n            return;\n        }\n        else if (this.selectionMode) {\n            if (node.selectable === false) {\n                return;\n            }\n            var index_1 = this.findIndexInSelection(node);\n            var selected = (index_1 >= 0);\n            if (this.isCheckboxSelectionMode()) {\n                if (selected) {\n                    if (this.propagateSelectionDown)\n                        this.propagateDown(node, false);\n                    else\n                        this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                    if (this.propagateSelectionUp && node.parent) {\n                        this.propagateUp(node.parent, false);\n                    }\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                }\n                else {\n                    if (this.propagateSelectionDown)\n                        this.propagateDown(node, true);\n                    else\n                        this.selection = (this.selection || []).concat([node]);\n                    if (this.propagateSelectionUp && node.parent) {\n                        this.propagateUp(node.parent, true);\n                    }\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            }\n            else {\n                var metaSelection = this.nodeTouched ? false : this.metaKeySelection;\n                if (metaSelection) {\n                    var metaKey = (event.metaKey || event.ctrlKey);\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(null);\n                        }\n                        else {\n                            this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                            this.selectionChange.emit(this.selection);\n                        }\n                        this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                    }\n                    else {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(node);\n                        }\n                        else if (this.isMultipleSelectionMode()) {\n                            this.selection = (!metaKey) ? [] : this.selection || [];\n                            this.selection = this.selection.concat([node]);\n                            this.selectionChange.emit(this.selection);\n                        }\n                        this.onNodeSelect.emit({ originalEvent: event, node: node });\n                    }\n                }\n                else {\n                    if (this.isSingleSelectionMode()) {\n                        if (selected) {\n                            this.selection = null;\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        }\n                        else {\n                            this.selection = node;\n                            this.onNodeSelect.emit({ originalEvent: event, node: node });\n                        }\n                    }\n                    else {\n                        if (selected) {\n                            this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        }\n                        else {\n                            this.selection = (this.selection || []).concat([node]);\n                            this.onNodeSelect.emit({ originalEvent: event, node: node });\n                        }\n                    }\n                    this.selectionChange.emit(this.selection);\n                }\n            }\n        }\n        this.nodeTouched = false;\n    };\n    Tree.prototype.onNodeTouchEnd = function () {\n        this.nodeTouched = true;\n    };\n    Tree.prototype.onNodeRightClick = function (event, node) {\n        if (this.contextMenu) {\n            var eventTarget = event.target;\n            if (eventTarget.className && eventTarget.className.indexOf('ui-tree-toggler') === 0) {\n                return;\n            }\n            else {\n                var index = this.findIndexInSelection(node);\n                var selected = (index >= 0);\n                if (!selected) {\n                    if (this.isSingleSelectionMode())\n                        this.selectionChange.emit(node);\n                    else\n                        this.selectionChange.emit([node]);\n                }\n                this.contextMenu.show(event);\n                this.onNodeContextMenuSelect.emit({ originalEvent: event, node: node });\n            }\n        }\n    };\n    Tree.prototype.findIndexInSelection = function (node) {\n        var index = -1;\n        if (this.selectionMode && this.selection) {\n            if (this.isSingleSelectionMode()) {\n                index = (this.selection == node) ? 0 : -1;\n            }\n            else {\n                for (var i = 0; i < this.selection.length; i++) {\n                    if (this.selection[i] == node) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n        return index;\n    };\n    Tree.prototype.propagateUp = function (node, select) {\n        if (node.children && node.children.length) {\n            var selectedCount = 0;\n            var childPartialSelected = false;\n            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                if (this.isSelected(child)) {\n                    selectedCount++;\n                }\n                else if (child.partialSelected) {\n                    childPartialSelected = true;\n                }\n            }\n            if (select && selectedCount == node.children.length) {\n                this.selection = (this.selection || []).concat([node]);\n                node.partialSelected = false;\n            }\n            else {\n                if (!select) {\n                    var index_2 = this.findIndexInSelection(node);\n                    if (index_2 >= 0) {\n                        this.selection = this.selection.filter(function (val, i) { return i != index_2; });\n                    }\n                }\n                if (childPartialSelected || selectedCount > 0 && selectedCount != node.children.length)\n                    node.partialSelected = true;\n                else\n                    node.partialSelected = false;\n            }\n        }\n        var parent = node.parent;\n        if (parent) {\n            this.propagateUp(parent, select);\n        }\n    };\n    Tree.prototype.propagateDown = function (node, select) {\n        var index = this.findIndexInSelection(node);\n        if (select && index == -1) {\n            this.selection = (this.selection || []).concat([node]);\n        }\n        else if (!select && index > -1) {\n            this.selection = this.selection.filter(function (val, i) { return i != index; });\n        }\n        node.partialSelected = false;\n        if (node.children && node.children.length) {\n            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                this.propagateDown(child, select);\n            }\n        }\n    };\n    Tree.prototype.isSelected = function (node) {\n        return this.findIndexInSelection(node) != -1;\n    };\n    Tree.prototype.isSingleSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'single';\n    };\n    Tree.prototype.isMultipleSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'multiple';\n    };\n    Tree.prototype.isCheckboxSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'checkbox';\n    };\n    Tree.prototype.getTemplateForNode = function (node) {\n        if (this.templateMap)\n            return node.type ? this.templateMap[node.type] : this.templateMap['default'];\n        else\n            return null;\n    };\n    Tree.prototype.onDragOver = function (event) {\n        if (this.droppableNodes && (!this.value || this.value.length === 0)) {\n            event.dataTransfer.dropEffect = 'move';\n            event.preventDefault();\n        }\n    };\n    Tree.prototype.onDrop = function (event) {\n        if (this.droppableNodes && (!this.value || this.value.length === 0)) {\n            event.preventDefault();\n            var dragNode = this.dragNode;\n            if (this.allowDrop(dragNode, null, this.dragNodeScope)) {\n                var dragNodeIndex = this.dragNodeIndex;\n                this.dragNodeSubNodes.splice(dragNodeIndex, 1);\n                this.value = this.value || [];\n                this.value.push(dragNode);\n                this.dragDropService.stopDrag({\n                    node: dragNode\n                });\n            }\n        }\n    };\n    Tree.prototype.onDragEnter = function (event) {\n        if (this.droppableNodes && this.allowDrop(this.dragNode, null, this.dragNodeScope)) {\n            this.dragHover = true;\n        }\n    };\n    Tree.prototype.onDragLeave = function (event) {\n        if (this.droppableNodes) {\n            var rect = event.currentTarget.getBoundingClientRect();\n            if (event.x > rect.left + rect.width || event.x < rect.left || event.y > rect.top + rect.height || event.y < rect.top) {\n                this.dragHover = false;\n            }\n        }\n    };\n    Tree.prototype.allowDrop = function (dragNode, dropNode, dragNodeScope) {\n        if (!dragNode) {\n            //prevent random html elements to be dragged\n            return false;\n        }\n        else if (this.isValidDragScope(dragNodeScope)) {\n            var allow = true;\n            if (dropNode) {\n                if (dragNode === dropNode) {\n                    allow = false;\n                }\n                else {\n                    var parent_1 = dropNode.parent;\n                    while (parent_1 != null) {\n                        if (parent_1 === dragNode) {\n                            allow = false;\n                            break;\n                        }\n                        parent_1 = parent_1.parent;\n                    }\n                }\n            }\n            return allow;\n        }\n        else {\n            return false;\n        }\n    };\n    Tree.prototype.isValidDragScope = function (dragScope) {\n        var dropScope = this.droppableScope;\n        if (dropScope) {\n            if (typeof dropScope === 'string') {\n                if (typeof dragScope === 'string')\n                    return dropScope === dragScope;\n                else if (dragScope instanceof Array)\n                    return dragScope.indexOf(dropScope) != -1;\n            }\n            else if (dropScope instanceof Array) {\n                if (typeof dragScope === 'string') {\n                    return dropScope.indexOf(dragScope) != -1;\n                }\n                else if (dragScope instanceof Array) {\n                    for (var _i = 0, dropScope_1 = dropScope; _i < dropScope_1.length; _i++) {\n                        var s = dropScope_1[_i];\n                        for (var _a = 0, dragScope_1 = dragScope; _a < dragScope_1.length; _a++) {\n                            var ds = dragScope_1[_a];\n                            if (s === ds) {\n                                return true;\n                            }\n                        }\n                    }\n                }\n            }\n            return false;\n        }\n        else {\n            return true;\n        }\n    };\n    Tree.prototype.getBlockableElement = function () {\n        return this.el.nativeElement.children[0];\n    };\n    Tree.prototype.ngOnDestroy = function () {\n        if (this.dragStartSubscription) {\n            this.dragStartSubscription.unsubscribe();\n        }\n        if (this.dragStopSubscription) {\n            this.dragStopSubscription.unsubscribe();\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], Tree.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"selection\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"selectionChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeUnselect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeExpand\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeCollapse\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeContextMenuSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], Tree.prototype, \"onNodeDrop\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"contextMenu\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"layout\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"draggableScope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], Tree.prototype, \"droppableScope\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"draggableNodes\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"droppableNodes\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"propagateSelectionUp\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"propagateSelectionDown\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], Tree.prototype, \"loading\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"loadingIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], Tree.prototype, \"emptyMessage\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_2.PrimeTemplate),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], Tree.prototype, \"templates\", void 0);\n    Tree = __decorate([\n        core_1.Component({\n            selector: 'p-tree',\n            template: \"\\n        <div [ngClass]=\\\"{'ui-tree ui-widget ui-widget-content ui-corner-all':true,'ui-tree-selectable':selectionMode,'ui-treenode-dragover':dragHover,'ui-tree-loading': loading}\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"!horizontal\\\"\\n            (drop)=\\\"onDrop($event)\\\" (dragover)=\\\"onDragOver($event)\\\" (dragenter)=\\\"onDragEnter($event)\\\" (dragleave)=\\\"onDragLeave($event)\\\">\\n            <div class=\\\"ui-tree-loading-mask ui-widget-overlay\\\" *ngIf=\\\"loading\\\"></div>\\n            <div class=\\\"ui-tree-loading-content\\\" *ngIf=\\\"loading\\\">\\n                <i [class]=\\\"'fa fa-spin fa-2x ' + loadingIcon\\\"></i>\\n            </div>\\n            <ul class=\\\"ui-tree-container\\\" *ngIf=\\\"value\\\">\\n                <p-treeNode *ngFor=\\\"let node of value;let firstChild=first;let lastChild=last; let index=index\\\" [node]=\\\"node\\\" \\n                [firstChild]=\\\"firstChild\\\" [lastChild]=\\\"lastChild\\\" [index]=\\\"index\\\"></p-treeNode>\\n            </ul>\\n            <div class=\\\"ui-tree-empty-message\\\" *ngIf=\\\"!loading && !value\\\">{{emptyMessage}}</div>\\n        </div>\\n        <div [ngClass]=\\\"{'ui-tree ui-tree-horizontal ui-widget ui-widget-content ui-corner-all':true,'ui-tree-selectable':selectionMode}\\\"  [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\" *ngIf=\\\"horizontal\\\">\\n            <div class=\\\"ui-tree-loading ui-widget-overlay\\\" *ngIf=\\\"loading\\\"></div>\\n            <div class=\\\"ui-tree-loading-content\\\" *ngIf=\\\"loading\\\">\\n                <i [class]=\\\"'fa fa-spin fa-2x ' + loadingIcon\\\"></i>\\n            </div>\\n            <table *ngIf=\\\"value&&value[0]\\\">\\n                <p-treeNode [node]=\\\"value[0]\\\" [root]=\\\"true\\\"></p-treeNode>\\n            </table>\\n            <div class=\\\"ui-tree-empty-message\\\" *ngIf=\\\"!loading && !value\\\">{{emptyMessage}}</div>\\n        </div>\\n    \"\n        }),\n        __param(1, core_2.Optional()),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, treedragdropservice_1.TreeDragDropService])\n    ], Tree);\n    return Tree;\n}());\nexports.Tree = Tree;\nvar TreeModule = /** @class */ (function () {\n    function TreeModule() {\n    }\n    TreeModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [Tree, shared_1.SharedModule],\n            declarations: [Tree, UITreeNode]\n        })\n    ], TreeModule);\n    return TreeModule;\n}());\nexports.TreeModule = TreeModule;\n//# sourceMappingURL=tree.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/tree/tree.js\n// module id = 788\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nvar __param = (this && this.__param) || function (paramIndex, decorator) {\n    return function (target, key) { decorator(target, key, paramIndex); }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar shared_1 = require(\"../common/shared\");\nvar shared_2 = require(\"../common/shared\");\nvar domhandler_1 = require(\"../dom/domhandler\");\nvar UITreeRow = /** @class */ (function () {\n    function UITreeRow(treeTable) {\n        this.treeTable = treeTable;\n        this.level = 0;\n        this.labelExpand = \"Expand\";\n        this.labelCollapse = \"Collapse\";\n    }\n    UITreeRow.prototype.ngOnInit = function () {\n        this.node.parent = this.parentNode;\n    };\n    UITreeRow.prototype.toggle = function (event) {\n        if (this.node.expanded)\n            this.treeTable.onNodeCollapse.emit({ originalEvent: event, node: this.node });\n        else\n            this.treeTable.onNodeExpand.emit({ originalEvent: event, node: this.node });\n        this.node.expanded = !this.node.expanded;\n        event.preventDefault();\n    };\n    UITreeRow.prototype.isLeaf = function () {\n        return this.node.leaf == false ? false : !(this.node.children && this.node.children.length);\n    };\n    UITreeRow.prototype.isSelected = function () {\n        return this.treeTable.isSelected(this.node);\n    };\n    UITreeRow.prototype.onRowClick = function (event) {\n        this.treeTable.onRowClick(event, this.node);\n    };\n    UITreeRow.prototype.onRowRightClick = function (event) {\n        this.treeTable.onRowRightClick(event, this.node);\n    };\n    UITreeRow.prototype.rowDblClick = function (event) {\n        this.treeTable.onRowDblclick.emit({ originalEvent: event, node: this.node });\n    };\n    UITreeRow.prototype.onRowTouchEnd = function () {\n        this.treeTable.onRowTouchEnd();\n    };\n    UITreeRow.prototype.resolveFieldData = function (data, field) {\n        if (data && field) {\n            if (field.indexOf('.') == -1) {\n                return data[field];\n            }\n            else {\n                var fields = field.split('.');\n                var value = data;\n                for (var i = 0, len = fields.length; i < len; ++i) {\n                    value = value[fields[i]];\n                }\n                return value;\n            }\n        }\n        else {\n            return null;\n        }\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UITreeRow.prototype, \"node\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], UITreeRow.prototype, \"parentNode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], UITreeRow.prototype, \"level\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UITreeRow.prototype, \"labelExpand\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], UITreeRow.prototype, \"labelCollapse\", void 0);\n    UITreeRow = __decorate([\n        core_1.Component({\n            selector: '[pTreeRow]',\n            template: \"\\n        <div [class]=\\\"node.styleClass\\\" [ngClass]=\\\"{'ui-treetable-row': true, 'ui-state-highlight':isSelected(),'ui-treetable-row-selectable':treeTable.selectionMode && node.selectable !== false}\\\">\\n            <td *ngFor=\\\"let col of treeTable.columns; let i=index\\\" [ngStyle]=\\\"col.bodyStyle||col.style\\\" [class]=\\\"col.bodyStyleClass||col.styleClass\\\" (click)=\\\"onRowClick($event)\\\" (dblclick)=\\\"rowDblClick($event)\\\" (touchend)=\\\"onRowTouchEnd()\\\" (contextmenu)=\\\"onRowRightClick($event)\\\">\\n                <a href=\\\"#\\\" *ngIf=\\\"i == treeTable.toggleColumnIndex\\\" class=\\\"ui-treetable-toggler fa fa-fw ui-clickable\\\" [ngClass]=\\\"node.expanded ? treeTable.expandedIcon : treeTable.collapsedIcon\\\"\\n                    [ngStyle]=\\\"{'margin-left':level*16 + 'px','visibility': isLeaf() ? 'hidden' : 'visible'}\\\"\\n                    (click)=\\\"toggle($event)\\\"\\n                    [title]=\\\"node.expanded ? labelCollapse : labelExpand\\\">\\n                </a>\\n                <div class=\\\"ui-chkbox ui-treetable-checkbox\\\" *ngIf=\\\"treeTable.selectionMode == 'checkbox' && i==0\\\"><div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\">\\n                    <span class=\\\"ui-chkbox-icon ui-clickable fa\\\" \\n                        [ngClass]=\\\"{'fa-check':isSelected(),'fa-minus':node.partialSelected}\\\"></span></div></div\\n                ><span *ngIf=\\\"!col.template\\\">{{resolveFieldData(node.data,col.field)}}</span>\\n                <ng-container *ngTemplateOutlet=\\\"col.template; context: {$implicit: col, rowData: node}\\\"></ng-container>\\n            </td>\\n        </div>\\n        <div *ngIf=\\\"node.children && node.expanded\\\" class=\\\"ui-treetable-row\\\" style=\\\"display:table-row\\\">\\n            <td [attr.colspan]=\\\"treeTable.columns.length\\\" class=\\\"ui-treetable-child-table-container\\\">\\n                <table [class]=\\\"treeTable.tableStyleClass\\\" [ngStyle]=\\\"treeTable.tableStyle\\\">\\n                    <tbody pTreeRow *ngFor=\\\"let childNode of node.children\\\" [node]=\\\"childNode\\\" [level]=\\\"level+1\\\" [labelExpand]=\\\"labelExpand\\\" [labelCollapse]=\\\"labelCollapse\\\" [parentNode]=\\\"node\\\"></tbody>\\n                </table>\\n            </td>\\n        </div>\\n    \"\n        }),\n        __param(0, core_1.Inject(core_1.forwardRef(function () { return TreeTable; }))),\n        __metadata(\"design:paramtypes\", [TreeTable])\n    ], UITreeRow);\n    return UITreeRow;\n}());\nexports.UITreeRow = UITreeRow;\nvar TreeTable = /** @class */ (function () {\n    function TreeTable(el, domHandler, changeDetector, renderer) {\n        this.el = el;\n        this.domHandler = domHandler;\n        this.changeDetector = changeDetector;\n        this.renderer = renderer;\n        this.labelExpand = \"Expand\";\n        this.labelCollapse = \"Collapse\";\n        this.metaKeySelection = true;\n        this.toggleColumnIndex = 0;\n        this.collapsedIcon = \"fa-caret-right\";\n        this.expandedIcon = \"fa-caret-down\";\n        this.onRowDblclick = new core_1.EventEmitter();\n        this.selectionChange = new core_1.EventEmitter();\n        this.onNodeSelect = new core_1.EventEmitter();\n        this.onNodeUnselect = new core_1.EventEmitter();\n        this.onNodeExpand = new core_1.EventEmitter();\n        this.onNodeCollapse = new core_1.EventEmitter();\n        this.onContextMenuSelect = new core_1.EventEmitter();\n    }\n    TreeTable.prototype.ngAfterContentInit = function () {\n        var _this = this;\n        this.initColumns();\n        this.columnsSubscription = this.cols.changes.subscribe(function (_) {\n            _this.initColumns();\n            _this.changeDetector.markForCheck();\n        });\n    };\n    TreeTable.prototype.initColumns = function () {\n        this.columns = this.cols.toArray();\n    };\n    TreeTable.prototype.onRowClick = function (event, node) {\n        var eventTarget = event.target;\n        if (eventTarget.className && eventTarget.className.indexOf('ui-treetable-toggler') === 0) {\n            return;\n        }\n        else if (this.selectionMode) {\n            if (node.selectable === false) {\n                return;\n            }\n            var metaSelection = this.rowTouched ? false : this.metaKeySelection;\n            var index_1 = this.findIndexInSelection(node);\n            var selected = (index_1 >= 0);\n            if (this.isCheckboxSelectionMode()) {\n                if (selected) {\n                    this.propagateSelectionDown(node, false);\n                    if (node.parent) {\n                        this.propagateSelectionUp(node.parent, false);\n                    }\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                }\n                else {\n                    this.propagateSelectionDown(node, true);\n                    if (node.parent) {\n                        this.propagateSelectionUp(node.parent, true);\n                    }\n                    this.selectionChange.emit(this.selection);\n                    this.onNodeSelect.emit({ originalEvent: event, node: node });\n                }\n            }\n            else {\n                if (metaSelection) {\n                    var metaKey = (event.metaKey || event.ctrlKey);\n                    if (selected && metaKey) {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(null);\n                        }\n                        else {\n                            this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                            this.selectionChange.emit(this.selection);\n                        }\n                        this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                    }\n                    else {\n                        if (this.isSingleSelectionMode()) {\n                            this.selectionChange.emit(node);\n                        }\n                        else if (this.isMultipleSelectionMode()) {\n                            this.selection = (!metaKey) ? [] : this.selection || [];\n                            this.selection = this.selection.concat([node]);\n                            this.selectionChange.emit(this.selection);\n                        }\n                        this.onNodeSelect.emit({ originalEvent: event, node: node });\n                    }\n                }\n                else {\n                    if (this.isSingleSelectionMode()) {\n                        if (selected) {\n                            this.selection = null;\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        }\n                        else {\n                            this.selection = node;\n                            this.onNodeSelect.emit({ originalEvent: event, node: node });\n                        }\n                    }\n                    else {\n                        if (selected) {\n                            this.selection = this.selection.filter(function (val, i) { return i != index_1; });\n                            this.onNodeUnselect.emit({ originalEvent: event, node: node });\n                        }\n                        else {\n                            this.selection = (this.selection || []).concat([node]);\n                            this.onNodeSelect.emit({ originalEvent: event, node: node });\n                        }\n                    }\n                    this.selectionChange.emit(this.selection);\n                }\n            }\n        }\n        this.rowTouched = false;\n    };\n    TreeTable.prototype.onRowTouchEnd = function () {\n        this.rowTouched = true;\n    };\n    TreeTable.prototype.onRowRightClick = function (event, node) {\n        if (this.contextMenu) {\n            var index = this.findIndexInSelection(node);\n            var selected = (index >= 0);\n            if (!selected) {\n                if (this.isSingleSelectionMode()) {\n                    this.selection = node;\n                }\n                else if (this.isMultipleSelectionMode()) {\n                    this.selection = [node];\n                    this.selectionChange.emit(this.selection);\n                }\n                this.selectionChange.emit(this.selection);\n            }\n            this.contextMenu.show(event);\n            this.onContextMenuSelect.emit({ originalEvent: event, node: node });\n        }\n    };\n    TreeTable.prototype.findIndexInSelection = function (node) {\n        var index = -1;\n        if (this.selectionMode && this.selection) {\n            if (this.isSingleSelectionMode()) {\n                index = (this.selection == node) ? 0 : -1;\n            }\n            else {\n                for (var i = 0; i < this.selection.length; i++) {\n                    if (this.selection[i] == node) {\n                        index = i;\n                        break;\n                    }\n                }\n            }\n        }\n        return index;\n    };\n    TreeTable.prototype.propagateSelectionUp = function (node, select) {\n        if (node.children && node.children.length) {\n            var selectedCount = 0;\n            var childPartialSelected = false;\n            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                if (this.isSelected(child)) {\n                    selectedCount++;\n                }\n                else if (child.partialSelected) {\n                    childPartialSelected = true;\n                }\n            }\n            if (select && selectedCount == node.children.length) {\n                this.selection = (this.selection || []).concat([node]);\n                node.partialSelected = false;\n            }\n            else {\n                if (!select) {\n                    var index_2 = this.findIndexInSelection(node);\n                    if (index_2 >= 0) {\n                        this.selection = this.selection.filter(function (val, i) { return i != index_2; });\n                    }\n                }\n                if (childPartialSelected || selectedCount > 0 && selectedCount != node.children.length)\n                    node.partialSelected = true;\n                else\n                    node.partialSelected = false;\n            }\n        }\n        var parent = node.parent;\n        if (parent) {\n            this.propagateSelectionUp(parent, select);\n        }\n    };\n    TreeTable.prototype.propagateSelectionDown = function (node, select) {\n        var index = this.findIndexInSelection(node);\n        if (select && index == -1) {\n            this.selection = (this.selection || []).concat([node]);\n        }\n        else if (!select && index > -1) {\n            this.selection = this.selection.filter(function (val, i) { return i != index; });\n        }\n        node.partialSelected = false;\n        if (node.children && node.children.length) {\n            for (var _i = 0, _a = node.children; _i < _a.length; _i++) {\n                var child = _a[_i];\n                this.propagateSelectionDown(child, select);\n            }\n        }\n    };\n    TreeTable.prototype.isSelected = function (node) {\n        return this.findIndexInSelection(node) != -1;\n    };\n    TreeTable.prototype.isSingleSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'single';\n    };\n    TreeTable.prototype.isMultipleSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'multiple';\n    };\n    TreeTable.prototype.isCheckboxSelectionMode = function () {\n        return this.selectionMode && this.selectionMode == 'checkbox';\n    };\n    TreeTable.prototype.hasFooter = function () {\n        if (this.columns) {\n            var columnsArr = this.cols.toArray();\n            for (var i = 0; i < columnsArr.length; i++) {\n                if (columnsArr[i].footer) {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Array)\n    ], TreeTable.prototype, \"value\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"selectionMode\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TreeTable.prototype, \"selection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TreeTable.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"labelExpand\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"labelCollapse\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TreeTable.prototype, \"metaKeySelection\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TreeTable.prototype, \"contextMenu\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TreeTable.prototype, \"toggleColumnIndex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TreeTable.prototype, \"tableStyle\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"tableStyleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"collapsedIcon\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TreeTable.prototype, \"expandedIcon\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onRowDblclick\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"selectionChange\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onNodeSelect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onNodeUnselect\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onNodeExpand\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onNodeCollapse\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TreeTable.prototype, \"onContextMenuSelect\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Header),\n        __metadata(\"design:type\", shared_1.Header)\n    ], TreeTable.prototype, \"header\", void 0);\n    __decorate([\n        core_1.ContentChild(shared_1.Footer),\n        __metadata(\"design:type\", shared_1.Footer)\n    ], TreeTable.prototype, \"footer\", void 0);\n    __decorate([\n        core_1.ContentChildren(shared_1.Column),\n        __metadata(\"design:type\", core_1.QueryList)\n    ], TreeTable.prototype, \"cols\", void 0);\n    __decorate([\n        core_1.ViewChild('tbl'),\n        __metadata(\"design:type\", core_1.ElementRef)\n    ], TreeTable.prototype, \"tableViewChild\", void 0);\n    TreeTable = __decorate([\n        core_1.Component({\n            selector: 'p-treeTable',\n            template: \"\\n        <div [ngClass]=\\\"'ui-treetable ui-widget'\\\" [ngStyle]=\\\"style\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-treetable-header ui-widget-header\\\" *ngIf=\\\"header\\\">\\n                <ng-content select=\\\"p-header\\\"></ng-content>\\n            </div>\\n            <div class=\\\"ui-treetable-tablewrapper\\\">\\n                <table #tbl class=\\\"ui-widget-content\\\" [class]=\\\"tableStyleClass\\\" [ngStyle]=\\\"tableStyle\\\">\\n                    <thead>\\n                        <tr class=\\\"ui-state-default\\\">\\n                            <th #headerCell *ngFor=\\\"let col of columns; let lastCol=last \\\"  [ngStyle]=\\\"col.headerStyle||col.style\\\" [class]=\\\"col.headerStyleClass||col.styleClass\\\" \\n                                [ngClass]=\\\"'ui-state-default ui-unselectable-text'\\\">\\n                                <span class=\\\"ui-column-title\\\" *ngIf=\\\"!col.headerTemplate\\\">{{col.header}}</span>\\n                                <span class=\\\"ui-column-title\\\" *ngIf=\\\"col.headerTemplate\\\">\\n                                    <ng-container *ngTemplateOutlet=\\\"col.headerTemplate; context: {$implicit: col}\\\"></ng-container>\\n                                </span>\\n                            </th>\\n                        </tr>\\n                    </thead>\\n                    <tfoot *ngIf=\\\"hasFooter()\\\">\\n                        <tr>\\n                            <td *ngFor=\\\"let col of columns\\\" [ngStyle]=\\\"col.footerStyle||col.style\\\" [class]=\\\"col.footerStyleClass||col.styleClass\\\" [ngClass]=\\\"{'ui-state-default':true}\\\">\\n                                <span class=\\\"ui-column-footer\\\" *ngIf=\\\"!col.footerTemplate\\\">{{col.footer}}</span>\\n                                <span class=\\\"ui-column-footer\\\" *ngIf=\\\"col.footerTemplate\\\">\\n                                    <ng-container *ngTemplateOutlet=\\\"col.headerTemplate; context: {$implicit: col}\\\"></ng-container>\\n                                </span>\\n                            </td>\\n                        </tr>\\n                    </tfoot>\\n                    <tbody pTreeRow *ngFor=\\\"let node of value\\\" class=\\\"ui-treetable-data ui-widget-content\\\" [node]=\\\"node\\\" [level]=\\\"0\\\" [labelExpand]=\\\"labelExpand\\\" [labelCollapse]=\\\"labelCollapse\\\"></tbody>\\n                </table>\\n            </div>\\n            \\n            <div class=\\\"ui-treetable-footer ui-widget-header\\\" *ngIf=\\\"footer\\\">\\n                <ng-content select=\\\"p-footer\\\"></ng-content>\\n            </div>\\n        </div>\\n    \",\n            providers: [domhandler_1.DomHandler]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ElementRef, domhandler_1.DomHandler, core_1.ChangeDetectorRef, core_1.Renderer2])\n    ], TreeTable);\n    return TreeTable;\n}());\nexports.TreeTable = TreeTable;\nvar TreeTableModule = /** @class */ (function () {\n    function TreeTableModule() {\n    }\n    TreeTableModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [TreeTable, shared_2.SharedModule],\n            declarations: [TreeTable, UITreeRow]\n        })\n    ], TreeTableModule);\n    return TreeTableModule;\n}());\nexports.TreeTableModule = TreeTableModule;\n//# sourceMappingURL=treetable.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/treetable/treetable.js\n// module id = 789\n// module chunks = 0","\"use strict\";\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\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;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nvar __metadata = (this && this.__metadata) || function (k, v) {\n    if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar common_1 = require(\"@angular/common\");\nvar forms_1 = require(\"@angular/forms\");\nexports.TRISTATECHECKBOX_VALUE_ACCESSOR = {\n    provide: forms_1.NG_VALUE_ACCESSOR,\n    useExisting: core_1.forwardRef(function () { return TriStateCheckbox; }),\n    multi: true\n};\nvar TriStateCheckbox = /** @class */ (function () {\n    function TriStateCheckbox(cd) {\n        this.cd = cd;\n        this.onChange = new core_1.EventEmitter();\n        this.onModelChange = function () { };\n        this.onModelTouched = function () { };\n    }\n    TriStateCheckbox.prototype.onClick = function (event, input) {\n        if (!this.disabled) {\n            this.toggle(event);\n            this.focus = true;\n            input.focus();\n        }\n    };\n    TriStateCheckbox.prototype.onKeydown = function (event) {\n        if (event.keyCode == 32) {\n            event.preventDefault();\n        }\n    };\n    TriStateCheckbox.prototype.onKeyup = function (event) {\n        if (event.keyCode == 32) {\n            this.toggle(event);\n            event.preventDefault();\n        }\n    };\n    TriStateCheckbox.prototype.toggle = function (event) {\n        if (this.value == null || this.value == undefined)\n            this.value = true;\n        else if (this.value == true)\n            this.value = false;\n        else if (this.value == false)\n            this.value = null;\n        this.onModelChange(this.value);\n        this.onChange.emit({\n            originalEvent: event,\n            value: this.value\n        });\n    };\n    TriStateCheckbox.prototype.onFocus = function () {\n        this.focus = true;\n    };\n    TriStateCheckbox.prototype.onBlur = function () {\n        this.focus = false;\n        this.onModelTouched();\n    };\n    TriStateCheckbox.prototype.registerOnChange = function (fn) {\n        this.onModelChange = fn;\n    };\n    TriStateCheckbox.prototype.registerOnTouched = function (fn) {\n        this.onModelTouched = fn;\n    };\n    TriStateCheckbox.prototype.writeValue = function (value) {\n        this.value = value;\n        this.cd.markForCheck();\n    };\n    TriStateCheckbox.prototype.setDisabledState = function (disabled) {\n        this.disabled = disabled;\n    };\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Boolean)\n    ], TriStateCheckbox.prototype, \"disabled\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TriStateCheckbox.prototype, \"name\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Number)\n    ], TriStateCheckbox.prototype, \"tabindex\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TriStateCheckbox.prototype, \"inputId\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", Object)\n    ], TriStateCheckbox.prototype, \"style\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TriStateCheckbox.prototype, \"styleClass\", void 0);\n    __decorate([\n        core_1.Input(),\n        __metadata(\"design:type\", String)\n    ], TriStateCheckbox.prototype, \"label\", void 0);\n    __decorate([\n        core_1.Output(),\n        __metadata(\"design:type\", core_1.EventEmitter)\n    ], TriStateCheckbox.prototype, \"onChange\", void 0);\n    TriStateCheckbox = __decorate([\n        core_1.Component({\n            selector: 'p-triStateCheckbox',\n            template: \"\\n        <div [ngStyle]=\\\"style\\\" [ngClass]=\\\"'ui-chkbox ui-tristatechkbox ui-widget'\\\" [class]=\\\"styleClass\\\">\\n            <div class=\\\"ui-helper-hidden-accessible\\\">\\n                <input #input type=\\\"text\\\" [attr.id]=\\\"inputId\\\" [name]=\\\"name\\\" [attr.tabindex]=\\\"tabindex\\\" readonly [disabled]=\\\"disabled\\\" (keyup)=\\\"onKeyup($event)\\\" (keydown)=\\\"onKeydown($event)\\\" (focus)=\\\"onFocus()\\\" (blur)=\\\"onBlur()\\\">\\n            </div>\\n            <div class=\\\"ui-chkbox-box ui-widget ui-corner-all ui-state-default\\\" (click)=\\\"onClick($event,input)\\\"\\n                [ngClass]=\\\"{'ui-state-active':value!=null,'ui-state-disabled':disabled,'ui-state-focus':focus}\\\">\\n                <span class=\\\"ui-chkbox-icon fa ui-clickable\\\" [ngClass]=\\\"{'fa-check':value==true,'fa-close':value==false}\\\"></span>\\n            </div>\\n        </div>\\n        <label class=\\\"ui-chkbox-label\\\" (click)=\\\"onClick($event,input)\\\"\\n               [ngClass]=\\\"{'ui-label-active':value!=null, 'ui-label-disabled':disabled, 'ui-label-focus':focus}\\\"\\n               *ngIf=\\\"label\\\" [attr.for]=\\\"inputId\\\">{{label}}</label>\\n    \",\n            providers: [exports.TRISTATECHECKBOX_VALUE_ACCESSOR]\n        }),\n        __metadata(\"design:paramtypes\", [core_1.ChangeDetectorRef])\n    ], TriStateCheckbox);\n    return TriStateCheckbox;\n}());\nexports.TriStateCheckbox = TriStateCheckbox;\nvar TriStateCheckboxModule = /** @class */ (function () {\n    function TriStateCheckboxModule() {\n    }\n    TriStateCheckboxModule = __decorate([\n        core_1.NgModule({\n            imports: [common_1.CommonModule],\n            exports: [TriStateCheckbox],\n            declarations: [TriStateCheckbox]\n        })\n    ], TriStateCheckboxModule);\n    return TriStateCheckboxModule;\n}());\nexports.TriStateCheckboxModule = TriStateCheckboxModule;\n//# sourceMappingURL=tristatecheckbox.js.map\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/components/tristatecheckbox/tristatecheckbox.js\n// module id = 790\n// module chunks = 0","/* Shorthand */\n\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./components/inputmask/inputmask\"));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/inputmask.js\n// module id = 791\n// module chunks = 0","/* Shorthand */\n\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./components/dragdrop/dragdrop\"));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/dragdrop.js\n// module id = 792\n// module chunks = 0","/* Shorthand */\n\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./components/spinner/spinner\"));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/spinner.js\n// module id = 793\n// module chunks = 0","/* Shorthand */\n\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./components/tooltip/tooltip\"));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/tooltip.js\n// module id = 794\n// module chunks = 0","/* Shorthand */\n\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./components/chips/chips\"));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/chips.js\n// module id = 795\n// module chunks = 0","/* Shorthand */\n\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./components/keyfilter/keyfilter\"));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/keyfilter.js\n// module id = 796\n// module chunks = 0","/* Shorthand */\n\"use strict\";\nfunction __export(m) {\n    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\n}\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__export(require(\"./components/password/password\"));\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/primeng/password.js\n// module id = 797\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar recaptcha_component_1 = require(\"./recaptcha/recaptcha.component\");\nexports.RecaptchaComponent = recaptcha_component_1.RecaptchaComponent;\nvar recaptcha_loader_service_1 = require(\"./recaptcha/recaptcha-loader.service\");\nexports.RecaptchaLoaderService = recaptcha_loader_service_1.RecaptchaLoaderService;\nexports.RECAPTCHA_LANGUAGE = recaptcha_loader_service_1.RECAPTCHA_LANGUAGE;\nexports.RECAPTCHA_BASE_URL = recaptcha_loader_service_1.RECAPTCHA_BASE_URL;\nexports.RECAPTCHA_NONCE = recaptcha_loader_service_1.RECAPTCHA_NONCE;\nvar recaptcha_module_1 = require(\"./recaptcha/recaptcha.module\");\nexports.RecaptchaModule = recaptcha_module_1.RecaptchaModule;\nvar recaptcha_settings_1 = require(\"./recaptcha/recaptcha-settings\");\nexports.RECAPTCHA_SETTINGS = recaptcha_settings_1.RECAPTCHA_SETTINGS;\nvar recaptcha_v3_module_1 = require(\"./recaptcha/recaptcha-v3.module\");\nexports.RecaptchaV3Module = recaptcha_v3_module_1.RecaptchaV3Module;\nvar recaptcha_v3_service_1 = require(\"./recaptcha/recaptcha-v3.service\");\nexports.ReCaptchaV3Service = recaptcha_v3_service_1.ReCaptchaV3Service;\nexports.RECAPTCHA_V3_SITE_KEY = recaptcha_v3_service_1.RECAPTCHA_V3_SITE_KEY;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ng-recaptcha/index.js\n// module id = 798\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar recaptcha_common_module_1 = require(\"./recaptcha-common.module\");\nvar recaptcha_loader_service_1 = require(\"./recaptcha-loader.service\");\nvar recaptcha_component_1 = require(\"./recaptcha.component\");\nvar RecaptchaModule = /** @class */ (function () {\n    function RecaptchaModule() {\n    }\n    // We need this to maintain backwards-compatibility with v4. Removing this will be a breaking change\n    // We need this to maintain backwards-compatibility with v4. Removing this will be a breaking change\n    RecaptchaModule.forRoot = \n    // We need this to maintain backwards-compatibility with v4. Removing this will be a breaking change\n    function () {\n        return RecaptchaModule;\n    };\n    RecaptchaModule.decorators = [\n        { type: core_1.NgModule, args: [{\n                    exports: [\n                        recaptcha_component_1.RecaptchaComponent,\n                    ],\n                    imports: [\n                        recaptcha_common_module_1.RecaptchaCommonModule,\n                    ],\n                    providers: [\n                        recaptcha_loader_service_1.RecaptchaLoaderService,\n                    ],\n                },] },\n    ];\n    return RecaptchaModule;\n}());\nexports.RecaptchaModule = RecaptchaModule;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ng-recaptcha/recaptcha/recaptcha.module.js\n// module id = 799\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar recaptcha_component_1 = require(\"./recaptcha.component\");\nvar RecaptchaCommonModule = /** @class */ (function () {\n    function RecaptchaCommonModule() {\n    }\n    RecaptchaCommonModule.decorators = [\n        { type: core_1.NgModule, args: [{\n                    declarations: [\n                        recaptcha_component_1.RecaptchaComponent,\n                    ],\n                    exports: [\n                        recaptcha_component_1.RecaptchaComponent,\n                    ],\n                },] },\n    ];\n    return RecaptchaCommonModule;\n}());\nexports.RecaptchaCommonModule = RecaptchaCommonModule;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ng-recaptcha/recaptcha/recaptcha-common.module.js\n// module id = 800\n// module chunks = 0","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar core_1 = require(\"@angular/core\");\nvar recaptcha_v3_service_1 = require(\"./recaptcha-v3.service\");\nvar RecaptchaV3Module = /** @class */ (function () {\n    function RecaptchaV3Module() {\n    }\n    RecaptchaV3Module.decorators = [\n        { type: core_1.NgModule, args: [{\n                    providers: [\n                        recaptcha_v3_service_1.ReCaptchaV3Service,\n                    ],\n                },] },\n    ];\n    return RecaptchaV3Module;\n}());\nexports.RecaptchaV3Module = RecaptchaV3Module;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/ng-recaptcha/recaptcha/recaptcha-v3.module.js\n// module id = 801\n// module chunks = 0","export * from './app/app.component';\nexport * from './login/login.component';\nexport * from './header/header.component';\nexport * from './dashboard/dashboard.component';\nexport * from './taskboard/taskboard.component';\nexport * from './task/tasklist.component';\nexport * from './task/task.component';\nexport * from './taskview/taskview.component';\nexport * from './project/projectlist.component';\nexport * from './project/project.component';\nexport * from './projectview/projectview.component';\nexport * from './mail/mailbox.component';\nexport * from './directory/directory.component';\nexport * from './daily/daily.component';\nexport * from './directory/contact.component';\nexport * from './sprint/sprint.component';\nexport * from './sprint/sprints.component';\nexport * from './scheduler/scheduler.component.js';\nexport * from './scheduler/schedulerlist.component.js';\nexport * from './events/eventslist.component.js';\nexport * from './events/events.component.js';\nexport * from './roles/roles.component';\nexport * from './roles/rol.component';\nexport * from './todolist/todolist.component';\nexport * from './users/users.component';\nexport * from './users/usershistory.component';\nexport * from './parameter/parameterlist.component';\nexport * from './parameter/parameters.component';   \nexport * from './categories/categories.component';\nexport * from './units/units.component';\nexport * from './notfound/notfound.component';\nexport * from './notfound/notpermits.component';\nexport * from './product/product.component';\nexport * from './product/productlist.component';\nexport * from './type/typelist.component';\nexport * from './code/code.component';\nexport * from './wiki/wiki.component';\nexport * from './request/requests.component';\nexport * from './approval/approvals.component';\nexport * from './projectboard/projectboard.component';\nexport * from './statics/static.component';\nexport * from './dashboard/burndown.component';\nexport * from './passwordrecovery/passwordrecovery.component';\nexport * from './usersettings/usersettings.component';\nexport * from './request/preferences.component';\nexport * from './clientsettings/clientsettings.component';\nexport * from './dailyboard/dailyboard.component';\nexport * from './sprint/reports.component';\nexport * from './userguide/guideburndown.component';\nexport * from './userguide/guideprojectboard.component';\nexport * from './userguide/userguidelogin.component'\nexport * from './group/grouplist.component';\nexport * from './sprint/mysprint.component';\nexport * from './whiteboard/whiteboard.component';\nexport * from './externalrequest/externalrequests.component';\nexport * from './externaltask/externaltasklist.component';\nexport * from './loglist/loglist.component';\nexport * from './notifications/notifications.component';\nexport * from './documents/documents.component';\nexport * from './cloud/cloud.component';\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/index.js","import { Component, Inject } from '@angular/core';\n\nimport template from './app.template.html';\n\n@Component({\n  selector: 'crm-app',\n  template: template\n})\nexport class AppComponent {\n  constructor(@Inject('AUTHOR') author) {\n    this.author = author;\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/app/app.component.js","module.exports = \"<router-outlet>\\n</router-outlet>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/app/app.template.html\n// module id = 804\n// module chunks = 0","module.exports = \"<div class=\\\"fondo\\\" [ngStyle]=\\\"myLoginStyle\\\">\\n  <div class=\\\"col-md-5 col-lg-7\\\">\\n\\n  </div>\\n  <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-5\\\" id=\\\"login-rigth\\\">\\n\\n  </div>\\n  <div style=\\\"bottom: 7%; left: 25%; position: absolute;\\\">\\n    <img src=\\\"img/powered_white.svg\\\" style=\\\"height: 45px;\\\">\\n  </div>\\n  <div id=\\\"login-nx\\\">\\n    <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;\\\">\\n      <img src=\\\"img/{{ mainLogo }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto;max-width: 300px;\\\">\\n    </div>\\n    <p class=\\\"login-box-msg\\\">Sign in to start your session</p>\\n\\n    <form id=\\\"formLogin\\\" (ngSubmit)=\\\"getAuth()\\\">\\n      <div class=\\\"form-group has-feedback\\\" style=\\\"background-color: transparent;border: none;\\\">\\n        <input type=\\\"text\\\" autocomplete=\\\"off\\\" id=\\\"user\\\" name=\\\"user\\\" [(ngModel)]=\\\"log.user\\\" oninput=\\\"javascript:this.value=this.value.toLowerCase();\\\" placeholder=\\\"&#xF007;\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent;\\\" class=\\\"ng-valid ng-dirty ng-touched\\\">\\n      </div>\\n      <div class=\\\"form-group has-feedback\\\" style=\\\"background-color: transparent;border: none;\\\">\\n        <input type=\\\"password\\\" autocomplete=\\\"off\\\" id=\\\"pwd\\\" name=\\\"pwd\\\" [(ngModel)]=\\\"log.pwd\\\" placeholder=\\\"Password\\\"\\n          placeholder=\\\"&#xF023;\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent;\\\" class=\\\"ng-valid ng-dirty ng-touched\\\">\\n      </div>\\n      <div *ngIf=\\\"captcha > '0' || captchaforever == 1\\\" style=\\\"margin-bottom: 26px;\\\">\\n        <re-captcha (resolved)=\\\"resolved($event)\\\" siteKey=\\\"{{sitkey}}\\\"></re-captcha>\\n      </div>\\n      <div class=\\\"row\\\">\\n        <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n          <i *ngIf=\\\"loading\\\" class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n          <span *ngIf=\\\"loading\\\" class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n          <button *ngIf=\\\"!loading\\\" type=\\\"submit\\\" id=\\\"boton_autentico\\\" class=\\\"btn-login\\\" [disabled]=\\\"validate()\\\">\\n            SIGN IN\\n          </button>\\n        </div>\\n      </div>\\n      <div class=\\\"row\\\" style=\\\"padding-top: 20px;text-align:center;\\\">\\n        <div><a id=\\\"forgot-link\\\" href=\\\"{{forgotPassword}}\\\"> Forgot Password?</a></div>\\n      </div>\\n      <div class=\\\"row\\\" style=\\\"padding-top: 5px; text-align:center;\\\">\\n        <p class=\\\"login-box-msg\\\">Version 4.0.1</p>\\n      </div>\\n    </form>\\n  </div>\\n</div>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/login/login.template.html\n// module id = 805\n// module chunks = 0","import { Component } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { IntervalObservable } from \"rxjs/observable/IntervalObservable\";\n\nimport { LoginService } from \"../../services/login.service\";\nimport { HeaderService } from \"../../services/header.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { TruncatePipe } from \"../../pipes\";\nimport template from \"./header.template.html\";\n\nimport { ToastrService } from \"ngx-toastr\";\n\n@Component({\n    selector: \"my-header\",\n    template: template,\n    pipes: [TruncatePipe]\n})\nexport class HeaderComponent {\n    constructor(\n        loginService: LoginService,\n        route: Router,\n        headerService: HeaderService,\n        taskService: TaskService,\n        toastr: ToastrService\n    ) {\n        this._router = route;\n        this._login = loginService;\n        this._header = headerService;\n        this._tasks = taskService;\n        this.tasks = [];\n        this.notifications = [];\n        this.alive = true;\n        this.parents = [];\n        this.childs = [];\n        this.total_tasks = 0;\n        this.total_comments = 0;\n        this.menu = {};\n        this.activeMenu = [];\n        this.user = {};\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this.getUser();\n        this.getNameUser();\n        this.getNameUserNavBar();\n        this.subscriber = IntervalObservable.create(180000)\n            .takeWhile(n => this.alive) // only fires when component is alive\n            .subscribe(n => {\n                if (this.alive && localStorage.getItem(\"token\")) {\n                    this._login.isLogged().subscribe(rx => {\n                        if (rx.data == \"OK\") {\n                            this.getInfoNotifications();\n                        } else {\n                            this.alive = false;\n                        }\n                    });\n                } else {\n                    this.alive = false;\n                }\n            });\n        this.versionApp = \"Version 4.0.0\";\n        // this.getCheckVersion();\n    }\n\n    getCheckVersion() {\n        this._header.getCheckVersion().subscribe(res => {\n            if (res.data != this.versionApp) {\n                window.location.reload();\n            }\n        });\n    }\n\n\n\n\n    getInfoNotifications() {\n        this._header.getDeskNotificatons().subscribe(res => {\n            if (res.data.length > 0) {\n                this.notifications = res.data;\n                for (var i = res.data.length - 1; i >= 0; i--) {\n                    if (this.notifications[i].para_category == \"16\") {\n                        this.notifyMe(\n                            this.notifications[i].noti_title,\n                            this.escapeHtml(this.notifications[i].noti_description),\n                            this.notifications[i].noti_url\n                        );\n                    }\n                }\n            }\n        });\n    }\n    ngOnInit() {\n        this.getMenuByUser();\n        this.getNotifications();\n        if (Notification) {\n            if (Notification.permission !== \"granted\") {\n                Notification.requestPermission();\n            }\n        }\n    }\n\n    clearNotif() {\n        this._header.clearNotificatons().subscribe(res => {\n            this.notifications = [];\n        });\n    }\n\n    logOut() {\n        this.alive = false;\n        this._login.logOut().subscribe(res => {});\n        this._router.navigate([\"/login\"]);\n    }\n\n    getUser() {\n        if (localStorage.getItem(\"user\")) {\n            this.user = JSON.parse(localStorage.getItem(\"user\"));\n        }\n        this._header.getUser().subscribe(res => {\n            this.user = res.data;\n            localStorage.setItem(\"user\", JSON.stringify(this.user));\n        });\n    }\n\n    getNotifications() {\n        this._header.getDeskNotificatons().subscribe(res => {\n            this.notifications = res.data;\n            for (var i = 0; i < this.notifications.length; i++) {\n                if (this.notifications[i].para_type == \"new_task\") {\n                    this.total_tasks++;\n                } else {\n                    this.total_comments++;\n                }\n            }\n        });\n    }\n\n    notifyMe(ntitle, nbody, nurl) {\n        if (!Notification) {\n            alert(\n                \"Desktop notifications not available in your browser. Try Chromium.\"\n            );\n            return;\n        }\n        if (Notification.permission !== \"granted\") {\n            Notification.requestPermission();\n        } else {\n            var notification = new Notification(ntitle, {\n                icon: \"favicon.ico\",\n                body: nbody,\n                priority: 2,\n                requireInteraction: true\n            });\n            notification.onclick = function() {\n                window.open(nurl);\n            };\n        }\n    }\n\n    setNotify(idn, module, tkid) {\n        this._header.setCatNotification(idn, 18).subscribe(res => {\n            this.getNotifications();\n            this._router.navigate([module, tkid]);\n        });\n    }\n\n    escapeHtml(text) {\n        return text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n    }\n\n    getMenuByUser() {\n        this.activeMenu = JSON.parse(localStorage.getItem(\"menu\"));\n        this._header.getMenuByUser().subscribe(res => {\n            this.activeMenu = res.data;\n            localStorage.setItem(\"menu\", JSON.stringify(this.activeMenu));\n        });\n    }\n\n    /**\n     * Display Name User\n     * @returns {string}\n     */\n    getNameUser() {\n        if (this.user.user_name && this.user.user_lastname) {\n            let names = this.user.user_name;\n            let surnames = this.user.user_lastname;\n            let ellipsis = \"…\";\n            let fullName = names + ' ' + surnames;\n\n            if (fullName.length <= 14) {\n                return fullName;\n            } else {\n\n                if (names.length <= 14 && surnames.length <= 14) {\n                    fullName = names + '<br>' + surnames;\n                }\n\n                if (names.length <= 14 && surnames.length > 14) {\n                    surnames = surnames.substring(0, 14) + ellipsis;\n                    fullName = names + '<br>' + surnames;\n                }\n\n                if (names.length > 14 && surnames.length <= 14) {\n                    let arrayNames = names.split(' ');\n                    let firstName = arrayNames[0];\n                    fullName = firstName + '<br>' + surnames;\n                }\n\n                if (names.length > 14 && surnames.length > 14) {\n                    let arrayNames = names.split(' ');\n                    let firstName = arrayNames[0];\n                    surnames = surnames.substring(0, 14) + ellipsis;\n                    fullName = firstName + '<br>' + surnames;\n                }\n\n                return fullName;\n            }\n        } else {\n            return \"\";\n        }\n    }\n\n    getNameUserNavBar() {\n        if (this.user.user_name && this.user.user_lastname) {\n            let names = this.user.user_name;\n            let surnames = this.user.user_lastname;\n            let ellipsis = \"…\";\n            let fullName = names + ' ' + surnames;\n\n            if (fullName.length <= 14) {\n                return fullName;\n            } else {\n\n                if (names.length <= 14 && surnames.length <= 14) {\n                    fullName = names + ' ' + surnames;\n                }\n\n                if (names.length <= 14 && surnames.length > 14) {\n                    surnames = surnames.substring(0, 14) + ellipsis;\n                    fullName = names + ' ' + surnames;\n                }\n\n                if (names.length > 14 && surnames.length <= 14) {\n                    let arrayNames = names.split(' ');\n                    let firstName = arrayNames[0];\n                    fullName = firstName + ' ' + surnames;\n                }\n\n                if (names.length > 14 && surnames.length > 14) {\n                    let arrayNames = names.split(' ');\n                    let firstName = arrayNames[0];\n                    surnames = surnames.substring(0, 14) + ellipsis;\n                    fullName = firstName + ' ' + surnames;\n                }\n\n                return fullName;\n            }\n        } else {\n            return \"\";\n        }\n    }\n    alert_closeSesion() {\n        this.toastr.warning(\"Your session has been closed due to inactivity\");\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/header/header.component.js","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'trim' })\nexport class TrimPipe implements PipeTransform {\n  transform(value, args) {\n    return value.trim();\n  }\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/trim/trim.pipe.js","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'filter' })\nexport class FilterPipe implements PipeTransform {\n    transform(value, args) {\n        var result = [];\n        if (args !== \"\") {\n            for(var item in value){\n                var nx = null;\n                for(var element in value[item]){\n                    var xx = value[item][element] + \"\";\n                    if(xx && xx.toLowerCase().indexOf(args.toLowerCase()) != -1){\n                        nx = value[item];\n                    }\n                }\n                if (nx) {\n                    result.push(nx);\n                }\n            }\n            return result;\n        } else {\n            return value;\n        }\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/filter/filter.pipe.js","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'filterfield' })\nexport class FilterfieldPipe implements PipeTransform {\n\ttransform(value, args) {\n\t\tvar result = [];\n\t\tif (args) {\n\t\t\tif (args.text && (Array.isArray(args.text) && args.text.length > 0) && !(Array.isArray(args.text) && (args.text[0] == \"\"))) {\n\t\t\t\tfor (let item in value) {\n\t\t\t\t\tlet nx = null;\n\t\t\t\t\tlet xx = value[item][args.pos] + \"\";\n\t\t\t\t\tif (!Array.isArray(args.text)) {\n\t\t\t\t\t\tif (xx && args.text.toLowerCase().includes(xx.toLowerCase())) {\n\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t} else if (args.or && args.orfield && Array.isArray(args.or)) {\n\t\t\t\t\t\t\tlet j;\n\t\t\t\t\t\t\tlet yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\tfor (let j = 0; j < args.or.length; j++) {\n\t\t\t\t\t\t\t\tlet el = args.or[j];\n\t\t\t\t\t\t\t\tif (el.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (args.or && args.orfield && !Array.isArray(args.or)) {\n\t\t\t\t\t\t\tlet yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\tif (args.or.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (args.text.length == 0) {\n\t\t\t\t\t\tif (Array.isArray(args.or) && args.or[0]) {\n\t\t\t\t\t\t\tlet j;\n\t\t\t\t\t\t\tlet yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\tfor (let j = 0; j < args.or.length; j++) {\n\t\t\t\t\t\t\t\tif (xx.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!Array.isArray(args.or)) {\n\t\t\t\t\t\t\tlet yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\tif (args.or && args.or.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlet j;\n\t\t\t\t\t\tfor (let j = 0; j < args.text.length; j++) {\n\t\t\t\t\t\t\tlet el = args.text[j]+\"\";\n\t\t\t\t\t\t\tif (el == xx) {\n\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t} else if (args.or && args.orfield && (Array.isArray(args.or) && args.or[0])) {\n\t\t\t\t\t\t\t\tlet jx;\n\t\t\t\t\t\t\t\tlet yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\t\tfor (let jx = 0; jx < args.or.length; jx++) {\n\t\t\t\t\t\t\t\t\tif (xx.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (args.or && args.orfield && !Array.isArray(args.or)) {\n\t\t\t\t\t\t\t\tlet yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\t\t\tif (args.or.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (nx) {\n\t\t\t\t\t\tresult.push(nx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else if (args.or && args.orfield) {\n\t\t\t\tfor (let item in value) {\n\t\t\t\t\tlet nx = null;\n\t\t\t\t\tif (Array.isArray(args.or)) {\n\t\t\t\t\t\tlet j;\n\t\t\t\t\t\tlet yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\tfor (let j = 0; j < args.or.length; j++) {\n\t\t\t\t\t\t\tlet el = args.or[j];\n\t\t\t\t\t\t\tif (el.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (!Array.isArray(args.or)) {\n\t\t\t\t\t\tlet yy = value[item][args.orfield] + \"\";\n\t\t\t\t\t\tif (args.or.toLowerCase().includes(yy.toLowerCase())) {\n\t\t\t\t\t\t\tnx = value[item];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (nx) {\n\t\t\t\t\t\tresult.push(nx);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t} else {\n\t\t\treturn value;\n\t\t}\n\t}\n}\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/filter/filterfield.pipe.js","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'filterdata' })\nexport class FilterDataPipe implements PipeTransform {\n    transform(items: Object, keys: Array) {\n        var result = [];\n\n                if ( items != null ){\n                    items = Object.values(items);\n\n                }else{\n                    return result;\n                }\n                if (items && items.length) {\n                     for ( let arr of items ){\n\n                            if ( Array.isArray(arr) ){\n                                for ( let obj of arr ){\n                                    var seed = JSON.stringify(obj);\n                                    var str = \"'\"+seed+\"'\";\n                                    var matches = seed.match(keys);\n\n                                if ( matches ) {\n                                    result.push(obj);\n                                }\n                            }   \n                         }else{\n                               var seed = JSON.stringify(arr);\n                                var str = \"'\"+seed+\"'\";\n                                var matches = seed.match(keys);\n\n                            if ( matches ) {\n                                result.push(arr);\n                            }\n                         }   \n                     }\n\n                    return result;\n                }else{\n                         return result;\n                    }\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/filter/filterdata.pipe.js","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'truncate' })\nexport class TruncatePipe implements TruncatePipe {\n  transform(value, args) {\n\tvar result = [];\n\tif (args !== \"\" && value) {\n\t\tvar limit = args && args[0] ? parseInt(args[0], 10) : args ? parseInt(args, 10) : 10;\n\t\tvar trail = args && args[1] ? args[1] : '...';\n\t\treturn value.length > limit ? value.substring(0, limit) + trail : value;\n\t} else {\n\t\treturn value;\n\t}\n  }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/truncate/truncate.pipe.js","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'paginate' })\nexport class PaginatePipe implements PipeTransform {\n    transform(value, args) {\n        var result = [];\n        if (value) {\n            if (value.length <= args.limit) {\n                result = value;\n            } else {\n                result = value.slice((args.currp-1)*args.limit,(args.limit*args.currp));\n            }\n        }\n        return result;\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/paginate/paginate.pipe.js","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'order' })\nexport class OrderPipe implements PipeTransform {\n    transform(value, args) {\n        if (args.pos !== \"\") {\n            value.sort(function (a, b){\n                if (args.desc) {\n\n                    //var date_test = new Date(b[args.pos].replace(/-/g,\"/\"));\n\n                    if ((new Date(b[args.pos].replace(/-/g,\"/\"))).getDate() && (new Date(a[args.pos].replace(/-/g,\"/\"))).getDate()) {\n                        var a = (new Date(a[args.pos].replace(/-/g,\"/\")));\n                        var b = (new Date(b[args.pos].replace(/-/g,\"/\")));\n                        if (b < a) {\n                            return -1;\n                        } \n                        if (b > a) {\n                            return 1;\n                        }\n                    } else if(parseFloat(b[args.pos]) && parseFloat(a[args.pos])){\n                        if ( parseFloat(b[args.pos]) < parseFloat(a[args.pos])){\n                              return -1;\n                        }\n                        if ( parseFloat(b[args.pos]) > parseFloat(a[args.pos]) ){\n                            return 1;\n                        }\n                    } else {\n                        if ( b[args.pos] < a[args.pos] ){\n                              return -1;\n                        }\n                        if ( b[args.pos] > a[args.pos] ){\n                            return 1;\n                        }\n                    }\n                } else {\n\n                    if ((new Date(b[args.pos].replace(/-/g,\"/\"))).getDate() && (new Date(a[args.pos].replace(/-/g,\"/\"))).getDate()) {\n                        var a = (new Date(a[args.pos].replace(/-/g,\"/\")));\n                        var b = (new Date(b[args.pos].replace(/-/g,\"/\")));\n                        if (a < b) {\n                            return -1;\n                        } \n                        if (a > b) {\n                            return 1;\n                        }\n                    } else if(parseFloat(a[args.pos]) && parseFloat(b[args.pos])){\n                        if ( parseFloat(a[args.pos]) < parseFloat(b[args.pos])){\n                              return -1;\n                        }\n                        if ( parseFloat(a[args.pos]) > parseFloat(b[args.pos]) ){\n                            return 1;\n                        }\n                    } else {\n                        if ( a[args.pos] < b[args.pos] ){\n                            return -1;\n                        }\n                        if ( a[args.pos] > b[args.pos] ){\n                            return 1;\n                        }\t\n                    }\n\t\t\t\t\n                }\n                return 0;\n            });\n        }\n        return value;\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/order/order.pipe.js","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer } from \"@angular/platform-browser\";\n\n@Pipe({ name: 'safeHtml'})\nexport class SafeHtmlPipe implements PipeTransform {\n\n  constructor(sanitizer:DomSanitizer){\n    this._sanitizer = sanitizer;\n  }\n\n  transform(html) {\n    return this._sanitizer.bypassSecurityTrustHtml(html);\n  }\n\n}\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/safehtml/safehtml.pipe.js","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({ name: 'calculate' })\nexport class CalculatePipe implements PipeTransform {\n\ttransform(value, args) {\n\t\tvar result = 0;\n\t\tif (args && args.type && args.field) {\n            switch(args.type) {\n                case \"sum\":\n                    for (let item in value) {\n                        let xx = Number(value[item][args.field]);\n                        result += xx;\n                    }\n                  break;\n                case \"avg\":\n                    for (let item in value) {\n                        let xx = Number(value[item][args.field]);\n                        result += xx;\n                    }\n                  break;\n                default:\n                    return result;\n              }\n              return result;\n\t\t} else {\n\t\t\treturn result;\n\t\t}\n\t}\n}\n\n\n// WEBPACK FOOTER //\n// ./app/pipes/calculate/calculate.pipe.js","module.exports = \"<div class=\\\"skin-blue\\\">\\n    <header class=\\\"main-header\\\">\\n        <a routerLink=\\\"/dashboard\\\" class=\\\"logo\\\">\\n            <img class=\\\"logo-mini\\\" src=\\\"img/logo_menu_min.png\\\" style=\\\"margin-top:5px;\\\">\\n            <img src=\\\"img/logowhite.png\\\" style=\\\"height: 100%; margin-top:20px; padding-bottom: 20px;\\\">\\n        </a>\\n        <button (click)=\\\"alert_closeSesion()\\\" hidden id=\\\"alertCloseSesion\\\">Alert</button>\\n        <nav class=\\\"navbar navbar-static-top\\\">\\n            <a href=\\\"javascript:void(0)\\\" data-toggle=\\\"offcanvas\\\" role=\\\"button\\\">\\n                <img src=\\\"img/menu_icon.svg\\\" style=\\\"width: 28px; margin: 5px; margin-top: 15px;\\\">\\n            </a>\\n            <div class=\\\"navbar-custom-menu\\\">\\n                <ul class=\\\"nav navbar-nav\\\">\\n                    <li class=\\\"dropdown tasks-menu\\\">\\n                        <a href=\\\"\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" style=\\\"height: 33px;margin-top: 9px;background-color: #fff;color: #337ab7;border-radius: 5px;padding: 7px;margin-right: 20px;\\\">\\n                            <i class=\\\"sq sq-taskboard\\\" style=\\\"font-size: 20px;\\\"></i>\\n                            <span *ngIf=\\\"notifications.length > 0\\\" class=\\\"label label-danger\\\" style=\\\"border-radius: 50px;padding: 4px;font-size: 11px;top: -5px;right: -8px;\\\">{{notifications.length}}</span>\\n                        </a>\\n                        <ul class=\\\"dropdown-menu dash_task\\\" style=\\\"border-radius: 5%;border: none;top: 50px;right: 17px;padding-bottom: 30px; max-height: 235px; width: 343px; color: rgb(112,112,112);\\\">\\n                            <li>\\n                                <ul class=\\\"menu\\\" style=\\\"max-height: 221px;\\\">\\n                                    <li style=\\\"text-align: center; border-bottom: 1px solid rgb(234,233,233); height: 30px;\\\">\\n                                        <div style=\\\"font-weight: bold; text-align: center; margin-top: 12px;\\\" *ngIf=\\\"notifications && notifications.length > 0\\\">\\n                                            <div style=\\\"position: relative;transform: translate(-118px, -3px)\\\">\\n                                                <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>\\n                                            </div>\\n                                            <div style=\\\"position: relative;transform: translate(0px, -26px);\\\">\\n                                                You have {{notifications.length}}\\n                                                <a routerLink=\\\"/notifications\\\"><span style=\\\"color:rgb(28,110,198);\\\">notifications</span></a> in tasks\\n                                            </div>\\n                                        </div>\\n                                        <div style=\\\"font-weight: bold; text-align: center; margin-top: 12px;\\\" *ngIf=\\\"notifications && notifications.length == 0\\\">\\n                                            <div style=\\\"position: relative;transform: translate(-129px, -3px)\\\">\\n                                                <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>\\n                                            </div>\\n                                            <div style=\\\"position: relative;transform: translate(0px, -26px);\\\">\\n                                                You don't have\\n                                                <a routerLink=\\\"/notifications\\\"><span style=\\\"color:rgb(28,110,198);\\\">notifications</span></a> in tasks\\n                                            </div>\\n                                        </div>\\n                                    </li>\\n                                    <li *ngFor=\\\"let nt of notifications\\\">\\n                                        <div *ngIf=\\\"nt.para_type == 'comment_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; You have <span style=\\\"color:rgb(28,110,198)\\\"> 1 comment</span> from task\\n                                                    <span style=\\\"color:rgb(28,110,198)\\\">{{\\\" #\\\" + nt.task_id}}</span>\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                        <div *ngIf=\\\"nt.para_type == 'new_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; You have been assigned to task <span style=\\\"color:rgb(28,110,198)\\\">{{\\\" #\\\" + nt.task_id }}</span>\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                        <div *ngIf=\\\"nt.para_type == 'modified_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; Task <span style=\\\"color:rgb(28,110,198)\\\"> {{\\\" #\\\" + nt.task_id}}</span> has been <span style=\\\"color:rgb(28,110,198)\\\"> modified </span>                                                    by {{\\\" \\\" + nt.user | truncate : 8}}\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                        <div *ngIf=\\\"nt.para_type == 'status_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; Task\\n                                                    <span style=\\\"color:rgb(28,110,198)\\\"> {{\\\" #\\\" + nt.task_id}}</span> {{\\\" \\\" + nt.noti_title + \\\" \\\" | truncate : 30}}\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                        <div *ngIf=\\\"nt.para_type == 'extra_task'\\\" style=\\\"border-bottom: 1px solid rgb(234,233,233); height: 36px;margin-left: 18px;width: 90%; padding-top: 5px;\\\">\\n                                            <a href=\\\"javascript:void(0)\\\" style=\\\"border: none;color: rgb(112,112,112);\\\" (click)=\\\"setNotify(nt.noti_id,'/task', nt.task_id)\\\">\\n                                                <div style=\\\"position: relative;\\\">\\n                                                    <i class=\\\"sq sq-taskboard\\\" style=\\\"color:rgb(28,110,198); font-size: 18px;\\\"></i>&nbsp;&nbsp; Task <span style=\\\"color:rgb(28,110,198)\\\"> {{\\\" #\\\" + nt.task_id}}</span> {{\\\" \\\" + nt.noti_title + \\\" \\\" | truncate\\n                                                    : 30}}\\n                                                </div>\\n                                            </a>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </li>\\n                            <li class=\\\"footer\\\" *ngIf=\\\"notifications.length > 0\\\">\\n                                <a (click)=\\\"clearNotif()\\\">Close all notifications</a>\\n                            </li>\\n                        </ul>\\n                    </li>\\n                    <!-- Notifications: style can be found in dropdown.less\\n                <li class=\\\"dropdown notifications-menu\\\">\\n                  <a href=\\\"#\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                    <i class=\\\"fa fa-bell-o\\\"></i>\\n                    <span *ngIf=\\\"notifications.length > 0\\\" class=\\\"label label-danger\\\">{{notifications.length}}</span>\\n                  </a>\\n                  <ul class=\\\"dropdown-menu\\\">\\n                    <li class=\\\"header\\\">You have {{notifications.length}} notifications</li>\\n                    <li>\\n                      <ul class=\\\"menu\\\">\\n                        <li *ngFor=\\\"let nf of notifications\\\">\\n                          <a href=\\\"javascript:void(0)\\\" (click)=\\\"setNotify(nf.id_notification, nf.noti_iurl)\\\">\\n                            <i class=\\\"{{ nf.noti_label }}\\\"></i>{{nf.noti_title}}\\n                          </a>\\n                        </li>\\n                      </ul>\\n                    </li>\\n                    <li class=\\\"footer\\\"><a href=\\\"#\\\">View all</a></li>\\n                  </ul>\\n                </li> -->\\n                    <li class=\\\"menu-divider\\\" style=\\\"width: 2px;height: 30px;background-color: #dce3e6;top: 20px;left: 10px;position:relative;\\\">\\n                        <div></div>\\n                    </li>\\n                    <li *ngIf=\\\"user\\\" class=\\\"dropdown user user-menu\\\" style=\\\"margin-left: 40px;height: 50px;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" style=\\\"margin-top: 9px;background-color: #fff;color: #337ab7;border-radius: 5px;padding: 7px;margin-right: 20px;height: 36px;width: 38px;\\\">\\n                            <div>\\n                                <i class=\\\"sq sq-working-team\\\" style=\\\"color: #007bd2;font-size: 22px;padding: 2px;\\\"></i>\\n                                <!--<div class=\\\"thumbnail\\\">\\n                  <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                </div>-->\\n                                <!--<span class=\\\"hidden-xs\\\">{{user.user_name + ' ' + user.user_lastname}}</span>-->\\n                            </div>\\n                        </a>\\n                        <ul class=\\\"dropdown-menu session-panel\\\" style=\\\"top: 60px;right: 18px;padding: 0;\\\">\\n                            <!-- User image -->\\n                            <li class=\\\"user-header\\\" style=\\\"background-color:#dce3e6\\\">\\n                                <div>\\n                                    <div class=\\\"thumb-widget\\\" style=\\\"border-color: #007bd2;\\\">\\n                                        <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"img-widget\\\" alt=\\\"User Image\\\">\\n                                    </div>\\n                                    <p style=\\\"color:#5e6365;font-weight:bold;\\\">\\n                                        {{getNameUserNavBar()}}\\n                                        <small>{{ user.grop_name }}</small>\\n                                    </p>\\n                                </div>\\n                            </li>\\n                            <li class=\\\"user-footer\\\">\\n                                <div class=\\\"pull-left\\\">\\n                                </div>\\n                                <div class=\\\"pull-right\\\" style=\\\"width:85%;\\\">\\n                                    <a routerLink=\\\"/usersettings\\\" class=\\\"btn btn-default btn-flat\\\" style=\\\"border-radius: 20px;width: 100px;margin-left: 45px;color: #fff;background-color: #0fb4ff;border: none;font-weight: bolder;\\\">Edit Profile</a>\\n                                </div>\\n                            </li>\\n                        </ul>\\n                    </li>\\n                    <li class=\\\"dropdown tasks-menu\\\" (click)=\\\"logOut()\\\">\\n                        <a href=\\\"\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" style=\\\"font-size: 17px;height: 37px;margin-top: 9px;background-color: #fff;color: #337ab7;border-radius: 5px;padding: 10px;margin-right: 20px;\\\">\\n                            <i class=\\\"fa fa-sign-out\\\" aria-hidden=\\\"true\\\"></i>\\n                        </a>\\n                    </li>\\n                </ul>\\n            </div>\\n        </nav>\\n    </header>\\n    <!-- background: #042656; background: -webkit-linear-gradient(#042656, #176BCB); background: -o-linear-gradient(#042656, #176BCB); background: -moz-linear-gradient(#042656, #176BCB); background: linear-gradient(#042656, #176BCB); -->\\n    <aside class=\\\"main-sidebar\\\" style=\\\"margin-top: 40px; background-color: rgb(222, 232, 233);\\\">\\n        <section class=\\\"sidebar\\\">\\n            <!-- <div class=\\\"superother\\\" style=\\\"z-index: -1;\\\"> -->\\n            <div id=\\\"othernx\\\">\\n                <div id=\\\"neoxtop\\\"></div>\\n            </div>\\n            <!-- </div> -->\\n            <div class=\\\"user-panel\\\">\\n                <div class=\\\"pull-left image\\\">\\n                    <div style=\\\"width: 100%; height: 60px;\\\">\\n                        <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; position: relative; width:70px; height:70px; border-radius: 50%; overflow:hidden; top:-5px;\\\">\\n                            <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"left: 0px; top:0px; \\\">\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"pull-left info\\\" style=\\\"position: relative;\\\">\\n                    <p style=\\\"position: absolute; color:rgb(35,121,205); left: -30px; top:20px;\\\" [innerHTML]=\\\"getNameUser()\\\"></p>\\n                </div>\\n            </div>\\n            <div class=\\\"menu-scroll-sqlx\\\">\\n                <ul class=\\\"sidebar-menu\\\">\\n                    <li *ngFor=\\\"let p of activeMenu\\\" class=\\\"treeview sqlx-menu\\\" routerLinkActive=\\\"active\\\">\\n                        <a href=\\\"javascript:void(0)\\\">\\n                            <i class=\\\"{{ p.modu_classicon }}\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205)\\\"></i>\\n                            <span>{{ p.modu_name }}</span>\\n                            <small *ngIf=\\\"p.modu_isbeta != 0\\\" class=\\\"label pull-right bg-green\\\" style=\\\"margin-right: 20px;\\\">beta</small>\\n                            <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                        </a>\\n                        <ul class=\\\"treeview-menu\\\" *ngIf=\\\"p.childs && p.childs.length > 0\\\" style=\\\"margin-top:-1px;\\\">\\n                            <li *ngFor=\\\"let s of p.childs\\\" class=\\\"sqlx-menu\\\" routerLinkActive #rla=\\\"routerLinkActive\\\">\\n                                <a routerLink=\\\"/{{ s.modu_route | lowercase }}\\\" [ngStyle]=\\\"{'background-color':rla.isActive ? 'rgb(255,255,255)' : 'rgb(210,221,226)'}\\\">\\n                                    <i class=\\\"{{ s.modu_classicon }}\\\" style=\\\"color:rgb(35,121,205)\\\"></i> {{ s.modu_name }}\\n                                    <small *ngIf=\\\"s.modu_isbeta != 0\\\" class=\\\"label pull-right bg-green\\\">beta</small>\\n                                </a>\\n                                <a href=\\\"javascript:void(0)\\\" *ngIf=\\\"s.modu_grandchild == 2\\\">\\n                                    <i class=\\\"{{ s.modu_classicon }}\\\" style=\\\"color:rgb(35,121,205)\\\"></i> {{ s.modu_name }}\\n                                    <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                </a>\\n                                <ul class=\\\"treeview-menu\\\" *ngIf=\\\"s.grandchildrens && s.grandchildrens.length > 0\\\" style=\\\"margin-top:-1px;\\\">\\n                                    <li *ngFor=\\\"let n of s.grandchildrens\\\" class=\\\"sqlx-menu\\\">\\n                                        <a routerLink=\\\"/{{s.modu_route}}\\\" fragment=\\\"{{n.modu_route}}\\\">\\n                                            <i class=\\\"{{ n.modu_classicon }}\\\" style=\\\"color:rgb(35,121,205)\\\"></i> {{ n.modu_name }} </a>\\n                                    </li>\\n                                    <!-- <a routerLink=\\\"/{{s.modu_route}}\\\" (click)=\\\"ngAfterViewInit()\\\" fragment=\\\"{{n.modu_route}}\\\">\\n                    <i class=\\\"{{ n.modu_classicon }}\\\" style=\\\"color:rgb(35,121,205)\\\"></i> {{ n.modu_name }} </a> -->\\n                                </ul>\\n                            </li>\\n                        </ul>\\n\\n                    </li>\\n                </ul>\\n            </div>\\n\\n        </section>\\n        <!-- /.sidebar -->\\n    </aside>\\n</div>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/header/header.template.html\n// module id = 816\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"dashboard\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section id=\\\"header-dashboard\\\" class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-dashboard\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> DASHBOARD\\n      <small style=\\\"font-size:15px;\\\">Home</small>\\n    </h2>\\n  </section>\\n\\n  <!-- Main content -->\\n  <section id=\\\"content-dashboard\\\" class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-7 no-padding\\\">\\n        <div class=\\\"col-xs-12 col-md-12 col-lg-4 no-padding\\\">\\n          <div class=\\\" picture-task task-pending\\\">\\n            <div class=\\\"box-header border-pending header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"sq sq-pending\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:25px;\\\"> </i> pending\\n              </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-6 counter-pending task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showpend-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('pending')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_pend}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-5\\\">\\n                <div *ngIf=\\\"percentage_pend >0\\\" class=\\\"progress-bar-sqlx\\\" style=\\\"margin:16px 0px 5px 0px;\\\">\\n                  <div class=\\\"info-pending\\\" [ngStyle]=\\\"{ 'width': percentage_pend + '%' }\\\"></div>\\n                </div>\\n                <div *ngIf=\\\"percentage_pend == 0\\\" class=\\\"progress-bar-sqlx\\\" style=\\\"margin:16px 0px 5px 0px;\\\">\\n                  <div class=\\\"info-pending\\\" style=\\\"width:0%;background-color:transparent;\\\"></div>\\n                </div>\\n                <span style=\\\"color: #ffffff; font-weight: bold;\\\">Sprint deadline</span>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <!--PENDING-->\\n        <div class=\\\"col-xs-12  col-md-12 col-lg-4 no-padding\\\">\\n          <div class=\\\"picture-task task-developing\\\">\\n            <div class=\\\"box-header border-developing header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"sq sq-developing\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:25px;\\\"> </i> developing </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-6 counter-developing task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showdev-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('developing')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_deve}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-6\\\" style=\\\"padding:5px;\\\">\\n                <div class=\\\"dashboard-box-radius success c100 p{{percentage_deve_aprox}} small\\\">\\n                  <span style=\\\"color: white;\\\">{{percentage_deve_aprox}}%</span>\\n                  <div class=\\\"slice\\\">\\n                    <div class=\\\"success bar\\\"></div>\\n                    <div class=\\\"success fill\\\"></div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <!--DEVELOPING-->\\n        <div class=\\\"col-xs-12  col-md-12 col-lg-4 no-padding\\\">\\n          <div class=\\\"picture-task task-improving\\\">\\n            <div class=\\\"box-header border-improving header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"sq sq-improving\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:25px;\\\"></i> improving\\n              </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-6 counter-improving task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showimp-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('improving')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_imp}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-6\\\" style=\\\"padding:5px;\\\">\\n                <div class=\\\"dashboard-box-radius warning c100 p{{percentage_impr_aprox}} small\\\">\\n                  <span style=\\\"color: white;\\\">{{percentage_impr_aprox}}%</span>\\n                  <div class=\\\"slice\\\">\\n                    <div class=\\\"warning bar\\\"></div>\\n                    <div class=\\\"warning fill\\\"></div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <!--IMPROVING-->\\n      </div>\\n      <!--CLOSE COL-7-->\\n      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 no-padding\\\">\\n        <div class=\\\"col-xs-12 col-md-12 col-lg-6 no-padding\\\">\\n          <div class=\\\"picture-task task-expiring\\\">\\n            <div class=\\\"box-header border-expiring header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"fa fa-exclamation-circle\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:28px;\\\"> </i> expiring </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-6 counter-expiring task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showexpi-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('expiring')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_expi}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-6\\\" style=\\\"padding:5px;\\\">\\n                <div class=\\\"dashboard-box-radius danger c100 p{{percentage_expi_aprox}} small\\\">\\n                  <span style=\\\"color: white;\\\">{{percentage_expi_aprox}}%</span>\\n                  <div class=\\\"slice\\\">\\n                    <div class=\\\"danger bar\\\"></div>\\n                    <div class=\\\"danger fill\\\"></div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-xs-12 col-md-12 col-lg-6 no-padding\\\">\\n          <div class=\\\"picture-task task-backlog\\\">\\n            <div class=\\\"box-header border-backlog header-tasks\\\">\\n              <h4 style=\\\"text-transform: uppercase; font-weight: bold;\\\">\\n                <i class=\\\"sq sq-backlog\\\" aria-hidden=\\\"true\\\" style=\\\"font-size:25px;\\\"></i> backlog </h4>\\n            </div>\\n            <div class=\\\"row content-task\\\">\\n              <div class=\\\"col-xs-5 counter-backlog task-task\\\">\\n                <div style=\\\"text-align:center;padding:0px;\\\">\\n                  <a id=\\\"showback-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showDetail('backlog')\\\" style=\\\"color: #fff; text-decoration-line: none;\\\">\\n                    <h1 style=\\\"font-weight: bold;\\\">{{cant_back}}</h1>\\n                  </a>\\n                </div>\\n                <div>\\n                  <h3 style=\\\"text-align:center; font-weight: bold;\\\">tasks</h3>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <!--CLOSE COL-5-->\\n    </div>\\n    <!--row principal-->\\n    <div class=\\\"row\\\" style=\\\"margin-top: 10px;\\\">\\n      <div id=\\\"burndown-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6\\\">\\n        <div class=\\\"box box-success burndown-border\\\">\\n          <div class=\\\"box-header with-border border-burndown\\\">\\n            <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 btns-burndown\\\" style=\\\"padding:0;\\\">\\n              <div class=\\\"box-tittle BurnDown\\\" style=\\\"padding-top: 5px;\\\">\\n                <i class=\\\"sq sq-burndown\\\" aria-hidden=\\\"true\\\"></i>\\n                <div class=\\\"burndownsprint\\\">BurnDown</div>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 btns-burndown\\\" style=\\\"padding-left:0;\\\">\\n              <button id=\\\"burndown-dashboard-minus-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-box-tool btn-minus pull-right\\\"\\n                data-widget=\\\"collapse\\\">\\n                <i class=\\\"fa fa-minus\\\"></i>\\n              </button>\\n              <div class=\\\"pull-right\\\" id=\\\"button-work-team\\\" style=\\\"margin-top: 7px;\\\">\\n                <a id=\\\"showburndown-dashboard\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showburndown()\\\">YOUR WORK TEAM<i\\n                    class=\\\"fa fa-chevron-down\\\" aria-hidden=\\\"true\\\"></i></a>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <p-chart id=\\\"burndowndata-dashboard\\\" type=\\\"line\\\" [data]=\\\"burndownData\\\" (onDataSelect)=\\\"chartClicked($event)\\\"\\n              height=\\\"200\\\"></p-chart>\\n          </div>\\n        </div>\\n      </div>\\n      <div id=\\\"todolist-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6\\\">\\n        <div class=\\\"box box-primary border-todolist\\\">\\n          <div class=\\\"box-header box-list\\\" style=\\\"margin-left: 20px; margin-right: 20px;\\\">\\n            <div class=\\\"pull-left box-todo-list col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <h3 class=\\\"box-title\\\" style=\\\"color:#707070; font-weight: bold; margin-left:10px;\\\">\\n                <i class=\\\"sq sq-todolist\\\" aria-hidden=\\\"true\\\" style=\\\"margin:15px 10px 0px 10px; font-size:30px;\\\"></i>\\n                TO DO LIST </h3>\\n            </div>\\n          </div>\\n          <!-- /.box-header -->\\n          <div id=\\\"content-todolist-dashboard\\\" class=\\\"box-body\\\" style=\\\"height: 393px;\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"panel panel-successl\\\">\\n                  <div class=\\\"panel-bodylist\\\" style=\\\"overflow-y: scroll; width:100%; height:381px;\\\">\\n\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_taskDeveloping_todolist\\\" style=\\\"padding-left: 0px;\\\">\\n                      <div *ngFor=\\\"let task of tasksMySprint\\\">\\n                        <div *ngIf=\\\"task.para_status == '38'\\\">\\n                          <div class=\\\"contenedorInfoLevels_todoList\\\">\\n                            <div class=\\\"infoLevels_todoList\\\" [ngStyle]=\\\"task.tklv_level == '0' ? {'background-color':'#cfcfcf'} : task.tklv_level == '1' ? {'background-color':'#fdd835'} : task.tklv_level == '2' ? {'background-color':'#8bc34a'} : task.tklv_level == '3' ? {'background-color':'#ffa726'} : {'background-color':'#f4511e'} \\\">{{task.tklv_level}}</div>\\n                          </div>\\n                          <div class=\\\"contenedorInfo_tasks_todolist\\\" style=\\\"float: left; width: 90%\\\">\\n                            <span class=\\\"infoTaskId_todolist\\\">{{task.task_id}}</span> - <a class=\\\"infoTaskSubject_todolist\\\"\\n                              (click)=\\\"showModaltk(task.task_id)\\\">{{task.task_subject}}</a>\\n                            <taskview [myTaskId]=\\\"task.task_id\\\"></taskview>\\n                            <small style=\\\" margin: 0px;padding-right: 0px;color: #92cc66; margin-left: 10px;\\\">\\n                              <i class=\\\"fa fa-caret-left\\\"></i>\\n                            </small>\\n                            <small class=\\\"statusTaskShared task-developing\\\" style=\\\"margin-left: -4px; font-size: 12px;\\\">\\n                              <i class=\\\"sq sq-developing\\\"></i> Developing\\n                            </small>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"taskInDeveloping && taskInPending\\\" class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 separator_tasks_todolist\\\"\\n                      style=\\\" width: 96.5%;\\\"></div>\\n\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_taskPending_todolist\\\" style=\\\"padding-left: 0px;\\\">\\n                      <div *ngFor=\\\"let task of tasksMySprint\\\">\\n                        <div *ngIf=\\\"task.para_status == '35' || task.para_status == '36' || task.para_status == '37'\\\">\\n                          <div class=\\\"contenedorInfoLevels_todoList\\\">\\n                            <div class=\\\"infoLevels_todoList\\\" [ngStyle]=\\\"task.tklv_level == '0' ? {'background-color':'#cfcfcf'} : task.tklv_level == '1' ? {'background-color':'#fdd835'} : task.tklv_level == '2' ? {'background-color':'#8bc34a'} : task.tklv_level == '3' ? {'background-color':'#ffa726'} : {'background-color':'#f4511e'} \\\">{{task.tklv_level}}</div>\\n                          </div>\\n                          <div class=\\\"contenedorInfo_tasks_todolist\\\" style=\\\"float: left; width: 90%\\\">\\n                            <span class=\\\"infoTaskId_todolist\\\">{{task.task_id}} - </span><a class=\\\"infoTaskSubject_todolist\\\"\\n                              (click)=\\\"showModaltk(task.task_id)\\\">{{task.task_subject}}</a>\\n                            <taskview [myTaskId]=\\\"task.task_id\\\"></taskview>\\n                            <small style=\\\" margin: 0px;padding-right: 0px;color: #0fb4ff; margin-left: 10px;\\\">\\n                              <i class=\\\"fa fa-caret-left\\\"></i>\\n                            </small>\\n                            <small class=\\\"statusTaskShared task-pending \\\" style=\\\"margin-left: -4px; font-size: 12px;\\\">\\n                              <i class=\\\"sq sq-pending\\\"></i> Pending\\n                            </small>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n\\n                    <div *ngIf=\\\"myMeetings && myMeetings.length > 0  && taskInPending\\\" class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 separator_tasks_todolist\\\"\\n                      style=\\\"width: 96.5%;\\\"></div>\\n\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_taskPending_todolist\\\" style=\\\"padding-left: 0px;\\\">\\n                      <div *ngFor=\\\"let meeting of myMeetings\\\">\\n                        <div class=\\\"contenedorInfoLevels_todoList\\\">\\n                          <div class=\\\"infoLevels_eventsScheduler_todoList\\\">{{meeting.level}}</div>\\n                        </div>\\n                        <div class=\\\"contenedorInfo_tasks_todolist\\\" style=\\\"float: left; width: 90%\\\">\\n                          <span class=\\\"infoEvents_todolist\\\">{{meeting.meet_text}}</span>\\n                          <small style=\\\" margin: 0px;padding-right: 0px;color: rgb(101,164,218); margin-left: 10px;\\\">\\n                            <i class=\\\"fa fa-caret-left\\\"></i>\\n                          </small>\\n                          <small class=\\\"statusTaskShared event_todolist \\\" style=\\\"margin-left: -4px; font-size: 12px;\\\">\\n                            <i class=\\\"sq sq-scrum\\\"></i> Event\\n                          </small>\\n                        </div>\\n                      </div>\\n                    </div>\\n\\n                    <div *ngIf=\\\"mySchedulers && mySchedulers.length > 0\\\" class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 separator_tasks_todolist\\\"\\n                      style=\\\"width: 96.5%;\\\"></div>\\n\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_taskPending_todolist\\\" style=\\\"padding-left: 0px;\\\">\\n                      <div *ngFor=\\\"let scheduler of mySchedulers\\\">\\n                        <div class=\\\"contenedorInfoLevels_todoList\\\">\\n                          <div class=\\\"infoLevels_eventsScheduler_todoList\\\">{{scheduler.level}}</div>\\n                        </div>\\n                        <div class=\\\"contenedorInfo_tasks_todolist\\\" style=\\\"float: left; width: 90%\\\">\\n                          <span class=\\\"infoEvents_todolist\\\">{{scheduler.sche_title}}</span>\\n                          <small style=\\\" margin: 0px;padding-right: 0px;color: rgb(125,224,233); margin-left: 10px;\\\">\\n                            <i class=\\\"fa fa-caret-left\\\"></i>\\n                          </small>\\n                          <small class=\\\"statusTaskShared scheduler_todolist \\\" style=\\\"margin-left: -4px; font-size: 12px;\\\">\\n                            <i class=\\\"sq sq-scheduler\\\"></i> Scheduler\\n                          </small>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <!-- /.box-body -->\\n        </div>\\n      </div>\\n      <!-- /.col -->\\n    </div>\\n    <!-- /.row -->\\n\\n    <div class=\\\"row\\\">\\n      <div id=\\\"notifications-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6 notifications-types\\\">\\n        <div class=\\\"box box-success box-notifications\\\">\\n          <div class=\\\"box-header with-border header-notifications\\\">\\n            <div class=\\\"pull-left col-xs-8 col-sm-8 col-md-8 col-lg-8\\\">\\n              <div class=\\\"pull-left col-xs-1 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"padding-left:0px; text-align:left; font-size: 2em;\\\">\\n                <i class=\\\"sq sq-notifications\\\"></i>\\n              </div>\\n              <div class=\\\"pull-right col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"text-align:left; font-size: 18px; font-weight: bold; margin:-40px 27px;\\\">Notifications\\n                ({{ notifications.length }}) </div>\\n            </div>\\n            <div class=\\\"box-tools pull-right col-xs-4 col-sm-4 col-md-4 col-lg-4\\\" style=\\\"text-align:right;\\\">\\n              <button id=\\\"notifications-minus-dashboard\\\" type=\\\"button\\\" class=\\\"bttn-notifications\\\" data-widget=\\\"collapse\\\">\\n                <i class=\\\"fa fa-minus\\\" style=\\\"font-size:23px;\\\"></i>\\n              </button>\\n              <button id=\\\"notifications-clear-dashboard\\\" type=\\\"button\\\" class=\\\"bttn-notifications\\\" (click)=\\\"clearNotif()\\\">\\n                <i class=\\\"sq sq-delete\\\" style=\\\"font-size:1.4em;\\\"></i>\\n              </button>\\n            </div>\\n            <!--box tools-->\\n          </div>\\n          <!--box header-->\\n\\n          <div class=\\\"box-body chat-notif\\\" style=\\\"width:100%; height: 500px; overflow-y:scroll;\\\">\\n            <div class=\\\"item\\\" *ngFor=\\\"let nt of notifications\\\">\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'new_task'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\" style=\\\"text-decoration: none;\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    <span>{{ nt.noti_title }} </span> task\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                    <span> Task : </span>{{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n                  <div class=\\\"btn-goto-task pull-right\\\">\\n                    <button id=\\\"mdtask-notif-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\"\\n                      (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\">\\n                      <span style=\\\"font-weight: bold;\\\">go to task </span>\\n                    </button>\\n                  </div>\\n                </div>\\n                <!--TASK-->\\n              </div>\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'comment_task'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    <span> {{ nt.noti_title }} </span> task\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n                  <div class=\\\"btn-ViewMore pull-right\\\">\\n                    <button id=\\\"viewTask_commentTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\"\\n                      *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\">\\n                      <span style=\\\"font-weight: bold;\\\">View task</span>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--comments-task-->\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'status_task'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    - Task #{{nt.task_id + \\\" \\\"}}<span> {{ nt.noti_title }} </span>\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n                  <div class=\\\"btn-ViewMore pull-right\\\">\\n                    <button id=\\\"viewTask_statusTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\"\\n                      *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\">\\n                      <span style=\\\"font-weight: bold;\\\">View task</span>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--status-task-->\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'extra_task'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    - Task #{{nt.task_id + \\\" \\\"}}<span> {{ nt.noti_title }} </span>\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n                  <div class=\\\"btn-ViewMore pull-right\\\">\\n                    <button id=\\\"viewTask_extraTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\"\\n                      *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\">\\n                      <span style=\\\"font-weight: bold;\\\">View task</span>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--extra-task-->\\n              <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'comment_proj'\\\">\\n                <span class=\\\"task-notif\\\">\\n                  <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\"></i>\\n                </span>\\n                <div class=\\\"message\\\">\\n                  <p class=\\\"notif-description\\\">\\n                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                    {{ nt.user }}\\n                    <span>{{ nt.noti_title }} </span> project\\n                  </p>\\n                </div>\\n                <div class=\\\"attachment\\\">\\n                  <p class=\\\"noti-title\\\">\\n                    <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i>\\n                    {{ escapeHtml(nt.noti_description) }}\\n                  </p>\\n\\n                  <div class=\\\"pull-right btn-send-task\\\">\\n                    <button id=\\\"mdproject-notif-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.proj_id\\\"\\n                      (click)=\\\"showProject(nt.proj_id)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdprojectView\\\" style=\\\"background-color:#47B5FB; border-radius:10px; color:white; font-size: 15px; font-weight: bold;\\\">\\n                      <span>View Project</span>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--comments project-->\\n              <taskview [myTaskId]=\\\"nt.task_id\\\"></taskview>\\n            </div>\\n            <!--.ngfor-->\\n          </div>\\n          <!--box-body-->\\n        </div>\\n        <!--box success-->\\n      </div>\\n\\n      <div id=\\\"calendar-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6 notifications-types\\\">\\n        <div class=\\\"box box-success box-notifications\\\">\\n          <div class=\\\"box-header with-border header-notifications-sq\\\">\\n            <div class=\\\"pull-left col-xs-8 col-sm-8 col-md-8 col-lg-8\\\">\\n              <div class=\\\"pull-left col-xs-1 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"padding-left:0px; text-align:left; font-size: 2em;\\\">\\n                <i class=\\\"sq sq-calendar\\\" style=\\\"font-size: 32px;\\\"></i>\\n              </div>\\n              <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"text-align:left; font-size: 18px; font-weight: bold; margin:-34px 28px;\\\">CALENDAR\\n              </div>\\n            </div>\\n            <div class=\\\"box-tools pull-right col-xs-4 col-sm-4 col-md-4 col-lg-4\\\" style=\\\"text-align:right; top: -2px;\\\">\\n              <button id=\\\"calendar-clear-dashboard\\\" type=\\\"button\\\" class=\\\" dropdown-toggle bttn-notifications\\\"\\n                data-toggle=\\\"dropdown\\\">\\n                <i class=\\\"sq sq-scheduler\\\" style=\\\"font-size:1.4em;\\\"></i>\\n              </button>\\n              <ul class=\\\"dropdown-menu pull-right\\\" role=\\\"menu\\\">\\n                <li>\\n                  <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(1)\\\">Add New Scheduler</a>\\n                </li>\\n                <li class=\\\"divider\\\"></li>\\n                <li>\\n                  <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(0)\\\">Add New Meeting</a>\\n                </li>\\n              </ul>\\n              <button id=\\\"calendar-minus-dashboard\\\" type=\\\"button\\\" class=\\\"bttn-notifications\\\" data-widget=\\\"collapse\\\">\\n                <i class=\\\"fa fa-minus\\\" style=\\\"font-size:23px;\\\"></i>\\n              </button>\\n            </div>\\n            <!--box tools-->\\n          </div>\\n          <!--box header-->\\n\\n          <div id=\\\"calendar-sq\\\" class=\\\"box-body chat-notif calendar-sq\\\" style=\\\"width:100%; padding: 10px!important; background-color: rgb(72,183,248);\\\">\\n            <p-calendar class=\\\"ui-g ui-fluid\\\" [inline]=\\\"true\\\">\\n            </p-calendar>\\n          </div>\\n          <!--box-body-->\\n        </div>\\n        <!--box success-->\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdprojectView\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"project-modal-body\\\">\\n          <div class=\\\"project-modal-panel col-xs-4 col-sm-4 col-md-6 col-lg-6\\\" style=\\\"padding-right: 4px;\\\">\\n            <div class=\\\"project-modal-header\\\">\\n              <button id=\\\"btnX_mdprojectView_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                style=\\\"float: left;\\\">\\n                <span aria-hidden=\\\"true\\\">&times;</span>\\n              </button>\\n              <p class=\\\"project-modal-title\\\"># {{+ project.proj_id + \\\" - \\\" + project.proj_subject }}</p>\\n            </div>\\n            <div id=\\\"mdproject-infoproject-dashboard\\\" class=\\\"project-modal-content\\\">\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>User Applicant</label>\\n                  <p>{{ project.applicant }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>User Creator</label>\\n                  <p>{{ project.creator }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Group</label>\\n                  <p>{{ project.groupname }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Product</label>\\n                  <p>{{ project.prod_name }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Category</label>\\n                  <p>{{ project.category }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-8\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Stakeholders</label>\\n                  <p>{{ project.states }}</p>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Share with</label>\\n                  <div>\\n                    <!-- <span *ngFor=\\\"let uss of project.userssh\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px; display: inline-block;\\\">{{uss.user_name + ' ' + uss.user_lastname }}</span> -->\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Description</label>\\n                  <div [innerHTML]=\\\"escapeHtml(project.proj_description)\\\"></div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div id=\\\"messagePanel\\\" class=\\\"col-xs-8 col-sm-8 col-md-6 col-lg-6\\\" style=\\\"max-height: 550px;\\\">\\n            <div style=\\\"position: absolute; bottom: 0px; left: -40px; width: 50px;\\\">\\n              <ul class=\\\"nav\\\">\\n                <li class=\\\"item-proj active\\\">\\n                  <a id=\\\"mdproject-mdtasks-dashboard\\\" data-toggle=\\\"tab\\\" href=\\\"#mdTasks\\\">\\n                    <i class=\\\"fa fa-thumb-tack\\\" aria-hidden=\\\"true\\\"></i>\\n                  </a>\\n                </li>\\n                <li class=\\\"item-proj\\\">\\n                  <a id=\\\"mdproject-mdcomments-dashboard\\\" data-toggle=\\\"tab\\\" href=\\\"#mdComments\\\">\\n                    <i class=\\\"fa fa-comments\\\" aria-hidden=\\\"true\\\"></i>\\n                  </a>\\n                </li>\\n                <li class=\\\"item-proj\\\">\\n                  <a id=\\\"mdproject-mdusers-dashboard\\\" data-toggle=\\\"tab\\\" href=\\\"#mdUsers\\\">\\n                    <i class=\\\"fa fa-users\\\" aria-hidden=\\\"true\\\"></i>\\n                  </a>\\n                </li>\\n              </ul>\\n            </div>\\n            <div class=\\\"tab-content\\\">\\n              <div id=\\\"mdTasks\\\" class=\\\"tab-pane fade in active\\\">\\n                <div class=\\\"simply-title\\\">\\n                  Tasks\\n                </div>\\n                <div class=\\\"box-body\\\" id=\\\"message-box\\\">\\n                  <div class=\\\"task-cell\\\" *ngFor=\\\"let tk of project.tasklist\\\">\\n                    <div class=\\\"col-md-12\\\">\\n                      #{{ tk.task_id + \\\" \\\" + tk.task_subject }}\\n                    </div>\\n                    <div class=\\\"col-md-12\\\" [innerHTML]=\\\"tk.task_description\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                      <b>Request:</b>\\n                      <br />{{ tk.task_date }}</div>\\n                    <div class=\\\"col-md-6\\\">\\n                      <b>Delivery:</b>\\n                      <br />{{ tk.datedelivery ? tk.datedelivery : \\\"Undefined\\\" }}</div>\\n                    <div class=\\\"col-md-6\\\">\\n                      <b>Applicant:</b>\\n                      <br />{{ tk.creator }}</div>\\n                    <div class=\\\"col-md-6\\\">\\n                      <b>Status:</b>\\n                      <br />{{ tk.task_percentage }} %</div>\\n                    <div class=\\\"col-md-12\\\">\\n                      <button id=\\\"viewmore-mdtask-dashboard\\\" data-dismiss=\\\"modal\\\" class=\\\"btn btn-primary pull-right\\\"><a\\n                          [routerLink]=\\\"['/task', tk.task_id]\\\" style=\\\"color:white;\\\">View More</a></button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div id=\\\"mdComments\\\" class=\\\"tab-pane fade\\\">\\n                <div class=\\\"simply-title\\\">\\n                  Comments\\n                </div>\\n                <div class=\\\"box-body chat\\\" id=\\\"chat-box\\\">\\n                  <div class=\\\"item\\\" *ngFor=\\\"let msg of project.messages\\\" style=\\\"padding-top: 10px;\\\">\\n                    <div class=\\\"col-md-2 no-padding\\\">\\n                      <img style=\\\"border: 1px solid; border-radius: 45px; height: 40px; width: 40px;\\\" [src]=\\\"msg.urlimg\\\"\\n                        onError=\\\"this.src='img/logo_menu_min.svg'\\\" alt=\\\"user image\\\" class=\\\"online\\\">\\n                    </div>\\n                    <div class=\\\"col-md-10\\\">\\n                      <a class=\\\"name\\\">{{ msg.creator }}</a>\\n                      <div [innerHTML]=\\\"msg.note_text\\\"></div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div class=\\\"box-footer\\\">\\n                  <div class=\\\"input-group\\\">\\n                    <input id=\\\"note_text-mdComments\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"note.note_text\\\" placeholder=\\\"Type message...\\\">\\n                    <div class=\\\"input-group-btn\\\">\\n                      <button id=\\\"label-mdComments\\\" type=\\\"button\\\" class=\\\"btn btn-{{ project.label }}\\\" (click)=\\\"sendMessage(project.proj_id)\\\">\\n                        <i class=\\\"fa fa-plus\\\"></i>\\n                      </button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div id=\\\"mdUsers\\\" class=\\\"tab-pane fade\\\">\\n                <h3></h3>\\n                <p> </p>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" style=\\\"background: rgb(237,245,247);\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"btnClose_mdprojectView_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdDayView\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" id=\\\"contenedorDayView_mdDayView_dashboard\\\" name=\\\"contenedorDayView_mdDayView_dashboard\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n              class=\\\"sq sq-close\\\" style=\\\"color:white;font-weight: bold;font-size: 20px;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color:white;font-weight: bold;font-size: 18px;text-transform: uppercase;\\\"><i\\n              class=\\\"sq sq-burndown\\\" style=\\\"font-weight: bold;font-size: 33px;\\\"></i> Day Job for {{dayJob}} </h4>\\n        </div>\\n        <div class=\\\"content-comments-users\\\" style=\\\"max-height: 190px;min-height: 75px;overflow: scroll;\\\">\\n          <div class=\\\"box-body\\\" style=\\\"margin-top:10px;\\\" id=\\\"descriptionInfoDayView_dashboard\\\" name=\\\"descriptionInfoDayView_dashboard\\\">\\n            <ul class=\\\"timeline daily-timeline\\\">\\n              <li *ngFor=\\\"let day of dayView\\\" style=\\\"padding-bottom:5px;\\\">\\n                <i class=\\\"fa fa-dot-circle-o\\\" style=\\\"color: rgb(68, 180, 248); font-size: 30px;background-color: transparent;margin-left: -3px; margin-top: -3px;\\\"></i>\\n                <div class=\\\"timeline-item daily-timeline-item\\\">\\n                  <h3 class=\\\"timeline-header timeline-dailyheader\\\">\\n                    <span *ngIf=\\\"day.task_id && day.task_id != null\\\" [ngStyle]=\\\"day.spri_id == null ? { 'color': 'red' } : {}\\\">\\n                      <b>TASK #{{day.task_id}}</b><br>\\n                    </span>\\n\\n                    <b>Points registered:\\n                      {{day.dail_points}}</b>\\n                    <span *ngIf=\\\"day.task_percentage && day.task_percentage != 0\\\" style=\\\"font-weight: bold;margin-left: 263px;\\\">Progress:\\n                      {{day.task_percentage}}%</span>\\n                  </h3>\\n                  <div class=\\\"timeline-body daily-timeline-body\\\" style=\\\"margin-top: -8px;max-height: 45px;overflow: scroll;color:rgb(167, 167, 167); width: 93%;text-align: justify;\\\">\\n                    {{\\\"Comments: \\\" + escapeHtml(day.dail_text)}}\\n                  </div>\\n                </div>\\n              </li>\\n            </ul>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"totalp && totalp > 0\\\" style=\\\"border: none; text-align: center;\\\">\\n          <h4 style=\\\"font-weight: bold;font-size: 14px;\\\"> TOTAL POINTS REGISTERED : {{\\\" \\\" + totalp}} </h4>\\n        </div>\\n        <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n          <button id=\\\"close2-mdDayView-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(141,180,95);\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdNotification\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button id=\\\"btnX_mdNotification_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">{{ noti.noti_title }}</h4>\\n        </div>\\n        <div id=\\\"mdNotification-info-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">User</label>\\n              <p>{{ noti.user }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Date</label>\\n              <p>{{ noti.noti_updated }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Class</label>\\n              <p>{{ noti.class }}</p>\\n            </div>\\n            <div class=\\\"col-xs-12 col-md-12\\\" [innerHTML]=\\\"noti.noti_description\\\">\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"btnClose_mdNotification_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <button id=\\\"openschedule\\\" #openschedule [hidden]=\\\"true\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdSchedule\\\"></button>\\n  <div class=\\\"modal fade\\\" id=\\\"mdSchedule\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button id=\\\"btnX_mdSchedule_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">{{ sh.tittle }}</h4>\\n        </div>\\n        <div id=\\\"mdSchedule-info-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Date</label>\\n              <p>{{ sh.start }}</p>\\n            </div>\\n            <div *ngIf=\\\"sh.end\\\" class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">End</label>\\n              <p>{{ sh.end }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Place</label>\\n              <p>{{ sh.place }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Category</label>\\n              <p>{{ sh.category }}</p>\\n            </div>\\n            <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">User</label>\\n              <p>{{ sh.user}}</p>\\n            </div>\\n            <!-- <div class=\\\"col-xs-6 col-md-6\\\">\\n              <label class=\\\"control-label\\\">Shared with</label>\\n              <p>{{ sh.guests }}</p>\\n            </div> -->\\n            <div class=\\\"col-xs-12 col-md-12\\\">\\n              <label class=\\\"control-label\\\">Description</label>\\n              <div class=\\\"col-xs-12 col-md-12\\\" [innerHTML]=\\\"sh.description\\\">\\n              </div>\\n            </div>\\n\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"btnClose_mdSchedule_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddScheduler\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-workteam\\\">\\n          <button id=\\\"btnX_mdAddScheduler_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color: #ffffff; opacity: 1;\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Schedule</h4>\\n        </div>\\n        <div id=\\\"form-mdAddScheduler-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Start Date</label>\\n                <p-calendar id=\\\"sche_start-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"scheduler.sche_start\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <!-- Start Date -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>End Date</label>\\n                <p-calendar id=\\\"sche_end-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"scheduler.sche_end\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <!-- End Date -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Tittle</label>\\n                <input id=\\\"sche_title-mdAddScheduler-dashboard\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"scheduler.sche_title\\\"\\n                  placeholder=\\\"Scheduler Tittle\\\">\\n              </div>\\n            </div>\\n            <!-- Scheduler Tittle -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>User</label>\\n                <p-dropdown id=\\\"user_id-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                  [(ngModel)]=\\\"scheduler.user_id\\\" placeholder=\\\"Select User\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Scheduler User -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Category</label>\\n                <p-dropdown id=\\\"para_category-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"catsche\\\" [(ngModel)]=\\\"scheduler.para_category\\\" placeholder=\\\"Select Category\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Scheduler Category -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Status</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stssche\\\" [(ngModel)]=\\\"scheduler.para_status\\\"\\n                  placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Scheduler Status -->\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Place</label>\\n                <p-dropdown id=\\\"para_place-mdAddScheduler-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"plsch\\\" [(ngModel)]=\\\"scheduler.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Scheduler Place -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Description</label>\\n                <p-editor id=\\\"sche_description-mdAddScheduler-dashboard\\\" [(ngModel)]=\\\"scheduler.sche_description\\\"\\n                  [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n              </div>\\n            </div>\\n            <!-- Scheduler Description -->\\n          </div>\\n          <!-- .row -->\\n        </div>\\n        <!-- modal-body -->\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"btnClose_mdAddScheduler_dashboard\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n              data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" id=\\\"savesche-mdAddScheduler-dashboard\\\" type=\\\"button\\\"\\n              class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!scheduler.sche_description || scheduler.sche_description == '' || scheduler.sche_description == 'undefined') || (!scheduler.user_id) || (!scheduler.para_category) || (!scheduler.para_status) || (!scheduler.sche_start != '') || (!scheduler.sche_end != '') || (!scheduler.para_place)\\\"\\n              (click)=\\\"saveScheduler()\\\"><i class=\\\"fa fa-floppy-o\\\"></i> Save\\n            </button>\\n          </div>\\n        </div>\\n        <!-- modal-footer -->\\n      </div>\\n      <!-- modal-content -->\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddMeeting\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-workteam\\\">\\n          <button id=\\\"btnX_mdAddMeeting_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color: #ffffff; opacity: 1;\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Meeting</h4>\\n        </div>\\n        <div id=\\\"form-mdAddMeeting-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Date</label>\\n                <p-calendar id=\\\"datetime-mdAddMeeting-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"meeting.datetime\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showTime]=\\\"true\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Status</label>\\n                <p-dropdown id=\\\"para_status-mdAddMeeting-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stssche\\\"\\n                  [(ngModel)]=\\\"meeting.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!-- Status Place -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Meeting Title</label>\\n                <input id=\\\"meet_text-mdAddMeeting-dashboard\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"meeting.meet_text\\\"\\n                  placeholder=\\\"Meeting Title\\\">\\n              </div>\\n            </div>\\n            <!-- Meeting Tittle -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Place</label>\\n                <p-dropdown id=\\\"para_place-mdAddMeeting-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plsch\\\"\\n                  [(ngModel)]=\\\"meeting.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Share with</label>\\n                <span class=\\\"ui-fluid\\\">\\n                  <p-autoComplete id=\\\"usershared-mdAddMeeting-dashboard\\\" [(ngModel)]=\\\"meeting.usershared\\\" [suggestions]=\\\"usersCRM\\\"\\n                    (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share\\\"\\n                    field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                  </p-autoComplete>\\n                </span>\\n              </div>\\n            </div>\\n          </div>\\n          <!-- .row -->\\n        </div>\\n        <!-- modal-body -->\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"btnClose_mdAddMeeting_dashboard\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n              data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" id=\\\"savemeet-mdAddMeeting-dashboard\\\" type=\\\"button\\\"\\n              class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!meeting.meet_text || meeting.meet_text == '') || (!meeting.para_place) || (!meeting.datetime != '') || (!meeting.para_status)|| (!meeting.usershared || meeting.usershared.length <= 0)\\\"\\n              (click)=\\\"saveMeeting()\\\">\\n              <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n            </button>\\n          </div>\\n        </div>\\n        <!-- modal-footer -->\\n      </div>\\n      <!-- modal-content -->\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdBurndown\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-workteam\\\">\\n          <button id=\\\"btnX_mdBurndown_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color: #ffffff; opacity: 1;\\\" (click)=\\\"doneFilter()\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h3 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">Select work team</h3>\\n        </div>\\n        <!--.modal-header-->\\n        <div id=\\\"search-mdBurndown-dashboard\\\" class=\\\"modal-body\\\" style=\\\"height:100%;\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 search-work-team\\\" style=\\\"padding-right: 3px;\\\">\\n              <div class=\\\"pull left col-xs-11 col-sm-11 col-md-11 col-lg-11 label-input-mainfilter\\\" style=\\\" padding: 0; margin-left: 0;\\\">\\n                <input id=\\\"searchuser-mdBurndown-dashboard\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"Search\\\"\\n                  [(ngModel)]=\\\"searchuser\\\" style=\\\"font-weight: bold; font-size: 17px;\\\">\\n              </div>\\n              <div class=\\\"pull-right col-xs-1 col-sm-1 col-md-1 col-lg-1 search-input-mainfilter\\\" style=\\\"margin: 0; padding: 0;\\\">\\n                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248); font-size: 1.8em;\\\"></i>\\n              </div>\\n            </div>\\n          </div>\\n          <div id=\\\"select-mdBurndown-dashboard\\\" class=\\\"form-group\\\" style=\\\"max-height: 400px;overflow: scroll;\\\">\\n            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n              <thead>\\n                <th id=\\\"selectall-mdBurndown-dashboard\\\" (click)=\\\"selectAllItems()\\\" style=\\\"width: 30px; padding-left: 10px; padding-top: 10px;\\\">\\n                  <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"padding-left: 15px; padding-top: 0; font-size: 1.5em;\\\">\\n                    <i *ngIf=\\\"selectedNodes.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    <i *ngIf=\\\"selectedNodes.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                  </div>\\n                  <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 select-product\\\" style=\\\"color: rgb(130, 145, 152); padding: 6px 0;\\\">\\n                    ALL\\n                  </div>\\n                </th>\\n              </thead>\\n              <tbody>\\n                <tr *ngFor=\\\"let ct of contactsTree\\\">\\n                  <td style=\\\"padding:0 12px 12px 12px; \\\">\\n                    <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"height: auto; padding: 0;\\\">\\n\\n                      <p-checkbox id=\\\"selectparent-mdBurndown-dashboard\\\" name=\\\"product-checkbox\\\" value=\\\"{{ct.data}}\\\"\\n                        label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelectA($event, ct.children, ct.data)\\\"\\n                        (change)=\\\"updateSelectA($event, ct.children, ct.data)\\\"></p-checkbox>\\n\\n                    </div>\\n                    <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align: left; padding: 0;text-transform: uppercase; font-weight: bold; \\\">\\n                      {{ ct.label }}\\n                    </div>\\n                    <div *ngIf=\\\"ct.children.length > 0\\\">\\n                      <div *ngFor=\\\"let ch of ct.children | filter : searchuser\\\" style=\\\"margin-left:20px;\\\">\\n                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\" style=\\\"margin:0;padding:0;height:auto;max-height: 30px;\\\">\\n                          <p-checkbox id=\\\"selectchild-mdBurndown-dashboard\\\" name=\\\"product-checkbox\\\" value=\\\"{{ch.data}}\\\"\\n                            label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelect($event)\\\" (change)=\\\"updateSelect($event)\\\"></p-checkbox>\\n                        </div>\\n                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align:left;height:auto;max-height: 30px; padding:0; font-weight: bold;\\\">\\n                          {{ ch.label }}\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </td>\\n                </tr>\\n              </tbody>\\n            </table>\\n          </div>\\n        </div>\\n        <!--.modal-body-->\\n        <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n          <button id=\\\"btnDone_mdBurndown_dashboard\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\" data-dismiss=\\\"modal\\\"\\n            (click)=\\\"doneFilter()\\\">Done</button>\\n        </div>\\n        <!--.modal-footer-->\\n      </div>\\n      <!--.modal-content-->\\n    </div>\\n    <!--.modal-dialog-->\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddItem\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-roles\\\">\\n        <div class=\\\"modal-header header-event header-role\\\">\\n          <button id=\\\"btnX_mdAddItem_dashboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <img src=\\\"img/close_icon.svg\\\" class=\\\"img-close\\\">\\n          </button>\\n          <h4 class=\\\"modal-title\\\"> Add Tasks </h4>\\n        </div>\\n        <div class=\\\"modal-body scrollable\\\">\\n          <div class=\\\"row\\\">\\n            <div id=\\\"form-mdAddItem-dashboard\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group scrollable\\\">\\n                <table class=\\\"table table-bordered2 table-hover table-striped table-role\\\">\\n                  <thead style=\\\"border-top: 3px solid #D4D9DB!important;\\\">\\n                    <th id=\\\"selectall-mdAddItem-dashboard\\\" (click)=\\\"selectAll()\\\" style=\\\"width: 30px;border-right: 3px solid #D4D9DB!important;\\\">\\n                      <i *ngIf=\\\"add_items.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                      <i *ngIf=\\\"add_items.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    </th>\\n                    <th style=\\\"width:50px;border-right: 3px solid #D4D9DB!important;\\\"> Task</th>\\n                    <th style=\\\"width:200px;border-right: 3px solid #D4D9DB!important;\\\"> Task Description</th>\\n                    <th style=\\\"width:100px;\\\"> user asigned</th>\\n                  </thead>\\n                  <tbody>\\n                    <tr *ngFor=\\\"let sl of selectList\\\">\\n                      <td style=\\\"border-right: 3px solid #D4D9DB!important;\\\">\\n                        <div class=\\\"ui-g\\\">\\n                          <p-checkbox id=\\\"selecttasks-mdAddItem-dashboard\\\" name=\\\"list-tasks\\\" value=\\\"{{sl.task_id}}\\\"\\n                            label=\\\"\\\" [(ngModel)]=\\\"add_items\\\"></p-checkbox>\\n                        </div>\\n                      </td>\\n                      <td style=\\\"text-align:left; padding-left:5px; border-right: 3px solid #D4D9DB!important;\\\">{{sl.task_id}}</td>\\n                      <td style=\\\"text-align:left; padding-left:5px;border-right: 3px solid #D4D9DB!important;\\\">{{escapeHtml(sl.task_description)}}</td>\\n                      <td style=\\\"text-align:left; padding-left:5px;\\\">{{sl.asigned}}</td>\\n                    </tr>\\n                  </tbody>\\n                </table>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div style=\\\"border-top: 3px solid #D4D9DB!important;margin-left: 14px;width: 95%;\\\">\\n        </div>\\n        <div class=\\\"modal-footer close-footer\\\" style=\\\"margin-top: 10px!important;\\\">\\n          <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n            <button id=\\\"btnClose_mdAddItem_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\"\\n              data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">Close</button>\\n            <button id=\\\"saveitems-mdAddItem-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(164, 203, 91);\\\"\\n              data-dismiss=\\\"modal\\\" [disabled]=\\\"!add_items || add_items <= 0 || add_items == ''\\\" (click)=\\\"addItems(add_items)\\\">Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button id=\\\"btnX_mdAddTask_dashboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n        </div>\\n        <div id=\\\"form-mdAddTask-dashboard\\\" class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Subject</label>\\n                <input id=\\\"task_subject-mdAddTask-dashboard\\\" name=\\\"task_subject-mdAddTask-dashboard\\\" class=\\\"form-control\\\"\\n                  [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"Subject\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"prod_id-mdAddTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                  [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Assign to</label>\\n                <p-dropdown id=\\\"user_asigned-mdAddTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                  [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar id=\\\"task_delivery-mdAddTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Points</label>\\n                <input id=\\\"task_points-mdAddTask-dashboard\\\" type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"task.task_points\\\"\\n                  [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-xs-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Associate a Project</label>\\n                <p-dropdown id=\\\"proj_id-mdAddTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                  [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-xs-12 col-md-6 col-lg-4\\\" style=\\\"height: 58px;\\\">\\n              <label>Options</label>\\n              <div class=\\\"col-xs-12 col-md-12 col-lg-12 \\\" style=\\\"padding-top: 5px;\\\">\\n                <label class=\\\"form-check-label\\\">\\n                  <input type=\\\"checkbox\\\" class=\\\"form-check-input\\\" [(ngModel)]=\\\"task.completed\\\"> Mark as Complete\\n                </label>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Description</label>\\n                <p-editor id=\\\"task_description-mdAddTask-dashboard\\\" [(ngModel)]=\\\"task_description\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n          <ul class=\\\"mailbox-attachments clearfix\\\">\\n            <li *ngFor=\\\"let att of task.attachments\\\">\\n              <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                <span class=\\\"mailbox-attachment-icon\\\">\\n                  <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\">\\n                  <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                </span>\\n              </a>\\n              <div class=\\\"mailbox-attachment-info\\\">\\n                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                  <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                </a>\\n                <span class=\\\"mailbox-attachment-size\\\">\\n                  {{att.size + ' bytes'}}\\n                  <button id=\\\"att-mdAddTask-dashboard\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\">\\n                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                  </button>\\n                </span>\\n              </div>\\n            </li>\\n          </ul>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n              for=\\\"fileUpload_mdAddTask_dashboard\\\" class=\\\"custom-file-upload\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"fileUpload_mdAddTask_dashboard\\\" name=\\\"fileUpload_mdAddTask_dashboard\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChangeT($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"btnClose_mdAddTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n              data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\"\\n              data-dismiss=\\\"modal\\\" id=\\\"btnSave_mdAddTask_dashboard\\\" name=\\\"btnSave_mdAddTask_dashboard\\\" [disabled]=\\\"(!task_description || task_description == '' || task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0) || (!task.task_delivery != '')\\\"\\n              (click)=\\\"saveTask()\\\"> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdproject\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button id=\\\"btnX_mdproject_dashboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Project</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Subject</label>\\n                <input id=\\\"proj_subject-mdproject-dashboard\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"project.proj_subject\\\"\\n                  name=\\\"proj_subject-mdproject-dashboard\\\" placeholder=\\\"Subject\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>User Applicant</label>\\n                <p-dropdown id=\\\"user_applicant-mdproject-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"applicantlbl\\\"\\n                  [(ngModel)]=\\\"project.user_applicant\\\" placeholder=\\\"Select a user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Group</label>\\n                <p-dropdown id=\\\"group_assigned-mdproject-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\"\\n                  [(ngModel)]=\\\"project.group_assigned\\\" placeholder=\\\"Select a group\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"prod_id-mdproject-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                  [(ngModel)]=\\\"project.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Category</label>\\n                <p-dropdown id=\\\"dropdownCategory_mdproject_dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"categories\\\" [(ngModel)]=\\\"project.para_category\\\" placeholder=\\\"Select a Category\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar id=\\\"proj_end-mdproject-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"project.proj_end\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Estimated Points</label>\\n                <input id=\\\"proj_propoints-mdproject-dashboard\\\" type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"project.proj_propoints\\\"\\n                  [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Stake Holders</label>\\n                <span class=\\\"ui-fluid\\\">\\n                  <p-autoComplete id=\\\"users-mdproject-dashboard\\\" [(ngModel)]=\\\"project.users\\\" [disabled]=\\\"usersCRM.length == 0\\\"\\n                    [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                    placeholder=\\\"Stake Holders\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                  </p-autoComplete>\\n                </span>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Description</label>\\n                <p-editor id=\\\"proj_description-mdproject-dashboard\\\" [(ngModel)]=\\\"project.proj_description\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"project.attachments && project.attachments.length > 0\\\">\\n          <ul class=\\\"mailbox-attachments clearfix\\\">\\n            <li *ngFor=\\\"let att of project.attachments\\\">\\n              <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                <span class=\\\"mailbox-attachment-icon\\\">\\n                  <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\">\\n                  <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                </span>\\n              </a>\\n              <div class=\\\"mailbox-attachment-info\\\">\\n                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                  <i class=\\\"fa fa-paperclip\\\"></i>{{ att.pjat_name }}\\n                </a>\\n                <span class=\\\"mailbox-attachment-size\\\">\\n                  {{att.pjat_size + ' bytes'}}\\n                  <button id=\\\"deleteAttachment_mdproject_dashboard\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                    (click)=\\\"deleteAttachment(att)\\\"><i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                </span>\\n              </div>\\n            </li>\\n          </ul>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"save-mdproject-dashboard\\\" type=\\\"submit\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateProj()\\\"\\n              (click)=\\\"saveproject()\\\"><i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n            <button id=\\\"btnClose_mdproject_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n              for=\\\"fileUpload_mdproject_dashboard\\\" class=\\\"custom-file-upload\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"fileUpload_mdproject_dashboard\\\" name=\\\"fileUpload_mdproject_dashboard\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChangeP($event)\\\" />\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal modal-task fade\\\" id=\\\"mdDailyTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n        <div class=\\\"modal-header header-project\\\">\\n          <button id=\\\"btnX_mdDailyTask_dashboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\"></i>\\n            Record progress\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"overflow:scroll; height:507px;\\\">\\n              <h4 *ngIf=\\\"developing && developing.length > 0\\\" class=\\\"modal-title\\\">\\n                Tasks\\n              </h4>\\n              <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                  <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                    <li class=\\\"active\\\">\\n                      <a data-toggle=\\\"tab\\\" href=\\\"#ptsknew\\\" (click)=\\\"setMytask(0);\\\">None</a>\\n                    </li>\\n                  </ul>\\n                  <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                    *ngFor=\\\"let dv of developing\\\">\\n                    <li *ngIf=\\\"dv.task_pointsl > 0\\\" class=\\\"active\\\">\\n                      <a data-toggle=\\\"tab\\\" href=\\\"#ptsk{{dv.task_id}}\\\" (click)=\\\"showInfo(dv);\\\">{{dv.task_id}}</a>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-9 col-sm-10 col-md-10 col-lg-10\\\">\\n              <div class=\\\"tab-content\\\">\\n                <div *ngIf=\\\"mytask && developing && developing.length > 0 && dailynew == -1\\\" id=\\\"ptsk{{mytask.task_id}}\\\"\\n                  class=\\\"tab-pane fade in active\\\">\\n                  <h3>{{mytask.task_subject}}</h3>\\n                  <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Number</label>\\n                      <p>{{mytask.task_id}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Date</label>\\n                      <p>{{mytask.task_date}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Creator</label>\\n                      <p>{{mytask.creator}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Status</label>\\n                      <p>{{ mytask.status_name }}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Assigned to</label>\\n                      <p>{{mytask.asigned}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Delivery Date</label>\\n                      <p>{{mytask.task_delivery}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Points</label>\\n                      <p>{{mytask.task_points}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Points Recorded</label>\\n                      <p>{{mytask.task_pointsd}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Product</label>\\n                      <p>{{mytask.prod_name}}</p>\\n                    </div>\\n                  </div>\\n                  <label class=\\\"control-label\\\">Description</label>\\n                  <div [innerHtml]=\\\"mytask.task_description\\\" style=\\\"overflow: scroll; height: 80px;\\\"></div>\\n                  <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-6 col-md-6\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mcTask-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"day.dail_date\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                      <span>{{date3|date}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-md-6\\\">\\n                      <div class=\\\"form-group\\\">\\n                        <label>Points</label>\\n                        <input id=\\\"points-mcTask-dashboard\\\" type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"day.dail_points\\\"\\n                          [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points <= 0\\\">Points must be greater than zero</span>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"(parseFloat(mytask.task_pointsd)+parseFloat(day.dail_points) > parseFloat(mytask.task_points))\\\">Points\\n                          selected exceed current task duration.</span>\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"form-group\\\">\\n                    <label>Description</label>\\n                    <textarea id=\\\"text-mcTask-dashboard\\\" style=\\\"resize: vertical;\\\" class=\\\"form-control\\\" rows=\\\"3\\\"\\n                      placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text\\\">{{ \\\"*\\\" + day.dail_date + \\\"*\\\" }}</textarea>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"dailynew == 0\\\" id=\\\"ptsknew\\\" class=\\\"tab-pane fade in active\\\">\\n                  <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mdDaily-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"day.dail_date_2\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Points</label>\\n                      <input id=\\\"points-dashboard\\\" type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"day.dail_points_2\\\"\\n                        [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                      <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points_2 <= 0\\\">Points must be greater than zero</span>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Product</label>\\n                      <p-dropdown id=\\\"prod_id-mdDaily-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                        [(ngModel)]=\\\"day.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Category</label>\\n                      <p-dropdown id=\\\"para_category-mdDaily-dashboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                        [options]=\\\"catdaily\\\" [(ngModel)]=\\\"day.para_category\\\" placeholder=\\\"Select a Category\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Task Refernce</label>\\n                      <p-dropdown id=\\\"task_reference-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblmytasks\\\"\\n                        [(ngModel)]=\\\"day.task_reference\\\" placeholder=\\\"Select a Task\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                      <label>Description</label>\\n                      <textarea id=\\\"text-mdDaily-dashboard\\\" style=\\\"resize: vertical;\\\" class=\\\"form-control\\\" rows=\\\"3\\\"\\n                        placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text_2\\\"></textarea>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"!mytask && !developing && developing.length == 0\\\" id=\\\"ptsk{{mytask.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                  <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n          <button *ngIf=\\\"day && dailynew != 0\\\" id=\\\"save-mcTask-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" [disabled]=\\\"validateDaily(1)\\\" (click)=\\\"saveDaily(day, mytask.task_id)\\\">Save</button>\\n          <button *ngIf=\\\"day && dailynew == 0\\\" id=\\\"save-mcTask2-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" [disabled]=\\\"validateDaily(2)\\\" (click)=\\\"saveDaily(day, 0)\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdTaskStatus\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button id=\\\"btnX_mdTaskStatus_dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            Tasks\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"tab-content\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-12 col-sm-4 col-md-4 inputs-mainfilter\\\" style=\\\"float: right;margin-bottom: 7px;margin-top: -7px;margin-right: 10px;background-color: #fff;\\\">\\n                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                  <div class=\\\"label-input-mainfilter\\\">\\n                    <input type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"\\\"\\n                      [(ngModel)]=\\\"searchtask\\\">\\n                  </div>\\n                  <div class=\\\"search-input-mainfilter\\\" style=\\\"position: absolute; right: 0; top: 2px;\\\">\\n                    <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                  </div>\\n                </div>\\n              </div>\\n              <div style=\\\"width: 100%;\\\">\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <table class=\\\"table table-bordered table-hover table-striped\\\" style=\\\"margin-bottom: 0px;\\\">\\n                    <thead>\\n                      <th style=\\\"text-align: center; width: 10%;\\\">Task</th>\\n                      <th style=\\\"text-align: center; width: 50%;\\\">Task Description</th>\\n                      <th style=\\\"text-align: center; width: 10%;\\\">Points</th>\\n                      <th style=\\\"text-align: center; width: 10%;\\\">Points Recorded</th>\\n                      <th style=\\\"text-align: center; width: 20%;\\\">Assigned</th>\\n                    </thead>\\n                  </table>\\n                </div>\\n              </div>\\n              <div style=\\\"max-height: 400px;overflow: scroll;width: 100%;\\\">\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                    <tbody>\\n                      <tr *ngFor=\\\"let tk of taskbystatus | filter : searchtask\\\">\\n                        <td style=\\\"text-align: center; width: 10%;\\\">{{ escapeHtml(tk.task_id) }}</td>\\n                        <td style=\\\"text-align: center; width: 50%;\\\">{{ escapeHtml(tk.task_subject) }}</td>\\n                        <td style=\\\"text-align: center; width: 10%;\\\">{{ escapeHtml(tk.task_points) }}</td>\\n                        <td style=\\\"text-align: center; width: 10%;\\\">{{ escapeHtml(tk.task_pointsd) }}</td>\\n                        <td style=\\\"text-align: center; width: 20%;\\\">{{ escapeHtml(tk.assigned) }}</td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" id=\\\"btnClose_mdTaskStatus_dashboard\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n            data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal modal-versionctrl fade\\\" id=\\\"mdVersionControl\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\" style=\\\"width: 70%;\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            New updates Version 4.0.1\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"tab-content\\\">\\n            <div class=\\\"row\\\">\\n              <div style=\\\"width: 100%;\\\">\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <h4>Description</h4>\\n                  <div [innerHtml]=\\\"versionControl\\\" style=\\\"overflow: scroll; height: 200px;\\\"></div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div style=\\\"max-height: 400px;overflow: scroll;width: 100%;\\\">\\n            <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n              <table class=\\\"table table-bordered table-hover table-striped\\\">\\n              </table>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-versioncontrol\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!--.modal fade-->\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/dashboard/dashboard.template.html\n// module id = 817\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"taskboard\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> TASKBOARD\\n            <small style=\\\"font-size:15px;\\\">Main Control</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Taskboard</li>\\n        </ol>\\n    </section>\\n    <div class=\\\"row\\\" style=\\\"height: auto;background: rgb(244,244,244);\\\">\\n        <div class=\\\"col-xs-12 col-sm-12 col-md-2 col-lg-2\\\" style=\\\"padding-top: 9px;\\\">\\n            <div class=\\\"modal-body myteam\\\" style=\\\"height: 45px;width: 100px; margin: 0 auto;\\\">\\n                <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\" *ngIf=\\\"requests && requests.length == 0\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 1px;\\\">\\n                        <div id=\\\"btn-mainfilter\\\" (click)=\\\"showMainFilter(1)\\\">\\n                            <i class=\\\"fa fa-filter\\\" aria-hidden=\\\"true\\\" style=\\\"color: #fff;padding-top: 8px;padding-left: 9px;display:inline-block!important;\\\"></i>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"requests && requests.length > 0\\\" class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding: 1px;\\\">\\n                        <div id=\\\"btn-search\\\" (click)=\\\"showReqTask()\\\" style=\\\"background: rgb(36,122,205)\\\">\\n                            <i class=\\\"sq sq-requests\\\" aria-hidden=\\\"true\\\" style=\\\"color: #fff;padding-top: 8px;padding-left: 9px;display:inline-block!important;\\\"></i>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding: 1px;\\\">\\n                        <div id=\\\"btn-mainfilter\\\" (click)=\\\"showMainFilter(1)\\\">\\n                            <i class=\\\"fa fa-filter\\\" aria-hidden=\\\"true\\\" style=\\\"color: #fff;padding-top: 8px;padding-left: 9px;display:inline-block!important;\\\"></i>\\n                        </div>\\n                    </div>\\n\\n                </div>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"lblgroups && lblgroups.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5\\\" style=\\\"text-align: center;\\\">\\n            <div class=\\\"box-header with-border select-group\\\" style=\\\"padding-bottom: 0px;\\\">\\n                <div class=\\\"btn btn-sm\\\" style=\\\"color:rgb(35,121,205);\\\">\\n                    <span style=\\\"font-size: 14px;font-weight: bold;padding-right: 0px;padding-left: 0px;\\\">Group</span>\\n                </div>\\n                <p-dropdown id=\\\"ddwnr_taskboard\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                    [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\" [(ngModel)]=\\\"myteam.grop_id\\\" placeholder=\\\"Select a group\\\"\\n                    filter=\\\"filter\\\" (onChange)=\\\"updateTeam(myteam.grop_id)\\\"></p-dropdown>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"sprintslist && sprintslist.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5\\\" style=\\\"text-align: center;\\\">\\n            <div class=\\\"box-header with-border select-group\\\" style=\\\"padding-bottom: 0px;\\\">\\n                <div class=\\\"btn btn-sm\\\" style=\\\"color:rgb(35,121,205);\\\">\\n                    <span style=\\\"font-size: 14px;font-weight: bold;padding-right: 0px;padding-left: 0px;\\\">Sprint</span>\\n                </div>\\n                <p-dropdown id=\\\"ddwnr_taskboard2\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                    [autoWidth]=\\\"false\\\" [options]=\\\"sprintslist\\\" [(ngModel)]=\\\"mysprint.spri_id\\\" placeholder=\\\"Select a Sprint\\\"\\n                    filter=\\\"filter\\\" (onChange)=\\\"updateSprint()\\\"></p-dropdown>\\n            </div>\\n        </div>\\n        <div class=\\\"row col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-right: 20%; margin-left: 20%; padding:4px;\\\">\\n            <div class=\\\"modal-content-sprint team\\\" *ngIf=\\\"team && team.length > 0\\\" class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8\\\">\\n                <div class=\\\"modal-body myteam\\\" style=\\\"padding: 4px;\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                        <div class=\\\"nav-tabs-custom-spr\\\" style=\\\"overflow-x: scroll;\\\">\\n                            <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                <li *ngFor=\\\"let tm of team; let i = index\\\" [ngClass]=\\\"{ 'active': tm.usersel}\\\">\\n                                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"teamInfo(tm.grop_id, tm.user_name, tm.user_lastname, tm.role_name,[tm.user_id],tm.user_id)\\\"\\n                                        style=\\\"color: #839195; text-decoration: none;\\\">\\n                                        <div *ngIf=\\\"tm.user_id != 0\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.user_name +' '+ tm.user_lastname}}\\\"\\n                                            class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;background: transparent;\\\"\\n                                            [ngStyle]=\\\"{ 'border-color': tm.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                                            <img [src]=\\\"tm.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" style=\\\"padding: 0px; width:39px;height:39px;border-radius: 50%;\\\"\\n                                                class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                        </div>\\n                                        <div *ngIf=\\\"tm.user_id == 0\\\" class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;\\\"\\n                                            [ngStyle]=\\\"{ 'background': tm.role_color}\\\">\\n                                            <i class=\\\"sq sq-scrum user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 30px;\\\"></i>\\n                                        </div>\\n                                    </a>\\n                                </li>\\n                            </ul>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-md-12\\\" style=\\\"padding-left: 20px;\\\">\\n                            <h5 id=\\\"team-name\\\" class=\\\"team-label\\\" style=\\\"margin-bottom:0;\\\"></h5>\\n                            <h6 id=\\\"team-profile\\\" class=\\\"team-label\\\" style=\\\"margin:0;\\\"></h6>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!-- Main content -->\\n    <section class=\\\"content\\\" style=\\\"min-height:100%; position:relative;padding: 0px 15px 0px 15px;\\\">\\n        <div class=\\\"row\\\">\\n            <div *ngIf=\\\"spinner == true\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height:100%;\\\">\\n                <div class=\\\"sk-fading-circle\\\" *ngIf=\\\"tasks.length == 0\\\">\\n                    <div class=\\\"sk-circle1 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle2 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle3 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle4 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle5 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle6 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle7 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle8 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle9 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle10 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle11 sk-circle\\\"></div>\\n                    <div class=\\\"sk-circle12 sk-circle\\\"></div>\\n                </div>\\n            </div>\\n            <div *ngIf=\\\"spinner == false \\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-right:-30px;margin-left:0px;\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"table-responsive\\\" style=\\\"padding-bottom:30px;max-height:none!important;\\\">\\n                            <div style=\\\"margin-bottom:15px; width:100%; height:1050; padding:5px;\\\">\\n                                <!--PENDING-->\\n                                <div class=\\\"table-column-pending pull-left\\\">\\n                                    <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                            <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                                <h3 class=\\\"box-title\\\">\\n                                                    <i class=\\\"sq sq-pending\\\"></i> PENDING</h3>\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                                {{ round(sumx(pending | filterfield : { pos: posProduct, text:\\n                                                selectedProduct } | filterfield : { pos : 'proj_id', text :\\n                                                selectedprojects } | filterfield : { pos : posState, text :\\n                                                selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' },\\n                                                \\\"36\\\"),2) }} pts\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div id=\\\"pending\\\" class=\\\"table-body_taskboard pull-left box-solid pending\\\"\\n                                        pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '36')\\\" style=\\\"width:100%;height:90%;\\\">\\n                                        <div *ngFor=\\\"let pd of pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' };\\\">\\n                                            <div class=\\\"box taskboard-tile taskboard-tile-{{pd.label}} box-solid pending table-element\\\"\\n                                                id=\\\"tk{{pd.task_id}}\\\" style=\\\"list-style-type: none;\\\" pDraggable=\\\"tb\\\"\\n                                                (onDragStart)=\\\"dragStart($event, pd, '36')\\\">\\n                                                <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{pd.labelbackground}} taskboard-box-radius-{{pd.label}}\\\">\\n                                                    <div class=\\\"c100 p{{pd.percentage}} xsmall\\\">\\n                                                        <span (click)=\\\"showModalTimeLine(pd)\\\" class=\\\"percentage-{{pd.label}}\\\"\\n                                                            style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{pd.percentage}}%</span>\\n                                                        <div class=\\\"slice\\\">\\n                                                            <div class=\\\"{{pd.label}} bar\\\"></div>\\n                                                            <div class=\\\"{{pd.label}} fill\\\"></div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span (click)=\\\"showModal(pd)\\\" style=\\\"cursor: pointer;\\\">\\n                                                            <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{pd.task_id }}\\n                                                        </span>\\n                                                        <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{round(pd.task_pointsd,\\n                                                            2) + \\\"/\\\" + round(pd.task_points, 2) }}</span>\\n                                                    </h3>\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span *ngIf=\\\"pd.proj_id != null\\\">\\n                                                            <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{pd.proj_id}}\\n                                                        </span>\\n                                                    </h3>\\n                                                    <div class=\\\"box-tools pull-right\\\">\\n                                                        <div class=\\\"btn-group\\\">\\n                                                            <button id=\\\"settings-backlog-taskboard2\\\" type=\\\"button\\\"\\n                                                                class=\\\"btn btn-xs task-btn-default dropdown-toggle\\\"\\n                                                                data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\"\\n                                                                aria-expanded=\\\"false\\\" style=\\\"background-color:transparent;\\\">\\n                                                                <i class=\\\"sq sq-setup\\\"></i>\\n                                                            </button>\\n                                                            <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"showtags-taskboard2\\\"\\n                                                                        style=\\\"color:#333\\\" (click)=\\\"showTags(pd)\\\">\\n                                                                        <i class=\\\"fa fa-plus\\\"></i> Add a tag</a>\\n                                                                </li>\\n                                                                <li role=\\\"separator\\\" class=\\\"divider\\\"></li>\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"sendbackdv-taskboard2\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"sendBack(pd)\\\"\\n                                                                        data-toggle=\\\"modal\\\" data-target=\\\"#mdBack\\\">\\n                                                                        <i class=\\\"sq sq-backlog\\\"></i> Move to Backlog</a>\\n                                                                </li>\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"todevelopimp-taskboard2\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"changeStatus(pd, 38)\\\">\\n                                                                        <i class=\\\"sq sq-developing\\\"></i> Move to\\n                                                                        Developing</a>\\n                                                                </li>\\n                                                                <li *ngIf=\\\"pd.task_pointsd == 0\\\">\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"tosprint-taskboard-pending\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"showEditSprint(pd)\\\"\\n                                                                        data-toggle=\\\"modal\\\" data-target=\\\"#mdSprints\\\">\\n                                                                        <i class=\\\"sq sq-sprints\\\"></i> Add or Delete\\n                                                                        from\\n                                                                        Sprint</a>\\n                                                                </li>\\n                                                            </ul>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(pd.proj_id) }\\\"\\n                                                    style=\\\"height:1975x;float:left;min-width: 80%;\\\">\\n                                                    <div class=\\\"row infotask\\\">\\n\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                            [innerHTML]=\\\"pd.task_subject\\\"></div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"height:20px!important;\\\">Delivery date:{{\\\"\\n                                                                \\\"+pd.delivery}}\\n                                                            </div>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Label\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                        <div *ngIf=\\\"pd.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                            [ngStyle]=\\\"{background:pd.tags[0].color}\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{pd.tags[0].custom_desc}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <i class=\\\"{{pd.tags[0].icon}}\\\"></i>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                                <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Work\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                        <div *ngFor=\\\"let ft of pd.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <span class=\\\"span-img-taskboard\\\">\\n                                                                                <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                    class=\\\"user-image img-taskboard-user\\\"\\n                                                                                    alt=\\\"User Image\\\">\\n                                                                            </span>\\n\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"pd.task_id\\\"></taskview>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <!-- END PENDING-->\\n                                <!--DEVELOPING-->\\n                                <div class=\\\"table-column-developing pull-left\\\">\\n                                    <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                            <h3 class=\\\"box-title\\\">\\n                                                <i class=\\\"sq sq-developing\\\"></i> DEVELOPING</h3>\\n                                            <div class=\\\"pull-right\\\" style=\\\"right:75px; top:10px;text-align:right;color:#FFFFFF;font-weight:bold;\\\">\\n                                                {{ sumx(developing | filterfield : { pos : 'proj_id', text :\\n                                                selectedprojects } | filterfield : { pos : posState, text :\\n                                                selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } |\\n                                                filterfield : { pos: posProduct, text: selectedProduct }, \\\"38\\\") }} pts\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"table-column-devtest pull-left\\\" style=\\\"border-right: 2px solid rgb(221, 221, 221);height: 93%;\\\">\\n                                        <div id=\\\"developing\\\" class=\\\"table-body_taskboard pull-left box-solid developing\\\"\\n                                            pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '38')\\\" style=\\\"width:100%;height:97%;\\\">\\n                                            <div *ngFor=\\\"let dv of developing | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct }\\\">\\n                                                <div class=\\\"box taskboard-tile taskboard-tile-{{dv.label}} box-solid developing table-element\\\"\\n                                                    pDraggable=\\\"tb\\\" (onDragStart)=\\\"dragStart($event, dv, '38')\\\" id=\\\"tk{{dv.task_id}}\\\"\\n                                                    style=\\\"list-style-type: none;\\\">\\n                                                    <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{dv.labelbackground}} taskboard-box-radius-{{dv.label}}\\\">\\n                                                        <div class=\\\"c100 p{{dv.percentage}} xsmall\\\">\\n                                                            <span (click)=\\\"showModalTimeLine(dv)\\\" class=\\\"percentage-{{dv.label}}\\\"\\n                                                                style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{dv.percentage}}%</span>\\n                                                            <div class=\\\"slice\\\">\\n                                                                <div class=\\\"{{dv.label}} bar\\\"></div>\\n                                                                <div class=\\\"{{dv.label}} fill\\\"></div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                        <h3 class=\\\"box-title\\\">\\n                                                            <span (click)=\\\"showModal(dv)\\\" style=\\\"cursor: pointer;\\\">\\n                                                                <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                                {{dv.task_id }}\\n                                                            </span>\\n                                                            <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{\\n                                                                round(dv.task_pointsd, 2) + \\\"/\\\" + round(dv.task_points,\\n                                                                2) }}</span>\\n                                                        </h3>\\n                                                        <h3 class=\\\"box-title\\\">\\n                                                            <span *ngIf=\\\"dv.proj_id != null\\\">\\n                                                                <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                                {{dv.proj_id}}\\n                                                            </span>\\n                                                        </h3>\\n                                                        <div class=\\\"box-tools pull-right\\\">\\n                                                            <div class=\\\"btn-group\\\">\\n                                                                <button id=\\\"settings-developing-taskboard\\\" type=\\\"button\\\"\\n                                                                    class=\\\"btn btn-xs task-btn-{{dv.label}} dropdown-toggle\\\"\\n                                                                    data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\"\\n                                                                    aria-expanded=\\\"false\\\" style=\\\"background-color:transparent;\\\">\\n                                                                    <i class=\\\"sq sq-setup\\\"></i>\\n                                                                </button>\\n                                                                <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"adjusttime-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"setTime(dv)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mdExtraT\\\">\\n                                                                            <i class=\\\"sq sq-adjust-duration\\\"></i>\\n                                                                            Adjust\\n                                                                            Duration</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"showtags2-taskboard\\\"\\n                                                                            style=\\\"color:#333\\\" (click)=\\\"showTags(dv)\\\">\\n                                                                            <i class=\\\"fa fa-plus\\\"></i> Add a tag</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"recordp-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"setTask(dv)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mcTask\\\">\\n                                                                            <i class=\\\"sq sq-record-progress\\\"></i>\\n                                                                            Record\\n                                                                            Progress</a>\\n                                                                    </li>\\n                                                                    <li role=\\\"separator\\\" class=\\\"divider\\\"></li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"tocompletedv-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"changeStatus(dv, 40)\\\">\\n                                                                            <i class=\\\"sq sq-completed\\\"></i> Move to\\n                                                                            Complete</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"topendingdv-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"changeStatus(dv, 36)\\\">\\n                                                                            <i class=\\\"sq sq-pending\\\"></i> Move to\\n                                                                            Pending</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"toimprovingcp-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"showCpImp(dv)\\\">\\n                                                                            <i class=\\\"sq sq-improving\\\"></i> Move to\\n                                                                            Improving</a>\\n                                                                    </li>\\n                                                                    <li *ngIf=\\\"dv.task_pointsd == 0\\\">\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"tosprint2-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"showEditSprint(dv)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mdSprints\\\">\\n                                                                            <i class=\\\"sq sq-sprints\\\"></i> Add or Delete\\n                                                                            from\\n                                                                            Sprint</a>\\n                                                                    </li>\\n                                                                    <li role=\\\"separator\\\" class=\\\"divider\\\"></li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"sendbackdv-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"sendBack(dv)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mdBack\\\">\\n                                                                            <i class=\\\"sq sq-backlog\\\"></i> Move to\\n                                                                            Backlog</a>\\n                                                                    </li>\\n                                                                </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(dv.proj_id) }\\\"\\n                                                        style=\\\"height:1975x;float:left;min-width: 80%;\\\">\\n                                                        <div class=\\\"row infotask\\\">\\n\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                                [innerHTML]=\\\"dv.task_subject\\\"></div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                    style=\\\"height:20px!important;\\\">Delivery\\n                                                                    date:{{\\\" \\\"+dv.delivery}}\\n                                                                </div>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                    style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                    <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                            style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                            Label\\n                                                                        </div>\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                            <div *ngIf=\\\"dv.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                                [ngStyle]=\\\"{background:dv.tags[0].color}\\\"\\n                                                                                aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                                pTooltip=\\\"{{dv.tags[0].custom_desc}}\\\"\\n                                                                                data-container=\\\"body\\\">\\n                                                                                <i class=\\\"{{dv.tags[0].icon}}\\\"></i>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                    <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                            style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                            Work\\n                                                                        </div>\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                            <div *ngFor=\\\"let ft of dv.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                                aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                                pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                                data-container=\\\"body\\\">\\n                                                                                <span class=\\\"span-img-taskboard\\\">\\n                                                                                    <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                        class=\\\"user-image img-taskboard-user\\\"\\n                                                                                        alt=\\\"User Image\\\">\\n                                                                                </span>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <taskview [myTaskId]=\\\"dv.task_id\\\"></taskview>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <!--END DEVELOPING-->\\n                                    <!-- COMPLETE-->\\n                                    <div class=\\\"table-column-devtest pull-left\\\">\\n                                        <div id=\\\"complete\\\" class=\\\"table-body_taskboard pull-left box-solid complete\\\"\\n                                            pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '40')\\\" style=\\\"width:100%;height:98%;\\\">\\n                                            <div *ngFor=\\\"let cp of complete | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct }; \\\">\\n                                                <div class=\\\"box taskboard-tile taskboard-tile-{{cp.label}} box-solid complete table-element\\\"\\n                                                    pDraggable=\\\"tb\\\" (onDragStart)=\\\"dragStart($event, cp, '40')\\\"\\n                                                    [dragDirective]='40' (releaseDrop)=\\\"releaseDrop(40, cp)\\\" id=\\\"tk{{cp.task_id}}\\\"\\n                                                    style=\\\"list-style-type: none;\\\">\\n                                                    <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{cp.labelbackground}} taskboard-box-radius-{{cp.label}}\\\">\\n                                                        <div class=\\\"c100 p{{cp.percentage}} xsmall\\\">\\n                                                            <span (click)=\\\"showModalTimeLine(cp)\\\" class=\\\"percentage-{{cp.label}}\\\"\\n                                                                style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{cp.percentage}}%</span>\\n                                                            <div class=\\\"slice\\\">\\n                                                                <div class=\\\"{{cp.label}} bar\\\"></div>\\n                                                                <div class=\\\"{{cp.label}} fill\\\"></div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                        <h3 class=\\\"box-title\\\">\\n                                                            <span (click)=\\\"showModal(cp)\\\" style=\\\"cursor: pointer;\\\">\\n                                                                <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                                {{cp.task_id }}\\n                                                            </span>\\n                                                            <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{\\n                                                                round(cp.task_pointsd, 2) + \\\"/\\\" + round(cp.task_points,\\n                                                                2)}}</span>\\n                                                        </h3>\\n                                                        <h3 class=\\\"box-title\\\" *ngIf=\\\"cp.proj_id != null\\\">\\n                                                            <span>\\n                                                                <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                                {{cp.proj_id}}\\n                                                            </span>\\n                                                        </h3>\\n                                                        <div class=\\\"box-tools pull-right\\\">\\n                                                            <div class=\\\"btn-group\\\">\\n                                                                <button id=\\\"settings-complete-taskboard\\\" type=\\\"button\\\"\\n                                                                    class=\\\"btn btn-xs task-btn-{{cp.label}} dropdown-toggle\\\"\\n                                                                    data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\"\\n                                                                    aria-expanded=\\\"false\\\" style=\\\"background-color:transparent;\\\">\\n                                                                    <i class=\\\"sq sq-setup\\\"></i>\\n                                                                </button>\\n                                                                <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"toimprovingcp-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"showCpImp(cp)\\\">\\n                                                                            <i class=\\\"sq sq-improving\\\"></i> Move to\\n                                                                            Improving</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"addtagcp-taskboard\\\"\\n                                                                            style=\\\"color:#333\\\" (click)=\\\"showTags(cp)\\\">\\n                                                                            <i class=\\\"fa fa-plus\\\"></i> Add a tag</a>\\n                                                                    </li>\\n                                                                    <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"closetaskcp-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" *ngIf=\\\"cp.canclose == 1\\\"\\n                                                                            (click)=\\\"closeTask(cp)\\\">\\n                                                                            <i class=\\\"fa fa-check\\\"></i> Close task </a>\\n                                                                    </li>\\n                                                                    <!-- <li>\\n                                                                        <a class=\\\"items-lists\\\" id=\\\"tosprint-taskboard\\\"\\n                                                                            style=\\\"color: #333;\\\" (click)=\\\"showEditSprint(cp)\\\"\\n                                                                            data-toggle=\\\"modal\\\" data-target=\\\"#mdSprints\\\">\\n                                                                            <i class=\\\"sq sq-sprints\\\"></i> Add or Delete\\n                                                                            from\\n                                                                            Sprint</a>\\n                                                                    </li> -->\\n                                                                </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(cp.proj_id) }\\\"\\n                                                        style=\\\"height:175px;float:left;min-width: 80%;\\\">\\n                                                        <div class=\\\"row infotask\\\">\\n\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                                [innerHTML]=\\\"cp.task_subject\\\"></div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                    style=\\\"height:20px!important;\\\">Delivery date:{{\\\"\\n                                                                    \\\"+cp.delivery}}\\n                                                                </div>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                    style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                    <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                            style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                            Label\\n                                                                        </div>\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                            <div *ngIf=\\\"cp.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                                [ngStyle]=\\\"{background:cp.tags[0].color}\\\"\\n                                                                                aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                                pTooltip=\\\"{{cp.tags[0].custom_desc}}\\\"\\n                                                                                data-container=\\\"body\\\">\\n                                                                                <i class=\\\"{{cp.tags[0].icon}}\\\"></i>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                    <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                            style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                            Work\\n                                                                        </div>\\n                                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                            <div *ngFor=\\\"let ft of cp.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                                aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                                pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                                data-container=\\\"body\\\">\\n                                                                                <span class=\\\"span-img-taskboard\\\">\\n                                                                                    <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                        class=\\\"user-image img-taskboard-user\\\"\\n                                                                                        alt=\\\"User Image\\\">\\n                                                                                </span>\\n\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <taskview [myTaskId]=\\\"cp.task_id\\\"></taskview>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <!-- END COMPLETE-->\\n                                </div>\\n                                <!--IMPROVING-->\\n                                <div class=\\\"table-column pull-left\\\">\\n                                    <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 6px 10px;\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                            <h3 class=\\\"box-title\\\">\\n                                                <i class=\\\"sq sq-improving\\\"></i> IMPROVING</h3>\\n                                            <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                                <span *ngIf=\\\"(improving | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct }).length > 0\\\"\\n                                                    class=\\\"label label-red notif-tk-imp\\\">{{ (improving | filterfield :\\n                                                    { pos : 'proj_id', text : selectedprojects } | filterfield : { pos\\n                                                    : posState, text : selectedUsers, or : byme ? myUsers : [], orfield\\n                                                    : 'user_creator' } | filterfield : { pos: posProduct, text:\\n                                                    selectedProduct }).length }}</span> <i class=\\\"sq sq-taskboard\\\"\\n                                                    style=\\\"font-size: 22px;\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div id=\\\"improving\\\" class=\\\"table-body_taskboard pull-left box-solid improving\\\"\\n                                        pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '41')\\\" style=\\\"width:100%;height:90%;\\\">\\n                                        <div *ngFor=\\\"let imp of improving | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct }; \\\">\\n                                            <div class=\\\"box taskboard-tile taskboard-tile-{{imp.label}} box-solid improving  table-element\\\"\\n                                                pDraggable=\\\"tb\\\" (onDragStart)=\\\"dragStart($event, imp, '41')\\\" id=\\\"tk{{imp.task_id}}\\\"\\n                                                style=\\\"list-style-type: none;\\\">\\n                                                <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{imp.labelbackground}} taskboard-box-radius-{{imp.label}}\\\">\\n                                                    <div class=\\\"c100 p{{imp.percentage}} xsmall\\\">\\n                                                        <span (click)=\\\"showModalTimeLine(imp)\\\" class=\\\"percentage-{{imp.label}}\\\"\\n                                                            style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{imp.percentage}}%</span>\\n                                                        <div class=\\\"slice\\\">\\n                                                            <div class=\\\"{{imp.label}} bar\\\"></div>\\n                                                            <div class=\\\"{{imp.label}} fill\\\"></div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span (click)=\\\"showModal(imp)\\\" style=\\\"cursor: pointer;\\\">\\n                                                            <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{imp.task_id }}\\n                                                        </span>\\n                                                        <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{\\n                                                            round(imp.task_pointsd, 2) + \\\"/\\\" + round(imp.task_points,\\n                                                            2)}}</span>\\n                                                    </h3>\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span *ngIf=\\\"imp.proj_id != null\\\">\\n                                                            <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{imp.proj_id}}\\n                                                        </span>\\n                                                    </h3>\\n                                                    <div class=\\\"box-tools pull-right\\\">\\n                                                        <div class=\\\"btn-group\\\">\\n                                                            <button id=\\\"settings-improving-taskboard\\\" type=\\\"button\\\"\\n                                                                class=\\\"btn btn-xs task-btn-{{imp.label}} dropdown-toggle\\\"\\n                                                                data-toggle=\\\"dropdown\\\" aria-haspopup=\\\"true\\\"\\n                                                                aria-expanded=\\\"false\\\" style=\\\"background-color:transparent;\\\">\\n                                                                <i class=\\\"sq sq-setup\\\"></i>\\n                                                            </button>\\n                                                            <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\" style=\\\"width: 1060%;left: -657%;\\\">\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"todevelopimp-taskboard\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"changeStatus(imp, 38)\\\">\\n                                                                        <i class=\\\"sq sq-developing\\\"></i> Move to\\n                                                                        Developing</a>\\n                                                                </li>\\n                                                                <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"addtagimp-taskboard\\\"\\n                                                                        style=\\\"color:#333\\\" (click)=\\\"showTags(imp)\\\">\\n                                                                        <i class=\\\"fa fa-plus\\\"></i> Add a tag</a>\\n                                                                </li>\\n                                                                <!-- <li>\\n                                                                    <a class=\\\"items-lists\\\" id=\\\"tosprint3-taskboard\\\"\\n                                                                        style=\\\"color: #333;\\\" (click)=\\\"showEditSprint(imp)\\\"\\n                                                                        data-toggle=\\\"modal\\\" data-target=\\\"#mdSprints\\\">\\n                                                                        <i class=\\\"sq sq-sprints\\\"></i> Add or Delete\\n                                                                        from\\n                                                                        Sprint</a>\\n                                                                </li> -->\\n                                                            </ul>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(imp.proj_id) }\\\"\\n                                                    style=\\\"height:175px;float:left;min-width: 80%;\\\">\\n                                                    <div class=\\\"row infotask\\\">\\n\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                            [innerHTML]=\\\"imp.task_subject\\\"></div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"height:20px!important;\\\">Delivery date:{{\\\"\\n                                                                \\\"+imp.delivery}}\\n                                                            </div>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Label\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                        <div *ngIf=\\\"imp.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                            [ngStyle]=\\\"{background:imp.tags[0].color}\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{imp.tags[0].custom_desc}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <i class=\\\"{{imp.tags[0].icon}}\\\"></i>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                                <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Work\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                        <div *ngFor=\\\"let ft of imp.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <span class=\\\"span-img-taskboard\\\">\\n                                                                                <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                    class=\\\"user-image img-taskboard-user\\\"\\n                                                                                    alt=\\\"User Image\\\">\\n                                                                            </span>\\n\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"imp.task_id\\\"></taskview>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <!-- END IMPROVING-->\\n                                <!-- COMPLETE-->\\n                                <div class=\\\"table-column pull-left\\\">\\n                                    <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                            <h3 class=\\\"box-title\\\">\\n                                                <i class=\\\"sq sq-completed\\\"></i> COMPLETED</h3>\\n                                            <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                                {{ round(sumx(close | filterfield : { pos : 'proj_id', text :\\n                                                selectedprojects } | filterfield : { pos : posState, text :\\n                                                selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } |\\n                                                filterfield : { pos: posProduct, text: selectedProduct }, \\\"42\\\"), 2) }}\\n                                                pts\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div id=\\\"closed\\\" class=\\\"table-body_taskboard pull-left box-solid complete\\\"\\n                                        pDroppable=\\\"tb\\\" (onDrop)=\\\"drop($event, '42')\\\" style=\\\"width:100%;height:90%;\\\">\\n                                        <div *ngFor=\\\"let cl of close | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' } | filterfield : { pos: posProduct, text: selectedProduct };\\\">\\n                                            <div class=\\\"box taskboard-tile taskboard-tile-{{cl.label}} box-solid complete table-element taskboard-tile-cl\\\"\\n                                                pDraggable=\\\"tb\\\" (onDragStart)=\\\"dragStart($event, cl, '42')\\\"\\n                                                [dragDirective]='42' (releaseDrop)=\\\"releaseDrop(42, cl)\\\" id=\\\"tk{{cl.task_id}}\\\"\\n                                                style=\\\"list-style-type: none;\\\">\\n                                                <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{cl.labelbackground}} taskboard-box-radius-{{cl.label}}\\\">\\n                                                    <div class=\\\"c100 p{{cl.percentage}} xsmall\\\">\\n                                                        <span (click)=\\\"showModalTimeLine(cl)\\\" class=\\\"percentage-{{cl.label}}\\\"\\n                                                            style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{cl.percentage}}%</span>\\n                                                        <div class=\\\"slice\\\">\\n                                                            <div class=\\\"{{cl.label}} bar\\\"></div>\\n                                                            <div class=\\\"{{cl.label}} fill\\\"></div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"box-header task-tile-header with-border\\\">\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span (click)=\\\"showModal(cl)\\\" style=\\\"cursor: pointer;\\\">\\n                                                            <i class=\\\"sq sq-statustasks\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{cl.task_id }}\\n                                                        </span>\\n                                                        <span style=\\\"text-align:left;float:right;font-size: 11px;\\\">{{\\n                                                            round(cl.task_pointsd, 2) + \\\"/\\\" + round(cl.task_points,\\n                                                            2)}}</span>\\n                                                    </h3>\\n                                                    <h3 class=\\\"box-title\\\">\\n                                                        <span *ngIf=\\\"cl.proj_id != null\\\">\\n                                                            <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                            {{cl.proj_id}}\\n                                                        </span>\\n                                                    </h3>\\n                                                </div>\\n                                                <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(cl.proj_id) }\\\"\\n                                                    style=\\\"height:1975x;float:left;min-width: 80%;\\\">\\n                                                    <div class=\\\"row infotask\\\">\\n\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                            [innerHTML]=\\\"cl.task_subject\\\"></div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"height:20px!important;\\\">Delivery date:{{\\\"\\n                                                                \\\"+cl.delivery}}\\n                                                            </div>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                                style=\\\"border-top: solid 2px white;height: 100%;display: contents;\\\">\\n                                                                <div class=\\\"taginfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Label\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                                        <div *ngIf=\\\"cl.tags[0]\\\" class=\\\"preview-tag-small pull-right\\\"\\n                                                                            [ngStyle]=\\\"{background:cl.tags[0].color}\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{cl.tags[0].custom_desc}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <i class=\\\"{{cl.tags[0].icon}}\\\"></i>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                                <div class=\\\"usersinfo col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                                                        style=\\\"font-weight:bolder;text-align: center;\\\">\\n                                                                        Work\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\">\\n                                                                        <div *ngFor=\\\"let ft of cl.featured\\\" class=\\\"col-xs-6 no-padding\\\"\\n                                                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\"\\n                                                                            pTooltip=\\\"{{ft.title}} {{ft.full_name}}\\\"\\n                                                                            data-container=\\\"body\\\">\\n                                                                            <span class=\\\"span-img-taskboard\\\">\\n                                                                                <img [src]=\\\"ft.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                    class=\\\"user-image img-taskboard-user\\\"\\n                                                                                    alt=\\\"User Image\\\">\\n                                                                            </span>\\n\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"cl.task_id\\\"></taskview>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <!-- END COMPLETE-->\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n    <div class=\\\"modal modal-task fade\\\" id=\\\"mdTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button id=\\\"close-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <div style=\\\"overflow-y: scroll;max-height: 25px;\\\">\\n                        <h4 class=\\\"modal-title\\\">\\n                            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" \\\" + mdT.task_id + \\\" - \\\" +\\n                            mdT.task_subject}}\\n                        </h4>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\">\\n                            <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                                <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                                        <li class=\\\"active\\\">\\n                                            <a id=\\\"info-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#ptsk{{mdT.task_id}}\\\">Info</a>\\n                                        </li>\\n                                        <li>\\n                                            <a id=\\\"proj-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#ptk{{mdT.task_id}}\\\">Project\\n                                                related</a>\\n                                        </li>\\n                                        <li>\\n                                            <a id=\\\"adj-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#taskAdjusted\\\">Adjustments</a>\\n                                        </li>\\n                                        <li>\\n                                            <a id=\\\"timeline-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#taskTimeline\\\">Timeline</a>\\n                                        </li>\\n                                        <li>\\n                                            <a data-toggle=\\\"tab\\\" href=\\\"#taskForm\\\">Form</a>\\n                                        </li>\\n                                        <li>\\n                                            <a data-toggle=\\\"tab\\\" href=\\\"#taskSprint\\\">Sprint related</a>\\n                                        </li>\\n                                        <li *ngIf=\\\"mdT.para_status == '50'\\\">\\n                                            <a data-toggle=\\\"tab\\\" href=\\\"#taskRejected\\\" style=\\\"color: red;\\\"> <i class=\\\"fa fa-exclamation-circle\\\"\\n                                                    aria-hidden=\\\"true\\\"></i> Rejected Reason</a>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"min-height: 390px;\\\">\\n                            <div class=\\\"tab-content\\\">\\n                                <div id=\\\"ptsk{{mdT.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                                    <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"mdT.task_description\\\"\\n                                                style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Status</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.status_name }}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_date}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Creator</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.creator}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Assigned to</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.asigned}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_delivery}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Points Assigned</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_points}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Points Recorded</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_pointsd}}</p>\\n                                        </div>\\n                                        <div *ngIf=\\\"mdT.project\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                                        </div>\\n                                    </div>\\n                                    <div id=\\\"mdTComments\\\" class=\\\"box-footer box-comments\\\" style=\\\"max-height: 130px; overflow-y:scroll; background-color:rgb(238, 242, 244);padding-top: 0px;\\\">\\n                                        <div class=\\\"content-comments-users\\\" style=\\\"max-height:130px; font-size: 14px;\\\">\\n                                            <ul class=\\\"timeline comment-timeline-tk\\\">\\n                                                <li *ngIf=\\\"mdT.comments!=null && mdT.comments.length == 0\\\">\\n\\n                                                </li>\\n                                                <li *ngFor=\\\"let cpm of mdT.comments\\\" style=\\\"margin-top:5px;\\\">\\n                                                    <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 25px;width: 25px;\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\"\\n                                                            style=\\\"color:#FFF; font-size: 20px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <span class=\\\"time\\\">\\n                                                            {{cpm.note_date}}</span>\\n                                                        <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:rgb(130, 145, 152);font-size: 14px;\\\">\\n                                                            <b>{{cpm.creator + \\\" \\\"}}</b> Commented\\n                                                        </h3>\\n                                                        <div class=\\\"timeline-body\\\" style=\\\"overflow-y: scroll; background-color: transparent; max-height:200px; padding-bottom: 1px;\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div class=\\\"col-xs-12 col-md-12\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                    <div class=\\\"col-xs-12 col-md-12 comment-user\\\" style=\\\"background-color:rgb(238, 242, 244); padding-left: 1px; padding-right: 0px;\\\">\\n                                                                        <p class=\\\"comment-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                            <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\"\\n                                                                                style=\\\"color:rgb(68, 180, 248); font-size: 16px;\\\"></i>\\n                                                                            {{escapeHtml(cpm.note_text)}}</p>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer\\\">\\n                                        <button id=\\\"comment-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n                                            data-toggle=\\\"collapse\\\" data-target=\\\"#collapse1\\\" style=\\\"color:white;background-color:rgb(36, 122, 205);width: 160px!important;\\\">\\n                                            <div class=\\\"pull-left\\\">\\n                                                <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:white;background-color:rgb(36, 122, 205);font-size: 16px;\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\">\\n                                                Leave a Comment\\n                                            </div>\\n                                        </button>\\n                                        <div id=\\\"collapse1\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin-top: 10px;\\\">\\n                                            <textarea class=\\\"textarea-comments\\\" id=\\\"text-mdTask-taskboard\\\" [(ngModel)]=\\\"note.note_text\\\"\\n                                                style=\\\"resize: vertical; width: 100%; height: 80px;border: 2px solid rgb(238,242,244);outline: 0px none transparent;\\\"></textarea>\\n                                            <div class=\\\"pull-right\\\">\\n                                                <button id=\\\"publishcomm-mdTask-taskboard\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n                                                    style=\\\"background-color:rgb(51, 141, 197);\\\" type=\\\"button\\\" (click)=\\\"noteAdd(mdT.task_id, 1)\\\"\\n                                                    [disabled]=\\\"note.text == ''\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#collapse1\\\">Publish\\n                                                </button>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer\\\" *ngIf=\\\"note.attachments && note.attachments.length > 0\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of note.attachments\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                    <div class=\\\"box-footer\\\" *ngIf=\\\"mdT.attachments && mdT.attachments.length > 0\\\">\\n                                        <label>Attachments ({{mdT.total_attachments}})</label>\\n                                        <ul style=\\\"list-style-type:none;height:220px;overflow:scroll;width:100%;position:relative;padding-left:0px;\\\">\\n                                            <li *ngFor=\\\"let att of mdT.attachments\\\" style=\\\"width:200px;margin:5px;height:225px;\\\"\\n                                                class=\\\"pull-left\\\">\\n                                                <a id=\\\"att-mdTask-taskboard\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\">\\n                                                        <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a id=\\\"attclip-mdTask-taskboard\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\"\\n                                                        class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"fa fa-paperclip\\\"></i>{{ att.tsat_alias }}</a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.tsat_size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"ptk{{mdT.task_id}}\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                    <div *ngIf=\\\"mdT.project && mdT.project.length > 0\\\" class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Project Name</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_subject }}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                {{escapeHtml(sanitizeHtml(mdT.project.proj_description))}}\\n                                            </p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Project Number</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_id}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_start}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Project Creator</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.creator}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.applicant}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_end}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Progress</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_percentage +\\n                                                \\\"%\\\"}}</p>\\n                                        </div>\\n                                    </div>\\n                                    <div *ngIf=\\\"!mdT.project\\\" class=\\\"row\\\">\\n\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskAdjusted\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                    <div *ngIf=\\\"mdT.total_adjusted && mdT.total_adjusted.length > 0 \\\" class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding-bottom: 10px;\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Task Adjusted</label>\\n                                        </div>\\n                                        <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\"\\n                                            style=\\\"max-height:273px; font-size: 14px;\\\">\\n                                            <ul class=\\\"timeline comment-timeline-tk\\\">\\n                                                <li *ngFor=\\\"let adj of mdT.total_adjusted\\\" style=\\\"margin-top:5px;\\\">\\n                                                    <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 30px;width: 30px;\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\"\\n                                                            style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;\\\">\\n                                                            <b>{{adj.header}}</b>\\n                                                        </h3>\\n                                                        <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div>\\n                                                                    <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                        <span>{{adj.points}}</span> on {{adj.date}} /\\n                                                                        <span>{{adj.delivery}}</span>\\n                                                                        <br> Reason for adjustment : {{adj.reason}}\\n                                                                    </label>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                    <div *ngIf=\\\"!mdT.total_adjusted || mdT.total_adjusted.length == 0\\\" class=\\\"row\\\">\\n\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskTimeline\\\" class=\\\"tab-pane fade\\\">\\n                                    <div *ngIf=\\\"!mdT.timeline\\\" class=\\\"row\\\">\\n                                    </div>\\n                                    <div *ngIf=\\\"mdT.timeline\\\" class=\\\"row\\\">\\n                                        <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\"\\n                                            style=\\\"font-size: 14px;\\\">\\n                                            <ul class=\\\"timeline comment-daily-timeline\\\">\\n                                                <li *ngFor=\\\"let adj of mdT.timeline\\\" style=\\\"margin-top:5px;\\\">\\n                                                    <div class=\\\"icon-team-daily-table\\\" style=\\\"position: absolute;margin-left: 0px; height: 10px;width: 10px;\\\">\\n                                                        <i class=\\\"fa fa-dot-circle-o user-icon-daily\\\" aria-hidden=\\\"true\\\"\\n                                                            style=\\\"color:#0FB4FF;; font-size: 22px;position: absolute!important;top: 4px;left: -8px;\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 20px; height: 30px;width: 30px;\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\"\\n                                                            style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <label class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;margin-left: 14px; margin-top: 2px;\\\">\\n                                                            <b>{{adj.creator}}</b>\\n                                                            <span style=\\\"font-weight: normal;\\\">{{\\\" \\\" + adj.tittle}}</span>\\n                                                        </label>\\n                                                        <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div>\\n                                                                    <div class=\\\"pull-left col-xs-1 col-md-1 col-lg-1 \\\">\\n                                                                        <i class=\\\"{{adj.label}}\\\" [ngStyle]=\\\"adj.type == 'note' ? { 'font-size': '24px' } : adj.type == 'daily' ? { 'font-size': '28px' } : {}\\\"\\n                                                                            style=\\\"color:#0FB4FF\\\"></i>\\n\\n                                                                    </div>\\n                                                                    <div *ngIf=\\\"adj.type == 'note'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                        <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                            {{escapeHtml(adj.description)}}\\n                                                                            <span>\\n                                                                                <br> Date: {{adj.date}}</span>\\n                                                                        </label>\\n                                                                    </div>\\n                                                                    <div *ngIf=\\\"adj.type == 'daily'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                        <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                            <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                            <br> {{adj.date}}\\n                                                                            <br> Description:\\n                                                                            {{escapeHtml(adj.description)}}\\n                                                                            <span *ngIf=\\\"adj.date != ''\\\" style=\\\"font-weight: bold;\\\">\\n                                                                                <br> {{adj.points}} </span>\\n                                                                        </label>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskForm\\\" class=\\\"tab-pane fade\\\">\\n                                    <div *ngIf=\\\"!mdT.form\\\" class=\\\"row\\\">\\n\\n                                    </div>\\n                                    <div *ngIf=\\\"mdT.form && mdT.form.length > 0\\\" class=\\\"row\\\">\\n                                        <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\"\\n                                            style=\\\"height: 407px;font-size: 14px;\\\">\\n                                            <div style=\\\"text-align: left;\\\">\\n                                                <span style=\\\"color:rgb(130,145,152);font-weight: bold;\\\">Category:\\n                                                    {{mdT.form[0].cate_desc}}</span>\\n                                            </div>\\n                                            <table style=\\\"text-align: center;width: 100%;\\\">\\n                                                <tbody style=\\\"width: 100%;\\\">\\n                                                    <tr *ngFor=\\\"let fr of mdT.form\\\" style=\\\"height: 50px;\\\">\\n                                                        <td style=\\\"width: 40%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                                            <div style=\\\"color:rgb(130,145,152);border-radius: 15px; height: 30px; border: 2px solid rgb(238,242,244); width: 100%; margin-bottom: 3px;height: 30px;overflow-y: scroll;padding-top: 4px;\\\">\\n                                                                {{fr.form_field}}\\n                                                            </div>\\n                                                        </td>\\n                                                        <td style=\\\"width: 60%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                                            <div style=\\\"color:rgb(130,145,152); border-radius: 15px;height: 30px; border: 2px solid rgb(238,242,244); width: 100%; margin-bottom: 3px;height: 30px;overflow-y: scroll;padding-top: 4px;\\\">\\n                                                                {{fr.form_data}}\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskSprint\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                    <div *ngIf=\\\"mdT.sprint && mdT.sprint.spri_id\\\" class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\"> Number</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_id}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Date start</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_init}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Date end</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_end}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.grop_name}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Total points</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_points}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_description}}</p>\\n                                        </div>\\n                                    </div>\\n                                    <div *ngIf=\\\"!mdT.sprint\\\" class=\\\"row\\\">\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"taskRejected\\\" class=\\\"tab-pane fade\\\">\\n                                    <div *ngIf=\\\"!mdT.rejected\\\" class=\\\"row\\\">\\n                                        No reason\\n                                    </div>\\n                                    <div *ngIf=\\\"mdT.rejected\\\" class=\\\"row\\\">\\n                                        <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                            <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                                <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                                <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"mdT.rejected.retk_description\\\"\\n                                                    style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                                </div>\\n                                            </div>\\n                                            <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                                <label class=\\\"control-label label-sqlx\\\">Rejected by</label>\\n                                                <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.rejected.rejectedby }}</p>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div id=\\\"collapse-file\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin:20px 0;\\\">\\n                        <p-fileUpload #form1 name=\\\"fileUpload-Tasks\\\" (onSelect)=\\\"onChangeTask($event,'new')\\\" multiple=\\\"multiple\\\"\\n                            maxFileSize=\\\"8388608\\\" [showUploadButton]=\\\"false\\\" (onRemove)=\\\"onChangeTask($event,'delete')\\\"></p-fileUpload>\\n                        <button id=\\\"save-mdTask-taskboard\\\" class=\\\"btn btn-primary btn-sm\\\" type=\\\"button\\\" (click)=\\\"onUploadAttachment(mdT.task_id, form)\\\"\\n                            (click)=\\\"form1.clear()\\\" [disabled]=\\\"!taskattch.attachments || taskattch.attachments.length==0\\\"\\n                            data-toggle=\\\"collapse\\\" data-target=\\\"#collapse-file\\\">Save\\n                        </button>\\n                    </div>\\n                    <button id=\\\"close2-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                        style=\\\"background-color: rgb(128, 186, 84);\\\">Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mcTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button id=\\\"close-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\" (click)=\\\"closeDaily()\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"font-weight: bold;\\\"><i class=\\\"sq sq-record-progress\\\" aria-hidden=\\\"true\\\"\\n                            style=\\\"font-weight: bold;\\\"></i> &nbsp;&nbsp;\\n                        Record progress</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <ul class=\\\"nav nav-tabs\\\">\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"task-mcTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#cptsk{{mcT.task_id}}\\\">Task {{\\\"#\\\" +\\n                                mcT.task_id}}</a>\\n                        </li>\\n                        <li *ngIf=\\\"mcT.project\\\">\\n                            <a id=\\\"proj-mcTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#cptk{{mcT.task_id}}\\\">Project {{\\\"#\\\" +\\n                                mcT.project.proj_id}}</a>\\n                        </li>\\n                    </ul>\\n                    <div class=\\\"tab-content\\\" style=\\\"color: #829198;\\\">\\n                        <div id=\\\"cptsk{{mcT.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;max-height: 31px;overflow: scroll;margin-bottom: 5px;margin-top: 3px;\\\">\\n                                <h4>{{mcT.task_subject}}</h4>\\n                            </div>\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Number</label>\\n                                    <p>{{mcT.task_id}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Date</label>\\n                                    <p>{{mcT.task_date}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Creator</label>\\n                                    <p>{{mcT.creator}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Status</label>\\n                                    <p>{{ mcT.status_name }}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Assigned to</label>\\n                                    <p>{{mcT.asigned}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Delivery Date</label>\\n                                    <p>{{mcT.task_delivery}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Points</label>\\n                                    <p>{{mcT.task_points}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Points Recorded</label>\\n                                    <p>{{mcT.task_pointsd}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Product</label>\\n                                    <p>{{mcT.prod_name}}</p>\\n                                </div>\\n                                <div *ngIf=\\\"mcT.unit_id && mcT.unit_id > 0\\\" class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Units Assigned</label>\\n                                    <p>{{mcT.unit_points}}</p>\\n                                </div>\\n                                <div *ngIf=\\\"mcT.unit_id && mcT.unit_id > 0\\\" class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Units Recorded</label>\\n                                    <p>{{mcT.unit_pointsd}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 15px;padding-right: 15px;\\\">\\n                                    <label class=\\\"control-label\\\">Description</label>\\n                                    <div [innerHtml]=\\\"mcT.task_description\\\" style=\\\"max-height: 60px;overflow: scroll;\\\"></div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"mcT.project\\\" id=\\\"cptk{{mcT.task_id}}\\\" class=\\\"tab-pane fade\\\">\\n                            <h3>{{mcT.project.proj_subject}}</h3>\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Number</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.proj_id}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Date</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.proj_start}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Creator</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.creator}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Applicant</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.applicant}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Status</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.tkst_name}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Subject</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.proj_subject}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Group</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.groupname}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Product</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.prod_name}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">End</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{mcT.project.proj_end ? 'Not Defined'\\n                                        : mcT.project.proj_end}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                    <span *ngFor=\\\"let uss of mcT.project.userssh\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px;\\\">{{uss.user_name}}</span>\\n                                </div>\\n                            </div>\\n                            <div [innerHtml]=\\\"escapeHtml(sanitizeHtml(mcT.project.proj_description))\\\"></div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"color: #829198;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <label>Date</label>\\n                            <p-calendar id=\\\"dail_date-mcTask-taskboard\\\" name=\\\"dail_date-mcTask-taskboard\\\" class=\\\"ui-g ui-fluid\\\"\\n                                icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"\\n                                view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [minDate]=\\\"minDateDaily\\\" [maxDate]=\\\"maxDateDaily\\\"\\n                                [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            <span>{{date3|date}}</span>\\n                            <span class=\\\"has-error\\\" *ngIf=\\\"compareDate(mcT.spri_init) === -1 || compareDate(mcT.spri_end) === 1\\\">Date out of sprint range.</span>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" name=\\\"points-mcTask-taskboard\\\" id=\\\"points-mcTask-taskboard\\\" step=\\\"0.01\\\"\\n                                    min=\\\"0\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"day.dail_points\\\">\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points <= 0\\\">Points must be greater than zero</span>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"(parseFloat(mcT.task_pointsd)+parseFloat(day.dail_points) > parseFloat(mcT.task_points))\\\">Points\\n                                    selected exceed current task duration.</span>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"mcT.unit_id && mcT.unit_id != 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">  \\n                                <div class=\\\"form-group\\\">\\n                                    <div class=\\\"performance-container\\\">\\n                                        <div class=\\\"performance performance-text\\\">\\n                                                <label>Performance Indicator</label>\\n                                        </div>\\n                                        <div class=\\\"spinner-squadlinx performance\\\">\\n                                            <input type=\\\"number\\\" id=\\\"units_newDaily\\\" name=\\\"units_newDaily\\\" class=\\\"input_number_squadlinx\\\"\\n                                                [(ngModel)]=\\\"day.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\" style=\\\"margin-bottom: 6px;\\\"> \\n                                        </div>\\n                                        <div class=\\\"dropdownSqlx\\\">\\n                                            <p-dropdown [disabled]=\\\"true\\\" id=\\\"dropdownUnits_newDaily\\\" name=\\\"dropdownUnits_newDaily\\\" class=\\\"ui-g ui-fluid\\\"\\n                                                dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"day.unit_id\\\"\\n                                                placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                        </div>  \\n                                    </div> \\n                                    <span class=\\\"has-error\\\" *ngIf=\\\"day.unit_points <= 0\\\">\\n                                        Performance Indicator must be greater than zero</span>\\n                                </div>                          \\n                            </div>\\n                    </div>\\n                    <div class=\\\"form-group editor-squadlinx\\\">\\n                        <label>Description</label>\\n                        <p-editor id=\\\"p_editor_description_taskboard\\\" name=\\\"p_editor_description_taskboard\\\" [(ngModel)]=\\\"day.dail_text\\\"\\n                            [style]=\\\"{'height':'100px'}\\\">\\n                            <p-header>\\n                                <span class=\\\"ql-formats\\\">\\n                                    <span class=\\\"ql-header\\\">\\n                                        <select class=\\\"ql-header\\\">\\n                                            <option value=\\\"1\\\">Heading</option>\\n                                            <option value=\\\"2\\\">Subheading</option>\\n                                            <option selected>Normal</option>\\n                                        </select>\\n                                    </span>\\n\\n                                    <span class=\\\"ql-font\\\">\\n                                        <select class=\\\"ql-font\\\">\\n                                            <option selected>Sans Serif</option>\\n                                            <option value=\\\"serif\\\">Serif</option>\\n                                            <option value=\\\"monospace\\\">Monospace</option>\\n                                        </select>\\n                                    </span>\\n                                </span>\\n\\n                                <span class=\\\"ql-formats\\\">\\n                                    <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                    <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                    <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                </span>\\n\\n                                <span class=\\\"ql-formats\\\">\\n                                    <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                    <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                    <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                        <select class=\\\"ql-align\\\">\\n                                            <option selected></option>\\n                                            <option value=\\\"center\\\"></option>\\n                                            <option value=\\\"right\\\"></option>\\n                                            <option value=\\\"justify\\\"></option>\\n                                        </select>\\n                                    </span>\\n                                </span>\\n                            </p-header>\\n                        </p-editor>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\"\\n                        (click)=\\\"closeDaily()\\\" style=\\\"background-color: rgb(15, 188, 255);\\\">Close\\n                    </button>\\n                    <button id=\\\"save-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveDaily(day, mcT.task_id)\\\" style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"validateDaily()\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"taskMdfy\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button id=\\\"close-taskMdfy-taskboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">Task #{{mdT.task_id}}</h4>\\n                    <input id=\\\"task_id-taskMdfy-taskboard\\\" [(ngModel)]=\\\"mdT.task_id\\\" hidden=\\\"true\\\">\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <!-- <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">               -->\\n                        <label>Subject</label>\\n                        <textarea id=\\\"subject-taskMdfy-taskboard\\\" style=\\\"resize: vertical;\\\" class=\\\"form-control\\\" rows=\\\"1\\\"\\n                            [(ngModel)]=\\\"mdT.task_subject\\\"></textarea>\\n                        <!-- </div> -->\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <!-- <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\"> -->\\n                        <label>Product</label>\\n                        <p-dropdown id=\\\"prod_id-taskMdfy-taskboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                            [(ngModel)]=\\\"mdT.prod_id\\\" filter=\\\"filter\\\"></p-dropdown>\\n                        <!-- </div> -->\\n                    </div>\\n                    <div *ngIf=\\\"parseFloat(mdT.task_pointsd)== 0\\\" class=\\\"form-group\\\">\\n                        <!-- <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\"> -->\\n                        <label>Assign to</label>\\n                        <p-dropdown id=\\\"user_asigned-taskMdfy-taskboard\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                            [options]=\\\"userslbl\\\" [(ngModel)]=\\\"mdT.user_asigned\\\" filter=\\\"filter\\\"></p-dropdown>\\n                        <!-- </div> -->\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <!-- <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\"> -->\\n                        <label>Description</label>\\n                        <p-editor id=\\\"descr-taskMdfy-taskboard\\\" [(ngModel)]=\\\"mdT.task_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                            <p-header>\\n                                <span class=\\\"ql-formats\\\">\\n                                    <span class=\\\"ql-header\\\">\\n                                        <select class=\\\"ql-header\\\">\\n                                            <option value=\\\"1\\\">Heading</option>\\n                                            <option value=\\\"2\\\">Subheading</option>\\n                                            <option selected>Normal</option>\\n                                        </select>\\n                                    </span>\\n\\n                                    <span class=\\\"ql-font\\\">\\n                                        <select class=\\\"ql-font\\\">\\n                                            <option selected>Sans Serif</option>\\n                                            <option value=\\\"serif\\\">Serif</option>\\n                                            <option value=\\\"monospace\\\">Monospace</option>\\n                                        </select>\\n                                    </span>\\n                                </span>\\n\\n                                <span class=\\\"ql-formats\\\">\\n                                    <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                    <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                    <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                </span>\\n\\n                                <span class=\\\"ql-formats\\\">\\n                                    <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                    <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                    <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                        <select class=\\\"ql-align\\\">\\n                                            <option selected></option>\\n                                            <option value=\\\"center\\\"></option>\\n                                            <option value=\\\"right\\\"></option>\\n                                            <option value=\\\"justify\\\"></option>\\n                                        </select>\\n                                    </span>\\n                                </span>\\n                            </p-header>\\n                        </p-editor>\\n                        <!-- </div> -->\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-taskMdfy-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">\\n                        Close\\n                    </button>\\n                    <button id=\\\"save-taskMdfy-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\"\\n                        [disabled]=\\\"(!mdT.task_subject || mdT.task_subject == '') || (!mdT.user_asigned) || ((mdT.task_delivery && mdT.task_delivery != '' && mdT.task_delivery != 'null') && (!mdT.user_asigned == 0 || !mdT.user_asigned == null) && (!mdT.task_points || mdT.task_points == 0 || mdT.task_points == '' || mdT.task_points == 'null'))\\\"\\n                        (click)=\\\"editTask()\\\">\\n                        <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdExtraT\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button id=\\\"close-mdExtraT-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"font-weight: bold;\\\"><i class=\\\"sq sq-adjust-duration\\\" aria-hidden=\\\"true\\\"\\n                            style=\\\"font-weight: bold;\\\"></i> &nbsp;&nbsp;\\n                        Adjust duration</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"color: #829198;\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-top: -24px;\\\">\\n                        <div id=\\\"infotask-mdExtraT\\\" class=\\\"col-lg-12 col-md-12 col-sm-12 col-xs-12\\\" style=\\\"max-height: 308px;overflow: scroll;margin-top: 6px;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;max-height: 31px;overflow: scroll;margin-bottom: 5px;margin-top: 3px;\\\">\\n                                <h4>{{task.task_subject}}</h4>\\n                            </div>\\n\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Number</label>\\n                                    <p>{{task.task_id}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Date</label>\\n                                    <p>{{task.task_date}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Creator</label>\\n                                    <p>{{task.creator}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Assigned to</label>\\n                                    <p>{{task.asigned}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Delivery Date</label>\\n                                    <p>{{task.task_delivery}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Points</label>\\n                                    <p>{{task.task_points}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Points Recorded</label>\\n                                    <p>{{task.task_pointsd}}</p>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-md-6 col-lg-4\\\">\\n                                    <label class=\\\"control-label\\\">Product</label>\\n                                    <p>{{task.prod_name}}</p>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;\\\">\\n                                <label class=\\\"control-label\\\">Description</label>\\n                                <div [innerHtml]=\\\"task.task_description\\\" style=\\\"max-height: 60px;overflow: scroll;\\\"></div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-lg-11 col-md-11 col-sm-11 col-xs-11\\\" style=\\\"border-bottom: 1px solid lightgray; margin-left: 12px;width: 95%; margin-bottom: 10px;margin-top: 4px;\\\">\\n\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <label>New Delivery Date</label>\\n                            <p-calendar id=\\\"delivery-mdExtraT-taskboard\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\"\\n                                [(ngModel)]=\\\"extra.delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"\\n                                [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            <span>{{date3|date}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Add/Remove Points</label>\\n                                <input type=\\\"number\\\" step=\\\"0.01\\\" id=\\\"points-taskMdfy-taskboard\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"extra.points\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"form-group textarea-squadlinx\\\">\\n                        <label>Description</label>\\n                        <textarea id=\\\"description-mdExtraT-taskboard\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\"\\n                            rows=\\\"3\\\" placeholder=\\\"Reason for adjustment...\\\" [(ngModel)]=\\\"extra.text\\\"></textarea>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-mdExtraT-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\"\\n                        style=\\\"background-color: rgb(15, 188, 255);\\\">Close\\n                    </button>\\n                    <button id=\\\"save-mdExtraT-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\"\\n                        [disabled]=\\\"(!extra.text || extra.text == '' || extra.text == 'undefined')\\\" (click)=\\\"saveExtra()\\\"\\n                        style=\\\"background-color: rgb(128, 186, 84);\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"task_tag\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\" style=\\\"width:350px;\\\">\\n            <div class=\\\"modal-content tags_task_sqlx\\\">\\n                <div class=\\\"modal-header description-modal-tags\\\">\\n                    <button id=\\\"close-task_tag-taskboard\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">Tag for Task#{{task.task_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"height:482px;\\\">\\n                    <ul class=\\\"nav nav-tabs\\\">\\n                        <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                            <a id=\\\"setpagetag-mdAddTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#my-tags\\\" (click)=\\\"setPage(1)\\\">My\\n                                tags</a>\\n                        </li>\\n                        <li [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                            <a id=\\\"createag-mdAddTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#create-tag\\\" (click)=\\\"setPage(2)\\\">New\\n                                tag</a>\\n                        </li>\\n                        <li [ngClass]=\\\"{'active':tagMenu == 3}\\\">\\n                            <a id=\\\"deletetag-mdAddTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#delete-tag\\\" (click)=\\\"setPage(3)\\\">Remove\\n                                tag</a>\\n                        </li>\\n                    </ul>\\n                    <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"my-tags\\\" class=\\\"col-md-12\\\" style=\\\"height:350px;margin-top:10px;\\\">\\n                        <div *ngIf=\\\"tagSubmenu == 0\\\">\\n                            <div *ngIf=\\\"mytags.length > 0\\\" style=\\\"text-align:center;\\\">Select one of the custom tags to\\n                                save it in the task</div>\\n                            <div class=\\\"col-md-12 row no-padding\\\" style=\\\"height:265px;overflow-x:hidden; overflow-y:scroll;margin-left:3%;\\\">\\n                                <div *ngIf=\\\"mytags.length == 0\\\">You don't have any customized tags yet.</div>\\n                                <div *ngFor=\\\"let mtag of mytags\\\" class=\\\"pull-left\\\">\\n                                    <div class=\\\"preview-tag-medium\\\" [ngStyle]=\\\"{background:mtag.color}\\\" (click)=\\\"chooseTagOption(mtag,4)\\\"\\n                                        [ngClass]=\\\"{'chosen-option':chosenTag && chosenTag.tag_id==mtag.tag_id}\\\">\\n                                        <i class=\\\"{{mtag.icon}}\\\" style=\\\"font-size:3em; color:#ffffff;\\\" aria-hidden=\\\"true\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"{{mtag.description}}\\\" data-container=\\\"body\\\"></i>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-md-12 row\\\" style=\\\"margin-top:60px;margin-left:30%\\\">\\n                            <button id=\\\"settag-task_tag-taskboard\\\" class=\\\"button_settag_sqlx\\\" tooltipPosition=\\\"top\\\"\\n                                pTooltip=\\\"Save Tag\\\" (click)=\\\"setTag()\\\">Save</button>\\n                        </div>\\n                    </div>\\n                    <div *ngIf=\\\"tagSubmenu > 0\\\" class=\\\"col-md-12 row\\\" style=\\\"margin:15px 0px 0px 0px;\\\">\\n                        <button id=\\\"prev-task_tag-taskboard\\\" [disabled]=\\\"tagSubmenu == 1\\\" style=\\\"border-radius:15px;\\\"\\n                            class=\\\"pull-left button_prevtag_sqlx\\\" (click)=\\\"slidePage('prev')\\\">Prev\\n                        </button>\\n                        <button id=\\\"next-task_tag-taskboard\\\" [disabled]=\\\"tagSubmenu == 3\\\" style=\\\"border-radius:15px;\\\"\\n                            class=\\\"pull-right button_nexttag_sqlx\\\" (click)=\\\"slidePage('next')\\\">Next\\n                        </button>\\n                    </div>\\n                    <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"create-tag\\\" class=\\\"col-md-12\\\" style=\\\"height:336px;margin-top:10px;overflow:scroll;\\\">\\n                        <div *ngIf=\\\"tagSubmenu == 1\\\" class=\\\"container-tag\\\" id=\\\"tag-pattern\\\">\\n                            <div *ngFor=\\\"let pt of patterns\\\" class=\\\"menu-tiles pull-left\\\" (click)=\\\"chooseTagOption(pt,1)\\\"\\n                                [ngClass]=\\\"{'chosen-option':chosenTag && chosenTag.pattern==pt}\\\">\\n                                <i class=\\\"{{pt}}\\\"></i>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagSubmenu == 2\\\" class=\\\"container-tag\\\" id=\\\"tag-color\\\">\\n                            <div *ngFor=\\\"let cl of colorpalette\\\" class=\\\"menu-brick pull-left\\\" [ngStyle]=\\\"{background : cl}\\\"\\n                                [ngStyle]=\\\"{ 'box-shadow': '0px 0px 2px 1px' + cl }\\\" (click)=\\\"chooseTagOption(cl,2)\\\"\\n                                [ngClass]=\\\"{'chosen-option':chosenTag && chosenTag.color==cl}\\\"></div>\\n                        </div>\\n                        <div *ngIf=\\\"tagSubmenu == 3\\\" class=\\\"container-tag\\\" id=\\\"tag-name\\\" style=\\\"margin-top:20px;\\\">\\n                            <div class=\\\"preview-tag-large\\\" [ngStyle]=\\\"{background:chosenTag.color}\\\">\\n                                <i class=\\\"{{chosenTag.pattern}}\\\" style=\\\"font-size:5em;color:#ffffff;\\\" aria-hidden=\\\"true\\\"\\n                                    tooltipPosition=\\\"top\\\" pTooltip=\\\"{{chosenTag.name}}\\\" data-container=\\\"body\\\"></i>\\n                            </div>\\n                            <div class=\\\"col-md-12 row\\\" style=\\\"margin-top:80px;margin-left:0px;\\\">\\n                                <textarea id=\\\"tagname-task_tag-taskboard\\\" style=\\\"resize: vertical;\\\" class=\\\"form-control\\\"\\n                                    rows=\\\"1\\\" [(ngModel)]=\\\"chosenTag.name\\\" (keypress)=\\\"chooseTagOption(chosenTag.name,3)\\\"></textarea>\\n                                <label style=\\\"margin-top:5px;margin-bottom:20px;font-size:11px;color:#9e9e9e;\\\">The\\n                                    description you choose will be saved with your custom tags.</label>\\n                                <button id=\\\"save-task_tag-taskboard\\\" style=\\\"margin-left:30%;\\\" tooltipPosition=\\\"top\\\"\\n                                    pTooltip=\\\"Save New Tag\\\" class=\\\"button_savesettag_sqlx\\\" [disabled]=\\\"!chosenTag.name || chosenTag.name == '' || !chosenTag.color || chosenTag.color == '' || !chosenTag.pattern || chosenTag.pattern == ''\\\"\\n                                    (click)=\\\"saveNewTag(chosenTag)\\\">Save\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div *ngIf=\\\"tagSubmenu > 0\\\" class=\\\"col-md-12 row\\\" style=\\\"padding-left:45%;\\\">\\n                        <div class=\\\"pull-left\\\" [ngClass]=\\\"{'dot-selected': tagSubmenu == 1}\\\" style=\\\"border:1px solid #b9b9b9; width:10px;height:10px;border-radius:10px;background:#f5f5f5;margin:5px;\\\"></div>\\n                        <div class=\\\"pull-left\\\" [ngClass]=\\\"{'dot-selected': tagSubmenu == 2}\\\" style=\\\"border:1px solid #b9b9b9; width:10px;height:10px;border-radius:10px;background:#f5f5f5;margin:5px;\\\"></div>\\n                        <div class=\\\"pull-left\\\" [ngClass]=\\\"{'dot-selected': tagSubmenu == 3}\\\" style=\\\"border:1px solid #b9b9b9; width:10px;height:10px;border-radius:10px;background:#f5f5f5;margin:5px;\\\"></div>\\n                    </div>\\n                    <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"delete-tag\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div *ngIf=\\\"tagSubmenu==0\\\">\\n                            <div *ngIf=\\\"tagbytask.tag_id != undefined\\\" style=\\\" margin-top: 9px;text-align:center;\\\">Press\\n                                the delete button if you want to remove the tag added to the task</div>\\n                            <div class=\\\"col-md-12 row no-padding\\\" style=\\\"height:400px;margin-left:3%;\\\">\\n                                <div *ngIf=\\\"tagbytask.tag_id == undefined\\\" style=\\\" margin-top: 9px;\\\">You do not have a\\n                                    tag added to the task</div>\\n\\n                                <div class=\\\"row\\\" style=\\\"height: 24px\\\">\\n                                    <div class=\\\" div_tagtask_sqlx\\\" [ngStyle]=\\\"{background: tagbytask.tag_color}\\\">\\n                                        <i class=\\\"{{tagbytask.tag_icon}}\\\" style=\\\"font-size:3em;color:#ffffff;\\\"\\n                                            aria-hidden=\\\"true\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tagbytask.tag_description}}\\\"\\n                                            data-container=\\\"body\\\"></i>\\n                                    </div>\\n                                    <div class=\\\"row\\\" style=\\\"margin-top:230px;margin-left:34%;\\\">\\n                                        <button id=\\\"deletetag-task_tag-taskboard\\\" class=\\\"button_deletetag_sqlx\\\" (click)=\\\"deleteTagsByTask(tagbytask.task_id,tagbytask.tag_id)\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Tag\\\">\\n                                            <i class=\\\"sq sq-eliminar\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </div>\\n\\n\\n\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdMainFilter\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"width: 900px!important;\\\">\\n            <div class=\\\"modal-content modal-mainfilter\\\">\\n                <div class=\\\"modal-header header-event header-role\\\">\\n                    <button id=\\\"close-mdMainFilter-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-filter\\\"></i> Main Filter </h4>\\n                </div>\\n                <div class=\\\"modal-body scrollable md-roles\\\" style=\\\"height: 400px;\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-top: 10px;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 inputs-mainfilter\\\">\\n                                        <div class=\\\"row\\\">\\n                                            <div class=\\\"pull-left col-md-10 label-input-mainfilter\\\">\\n                                                <input id=\\\"file-upload-mdMainFilter\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\"\\n                                                    placeholder=\\\"Search a product\\\" [(ngModel)]=\\\"searchproduct\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right col-md-1 search-input-mainfilter\\\">\\n                                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 inputs-mainfilter\\\">\\n                                        <div class=\\\"row\\\">\\n                                            <div class=\\\"pull-left col-md-10 label-input-mainfilter\\\">\\n                                                <input id=\\\"searchproj-mdMainFilter-taskboard\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\"\\n                                                    placeholder=\\\"Search a project\\\" [(ngModel)]=\\\"searchproject\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right col-md-1 search-input-mainfilter\\\">\\n                                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 inputs-mainfilter\\\">\\n                                        <div class=\\\"row\\\">\\n                                            <div class=\\\"pull-left col-md-10 label-input-mainfilter\\\">\\n                                                <input id=\\\"searchuser-mdMainFilter-taskboard\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\"\\n                                                    placeholder=\\\"Search a user\\\" [(ngModel)]=\\\"searchuser\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right col-md-1 search-input-mainfilter\\\">\\n                                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div style=\\\"height:10px;\\\">\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-4 col-md-4 content-results-mainfilter\\\">\\n                                        <div class=\\\"form-group\\\" style=\\\"max-height: 280px;overflow: scroll;\\\">\\n                                            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n                                                <thead>\\n                                                    <th style=\\\"width:95px;\\\" (click)=\\\"selectAllItems(1)\\\" style=\\\"width: 30px;\\\">\\n                                                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                            style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                            <i *ngIf=\\\"selectedProduct.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                                            <i *ngIf=\\\"selectedProduct.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                            style=\\\"text-align:left;height:auto;color:rgb(130, 145, 152);font-size: 14px;\\\">\\n                                                            ALL\\n                                                        </div>\\n                                                    </th>\\n                                                </thead>\\n                                                <tbody>\\n                                                    <tr *ngFor=\\\"let pr of products | filter : searchproduct\\\">\\n                                                        <td style=\\\"padding:0px;margin:0px;\\\">\\n                                                            <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                                style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:25px;\\\">\\n                                                                <p-checkbox id=\\\"prod-mdMainFilter-taskboard\\\" name=\\\"product-checkbox\\\"\\n                                                                    value=\\\"{{pr.value}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedProduct\\\"></p-checkbox>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                                style=\\\"text-align:left;height:25px;\\\">\\n                                                                {{ pr.label }}\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-4 col-md-4 content-results-mainfilter\\\">\\n                                        <div *ngIf=\\\"filter_projects == 0\\\" class=\\\"form-group\\\" style=\\\"max-height: 280px;overflow: scroll;\\\">\\n                                            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n                                                <thead>\\n                                                    <th style=\\\"width:95px;\\\" (click)=\\\"selectAllItems(2)\\\" style=\\\"width: 30px;\\\">\\n                                                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                            style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                            <i *ngIf=\\\"selectedprojects.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                                            <i *ngIf=\\\"selectedprojects.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                            style=\\\"text-align:left;height:auto;border-bottom: 1px solid rgb(229, 229, 229);font-size: 14px;color:rgb(130, 145, 152);\\\">\\n                                                            ALL\\n                                                        </div>\\n                                                    </th>\\n                                                </thead>\\n                                                <tbody>\\n                                                    <tr *ngFor=\\\"let mp of myProjects | filter : searchproject\\\">\\n                                                        <td style=\\\"padding:0px;margin:0px;\\\">\\n                                                            <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                                style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                                <p-checkbox id=\\\"proj-mdMainFilter-taskboard\\\" name=\\\"product-checkbox\\\"\\n                                                                    value=\\\"{{mp.value}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedprojects\\\"></p-checkbox>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                                style=\\\"text-align:left;height:auto;border-bottom: 1px solid rgb(229, 229, 229);;\\\">\\n                                                                {{ mp.label }}\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-4 col-md-4 content-results-mainfilter\\\">\\n                                        <div class=\\\"form-group\\\" style=\\\"max-height: 280px;overflow: scroll;\\\">\\n                                            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n                                                <thead>\\n                                                    <th style=\\\"width:95px;\\\" (click)=\\\"selectAllItems(3)\\\" style=\\\"width: 30px;\\\">\\n                                                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                            style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                            <i *ngIf=\\\"selectedNodes.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                                            <i *ngIf=\\\"selectedNodes.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                            style=\\\"text-align:left;height:auto;font-size: 14px;color:rgb(130, 145, 152);\\\">\\n                                                            ALL\\n                                                        </div>\\n                                                    </th>\\n                                                </thead>\\n                                                <tbody>\\n                                                    <tr *ngFor=\\\"let ct of contactsTree\\\">\\n                                                        <td style=\\\"padding:0px;margin:0px;\\\">\\n                                                            <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                                style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;\\\">\\n                                                                <!-- <p-checkbox name=\\\"product-checkbox\\\" value=\\\"{{ct.data}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"selectAllChildrens(ct.children, ct.data)\\\"></p-checkbox> -->\\n                                                                <p-checkbox id=\\\"group-mdMainFilter-taskboard\\\" name=\\\"product-checkbox\\\"\\n                                                                    value=\\\"{{ct.data}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\"\\n                                                                    (click)=\\\"updateSelectA($event, ct.children, ct.data)\\\"\\n                                                                    (change)=\\\"updateSelectA($event, ct.children, ct.data)\\\"></p-checkbox>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                                style=\\\"text-align:left;height:auto;text-transform:uppercase;\\\">\\n                                                                {{ ct.label }}\\n                                                            </div>\\n                                                            <div *ngIf=\\\"ct.children.length > 0\\\">\\n                                                                <div *ngFor=\\\"let ch of ct.children | filter : searchuser\\\"\\n                                                                    style=\\\"margin-left:20px;\\\">\\n                                                                    <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                                        style=\\\"min-width: 10%; max-width: 10%;margin:0px;padding-left:0px;height:auto;    max-height: 30px;\\\">\\n                                                                        <p-checkbox id=\\\"user-mdMainFilter-taskboard\\\"\\n                                                                            name=\\\"product-checkbox\\\" value=\\\"{{ch.data}}\\\"\\n                                                                            label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\"\\n                                                                            (click)=\\\"updateSelect($event)\\\" (change)=\\\"updateSelect($event)\\\"></p-checkbox>\\n                                                                    </div>\\n                                                                    <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\"\\n                                                                        style=\\\"text-align:left;height:auto;max-height: 30px;\\\">\\n                                                                        {{ ch.label }}\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer close-footer\\\">\\n                    <div class=\\\"footer-mainfilter-line\\\">\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"pull-left\\\" style=\\\"margin-left: 40px;\\\">\\n                            <button id=\\\"clear-mdMainFilter-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(164, 203, 91);padding-right: 20px;\\\"\\n                                (click)=\\\"clearFilter()\\\">Clear\\n                            </button>\\n                        </div>\\n                        <div class=\\\"pull-right\\\" style=\\\"margin-right: 40px;\\\">\\n                            <button id=\\\"done-mdMainFilter-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(15, 188, 255);\\\"\\n                                data-dismiss=\\\"modal\\\">Done\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdSprints\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"width: 900px!important;\\\">\\n            <div class=\\\"modal-content modal-mainfilter\\\">\\n                <div class=\\\"modal-header header-event header-role\\\">\\n                    <button id=\\\"close-mdSprints-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\" style=\\\"color:white;\\\" (click)=\\\"doneMdSprint()\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-sprints\\\"></i> Sprints </h4>\\n                </div>\\n                <div class=\\\"modal-body scrollable md-roles\\\" style=\\\"height: 250px;\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-top: 10px;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"row\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div style=\\\"height:10px;\\\">\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12 content-results-mdsprints\\\">\\n                                        <div class=\\\"form-group\\\" style=\\\"max-height: 280px;overflow: scroll;\\\">\\n                                            <table class=\\\"table table-bordered-sqlx table-hover table-striped table-projects\\\"\\n                                                style=\\\"border:none!important; max-height:100px;\\\">\\n                                                <thead style=\\\"text-align: center;\\\">\\n                                                    <th></th>\\n                                                    <th style=\\\"text-align: center;\\\">Number</th>\\n                                                    <th style=\\\"text-align: center;\\\">Initial Date</th>\\n                                                    <th style=\\\"text-align: center;\\\">End Date</th>\\n                                                    <th style=\\\"text-align: center;\\\">Description</th>\\n                                                </thead>\\n                                                <tbody>\\n                                                    <tr *ngFor=\\\"let spgr of mysprintsgroup\\\">\\n                                                        <td>\\n                                                            <p-checkbox id=\\\"spr-mdSprints-taskboard\\\" name=\\\"spr-checkbox\\\"\\n                                                                value=\\\"{{spgr.spri_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"sprintselected\\\"\\n                                                                (click)=\\\"showSelected($event, spgr.spri_id)\\\"></p-checkbox>\\n                                                        </td>\\n                                                        <td>{{ spgr.spri_id }}</td>\\n                                                        <td>{{ spgr.spri_init }}</td>\\n                                                        <td>{{ spgr.spri_end }}</td>\\n                                                        <td>{{ spgr.spri_description }}</td>\\n                                                    </tr>\\n                                                </tbody>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer close-footer\\\">\\n                    <div class=\\\"footer-mainfilter-line\\\">\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"pull-left\\\" style=\\\"margin-left: 40px;\\\">\\n                        </div>\\n                        <div class=\\\"pull-right\\\" style=\\\"margin-right: 40px;\\\">\\n                            <button id=\\\"save-mdSprints-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(128, 186, 84);\\\"\\n                                data-dismiss=\\\"modal\\\" (click)=\\\"saveChanges()\\\">Save\\n                            </button>\\n                            <button id=\\\"done-mdSprints-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(15, 188, 255);\\\"\\n                                data-dismiss=\\\"modal\\\" (click)=\\\"doneMdSprint()\\\">Close\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdCpImp\\\" role=\\\"dialog\\\" data-backdrop=\\\"static\\\" data-keyboard=\\\"false\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content modal-cpimp\\\">\\n                <div class=\\\"modal-header header-event header-role\\\">\\n                    <button id=\\\"close-mdCpImp-taskboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                        style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-improving\\\"></i> Move to Improving</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group textarea-squadlinx\\\" style=\\\"color: #829198;\\\">\\n                        <label>Reason for improving</label>\\n                        <textarea id=\\\"description-mdCpImp-taskboard\\\" style=\\\"resize: inherit;\\\" class=\\\"txt-sqlx form-control\\\"\\n                            rows=\\\"3\\\" placeholder=\\\"Description\\\" [(ngModel)]=\\\"cpimptask.retk_description\\\"></textarea>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-mdCpImp-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(68, 180, 248);\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                    <button id=\\\"save-mdCpImp-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color: rgb(126, 188, 77);\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"(!cpimptask.retk_description || cpimptask.retk_description == '' || cpimptask.retk_description == 'undefined')\\\"\\n                        (click)=\\\"cpimpTask()\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal modal-task fade\\\" id=\\\"mdRequestTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" (click)=\\\"reloadTaskboard()\\\" aria-label=\\\"Close\\\"\\n                        style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\"></i>\\n                        Request to Task\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3 col-sm-3 col-md-2 col-lg-2\\\">\\n                            <h4 *ngIf=\\\"requests && requests.length > 0\\\" class=\\\"modal-title\\\" style=\\\"color: #829198; font-weight: bolder;\\\">\\n                                Requests\\n                            </h4>\\n                            <div style=\\\"display: flow-root;overflow:scroll; height:520px;\\\">\\n                                <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                                        *ngFor=\\\"let rq of requests\\\">\\n                                        <li class=\\\"active\\\">\\n                                            <a data-toggle=\\\"tab\\\" href=\\\"#ptsk{{rq.task_id}}\\\" (click)=\\\"showInfo(rq);\\\">{{rq.task_id}}</a>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-9 col-sm-9 col-md-10 col-lg-10\\\" style=\\\"color: #829198;\\\">\\n                            <div class=\\\"tab-content\\\">\\n                                <div *ngIf=\\\"myrequest && requests && requests.length > 0\\\" id=\\\"ptsk{{myrequest.task_id}}\\\"\\n                                    class=\\\"tab-pane fade in active\\\">\\n                                    <div style=\\\"height: 70px; overflow: scroll;\\\">\\n                                        <h4>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>\\n                                    </div>\\n                                    <div class=\\\"row request-task\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                            <div class=\\\"form-group input-squadlinx\\\">\\n                                                <label>Subject</label>\\n                                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\"\\n                                                    placeholder=\\\"Subject\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Delivery Date</label>\\n                                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"\\n                                                    [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                                <label>Associate to Project</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"task.proj_id\\\"\\n                                                    placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                                <label>Assigned to</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"task.user_asigned\\\"\\n                                                    placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                                <label>Product</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"task.prod_id\\\"\\n                                                    placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                                <label>Associate to Sprint</label>\\n                                                <p-dropdown id=\\\"ddwnr_4\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                    [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\"\\n                                                    placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                                <label>Points</label>\\n                                                <input type=\\\"number\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"task.task_points\\\"\\n                                                    step=\\\"0.01\\\" min=\\\"0.01\\\">\\n                                            </div>\\n                                        </div>\\n                                        <!-- <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\"\\n                                             *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                                            <label>Atachments ({{task.attachments.length}}) </label>\\n                                            <div class=\\\"form-group\\\" style=\\\"height: 50px;overflow: scroll;\\\">\\n                                                <ul style=\\\"height: 50px;overflow: scroll;padding: 0px;\\\">\\n                                                    <li *ngFor=\\\"let att of task.attachments\\\" style=\\\"list-style:none;\\\">\\n                                                        <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" style=\\\"color:black;\\\"><i\\n                                                                class=\\\"sq sq-attach-files\\\"\\n                                                                style=\\\"color:rgb(28, 110, 198);font-size: 14px;outline: none;\\\"></i>{{\\n                                                            att.tsat_alias }}</a>\\n                                                    </li>\\n                                                </ul>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                            <div class=\\\"form-group editor-squadlinx\\\">\\n                                                <label>Description</label>\\n                                                <p-editor [(ngModel)]=\\\"task.task_description2\\\"\\n                                                          [style]=\\\"{'height':'100px'}\\\">\\n                                                    <p-header>\\n                                                      <span class=\\\"ql-formats\\\">\\n                                                           <span class=\\\"ql-header\\\">\\n                                                              <select class=\\\"ql-header\\\">\\n                                                                <option value=\\\"1\\\">Heading</option>\\n                                                                <option value=\\\"2\\\">Subheading</option>\\n                                                                <option selected>Normal</option>\\n                                                              </select>\\n                                                           </span>\\n\\n                                                            <span class=\\\"ql-font\\\">\\n                                                              <select class=\\\"ql-font\\\">\\n                                                                <option selected>Sans Serif</option>\\n                                                                <option value=\\\"serif\\\">Serif</option>\\n                                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                                              </select>\\n                                                            </span>\\n                                                      </span>\\n\\n                                                        <span class=\\\"ql-formats\\\">\\n                                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                                        </span>\\n\\n                                                        <span class=\\\"ql-formats\\\">\\n                                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                            <select class=\\\"ql-align\\\">\\n                                                               <option selected></option>\\n                                                               <option value=\\\"center\\\"></option>\\n                                                               <option value=\\\"right\\\"></option>\\n                                                               <option value=\\\"justify\\\"></option>\\n                                                             </select>\\n                                                          </span>\\n                                                        </span>\\n                                                    </p-header>\\n                                                </p-editor>\\n                                            </div>\\n                                        </div> -->\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12>\\\">\\n                                            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                                                <li [ngClass]=\\\"{'active':tagMenux == 1}\\\">\\n                                                    <a id=\\\"a_descriptionTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\"\\n                                                        (click)=\\\"setPagex(1)\\\">Description</a>\\n                                                </li>\\n                                                <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenux == 3}\\\">\\n                                                    <a id=\\\"a_attachmentsTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\"\\n                                                        (click)=\\\"setPagex(3)\\\">Attachments <span>({{task.attachments.length}})</span></a>\\n                                                </li>\\n                                            </ul>\\n                                            <div *ngIf=\\\"tagMenux == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                                    <p-editor id=\\\"p-editorDescription_editTask\\\" name=\\\"p-editorDescription_editTask\\\"\\n                                                        [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                                        <p-header>\\n                                                            <span class=\\\"ql-formats\\\">\\n                                                                <span class=\\\"ql-header\\\">\\n                                                                    <select class=\\\"ql-header\\\">\\n                                                                        <option value=\\\"1\\\">Heading</option>\\n                                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                                        <option selected>Normal</option>\\n                                                                    </select>\\n                                                                </span>\\n\\n                                                                <span class=\\\"ql-font\\\">\\n                                                                    <select class=\\\"ql-font\\\">\\n                                                                        <option selected>Sans Serif</option>\\n                                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                                    </select>\\n                                                                </span>\\n                                                            </span>\\n\\n                                                            <span class=\\\"ql-formats\\\">\\n                                                                <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                                <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                                <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                                            </span>\\n\\n                                                            <span class=\\\"ql-formats\\\">\\n                                                                <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\"\\n                                                                    type=\\\"button\\\"></button>\\n                                                                <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\"\\n                                                                    value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                                <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                                    <select class=\\\"ql-align\\\">\\n                                                                        <option selected></option>\\n                                                                        <option value=\\\"center\\\"></option>\\n                                                                        <option value=\\\"right\\\"></option>\\n                                                                        <option value=\\\"justify\\\"></option>\\n                                                                    </select>\\n                                                                </span>\\n                                                            </span>\\n                                                        </p-header>\\n                                                    </p-editor>\\n                                                </div>\\n                                            </div>\\n\\n                                            <div *ngIf=\\\"tagMenux == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_editTask\\\"\\n                                                    name=\\\"contenedorAttachmentsTask_editTask\\\">\\n                                                    <div class=\\\"div_associatedAttachments\\\">\\n                                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                                            <li *ngFor=\\\"let att of task.attachments\\\">\\n                                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\">\\n                                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                                        <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                        <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                    </span>\\n                                                                </a>\\n                                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                                        <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" +\\n                                                                        att.tsat_alias }}\\n                                                                    </a>\\n                                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                                        {{att.size + ' bytes'}}\\n                                                                        <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                                            (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                                                                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                                        </button>\\n                                                                    </span>\\n                                                                </div>\\n                                                            </li>\\n                                                        </ul>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div *ngIf=\\\"!myrequest && !requests && requests.length == 0\\\" id=\\\"ptsk{{myrequest.task_id}}\\\"\\n                                    class=\\\"tab-pane fade in active\\\">\\n                                    <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"reloadTaskboard()\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close\\n                    </button>\\n                    <button id=\\\"save-reqtask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\"\\n                        [disabled]=\\\"(!task.task_description2 || task.task_description2 == '' || task.task_description2 == 'undefined') || (!task.prod_id) || (!task.spri_id) || (!task.task_points || task.task_points <= 0)|| (!task.user_asigned) || (!task.task_subject || task.task_subject == '' || task.task_subject == 'undefined')\\\"\\n                        (click)=\\\"saveTask()\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/taskboard/taskboard.template.html\n// module id = 818\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"tasks\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> TASKS\\n            <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Tasks</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"a_1\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a id=\\\"a_2\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Create\\\">\\n                                <button id=\\\"buttonCreateTask_taskList\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                    (click)=\\\"addTask()\\\" style=\\\"padding: 1px 4px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-create-new-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                <button id=\\\"buttonCloseTask_taskList\\\" [disabled]=\\\"seltasks.length == 0 || statusdelete.length > 0\\\" (click)=\\\"closeTask(null)\\\"\\n                                    type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 1px 4px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-close-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <button id=\\\"buttonDeleteTask_taskList\\\" [disabled]=\\\"seltasks.length == 0 || statusdelete.length > 0\\\" (click)=\\\"deleteTask(null)\\\"\\n                                    type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-eliminar\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                                <button id=\\\"buttonReopenTask_taskList\\\" [disabled]=\\\"seltasks.length == 0 || statusdelete.length > 0\\\" (click)=\\\"openTask(null)\\\"\\n                                    type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-reopen-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <button id=\\\"buttonReloadTask_taskList\\\" type=\\\"button\\\" (click)=\\\"searchTask()\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                    style=\\\"padding: 5px 5px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <button type=\\\"button\\\" (click)=\\\"showFilter()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Filter\\\">\\n                                <i class=\\\"fa fa-filter\\\" style=\\\"color:rgb(27, 110, 198); font-size: 22px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input id=\\\"search_task\\\" name=\\\"search_task\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\"\\n                                            class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                        <!-- <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i> -->\\n                                        <button id=\\\"reloadTasks_taskList\\\" type=\\\"button\\\" (click)=\\\"searchTask()\\\" class=\\\"btn btn-sm\\\"\\n                                            style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-1 col-sm-1 col-md-1 col-lg-1\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" (click)=\\\"exportExcel()\\\">\\n                                    <i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i>\\n                                </button>\\n                            </div>\\n                            \\n                        </div>\\n                    </div>\\n                    <!-- end - botones y search -->\\n\\n                    <!--new filter type task-->\\n                    <div class=\\\"row\\\" *ngIf=\\\"typeRol != '1' && typeRol != '2'\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right:0;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5  container_btnTypeTask\\\">\\n                                <ul class=\\\"col-xs-12 nav nav-option-task\\\" style=\\\"display: inline-flex !important;\\\">\\n                                    <li class=\\\"active\\\">\\n                                        <a id=\\\"type_taskall\\\" href=\\\"#tab_taskall\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('allme')\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"All tasks related with me\\\">\\n                                            <i class=\\\"sq sq-all-shared-tasks\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskbyme\\\" href=\\\"#tab_taskbyme\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('byme')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks created by me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-by-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_tasktome\\\" href=\\\"#tab_tasktome\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('tome')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks assigned to me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-to-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskshared\\\" href=\\\"#tab_taskshared\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('sharedtome')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks shared to me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-with-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--end new filter type task-->\\n\\n                    <!--new filter type task Cabeza de equipo-->\\n                    <div class=\\\"row\\\" *ngIf=\\\"typeRol != '1' && typeRol == '2'\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right:0; padding-left: 15px;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 container_btnTypeTask\\\">\\n                                <ul class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 nav nav-option-task\\\" style=\\\"display: inline-flex !important;\\\">\\n\\n                                    <li>\\n                                        <a id=\\\"type_taskall_headDep\\\" href=\\\"#tab_taskall\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('allme')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"All tasks related with me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-all-shared-tasks\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskbyme_headDep\\\" href=\\\"#tab_taskbyme\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('byme')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks created by me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-by-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_tasktome_headDep\\\" href=\\\"#tab_tasktome\\\" data-toggle=\\\"tab\\\" (click)=\\\"typeTask('tome')\\\"\\n                                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks assigned to me\\\" class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-to-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskshared_headDep\\\" href=\\\"#tab_taskshared\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('sharedtome')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks shared to me\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-with-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n\\n                                    <span style=\\\"border-right: 3px solid rgb(227, 237, 241);margin-right: 14px;\\\"></span>\\n\\n                                    <li class=\\\"active\\\">\\n                                        <a id=\\\"type_taskallTeam_headDep\\\" href=\\\"#tab_task_allmytean\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('allmyteam')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"All tasks related with my team\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-all-shared-tasks\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskbyTeam_headDep\\\" href=\\\"#tab_task_bymyteam\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('bymyteam')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks created by my team\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-by-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskmyTeam_headDep\\\" href=\\\"#tab_task_tomyteam\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('tomyteam')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks assigned to my team\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-to-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                    <li>\\n                                        <a id=\\\"type_taskSharedTeam_headDep\\\" href=\\\"#tab_task_sharedtomyteam\\\" data-toggle=\\\"tab\\\"\\n                                            (click)=\\\"typeTask('sharedtomyteam')\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks shared to my team\\\"\\n                                            class=\\\"linkBtnTypeTask_tasklist\\\">\\n                                            <i class=\\\"sq sq-with-me\\\"></i>\\n                                        </a>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--. new filter type task Cabeza de equipo-->\\n\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"allStatesTask_taskList\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\"\\n                                style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"statesTask_taskList\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\"\\n                                style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n\\n                <div *ngIf=\\\"filter\\\" class=\\\"box-header with-border filter-options\\\">\\n                    <div class=\\\"col-xs-10 col-sm-11 col-md-11 col-lg-11\\\">\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Subject</label>\\n                            <li *ngIf=\\\"mytaskcopy.description\\\">\\n                                {{mytask.description}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.description\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date initial</label>\\n                            <li *ngIf=\\\"mytask.date_ini\\\">\\n                                {{formatDate(mytask.date_ini)}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytask.date_ini\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date end</label>\\n                            <li *ngIf=\\\"mytask.date_end\\\">\\n                                {{formatDate(mytask.date_end)}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytask.date_end\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Task_ids</label>\\n                            <li *ngFor=\\\"let tk of mytaskcopy.task_ids\\\">\\n                                {{tk}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.task_ids\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Assigned to</label>\\n                            <li *ngFor=\\\"let assig of mytaskcopy.assigned\\\">\\n                                {{ assig.user_lastname + \\\", \\\" + assig.user_name }}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.assigned || mytaskcopy.assigned.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Creator(s)</label>\\n                            <li *ngFor=\\\"let ur of mytaskcopy.creators\\\">\\n                                {{ ur.user_lastname + \\\", \\\" + ur.user_name }}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.creators || mytaskcopy.creators.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Product(s)</label>\\n                            <li *ngFor=\\\"let pr of mytaskcopy.products\\\">\\n                                {{pr.prod_name}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.products || mytaskcopy.products.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Project(s)</label>\\n                            <li *ngFor=\\\"let pj of mytaskcopy.projects\\\">\\n                                {{pj.proj_subject}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.projects || mytaskcopy.projects.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"text-align: right;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"closeFilter()\\\" class=\\\"pull-rigth\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:#0ba8da; font-weight: bolder;\\\"></i>\\n                        </a>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && tasks.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"tasks.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th id=\\\"th_1\\\" style=\\\"width: 5%; text-align:center;border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <!-- <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                            <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i> -->\\n                                        </th> <!---TODO: Deleted (click)=\\\"selectAll()\\\" because it has no functionality-->\\n                                        <th style=\\\"width: 70%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <thead>\\n                                                    <tr>\\n                                                        <th id=\\\"orderDate_taskList\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('task_date')\\\">Date\\n                                                            <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"orderNumber_taskList\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('task_id')\\\">Number\\n                                                            <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"orderCreated_taskList\\\" style=\\\"text-align: center; width: 22.5%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('user_creator')\\\">Created by\\n                                                            <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"orderAssigned_taskList\\\" style=\\\"text-align: center; width: 22.5%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('user_asigned')\\\">Assigned to\\n                                                            <span [hidden]=\\\"posOrder !== 'user_asigned'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"orderProject_taskList\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                            (click)=\\\"setOrder('proj_id')\\\">Project Related\\n                                                            <span [hidden]=\\\"posOrder !== 'proj_id'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                    </tr>\\n                                                </thead>\\n                                            </table>\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Progress\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 15%;color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Actions\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let tk of tasks\\\" [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\" style=\\\"text-align: center; vertical-align: middle;\\\">\\n                                                <p-checkbox id=\\\"listask_taskList\\\" name=\\\"listask_taskList\\\" value=\\\"{{tk.task_id}}\\\"\\n                                                    label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\" (onChange)=\\\"verifyStatus(tk.task_id)\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'text-align': 'center', 'background': 'rgb(227, 237, 241)'  } : { 'text-align': 'center'}\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td style=\\\"width: 20%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.task_date) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.task_id) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 22.5%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.creator) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 22.5%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.asigned) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\" *ngIf=\\\"tk.proj_id != null\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                            [routerLink]=\\\"['/task', tk.task_id]\\\">{{\\n                                                            escapeHtml(tk.proj_id) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\" *ngIf=\\\"tk.proj_id == null\\\">\\n                                                        -\\n                                                    </td>\\n                                                </tr>\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td colspan=\\\"6\\\">\\n                                                        <div class=\\\"descriptionTasks description-fixed-squadlinx\\\"\\n                                                            [ngStyle]=\\\"tk.para_status == 42 ? {'border-top': '2px solid white'} : { 'border-top': '2px solid rgb(227,237,241)'} \\\">\\n                                                            <span [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)', 'font-weight': 'bold' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' , 'font-weight': 'bold'} : {'color': 'rgb(79, 93, 100)', 'font-weight': 'bold'}\\\">Description:</span>\\n                                                        </div>\\n                                                        <div class=\\\"descriptionTasks\\\">\\n                                                            <p class=\\\"box-task-description\\\"[ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                                [innerHTML]=\\\"tk.task_description\\\"></p>\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </table>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'text-align': 'center', 'padding-left': '4px;','background': 'rgb(227, 237, 241)'  } : { 'padding-left': '4px;','text-align': 'center'}\\\">\\n                                            <span [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tk.task_percentage}}%</span>\\n                                            <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%;\\\">\\n                                                <div class=\\\"success-tasks\\\" [ngStyle]=\\\"tk.para_status == 43 ? { 'background': 'rgb(237, 59, 89)', 'width': tk.task_percentage + '%' } : tk.para_status == 42 ? { 'background': 'rgb(79, 93, 100)' , 'width': tk.task_percentage + '%' } : tk.shared_with == 'shared' ? { 'background': 'rgb(23, 140, 201)' , 'width': tk.task_percentage + '%' } : {'background': 'rgb(68, 180, 248)' , 'width': tk.task_percentage + '%' }\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white','background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <span class=\\\"tool-tip\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Quick view\\\">\\n                                                    <button id=\\\"buttonActionQuickView_taskList\\\" type=\\\"button\\\" (click)=\\\"showModaltk(tk.task_id)\\\"\\n                                                        class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-search\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                    <button id=\\\"buttonActionEdit_taskList\\\" *ngIf=\\\"tk.para_status != 43 && tk.shared_with == 'not_shared' \\\"\\n                                                        type=\\\"button\\\" (click)=\\\"showEditModal(tk)\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-quickedit\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Open\\\">\\n                                                    <button id=\\\"buttonActionOpen_taskList\\\" *ngIf=\\\"tk.para_status == 42 && tk.para_status != 43 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"openTask(tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"fa fa-undo\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                                    <button id=\\\"buttonActionClose_taskList\\\" *ngIf=\\\"tk.para_status != 42 && tk.para_status != 43 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"closeTask(tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"fa fa-times-circle-o\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <button id=\\\"buttonActionDelete_taskList\\\" *ngIf=\\\"tk.para_status != 43 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"deleteTask(tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reject\\\">\\n                                                    <button id=\\\"buttonActionReject_taskList\\\" *ngIf=\\\"tk.para_status != 42 && tk.para_status != 43 && tk.para_status != 50 && tk.task_pointsd ==0 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"showReject(tk)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-backcalendar\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Backlog\\\">\\n                                                    <button id=\\\"buttonActionBacklog_taskList\\\" *ngIf=\\\"tk.para_status != 42 && tk.para_status != 43 && tk.para_status != 50 && tk.para_status != 44 && tk.task_pointsd ==0 && tk.shared_with == 'not_shared'\\\"\\n                                                        (click)=\\\"showBacklog(tk)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-backlog\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Duplicate\\\">\\n                                                    <button id=\\\"buttonActionDuplicate_taskList\\\" *ngIf=\\\"tk.shared_with == 'not_shared'\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" (click)=\\\"showDuplicateTaskModal(tk.task_id)\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : tk.shared_with == 'shared' ? { 'color': 'rgb(23, 140, 201)'} : {}\\\"\\n                                                            class=\\\"sq sq-statustasks\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"tk.task_id\\\"></taskview>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"goTo(0)\\\">\\n                                            <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"setCurPage(0)\\\">\\n                                            <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\"\\n                                        [(ngModel)]=\\\"currentpage\\\" (change)=\\\"searchTask()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    \\n    <div class=\\\"modal fade\\\" id=\\\"mdTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header modal-header-info\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" +\\n                        task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Subject</label>\\n                        <p>{{ task.task_subject }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Product</label>\\n                        <p>{{ task.prod_name }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Assigned to</label>\\n                        <p>{{ task.asigned }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Description</label>\\n                        <div [innerHTML]=\\\"task.task_description\\\"></div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                </span>\\n                            </a>\\n                            <div class=\\\"mailbox-attachment-info\\\">\\n                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                </span>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" id=\\\"buttonClose_mdTask\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <!--Modal   Task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"subject_newTask\\\" name=\\\"subject_newTask\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"Subject\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropwonProduct_NewTask\\\" name=\\\"dropwonProduct_NewTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"dropdownAssign_NewTask\\\" name=\\\"dropdownAssign_NewTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssign_NewTask\\\" name=\\\"dropdownAssign_NewTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_newTask\\\" name=\\\"dropdownProject_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"dropdownSprint_newTask\\\" name=\\\"dropdownSprint_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                    [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_newTask\\\" name=\\\"dropdownLevel_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"points_newTask\\\" name=\\\"points_newTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_newTask\\\" name=\\\"autcompleteShareWith_newTask\\\"\\n                                        class=\\\"autocompleteSqlx shareWith_taskUsers\\\" [(ngModel)]=\\\"task.usersShared\\\"\\n                                        [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n\\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_newTask\\\" name=\\\"units_newTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">                                      \\n                                        \\n                                    </div>                                    \\n\\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_newTask\\\" name=\\\"dropdownUnits_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\"\\n                                            [(ngModel)]=\\\"task.unit_id\\\" ></p-dropdown>\\n                                    </div>\\n                                    \\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_task\\\" [ngClass]=\\\"{'active':tagMenuNew == 1}\\\">\\n                                <a id=\\\"a_descriptionTask_newTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_newTask\\\" (click)=\\\"setPageNewTask(1)\\\">Description</a>\\n                            </li>\\n                            <li id=\\\"li_attachments_task\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuNew == 2}\\\">\\n                                <a id=\\\"a_attachmentsTask_newTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_newTask\\\" (click)=\\\"setPageNewTask(2)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                            <li id=\\\"li_criteria_task\\\" *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuNew == 3}\\\">\\n                                <a id=\\\"editTask-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_newtask\\\" (click)=\\\"setPageNewTask(3)\\\">Criteria\\n                                </a>\\n                            </li>\\n\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuNew == 1\\\" id=\\\"description_newTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_newTask\\\" name=\\\"divContenedor_description_newTask\\\"\\n                                style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editorDescription_newTask\\\" name=\\\"editorDescription_newTask\\\" [(ngModel)]=\\\"task.task_description2\\\"\\n                                    [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenuNew == 2 && task.attachments && task.attachments.length > 0\\\" id=\\\"attachments_newTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div id=\\\"divAttachments_newTask\\\" name=\\\"divAttachments_newTask\\\" class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                            </span>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <i class=\\\"sq sq-attach-files\\\"></i>{{ att.name }}\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button id=\\\"button_1\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachment(att)\\\">\\n                                                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuNew == 3 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_newtask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask ; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldForm(i)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Criteria\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                            for=\\\"fileUpload_newTask\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_newTask\\\" name=\\\"fileUpload_newTask\\\" type=\\\"file\\\" style=\\\"display: none;\\\"\\n                            accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            (change)=\\\"onChange($event)\\\" />\\n\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                            <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_newTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                            data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"buttonSave_newTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateTask()\\\" (click)=\\\"saveTask()\\\">\\n                            Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--. modal new task-->\\n\\n    <!--modal edit task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" +\\n                        task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input id=\\\"inputSubject_editTask\\\" name=\\\"inputSubject_editTask\\\" class=\\\"form-control sqlx-input\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropdownProduct_editTask\\\" name=\\\"dropdownProduct_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assigned to</label>\\n                                <p-dropdown id=\\\"dropdownAssigned_editTask\\\" name=\\\"dropdownAssigned_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssigned_editTask\\\" name=\\\"dropdownAssigned_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_editTask\\\" name=\\\"dropdownProject_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"dropdownSprint_editTask\\\" name=\\\"dropdownSprint_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                    [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\" [readonly]=\\\"task.task_pointsd > 0\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_editTask\\\" name=\\\"dropdownLevel_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDelivery_editTask\\\" name=\\\"calendarDelivery_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"inputPoints_editTask\\\" name=\\\"inputPoints_editTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_editTask\\\" name=\\\"autcompleteShareWith_editTask\\\"\\n                                        class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"task.usersShared\\\" [suggestions]=\\\"usersShareWith\\\"\\n                                        (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                        placeholder=\\\"Share with\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n\\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_editTask\\\" name=\\\"units_editTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">\\n                                    </div>\\n\\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_editTask\\\" name=\\\"dropdownUnits_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\"\\n                                            [(ngModel)]=\\\"task.unit_id\\\" placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\" id=\\\"li_description_editTask\\\">\\n                                <a id=\\\"a_descriptionTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\" id=\\\"li_asocciateForm_editTask\\\">\\n                                <a id=\\\"a_asocciateFormTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate\\n                                    Form</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\"\\n                                id=\\\"li_attachments_editTask\\\">\\n                                <a id=\\\"a_attachmentsTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\" (click)=\\\"setPage(3)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                            <li *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 4}\\\"\\n                                id=\\\"li_criteria_editTask\\\">\\n                                <a id=\\\"editTask-tasklist4\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_task\\\" (click)=\\\"setPage(4)\\\">Criteria\\n                                </a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"p-editorDescription_editTask\\\" name=\\\"p-editorDescription_editTask\\\"\\n                                    [(ngModel)]=\\\"task.task_description_e\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"contenedorFormTask_editTask\\\" name=\\\"contenedorFormTask_editTask\\\">\\n                                <div class=\\\"div_table_associateFom_editTask\\\">\\n                                    <table class=\\\"table_associateFom_editTask\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 60px;\\\">\\n                                                <td class=\\\"td_formfield_editTask\\\">\\n                                                    <div class=\\\"div_formfield_editTask\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td class=\\\"td_formdata_editTask\\\">\\n                                                    <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                    <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_editTask\\\"\\n                                name=\\\"contenedorAttachmentsTask_editTask\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                                                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenu == 4 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_task\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldForm_editTask(i)\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label id=\\\"labelCustomUpload_editTask\\\" style=\\\"border: 1px solid #ccc; font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                            for=\\\"fileUpload_editTask\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_editTask\\\" name=\\\"fileUpload_editTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\"><i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add\\n                            Criteria</button>\\n                    </div>\\n\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_editTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                            data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"buttonSave_editTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateEditTask()\\\" (click)=\\\"saveTask()\\\">Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--. modal edit task-->\\n\\n    <!--modal duplicate task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdDuplicateTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"subject_duplicateTask\\\" name=\\\"subject_duplicateTask\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropwonProduct_duplicateTask\\\" name=\\\"dropwonProduct_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_duplicateTask\\\" name=\\\"dropdownProject_duplicateTask\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"dropdownSprint_duplicateTask\\\" name=\\\"dropdownSprint_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                    [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_duplicateTask\\\" name=\\\"dropdownLevel_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_duplicateTask\\\" name=\\\"calendarDeliveryDate_duplicateTask\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"points_duplicateTask\\\" name=\\\"points_duplicateTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_duplicateTask\\\" name=\\\"autcompleteShareWith_duplicateTask\\\"\\n                                        class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"task.usersShared\\\" [suggestions]=\\\"usersShareWith\\\"\\n                                        (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                        placeholder=\\\"Share with\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n                        \\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_duplicateTask\\\" name=\\\"units_duplicateTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">\\n                                    </div>\\n                        \\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_duplicateTask\\\" name=\\\"dropdownUnits_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"task.unit_id\\\"\\n                                            placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                    </div>                    \\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_duplicateTask\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 1}\\\">\\n                                <a id=\\\"a_descriptionTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 2}\\\">\\n                                <a id=\\\"a_asocciateFormTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#associateForm_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(2)\\\">Associate\\n                                    Form</a>\\n                            </li>\\n                            <li id=\\\"li_criteria_duplicateTask\\\" *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuDupliTk == 3}\\\">\\n                                <a id=\\\"a_criteriaTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(3)\\\">Criteria </a>\\n                            </li>\\n                            <li id=\\\"li_attachments_duplicateTask\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuDupliTk == 4}\\\">\\n                                <a id=\\\"a_attachmentsTask_duplicateTaskk\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(4)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuDupliTk == 1\\\" id=\\\"description_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_duplicateTask\\\" name=\\\"divContenedor_description_duplicateTask\\\"\\n                                style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editorDescription_duplicateTask\\\" name=\\\"editorDescription_duplicateTask\\\"\\n                                    [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 2\\\" id=\\\"associateForm_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"contenedorFormTask_duplicateTask\\\" name=\\\"contenedorFormTask_duplicateTask\\\">\\n                                <div class=\\\"div_table_associateFom_editTask\\\">\\n                                    <table class=\\\"table_associateFom_editTask\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 60px;\\\">\\n                                                <td class=\\\"td_formfield_editTask\\\">\\n                                                    <div class=\\\"div_formfield_editTask\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td class=\\\"td_formdata_editTask\\\">\\n                                                    <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                    <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 3 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_duplicateTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask ; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldForm_duplicateTask(i)\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 4\\\" id=\\\"attachments_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_duplicateTask\\\"\\n                                name=\\\"contenedorAttachmentsTask_duplicateTask\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachment_duplicateTask(att)\\\">\\n                                                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                            for=\\\"fileUpload_duplicateTask\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_duplicateTask\\\" name=\\\"fileUpload_duplicateTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                            <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_duplicateTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                            data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"buttonSave_duplicateTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateDuplicateTask()\\\" (click)=\\\"saveDuplicateTask()\\\">\\n                            Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--. modal duplicate task-->\\n\\n    <!--modal search task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdSearchTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Main filter</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Description</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"description_taskfilter\\\" name=\\\"description_taskfilter\\\"\\n                                    [(ngModel)]=\\\"mytask.description\\\" placeholder=\\\"type a keyword\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-chips\\\">\\n                                <label>Task id(s)</label>\\n                                <p-chips class=\\\"chipsSqlx\\\" [(ngModel)]=\\\"mytask.task_ids\\\" placeholder=\\\"Ex.17,19-22 enter\\\"></p-chips>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Assigned to</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.assigned\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Assigned to\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Creator(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.creators\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Product(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.products\\\"\\n                                        [suggestions]=\\\"productsa\\\" (completeMethod)=\\\"filterMultiple($event, 1)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Products(s)\\\" field=\\\"prod_name\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Project(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.projects\\\"\\n                                        [suggestions]=\\\"myProjectsx\\\" (completeMethod)=\\\"filterMultiple($event, 3)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Project(s)\\\" field=\\\"proj_subject\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date initial</label>\\n                                <p-calendar id=\\\"calendarDateInit_taskfilter\\\" name=\\\"calendarDateInit_taskfilter\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mytask.date_ini\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date end</label>\\n                                <p-calendar id=\\\"calendarDateEnd_taskfilter\\\" name=\\\"calendarDateEnd_taskfilter\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mytask.date_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonSearch_taskfilter\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"filterTask()\\\">\\n                            Search\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--modal rejectar tasks-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdReject\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content modal-rejectRequest\\\">\\n                <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n                    <button id=\\\"close-mdRj-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\"\\n                        aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Reject task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label class=\\\"label_reasonReject_slqx\\\">Reason for rejection</label>\\n                        <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\"\\n                            placeholder=\\\"Description ...\\\" [(ngModel)]=\\\"rjtask.task_description\\\"></textarea>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button id=\\\"close2-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                    <button id=\\\"save-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"(!rjtask.task_description || rjtask.task_description == '' || rjtask.task_description == 'undefined')\\\"\\n                        (click)=\\\"rejectTask()\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--. modal rejectar tasks-->\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/task/tasklist.template.html\n// module id = 819\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> TASKS #{{ task.task_id }}\\n            <!-- <small style=\\\"font-size:15px; font-weight: bold;\\\"> > Task #{{ task.task_id }}</small> -->\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li><a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            <li><a routerLink=\\\"/tasks\\\">\\n                    Tasks</a></li>\\n            <li class=\\\"active\\\">Task #{{ task.task_id }}</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box box-desc-project\\\">\\n                    <div class=\\\"modal-header header-task\\\">\\n                        <div style=\\\"float: left; overflow-y: scroll;max-height: 29px;\\\">\\n                            <label class=\\\"label-box-title\\\">{{task.task_subject}}</label>\\n                        </div>\\n                        <div class=\\\"pull-right\\\">\\n                            <button type=\\\"button\\\" (click)=\\\"showEditModal()\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                <i class=\\\"sq sq-quickedit\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                            <button *ngIf=\\\"task.para_status != 3 && task.para_status != 5\\\" type=\\\"button\\\" (click)=\\\"closeTask()\\\"\\n                                class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\" data-container=\\\"body\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                <i class=\\\"fa fa-times-circle-o\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                            <button *ngIf=\\\"task.para_status == 3 \\\" (click)=\\\"openTask(task.proj_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                                <i class=\\\"fa fa-undo\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                            <button *ngIf=\\\"task.para_status != 5\\\" (click)=\\\"deleteTask(task.proj_id)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\" data-container=\\\"body\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <i class=\\\"sq sq-trash\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                            <button id=\\\"buttonActionDuplicate_taskList\\\" (click)=\\\"showDuplicateTaskModal(task.task_id)\\\"\\n                                type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Duplicate\\\">\\n                                <i class=\\\"sq sq-statustasks\\\" style=\\\"color: white;\\\"></i>\\n                            </button>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"box-body box-project\\\">\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Task Number:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_id}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Creation Date:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_date}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Task Status:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{\\n                                task.status_name }}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Task Creator:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.creator}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Delivery Date:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_delivery}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Progress:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_percentage}}%</span>\\n                            <div *ngIf=\\\"task.task_percentage >0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                                <div class=\\\"success-sqlx col-xs-12 col-md-4\\\" [ngStyle]=\\\"{ 'width': task.task_percentage + '%' }\\\">\\n                                </div>\\n                            </div>\\n                            <div *ngIf=\\\"task.task_percentage == 0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                                <div class=\\\"success-sqlx col-xs-12 col-md-4\\\" style=\\\"width:0%;background-color:transparent;\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Assigned to:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.asigned}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px!important;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Assigned\\n                                Points:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.task_points}}</span>\\n                        </div>\\n                        <div *ngIf=\\\"task.spri_id\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"padding-left: 0px!important;\\\">\\n                            <label class=\\\"control-label col-xs-6 col-sm-6 col-md-5 col-lg-5 label-sqlx\\\">Sprint number:</label>\\n                            <span class=\\\"label-noedit col-xs-6 col-sm-6 col-md-7 col-lg-7 span-sqlx\\\">{{task.spri_id}}</span>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 row\\\" style=\\\"padding: 0px; width: 100%;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-8\\\">\\n                                <label class=\\\"control-label col-xs-6 col-md-5 label-sqlx\\\">Description</label>\\n                                <div class=\\\"col-xs-12 col-md-12 iframe-desc-proj\\\" style=\\\"padding-top:10px;margin-left:10px;\\\">\\n                                    <span class=\\\"iframe-desc-proj\\\"> {{escapeHtml(task.task_description)}}</span>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                                <label class=\\\"control-label col-xs-6 col-md-5 label-sqlx\\\">Attachments</label>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right: 0px;\\\">\\n                                    <div class=\\\"pull-left col-xs-2 col-sm-2 col-md-2 col-lg-2 iframe-desc-proj\\\" style=\\\"border-bottom-right-radius: 0px;border-top-right-radius: 0px;\\\">\\n                                        <div *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                                            <div style=\\\"text-align: center;vertical-align: middle;transform: translate(-7px, 34px); font-size:20px;color:#4F5D64; font-weight: bold;\\\">\\n                                                {{task.attachments.length}}\\n                                            </div>\\n                                            <div style=\\\"text-align: center;vertical-align: middle;transform: translate(12px, 9px);\\\">\\n                                                <i class=\\\"sq sq-attach-files\\\" style=\\\"color:rgb(28, 110, 198);font-size: 23px!important;outline: none;\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"pull-right col-xs-10 col-sm-10 col-md-10 col-lg-10 iframe-desc-proj\\\"\\n                                        style=\\\"border-bottom-left-radius: 0px;border-top-left-radius: 0px;padding-right: 0px;border-left: 2px solid white;\\\">\\n                                        <div *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                                            <table class=\\\"list-att-task\\\" style=\\\"width: 100%;\\\">\\n\\n                                                <body style=\\\"background-color: rgb(237, 246, 248);color: rgb(167, 167, 167);width: 100%;\\\">\\n                                                    <tr *ngFor=\\\"let att of task.attachments\\\" style=\\\"width: 100%;\\\">\\n                                                        <td style=\\\"width: 70%;padding: 0px;\\\">\\n                                                            {{ att.tsat_alias }}\\n                                                        </td>\\n                                                        <td style=\\\"width: 30%;padding: 0px;\\\">\\n                                                            <div class=\\\"btn-group\\\">\\n                                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\"><i class=\\\"sq sq-download\\\"\\n                                                                            style=\\\"color:rgb(28, 110, 198);font-size: 11px;outline: none;\\\"></i></a>\\n                                                                </button>\\n                                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\"><i class=\\\"sq sq-view\\\"\\n                                                                            style=\\\"color:rgb(28, 110, 198);font-size: 11px;outline: none;\\\"></i></a>\\n                                                                </button>\\n                                                            </div>\\n                                                        </td>\\n                                                    </tr>\\n                                                </body>\\n                                            </table>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-sm-12 col-lg-6 comments-project\\\" style=\\\"margin-left: 31px;margin-bottom: 20px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;\\\">\\n                            <div class=pull-left style=\\\"padding:2px; margin:2px;\\\">\\n                                <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 23px!important\\\"></i>\\n                            </div>\\n                            <div class=\\\"pull-rigth\\\" style=\\\"padding:2px; margin:2px;margin-top: 6px;\\\">\\n                                <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold;\\\">COMMENTS</span>\\n                            </div>\\n                            <div style=\\\"background-color:gray; width:90%;margin-left:10px;\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"content-comments-users scrollable\\\" style=\\\"max-height:273px;\\\">\\n                            <ul class=\\\"timeline comment-timeline\\\">\\n                                <li *ngFor=\\\"let dt of detail; let i=index;\\\" style=\\\"margin-top:5px;\\\">\\n                                    <div class=\\\"border-imguser\\\">\\n                                        <img [src]=\\\"dt.urlimagen\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"img-usersqlx\\\">\\n                                    </div>\\n\\n                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                        <span class=\\\"time\\\">\\n                                            {{dt.note_date}}</span>\\n                                        <h3 class=\\\"timeline-header comment-timeline-header\\\">\\n                                            <b>{{dt.creator}}</b>\\n                                            <!-- {{\\\" \\\" + dt.title + \\\" \\\"}} -->\\n                                            commented on a\\n                                            <b>task</b>\\n                                        </h3>\\n                                        <div class=\\\"timeline-body\\\" style=\\\"overflow-y: scroll; max-height:200px; padding-bottom: 1px;\\\">\\n                                            <div class=\\\"box-body\\\">\\n                                                <div class=\\\"col-xs-12 col-md-12\\\">\\n                                                    <div class=\\\"col-xs-12 col-md-12 comment-user\\\" style=\\\"padding-top:10px;margin-left:10px;\\\">\\n                                                        <p class=\\\"comment-user\\\"> {{escapeHtml(dt.note_text)}}</p>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"dt.childs.length > 0\\\">\\n                                                        <div *ngFor=\\\"let chn of dt.childs\\\" class=\\\"col-xs-12 col-md-12 reply-user\\\"\\n                                                            style=\\\"padding-top:10px;margin-left:10px; padding-top:0px;\\\">\\n                                                            <div class=\\\"pull-right reply-comment\\\">\\n                                                                <h3 class=\\\"reply-user\\\">\\n                                                                    <b>{{chn.creator}}</b>\\n                                                                    <!-- {{\\\" \\\" + chn.title + \\\" \\\"}} -->\\n                                                                    commented on a\\n                                                                    <b>task</b>\\n                                                                </h3>\\n                                                                <p class=\\\"reply-user\\\"> {{escapeHtml(chn.note_text)}}</p>\\n                                                            </div>\\n                                                            <div style=\\\"background-color:rgb(237, 246, 248); height:6px; position: relative;\\\">\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                    <div id=\\\"reply-user\\\" class=\\\"row\\\">\\n                                                        <div class=\\\"col-md-11 reply-note\\\" *ngIf=\\\"!dt.active\\\"\\n                                                            style=\\\"text-align: right;\\\">\\n                                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showNoteReply(i)\\\">\\n                                                                <p class=\\\"reply-the-comment\\\" style=\\\"color:rgb(167, 167, 167)!important;padding-top: 7px;display: inline-block;text-align: right;\\\">Reply\\n                                                                    the comment</p>\\n                                                            </a>\\n                                                        </div>\\n                                                        <div class=\\\"col-md-11\\\" *ngIf=\\\"dt.active\\\">\\n                                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"createNoteReply(dt.note_id)\\\">\\n                                                                <div class=\\\"col-md-12\\\" style=\\\"background-color: rgb(237, 246, 248); height: 24px;margin-left:10px;margin-top:6px;\\\">\\n                                                                    <input type=\\\"text\\\" class=\\\"col-md-12 imput-comments\\\"\\n                                                                        style=\\\"background-color: rgb(237, 246, 248);height: 24px;margin-top: 5px;margin-bottom: 2px;margin-left: 12px; width: 100%;\\\"\\n                                                                        [(ngModel)]=\\\"notereply.note_data\\\" placeholder=\\\"Type Comment\\\">\\n                                                                </div>\\n                                                            </a>\\n                                                        </div>\\n                                                        <div class=\\\"pull-right col-md-1\\\">\\n                                                            <button type=\\\"submit\\\" (click)=\\\"saveNoteReply(dt.note_id, dt)\\\"\\n                                                                style=\\\"outline: none;background-color:transparent; border:none; margin-top: 3px;\\\">\\n                                                                <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;outline: none;\\\"></i></button>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </li>\\n                            </ul>\\n                        </div>\\n                        <div class=\\\"modal-footer clearfix footer-comments-users\\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"pull-left col-md-11\\\">\\n                                    <div class=\\\"pull-left col-md-12\\\" style=\\\"background-color:white; height: 24px;\\\">\\n                                        <input type=\\\"text\\\" class=\\\"pull-left col-md-12 imput-comments\\\" [(ngModel)]=\\\"note.note_text\\\"\\n                                            placeholder=\\\"New Comment\\\">\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"pull-right col-md-1\\\">\\n                                    <button type=\\\"submit\\\" (click)=\\\"saveNote()\\\" style=\\\"background-color:transparent; border:none;\\\">\\n                                        <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i></button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-sm-12 col-lg-6 comments-project\\\" style=\\\"margin-left: 31px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;\\\">\\n                            <div class=pull-left style=\\\"padding:2px; margin:2px;\\\">\\n                                <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 23px!important\\\"></i>\\n                            </div>\\n                            <div class=\\\"pull-rigth\\\" style=\\\"padding:2px; margin:2px; margin-top: 6px;\\\">\\n                                <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold;\\\">DAILY</span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"content-comments-users scrollable\\\" style=\\\"max-height:320px;\\\">\\n                            <div class=\\\"box-body\\\" style=\\\"margin-top:10px;\\\">\\n                                <ul class=\\\"timeline daily-timeline\\\">\\n                                    <li *ngFor=\\\"let dtd of detail_daily\\\" style=\\\"padding-bottom:5px;\\\">\\n                                        <i class=\\\"fa fa-dot-circle-o\\\" style=\\\"color: rgb(68, 180, 248); font-size: 30px;background-color: transparent;margin-left: -3px; margin-top: -3px;\\\"></i>\\n                                        <div class=\\\"timeline-item daily-timeline-item\\\">\\n                                            <span class=\\\"date-sqlx\\\">{{dtd.date}}</span>\\n                                            <h3 class=\\\"timeline-header timeline-dailyheader\\\">\\n                                                <b>{{dtd.title + \\\": \\\"}}\\n                                                    {{dtd.points}}</b>\\n                                            </h3>\\n                                            <div class=\\\"timeline-body daily-timeline-body\\\" style=\\\"color:rgb(167, 167, 167);\\\">\\n                                                {{\\\"Comments: \\\" + escapeHtml(dtd.description)}}\\n                                            </div>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <!--Modal Edit Task-->\\n        <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                    role=\\\"document\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n\\n                <div class=\\\"modal-content-params\\\">\\n                    <div class=\\\"modal-header modal-header-info-params\\\">\\n                        <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                        </button>\\n                        <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + myTask.task_id + \\\" - \\\" +\\n                            myTask.task_subject}}\\n                        </h4>\\n                    </div>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group input-squadlinx\\\">\\n                                    <label>Subject</label>\\n                                    <input id=\\\"inputSubject_editTask\\\" name=\\\"inputSubject_editTask\\\" class=\\\"form-control sqlx-input\\\"\\n                                        [(ngModel)]=\\\"myTask.task_subject\\\" placeholder=\\\"\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Product</label>\\n                                    <p-dropdown id=\\\"dropdownProduct_editTask\\\" name=\\\"dropdownProduct_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                        [(ngModel)]=\\\"myTask.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Assigned to</label>\\n                                    <p-dropdown id=\\\"dropdownAssigned_editTask\\\" name=\\\"dropdownAssigned_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                        [(ngModel)]=\\\"myTask.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Associate to Project</label>\\n                                    <p-dropdown id=\\\"dropdownProject_editTask\\\" name=\\\"dropdownProject_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                        [(ngModel)]=\\\"myTask.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Associate to Sprint</label>\\n                                    <p-dropdown id=\\\"dropdownSprint_editTask\\\" name=\\\"dropdownSprint_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                        [(ngModel)]=\\\"myTask.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Delivery Date</label>\\n                                    <p-calendar id=\\\"calendarDelivery_editTask\\\" name=\\\"calendarDelivery_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myTask.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                        [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                        [monthNavigator]=\\\"true\\\"></p-calendar>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group spinner-squadlinx\\\">\\n                                    <label>Points</label>\\n                                    <input type=\\\"number\\\" id=\\\"inputPoints_editTask\\\" name=\\\"inputPoints_editTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                        [(ngModel)]=\\\"myTask.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Share with</label>\\n                                    <span class=\\\"ui-fluid\\\">\\n                                        <p-autoComplete id=\\\"autcompleteShareWith_editTask\\\" name=\\\"autcompleteShareWith_editTask\\\"\\n                                            class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myTask.usersShared\\\" [suggestions]=\\\"usersShareWith\\\"\\n                                            (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\"\\n                                            [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n\\n                                        </p-autoComplete>\\n                                    </span>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                                <li [ngClass]=\\\"{'active':tagMenu == 1}\\\" id=\\\"li_description_editTask_task\\\">\\n                                    <a id=\\\"a_descriptionTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\"\\n                                        (click)=\\\"setPage(1)\\\">Description</a>\\n                                </li>\\n                                <li *ngIf=\\\"myTask.form && myTask.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\"\\n                                    id=\\\"li_form_editTask_task\\\">\\n                                    <a id=\\\"a_asocciateFormTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\"\\n                                        (click)=\\\"setPage(2)\\\">Associate\\n                                        Form</a>\\n                                </li>\\n                                <li *ngIf=\\\"myTask.attachments && myTask.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\"\\n                                    id=\\\"li_attachments_editTask_task\\\">\\n                                    <a id=\\\"a_attachmentsTask_editTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\"\\n                                        (click)=\\\"setPage(3)\\\">Attachments <span>({{myTask.attachments.length}})</span></a>\\n                                </li>\\n                                <li *ngIf=\\\"myTask.criteriaTask && myTask.criteriaTask.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 4}\\\"\\n                                    id=\\\"li_criteria_editTask_task\\\">\\n                                    <a id=\\\"editTask-tasklist4\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_task\\\" (click)=\\\"setPage(4)\\\">Criteria\\n                                    </a>\\n                                </li>\\n                            </ul>\\n                            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                    <p-editor id=\\\"p-editorDescription_editTask\\\" name=\\\"p-editorDescription_editTask\\\"\\n                                        [(ngModel)]=\\\"myTask.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                        <p-header>\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <span class=\\\"ql-header\\\">\\n                                                    <select class=\\\"ql-header\\\">\\n                                                        <option value=\\\"1\\\">Heading</option>\\n                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                        <option selected>Normal</option>\\n                                                    </select>\\n                                                </span>\\n\\n                                                <span class=\\\"ql-font\\\">\\n                                                    <select class=\\\"ql-font\\\">\\n                                                        <option selected>Sans Serif</option>\\n                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                    <select class=\\\"ql-align\\\">\\n                                                        <option selected></option>\\n                                                        <option value=\\\"center\\\"></option>\\n                                                        <option value=\\\"right\\\"></option>\\n                                                        <option value=\\\"justify\\\"></option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n                                        </p-header>\\n                                    </p-editor>\\n                                </div>\\n                            </div>\\n                            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"contenedorFormTask_editTask\\\" name=\\\"contenedorFormTask_editTask\\\">\\n                                    <div class=\\\"div_table_associateFom_editTask\\\">\\n                                        <table class=\\\"table_associateFom_editTask\\\">\\n                                            <tbody style=\\\"width: 100%;\\\">\\n                                                <tr *ngFor=\\\"let fr of myTask.form\\\" style=\\\"height: 60px;\\\">\\n                                                    <td class=\\\"td_formfield_editTask\\\">\\n                                                        <div class=\\\"div_formfield_editTask\\\">\\n                                                            {{fr.form_field}}\\n                                                        </div>\\n                                                    </td>\\n                                                    <td class=\\\"td_formdata_editTask\\\">\\n                                                        <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                            {{fr.form_data}}\\n                                                        </div>\\n                                                        <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_editTask\\\"\\n                                    name=\\\"contenedorAttachmentsTask_editTask\\\">\\n                                    <div class=\\\"div_associatedAttachments\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of myTask.attachments\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                    </a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                        <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                            (click)=\\\"deleteAttachmentTask_editTask(myTask, att)\\\">\\n                                                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                        </button>\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                            <div *ngIf=\\\"tagMenu == 4 && myTask.criteriaTask && myTask.criteriaTask.length > 0\\\" id=\\\"criteria_task\\\"\\n                                class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <thead>\\n                                            <tr>\\n                                                <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                                <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                                <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let tkcr of myTask.criteriaTask; let i=index;\\\">\\n                                                <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                    <label>{{tkcr.tkcr_num}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                                </td>\\n                                                <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                    <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        type=\\\"button\\\" (click)=\\\"deleteFieldForm_editTask(i)\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tfoot>\\n                                            <tr>\\n                                                <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                        pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(myTask.task_id )\\\"><i\\n                                                            class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                                </td>\\n                                            </tr>\\n                                        </tfoot>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-left\\\">\\n                            <label id=\\\"labelCustomUpload_editTask\\\" style=\\\"border: 1px solid #ccc; font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                                for=\\\"fileUpload_editTask\\\" class=\\\"custom-file-upload\\\">\\n                                <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                            </label>\\n                            <input id=\\\"fileUpload_editTask\\\" name=\\\"fileUpload_editTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                style=\\\"display: none;\\\" (change)=\\\"onChangeNewTask($event)\\\" />\\n\\n                            <button *ngIf=\\\"myTask.criteriaTask && myTask.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\"><i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add\\n                                Criteria</button>\\n                        </div>\\n\\n                        <div class=\\\"pull-right\\\">\\n                            <button id=\\\"buttonClose_editTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                                data-dismiss=\\\"modal\\\">Close\\n                            </button>\\n                            <button id=\\\"buttonSave_editTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                                class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"(!myTask.task_description || myTask.task_description == '' || myTask.task_description == 'undefined') || (!myTask.prod_id) || (!myTask.task_points || myTask.task_points <= 0)\\\"\\n                                (click)=\\\"saveNewTask()\\\">Save\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- . Modal Edit Task-->\\n\\n        <!--Modal Duplicate Task-->\\n        <div class=\\\"modal fade\\\" id=\\\"mdDuplicateTask\\\" role=\\\"dialog\\\">\\n            <!--Modal New Task-->\\n            <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                    role=\\\"document\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div class=\\\"modal-content-params\\\">\\n                    <div class=\\\"modal-header modal-header-info-params\\\">\\n                        <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                        </button>\\n                        <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                    </div>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group input-squadlinx\\\">\\n                                    <label>Subject</label>\\n                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"subject_duplicateTask\\\" name=\\\"subject_duplicateTask\\\"\\n                                        [(ngModel)]=\\\"myTask.task_subject\\\" placeholder=\\\"\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Product</label>\\n                                    <p-dropdown id=\\\"dropwonProduct_duplicateTask\\\" name=\\\"dropwonProduct_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                        [options]=\\\"products\\\" [(ngModel)]=\\\"myTask.prod_id\\\" placeholder=\\\"Select a Product\\\"\\n                                        filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Assign to</label>\\n                                    <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                        [options]=\\\"userslbl\\\" [(ngModel)]=\\\"myTask.user_asigned\\\" placeholder=\\\"Select user\\\"\\n                                        filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Associate a Project</label>\\n                                    <p-dropdown id=\\\"dropdownProject_duplicateTask\\\" name=\\\"dropdownProject_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                        [options]=\\\"myProjects\\\" [(ngModel)]=\\\"myTask.proj_id\\\" placeholder=\\\"Select a Project\\\"\\n                                        filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label>Associate to Sprint</label>\\n                                    <p-dropdown id=\\\"dropdownSprint_duplicateTask\\\" name=\\\"dropdownSprint_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                        [options]=\\\"mysprints\\\" [(ngModel)]=\\\"myTask.spri_id\\\" placeholder=\\\"Select a Sprint\\\"\\n                                        filter=\\\"filter\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Delivery Date</label>\\n                                    <p-calendar id=\\\"calendarDeliveryDate_duplicateTask\\\" name=\\\"calendarDeliveryDate_duplicateTask\\\"\\n                                        class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myTask.task_delivery\\\"\\n                                        dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                        yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                <div class=\\\"form-group spinner-squadlinx\\\">\\n                                    <label>Points</label>\\n                                    <input type=\\\"number\\\" id=\\\"points_duplicateTask\\\" name=\\\"points_duplicateTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                        [(ngModel)]=\\\"myTask.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-7 col-lg-7\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Share with</label>\\n                                    <span class=\\\"ui-fluid\\\">\\n                                        <p-autoComplete id=\\\"autcompleteShareWith_duplicateTask\\\" name=\\\"autcompleteShareWith_duplicateTask\\\"\\n                                            class=\\\"autocompleteSqlx shareWith_taskUsers\\\" [(ngModel)]=\\\"myTask.usersShared\\\"\\n                                            [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                            styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                            [multiple]=\\\"true\\\">\\n\\n                                        </p-autoComplete>\\n                                    </span>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-5 col-lg-5\\\" style=\\\"height: 58px;\\\">\\n                                <label>Options</label>\\n                                <div class=\\\"col-xs-12 col-md-12 col-lg-12 \\\" style=\\\"padding-top: 5px;\\\">\\n                                    <label class=\\\"form-check-label\\\">\\n                                        <input id=\\\"checkComplete_duplicateTask\\\" name=\\\"checkComplete_duplicateTask\\\" type=\\\"checkbox\\\"\\n                                            class=\\\"form-check-input\\\" [(ngModel)]=\\\"myTask.completed\\\">\\n                                        Mark as Complete\\n                                    </label>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                                <li id=\\\"li_description_duplicateTask\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 1}\\\">\\n                                    <a id=\\\"a_descriptionTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_duplicateTask\\\"\\n                                        (click)=\\\"setPageDupliTk(1)\\\">Description</a>\\n                                </li>\\n                                <li *ngIf=\\\"myTask.form && myTask.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 2}\\\"\\n                                    id=\\\"li_form_duplicateTask_task\\\">\\n                                    <a id=\\\"a_asocciateFormTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#associateForm_duplicateTask\\\"\\n                                        (click)=\\\"setPageDupliTk(2)\\\">Associate\\n                                        Form</a>\\n                                </li>\\n                                <li id=\\\"li_criteria_duplicateTask\\\" *ngIf=\\\"myTask.criteriaTask && myTask.criteriaTask.length > 0\\\"\\n                                    [ngClass]=\\\"{'active':tagMenuDupliTk == 3}\\\">\\n                                    <a id=\\\"a_criteriaTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_duplicateTask\\\"\\n                                        (click)=\\\"setPageDupliTk(3)\\\">Criteria </a>\\n                                </li>\\n                                <li id=\\\"li_attachments_duplicateTask\\\" *ngIf=\\\"myTask.attachments && myTask.attachments.length > 0\\\"\\n                                    [ngClass]=\\\"{'active':tagMenuDupliTk == 4}\\\">\\n                                    <a id=\\\"a_attachmentsTask_duplicateTaskk\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_duplicateTask\\\"\\n                                        (click)=\\\"setPageDupliTk(4)\\\">Attachments\\n                                        <span>({{myTask.attachments.length}})</span></a>\\n                                </li>\\n                            </ul>\\n                            <div *ngIf=\\\"tagMenuDupliTk == 1\\\" id=\\\"description_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_duplicateTask\\\"\\n                                    name=\\\"divContenedor_description_duplicateTask\\\" style=\\\"margin-top:5px;\\\">\\n                                    <p-editor id=\\\"editorDescription_duplicateTask\\\" name=\\\"editorDescription_duplicateTask\\\"\\n                                        [(ngModel)]=\\\"myTask.task_description_d\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                        <p-header>\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <span class=\\\"ql-header\\\">\\n                                                    <select class=\\\"ql-header\\\">\\n                                                        <option value=\\\"1\\\">Heading</option>\\n                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                        <option selected>Normal</option>\\n                                                    </select>\\n                                                </span>\\n\\n                                                <span class=\\\"ql-font\\\">\\n                                                    <select class=\\\"ql-font\\\">\\n                                                        <option selected>Sans Serif</option>\\n                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                    <select class=\\\"ql-align\\\">\\n                                                        <option selected></option>\\n                                                        <option value=\\\"center\\\"></option>\\n                                                        <option value=\\\"right\\\"></option>\\n                                                        <option value=\\\"justify\\\"></option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n                                        </p-header>\\n                                    </p-editor>\\n                                </div>\\n                            </div>\\n\\n                            <div *ngIf=\\\"tagMenuDupliTk == 2\\\" id=\\\"associateForm_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"contenedorFormTask_duplicateTask\\\"\\n                                    name=\\\"contenedorFormTask_duplicateTask\\\">\\n                                    <div class=\\\"div_table_associateFom_editTask\\\">\\n                                        <table class=\\\"table_associateFom_editTask\\\">\\n                                            <tbody style=\\\"width: 100%;\\\">\\n                                                <tr *ngFor=\\\"let fr of myTask.form\\\" style=\\\"height: 60px;\\\">\\n                                                    <td class=\\\"td_formfield_editTask\\\">\\n                                                        <div class=\\\"div_formfield_editTask\\\">\\n                                                            {{fr.form_field}}\\n                                                        </div>\\n                                                    </td>\\n                                                    <td class=\\\"td_formdata_editTask\\\">\\n                                                        <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                            {{fr.form_data}}\\n                                                        </div>\\n                                                        <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                            <div *ngIf=\\\"tagMenuDupliTk == 3 && myTask.criteriaTask && myTask.criteriaTask.length > 0\\\"\\n                                id=\\\"criteria_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <thead>\\n                                            <tr>\\n                                                <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                                <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                                <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                            </tr>\\n                                        </thead>\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let tkcr of myTask.criteriaTask ; let i=index;\\\">\\n                                                <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                    <label>{{tkcr.tkcr_num}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                                </td>\\n                                                <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                    <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        type=\\\"button\\\" (click)=\\\"deleteFieldForm_duplicateTask(i)\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tfoot>\\n                                            <tr>\\n                                                <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                        pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(myTask.task_id )\\\"><i\\n                                                            class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                                </td>\\n                                            </tr>\\n                                        </tfoot>\\n                                    </table>\\n                                </div>\\n                            </div>\\n\\n                            <div *ngIf=\\\"tagMenuDupliTk == 4\\\" id=\\\"attachments_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_duplicateTask\\\"\\n                                    name=\\\"contenedorAttachmentsTask_duplicateTask\\\">\\n                                    <div class=\\\"div_associatedAttachments\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of myTask.attachments\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                    </a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                        <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                            (click)=\\\"deleteAttachment_duplicateTask(att)\\\">\\n                                                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                                        </button>\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                        </div>\\n                    </div>\\n\\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-left\\\">\\n                            <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                                for=\\\"fileUpload_duplicateTask\\\" class=\\\"custom-file-upload\\\">\\n                                <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                            </label>\\n                            <input id=\\\"fileUpload_duplicateTask\\\" name=\\\"fileUpload_duplicateTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                style=\\\"display: none;\\\" (change)=\\\"onChangeDupliTk($event)\\\" />\\n                            <button *ngIf=\\\"myTask.criteriaTask && myTask.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                                <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                            </button>\\n                        </div>\\n                        <div class=\\\"pull-right\\\">\\n                            <button id=\\\"buttonClose_duplicateTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                                data-dismiss=\\\"modal\\\">Close\\n                            </button>\\n                            <button id=\\\"buttonSave_duplicateTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                                class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateDuplicateTask()\\\" (click)=\\\"saveDuplicateTask()\\\">\\n                                Save\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- . Modal Duplicate Task-->\\n\\n    </section>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/task/task.template.html\n// module id = 820\n// module chunks = 0","import { Component, Input } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { ToastrService } from \"ngx-toastr\";\nimport { DomSanitizer } from \"@angular/platform-browser\";\nimport { ConfirmationService } from \"primeng/primeng\";\nimport { Title } from \"@angular/platform-browser\";\n\nimport { ProjectService } from \"../../services/project.service\";\nimport { TaskService } from \"../../services/task.service\";\nimport { NoteService } from \"../../services/note.service\";\nimport { SprintService } from \"../../services/sprint.service\";\nimport { UsersService } from \"../../services/users.service\";\nimport { ExternalRequestService } from \"../../services/externalrequest.service\";\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from \"../../pipes\";\nimport template from \"./taskview.template.html\";\nimport { IfObservable } from \"rxjs/observable/IfObservable\";\nimport { log } from \"fullcalendar\";\n\n@Component({\n    selector: \"taskview\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class TaskViewComponent {\n    @Input() myTaskId;\n    @Input() myDbName;\n    constructor(\n        title: Title,\n        route: Router,\n        sanitizer: DomSanitizer,\n        toastr: ToastrService,\n        taskService: TaskService,\n        ProjectService: ProjectService,\n        noteService: NoteService,\n        sprintService: SprintService,\n        externalRequestService: ExternalRequestService,\n        userService: UsersService,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._tasks = taskService;\n        this._user = userService;\n        this._sanitizer = sanitizer;\n        this._projects = ProjectService;\n        this._notes = noteService;\n        this.confirm = confirmationService;\n        this._sprint = sprintService;\n        this._externalrequest = externalRequestService;\n        this.isLoading = false;\n        this.search = \"\";\n        if (localStorage.getItem(\"tasksearch\")) {\n            this.search = localStorage.getItem(\"tasksearch\");\n        }\n        this.notemd = { note_text: \"\" };\n        this.mdT = {\n            project: {},\n            userSharedTask: [],\n            comments: [],\n            timeline: [],\n            attachments: [],\n            form: [],\n            sprint: {},\n            total_adjusted: [],\n            total_attachments: 0\n        };\n        this.taskJoin = {};\n        this.taskCriteria = [];\n        this.join = {};\n        this.commentsTaskJoin = {\n            comments: []\n        };\n        this.idtk = [];\n        this.note = { attachments: [], note_text: \"\"};\n        this.taskattch = { attachments: [] };\n        this.mysprints = [];\n        this.tasks = [];\n        this.cont = 0;\n        this.clientGroup = '';\n        this.stTitle = \"Squadlinx\";\n        if (localStorage.getItem(\"title\")) {\n            this.stTitle = localStorage.getItem(\"title\");\n        }\n        this._title.setTitle(\".:: \" + this.stTitle + \" : Tasks ::.\");\n        this.tasktag = false;\n    }\n    ngOnInit() { \n        this.getExternal();\n    }\n    getExternal() {\n        this._user.getExternalList().subscribe(res => {\n            const objClientes = res.data[0];\n            this.clientGroup = objClientes.usex_dbname;\n        });\n    }\n    showModaltk() {\n\n        var idtk = this.myTaskId;\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.note = { attachments: [] };\n        this.mdT.attachments = [];\n        this.mdT.userSharedTask = [];\n        this.mdT.timeline = [];\n        this.mdT.form = [];\n        this.mdT.sprint = {};\n        this.mdT.total_adjusted = [];\n        this.mdT.total_attachments = 0;\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getTask(this.myTaskId, this.myDbName).subscribe(res => {\n                this.mdT = res.data;\n                this.getProject(this.mdT.proj_id);\n                this.getComments(this.myTaskId);\n                this.getAttachments(this.myTaskId);\n                this.getAdjusted(this.myTaskId);\n                this.getTimeline(this.myTaskId);\n                this.getForm(this.myTaskId);\n                this.getRejected(this.myTaskId);\n                if (this.mdT.spri_id) {\n                    this.getSprint(this.mdT.spri_id);\n                }\n                this.getTag();\n                $(\"#mdTaskView-\" + this.myTaskId).modal(\"show\");\n            });\n        } else {\n            this._tasks.getTask(this.myTaskId).subscribe(res => {\n                this.mdT = res.data;\n                this.mdT.userSharedTask = res.data.usersShared;\n                this.getProject(this.mdT.proj_id);\n                this.getComments(this.myTaskId);\n                this.getAttachments(this.myTaskId);\n                this.getAdjusted(this.myTaskId);\n                this.getTimeline(this.myTaskId);\n                this.getForm(this.myTaskId);\n                this.getRejected(this.myTaskId);\n                this.getJoin(this.myTaskId);\n                this.getInfoCriteriaTask(this.myTaskId);\n                if (this.mdT.spri_id) {\n                    this.getSprint(this.mdT.spri_id);\n                }\n                this.getTag();\n                $(\"#mdTaskView-\" + this.myTaskId).modal(\"show\");\n            });\n        }\n    }\n    getProject(projid) {\n        this.mdT.project = [];\n        if (projid) {\n            if (this.myDbName && this.myDbName != '') {\n                this._externalrequest.getProjectInfo(projid, this.myDbName).subscribe(res => {\n                    this.mdT.project = res.data;\n                    if (this.mdT.project.proj_description) {\n                        this.mdT.project.proj_description = this.sanitizeHtml(\n                            res.data.proj_description\n                        );\n                    }\n                });\n            } else {\n                this._projects.getprojectInfo(projid).subscribe(res => {\n                    this.mdT.project = res.data;\n                    if (this.mdT.project.proj_description) {\n                        this.mdT.project.proj_description = this.sanitizeHtml(\n                            res.data.proj_description\n                        );\n                    }\n                });\n            }\n        }\n    }\n\n    getForm(task) {\n        this.mdT.form = [];\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getTaskFields(task, this.myDbName).subscribe(res => {\n                this.mdT.form = res.data;\n            });\n        } else {\n            this._tasks.getTaskFields(task).subscribe(res => {\n                this.mdT.form = res.data;\n            });\n        }\n    }\n\n    getSprint(idsprint) {\n        this.mdT.sprint = [];\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getSprint(idsprint, this.myDbName).subscribe(res => {\n                this.mdT.sprint = res.data;\n            });\n        } else {\n            this._sprint.getSprint(idsprint).subscribe(res => {\n                this.mdT.sprint = res.data;\n            });\n        }\n\n    }\n\n    getComments(tk) {\n        this.isLoading = true;\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getComments(tk, this.myDbName).subscribe(res => {\n                this.mdT.comments = res.data;\n                var elem = document.getElementById(\"mdTComments\");\n                var elem2 = document.getElementById(\"taskComments\");\n                if (elem && elem2) {\n                    elem.scrollTop = elem.scrollHeight;\n                    elem2.scrollTop = elem2.scrollHeight;\n                }\n                this.isLoading = false;\n                return res.data;\n            });\n        } else {\n            this._tasks.getComments(tk).subscribe(res => {\n                this.mdT.comments = res.data;\n                var elem = document.getElementById(\"mdTComments\");\n                var elem2 = document.getElementById(\"taskComments\");\n                if (elem && elem2) {\n                    elem.scrollTop = elem.scrollHeight;\n                    elem2.scrollTop = elem2.scrollHeight;\n                }\n                this.isLoading = false;\n                return res.data;\n            });\n        }\n        this.note.note_text = \"\";\n        this.note = { attachments: [] };\n    }\n    \n    validateComments(){\n        return (\n            !this.note.note_text ||\n            this.note.note_text.trim() == \"\" ||\n            !this.note.note_text == \"undefined\"\n        );\n    }\n\n    noteAdd(idtask, type) {\n        this.note.task_id = idtask;  \n        if (\n            this.note.note_text ||\n            this.note.note_text != \"undefined\" ||\n            this.note.note_text != \"\"\n        ) {\n            this.note.note_text = this.note.note_text;\n            this.isLoading = true;\n            if (this.myDbName && this.myDbName != '') {\n                this.note.dbname = this.myDbName;   \n                this._externalrequest.putNote(this.note).subscribe(data => {\n                    this.isLoading = false;\n                    if (data.data != null) {\n                        this.getComments(idtask);\n                        this.getTimeline(idtask);\n                    } else {\n                        this.toastr.warning(\"\", data.message);\n                        $(\".textarea-comments\").val(\"\");\n                    }\n                });\n            } else {\n                this.note.client = this.clientGroup;  \n                this._notes.putNote(this.note).subscribe(data => {\n                    this.note.user_creator = this.mdT.user_creator;\n                    this.isLoading = false;\n                    if (data.data != null) {\n                        this.getComments(idtask);\n                        this.getTimeline(idtask);\n                    } else {\n                        this.toastr.warning(\"\", data.message);\n                        $(\".textarea-comments\").val(\"\");\n                    }\n                });\n            }\n            this.note = { attachments: [] };            \n        }\n    }\n\n    getAttachments(taskid) {\n        this.mdT.attachments = [];\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getAttachments(taskid, this.myDbName).subscribe(res => {\n                this.mdT.attachments = res.data;\n                for (var i = 0; i < this.mdT.attachments.length; i++) {\n                    if (i == 0) {\n                        this.mdT.total_attachments = 1;\n                    } else {\n                        this.mdT.total_attachments++;\n                    }\n                }\n            });\n        } else {\n            this._tasks.getAttachments(taskid).subscribe(res => {\n                this.mdT.attachments = res.data;\n                for (var i = 0; i < this.mdT.attachments.length; i++) {\n                    if (i == 0) {\n                        this.mdT.total_attachments = 1;\n                    } else {\n                        this.mdT.total_attachments++;\n                    }\n                }\n            });\n        }\n\n    }\n\n    getAdjusted(task) {\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getAdjusted(task, this.myDbName).subscribe(res => {\n                this.total_adjusted = [];\n                for (let c of res.data) {\n                    var message = \"\";\n                    var header = \"\";\n                    var points = \"\";\n                    header = c.user_name + \" \" + c.user_lastname;\n                    if (c.taex_points > 0) {\n                        points = \"Added \" + Math.abs(c.taex_points) + \" points\";\n                    } else if (c.taex_points < 0) {\n                        points = \"Removed \" + Math.abs(c.taex_points) + \" points\";\n                    } else {\n                        points = \"0 Points added or removed.\";\n                    }\n                    var delivery = \" Delivery date : \" + c.taex_delivery;\n                    this.total_adjusted.push({\n                        header: header,\n                        message: message,\n                        points: points,\n                        delivery: delivery,\n                        date: c.taex_updated,\n                        reason: c.taex_description,\n                        urlimagen: c.urlimagen\n                    });\n                }\n                this.mdT.total_adjusted = this.total_adjusted;\n            });\n        } else {\n            this._tasks.getAdjusted(task).subscribe(res => {\n                this.total_adjusted = [];\n                for (let c of res.data) {\n                    var message = \"\";\n                    var header = \"\";\n                    var points = \"\";\n                    header = c.user_name + \" \" + c.user_lastname;\n                    if (c.taex_points > 0) {\n                        points = \"Added \" + Math.abs(c.taex_points) + \" points\";\n                    } else if (c.taex_points < 0) {\n                        points = \"Removed \" + Math.abs(c.taex_points) + \" points\";\n                    } else {\n                        points = \"0 Points added or removed.\";\n                    }\n                    var delivery = \" Delivery date : \" + c.taex_delivery;\n                    this.total_adjusted.push({\n                        header: header,\n                        message: message,\n                        points: points,\n                        delivery: delivery,\n                        date: c.taex_updated,\n                        reason: c.taex_description,\n                        urlimagen: c.urlimagen\n                    });\n                }\n                this.mdT.total_adjusted = this.total_adjusted;\n            });\n        }\n    }\n\n    getTimeline(task) {\n        this.mdT.timeline = [];\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getTimelinetk(task, this.myDbName).subscribe(res => {\n                this.mdT.timeline = res.data;\n\n            });\n        } else {\n            this._tasks.getTimelinetk(task).subscribe(res => {\n                this.mdT.timeline = res.data;\n            });\n        }\n\n    }\n\n    getRejected(task) {\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getRejected(task, this.myDbName).subscribe(res => {\n                this.mdT.rejected = res.data;\n            });\n        } else {\n            this._tasks.getRejected(task).subscribe(res => {\n                this.mdT.rejected = res.data;\n            });\n        }\n\n    }\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        var temporal = document.createElement(\"div\");\n        temporal.innerHTML = text;\n        var text = temporal.textContent || temporal.innerText || \"\";\n\n        return text;\n    }\n\n    sanitizeHtml(text) {\n        if (text) {\n            var base64test = /[^A-Za-z0-9\\+\\/\\=]/g;\n            if (!base64test.exec(text)) {\n                // text = this.decode64(text);\n            }\n            text = this._sanitizer.bypassSecurityTrustHtml(text);\n            if (text.changingThisBreaksApplicationSecurity) {\n                text = text.changingThisBreaksApplicationSecurity;\n            }\n            return text;\n        } else {\n            return \"\";\n        }\n    }\n\n    getTag() {\n        this.tagbytask = {};\n        if (this.myDbName && this.myDbName != '') {\n            this._externalrequest.getTagsByTask(this.myTaskId, this.myDbName).subscribe(res => {\n                if (res) {\n                    this.tagbytask = res.data;\n                    this.tasktag = true;\n                }\n            });\n        } else {\n            this._tasks.getTagsByTask(this.myTaskId).subscribe(res => {\n                if (res) {\n                    this.tagbytask = res.data;\n                    this.tasktag = true;\n                }\n            });\n        }\n    }\n\n    onChangeNT(event) {\n        var files = event.srcElement.files;\n        if (!this.note.attachments) {\n            this.note.attachments = [];\n        }\n        if (files[0].size / 1024 / 1024 > 40) {\n            this.toastr.error(\"File size exceeds 40 MB\");\n        } else {\n            this.note.attachments.push(files[0]);\n        }\n    }\n\n    downloadFile(item, event){     \n        var file = item;      \n        var filename = item.name;      \n        var blob = new Blob([file]);\n        var url  = URL.createObjectURL(blob);\n    \n        var element = event.srcElement;\n        $(element).attr({ 'download': filename, 'href': url});  \n    }\n\n    addClassModal() {\n        $('#file-upload' + this.myTaskId).focus();\n        $('div#primerdiv' + this.myTaskId).removeClass('content_modal_taskView');\n        $('div#primerdiv' + this.myTaskId).addClass('content_modal_taskView_adjusted');\n        $('div#segundoDiv' + this.myTaskId).removeClass('body_modal_taskView');\n        $('div#segundoDiv' + this.myTaskId).addClass('body_modal_taskView_adjusted');\n    }\n\n    removeClassModal() {\n        $('div#primerdiv' + this.myTaskId).removeClass('content_modal_taskView_adjusted');\n        $('div#primerdiv' + this.myTaskId).addClass('content_modal_taskView');\n        $('div#segundoDiv' + this.myTaskId).removeClass('body_modal_taskView_adjusted');\n        $('div#segundoDiv' + this.myTaskId).addClass('body_modal_taskView');\n    }\n\n    getJoin(task_id) {\n        this.taskJoin = {};\n        this._tasks.getJoin(task_id).subscribe(res => {\n            this.join = res.data;\n            if (!jQuery.isEmptyObject(res.data)) {\n                this._tasks.getTask(res.data.task_child).subscribe(res => {\n                    if (res.data) {\n                        this.taskJoin = res.data;\n                        this._tasks.getComments(this.taskJoin.task_id).subscribe(res => {\n                            this.commentsTaskJoin.comments = res.data ? res.data : [];\n                        });\n                    }\n                });\n            }\n        });\n    }\n\n    getInfoCriteriaTask(task_id) {\n        this.taskCriteria = [];\n        this._tasks.getInfoTaskCriteria(task_id).subscribe(res => {\n\n            this.taskCriteria = res.data.data;\n\n        });\n    }\n}\n\n\n// WEBPACK FOOTER //\n// ./app/components/taskview/taskview.component.js","module.exports = \"<button type=\\\"button\\\" [attr.id]=\\\"'myTask'+myTaskId\\\" (click)=\\\"showModaltk()\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n    style=\\\"display:none;\\\">\\n</button>\\n<div class=\\\"modal modal-task fade\\\" [attr.id]=\\\"'mdTaskView-'+myTaskId\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n        <div [attr.id]=\\\"'primerdiv'+myTaskId\\\" class=\\\"modal-content content_modal_taskView\\\">\\n            <div class=\\\"modal-header header-project\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"\\n                    (click)=\\\"removeClassModal()\\\">\\n                    <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <div style=\\\"overflow-y: scroll;max-height: 25px;\\\">\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" \\\" + mdT.task_id + \\\" - \\\" +\\n                        mdT.task_subject}}\\n                    </h4>\\n                </div>\\n            </div>\\n            <div [attr.id]=\\\"'segundoDiv'+myTaskId\\\" class=\\\"modal-body body_modal_taskView\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\">\\n                        <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                            <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                                <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                                    id=\\\"tabsTaskview\\\">\\n                                    <li class=\\\"active\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#ptsk{{mdT.task_id}}\\\">Info</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"taskCriteria && taskCriteria.length != 0\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskCriteria-{{mdT.task_id}}\\\">Criteria</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"mdT.attachments && mdT.attachments.length > 0 \\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskAttachments-{{mdT.task_id}}\\\">Attachments</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"mdT.proj_id\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#ptk{{mdT.task_id}}\\\">Project related</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskAdjusted-{{mdT.task_id}}\\\">Adjustments</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskTimeline-{{mdT.task_id}}\\\">Timeline</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskComment-{{mdT.task_id}}\\\">Comments</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"mdT.form && mdT.form.length > 0 \\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskForm-{{mdT.task_id}}\\\">Form</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskSprint-{{mdT.task_id}}\\\">Sprint related</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"join.task_child != undefined && taskJoin != undefined && taskJoin.length != 0\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskRelated-{{mdT.task_id}}\\\">Task Related</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"mdT.para_status == '50'\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#taskRejected-{{mdT.task_id}}\\\" style=\\\"color: red;\\\">\\n                                            <i class=\\\"fa fa-exclamation-circle\\\" aria-hidden=\\\"true\\\"></i> Rejected Reason</a>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"min-height: 390px;\\\">\\n                        <div class=\\\"tab-content\\\">\\n                            <div [attr.id]=\\\"'ptsk'+mdT.task_id\\\" class=\\\"tab-pane fade in active\\\">\\n                                <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;text-align: left;\\\">\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Status</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.status_name }}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_date}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creator</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.creator}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.applicant}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Assigned to</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.asigned}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_delivery}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Points Assigned</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_points}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Points Recorded</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_pointsd}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.prod_name}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Level</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.tklv_description}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Units Assigned</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.unit_points}} {{mdT.unit_desc}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Units Recorded</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.unit_pointsd}} {{mdT.unit_desc}}</p>\\n                                    </div>\\n                                    <div *ngIf=\\\"mdT.userSharedTask && mdT.userSharedTask.length > 0\\\" class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                        <label class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 label-sqlx\\\" style=\\\"margin-left: 0px; padding-left: 0px;\\\">Shared\\n                                            with</label>\\n                                        <p class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3 element_p_sqlx\\\" *ngFor=\\\"let usertk of mdT.userSharedTask\\\"\\n                                            style=\\\"color:rgb(130, 145, 152);margin-left: 0px; padding-left: 0px;\\\">{{usertk.completename}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                        <div class=\\\"col-xs-11 col-md-11 col-lg-11\\\" [innerHTML]=\\\"mdT.task_description\\\"\\n                                            style=\\\"max-height: 358px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                        </div>\\n                                        <div *ngIf=\\\"tasktag == true\\\" class=\\\"col-xs-1 col-md-1 col-lg-1\\\">\\n                                            <div class=\\\"preview-tag-small pull-right\\\" [ngStyle]=\\\"{background:tagbytask.tag_color, position:absolute}\\\"\\n                                                aria-hidden=\\\"true\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"{{tagbytask.tag_description}}\\\">\\n                                                <i class=\\\"{{tagbytask.tag_icon}}\\\"></i>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n\\n                            </div>\\n\\n                            <div id=\\\"taskCriteria-{{mdT.task_id}}\\\" class=\\\"  col-xs-12 col-sm-12 col-md-12 col-lg-12 tab-pane fade\\\"\\n                                style=\\\"height: 665px; padding: 0px;\\\">\\n\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx_taskview\\\">\\n                                        <thead>\\n                                            <tr>\\n                                                <th class=\\\"th_columnField_criteriaTask_taskview\\\">Field</th>\\n                                                <th class=\\\"th_columnDescription_criteriaTask_taskview\\\">Description</th>\\n                                            </tr>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                                <div class=\\\"form-group\\\" style=\\\"margin-top:0px; margin-bottom: 0px; max-height: 621px; overflow-y: scroll;\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx_taskview\\\">\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let criteria of taskCriteria;\\\">\\n                                                <td class=\\\"td_columnField_criteriaTask_taskview\\\">\\n                                                    <label>{{criteria.tkcr_num}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnDescription_criteriaTask_taskview\\\">\\n                                                    <label>{{criteria.tkcr_description}}</label>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskAttachments-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div *ngIf=\\\"!mdT.attachments\\\" class=\\\"row\\\">\\n\\n                                </div>\\n                                <div class=\\\"row\\\" *ngIf=\\\"mdT.attachments && mdT.attachments.length > 0\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"height: 407px;font-size: 14px;\\\">\\n                                        <label>Attachments ({{mdT.total_attachments}})</label>\\n                                        <ul class=\\\"ul_taskAttachments_taskview\\\">\\n                                            <li *ngFor=\\\"let att of mdT.attachments\\\" style=\\\"width:200px;margin:5px;height:225px;\\\"\\n                                                class=\\\"pull-left\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                        <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                        <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                        <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                        <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                        <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                        <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                        <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"sq sq-attach-files\\\"></i>{{ att.tsat_alias }}</a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.tsat_size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'ptk'+mdT.task_id\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                <div *ngIf=\\\"mdT.proj_id || mdT.proj_id != 'undefined'\\\" class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4 elements_info_sqlx\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Project Name</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_subject }}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Project Number</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_id}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_start}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Project Creator</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.creator}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.applicant}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_end}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Progress</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_percentage + \\\"%\\\"}}\\n                                        </p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                        <div *ngIf=\\\"mdT.project.proj_description\\\" class=\\\"col-xs-11 col-md-11 col-lg-11\\\"\\n                                            style=\\\"max-height: 358px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <p>\\n                                                {{escapeHtml(sanitizeHtml(mdT.project.proj_description))}}\\n                                            </p>\\n                                        </div>\\n                                    </div>\\n\\n                                </div>\\n                                <div *ngIf=\\\"!mdT.project\\\" class=\\\"row\\\">\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskAdjusted-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                <div *ngIf=\\\"mdT.total_adjusted\\\" class=\\\"row\\\">\\n                                    <div *ngIf=\\\"mdT.total_adjusted.length > 0\\\" class=\\\"col-xs-12 col-md-12 col-lg-12\\\"\\n                                        style=\\\"padding-bottom: 10px;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Task Adjusted</label>\\n                                    </div>\\n                                    <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"max-height:273px; font-size: 14px;\\\">\\n                                        <ul class=\\\"timeline comment-timeline-tk\\\">\\n                                            <li *ngFor=\\\"let adj of mdT.total_adjusted\\\" style=\\\"margin-top:5px;\\\">\\n                                                <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 30px;width: 30px;\\\">\\n                                                    <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\"\\n                                                        style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                                                </div>\\n                                                <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                    <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;\\\">\\n                                                        <b>{{adj.header}}</b>\\n                                                    </h3>\\n                                                    <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                                        <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                            <div>\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span>{{adj.points}}</span> on {{adj.date}} /\\n                                                                    <span>{{adj.delivery}}</span>\\n                                                                    <br> Reason for adjustment : {{adj.reason}}\\n                                                                </label>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                                <div *ngIf=\\\"!mdT.total_adjusted\\\" class=\\\"row\\\">\\n\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskTimeline-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\" style=\\\"\\n                            padding-right: 15px;\\\">\\n                                <div class=\\\"\\n                                content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\n                                div_taskTimeline_taskView\\\">\\n                                    <ul class=\\\"timeline comment-daily-timeline\\\">\\n                                        <li *ngFor=\\\"let adj of mdT.timeline\\\" style=\\\"margin-top:5px;\\\">\\n                                            <div class=\\\"icon-team-daily-table div_iconTeamDailyTable_taskTimeline\\\">\\n                                                <i class=\\\"fa fa-dot-circle-o user-icon-daily iconUser_taskTimeline_taskView\\\"\\n                                                    aria-hidden=\\\"true\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"icon-team-sprint div_iconWorking_taskTimeline\\\">\\n                                                <i class=\\\"sq sq-working-team user-icon-team iconWorking_taskTimeline_taskView\\\"\\n                                                    aria-hidden=\\\"true\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                <label class=\\\"timeline-header comment-timeline-header titleNameUserType_taskTimeline\\\">\\n                                                    <b>{{adj.creator}}</b>\\n                                                    <span style=\\\"font-weight: normal;\\\">{{\\\" \\\" + adj.tittle}}</span>\\n                                                </label>\\n                                                <div class=\\\"timeline-body timelineBody_taskTimeLine_taskView\\\">\\n                                                    <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                        <div>\\n                                                            <div class=\\\"pull-left col-xs-1 col-md-1 col-lg-1 \\\">\\n                                                                <i class=\\\"{{adj.label}}\\\" [ngStyle]=\\\"adj.type == 'note' ? { 'font-size': '24px' } : adj.type == 'daily' ? { 'font-size': '28px' } : adj.type == 'modification' ? {'font-size' : '28px'} : adj.type == 'rejection' ? {'font-size' : '24px'} : {'font-size' : '24px'} \\\"\\n                                                                    style=\\\"color:#0FB4FF\\\"></i>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'note'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Date:</span>\\n                                                                    {{adj.date}}\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Description:</span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                </label>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'daily'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Date:</span>\\n                                                                    {{adj.date}}\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Description:</span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                    <span *ngIf=\\\"adj.date != ''\\\" class=\\\"titleContent_tiemline\\\">\\n                                                                        <br> {{adj.points}} </span>\\n                                                                    <span *ngIf=\\\"adj.date != ''\\\" class=\\\"titleContent_tiemline\\\">\\n                                                                        <br> {{adj.units}} </span>\\n                                                                </label>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'modification'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Date:</span>\\n                                                                    {{adj.date}}\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Description:</span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                </label>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'rejection'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Date:</span>\\n                                                                    {{adj.date}}\\n                                                                    <br>\\n                                                                    <span class=\\\"titleContent_tiemline\\\">Description:\\n                                                                    </span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                </label>\\n                                                            </div>\\n                                                            <div *ngIf=\\\"adj.type == 'improving'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                                                <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                                                    <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                                                    <br><span class=\\\"titleContent_tiemline\\\">Description:\\n                                                                    </span>\\n                                                                    {{escapeHtml(adj.description)}}\\n                                                                </label>\\n\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                            <!--taskComment-->\\n                            <div [attr.id]=\\\"'taskComment-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div class=\\\"row\\\" style=\\\" margin-right: 15px;\\\">\\n                                    <div class=\\\"box-footer box-comments comments-squadlinx\\\">\\n                                        <div class=\\\"content-comments-users commentsContents_squadlinx\\\">\\n                                            <ul class=\\\"timeline comment-timeline-tk ul_mdTcomments_sqlx\\\">\\n                                                <li class=\\\"li_mdTcomments_sqlx\\\" *ngFor=\\\"let cpm of mdT.comments\\\">\\n                                                    <div class=\\\"icon-team-sprint div_usuarioComment_sqlx\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team icono_usuarioComment_sqlx\\\"\\n                                                            aria-hidden=\\\"true\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <span class=\\\"time\\\">\\n                                                            {{cpm.note_date}}</span>\\n                                                        <h3 class=\\\"timeline-header comment-timeline-header h3_commented_sqlx\\\">\\n                                                            <b class=\\\"name_creator_comment_sqlx\\\">{{cpm.creator + \\\" \\\"}}</b>\\n                                                            <span class=\\\"text_commented_sqlx\\\">Commented</span>\\n                                                        </h3>\\n                                                        <div class=\\\"timeline-body div_fatherComment_sqlx\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div class=\\\"col-xs-12 col-md-12 div_comentUser_sqlx\\\">\\n                                                                    <div class=\\\"col-xs-12 col-md-12 comment-user divDiv_comentUser_sqlx\\\">\\n                                                                        <p class=\\\"comment-user p_comentUser_sqlx\\\">\\n                                                                            <i class=\\\"sq sq-comments icon_textComment_sqlx\\\"\\n                                                                                aria-hidden=\\\"true\\\"></i>\\n                                                                            <span class=\\\"text_comment_squadlinx\\\">{{escapeHtml(cpm.note_text)}}</span>\\n                                                                        </p>\\n                                                                    </div>\\n                                                                    <div *ngIf=\\\"cpm.childs.length > 0\\\" style=\\\"background-color:rgb(238, 242, 244)\\\">\\n                                                                        <div *ngFor=\\\"let chn of cpm.childs\\\" class=\\\"col-xs-12 col-md-12 reply-user\\\"\\n                                                                            style=\\\"padding-top:10px;margin-left:0px; padding-top:0px;background-color:rgb(238, 242, 244);\\\">\\n                                                                            <div class=\\\"pull-right reply-comment\\\" style=\\\"color:rgb(130, 145, 152); background-color:rgb(238, 242, 244)!important; padding-right:0px;\\\">\\n                                                                                <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                                                    <span style=\\\"color: #999;float: right;font-size: 12px; padding-right: 0px;\\\">\\n                                                                                        {{chn.note_date}}</span>\\n                                                                                    <h3 class=\\\"reply-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                                        <b>{{chn.creator}}</b> replied\\n                                                                                    </h3>\\n                                                                                    <p class=\\\"reply-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                                        <i class=\\\"sq sq-comments\\\"\\n                                                                                            aria-hidden=\\\"true\\\" style=\\\"color:rgb(68, 180, 248); font-size: 16px;\\\"></i>\\n                                                                                        {{escapeHtml(chn.note_text)}}\\n                                                                                    </p>\\n                                                                                </div>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                                <div class=\\\"col-xs-12 col-md-12\\\" *ngIf=\\\"cpm.attachments && cpm.attachments.length > 0\\\">\\n                                                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                                                        <li *ngFor=\\\"let att of cpm.attachments\\\" class=\\\"li_attachmentsComments_sqlx\\\">\\n                                                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                                                <span class=\\\"icon_personalizado_sqlx\\\">\\n                                                                                    <i class=\\\"sq sq-documents-related\\\"\\n                                                                                        *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                </span>\\n                                                                            </a>\\n                                                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"attachment_name_sqlx\\\">{{\\n                                                                                \\\" \\\" + att.ntat_name }}</a>\\n                                                                        </li>\\n                                                                    </ul>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer footer_newsComments_sqlx\\\">\\n                                        <a class=\\\"button_leaveComment_sqlx\\\" data-toggle=\\\"collapse\\\" href=\\\"#collapse-{{myTaskId}}\\\" style=\\\"text-decoration: none;\\\">\\n                                            <i class=\\\"sq sq-comments i_leaveComment_sqlx\\\" aria-hidden=\\\"true\\\"></i>\\n                                            Leave a Comment\\n                                        </a>\\n                                        <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                                            <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                                            <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                                        </div>\\n                                        <div [attr.id]=\\\"'collapse-' + myTaskId\\\" class=\\\"panel-collapse collapse panel_newComment_sqlx\\\">\\n                                            <textarea class=\\\"textarea-comments textarea_comments_squadlinx\\\"\\n                                                style=\\\"max-height: 130px;\\\"[(ngModel)]=\\\"note.note_text\\\"></textarea> \\n                                                \\n                                            <div class=\\\"pull-right\\\">\\n                                                <button class=\\\"btn btn-sm btn-sqlx button_publishComment_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"noteAdd(mdT.task_id, 1)\\\" [disabled]=\\\"validateComments()\\\"\\n                                                    data-toggle=\\\"collapse\\\" [attr.data-target]=\\\"'#collapse' + mdT.task_id\\\">Publish\\n                                                </button>\\n                                            </div> \\n                                            <div class=\\\"pull-left\\\">\\n                                                <label [attr.for]=\\\"'file-upload' + mdT.task_id\\\" class=\\\"custom-file-upload\\\"\\n                                                    (click)=\\\"addClassModal()\\\">\\n                                                    <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                                                </label>\\n                                                <input style=\\\"display: none;\\\" [attr.id]=\\\"'file-upload' + mdT.task_id\\\"\\n                                                    type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                                    (change)=\\\"onChangeNT($event)\\\" />\\n                                            </div> \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer\\\" *ngIf=\\\"note.attachments && note.attachments.length > 0\\\"\\n                                        style=\\\"overflow: scroll; max-height: 165px;\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of note.attachments\\\" class=\\\"li_attachmentsComments_newAttachent_sqlx\\\">\\n                                                <a (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <span class=\\\"iconPersonalizado_newAttachment_sqlx\\\">\\n                                                        <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                        <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"sq sq-attach-files\\\"></i>{{ \\\" \\\" + att.name }}\\n                                                    </a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--end taskComment-->\\n                            <div [attr.id]=\\\"'taskForm-'+ mdT.task_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div *ngIf=\\\"!mdT.form\\\" class=\\\"row\\\">\\n\\n                                </div>\\n                                <div *ngIf=\\\"mdT.form && mdT.form.length > 0\\\" class=\\\"row\\\">\\n                                    <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"height: 407px;font-size: 14px;\\\">\\n                                        <div style=\\\"text-align: left;\\\">\\n                                            <span style=\\\"color:rgb(130,145,152);font-weight: bold;\\\">Category:\\n                                                {{mdT.form[0].cate_desc}}</span>\\n                                        </div>\\n                                        <table style=\\\"text-align: center;width: 100%;\\\">\\n                                            <tbody style=\\\"width: 100%;\\\">\\n                                                <tr *ngFor=\\\"let fr of mdT.form\\\" style=\\\"height: 60px;\\\">\\n                                                    <td class=\\\"td_formfield_taskview\\\">\\n                                                        <div class=\\\"div_formfield_taskview\\\">\\n                                                            {{fr.form_field}}\\n                                                        </div>\\n                                                    </td>\\n                                                    <td class=\\\"td_formdata_taskview\\\">\\n                                                        <div class=\\\"div_formdata_taskview\\\" *ngIf=\\\"fr.form_data\\\">\\n                                                            {{fr.form_data}}\\n                                                        </div>\\n                                                        <div class=\\\"div_formdata_taskview2\\\" *ngIf=\\\"fr.form_data == 0\\\">\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div id=\\\"taskRelated-{{mdT.task_id}}\\\" class=\\\"  col-xs-12 col-sm-12 col-md-12 col-lg-12 tab-pane fade\\\"\\n                                style=\\\"height: 490px; padding: 0px;\\\">\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 row column_inform_taskRelated\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_titleTaskRelated_sqlx modal-header modal-header-info-params\\\">\\n                                        <p class=\\\"title_taskRelated_sqlx\\\">{{taskJoin.task_id}} -\\n                                            {{escapeHtml(taskJoin.task_description)}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 modal-body contenedor_allInformationTaskRelated\\\">\\n                                        <div class=\\\" col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Creator</label>\\n                                            <p class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.creator}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Creation\\n                                                Date</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.task_date}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Assigned\\n                                                to</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.asigned}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Delivery\\n                                                Date</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.task_delivery}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Points\\n                                                Assigned</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.task_points}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Points\\n                                                Recorded</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.task_pointsd}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Product</label>\\n                                            <p class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementP_informationTask\\\">{{taskJoin.prod_name}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 contenedor_informationTask_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12 elementLabel_informationTask\\\">Progress\\n                                                <span class=\\\"span_numeProgress_informationTask\\\">{{taskJoin.task_percentage}}%</span></label>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                <div *ngIf=\\\"taskJoin.task_percentage > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 progress-taskRelated-sqlx\\\">\\n                                                    <div class=\\\"info_barraProgress_taskRelated\\\" [ngStyle]=\\\"{ 'width': taskJoin.task_percentage  + '%' }\\\"></div>\\n                                                </div>\\n                                                <div *ngIf=\\\"taskJoin.task_percentage== 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 progress-taskRelated-sqlx\\\">\\n                                                    <div class=\\\"info_barraProgress_ifcero_taskRelated\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 row column_comments_taskRelated\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_titleCommentsTaskRelated_sqlx modal-header modal-header-info-params\\\">\\n                                        <p class=\\\"title_commentsOfTaskRelated_sqlx\\\">Comments</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 box-footer box-comments comments_sectioOfTaskRelate_squadlinx comments_askRelated_Sqlx\\\">\\n                                        <ul class=\\\"timeline comment-timeline-tk ul_commentsSectionTaskRelated_sqlx\\\">\\n                                            <li class=\\\"li_commentsTaskRelated_sqlx \\\" *ngFor=\\\"let comment of commentsTaskJoin.comments\\\">\\n                                                <div class=\\\"icon-team-sprint div_usuarioComment_sqlx\\\">\\n                                                    <i class=\\\"sq sq-working-team user-icon-team icono_usuarioComment_sqlx\\\"\\n                                                        aria-hidden=\\\"true\\\"></i>\\n                                                </div>\\n                                                <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                    <h3 class=\\\"timeline-header comment-timeline-header h3_commented_sqlx\\\">\\n                                                        <b class=\\\"name_creator_comment_sqlx\\\">{{comment.creator + \\\" \\\"}}</b>\\n                                                        <span class=\\\"text_commented_sqlx\\\">Commented</span>\\n                                                    </h3>\\n                                                    <div class=\\\"timeline-body div_fatherCommentTaskRelated_sqlx\\\">\\n                                                        <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_comentUser_sqlx\\\">\\n                                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 comment-user divDiv_comentUser_sqlx\\\">\\n                                                                    <p class=\\\"comment-user p_comentUser_sqlx\\\">\\n                                                                        <i class=\\\"sq sq-comments icon_textComment_sqlx\\\"\\n                                                                            aria-hidden=\\\"true\\\"></i>\\n                                                                        <span class=\\\"text_commentTaskRelated_squadlinx\\\">{{escapeHtml(comment.note_text)}}</span>\\n                                                                    </p>\\n                                                                </div>\\n                                                            </div>\\n                                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 divContenedorAttachments_commentsTaskRelated\\\"\\n                                                                *ngIf=\\\"comment.attachments && comment.attachments.length > 0\\\">\\n                                                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                                                    <li *ngFor=\\\"let att of comment.attachments\\\" class=\\\"li_attachmentsCommentsTaskRelated_sqlx\\\">\\n                                                                        <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                                            <span class=\\\"icon_personalizado_taskRelated_sqlx \\\">\\n                                                                                <i class=\\\"sq sq-documents-related\\\"\\n                                                                                    *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                                                <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                                <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                                                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                                            </span>\\n                                                                        </a>\\n                                                                        <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"attachment_name_taskRelated_sqlx\\\">{{\\n                                                                            \\\" \\\" + att.ntat_name }}</a>\\n                                                                    </li>\\n                                                                </ul>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskSprint-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                                <div *ngIf=\\\"mdT.sprint && mdT.sprint.spri_id != 0\\\" class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\"> Number</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_id}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Date start</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_init}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Date end</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_end}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.grop_name}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Total points</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_points}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.sprint.spri_description}}</p>\\n                                    </div>\\n                                </div>\\n                                <div *ngIf=\\\"!mdT.sprint\\\" class=\\\"row\\\">\\n                                </div>\\n                            </div>\\n                            <div [attr.id]=\\\"'taskRejected-'+mdT.task_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div *ngIf=\\\"!mdT.rejected\\\" class=\\\"row\\\">\\n                                    No reason\\n                                </div>\\n                                <div *ngIf=\\\"mdT.rejected\\\" class=\\\"row\\\">\\n                                    <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                            <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"mdT.rejected.retk_description\\\"\\n                                                style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                                            <label class=\\\"control-label label-sqlx\\\">Rejected by</label>\\n                                            <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.rejected.rejectedby }}</p>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n\\n                <!-- ***** -->\\n\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n                <div [attr.id]=\\\"'collapse-file-'+mdT.task_id\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin:20px 0;\\\">\\n                    <p-fileUpload #form1 name=\\\"fileUpload-Tasks\\\" (onSelect)=\\\"onChangeTask($event,'new')\\\" multiple=\\\"multiple\\\"\\n                        maxFileSize=\\\"8388608\\\" [showUploadButton]=\\\"false\\\" (onRemove)=\\\"onChangeTask($event,'delete')\\\"></p-fileUpload>\\n                    <button class=\\\"btn btn-primary btn-sm\\\" type=\\\"button\\\" (click)=\\\"onUploadAttachment(mdT.task_id, form)\\\"\\n                        (click)=\\\"form1.clear()\\\" [disabled]=\\\"!taskattch.attachments || taskattch.attachments.length==0\\\"\\n                        data-toggle=\\\"collapse\\\" [attr.data-target]=\\\"'#collapse-file-'+ mdT.task_id\\\">Save\\n                    </button>\\n                </div>\\n                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\"\\n                    (click)=\\\"removeClassModal()\\\">Close\\n                </button>\\n            </div>\\n        </div>\\n    </div>\\n</div>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/taskview/taskview.template.html\n// module id = 822\n// module chunks = 0","/*!\n * FullCalendar v3.10.2\n * Docs & License: https://fullcalendar.io/\n * (c) 2019 Adam Shaw\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"moment\"), require(\"jquery\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"moment\", \"jquery\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"FullCalendar\"] = factory(require(\"moment\"), require(\"jquery\"));\n\telse\n\t\troot[\"FullCalendar\"] = factory(root[\"moment\"], root[\"jQuery\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_3__) {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 256);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n\n/***/ }),\n/* 1 */,\n/* 2 */\n/***/ (function(module, exports) {\n\n/*\r\nderived from:\r\nhttps://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js\r\n\nonly include the helpers we need, to keep down filesize\r\n*/\r\nvar extendStatics = Object.setPrototypeOf ||\r\n    ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n    function (d, b) { for (var p in b)\r\n        if (b.hasOwnProperty(p))\r\n            d[p] = b[p]; };\r\nexports.__extends = function (d, b) {\r\n    extendStatics(d, b);\r\n    function __() { this.constructor = d; }\r\n    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n};\r\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\nmodule.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\n/* FullCalendar-specific DOM Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\r\n// and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\r\nfunction compensateScroll(rowEls, scrollbarWidths) {\r\n    if (scrollbarWidths.left) {\r\n        rowEls.css({\r\n            'border-left-width': 1,\r\n            'margin-left': scrollbarWidths.left - 1\r\n        });\r\n    }\r\n    if (scrollbarWidths.right) {\r\n        rowEls.css({\r\n            'border-right-width': 1,\r\n            'margin-right': scrollbarWidths.right - 1\r\n        });\r\n    }\r\n}\r\nexports.compensateScroll = compensateScroll;\r\n// Undoes compensateScroll and restores all borders/margins\r\nfunction uncompensateScroll(rowEls) {\r\n    rowEls.css({\r\n        'margin-left': '',\r\n        'margin-right': '',\r\n        'border-left-width': '',\r\n        'border-right-width': ''\r\n    });\r\n}\r\nexports.uncompensateScroll = uncompensateScroll;\r\n// Make the mouse cursor express that an event is not allowed in the current area\r\nfunction disableCursor() {\r\n    $('body').addClass('fc-not-allowed');\r\n}\r\nexports.disableCursor = disableCursor;\r\n// Returns the mouse cursor to its original look\r\nfunction enableCursor() {\r\n    $('body').removeClass('fc-not-allowed');\r\n}\r\nexports.enableCursor = enableCursor;\r\n// Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\r\n// By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\r\n// any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\r\n// reduces the available height.\r\nfunction distributeHeight(els, availableHeight, shouldRedistribute) {\r\n    // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\r\n    // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\r\n    var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\r\n    var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\r\n    var flexEls = []; // elements that are allowed to expand. array of DOM nodes\r\n    var flexOffsets = []; // amount of vertical space it takes up\r\n    var flexHeights = []; // actual css height\r\n    var usedHeight = 0;\r\n    undistributeHeight(els); // give all elements their natural height\r\n    // find elements that are below the recommended height (expandable).\r\n    // important to query for heights in a single first pass (to avoid reflow oscillation).\r\n    els.each(function (i, el) {\r\n        var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\r\n        var naturalOffset = $(el).outerHeight(true);\r\n        if (naturalOffset < minOffset) {\r\n            flexEls.push(el);\r\n            flexOffsets.push(naturalOffset);\r\n            flexHeights.push($(el).height());\r\n        }\r\n        else {\r\n            // this element stretches past recommended height (non-expandable). mark the space as occupied.\r\n            usedHeight += naturalOffset;\r\n        }\r\n    });\r\n    // readjust the recommended height to only consider the height available to non-maxed-out rows.\r\n    if (shouldRedistribute) {\r\n        availableHeight -= usedHeight;\r\n        minOffset1 = Math.floor(availableHeight / flexEls.length);\r\n        minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\r\n    }\r\n    // assign heights to all expandable elements\r\n    $(flexEls).each(function (i, el) {\r\n        var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\r\n        var naturalOffset = flexOffsets[i];\r\n        var naturalHeight = flexHeights[i];\r\n        var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\r\n        if (naturalOffset < minOffset) { // we check this again because redistribution might have changed things\r\n            $(el).height(newHeight);\r\n        }\r\n    });\r\n}\r\nexports.distributeHeight = distributeHeight;\r\n// Undoes distrubuteHeight, restoring all els to their natural height\r\nfunction undistributeHeight(els) {\r\n    els.height('');\r\n}\r\nexports.undistributeHeight = undistributeHeight;\r\n// Given `els`, a jQuery set of <td> cells, find the cell with the largest natural width and set the widths of all the\r\n// cells to be that width.\r\n// PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\r\nfunction matchCellWidths(els) {\r\n    var maxInnerWidth = 0;\r\n    els.find('> *').each(function (i, innerEl) {\r\n        var innerWidth = $(innerEl).outerWidth();\r\n        if (innerWidth > maxInnerWidth) {\r\n            maxInnerWidth = innerWidth;\r\n        }\r\n    });\r\n    maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\r\n    els.width(maxInnerWidth);\r\n    return maxInnerWidth;\r\n}\r\nexports.matchCellWidths = matchCellWidths;\r\n// Given one element that resides inside another,\r\n// Subtracts the height of the inner element from the outer element.\r\nfunction subtractInnerElHeight(outerEl, innerEl) {\r\n    var both = outerEl.add(innerEl);\r\n    var diff;\r\n    // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\r\n    both.css({\r\n        position: 'relative',\r\n        left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\r\n    });\r\n    diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\r\n    both.css({ position: '', left: '' }); // undo hack\r\n    return diff;\r\n}\r\nexports.subtractInnerElHeight = subtractInnerElHeight;\r\n/* Element Geom Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\r\nfunction getScrollParent(el) {\r\n    var position = el.css('position');\r\n    var scrollParent = el.parents().filter(function () {\r\n        var parent = $(this);\r\n        return (/(auto|scroll)/).test(parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x'));\r\n    }).eq(0);\r\n    return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\r\n}\r\nexports.getScrollParent = getScrollParent;\r\n// Queries the outer bounding area of a jQuery element.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getOuterRect(el, origin) {\r\n    var offset = el.offset();\r\n    var left = offset.left - (origin ? origin.left : 0);\r\n    var top = offset.top - (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el.outerWidth(),\r\n        top: top,\r\n        bottom: top + el.outerHeight()\r\n    };\r\n}\r\nexports.getOuterRect = getOuterRect;\r\n// Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\n// WARNING: given element can't have borders\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getClientRect(el, origin) {\r\n    var offset = el.offset();\r\n    var scrollbarWidths = getScrollbarWidths(el);\r\n    var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\r\n    var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el[0].clientWidth,\r\n        top: top,\r\n        bottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\r\n    };\r\n}\r\nexports.getClientRect = getClientRect;\r\n// Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\r\n// Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\r\n// Origin is optional.\r\nfunction getContentRect(el, origin) {\r\n    var offset = el.offset(); // just outside of border, margin not included\r\n    var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') -\r\n        (origin ? origin.left : 0);\r\n    var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') -\r\n        (origin ? origin.top : 0);\r\n    return {\r\n        left: left,\r\n        right: left + el.width(),\r\n        top: top,\r\n        bottom: top + el.height()\r\n    };\r\n}\r\nexports.getContentRect = getContentRect;\r\n// Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\r\n// WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\r\n// NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\r\nfunction getScrollbarWidths(el) {\r\n    var leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\r\n    var bottomWidth = el[0].offsetHeight - el[0].clientHeight;\r\n    var widths;\r\n    leftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\r\n    bottomWidth = sanitizeScrollbarWidth(bottomWidth);\r\n    widths = { left: 0, right: 0, top: 0, bottom: bottomWidth };\r\n    if (getIsLeftRtlScrollbars() && el.css('direction') === 'rtl') { // is the scrollbar on the left side?\r\n        widths.left = leftRightWidth;\r\n    }\r\n    else {\r\n        widths.right = leftRightWidth;\r\n    }\r\n    return widths;\r\n}\r\nexports.getScrollbarWidths = getScrollbarWidths;\r\n// The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\r\n// retina displays, rounding, and IE11. Massage them into a usable value.\r\nfunction sanitizeScrollbarWidth(width) {\r\n    width = Math.max(0, width); // no negatives\r\n    width = Math.round(width);\r\n    return width;\r\n}\r\n// Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\r\nvar _isLeftRtlScrollbars = null;\r\nfunction getIsLeftRtlScrollbars() {\r\n    if (_isLeftRtlScrollbars === null) {\r\n        _isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\r\n    }\r\n    return _isLeftRtlScrollbars;\r\n}\r\nfunction computeIsLeftRtlScrollbars() {\r\n    var el = $('<div><div></div></div>')\r\n        .css({\r\n        position: 'absolute',\r\n        top: -1000,\r\n        left: 0,\r\n        border: 0,\r\n        padding: 0,\r\n        overflow: 'scroll',\r\n        direction: 'rtl'\r\n    })\r\n        .appendTo('body');\r\n    var innerEl = el.children();\r\n    var res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\r\n    el.remove();\r\n    return res;\r\n}\r\n// Retrieves a jQuery element's computed CSS value as a floating-point number.\r\n// If the queried value is non-numeric (ex: IE can return \"medium\" for border width), will just return zero.\r\nfunction getCssFloat(el, prop) {\r\n    return parseFloat(el.css(prop)) || 0;\r\n}\r\n/* Mouse / Touch Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\r\nfunction isPrimaryMouseButton(ev) {\r\n    return ev.which === 1 && !ev.ctrlKey;\r\n}\r\nexports.isPrimaryMouseButton = isPrimaryMouseButton;\r\nfunction getEvX(ev) {\r\n    var touches = ev.originalEvent.touches;\r\n    // on mobile FF, pageX for touch events is present, but incorrect,\r\n    // so, look at touch coordinates first.\r\n    if (touches && touches.length) {\r\n        return touches[0].pageX;\r\n    }\r\n    return ev.pageX;\r\n}\r\nexports.getEvX = getEvX;\r\nfunction getEvY(ev) {\r\n    var touches = ev.originalEvent.touches;\r\n    // on mobile FF, pageX for touch events is present, but incorrect,\r\n    // so, look at touch coordinates first.\r\n    if (touches && touches.length) {\r\n        return touches[0].pageY;\r\n    }\r\n    return ev.pageY;\r\n}\r\nexports.getEvY = getEvY;\r\nfunction getEvIsTouch(ev) {\r\n    return /^touch/.test(ev.type);\r\n}\r\nexports.getEvIsTouch = getEvIsTouch;\r\nfunction preventSelection(el) {\r\n    el.addClass('fc-unselectable')\r\n        .on('selectstart', preventDefault);\r\n}\r\nexports.preventSelection = preventSelection;\r\nfunction allowSelection(el) {\r\n    el.removeClass('fc-unselectable')\r\n        .off('selectstart', preventDefault);\r\n}\r\nexports.allowSelection = allowSelection;\r\n// Stops a mouse/touch event from doing it's native browser action\r\nfunction preventDefault(ev) {\r\n    ev.preventDefault();\r\n}\r\nexports.preventDefault = preventDefault;\r\n/* General Geometry Utils\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\r\nfunction intersectRects(rect1, rect2) {\r\n    var res = {\r\n        left: Math.max(rect1.left, rect2.left),\r\n        right: Math.min(rect1.right, rect2.right),\r\n        top: Math.max(rect1.top, rect2.top),\r\n        bottom: Math.min(rect1.bottom, rect2.bottom)\r\n    };\r\n    if (res.left < res.right && res.top < res.bottom) {\r\n        return res;\r\n    }\r\n    return false;\r\n}\r\nexports.intersectRects = intersectRects;\r\n// Returns a new point that will have been moved to reside within the given rectangle\r\nfunction constrainPoint(point, rect) {\r\n    return {\r\n        left: Math.min(Math.max(point.left, rect.left), rect.right),\r\n        top: Math.min(Math.max(point.top, rect.top), rect.bottom)\r\n    };\r\n}\r\nexports.constrainPoint = constrainPoint;\r\n// Returns a point that is the center of the given rectangle\r\nfunction getRectCenter(rect) {\r\n    return {\r\n        left: (rect.left + rect.right) / 2,\r\n        top: (rect.top + rect.bottom) / 2\r\n    };\r\n}\r\nexports.getRectCenter = getRectCenter;\r\n// Subtracts point2's coordinates from point1's coordinates, returning a delta\r\nfunction diffPoints(point1, point2) {\r\n    return {\r\n        left: point1.left - point2.left,\r\n        top: point1.top - point2.top\r\n    };\r\n}\r\nexports.diffPoints = diffPoints;\r\n/* Object Ordering by Field\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction parseFieldSpecs(input) {\r\n    var specs = [];\r\n    var tokens = [];\r\n    var i;\r\n    var token;\r\n    if (typeof input === 'string') {\r\n        tokens = input.split(/\\s*,\\s*/);\r\n    }\r\n    else if (typeof input === 'function') {\r\n        tokens = [input];\r\n    }\r\n    else if ($.isArray(input)) {\r\n        tokens = input;\r\n    }\r\n    for (i = 0; i < tokens.length; i++) {\r\n        token = tokens[i];\r\n        if (typeof token === 'string') {\r\n            specs.push(token.charAt(0) === '-' ?\r\n                { field: token.substring(1), order: -1 } :\r\n                { field: token, order: 1 });\r\n        }\r\n        else if (typeof token === 'function') {\r\n            specs.push({ func: token });\r\n        }\r\n    }\r\n    return specs;\r\n}\r\nexports.parseFieldSpecs = parseFieldSpecs;\r\nfunction compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback, obj2fallback) {\r\n    var i;\r\n    var cmp;\r\n    for (i = 0; i < fieldSpecs.length; i++) {\r\n        cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback);\r\n        if (cmp) {\r\n            return cmp;\r\n        }\r\n    }\r\n    return 0;\r\n}\r\nexports.compareByFieldSpecs = compareByFieldSpecs;\r\nfunction compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {\r\n    if (fieldSpec.func) {\r\n        return fieldSpec.func(obj1, obj2);\r\n    }\r\n    var val1 = obj1[fieldSpec.field];\r\n    var val2 = obj2[fieldSpec.field];\r\n    if (val1 == null && obj1fallback) {\r\n        val1 = obj1fallback[fieldSpec.field];\r\n    }\r\n    if (val2 == null && obj2fallback) {\r\n        val2 = obj2fallback[fieldSpec.field];\r\n    }\r\n    return flexibleCompare(val1, val2) * (fieldSpec.order || 1);\r\n}\r\nexports.compareByFieldSpec = compareByFieldSpec;\r\nfunction flexibleCompare(a, b) {\r\n    if (!a && !b) {\r\n        return 0;\r\n    }\r\n    if (b == null) {\r\n        return -1;\r\n    }\r\n    if (a == null) {\r\n        return 1;\r\n    }\r\n    if ($.type(a) === 'string' || $.type(b) === 'string') {\r\n        return String(a).localeCompare(String(b));\r\n    }\r\n    return a - b;\r\n}\r\nexports.flexibleCompare = flexibleCompare;\r\n/* Date Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nexports.dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\r\nexports.unitsDesc = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; // descending\r\n// Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\r\n// Moments will have their timezones normalized.\r\nfunction diffDayTime(a, b) {\r\n    return moment.duration({\r\n        days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\r\n        ms: a.time() - b.time() // time-of-day from day start. disregards timezone\r\n    });\r\n}\r\nexports.diffDayTime = diffDayTime;\r\n// Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\r\nfunction diffDay(a, b) {\r\n    return moment.duration({\r\n        days: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\r\n    });\r\n}\r\nexports.diffDay = diffDay;\r\n// Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\r\nfunction diffByUnit(a, b, unit) {\r\n    return moment.duration(Math.round(a.diff(b, unit, true)), // returnFloat=true\r\n    unit);\r\n}\r\nexports.diffByUnit = diffByUnit;\r\n// Computes the unit name of the largest whole-unit period of time.\r\n// For example, 48 hours will be \"days\" whereas 49 hours will be \"hours\".\r\n// Accepts start/end, a range object, or an original duration object.\r\nfunction computeGreatestUnit(start, end) {\r\n    var i;\r\n    var unit;\r\n    var val;\r\n    for (i = 0; i < exports.unitsDesc.length; i++) {\r\n        unit = exports.unitsDesc[i];\r\n        val = computeRangeAs(unit, start, end);\r\n        if (val >= 1 && isInt(val)) {\r\n            break;\r\n        }\r\n    }\r\n    return unit; // will be \"milliseconds\" if nothing else matches\r\n}\r\nexports.computeGreatestUnit = computeGreatestUnit;\r\n// like computeGreatestUnit, but has special abilities to interpret the source input for clues\r\nfunction computeDurationGreatestUnit(duration, durationInput) {\r\n    var unit = computeGreatestUnit(duration);\r\n    // prevent days:7 from being interpreted as a week\r\n    if (unit === 'week' && typeof durationInput === 'object' && durationInput.days) {\r\n        unit = 'day';\r\n    }\r\n    return unit;\r\n}\r\nexports.computeDurationGreatestUnit = computeDurationGreatestUnit;\r\n// Computes the number of units (like \"hours\") in the given range.\r\n// Range can be a {start,end} object, separate start/end args, or a Duration.\r\n// Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\r\n// of month-diffing logic (which tends to vary from version to version).\r\nfunction computeRangeAs(unit, start, end) {\r\n    if (end != null) { // given start, end\r\n        return end.diff(start, unit, true);\r\n    }\r\n    else if (moment.isDuration(start)) { // given duration\r\n        return start.as(unit);\r\n    }\r\n    else { // given { start, end } range object\r\n        return start.end.diff(start.start, unit, true);\r\n    }\r\n}\r\n// Intelligently divides a range (specified by a start/end params) by a duration\r\nfunction divideRangeByDuration(start, end, dur) {\r\n    var months;\r\n    if (durationHasTime(dur)) {\r\n        return (end - start) / dur;\r\n    }\r\n    months = dur.asMonths();\r\n    if (Math.abs(months) >= 1 && isInt(months)) {\r\n        return end.diff(start, 'months', true) / months;\r\n    }\r\n    return end.diff(start, 'days', true) / dur.asDays();\r\n}\r\nexports.divideRangeByDuration = divideRangeByDuration;\r\n// Intelligently divides one duration by another\r\nfunction divideDurationByDuration(dur1, dur2) {\r\n    var months1;\r\n    var months2;\r\n    if (durationHasTime(dur1) || durationHasTime(dur2)) {\r\n        return dur1 / dur2;\r\n    }\r\n    months1 = dur1.asMonths();\r\n    months2 = dur2.asMonths();\r\n    if (Math.abs(months1) >= 1 && isInt(months1) &&\r\n        Math.abs(months2) >= 1 && isInt(months2)) {\r\n        return months1 / months2;\r\n    }\r\n    return dur1.asDays() / dur2.asDays();\r\n}\r\nexports.divideDurationByDuration = divideDurationByDuration;\r\n// Intelligently multiplies a duration by a number\r\nfunction multiplyDuration(dur, n) {\r\n    var months;\r\n    if (durationHasTime(dur)) {\r\n        return moment.duration(dur * n);\r\n    }\r\n    months = dur.asMonths();\r\n    if (Math.abs(months) >= 1 && isInt(months)) {\r\n        return moment.duration({ months: months * n });\r\n    }\r\n    return moment.duration({ days: dur.asDays() * n });\r\n}\r\nexports.multiplyDuration = multiplyDuration;\r\n// Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\r\nfunction durationHasTime(dur) {\r\n    return Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\r\n}\r\nexports.durationHasTime = durationHasTime;\r\nfunction isNativeDate(input) {\r\n    return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\r\n}\r\nexports.isNativeDate = isNativeDate;\r\n// Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\r\nfunction isTimeString(str) {\r\n    return typeof str === 'string' &&\r\n        /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\r\n}\r\nexports.isTimeString = isTimeString;\r\n/* Logging and Debug\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nfunction log() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var console = window.console;\r\n    if (console && console.log) {\r\n        return console.log.apply(console, args);\r\n    }\r\n}\r\nexports.log = log;\r\nfunction warn() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    var console = window.console;\r\n    if (console && console.warn) {\r\n        return console.warn.apply(console, args);\r\n    }\r\n    else {\r\n        return log.apply(null, args);\r\n    }\r\n}\r\nexports.warn = warn;\r\n/* General Utilities\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar hasOwnPropMethod = {}.hasOwnProperty;\r\n// Merges an array of objects into a single object.\r\n// The second argument allows for an array of property names who's object values will be merged together.\r\nfunction mergeProps(propObjs, complexProps) {\r\n    var dest = {};\r\n    var i;\r\n    var name;\r\n    var complexObjs;\r\n    var j;\r\n    var val;\r\n    var props;\r\n    if (complexProps) {\r\n        for (i = 0; i < complexProps.length; i++) {\r\n            name = complexProps[i];\r\n            complexObjs = [];\r\n            // collect the trailing object values, stopping when a non-object is discovered\r\n            for (j = propObjs.length - 1; j >= 0; j--) {\r\n                val = propObjs[j][name];\r\n                if (typeof val === 'object') {\r\n                    complexObjs.unshift(val);\r\n                }\r\n                else if (val !== undefined) {\r\n                    dest[name] = val; // if there were no objects, this value will be used\r\n                    break;\r\n                }\r\n            }\r\n            // if the trailing values were objects, use the merged value\r\n            if (complexObjs.length) {\r\n                dest[name] = mergeProps(complexObjs);\r\n            }\r\n        }\r\n    }\r\n    // copy values into the destination, going from last to first\r\n    for (i = propObjs.length - 1; i >= 0; i--) {\r\n        props = propObjs[i];\r\n        for (name in props) {\r\n            if (!(name in dest)) { // if already assigned by previous props or complex props, don't reassign\r\n                dest[name] = props[name];\r\n            }\r\n        }\r\n    }\r\n    return dest;\r\n}\r\nexports.mergeProps = mergeProps;\r\nfunction copyOwnProps(src, dest) {\r\n    for (var name_1 in src) {\r\n        if (hasOwnProp(src, name_1)) {\r\n            dest[name_1] = src[name_1];\r\n        }\r\n    }\r\n}\r\nexports.copyOwnProps = copyOwnProps;\r\nfunction hasOwnProp(obj, name) {\r\n    return hasOwnPropMethod.call(obj, name);\r\n}\r\nexports.hasOwnProp = hasOwnProp;\r\nfunction applyAll(functions, thisObj, args) {\r\n    if ($.isFunction(functions)) {\r\n        functions = [functions];\r\n    }\r\n    if (functions) {\r\n        var i = void 0;\r\n        var ret = void 0;\r\n        for (i = 0; i < functions.length; i++) {\r\n            ret = functions[i].apply(thisObj, args) || ret;\r\n        }\r\n        return ret;\r\n    }\r\n}\r\nexports.applyAll = applyAll;\r\nfunction removeMatching(array, testFunc) {\r\n    var removeCnt = 0;\r\n    var i = 0;\r\n    while (i < array.length) {\r\n        if (testFunc(array[i])) { // truthy value means *remove*\r\n            array.splice(i, 1);\r\n            removeCnt++;\r\n        }\r\n        else {\r\n            i++;\r\n        }\r\n    }\r\n    return removeCnt;\r\n}\r\nexports.removeMatching = removeMatching;\r\nfunction removeExact(array, exactVal) {\r\n    var removeCnt = 0;\r\n    var i = 0;\r\n    while (i < array.length) {\r\n        if (array[i] === exactVal) {\r\n            array.splice(i, 1);\r\n            removeCnt++;\r\n        }\r\n        else {\r\n            i++;\r\n        }\r\n    }\r\n    return removeCnt;\r\n}\r\nexports.removeExact = removeExact;\r\nfunction isArraysEqual(a0, a1) {\r\n    var len = a0.length;\r\n    var i;\r\n    if (len == null || len !== a1.length) { // not array? or not same length?\r\n        return false;\r\n    }\r\n    for (i = 0; i < len; i++) {\r\n        if (a0[i] !== a1[i]) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nexports.isArraysEqual = isArraysEqual;\r\nfunction firstDefined() {\r\n    var args = [];\r\n    for (var _i = 0; _i < arguments.length; _i++) {\r\n        args[_i] = arguments[_i];\r\n    }\r\n    for (var i = 0; i < args.length; i++) {\r\n        if (args[i] !== undefined) {\r\n            return args[i];\r\n        }\r\n    }\r\n}\r\nexports.firstDefined = firstDefined;\r\nfunction htmlEscape(s) {\r\n    return (s + '').replace(/&/g, '&amp;')\r\n        .replace(/</g, '&lt;')\r\n        .replace(/>/g, '&gt;')\r\n        .replace(/'/g, '&#039;')\r\n        .replace(/\"/g, '&quot;')\r\n        .replace(/\\n/g, '<br>');\r\n}\r\nexports.htmlEscape = htmlEscape;\r\nfunction stripHtmlEntities(text) {\r\n    return text.replace(/&.*?;/g, '');\r\n}\r\nexports.stripHtmlEntities = stripHtmlEntities;\r\n// Given a hash of CSS properties, returns a string of CSS.\r\n// Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\r\nfunction cssToStr(cssProps) {\r\n    var statements = [];\r\n    $.each(cssProps, function (name, val) {\r\n        if (val != null) {\r\n            statements.push(name + ':' + val);\r\n        }\r\n    });\r\n    return statements.join(';');\r\n}\r\nexports.cssToStr = cssToStr;\r\n// Given an object hash of HTML attribute names to values,\r\n// generates a string that can be injected between < > in HTML\r\nfunction attrsToStr(attrs) {\r\n    var parts = [];\r\n    $.each(attrs, function (name, val) {\r\n        if (val != null) {\r\n            parts.push(name + '=\"' + htmlEscape(val) + '\"');\r\n        }\r\n    });\r\n    return parts.join(' ');\r\n}\r\nexports.attrsToStr = attrsToStr;\r\nfunction capitaliseFirstLetter(str) {\r\n    return str.charAt(0).toUpperCase() + str.slice(1);\r\n}\r\nexports.capitaliseFirstLetter = capitaliseFirstLetter;\r\nfunction compareNumbers(a, b) {\r\n    return a - b;\r\n}\r\nexports.compareNumbers = compareNumbers;\r\nfunction isInt(n) {\r\n    return n % 1 === 0;\r\n}\r\nexports.isInt = isInt;\r\n// Returns a method bound to the given object context.\r\n// Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\r\n// different contexts as identical when binding/unbinding events.\r\nfunction proxy(obj, methodName) {\r\n    var method = obj[methodName];\r\n    return function () {\r\n        return method.apply(obj, arguments);\r\n    };\r\n}\r\nexports.proxy = proxy;\r\n// Returns a function, that, as long as it continues to be invoked, will not\r\n// be triggered. The function will be called after it stops being called for\r\n// N milliseconds. If `immediate` is passed, trigger the function on the\r\n// leading edge, instead of the trailing.\r\n// https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\r\nfunction debounce(func, wait, immediate) {\r\n    if (immediate === void 0) { immediate = false; }\r\n    var timeout;\r\n    var args;\r\n    var context;\r\n    var timestamp;\r\n    var result;\r\n    var later = function () {\r\n        var last = +new Date() - timestamp;\r\n        if (last < wait) {\r\n            timeout = setTimeout(later, wait - last);\r\n        }\r\n        else {\r\n            timeout = null;\r\n            if (!immediate) {\r\n                result = func.apply(context, args);\r\n                context = args = null;\r\n            }\r\n        }\r\n    };\r\n    return function () {\r\n        context = this;\r\n        args = arguments;\r\n        timestamp = +new Date();\r\n        var callNow = immediate && !timeout;\r\n        if (!timeout) {\r\n            timeout = setTimeout(later, wait);\r\n        }\r\n        if (callNow) {\r\n            result = func.apply(context, args);\r\n            context = args = null;\r\n        }\r\n        return result;\r\n    };\r\n}\r\nexports.debounce = debounce;\r\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange = /** @class */ (function () {\r\n    function UnzonedRange(startInput, endInput) {\r\n        // TODO: move these into footprint.\r\n        // Especially, doesn't make sense for null startMs/endMs.\r\n        this.isStart = true;\r\n        this.isEnd = true;\r\n        if (moment.isMoment(startInput)) {\r\n            startInput = startInput.clone().stripZone();\r\n        }\r\n        if (moment.isMoment(endInput)) {\r\n            endInput = endInput.clone().stripZone();\r\n        }\r\n        if (startInput) {\r\n            this.startMs = startInput.valueOf();\r\n        }\r\n        if (endInput) {\r\n            this.endMs = endInput.valueOf();\r\n        }\r\n    }\r\n    /*\r\n    SIDEEFFECT: will mutate eventRanges.\r\n    Will return a new array result.\r\n    Only works for non-open-ended ranges.\r\n    */\r\n    UnzonedRange.invertRanges = function (ranges, constraintRange) {\r\n        var invertedRanges = [];\r\n        var startMs = constraintRange.startMs; // the end of the previous range. the start of the new range\r\n        var i;\r\n        var dateRange;\r\n        // ranges need to be in order. required for our date-walking algorithm\r\n        ranges.sort(compareUnzonedRanges);\r\n        for (i = 0; i < ranges.length; i++) {\r\n            dateRange = ranges[i];\r\n            // add the span of time before the event (if there is any)\r\n            if (dateRange.startMs > startMs) { // compare millisecond time (skip any ambig logic)\r\n                invertedRanges.push(new UnzonedRange(startMs, dateRange.startMs));\r\n            }\r\n            if (dateRange.endMs > startMs) {\r\n                startMs = dateRange.endMs;\r\n            }\r\n        }\r\n        // add the span of time after the last event (if there is any)\r\n        if (startMs < constraintRange.endMs) { // compare millisecond time (skip any ambig logic)\r\n            invertedRanges.push(new UnzonedRange(startMs, constraintRange.endMs));\r\n        }\r\n        return invertedRanges;\r\n    };\r\n    UnzonedRange.prototype.intersect = function (otherRange) {\r\n        var startMs = this.startMs;\r\n        var endMs = this.endMs;\r\n        var newRange = null;\r\n        if (otherRange.startMs != null) {\r\n            if (startMs == null) {\r\n                startMs = otherRange.startMs;\r\n            }\r\n            else {\r\n                startMs = Math.max(startMs, otherRange.startMs);\r\n            }\r\n        }\r\n        if (otherRange.endMs != null) {\r\n            if (endMs == null) {\r\n                endMs = otherRange.endMs;\r\n            }\r\n            else {\r\n                endMs = Math.min(endMs, otherRange.endMs);\r\n            }\r\n        }\r\n        if (startMs == null || endMs == null || startMs < endMs) {\r\n            newRange = new UnzonedRange(startMs, endMs);\r\n            newRange.isStart = this.isStart && startMs === this.startMs;\r\n            newRange.isEnd = this.isEnd && endMs === this.endMs;\r\n        }\r\n        return newRange;\r\n    };\r\n    UnzonedRange.prototype.intersectsWith = function (otherRange) {\r\n        return (this.endMs == null || otherRange.startMs == null || this.endMs > otherRange.startMs) &&\r\n            (this.startMs == null || otherRange.endMs == null || this.startMs < otherRange.endMs);\r\n    };\r\n    UnzonedRange.prototype.containsRange = function (innerRange) {\r\n        return (this.startMs == null || (innerRange.startMs != null && innerRange.startMs >= this.startMs)) &&\r\n            (this.endMs == null || (innerRange.endMs != null && innerRange.endMs <= this.endMs));\r\n    };\r\n    // `date` can be a moment, a Date, or a millisecond time.\r\n    UnzonedRange.prototype.containsDate = function (date) {\r\n        var ms = date.valueOf();\r\n        return (this.startMs == null || ms >= this.startMs) &&\r\n            (this.endMs == null || ms < this.endMs);\r\n    };\r\n    // If the given date is not within the given range, move it inside.\r\n    // (If it's past the end, make it one millisecond before the end).\r\n    // `date` can be a moment, a Date, or a millisecond time.\r\n    // Returns a MS-time.\r\n    UnzonedRange.prototype.constrainDate = function (date) {\r\n        var ms = date.valueOf();\r\n        if (this.startMs != null && ms < this.startMs) {\r\n            ms = this.startMs;\r\n        }\r\n        if (this.endMs != null && ms >= this.endMs) {\r\n            ms = this.endMs - 1;\r\n        }\r\n        return ms;\r\n    };\r\n    UnzonedRange.prototype.equals = function (otherRange) {\r\n        return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;\r\n    };\r\n    UnzonedRange.prototype.clone = function () {\r\n        var range = new UnzonedRange(this.startMs, this.endMs);\r\n        range.isStart = this.isStart;\r\n        range.isEnd = this.isEnd;\r\n        return range;\r\n    };\r\n    // Returns an ambig-zoned moment from startMs.\r\n    // BEWARE: returned moment is not localized.\r\n    // Formatting and start-of-week will be default.\r\n    UnzonedRange.prototype.getStart = function () {\r\n        if (this.startMs != null) {\r\n            return moment_ext_1.default.utc(this.startMs).stripZone();\r\n        }\r\n        return null;\r\n    };\r\n    // Returns an ambig-zoned moment from startMs.\r\n    // BEWARE: returned moment is not localized.\r\n    // Formatting and start-of-week will be default.\r\n    UnzonedRange.prototype.getEnd = function () {\r\n        if (this.endMs != null) {\r\n            return moment_ext_1.default.utc(this.endMs).stripZone();\r\n        }\r\n        return null;\r\n    };\r\n    UnzonedRange.prototype.as = function (unit) {\r\n        return moment.utc(this.endMs).diff(moment.utc(this.startMs), unit, true);\r\n    };\r\n    return UnzonedRange;\r\n}());\r\nexports.default = UnzonedRange;\r\n/*\r\nOnly works for non-open-ended ranges.\r\n*/\r\nfunction compareUnzonedRanges(range1, range2) {\r\n    return range1.startMs - range2.startMs; // earlier ranges go first\r\n}\r\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventSource, _super);\r\n    // can we do away with calendar? at least for the abstract?\r\n    // useful for buildEventDef\r\n    function EventSource(calendar) {\r\n        var _this = _super.call(this) || this;\r\n        _this.calendar = calendar;\r\n        _this.className = [];\r\n        _this.uid = String(EventSource.uuid++);\r\n        return _this;\r\n    }\r\n    /*\r\n    rawInput can be any data type!\r\n    */\r\n    EventSource.parse = function (rawInput, calendar) {\r\n        var source = new this(calendar);\r\n        if (typeof rawInput === 'object') {\r\n            if (source.applyProps(rawInput)) {\r\n                return source;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    EventSource.normalizeId = function (id) {\r\n        if (id) {\r\n            return String(id);\r\n        }\r\n        return null;\r\n    };\r\n    EventSource.prototype.fetch = function (start, end, timezone) {\r\n        // subclasses must implement. must return a promise.\r\n    };\r\n    EventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n        // optional for subclasses to implement\r\n    };\r\n    EventSource.prototype.removeAllEventDefs = function () {\r\n        // optional for subclasses to implement\r\n    };\r\n    /*\r\n    For compairing/matching\r\n    */\r\n    EventSource.prototype.getPrimitive = function (otherSource) {\r\n        // subclasses must implement\r\n    };\r\n    EventSource.prototype.parseEventDefs = function (rawEventDefs) {\r\n        var i;\r\n        var eventDef;\r\n        var eventDefs = [];\r\n        for (i = 0; i < rawEventDefs.length; i++) {\r\n            eventDef = this.parseEventDef(rawEventDefs[i]);\r\n            if (eventDef) {\r\n                eventDefs.push(eventDef);\r\n            }\r\n        }\r\n        return eventDefs;\r\n    };\r\n    EventSource.prototype.parseEventDef = function (rawInput) {\r\n        var calendarTransform = this.calendar.opt('eventDataTransform');\r\n        var sourceTransform = this.eventDataTransform;\r\n        if (calendarTransform) {\r\n            rawInput = calendarTransform(rawInput, this.calendar);\r\n        }\r\n        if (sourceTransform) {\r\n            rawInput = sourceTransform(rawInput, this.calendar);\r\n        }\r\n        return EventDefParser_1.default.parse(rawInput, this);\r\n    };\r\n    EventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        if (rawProps.id != null) {\r\n            this.id = EventSource.normalizeId(rawProps.id);\r\n        }\r\n        // TODO: converge with EventDef\r\n        if ($.isArray(rawProps.className)) {\r\n            this.className = rawProps.className;\r\n        }\r\n        else if (typeof rawProps.className === 'string') {\r\n            this.className = rawProps.className.split(/\\s+/);\r\n        }\r\n        return true;\r\n    };\r\n    EventSource.uuid = 0;\r\n    EventSource.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n    EventSource.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n    return EventSource;\r\n}(Class_1.default));\r\nexports.default = EventSource;\r\nParsableModelMixin_1.default.mixInto(EventSource);\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nEventSource.defineStandardProps({\r\n    // manually process...\r\n    id: false,\r\n    className: false,\r\n    // automatically transfer...\r\n    color: true,\r\n    backgroundColor: true,\r\n    borderColor: true,\r\n    textColor: true,\r\n    editable: true,\r\n    startEditable: true,\r\n    durationEditable: true,\r\n    rendering: true,\r\n    overlap: true,\r\n    constraint: true,\r\n    allDayDefault: true,\r\n    eventDataTransform: true\r\n});\r\n\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUtility methods for easily listening to events on another object,\r\nand more importantly, easily unlistening from them.\r\n\nUSAGE:\r\n  import { default as ListenerMixin, ListenerInterface } from './ListenerMixin'\r\nin class:\r\n  listenTo: ListenerInterface['listenTo']\r\n  stopListeningTo: ListenerInterface['stopListeningTo']\r\nafter class:\r\n  ListenerMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar guid = 0;\r\nvar ListenerMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListenerMixin, _super);\r\n    function ListenerMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\r\n    The `callback` will be called with the `this` context of the object that .listenTo is being called on.\r\n    Can be called:\r\n      .listenTo(other, eventName, callback)\r\n    OR\r\n      .listenTo(other, {\r\n        eventName1: callback1,\r\n        eventName2: callback2\r\n      })\r\n    */\r\n    ListenerMixin.prototype.listenTo = function (other, arg, callback) {\r\n        if (typeof arg === 'object') { // given dictionary of callbacks\r\n            for (var eventName in arg) {\r\n                if (arg.hasOwnProperty(eventName)) {\r\n                    this.listenTo(other, eventName, arg[eventName]);\r\n                }\r\n            }\r\n        }\r\n        else if (typeof arg === 'string') {\r\n            other.on(arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\r\n            $.proxy(callback, this) // always use `this` context\r\n            // the usually-undesired jQuery guid behavior doesn't matter,\r\n            // because we always unbind via namespace\r\n            );\r\n        }\r\n    };\r\n    /*\r\n    Causes the current object to stop listening to events on the `other` object.\r\n    `eventName` is optional. If omitted, will stop listening to ALL events on `other`.\r\n    */\r\n    ListenerMixin.prototype.stopListeningTo = function (other, eventName) {\r\n        other.off((eventName || '') + '.' + this.getListenerNamespace());\r\n    };\r\n    /*\r\n    Returns a string, unique to this object, to be used for event namespacing\r\n    */\r\n    ListenerMixin.prototype.getListenerNamespace = function () {\r\n        if (this.listenerId == null) {\r\n            this.listenerId = guid++;\r\n        }\r\n        return '_listener' + this.listenerId;\r\n    };\r\n    return ListenerMixin;\r\n}(Mixin_1.default));\r\nexports.default = ListenerMixin;\r\n\n\n/***/ }),\n/* 8 */,\n/* 9 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar SingleEventDef = /** @class */ (function (_super) {\r\n    tslib_1.__extends(SingleEventDef, _super);\r\n    function SingleEventDef() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    Will receive start/end params, but will be ignored.\r\n    */\r\n    SingleEventDef.prototype.buildInstances = function () {\r\n        return [this.buildInstance()];\r\n    };\r\n    SingleEventDef.prototype.buildInstance = function () {\r\n        return new EventInstance_1.default(this, // definition\r\n        this.dateProfile);\r\n    };\r\n    SingleEventDef.prototype.isAllDay = function () {\r\n        return this.dateProfile.isAllDay();\r\n    };\r\n    SingleEventDef.prototype.clone = function () {\r\n        var def = _super.prototype.clone.call(this);\r\n        def.dateProfile = this.dateProfile;\r\n        return def;\r\n    };\r\n    SingleEventDef.prototype.rezone = function () {\r\n        var calendar = this.source.calendar;\r\n        var dateProfile = this.dateProfile;\r\n        this.dateProfile = new EventDateProfile_1.default(calendar.moment(dateProfile.start), dateProfile.end ? calendar.moment(dateProfile.end) : null, calendar);\r\n    };\r\n    /*\r\n    NOTE: if super-method fails, should still attempt to apply\r\n    */\r\n    SingleEventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        var dateProfile = EventDateProfile_1.default.parse(rawProps, this.source); // returns null on failure\r\n        if (dateProfile) {\r\n            this.dateProfile = dateProfile;\r\n            // make sure `date` shows up in the legacy event objects as-is\r\n            if (rawProps.date != null) {\r\n                this.miscProps.date = rawProps.date;\r\n            }\r\n            return superSuccess;\r\n        }\r\n        else {\r\n            return false;\r\n        }\r\n    };\r\n    return SingleEventDef;\r\n}(EventDef_1.default));\r\nexports.default = SingleEventDef;\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nSingleEventDef.defineStandardProps({\r\n    start: false,\r\n    date: false,\r\n    end: false,\r\n    allDay: false\r\n});\r\n\n\n/***/ }),\n/* 10 */,\n/* 11 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\r\nvar ambigTimeOrZoneRegex = /^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\r\nvar newMomentProto = moment.fn; // where we will attach our new methods\r\nexports.newMomentProto = newMomentProto;\r\nvar oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\r\nexports.oldMomentProto = oldMomentProto;\r\n// tell momentjs to transfer these properties upon clone\r\nvar momentProperties = moment.momentProperties;\r\nmomentProperties.push('_fullCalendar');\r\nmomentProperties.push('_ambigTime');\r\nmomentProperties.push('_ambigZone');\r\n/*\r\nCall this if you want Moment's original format method to be used\r\n*/\r\nfunction oldMomentFormat(mom, formatStr) {\r\n    return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\r\n}\r\nexports.oldMomentFormat = oldMomentFormat;\r\n// Creating\r\n// -------------------------------------------------------------------------------------------------\r\n// Creates a new moment, similar to the vanilla moment(...) constructor, but with\r\n// extra features (ambiguous time, enhanced formatting). When given an existing moment,\r\n// it will function as a clone (and retain the zone of the moment). Anything else will\r\n// result in a moment in the local zone.\r\nvar momentExt = function () {\r\n    return makeMoment(arguments);\r\n};\r\nexports.default = momentExt;\r\n// Sames as momentExt, but forces the resulting moment to be in the UTC timezone.\r\nmomentExt.utc = function () {\r\n    var mom = makeMoment(arguments, true);\r\n    // Force it into UTC because makeMoment doesn't guarantee it\r\n    // (if given a pre-existing moment for example)\r\n    if (mom.hasTime()) { // don't give ambiguously-timed moments a UTC zone\r\n        mom.utc();\r\n    }\r\n    return mom;\r\n};\r\n// Same as momentExt, but when given an ISO8601 string, the timezone offset is preserved.\r\n// ISO8601 strings with no timezone offset will become ambiguously zoned.\r\nmomentExt.parseZone = function () {\r\n    return makeMoment(arguments, true, true);\r\n};\r\n// Builds an enhanced moment from args. When given an existing moment, it clones. When given a\r\n// native Date, or called with no arguments (the current time), the resulting moment will be local.\r\n// Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\r\n//    parseAsUTC - if there is no zone information, should we parse the input in UTC?\r\n//    parseZone - if there is zone information, should we force the zone of the moment?\r\nfunction makeMoment(args, parseAsUTC, parseZone) {\r\n    if (parseAsUTC === void 0) { parseAsUTC = false; }\r\n    if (parseZone === void 0) { parseZone = false; }\r\n    var input = args[0];\r\n    var isSingleString = args.length === 1 && typeof input === 'string';\r\n    var isAmbigTime;\r\n    var isAmbigZone;\r\n    var ambigMatch;\r\n    var mom;\r\n    if (moment.isMoment(input) || util_1.isNativeDate(input) || input === undefined) {\r\n        mom = moment.apply(null, args);\r\n    }\r\n    else { // \"parsing\" is required\r\n        isAmbigTime = false;\r\n        isAmbigZone = false;\r\n        if (isSingleString) {\r\n            if (ambigDateOfMonthRegex.test(input)) {\r\n                // accept strings like '2014-05', but convert to the first of the month\r\n                input += '-01';\r\n                args = [input]; // for when we pass it on to moment's constructor\r\n                isAmbigTime = true;\r\n                isAmbigZone = true;\r\n            }\r\n            else if ((ambigMatch = ambigTimeOrZoneRegex.exec(input))) {\r\n                isAmbigTime = !ambigMatch[5]; // no time part?\r\n                isAmbigZone = true;\r\n            }\r\n        }\r\n        else if ($.isArray(input)) {\r\n            // arrays have no timezone information, so assume ambiguous zone\r\n            isAmbigZone = true;\r\n        }\r\n        // otherwise, probably a string with a format\r\n        if (parseAsUTC || isAmbigTime) {\r\n            mom = moment.utc.apply(moment, args);\r\n        }\r\n        else {\r\n            mom = moment.apply(null, args);\r\n        }\r\n        if (isAmbigTime) {\r\n            mom._ambigTime = true;\r\n            mom._ambigZone = true; // ambiguous time always means ambiguous zone\r\n        }\r\n        else if (parseZone) { // let's record the inputted zone somehow\r\n            if (isAmbigZone) {\r\n                mom._ambigZone = true;\r\n            }\r\n            else if (isSingleString) {\r\n                mom.utcOffset(input); // if not a valid zone, will assign UTC\r\n            }\r\n        }\r\n    }\r\n    mom._fullCalendar = true; // flag for extended functionality\r\n    return mom;\r\n}\r\n// Week Number\r\n// -------------------------------------------------------------------------------------------------\r\n// Returns the week number, considering the locale's custom week number calcuation\r\n// `weeks` is an alias for `week`\r\nnewMomentProto.week = newMomentProto.weeks = function (input) {\r\n    var weekCalc = this._locale._fullCalendar_weekCalc;\r\n    if (input == null && typeof weekCalc === 'function') { // custom function only works for getter\r\n        return weekCalc(this);\r\n    }\r\n    else if (weekCalc === 'ISO') {\r\n        return oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\r\n    }\r\n    return oldMomentProto.week.apply(this, arguments); // local getter/setter\r\n};\r\n// Time-of-day\r\n// -------------------------------------------------------------------------------------------------\r\n// GETTER\r\n// Returns a Duration with the hours/minutes/seconds/ms values of the moment.\r\n// If the moment has an ambiguous time, a duration of 00:00 will be returned.\r\n//\r\n// SETTER\r\n// You can supply a Duration, a Moment, or a Duration-like argument.\r\n// When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\r\nnewMomentProto.time = function (time) {\r\n    // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\r\n    // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\r\n    if (!this._fullCalendar) {\r\n        return oldMomentProto.time.apply(this, arguments);\r\n    }\r\n    if (time == null) { // getter\r\n        return moment.duration({\r\n            hours: this.hours(),\r\n            minutes: this.minutes(),\r\n            seconds: this.seconds(),\r\n            milliseconds: this.milliseconds()\r\n        });\r\n    }\r\n    else { // setter\r\n        this._ambigTime = false; // mark that the moment now has a time\r\n        if (!moment.isDuration(time) && !moment.isMoment(time)) {\r\n            time = moment.duration(time);\r\n        }\r\n        // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\r\n        // Only for Duration times, not Moment times.\r\n        var dayHours = 0;\r\n        if (moment.isDuration(time)) {\r\n            dayHours = Math.floor(time.asDays()) * 24;\r\n        }\r\n        // We need to set the individual fields.\r\n        // Can't use startOf('day') then add duration. In case of DST at start of day.\r\n        return this.hours(dayHours + time.hours())\r\n            .minutes(time.minutes())\r\n            .seconds(time.seconds())\r\n            .milliseconds(time.milliseconds());\r\n    }\r\n};\r\n// Converts the moment to UTC, stripping out its time-of-day and timezone offset,\r\n// but preserving its YMD. A moment with a stripped time will display no time\r\n// nor timezone offset when .format() is called.\r\nnewMomentProto.stripTime = function () {\r\n    if (!this._ambigTime) {\r\n        this.utc(true); // keepLocalTime=true (for keeping *date* value)\r\n        // set time to zero\r\n        this.set({\r\n            hours: 0,\r\n            minutes: 0,\r\n            seconds: 0,\r\n            ms: 0\r\n        });\r\n        // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n        // which clears all ambig flags.\r\n        this._ambigTime = true;\r\n        this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\r\n    }\r\n    return this; // for chaining\r\n};\r\n// Returns if the moment has a non-ambiguous time (boolean)\r\nnewMomentProto.hasTime = function () {\r\n    return !this._ambigTime;\r\n};\r\n// Timezone\r\n// -------------------------------------------------------------------------------------------------\r\n// Converts the moment to UTC, stripping out its timezone offset, but preserving its\r\n// YMD and time-of-day. A moment with a stripped timezone offset will display no\r\n// timezone offset when .format() is called.\r\nnewMomentProto.stripZone = function () {\r\n    var wasAmbigTime;\r\n    if (!this._ambigZone) {\r\n        wasAmbigTime = this._ambigTime;\r\n        this.utc(true); // keepLocalTime=true (for keeping date and time values)\r\n        // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\r\n        this._ambigTime = wasAmbigTime || false;\r\n        // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\r\n        // which clears the ambig flags.\r\n        this._ambigZone = true;\r\n    }\r\n    return this; // for chaining\r\n};\r\n// Returns of the moment has a non-ambiguous timezone offset (boolean)\r\nnewMomentProto.hasZone = function () {\r\n    return !this._ambigZone;\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.local = function (keepLocalTime) {\r\n    // for when converting from ambiguously-zoned to local,\r\n    // keep the time values when converting from UTC -> local\r\n    oldMomentProto.local.call(this, this._ambigZone || keepLocalTime);\r\n    // ensure non-ambiguous\r\n    // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\r\n    this._ambigTime = false;\r\n    this._ambigZone = false;\r\n    return this; // for chaining\r\n};\r\n// implicitly marks a zone\r\nnewMomentProto.utc = function (keepLocalTime) {\r\n    oldMomentProto.utc.call(this, keepLocalTime);\r\n    // ensure non-ambiguous\r\n    // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\r\n    this._ambigTime = false;\r\n    this._ambigZone = false;\r\n    return this;\r\n};\r\n// implicitly marks a zone (will probably get called upon .utc() and .local())\r\nnewMomentProto.utcOffset = function (tzo) {\r\n    if (tzo != null) { // setter\r\n        // these assignments needs to happen before the original zone method is called.\r\n        // I forget why, something to do with a browser crash.\r\n        this._ambigTime = false;\r\n        this._ambigZone = false;\r\n    }\r\n    return oldMomentProto.utcOffset.apply(this, arguments);\r\n};\r\n\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar ComponentFootprint = /** @class */ (function () {\r\n    function ComponentFootprint(unzonedRange, isAllDay) {\r\n        this.isAllDay = false; // component can choose to ignore this\r\n        this.unzonedRange = unzonedRange;\r\n        this.isAllDay = isAllDay;\r\n    }\r\n    /*\r\n    Only works for non-open-ended ranges.\r\n    */\r\n    ComponentFootprint.prototype.toLegacy = function (calendar) {\r\n        return {\r\n            start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),\r\n            end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)\r\n        };\r\n    };\r\n    return ComponentFootprint;\r\n}());\r\nexports.default = ComponentFootprint;\r\n\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n  import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\r\nin class:\r\n  on: EmitterInterface['on']\r\n  one: EmitterInterface['one']\r\n  off: EmitterInterface['off']\r\n  trigger: EmitterInterface['trigger']\r\n  triggerWith: EmitterInterface['triggerWith']\r\n  hasHandlers: EmitterInterface['hasHandlers']\r\nafter class:\r\n  EmitterMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar EmitterMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EmitterMixin, _super);\r\n    function EmitterMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // jQuery-ification via $(this) allows a non-DOM object to have\r\n    // the same event handling capabilities (including namespaces).\r\n    EmitterMixin.prototype.on = function (types, handler) {\r\n        $(this).on(types, this._prepareIntercept(handler));\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.one = function (types, handler) {\r\n        $(this).one(types, this._prepareIntercept(handler));\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype._prepareIntercept = function (handler) {\r\n        // handlers are always called with an \"event\" object as their first param.\r\n        // sneak the `this` context and arguments into the extra parameter object\r\n        // and forward them on to the original handler.\r\n        var intercept = function (ev, extra) {\r\n            return handler.apply(extra.context || this, extra.args || []);\r\n        };\r\n        // mimick jQuery's internal \"proxy\" system (risky, I know)\r\n        // causing all functions with the same .guid to appear to be the same.\r\n        // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\r\n        // this is needed for calling .off with the original non-intercept handler.\r\n        if (!handler.guid) {\r\n            handler.guid = $.guid++;\r\n        }\r\n        intercept.guid = handler.guid;\r\n        return intercept;\r\n    };\r\n    EmitterMixin.prototype.off = function (types, handler) {\r\n        $(this).off(types, handler);\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.trigger = function (types) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        // pass in \"extra\" info to the intercept\r\n        $(this).triggerHandler(types, { args: args });\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.triggerWith = function (types, context, args) {\r\n        // `triggerHandler` is less reliant on the DOM compared to `trigger`.\r\n        // pass in \"extra\" info to the intercept.\r\n        $(this).triggerHandler(types, { context: context, args: args });\r\n        return this; // for chaining\r\n    };\r\n    EmitterMixin.prototype.hasHandlers = function (type) {\r\n        var hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/\r\n        return hash && hash[type] && hash[type].length > 0;\r\n    };\r\n    return EmitterMixin;\r\n}(Mixin_1.default));\r\nexports.default = EmitterMixin;\r\n\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Interaction = /** @class */ (function () {\r\n    function Interaction(component) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n    }\r\n    Interaction.prototype.opt = function (name) {\r\n        return this.view.opt(name);\r\n    };\r\n    Interaction.prototype.end = function () {\r\n        // subclasses can implement\r\n    };\r\n    return Interaction;\r\n}());\r\nexports.default = Interaction;\r\n\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Mixin = /** @class */ (function () {\r\n    function Mixin() {\r\n    }\r\n    Mixin.mixInto = function (destClass) {\r\n        var _this = this;\r\n        Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n            if (!destClass.prototype[name]) { // if destination class doesn't already define it\r\n                destClass.prototype[name] = _this.prototype[name];\r\n            }\r\n        });\r\n    };\r\n    /*\r\n    will override existing methods\r\n    TODO: remove! not used anymore\r\n    */\r\n    Mixin.mixOver = function (destClass) {\r\n        var _this = this;\r\n        Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\r\n            destClass.prototype[name] = _this.prototype[name];\r\n        });\r\n    };\r\n    return Mixin;\r\n}());\r\nexports.default = Mixin;\r\n\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/*\r\nMeant to be immutable\r\n*/\r\nvar EventDateProfile = /** @class */ (function () {\r\n    function EventDateProfile(start, end, calendar) {\r\n        this.start = start;\r\n        this.end = end || null;\r\n        this.unzonedRange = this.buildUnzonedRange(calendar);\r\n    }\r\n    /*\r\n    Needs an EventSource object\r\n    */\r\n    EventDateProfile.parse = function (rawProps, source) {\r\n        var startInput = rawProps.start || rawProps.date;\r\n        var endInput = rawProps.end;\r\n        if (!startInput) {\r\n            return false;\r\n        }\r\n        var calendar = source.calendar;\r\n        var start = calendar.moment(startInput);\r\n        var end = endInput ? calendar.moment(endInput) : null;\r\n        var forcedAllDay = rawProps.allDay;\r\n        var forceEventDuration = calendar.opt('forceEventDuration');\r\n        if (!start.isValid()) {\r\n            return false;\r\n        }\r\n        if (forcedAllDay == null) {\r\n            forcedAllDay = source.allDayDefault;\r\n            if (forcedAllDay == null) {\r\n                forcedAllDay = calendar.opt('allDayDefault');\r\n            }\r\n        }\r\n        if (forcedAllDay === true) {\r\n            start.stripTime();\r\n            if (end) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        else if (forcedAllDay === false) {\r\n            if (!start.hasTime()) {\r\n                start.time(0);\r\n            }\r\n            if (end && !end.hasTime()) {\r\n                end.time(0);\r\n            }\r\n        }\r\n        if (end && (!end.isValid() || !end.isAfter(start))) {\r\n            end = null;\r\n        }\r\n        if (!end && forceEventDuration) {\r\n            end = calendar.getDefaultEventEnd(!start.hasTime(), start);\r\n        }\r\n        return new EventDateProfile(start, end, calendar);\r\n    };\r\n    EventDateProfile.isStandardProp = function (propName) {\r\n        return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay';\r\n    };\r\n    EventDateProfile.prototype.isAllDay = function () {\r\n        return !(this.start.hasTime() || (this.end && this.end.hasTime()));\r\n    };\r\n    /*\r\n    Needs a Calendar object\r\n    */\r\n    EventDateProfile.prototype.buildUnzonedRange = function (calendar) {\r\n        var startMs = this.start.clone().stripZone().valueOf();\r\n        var endMs = this.getEnd(calendar).stripZone().valueOf();\r\n        return new UnzonedRange_1.default(startMs, endMs);\r\n    };\r\n    /*\r\n    Needs a Calendar object\r\n    */\r\n    EventDateProfile.prototype.getEnd = function (calendar) {\r\n        return this.end ?\r\n            this.end.clone() :\r\n            // derive the end from the start and allDay. compute allDay if necessary\r\n            calendar.getDefaultEventEnd(this.isAllDay(), this.start);\r\n    };\r\n    return EventDateProfile;\r\n}());\r\nexports.default = EventDateProfile;\r\n\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar DragListener_1 = __webpack_require__(59);\r\n/* Tracks mouse movements over a component and raises events about which hit the mouse is over.\r\n------------------------------------------------------------------------------------------------------------------------\r\noptions:\r\n- subjectEl\r\n- subjectCenter\r\n*/\r\nvar HitDragListener = /** @class */ (function (_super) {\r\n    tslib_1.__extends(HitDragListener, _super);\r\n    function HitDragListener(component, options) {\r\n        var _this = _super.call(this, options) || this;\r\n        _this.component = component;\r\n        return _this;\r\n    }\r\n    // Called when drag listening starts (but a real drag has not necessarily began).\r\n    // ev might be undefined if dragging was started manually.\r\n    HitDragListener.prototype.handleInteractionStart = function (ev) {\r\n        var subjectEl = this.subjectEl;\r\n        var subjectRect;\r\n        var origPoint;\r\n        var point;\r\n        this.component.hitsNeeded();\r\n        this.computeScrollBounds(); // for autoscroll\r\n        if (ev) {\r\n            origPoint = { left: util_1.getEvX(ev), top: util_1.getEvY(ev) };\r\n            point = origPoint;\r\n            // constrain the point to bounds of the element being dragged\r\n            if (subjectEl) {\r\n                subjectRect = util_1.getOuterRect(subjectEl); // used for centering as well\r\n                point = util_1.constrainPoint(point, subjectRect);\r\n            }\r\n            this.origHit = this.queryHit(point.left, point.top);\r\n            // treat the center of the subject as the collision point?\r\n            if (subjectEl && this.options.subjectCenter) {\r\n                // only consider the area the subject overlaps the hit. best for large subjects.\r\n                // TODO: skip this if hit didn't supply left/right/top/bottom\r\n                if (this.origHit) {\r\n                    subjectRect = util_1.intersectRects(this.origHit, subjectRect) ||\r\n                        subjectRect; // in case there is no intersection\r\n                }\r\n                point = util_1.getRectCenter(subjectRect);\r\n            }\r\n            this.coordAdjust = util_1.diffPoints(point, origPoint); // point - origPoint\r\n        }\r\n        else {\r\n            this.origHit = null;\r\n            this.coordAdjust = null;\r\n        }\r\n        // call the super-method. do it after origHit has been computed\r\n        _super.prototype.handleInteractionStart.call(this, ev);\r\n    };\r\n    // Called when the actual drag has started\r\n    HitDragListener.prototype.handleDragStart = function (ev) {\r\n        var hit;\r\n        _super.prototype.handleDragStart.call(this, ev);\r\n        // might be different from this.origHit if the min-distance is large\r\n        hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n        // report the initial hit the mouse is over\r\n        // especially important if no min-distance and drag starts immediately\r\n        if (hit) {\r\n            this.handleHitOver(hit);\r\n        }\r\n    };\r\n    // Called when the drag moves\r\n    HitDragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n        var hit;\r\n        _super.prototype.handleDrag.call(this, dx, dy, ev);\r\n        hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\r\n        if (!isHitsEqual(hit, this.hit)) { // a different hit than before?\r\n            if (this.hit) {\r\n                this.handleHitOut();\r\n            }\r\n            if (hit) {\r\n                this.handleHitOver(hit);\r\n            }\r\n        }\r\n    };\r\n    // Called when dragging has been stopped\r\n    HitDragListener.prototype.handleDragEnd = function (ev) {\r\n        this.handleHitDone();\r\n        _super.prototype.handleDragEnd.call(this, ev);\r\n    };\r\n    // Called when a the mouse has just moved over a new hit\r\n    HitDragListener.prototype.handleHitOver = function (hit) {\r\n        var isOrig = isHitsEqual(hit, this.origHit);\r\n        this.hit = hit;\r\n        this.trigger('hitOver', this.hit, isOrig, this.origHit);\r\n    };\r\n    // Called when the mouse has just moved out of a hit\r\n    HitDragListener.prototype.handleHitOut = function () {\r\n        if (this.hit) {\r\n            this.trigger('hitOut', this.hit);\r\n            this.handleHitDone();\r\n            this.hit = null;\r\n        }\r\n    };\r\n    // Called after a hitOut. Also called before a dragStop\r\n    HitDragListener.prototype.handleHitDone = function () {\r\n        if (this.hit) {\r\n            this.trigger('hitDone', this.hit);\r\n        }\r\n    };\r\n    // Called when the interaction ends, whether there was a real drag or not\r\n    HitDragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n        _super.prototype.handleInteractionEnd.call(this, ev, isCancelled);\r\n        this.origHit = null;\r\n        this.hit = null;\r\n        this.component.hitsNotNeeded();\r\n    };\r\n    // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n    HitDragListener.prototype.handleScrollEnd = function () {\r\n        _super.prototype.handleScrollEnd.call(this);\r\n        // hits' absolute positions will be in new places after a user's scroll.\r\n        // HACK for recomputing.\r\n        if (this.isDragging) {\r\n            this.component.releaseHits();\r\n            this.component.prepareHits();\r\n        }\r\n    };\r\n    // Gets the hit underneath the coordinates for the given mouse event\r\n    HitDragListener.prototype.queryHit = function (left, top) {\r\n        if (this.coordAdjust) {\r\n            left += this.coordAdjust.left;\r\n            top += this.coordAdjust.top;\r\n        }\r\n        return this.component.queryHit(left, top);\r\n    };\r\n    return HitDragListener;\r\n}(DragListener_1.default));\r\nexports.default = HitDragListener;\r\n// Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\r\n// Two null values will be considered equal, as two \"out of the component\" states are the same.\r\nfunction isHitsEqual(hit0, hit1) {\r\n    if (!hit0 && !hit1) {\r\n        return true;\r\n    }\r\n    if (hit0 && hit1) {\r\n        return hit0.component === hit1.component &&\r\n            isHitPropsWithin(hit0, hit1) &&\r\n            isHitPropsWithin(hit1, hit0); // ensures all props are identical\r\n    }\r\n    return false;\r\n}\r\n// Returns true if all of subHit's non-standard properties are within superHit\r\nfunction isHitPropsWithin(subHit, superHit) {\r\n    for (var propName in subHit) {\r\n        if (!/^(component|left|right|top|bottom)$/.test(propName)) {\r\n            if (subHit[propName] !== superHit[propName]) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.version = '3.10.2';\r\n// When introducing internal API incompatibilities (where fullcalendar plugins would break),\r\n// the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\r\n// and the below integer should be incremented.\r\nexports.internalApiVersion = 12;\r\nvar util_1 = __webpack_require__(4);\r\nexports.applyAll = util_1.applyAll;\r\nexports.debounce = util_1.debounce;\r\nexports.isInt = util_1.isInt;\r\nexports.htmlEscape = util_1.htmlEscape;\r\nexports.cssToStr = util_1.cssToStr;\r\nexports.proxy = util_1.proxy;\r\nexports.capitaliseFirstLetter = util_1.capitaliseFirstLetter;\r\nexports.getOuterRect = util_1.getOuterRect;\r\nexports.getClientRect = util_1.getClientRect;\r\nexports.getContentRect = util_1.getContentRect;\r\nexports.getScrollbarWidths = util_1.getScrollbarWidths;\r\nexports.preventDefault = util_1.preventDefault;\r\nexports.parseFieldSpecs = util_1.parseFieldSpecs;\r\nexports.compareByFieldSpecs = util_1.compareByFieldSpecs;\r\nexports.compareByFieldSpec = util_1.compareByFieldSpec;\r\nexports.flexibleCompare = util_1.flexibleCompare;\r\nexports.computeGreatestUnit = util_1.computeGreatestUnit;\r\nexports.divideRangeByDuration = util_1.divideRangeByDuration;\r\nexports.divideDurationByDuration = util_1.divideDurationByDuration;\r\nexports.multiplyDuration = util_1.multiplyDuration;\r\nexports.durationHasTime = util_1.durationHasTime;\r\nexports.log = util_1.log;\r\nexports.warn = util_1.warn;\r\nexports.removeExact = util_1.removeExact;\r\nexports.intersectRects = util_1.intersectRects;\r\nexports.allowSelection = util_1.allowSelection;\r\nexports.attrsToStr = util_1.attrsToStr;\r\nexports.compareNumbers = util_1.compareNumbers;\r\nexports.compensateScroll = util_1.compensateScroll;\r\nexports.computeDurationGreatestUnit = util_1.computeDurationGreatestUnit;\r\nexports.constrainPoint = util_1.constrainPoint;\r\nexports.copyOwnProps = util_1.copyOwnProps;\r\nexports.diffByUnit = util_1.diffByUnit;\r\nexports.diffDay = util_1.diffDay;\r\nexports.diffDayTime = util_1.diffDayTime;\r\nexports.diffPoints = util_1.diffPoints;\r\nexports.disableCursor = util_1.disableCursor;\r\nexports.distributeHeight = util_1.distributeHeight;\r\nexports.enableCursor = util_1.enableCursor;\r\nexports.firstDefined = util_1.firstDefined;\r\nexports.getEvIsTouch = util_1.getEvIsTouch;\r\nexports.getEvX = util_1.getEvX;\r\nexports.getEvY = util_1.getEvY;\r\nexports.getRectCenter = util_1.getRectCenter;\r\nexports.getScrollParent = util_1.getScrollParent;\r\nexports.hasOwnProp = util_1.hasOwnProp;\r\nexports.isArraysEqual = util_1.isArraysEqual;\r\nexports.isNativeDate = util_1.isNativeDate;\r\nexports.isPrimaryMouseButton = util_1.isPrimaryMouseButton;\r\nexports.isTimeString = util_1.isTimeString;\r\nexports.matchCellWidths = util_1.matchCellWidths;\r\nexports.mergeProps = util_1.mergeProps;\r\nexports.preventSelection = util_1.preventSelection;\r\nexports.removeMatching = util_1.removeMatching;\r\nexports.stripHtmlEntities = util_1.stripHtmlEntities;\r\nexports.subtractInnerElHeight = util_1.subtractInnerElHeight;\r\nexports.uncompensateScroll = util_1.uncompensateScroll;\r\nexports.undistributeHeight = util_1.undistributeHeight;\r\nexports.dayIDs = util_1.dayIDs;\r\nexports.unitsDesc = util_1.unitsDesc;\r\nvar date_formatting_1 = __webpack_require__(49);\r\nexports.formatDate = date_formatting_1.formatDate;\r\nexports.formatRange = date_formatting_1.formatRange;\r\nexports.queryMostGranularFormatUnit = date_formatting_1.queryMostGranularFormatUnit;\r\nvar locale_1 = __webpack_require__(32);\r\nexports.datepickerLocale = locale_1.datepickerLocale;\r\nexports.locale = locale_1.locale;\r\nexports.getMomentLocaleData = locale_1.getMomentLocaleData;\r\nexports.populateInstanceComputableOptions = locale_1.populateInstanceComputableOptions;\r\nvar util_2 = __webpack_require__(19);\r\nexports.eventDefsToEventInstances = util_2.eventDefsToEventInstances;\r\nexports.eventFootprintToComponentFootprint = util_2.eventFootprintToComponentFootprint;\r\nexports.eventInstanceToEventRange = util_2.eventInstanceToEventRange;\r\nexports.eventInstanceToUnzonedRange = util_2.eventInstanceToUnzonedRange;\r\nexports.eventRangeToEventFootprint = util_2.eventRangeToEventFootprint;\r\nvar moment_ext_1 = __webpack_require__(11);\r\nexports.moment = moment_ext_1.default;\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nexports.EmitterMixin = EmitterMixin_1.default;\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexports.ListenerMixin = ListenerMixin_1.default;\r\nvar Model_1 = __webpack_require__(51);\r\nexports.Model = Model_1.default;\r\nvar Constraints_1 = __webpack_require__(217);\r\nexports.Constraints = Constraints_1.default;\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nexports.DateProfileGenerator = DateProfileGenerator_1.default;\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nexports.UnzonedRange = UnzonedRange_1.default;\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nexports.ComponentFootprint = ComponentFootprint_1.default;\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nexports.BusinessHourGenerator = BusinessHourGenerator_1.default;\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nexports.EventPeriod = EventPeriod_1.default;\r\nvar EventManager_1 = __webpack_require__(220);\r\nexports.EventManager = EventManager_1.default;\r\nvar EventDef_1 = __webpack_require__(37);\r\nexports.EventDef = EventDef_1.default;\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nexports.EventDefMutation = EventDefMutation_1.default;\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nexports.EventDefParser = EventDefParser_1.default;\r\nvar EventInstance_1 = __webpack_require__(53);\r\nexports.EventInstance = EventInstance_1.default;\r\nvar EventRange_1 = __webpack_require__(50);\r\nexports.EventRange = EventRange_1.default;\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.RecurringEventDef = RecurringEventDef_1.default;\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nexports.SingleEventDef = SingleEventDef_1.default;\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nexports.EventDefDateMutation = EventDefDateMutation_1.default;\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nexports.EventDateProfile = EventDateProfile_1.default;\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nexports.EventSourceParser = EventSourceParser_1.default;\r\nvar EventSource_1 = __webpack_require__(6);\r\nexports.EventSource = EventSource_1.default;\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nexports.defineThemeSystem = ThemeRegistry_1.defineThemeSystem;\r\nexports.getThemeSystemClass = ThemeRegistry_1.getThemeSystemClass;\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nexports.EventInstanceGroup = EventInstanceGroup_1.default;\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nexports.ArrayEventSource = ArrayEventSource_1.default;\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nexports.FuncEventSource = FuncEventSource_1.default;\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nexports.JsonFeedEventSource = JsonFeedEventSource_1.default;\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nexports.EventFootprint = EventFootprint_1.default;\r\nvar Class_1 = __webpack_require__(35);\r\nexports.Class = Class_1.default;\r\nvar Mixin_1 = __webpack_require__(15);\r\nexports.Mixin = Mixin_1.default;\r\nvar CoordCache_1 = __webpack_require__(58);\r\nexports.CoordCache = CoordCache_1.default;\r\nvar Iterator_1 = __webpack_require__(225);\r\nexports.Iterator = Iterator_1.default;\r\nvar DragListener_1 = __webpack_require__(59);\r\nexports.DragListener = DragListener_1.default;\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nexports.HitDragListener = HitDragListener_1.default;\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nexports.MouseFollower = MouseFollower_1.default;\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nexports.ParsableModelMixin = ParsableModelMixin_1.default;\r\nvar Popover_1 = __webpack_require__(227);\r\nexports.Popover = Popover_1.default;\r\nvar Promise_1 = __webpack_require__(21);\r\nexports.Promise = Promise_1.default;\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nexports.TaskQueue = TaskQueue_1.default;\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nexports.RenderQueue = RenderQueue_1.default;\r\nvar Scroller_1 = __webpack_require__(41);\r\nexports.Scroller = Scroller_1.default;\r\nvar Theme_1 = __webpack_require__(22);\r\nexports.Theme = Theme_1.default;\r\nvar Component_1 = __webpack_require__(230);\r\nexports.Component = Component_1.default;\r\nvar DateComponent_1 = __webpack_require__(231);\r\nexports.DateComponent = DateComponent_1.default;\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nexports.InteractiveDateComponent = InteractiveDateComponent_1.default;\r\nvar Calendar_1 = __webpack_require__(232);\r\nexports.Calendar = Calendar_1.default;\r\nvar View_1 = __webpack_require__(43);\r\nexports.View = View_1.default;\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nexports.defineView = ViewRegistry_1.defineView;\r\nexports.getViewConfig = ViewRegistry_1.getViewConfig;\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nexports.DayTableMixin = DayTableMixin_1.default;\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nexports.BusinessHourRenderer = BusinessHourRenderer_1.default;\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nexports.EventRenderer = EventRenderer_1.default;\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nexports.FillRenderer = FillRenderer_1.default;\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nexports.HelperRenderer = HelperRenderer_1.default;\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nexports.ExternalDropping = ExternalDropping_1.default;\r\nvar EventResizing_1 = __webpack_require__(234);\r\nexports.EventResizing = EventResizing_1.default;\r\nvar EventPointing_1 = __webpack_require__(64);\r\nexports.EventPointing = EventPointing_1.default;\r\nvar EventDragging_1 = __webpack_require__(235);\r\nexports.EventDragging = EventDragging_1.default;\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nexports.DateSelecting = DateSelecting_1.default;\r\nvar DateClicking_1 = __webpack_require__(237);\r\nexports.DateClicking = DateClicking_1.default;\r\nvar Interaction_1 = __webpack_require__(14);\r\nexports.Interaction = Interaction_1.default;\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nexports.StandardInteractionsMixin = StandardInteractionsMixin_1.default;\r\nvar AgendaView_1 = __webpack_require__(238);\r\nexports.AgendaView = AgendaView_1.default;\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nexports.TimeGrid = TimeGrid_1.default;\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nexports.TimeGridEventRenderer = TimeGridEventRenderer_1.default;\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\nexports.TimeGridFillRenderer = TimeGridFillRenderer_1.default;\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nexports.TimeGridHelperRenderer = TimeGridHelperRenderer_1.default;\r\nvar DayGrid_1 = __webpack_require__(66);\r\nexports.DayGrid = DayGrid_1.default;\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nexports.DayGridEventRenderer = DayGridEventRenderer_1.default;\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\nexports.DayGridFillRenderer = DayGridFillRenderer_1.default;\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nexports.DayGridHelperRenderer = DayGridHelperRenderer_1.default;\r\nvar BasicView_1 = __webpack_require__(67);\r\nexports.BasicView = BasicView_1.default;\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nexports.BasicViewDateProfileGenerator = BasicViewDateProfileGenerator_1.default;\r\nvar MonthView_1 = __webpack_require__(246);\r\nexports.MonthView = MonthView_1.default;\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\nexports.MonthViewDateProfileGenerator = MonthViewDateProfileGenerator_1.default;\r\nvar ListView_1 = __webpack_require__(248);\r\nexports.ListView = ListView_1.default;\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\nexports.ListEventPointing = ListEventPointing_1.default;\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nexports.ListEventRenderer = ListEventRenderer_1.default;\r\n\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange_1 = __webpack_require__(50);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nfunction eventDefsToEventInstances(eventDefs, unzonedRange) {\r\n    var eventInstances = [];\r\n    var i;\r\n    for (i = 0; i < eventDefs.length; i++) {\r\n        eventInstances.push.apply(eventInstances, // append\r\n        eventDefs[i].buildInstances(unzonedRange));\r\n    }\r\n    return eventInstances;\r\n}\r\nexports.eventDefsToEventInstances = eventDefsToEventInstances;\r\nfunction eventInstanceToEventRange(eventInstance) {\r\n    return new EventRange_1.default(eventInstance.dateProfile.unzonedRange, eventInstance.def, eventInstance);\r\n}\r\nexports.eventInstanceToEventRange = eventInstanceToEventRange;\r\nfunction eventRangeToEventFootprint(eventRange) {\r\n    return new EventFootprint_1.default(new ComponentFootprint_1.default(eventRange.unzonedRange, eventRange.eventDef.isAllDay()), eventRange.eventDef, eventRange.eventInstance // might not exist\r\n    );\r\n}\r\nexports.eventRangeToEventFootprint = eventRangeToEventFootprint;\r\nfunction eventInstanceToUnzonedRange(eventInstance) {\r\n    return eventInstance.dateProfile.unzonedRange;\r\n}\r\nexports.eventInstanceToUnzonedRange = eventInstanceToUnzonedRange;\r\nfunction eventFootprintToComponentFootprint(eventFootprint) {\r\n    return eventFootprint.componentFootprint;\r\n}\r\nexports.eventFootprintToComponentFootprint = eventFootprintToComponentFootprint;\r\n\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventRange_1 = __webpack_require__(50);\r\n/*\r\nIt's expected that there will be at least one EventInstance,\r\nOR that an explicitEventDef is assigned.\r\n*/\r\nvar EventInstanceGroup = /** @class */ (function () {\r\n    function EventInstanceGroup(eventInstances) {\r\n        this.eventInstances = eventInstances || [];\r\n    }\r\n    EventInstanceGroup.prototype.getAllEventRanges = function (constraintRange) {\r\n        if (constraintRange) {\r\n            return this.sliceNormalRenderRanges(constraintRange);\r\n        }\r\n        else {\r\n            return this.eventInstances.map(util_1.eventInstanceToEventRange);\r\n        }\r\n    };\r\n    EventInstanceGroup.prototype.sliceRenderRanges = function (constraintRange) {\r\n        if (this.isInverse()) {\r\n            return this.sliceInverseRenderRanges(constraintRange);\r\n        }\r\n        else {\r\n            return this.sliceNormalRenderRanges(constraintRange);\r\n        }\r\n    };\r\n    EventInstanceGroup.prototype.sliceNormalRenderRanges = function (constraintRange) {\r\n        var eventInstances = this.eventInstances;\r\n        var i;\r\n        var eventInstance;\r\n        var slicedRange;\r\n        var slicedEventRanges = [];\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            eventInstance = eventInstances[i];\r\n            slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);\r\n            if (slicedRange) {\r\n                slicedEventRanges.push(new EventRange_1.default(slicedRange, eventInstance.def, eventInstance));\r\n            }\r\n        }\r\n        return slicedEventRanges;\r\n    };\r\n    EventInstanceGroup.prototype.sliceInverseRenderRanges = function (constraintRange) {\r\n        var unzonedRanges = this.eventInstances.map(util_1.eventInstanceToUnzonedRange);\r\n        var ownerDef = this.getEventDef();\r\n        unzonedRanges = UnzonedRange_1.default.invertRanges(unzonedRanges, constraintRange);\r\n        return unzonedRanges.map(function (unzonedRange) {\r\n            return new EventRange_1.default(unzonedRange, ownerDef); // don't give an EventInstance\r\n        });\r\n    };\r\n    EventInstanceGroup.prototype.isInverse = function () {\r\n        return this.getEventDef().hasInverseRendering();\r\n    };\r\n    EventInstanceGroup.prototype.getEventDef = function () {\r\n        return this.explicitEventDef || this.eventInstances[0].def;\r\n    };\r\n    return EventInstanceGroup;\r\n}());\r\nexports.default = EventInstanceGroup;\r\n\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar PromiseStub = {\r\n    construct: function (executor) {\r\n        var deferred = $.Deferred();\r\n        var promise = deferred.promise();\r\n        if (typeof executor === 'function') {\r\n            executor(function (val) {\r\n                deferred.resolve(val);\r\n                attachImmediatelyResolvingThen(promise, val);\r\n            }, function () {\r\n                deferred.reject();\r\n                attachImmediatelyRejectingThen(promise);\r\n            });\r\n        }\r\n        return promise;\r\n    },\r\n    resolve: function (val) {\r\n        var deferred = $.Deferred().resolve(val);\r\n        var promise = deferred.promise();\r\n        attachImmediatelyResolvingThen(promise, val);\r\n        return promise;\r\n    },\r\n    reject: function () {\r\n        var deferred = $.Deferred().reject();\r\n        var promise = deferred.promise();\r\n        attachImmediatelyRejectingThen(promise);\r\n        return promise;\r\n    }\r\n};\r\nexports.default = PromiseStub;\r\nfunction attachImmediatelyResolvingThen(promise, val) {\r\n    promise.then = function (onResolve) {\r\n        if (typeof onResolve === 'function') {\r\n            return PromiseStub.resolve(onResolve(val));\r\n        }\r\n        return promise;\r\n    };\r\n}\r\nfunction attachImmediatelyRejectingThen(promise) {\r\n    promise.then = function (onResolve, onReject) {\r\n        if (typeof onReject === 'function') {\r\n            onReject();\r\n        }\r\n        return promise;\r\n    };\r\n}\r\n\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar Theme = /** @class */ (function () {\r\n    function Theme(optionsManager) {\r\n        this.optionsManager = optionsManager;\r\n        this.processIconOverride();\r\n    }\r\n    Theme.prototype.processIconOverride = function () {\r\n        if (this.iconOverrideOption) {\r\n            this.setIconOverride(this.optionsManager.get(this.iconOverrideOption));\r\n        }\r\n    };\r\n    Theme.prototype.setIconOverride = function (iconOverrideHash) {\r\n        var iconClassesCopy;\r\n        var buttonName;\r\n        if ($.isPlainObject(iconOverrideHash)) {\r\n            iconClassesCopy = $.extend({}, this.iconClasses);\r\n            for (buttonName in iconOverrideHash) {\r\n                iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\r\n            }\r\n            this.iconClasses = iconClassesCopy;\r\n        }\r\n        else if (iconOverrideHash === false) {\r\n            this.iconClasses = {};\r\n        }\r\n    };\r\n    Theme.prototype.applyIconOverridePrefix = function (className) {\r\n        var prefix = this.iconOverridePrefix;\r\n        if (prefix && className.indexOf(prefix) !== 0) { // if not already present\r\n            className = prefix + className;\r\n        }\r\n        return className;\r\n    };\r\n    Theme.prototype.getClass = function (key) {\r\n        return this.classes[key] || '';\r\n    };\r\n    Theme.prototype.getIconClass = function (buttonName) {\r\n        var className = this.iconClasses[buttonName];\r\n        if (className) {\r\n            return this.baseIconClass + ' ' + className;\r\n        }\r\n        return '';\r\n    };\r\n    Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\r\n        var className;\r\n        if (this.iconOverrideCustomButtonOption) {\r\n            className = customButtonProps[this.iconOverrideCustomButtonOption];\r\n            if (className) {\r\n                return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\r\n            }\r\n        }\r\n        return '';\r\n    };\r\n    return Theme;\r\n}());\r\nexports.default = Theme;\r\nTheme.prototype.classes = {};\r\nTheme.prototype.iconClasses = {};\r\nTheme.prototype.baseIconClass = '';\r\nTheme.prototype.iconOverridePrefix = '';\r\n\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nexportHooks.touchMouseIgnoreWait = 500;\r\nvar globalEmitter = null;\r\nvar neededCount = 0;\r\n/*\r\nListens to document and window-level user-interaction events, like touch events and mouse events,\r\nand fires these events as-is to whoever is observing a GlobalEmitter.\r\nBest when used as a singleton via GlobalEmitter.get()\r\n\nNormalizes mouse/touch events. For examples:\r\n- ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\r\n- compensates for various buggy scenarios where a touchend does not fire\r\n*/\r\nvar GlobalEmitter = /** @class */ (function () {\r\n    function GlobalEmitter() {\r\n        this.isTouching = false;\r\n        this.mouseIgnoreDepth = 0;\r\n    }\r\n    // gets the singleton\r\n    GlobalEmitter.get = function () {\r\n        if (!globalEmitter) {\r\n            globalEmitter = new GlobalEmitter();\r\n            globalEmitter.bind();\r\n        }\r\n        return globalEmitter;\r\n    };\r\n    // called when an object knows it will need a GlobalEmitter in the near future.\r\n    GlobalEmitter.needed = function () {\r\n        GlobalEmitter.get(); // ensures globalEmitter\r\n        neededCount++;\r\n    };\r\n    // called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\r\n    GlobalEmitter.unneeded = function () {\r\n        neededCount--;\r\n        if (!neededCount) { // nobody else needs it\r\n            globalEmitter.unbind();\r\n            globalEmitter = null;\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.bind = function () {\r\n        var _this = this;\r\n        this.listenTo($(document), {\r\n            touchstart: this.handleTouchStart,\r\n            touchcancel: this.handleTouchCancel,\r\n            touchend: this.handleTouchEnd,\r\n            mousedown: this.handleMouseDown,\r\n            mousemove: this.handleMouseMove,\r\n            mouseup: this.handleMouseUp,\r\n            click: this.handleClick,\r\n            selectstart: this.handleSelectStart,\r\n            contextmenu: this.handleContextMenu\r\n        });\r\n        // because we need to call preventDefault\r\n        // because https://www.chromestatus.com/features/5093566007214080\r\n        // TODO: investigate performance because this is a global handler\r\n        window.addEventListener('touchmove', this.handleTouchMoveProxy = function (ev) {\r\n            _this.handleTouchMove($.Event(ev));\r\n        }, { passive: false } // allows preventDefault()\r\n        );\r\n        // attach a handler to get called when ANY scroll action happens on the page.\r\n        // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\r\n        // http://stackoverflow.com/a/32954565/96342\r\n        window.addEventListener('scroll', this.handleScrollProxy = function (ev) {\r\n            _this.handleScroll($.Event(ev));\r\n        }, true // useCapture\r\n        );\r\n    };\r\n    GlobalEmitter.prototype.unbind = function () {\r\n        this.stopListeningTo($(document));\r\n        window.removeEventListener('touchmove', this.handleTouchMoveProxy, { passive: false } // use same options as addEventListener\r\n        );\r\n        window.removeEventListener('scroll', this.handleScrollProxy, true // useCapture\r\n        );\r\n    };\r\n    // Touch Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleTouchStart = function (ev) {\r\n        // if a previous touch interaction never ended with a touchend, then implicitly end it,\r\n        // but since a new touch interaction is about to begin, don't start the mouse ignore period.\r\n        this.stopTouch(ev, true); // skipMouseIgnore=true\r\n        this.isTouching = true;\r\n        this.trigger('touchstart', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleTouchMove = function (ev) {\r\n        if (this.isTouching) {\r\n            this.trigger('touchmove', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleTouchCancel = function (ev) {\r\n        if (this.isTouching) {\r\n            this.trigger('touchcancel', ev);\r\n            // Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\r\n            // If touchend fires later, it won't have any effect b/c isTouching will be false.\r\n            this.stopTouch(ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleTouchEnd = function (ev) {\r\n        this.stopTouch(ev);\r\n    };\r\n    // Mouse Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleMouseDown = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mousedown', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleMouseMove = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mousemove', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleMouseUp = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('mouseup', ev);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.handleClick = function (ev) {\r\n        if (!this.shouldIgnoreMouse()) {\r\n            this.trigger('click', ev);\r\n        }\r\n    };\r\n    // Misc Handlers\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.handleSelectStart = function (ev) {\r\n        this.trigger('selectstart', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleContextMenu = function (ev) {\r\n        this.trigger('contextmenu', ev);\r\n    };\r\n    GlobalEmitter.prototype.handleScroll = function (ev) {\r\n        this.trigger('scroll', ev);\r\n    };\r\n    // Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    GlobalEmitter.prototype.stopTouch = function (ev, skipMouseIgnore) {\r\n        if (skipMouseIgnore === void 0) { skipMouseIgnore = false; }\r\n        if (this.isTouching) {\r\n            this.isTouching = false;\r\n            this.trigger('touchend', ev);\r\n            if (!skipMouseIgnore) {\r\n                this.startTouchMouseIgnore();\r\n            }\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.startTouchMouseIgnore = function () {\r\n        var _this = this;\r\n        var wait = exportHooks.touchMouseIgnoreWait;\r\n        if (wait) {\r\n            this.mouseIgnoreDepth++;\r\n            setTimeout(function () {\r\n                _this.mouseIgnoreDepth--;\r\n            }, wait);\r\n        }\r\n    };\r\n    GlobalEmitter.prototype.shouldIgnoreMouse = function () {\r\n        return this.isTouching || Boolean(this.mouseIgnoreDepth);\r\n    };\r\n    return GlobalEmitter;\r\n}());\r\nexports.default = GlobalEmitter;\r\nListenerMixin_1.default.mixInto(GlobalEmitter);\r\nEmitterMixin_1.default.mixInto(GlobalEmitter);\r\n\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar exportHooks = __webpack_require__(18);\r\nexports.viewHash = {};\r\nexportHooks.views = exports.viewHash;\r\nfunction defineView(viewName, viewConfig) {\r\n    exports.viewHash[viewName] = viewConfig;\r\n}\r\nexports.defineView = defineView;\r\nfunction getViewConfig(viewName) {\r\n    return exports.viewHash[viewName];\r\n}\r\nexports.getViewConfig = getViewConfig;\r\n\n\n/***/ }),\n/* 25 */,\n/* 26 */,\n/* 27 */,\n/* 28 */,\n/* 29 */,\n/* 30 */,\n/* 31 */,\n/* 32 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar options_1 = __webpack_require__(33);\r\nvar util_1 = __webpack_require__(4);\r\nexports.localeOptionHash = {};\r\nexportHooks.locales = exports.localeOptionHash;\r\n// NOTE: can't guarantee any of these computations will run because not every locale has datepicker\r\n// configs, so make sure there are English fallbacks for these in the defaults file.\r\nvar dpComputableOptions = {\r\n    buttonText: function (dpOptions) {\r\n        return {\r\n            // the translations sometimes wrongly contain HTML entities\r\n            prev: util_1.stripHtmlEntities(dpOptions.prevText),\r\n            next: util_1.stripHtmlEntities(dpOptions.nextText),\r\n            today: util_1.stripHtmlEntities(dpOptions.currentText)\r\n        };\r\n    },\r\n    // Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\r\n    monthYearFormat: function (dpOptions) {\r\n        return dpOptions.showMonthAfterYear ?\r\n            'YYYY[' + dpOptions.yearSuffix + '] MMMM' :\r\n            'MMMM YYYY[' + dpOptions.yearSuffix + ']';\r\n    }\r\n};\r\nvar momComputableOptions = {\r\n    // Produces format strings like \"ddd M/D\" -> \"Fri 9/15\"\r\n    dayOfMonthFormat: function (momOptions, fcOptions) {\r\n        var format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\r\n        // strip the year off the edge, as well as other misc non-whitespace chars\r\n        format = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\r\n        if (fcOptions.isRTL) {\r\n            format += ' ddd'; // for RTL, add day-of-week to end\r\n        }\r\n        else {\r\n            format = 'ddd ' + format; // for LTR, add day-of-week to beginning\r\n        }\r\n        return format;\r\n    },\r\n    // Produces format strings like \"h:mma\" -> \"6:00pm\"\r\n    mediumTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h(:mm)a\" -> \"6pm\" / \"6:30pm\"\r\n    smallTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '(:mm)')\r\n            .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h(:mm)t\" -> \"6p\" / \"6:30p\"\r\n    extraSmallTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '(:mm)')\r\n            .replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"ha\" / \"H\" -> \"6pm\" / \"18\"\r\n    hourFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(':mm', '')\r\n            .replace(/(\\Wmm)$/, '') // like above, but for foreign locales\r\n            .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\r\n    },\r\n    // Produces format strings like \"h:mm\" -> \"6:30\" (with no AM/PM)\r\n    noMeridiemTimeFormat: function (momOptions) {\r\n        return momOptions.longDateFormat('LT')\r\n            .replace(/\\s*a$/i, ''); // remove trailing AM/PM\r\n    }\r\n};\r\n// options that should be computed off live calendar options (considers override options)\r\n// TODO: best place for this? related to locale?\r\n// TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\r\nvar instanceComputableOptions = {\r\n    // Produces format strings for results like \"Mo 16\"\r\n    smallDayDateFormat: function (options) {\r\n        return options.isRTL ?\r\n            'D dd' :\r\n            'dd D';\r\n    },\r\n    // Produces format strings for results like \"Wk 5\"\r\n    weekFormat: function (options) {\r\n        return options.isRTL ?\r\n            'w[ ' + options.weekNumberTitle + ']' :\r\n            '[' + options.weekNumberTitle + ' ]w';\r\n    },\r\n    // Produces format strings for results like \"Wk5\"\r\n    smallWeekFormat: function (options) {\r\n        return options.isRTL ?\r\n            'w[' + options.weekNumberTitle + ']' :\r\n            '[' + options.weekNumberTitle + ']w';\r\n    }\r\n};\r\n// TODO: make these computable properties in optionsManager\r\nfunction populateInstanceComputableOptions(options) {\r\n    $.each(instanceComputableOptions, function (name, func) {\r\n        if (options[name] == null) {\r\n            options[name] = func(options);\r\n        }\r\n    });\r\n}\r\nexports.populateInstanceComputableOptions = populateInstanceComputableOptions;\r\n// Initialize jQuery UI datepicker translations while using some of the translations\r\n// Will set this as the default locales for datepicker.\r\nfunction datepickerLocale(localeCode, dpLocaleCode, dpOptions) {\r\n    // get the FullCalendar internal option hash for this locale. create if necessary\r\n    var fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n    // transfer some simple options from datepicker to fc\r\n    fcOptions.isRTL = dpOptions.isRTL;\r\n    fcOptions.weekNumberTitle = dpOptions.weekHeader;\r\n    // compute some more complex options from datepicker\r\n    $.each(dpComputableOptions, function (name, func) {\r\n        fcOptions[name] = func(dpOptions);\r\n    });\r\n    var jqDatePicker = $.datepicker;\r\n    // is jQuery UI Datepicker is on the page?\r\n    if (jqDatePicker) {\r\n        // Register the locale data.\r\n        // FullCalendar and MomentJS use locale codes like \"pt-br\" but Datepicker\r\n        // does it like \"pt-BR\" or if it doesn't have the locale, maybe just \"pt\".\r\n        // Make an alias so the locale can be referenced either way.\r\n        jqDatePicker.regional[dpLocaleCode] =\r\n            jqDatePicker.regional[localeCode] = // alias\r\n                dpOptions;\r\n        // Alias 'en' to the default locale data. Do this every time.\r\n        jqDatePicker.regional.en = jqDatePicker.regional[''];\r\n        // Set as Datepicker's global defaults.\r\n        jqDatePicker.setDefaults(dpOptions);\r\n    }\r\n}\r\nexports.datepickerLocale = datepickerLocale;\r\n// Sets FullCalendar-specific translations. Will set the locales as the global default.\r\nfunction locale(localeCode, newFcOptions) {\r\n    var fcOptions;\r\n    var momOptions;\r\n    // get the FullCalendar internal option hash for this locale. create if necessary\r\n    fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {});\r\n    // provided new options for this locales? merge them in\r\n    if (newFcOptions) {\r\n        fcOptions = exports.localeOptionHash[localeCode] = options_1.mergeOptions([fcOptions, newFcOptions]);\r\n    }\r\n    // compute locale options that weren't defined.\r\n    // always do this. newFcOptions can be undefined when initializing from i18n file,\r\n    // so no way to tell if this is an initialization or a default-setting.\r\n    momOptions = getMomentLocaleData(localeCode); // will fall back to en\r\n    $.each(momComputableOptions, function (name, func) {\r\n        if (fcOptions[name] == null) {\r\n            fcOptions[name] = (func)(momOptions, fcOptions);\r\n        }\r\n    });\r\n    // set it as the default locale for FullCalendar\r\n    options_1.globalDefaults.locale = localeCode;\r\n}\r\nexports.locale = locale;\r\n// Returns moment's internal locale data. If doesn't exist, returns English.\r\nfunction getMomentLocaleData(localeCode) {\r\n    return moment.localeData(localeCode) || moment.localeData('en');\r\n}\r\nexports.getMomentLocaleData = getMomentLocaleData;\r\n// Initialize English by forcing computation of moment-derived options.\r\n// Also, sets it as the default.\r\nlocale('en', options_1.englishDefaults);\r\n\n\n/***/ }),\n/* 33 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nexports.globalDefaults = {\r\n    titleRangeSeparator: ' \\u2013 ',\r\n    monthYearFormat: 'MMMM YYYY',\r\n    defaultTimedEventDuration: '02:00:00',\r\n    defaultAllDayEventDuration: { days: 1 },\r\n    forceEventDuration: false,\r\n    nextDayThreshold: '09:00:00',\r\n    // display\r\n    columnHeader: true,\r\n    defaultView: 'month',\r\n    aspectRatio: 1.35,\r\n    header: {\r\n        left: 'title',\r\n        center: '',\r\n        right: 'today prev,next'\r\n    },\r\n    weekends: true,\r\n    weekNumbers: false,\r\n    weekNumberTitle: 'W',\r\n    weekNumberCalculation: 'local',\r\n    // editable: false,\r\n    // nowIndicator: false,\r\n    scrollTime: '06:00:00',\r\n    minTime: '00:00:00',\r\n    maxTime: '24:00:00',\r\n    showNonCurrentDates: true,\r\n    // event ajax\r\n    lazyFetching: true,\r\n    startParam: 'start',\r\n    endParam: 'end',\r\n    timezoneParam: 'timezone',\r\n    timezone: false,\r\n    // allDayDefault: undefined,\r\n    // locale\r\n    locale: null,\r\n    isRTL: false,\r\n    buttonText: {\r\n        prev: 'prev',\r\n        next: 'next',\r\n        prevYear: 'prev year',\r\n        nextYear: 'next year',\r\n        year: 'year',\r\n        today: 'today',\r\n        month: 'month',\r\n        week: 'week',\r\n        day: 'day'\r\n    },\r\n    // buttonIcons: null,\r\n    allDayText: 'all-day',\r\n    // allows setting a min-height to the event segment to prevent short events overlapping each other\r\n    agendaEventMinHeight: 0,\r\n    // jquery-ui theming\r\n    theme: false,\r\n    // themeButtonIcons: null,\r\n    // eventResizableFromStart: false,\r\n    dragOpacity: .75,\r\n    dragRevertDuration: 500,\r\n    dragScroll: true,\r\n    // selectable: false,\r\n    unselectAuto: true,\r\n    // selectMinDistance: 0,\r\n    dropAccept: '*',\r\n    eventOrder: 'title',\r\n    // eventRenderWait: null,\r\n    eventLimit: false,\r\n    eventLimitText: 'more',\r\n    eventLimitClick: 'popover',\r\n    dayPopoverFormat: 'LL',\r\n    handleWindowResize: true,\r\n    windowResizeDelay: 100,\r\n    longPressDelay: 1000\r\n};\r\nexports.englishDefaults = {\r\n    dayPopoverFormat: 'dddd, MMMM D'\r\n};\r\nexports.rtlDefaults = {\r\n    header: {\r\n        left: 'next,prev today',\r\n        center: '',\r\n        right: 'title'\r\n    },\r\n    buttonIcons: {\r\n        prev: 'right-single-arrow',\r\n        next: 'left-single-arrow',\r\n        prevYear: 'right-double-arrow',\r\n        nextYear: 'left-double-arrow'\r\n    },\r\n    themeButtonIcons: {\r\n        prev: 'circle-triangle-e',\r\n        next: 'circle-triangle-w',\r\n        nextYear: 'seek-prev',\r\n        prevYear: 'seek-next'\r\n    }\r\n};\r\nvar complexOptions = [\r\n    'header',\r\n    'footer',\r\n    'buttonText',\r\n    'buttonIcons',\r\n    'themeButtonIcons'\r\n];\r\n// Merges an array of option objects into a single object\r\nfunction mergeOptions(optionObjs) {\r\n    return util_1.mergeProps(optionObjs, complexOptions);\r\n}\r\nexports.mergeOptions = mergeOptions;\r\n\n\n/***/ }),\n/* 34 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventFootprint = /** @class */ (function () {\r\n    function EventFootprint(componentFootprint, eventDef, eventInstance) {\r\n        this.componentFootprint = componentFootprint;\r\n        this.eventDef = eventDef;\r\n        if (eventInstance) {\r\n            this.eventInstance = eventInstance;\r\n        }\r\n    }\r\n    EventFootprint.prototype.getEventLegacy = function () {\r\n        return (this.eventInstance || this.eventDef).toLegacy();\r\n    };\r\n    return EventFootprint;\r\n}());\r\nexports.default = EventFootprint;\r\n\n\n/***/ }),\n/* 35 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\n// Class that all other classes will inherit from\r\nvar Class = /** @class */ (function () {\r\n    function Class() {\r\n    }\r\n    // Called on a class to create a subclass.\r\n    // LIMITATION: cannot provide a constructor!\r\n    Class.extend = function (members) {\r\n        var SubClass = /** @class */ (function (_super) {\r\n            tslib_1.__extends(SubClass, _super);\r\n            function SubClass() {\r\n                return _super !== null && _super.apply(this, arguments) || this;\r\n            }\r\n            return SubClass;\r\n        }(this));\r\n        util_1.copyOwnProps(members, SubClass.prototype);\r\n        return SubClass;\r\n    };\r\n    // Adds new member variables/methods to the class's prototype.\r\n    // Can be called with another class, or a plain object hash containing new members.\r\n    Class.mixin = function (members) {\r\n        util_1.copyOwnProps(members, this.prototype);\r\n    };\r\n    return Class;\r\n}());\r\nexports.default = Class;\r\n\n\n/***/ }),\n/* 36 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nexports.default = {\r\n    parse: function (eventInput, source) {\r\n        if (util_1.isTimeString(eventInput.start) || moment.isDuration(eventInput.start) ||\r\n            util_1.isTimeString(eventInput.end) || moment.isDuration(eventInput.end)) {\r\n            return RecurringEventDef_1.default.parse(eventInput, source);\r\n        }\r\n        else {\r\n            return SingleEventDef_1.default.parse(eventInput, source);\r\n        }\r\n    }\r\n};\r\n\n\n/***/ }),\n/* 37 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar ParsableModelMixin_1 = __webpack_require__(52);\r\nvar EventDef = /** @class */ (function () {\r\n    function EventDef(source) {\r\n        this.source = source;\r\n        this.className = [];\r\n        this.miscProps = {};\r\n    }\r\n    EventDef.parse = function (rawInput, source) {\r\n        var def = new this(source);\r\n        if (def.applyProps(rawInput)) {\r\n            return def;\r\n        }\r\n        return false;\r\n    };\r\n    EventDef.normalizeId = function (id) {\r\n        return String(id);\r\n    };\r\n    EventDef.generateId = function () {\r\n        return '_fc' + (EventDef.uuid++);\r\n    };\r\n    EventDef.prototype.clone = function () {\r\n        var copy = new this.constructor(this.source);\r\n        copy.id = this.id;\r\n        copy.rawId = this.rawId;\r\n        copy.uid = this.uid; // not really unique anymore :(\r\n        EventDef.copyVerbatimStandardProps(this, copy);\r\n        copy.className = this.className.slice(); // copy\r\n        copy.miscProps = $.extend({}, this.miscProps);\r\n        return copy;\r\n    };\r\n    EventDef.prototype.hasInverseRendering = function () {\r\n        return this.getRendering() === 'inverse-background';\r\n    };\r\n    EventDef.prototype.hasBgRendering = function () {\r\n        var rendering = this.getRendering();\r\n        return rendering === 'inverse-background' || rendering === 'background';\r\n    };\r\n    EventDef.prototype.getRendering = function () {\r\n        if (this.rendering != null) {\r\n            return this.rendering;\r\n        }\r\n        return this.source.rendering;\r\n    };\r\n    EventDef.prototype.getConstraint = function () {\r\n        if (this.constraint != null) {\r\n            return this.constraint;\r\n        }\r\n        if (this.source.constraint != null) {\r\n            return this.source.constraint;\r\n        }\r\n        return this.source.calendar.opt('eventConstraint'); // what about View option?\r\n    };\r\n    EventDef.prototype.getOverlap = function () {\r\n        if (this.overlap != null) {\r\n            return this.overlap;\r\n        }\r\n        if (this.source.overlap != null) {\r\n            return this.source.overlap;\r\n        }\r\n        return this.source.calendar.opt('eventOverlap'); // what about View option?\r\n    };\r\n    EventDef.prototype.isStartExplicitlyEditable = function () {\r\n        if (this.startEditable != null) {\r\n            return this.startEditable;\r\n        }\r\n        return this.source.startEditable;\r\n    };\r\n    EventDef.prototype.isDurationExplicitlyEditable = function () {\r\n        if (this.durationEditable != null) {\r\n            return this.durationEditable;\r\n        }\r\n        return this.source.durationEditable;\r\n    };\r\n    EventDef.prototype.isExplicitlyEditable = function () {\r\n        if (this.editable != null) {\r\n            return this.editable;\r\n        }\r\n        return this.source.editable;\r\n    };\r\n    EventDef.prototype.toLegacy = function () {\r\n        var obj = $.extend({}, this.miscProps);\r\n        obj._id = this.uid;\r\n        obj.source = this.source;\r\n        obj.className = this.className.slice(); // copy\r\n        obj.allDay = this.isAllDay();\r\n        if (this.rawId != null) {\r\n            obj.id = this.rawId;\r\n        }\r\n        EventDef.copyVerbatimStandardProps(this, obj);\r\n        return obj;\r\n    };\r\n    EventDef.prototype.applyManualStandardProps = function (rawProps) {\r\n        if (rawProps.id != null) {\r\n            this.id = EventDef.normalizeId((this.rawId = rawProps.id));\r\n        }\r\n        else {\r\n            this.id = EventDef.generateId();\r\n        }\r\n        if (rawProps._id != null) { // accept this prop, even tho somewhat internal\r\n            this.uid = String(rawProps._id);\r\n        }\r\n        else {\r\n            this.uid = EventDef.generateId();\r\n        }\r\n        // TODO: converge with EventSource\r\n        if ($.isArray(rawProps.className)) {\r\n            this.className = rawProps.className;\r\n        }\r\n        if (typeof rawProps.className === 'string') {\r\n            this.className = rawProps.className.split(/\\s+/);\r\n        }\r\n        return true;\r\n    };\r\n    EventDef.prototype.applyMiscProps = function (rawProps) {\r\n        $.extend(this.miscProps, rawProps);\r\n    };\r\n    EventDef.uuid = 0;\r\n    EventDef.defineStandardProps = ParsableModelMixin_1.default.defineStandardProps;\r\n    EventDef.copyVerbatimStandardProps = ParsableModelMixin_1.default.copyVerbatimStandardProps;\r\n    return EventDef;\r\n}());\r\nexports.default = EventDef;\r\nParsableModelMixin_1.default.mixInto(EventDef);\r\nEventDef.defineStandardProps({\r\n    // not automatically assigned (`false`)\r\n    _id: false,\r\n    id: false,\r\n    className: false,\r\n    source: false,\r\n    // automatically assigned (`true`)\r\n    title: true,\r\n    url: true,\r\n    rendering: true,\r\n    constraint: true,\r\n    overlap: true,\r\n    editable: true,\r\n    startEditable: true,\r\n    durationEditable: true,\r\n    color: true,\r\n    backgroundColor: true,\r\n    borderColor: true,\r\n    textColor: true\r\n});\r\n\n\n/***/ }),\n/* 38 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nexports.default = {\r\n    sourceClasses: [],\r\n    registerClass: function (EventSourceClass) {\r\n        this.sourceClasses.unshift(EventSourceClass); // give highest priority\r\n    },\r\n    parse: function (rawInput, calendar) {\r\n        var sourceClasses = this.sourceClasses;\r\n        var i;\r\n        var eventSource;\r\n        for (i = 0; i < sourceClasses.length; i++) {\r\n            eventSource = sourceClasses[i].parse(rawInput, calendar);\r\n            if (eventSource) {\r\n                return eventSource;\r\n            }\r\n        }\r\n    }\r\n};\r\n\n\n/***/ }),\n/* 39 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation = /** @class */ (function () {\r\n    function EventDefMutation() {\r\n    }\r\n    EventDefMutation.createFromRawProps = function (eventInstance, rawProps, largeUnit) {\r\n        var eventDef = eventInstance.def;\r\n        var dateProps = {};\r\n        var standardProps = {};\r\n        var miscProps = {};\r\n        var verbatimStandardProps = {};\r\n        var eventDefId = null;\r\n        var className = null;\r\n        var propName;\r\n        var dateProfile;\r\n        var dateMutation;\r\n        var defMutation;\r\n        for (propName in rawProps) {\r\n            if (EventDateProfile_1.default.isStandardProp(propName)) {\r\n                dateProps[propName] = rawProps[propName];\r\n            }\r\n            else if (eventDef.isStandardProp(propName)) {\r\n                standardProps[propName] = rawProps[propName];\r\n            }\r\n            else if (eventDef.miscProps[propName] !== rawProps[propName]) { // only if changed\r\n                miscProps[propName] = rawProps[propName];\r\n            }\r\n        }\r\n        dateProfile = EventDateProfile_1.default.parse(dateProps, eventDef.source);\r\n        if (dateProfile) { // no failure?\r\n            dateMutation = EventDefDateMutation_1.default.createFromDiff(eventInstance.dateProfile, dateProfile, largeUnit);\r\n        }\r\n        if (standardProps.id !== eventDef.id) {\r\n            eventDefId = standardProps.id; // only apply if there's a change\r\n        }\r\n        if (!util_1.isArraysEqual(standardProps.className, eventDef.className)) {\r\n            className = standardProps.className; // only apply if there's a change\r\n        }\r\n        EventDef_1.default.copyVerbatimStandardProps(standardProps, // src\r\n        verbatimStandardProps // dest\r\n        );\r\n        defMutation = new EventDefMutation();\r\n        defMutation.eventDefId = eventDefId;\r\n        defMutation.className = className;\r\n        defMutation.verbatimStandardProps = verbatimStandardProps;\r\n        defMutation.miscProps = miscProps;\r\n        if (dateMutation) {\r\n            defMutation.dateMutation = dateMutation;\r\n        }\r\n        return defMutation;\r\n    };\r\n    /*\r\n    eventDef assumed to be a SingleEventDef.\r\n    returns an undo function.\r\n    */\r\n    EventDefMutation.prototype.mutateSingle = function (eventDef) {\r\n        var origDateProfile;\r\n        if (this.dateMutation) {\r\n            origDateProfile = eventDef.dateProfile;\r\n            eventDef.dateProfile = this.dateMutation.buildNewDateProfile(origDateProfile, eventDef.source.calendar);\r\n        }\r\n        // can't undo\r\n        // TODO: more DRY with EventDef::applyManualStandardProps\r\n        if (this.eventDefId != null) {\r\n            eventDef.id = EventDef_1.default.normalizeId((eventDef.rawId = this.eventDefId));\r\n        }\r\n        // can't undo\r\n        // TODO: more DRY with EventDef::applyManualStandardProps\r\n        if (this.className) {\r\n            eventDef.className = this.className;\r\n        }\r\n        // can't undo\r\n        if (this.verbatimStandardProps) {\r\n            SingleEventDef_1.default.copyVerbatimStandardProps(this.verbatimStandardProps, // src\r\n            eventDef // dest\r\n            );\r\n        }\r\n        // can't undo\r\n        if (this.miscProps) {\r\n            eventDef.applyMiscProps(this.miscProps);\r\n        }\r\n        if (origDateProfile) {\r\n            return function () {\r\n                eventDef.dateProfile = origDateProfile;\r\n            };\r\n        }\r\n        else {\r\n            return function () { };\r\n        }\r\n    };\r\n    EventDefMutation.prototype.setDateMutation = function (dateMutation) {\r\n        if (dateMutation && !dateMutation.isEmpty()) {\r\n            this.dateMutation = dateMutation;\r\n        }\r\n        else {\r\n            this.dateMutation = null;\r\n        }\r\n    };\r\n    EventDefMutation.prototype.isEmpty = function () {\r\n        return !this.dateMutation;\r\n    };\r\n    return EventDefMutation;\r\n}());\r\nexports.default = EventDefMutation;\r\n\n\n/***/ }),\n/* 40 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventDefDateMutation = /** @class */ (function () {\r\n    function EventDefDateMutation() {\r\n        this.clearEnd = false;\r\n        this.forceTimed = false;\r\n        this.forceAllDay = false;\r\n    }\r\n    EventDefDateMutation.createFromDiff = function (dateProfile0, dateProfile1, largeUnit) {\r\n        var clearEnd = dateProfile0.end && !dateProfile1.end;\r\n        var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();\r\n        var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();\r\n        var dateDelta;\r\n        var endDiff;\r\n        var endDelta;\r\n        var mutation;\r\n        // subtracts the dates in the appropriate way, returning a duration\r\n        function subtractDates(date1, date0) {\r\n            if (largeUnit) {\r\n                return util_1.diffByUnit(date1, date0, largeUnit); // poorly named\r\n            }\r\n            else if (dateProfile1.isAllDay()) {\r\n                return util_1.diffDay(date1, date0); // poorly named\r\n            }\r\n            else {\r\n                return util_1.diffDayTime(date1, date0); // poorly named\r\n            }\r\n        }\r\n        dateDelta = subtractDates(dateProfile1.start, dateProfile0.start);\r\n        if (dateProfile1.end) {\r\n            // use unzonedRanges because dateProfile0.end might be null\r\n            endDiff = subtractDates(dateProfile1.unzonedRange.getEnd(), dateProfile0.unzonedRange.getEnd());\r\n            endDelta = endDiff.subtract(dateDelta);\r\n        }\r\n        mutation = new EventDefDateMutation();\r\n        mutation.clearEnd = clearEnd;\r\n        mutation.forceTimed = forceTimed;\r\n        mutation.forceAllDay = forceAllDay;\r\n        mutation.setDateDelta(dateDelta);\r\n        mutation.setEndDelta(endDelta);\r\n        return mutation;\r\n    };\r\n    /*\r\n    returns an undo function.\r\n    */\r\n    EventDefDateMutation.prototype.buildNewDateProfile = function (eventDateProfile, calendar) {\r\n        var start = eventDateProfile.start.clone();\r\n        var end = null;\r\n        var shouldRezone = false;\r\n        if (eventDateProfile.end && !this.clearEnd) {\r\n            end = eventDateProfile.end.clone();\r\n        }\r\n        else if (this.endDelta && !end) {\r\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n        }\r\n        if (this.forceTimed) {\r\n            shouldRezone = true;\r\n            if (!start.hasTime()) {\r\n                start.time(0);\r\n            }\r\n            if (end && !end.hasTime()) {\r\n                end.time(0);\r\n            }\r\n        }\r\n        else if (this.forceAllDay) {\r\n            if (start.hasTime()) {\r\n                start.stripTime();\r\n            }\r\n            if (end && end.hasTime()) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        if (this.dateDelta) {\r\n            shouldRezone = true;\r\n            start.add(this.dateDelta);\r\n            if (end) {\r\n                end.add(this.dateDelta);\r\n            }\r\n        }\r\n        // do this before adding startDelta to start, so we can work off of start\r\n        if (this.endDelta) {\r\n            shouldRezone = true;\r\n            end.add(this.endDelta);\r\n        }\r\n        if (this.startDelta) {\r\n            shouldRezone = true;\r\n            start.add(this.startDelta);\r\n        }\r\n        if (shouldRezone) {\r\n            start = calendar.applyTimezone(start);\r\n            if (end) {\r\n                end = calendar.applyTimezone(end);\r\n            }\r\n        }\r\n        // TODO: okay to access calendar option?\r\n        if (!end && calendar.opt('forceEventDuration')) {\r\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\r\n        }\r\n        return new EventDateProfile_1.default(start, end, calendar);\r\n    };\r\n    EventDefDateMutation.prototype.setDateDelta = function (dateDelta) {\r\n        if (dateDelta && dateDelta.valueOf()) {\r\n            this.dateDelta = dateDelta;\r\n        }\r\n        else {\r\n            this.dateDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.setStartDelta = function (startDelta) {\r\n        if (startDelta && startDelta.valueOf()) {\r\n            this.startDelta = startDelta;\r\n        }\r\n        else {\r\n            this.startDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.setEndDelta = function (endDelta) {\r\n        if (endDelta && endDelta.valueOf()) {\r\n            this.endDelta = endDelta;\r\n        }\r\n        else {\r\n            this.endDelta = null;\r\n        }\r\n    };\r\n    EventDefDateMutation.prototype.isEmpty = function () {\r\n        return !this.clearEnd && !this.forceTimed && !this.forceAllDay &&\r\n            !this.dateDelta && !this.startDelta && !this.endDelta;\r\n    };\r\n    return EventDefDateMutation;\r\n}());\r\nexports.default = EventDefDateMutation;\r\n\n\n/***/ }),\n/* 41 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Class_1 = __webpack_require__(35);\r\n/*\r\nEmbodies a div that has potential scrollbars\r\n*/\r\nvar Scroller = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Scroller, _super);\r\n    function Scroller(options) {\r\n        var _this = _super.call(this) || this;\r\n        options = options || {};\r\n        _this.overflowX = options.overflowX || options.overflow || 'auto';\r\n        _this.overflowY = options.overflowY || options.overflow || 'auto';\r\n        return _this;\r\n    }\r\n    Scroller.prototype.render = function () {\r\n        this.el = this.renderEl();\r\n        this.applyOverflow();\r\n    };\r\n    Scroller.prototype.renderEl = function () {\r\n        return (this.scrollEl = $('<div class=\"fc-scroller\"></div>'));\r\n    };\r\n    // sets to natural height, unlocks overflow\r\n    Scroller.prototype.clear = function () {\r\n        this.setHeight('auto');\r\n        this.applyOverflow();\r\n    };\r\n    Scroller.prototype.destroy = function () {\r\n        this.el.remove();\r\n    };\r\n    // Overflow\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Scroller.prototype.applyOverflow = function () {\r\n        this.scrollEl.css({\r\n            'overflow-x': this.overflowX,\r\n            'overflow-y': this.overflowY\r\n        });\r\n    };\r\n    // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\r\n    // Useful for preserving scrollbar widths regardless of future resizes.\r\n    // Can pass in scrollbarWidths for optimization.\r\n    Scroller.prototype.lockOverflow = function (scrollbarWidths) {\r\n        var overflowX = this.overflowX;\r\n        var overflowY = this.overflowY;\r\n        scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\r\n        if (overflowX === 'auto') {\r\n            overflowX = (scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\r\n                // OR scrolling pane with massless scrollbars?\r\n                this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth\r\n            // subtract 1 because of IE off-by-one issue\r\n            ) ? 'scroll' : 'hidden';\r\n        }\r\n        if (overflowY === 'auto') {\r\n            overflowY = (scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\r\n                // OR scrolling pane with massless scrollbars?\r\n                this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight\r\n            // subtract 1 because of IE off-by-one issue\r\n            ) ? 'scroll' : 'hidden';\r\n        }\r\n        this.scrollEl.css({ 'overflow-x': overflowX, 'overflow-y': overflowY });\r\n    };\r\n    // Getters / Setters\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Scroller.prototype.setHeight = function (height) {\r\n        this.scrollEl.height(height);\r\n    };\r\n    Scroller.prototype.getScrollTop = function () {\r\n        return this.scrollEl.scrollTop();\r\n    };\r\n    Scroller.prototype.setScrollTop = function (top) {\r\n        this.scrollEl.scrollTop(top);\r\n    };\r\n    Scroller.prototype.getClientWidth = function () {\r\n        return this.scrollEl[0].clientWidth;\r\n    };\r\n    Scroller.prototype.getClientHeight = function () {\r\n        return this.scrollEl[0].clientHeight;\r\n    };\r\n    Scroller.prototype.getScrollbarWidths = function () {\r\n        return util_1.getScrollbarWidths(this.scrollEl);\r\n    };\r\n    return Scroller;\r\n}(Class_1.default));\r\nexports.default = Scroller;\r\n\n\n/***/ }),\n/* 42 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar DateComponent_1 = __webpack_require__(231);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar InteractiveDateComponent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(InteractiveDateComponent, _super);\r\n    function InteractiveDateComponent(_view, _options) {\r\n        var _this = _super.call(this, _view, _options) || this;\r\n        // self-config, overridable by subclasses\r\n        _this.segSelector = '.fc-event-container > *'; // what constitutes an event element?\r\n        if (_this.dateSelectingClass) {\r\n            _this.dateClicking = new _this.dateClickingClass(_this);\r\n        }\r\n        if (_this.dateSelectingClass) {\r\n            _this.dateSelecting = new _this.dateSelectingClass(_this);\r\n        }\r\n        if (_this.eventPointingClass) {\r\n            _this.eventPointing = new _this.eventPointingClass(_this);\r\n        }\r\n        if (_this.eventDraggingClass && _this.eventPointing) {\r\n            _this.eventDragging = new _this.eventDraggingClass(_this, _this.eventPointing);\r\n        }\r\n        if (_this.eventResizingClass && _this.eventPointing) {\r\n            _this.eventResizing = new _this.eventResizingClass(_this, _this.eventPointing);\r\n        }\r\n        if (_this.externalDroppingClass) {\r\n            _this.externalDropping = new _this.externalDroppingClass(_this);\r\n        }\r\n        return _this;\r\n    }\r\n    // Sets the container element that the view should render inside of, does global DOM-related initializations,\r\n    // and renders all the non-date-related content inside.\r\n    InteractiveDateComponent.prototype.setElement = function (el) {\r\n        _super.prototype.setElement.call(this, el);\r\n        if (this.dateClicking) {\r\n            this.dateClicking.bindToEl(el);\r\n        }\r\n        if (this.dateSelecting) {\r\n            this.dateSelecting.bindToEl(el);\r\n        }\r\n        this.bindAllSegHandlersToEl(el);\r\n    };\r\n    InteractiveDateComponent.prototype.removeElement = function () {\r\n        this.endInteractions();\r\n        _super.prototype.removeElement.call(this);\r\n    };\r\n    InteractiveDateComponent.prototype.executeEventUnrender = function () {\r\n        this.endInteractions();\r\n        _super.prototype.executeEventUnrender.call(this);\r\n    };\r\n    InteractiveDateComponent.prototype.bindGlobalHandlers = function () {\r\n        _super.prototype.bindGlobalHandlers.call(this);\r\n        if (this.externalDropping) {\r\n            this.externalDropping.bindToDocument();\r\n        }\r\n    };\r\n    InteractiveDateComponent.prototype.unbindGlobalHandlers = function () {\r\n        _super.prototype.unbindGlobalHandlers.call(this);\r\n        if (this.externalDropping) {\r\n            this.externalDropping.unbindFromDocument();\r\n        }\r\n    };\r\n    InteractiveDateComponent.prototype.bindDateHandlerToEl = function (el, name, handler) {\r\n        var _this = this;\r\n        // attach a handler to the grid's root element.\r\n        // jQuery will take care of unregistering them when removeElement gets called.\r\n        this.el.on(name, function (ev) {\r\n            if (!$(ev.target).is(_this.segSelector + ':not(.fc-helper),' + // directly on an event element\r\n                _this.segSelector + ':not(.fc-helper) *,' + // within an event element\r\n                '.fc-more,' + // a \"more..\" link\r\n                'a[data-goto]' // a clickable nav link\r\n            )) {\r\n                return handler.call(_this, ev);\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.bindAllSegHandlersToEl = function (el) {\r\n        [\r\n            this.eventPointing,\r\n            this.eventDragging,\r\n            this.eventResizing\r\n        ].forEach(function (eventInteraction) {\r\n            if (eventInteraction) {\r\n                eventInteraction.bindToEl(el);\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.bindSegHandlerToEl = function (el, name, handler) {\r\n        var _this = this;\r\n        el.on(name, this.segSelector, function (ev) {\r\n            var segEl = $(ev.currentTarget);\r\n            if (!segEl.is('.fc-helper')) {\r\n                var seg = segEl.data('fc-seg'); // grab segment data. put there by View::renderEventsPayload\r\n                if (seg && !_this.shouldIgnoreEventPointing()) {\r\n                    return handler.call(_this, seg, ev); // context will be the Grid\r\n                }\r\n            }\r\n        });\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreMouse = function () {\r\n        // HACK\r\n        // This will still work even though bindDateHandlerToEl doesn't use GlobalEmitter.\r\n        return GlobalEmitter_1.default.get().shouldIgnoreMouse();\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreTouch = function () {\r\n        var view = this._getView();\r\n        // On iOS (and Android?) when a new selection is initiated overtop another selection,\r\n        // the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\r\n        // HACK: simply don't allow this to happen.\r\n        // ALSO: prevent selection when an *event* is already raised.\r\n        return view.isSelected || view.selectedEvent;\r\n    };\r\n    InteractiveDateComponent.prototype.shouldIgnoreEventPointing = function () {\r\n        // only call the handlers if there is not a drag/resize in progress\r\n        return (this.eventDragging && this.eventDragging.isDragging) ||\r\n            (this.eventResizing && this.eventResizing.isResizing);\r\n    };\r\n    InteractiveDateComponent.prototype.canStartSelection = function (seg, ev) {\r\n        return util_1.getEvIsTouch(ev) &&\r\n            !this.canStartResize(seg, ev) &&\r\n            (this.isEventDefDraggable(seg.footprint.eventDef) ||\r\n                this.isEventDefResizable(seg.footprint.eventDef));\r\n    };\r\n    InteractiveDateComponent.prototype.canStartDrag = function (seg, ev) {\r\n        return !this.canStartResize(seg, ev) &&\r\n            this.isEventDefDraggable(seg.footprint.eventDef);\r\n    };\r\n    InteractiveDateComponent.prototype.canStartResize = function (seg, ev) {\r\n        var view = this._getView();\r\n        var eventDef = seg.footprint.eventDef;\r\n        return (!util_1.getEvIsTouch(ev) || view.isEventDefSelected(eventDef)) &&\r\n            this.isEventDefResizable(eventDef) &&\r\n            $(ev.target).is('.fc-resizer');\r\n    };\r\n    // Kills all in-progress dragging.\r\n    // Useful for when public API methods that result in re-rendering are invoked during a drag.\r\n    // Also useful for when touch devices misbehave and don't fire their touchend.\r\n    InteractiveDateComponent.prototype.endInteractions = function () {\r\n        [\r\n            this.dateClicking,\r\n            this.dateSelecting,\r\n            this.eventPointing,\r\n            this.eventDragging,\r\n            this.eventResizing\r\n        ].forEach(function (interaction) {\r\n            if (interaction) {\r\n                interaction.end();\r\n            }\r\n        });\r\n    };\r\n    // Event Drag-n-Drop\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Computes if the given event is allowed to be dragged by the user\r\n    InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {\r\n        return this.isEventDefStartEditable(eventDef);\r\n    };\r\n    InteractiveDateComponent.prototype.isEventDefStartEditable = function (eventDef) {\r\n        var isEditable = eventDef.isStartExplicitlyEditable();\r\n        if (isEditable == null) {\r\n            isEditable = this.opt('eventStartEditable');\r\n            if (isEditable == null) {\r\n                isEditable = this.isEventDefGenerallyEditable(eventDef);\r\n            }\r\n        }\r\n        return isEditable;\r\n    };\r\n    InteractiveDateComponent.prototype.isEventDefGenerallyEditable = function (eventDef) {\r\n        var isEditable = eventDef.isExplicitlyEditable();\r\n        if (isEditable == null) {\r\n            isEditable = this.opt('editable');\r\n        }\r\n        return isEditable;\r\n    };\r\n    // Event Resizing\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Computes if the given event is allowed to be resized from its starting edge\r\n    InteractiveDateComponent.prototype.isEventDefResizableFromStart = function (eventDef) {\r\n        return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);\r\n    };\r\n    // Computes if the given event is allowed to be resized from its ending edge\r\n    InteractiveDateComponent.prototype.isEventDefResizableFromEnd = function (eventDef) {\r\n        return this.isEventDefResizable(eventDef);\r\n    };\r\n    // Computes if the given event is allowed to be resized by the user at all\r\n    InteractiveDateComponent.prototype.isEventDefResizable = function (eventDef) {\r\n        var isResizable = eventDef.isDurationExplicitlyEditable();\r\n        if (isResizable == null) {\r\n            isResizable = this.opt('eventDurationEditable');\r\n            if (isResizable == null) {\r\n                isResizable = this.isEventDefGenerallyEditable(eventDef);\r\n            }\r\n        }\r\n        return isResizable;\r\n    };\r\n    // Event Mutation / Constraints\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Diffs the two dates, returning a duration, based on granularity of the grid\r\n    // TODO: port isTimeScale into this system?\r\n    InteractiveDateComponent.prototype.diffDates = function (a, b) {\r\n        if (this.largeUnit) {\r\n            return util_1.diffByUnit(a, b, this.largeUnit);\r\n        }\r\n        else {\r\n            return util_1.diffDayTime(a, b);\r\n        }\r\n    };\r\n    // is it allowed, in relation to the view's validRange?\r\n    // NOTE: very similar to isExternalInstanceGroupAllowed\r\n    InteractiveDateComponent.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var view = this._getView();\r\n        var dateProfile = this.dateProfile;\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            // TODO: just use getAllEventRanges directly\r\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n                return false;\r\n            }\r\n        }\r\n        return view.calendar.constraints.isEventInstanceGroupAllowed(eventInstanceGroup);\r\n    };\r\n    // NOTE: very similar to isEventInstanceGroupAllowed\r\n    // when it's a completely anonymous external drag, no event.\r\n    InteractiveDateComponent.prototype.isExternalInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var view = this._getView();\r\n        var dateProfile = this.dateProfile;\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\r\n                return false;\r\n            }\r\n        }\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            // treat it as a selection\r\n            // TODO: pass in eventInstanceGroup instead\r\n            //  because we don't want calendar's constraint system to depend on a component's\r\n            //  determination of footprints.\r\n            if (!view.calendar.constraints.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    return InteractiveDateComponent;\r\n}(DateComponent_1.default));\r\nexports.default = InteractiveDateComponent;\r\n\n\n/***/ }),\n/* 43 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar RenderQueue_1 = __webpack_require__(229);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\n/* An abstract class from which other views inherit from\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar View = /** @class */ (function (_super) {\r\n    tslib_1.__extends(View, _super);\r\n    function View(calendar, viewSpec) {\r\n        var _this = _super.call(this, null, viewSpec.options) || this;\r\n        _this.batchRenderDepth = 0;\r\n        _this.isSelected = false; // boolean whether a range of time is user-selected or not\r\n        _this.calendar = calendar;\r\n        _this.viewSpec = viewSpec;\r\n        // shortcuts\r\n        _this.type = viewSpec.type;\r\n        // .name is deprecated\r\n        _this.name = _this.type;\r\n        _this.initRenderQueue();\r\n        _this.initHiddenDays();\r\n        _this.dateProfileGenerator = new _this.dateProfileGeneratorClass(_this);\r\n        _this.bindBaseRenderHandlers();\r\n        _this.eventOrderSpecs = util_1.parseFieldSpecs(_this.opt('eventOrder'));\r\n        // legacy\r\n        if (_this['initialize']) {\r\n            _this['initialize']();\r\n        }\r\n        return _this;\r\n    }\r\n    View.prototype._getView = function () {\r\n        return this;\r\n    };\r\n    // Retrieves an option with the given name\r\n    View.prototype.opt = function (name) {\r\n        return this.options[name];\r\n    };\r\n    /* Render Queue\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.initRenderQueue = function () {\r\n        this.renderQueue = new RenderQueue_1.default({\r\n            event: this.opt('eventRenderWait')\r\n        });\r\n        this.renderQueue.on('start', this.onRenderQueueStart.bind(this));\r\n        this.renderQueue.on('stop', this.onRenderQueueStop.bind(this));\r\n        this.on('before:change', this.startBatchRender);\r\n        this.on('change', this.stopBatchRender);\r\n    };\r\n    View.prototype.onRenderQueueStart = function () {\r\n        this.calendar.freezeContentHeight();\r\n        this.addScroll(this.queryScroll());\r\n    };\r\n    View.prototype.onRenderQueueStop = function () {\r\n        if (this.calendar.updateViewSize()) { // success?\r\n            this.popScroll();\r\n        }\r\n        this.calendar.thawContentHeight();\r\n    };\r\n    View.prototype.startBatchRender = function () {\r\n        if (!(this.batchRenderDepth++)) {\r\n            this.renderQueue.pause();\r\n        }\r\n    };\r\n    View.prototype.stopBatchRender = function () {\r\n        if (!(--this.batchRenderDepth)) {\r\n            this.renderQueue.resume();\r\n        }\r\n    };\r\n    View.prototype.requestRender = function (func, namespace, actionType) {\r\n        this.renderQueue.queue(func, namespace, actionType);\r\n    };\r\n    // given func will auto-bind to `this`\r\n    View.prototype.whenSizeUpdated = function (func) {\r\n        if (this.renderQueue.isRunning) {\r\n            this.renderQueue.one('stop', func.bind(this));\r\n        }\r\n        else {\r\n            func.call(this);\r\n        }\r\n    };\r\n    /* Title and Date Formatting\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes what the title at the top of the calendar should be for this view\r\n    View.prototype.computeTitle = function (dateProfile) {\r\n        var unzonedRange;\r\n        // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\r\n        if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\r\n            unzonedRange = dateProfile.currentUnzonedRange;\r\n        }\r\n        else { // for day units or smaller, use the actual day range\r\n            unzonedRange = dateProfile.activeUnzonedRange;\r\n        }\r\n        return this.formatRange({\r\n            start: this.calendar.msToMoment(unzonedRange.startMs, dateProfile.isRangeAllDay),\r\n            end: this.calendar.msToMoment(unzonedRange.endMs, dateProfile.isRangeAllDay)\r\n        }, dateProfile.isRangeAllDay, this.opt('titleFormat') || this.computeTitleFormat(dateProfile), this.opt('titleRangeSeparator'));\r\n    };\r\n    // Generates the format string that should be used to generate the title for the current date range.\r\n    // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\r\n    View.prototype.computeTitleFormat = function (dateProfile) {\r\n        var currentRangeUnit = dateProfile.currentRangeUnit;\r\n        if (currentRangeUnit === 'year') {\r\n            return 'YYYY';\r\n        }\r\n        else if (currentRangeUnit === 'month') {\r\n            return this.opt('monthYearFormat'); // like \"September 2014\"\r\n        }\r\n        else if (dateProfile.currentUnzonedRange.as('days') > 1) {\r\n            return 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\r\n        }\r\n        else {\r\n            return 'LL'; // one day. longer, like \"September 9 2014\"\r\n        }\r\n    };\r\n    // Date Setting/Unsetting\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.setDate = function (date) {\r\n        var currentDateProfile = this.get('dateProfile');\r\n        var newDateProfile = this.dateProfileGenerator.build(date, undefined, true); // forceToValid=true\r\n        if (!currentDateProfile ||\r\n            !currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)) {\r\n            this.set('dateProfile', newDateProfile);\r\n        }\r\n    };\r\n    View.prototype.unsetDate = function () {\r\n        this.unset('dateProfile');\r\n    };\r\n    // Event Data\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.fetchInitialEvents = function (dateProfile) {\r\n        var calendar = this.calendar;\r\n        var forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;\r\n        return calendar.requestEvents(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay));\r\n    };\r\n    View.prototype.bindEventChanges = function () {\r\n        this.listenTo(this.calendar, 'eventsReset', this.resetEvents); // TODO: make this a real event\r\n    };\r\n    View.prototype.unbindEventChanges = function () {\r\n        this.stopListeningTo(this.calendar, 'eventsReset');\r\n    };\r\n    View.prototype.setEvents = function (eventsPayload) {\r\n        this.set('currentEvents', eventsPayload);\r\n        this.set('hasEvents', true);\r\n    };\r\n    View.prototype.unsetEvents = function () {\r\n        this.unset('currentEvents');\r\n        this.unset('hasEvents');\r\n    };\r\n    View.prototype.resetEvents = function (eventsPayload) {\r\n        this.startBatchRender();\r\n        this.unsetEvents();\r\n        this.setEvents(eventsPayload);\r\n        this.stopBatchRender();\r\n    };\r\n    // Date High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestDateRender = function (dateProfile) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeDateRender(dateProfile);\r\n        }, 'date', 'init');\r\n    };\r\n    View.prototype.requestDateUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeDateUnrender();\r\n        }, 'date', 'destroy');\r\n    };\r\n    // if dateProfile not specified, uses current\r\n    View.prototype.executeDateRender = function (dateProfile) {\r\n        _super.prototype.executeDateRender.call(this, dateProfile);\r\n        if (this['render']) {\r\n            this['render'](); // TODO: deprecate\r\n        }\r\n        this.trigger('datesRendered');\r\n        this.addScroll({ isDateInit: true });\r\n        this.startNowIndicator(); // shouldn't render yet because updateSize will be called soon\r\n    };\r\n    View.prototype.executeDateUnrender = function () {\r\n        this.unselect();\r\n        this.stopNowIndicator();\r\n        this.trigger('before:datesUnrendered');\r\n        if (this['destroy']) {\r\n            this['destroy'](); // TODO: deprecate\r\n        }\r\n        _super.prototype.executeDateUnrender.call(this);\r\n    };\r\n    // \"Base\" rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.bindBaseRenderHandlers = function () {\r\n        var _this = this;\r\n        this.on('datesRendered', function () {\r\n            _this.whenSizeUpdated(_this.triggerViewRender);\r\n        });\r\n        this.on('before:datesUnrendered', function () {\r\n            _this.triggerViewDestroy();\r\n        });\r\n    };\r\n    View.prototype.triggerViewRender = function () {\r\n        this.publiclyTrigger('viewRender', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    View.prototype.triggerViewDestroy = function () {\r\n        this.publiclyTrigger('viewDestroy', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    // Event High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestEventsRender = function (eventsPayload) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.executeEventRender(eventsPayload);\r\n            _this.whenSizeUpdated(_this.triggerAfterEventsRendered);\r\n        }, 'event', 'init');\r\n    };\r\n    View.prototype.requestEventsUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.triggerBeforeEventsDestroyed();\r\n            _this.executeEventUnrender();\r\n        }, 'event', 'destroy');\r\n    };\r\n    // Business Hour High-level Rendering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    View.prototype.requestBusinessHoursRender = function (businessHourGenerator) {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.renderBusinessHours(businessHourGenerator);\r\n        }, 'businessHours', 'init');\r\n    };\r\n    View.prototype.requestBusinessHoursUnrender = function () {\r\n        var _this = this;\r\n        this.requestRender(function () {\r\n            _this.unrenderBusinessHours();\r\n        }, 'businessHours', 'destroy');\r\n    };\r\n    // Misc view rendering utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Binds DOM handlers to elements that reside outside the view container, such as the document\r\n    View.prototype.bindGlobalHandlers = function () {\r\n        _super.prototype.bindGlobalHandlers.call(this);\r\n        this.listenTo(GlobalEmitter_1.default.get(), {\r\n            touchstart: this.processUnselect,\r\n            mousedown: this.handleDocumentMousedown\r\n        });\r\n    };\r\n    // Unbinds DOM handlers from elements that reside outside the view container\r\n    View.prototype.unbindGlobalHandlers = function () {\r\n        _super.prototype.unbindGlobalHandlers.call(this);\r\n        this.stopListeningTo(GlobalEmitter_1.default.get());\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Immediately render the current time indicator and begins re-rendering it at an interval,\r\n    // which is defined by this.getNowIndicatorUnit().\r\n    // TODO: somehow do this for the current whole day's background too\r\n    View.prototype.startNowIndicator = function () {\r\n        var _this = this;\r\n        var unit;\r\n        var update;\r\n        var delay; // ms wait value\r\n        if (this.opt('nowIndicator')) {\r\n            unit = this.getNowIndicatorUnit();\r\n            if (unit) {\r\n                update = util_1.proxy(this, 'updateNowIndicator'); // bind to `this`\r\n                this.initialNowDate = this.calendar.getNow();\r\n                this.initialNowQueriedMs = new Date().valueOf();\r\n                // wait until the beginning of the next interval\r\n                delay = this.initialNowDate.clone().startOf(unit).add(1, unit).valueOf() - this.initialNowDate.valueOf();\r\n                this.nowIndicatorTimeoutID = setTimeout(function () {\r\n                    _this.nowIndicatorTimeoutID = null;\r\n                    update();\r\n                    delay = +moment.duration(1, unit);\r\n                    delay = Math.max(100, delay); // prevent too frequent\r\n                    _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\r\n                }, delay);\r\n            }\r\n            // rendering will be initiated in updateSize\r\n        }\r\n    };\r\n    // rerenders the now indicator, computing the new current time from the amount of time that has passed\r\n    // since the initial getNow call.\r\n    View.prototype.updateNowIndicator = function () {\r\n        if (this.isDatesRendered &&\r\n            this.initialNowDate // activated before?\r\n        ) {\r\n            this.unrenderNowIndicator(); // won't unrender if unnecessary\r\n            this.renderNowIndicator(this.initialNowDate.clone().add(new Date().valueOf() - this.initialNowQueriedMs) // add ms\r\n            );\r\n            this.isNowIndicatorRendered = true;\r\n        }\r\n    };\r\n    // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\r\n    // Won't cause side effects if indicator isn't rendered.\r\n    View.prototype.stopNowIndicator = function () {\r\n        if (this.isNowIndicatorRendered) {\r\n            if (this.nowIndicatorTimeoutID) {\r\n                clearTimeout(this.nowIndicatorTimeoutID);\r\n                this.nowIndicatorTimeoutID = null;\r\n            }\r\n            if (this.nowIndicatorIntervalID) {\r\n                clearInterval(this.nowIndicatorIntervalID);\r\n                this.nowIndicatorIntervalID = null;\r\n            }\r\n            this.unrenderNowIndicator();\r\n            this.isNowIndicatorRendered = false;\r\n        }\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        if (this['setHeight']) { // for legacy API\r\n            this['setHeight'](totalHeight, isAuto);\r\n        }\r\n        else {\r\n            _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        }\r\n        this.updateNowIndicator();\r\n    };\r\n    /* Scroller\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.addScroll = function (scroll) {\r\n        var queuedScroll = this.queuedScroll || (this.queuedScroll = {});\r\n        $.extend(queuedScroll, scroll);\r\n    };\r\n    View.prototype.popScroll = function () {\r\n        this.applyQueuedScroll();\r\n        this.queuedScroll = null;\r\n    };\r\n    View.prototype.applyQueuedScroll = function () {\r\n        if (this.queuedScroll) {\r\n            this.applyScroll(this.queuedScroll);\r\n        }\r\n    };\r\n    View.prototype.queryScroll = function () {\r\n        var scroll = {};\r\n        if (this.isDatesRendered) {\r\n            $.extend(scroll, this.queryDateScroll());\r\n        }\r\n        return scroll;\r\n    };\r\n    View.prototype.applyScroll = function (scroll) {\r\n        if (scroll.isDateInit && this.isDatesRendered) {\r\n            $.extend(scroll, this.computeInitialDateScroll());\r\n        }\r\n        if (this.isDatesRendered) {\r\n            this.applyDateScroll(scroll);\r\n        }\r\n    };\r\n    View.prototype.computeInitialDateScroll = function () {\r\n        return {}; // subclasses must implement\r\n    };\r\n    View.prototype.queryDateScroll = function () {\r\n        return {}; // subclasses must implement\r\n    };\r\n    View.prototype.applyDateScroll = function (scroll) {\r\n        // subclasses must implement\r\n    };\r\n    /* Event Drag-n-Drop\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.reportEventDrop = function (eventInstance, eventMutation, el, ev) {\r\n        var eventManager = this.calendar.eventManager;\r\n        var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n        var dateMutation = eventMutation.dateMutation;\r\n        // update the EventInstance, for handlers\r\n        if (dateMutation) {\r\n            eventInstance.dateProfile = dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n        }\r\n        this.triggerEventDrop(eventInstance, \r\n        // a drop doesn't necessarily mean a date mutation (ex: resource change)\r\n        (dateMutation && dateMutation.dateDelta) || moment.duration(), undoFunc, el, ev);\r\n    };\r\n    // Triggers event-drop handlers that have subscribed via the API\r\n    View.prototype.triggerEventDrop = function (eventInstance, dateDelta, undoFunc, el, ev) {\r\n        this.publiclyTrigger('eventDrop', {\r\n            context: el[0],\r\n            args: [\r\n                eventInstance.toLegacy(),\r\n                dateDelta,\r\n                undoFunc,\r\n                ev,\r\n                {},\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    /* External Element Drag-n-Drop\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\r\n    // `meta` is the parsed data that has been embedded into the dragging event.\r\n    // `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\r\n    View.prototype.reportExternalDrop = function (singleEventDef, isEvent, isSticky, el, ev, ui) {\r\n        if (isEvent) {\r\n            this.calendar.eventManager.addEventDef(singleEventDef, isSticky);\r\n        }\r\n        this.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);\r\n    };\r\n    // Triggers external-drop handlers that have subscribed via the API\r\n    View.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {\r\n        // trigger 'drop' regardless of whether element represents an event\r\n        this.publiclyTrigger('drop', {\r\n            context: el[0],\r\n            args: [\r\n                singleEventDef.dateProfile.start.clone(),\r\n                ev,\r\n                ui,\r\n                this\r\n            ]\r\n        });\r\n        if (isEvent) {\r\n            // signal an external event landed\r\n            this.publiclyTrigger('eventReceive', {\r\n                context: this,\r\n                args: [\r\n                    singleEventDef.buildInstance().toLegacy(),\r\n                    this\r\n                ]\r\n            });\r\n        }\r\n    };\r\n    /* Event Resizing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Must be called when an event in the view has been resized to a new length\r\n    View.prototype.reportEventResize = function (eventInstance, eventMutation, el, ev) {\r\n        var eventManager = this.calendar.eventManager;\r\n        var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\r\n        // update the EventInstance, for handlers\r\n        eventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\r\n        var resizeDelta = eventMutation.dateMutation.endDelta || eventMutation.dateMutation.startDelta;\r\n        this.triggerEventResize(eventInstance, resizeDelta, undoFunc, el, ev);\r\n    };\r\n    // Triggers event-resize handlers that have subscribed via the API\r\n    View.prototype.triggerEventResize = function (eventInstance, resizeDelta, undoFunc, el, ev) {\r\n        this.publiclyTrigger('eventResize', {\r\n            context: el[0],\r\n            args: [\r\n                eventInstance.toLegacy(),\r\n                resizeDelta,\r\n                undoFunc,\r\n                ev,\r\n                {},\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    /* Selection (time range)\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Selects a date span on the view. `start` and `end` are both Moments.\r\n    // `ev` is the native mouse event that begin the interaction.\r\n    View.prototype.select = function (footprint, ev) {\r\n        this.unselect(ev);\r\n        this.renderSelectionFootprint(footprint);\r\n        this.reportSelection(footprint, ev);\r\n    };\r\n    View.prototype.renderSelectionFootprint = function (footprint) {\r\n        if (this['renderSelection']) { // legacy method in custom view classes\r\n            this['renderSelection'](footprint.toLegacy(this.calendar));\r\n        }\r\n        else {\r\n            _super.prototype.renderSelectionFootprint.call(this, footprint);\r\n        }\r\n    };\r\n    // Called when a new selection is made. Updates internal state and triggers handlers.\r\n    View.prototype.reportSelection = function (footprint, ev) {\r\n        this.isSelected = true;\r\n        this.triggerSelect(footprint, ev);\r\n    };\r\n    // Triggers handlers to 'select'\r\n    View.prototype.triggerSelect = function (footprint, ev) {\r\n        var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n        this.publiclyTrigger('select', {\r\n            context: this,\r\n            args: [\r\n                dateProfile.start,\r\n                dateProfile.end,\r\n                ev,\r\n                this\r\n            ]\r\n        });\r\n    };\r\n    // Undoes a selection. updates in the internal state and triggers handlers.\r\n    // `ev` is the native mouse event that began the interaction.\r\n    View.prototype.unselect = function (ev) {\r\n        if (this.isSelected) {\r\n            this.isSelected = false;\r\n            if (this['destroySelection']) {\r\n                this['destroySelection'](); // TODO: deprecate\r\n            }\r\n            this.unrenderSelection();\r\n            this.publiclyTrigger('unselect', {\r\n                context: this,\r\n                args: [ev, this]\r\n            });\r\n        }\r\n    };\r\n    /* Event Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.selectEventInstance = function (eventInstance) {\r\n        if (!this.selectedEventInstance ||\r\n            this.selectedEventInstance !== eventInstance) {\r\n            this.unselectEventInstance();\r\n            this.getEventSegs().forEach(function (seg) {\r\n                if (seg.footprint.eventInstance === eventInstance &&\r\n                    seg.el // necessary?\r\n                ) {\r\n                    seg.el.addClass('fc-selected');\r\n                }\r\n            });\r\n            this.selectedEventInstance = eventInstance;\r\n        }\r\n    };\r\n    View.prototype.unselectEventInstance = function () {\r\n        if (this.selectedEventInstance) {\r\n            this.getEventSegs().forEach(function (seg) {\r\n                if (seg.el) { // necessary?\r\n                    seg.el.removeClass('fc-selected');\r\n                }\r\n            });\r\n            this.selectedEventInstance = null;\r\n        }\r\n    };\r\n    View.prototype.isEventDefSelected = function (eventDef) {\r\n        // event references might change on refetchEvents(), while selectedEventInstance doesn't,\r\n        // so compare IDs\r\n        return this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;\r\n    };\r\n    /* Mouse / Touch Unselecting (time range & event unselection)\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // TODO: move consistently to down/start or up/end?\r\n    // TODO: don't kill previous selection if touch scrolling\r\n    View.prototype.handleDocumentMousedown = function (ev) {\r\n        if (util_1.isPrimaryMouseButton(ev)) {\r\n            this.processUnselect(ev);\r\n        }\r\n    };\r\n    View.prototype.processUnselect = function (ev) {\r\n        this.processRangeUnselect(ev);\r\n        this.processEventUnselect(ev);\r\n    };\r\n    View.prototype.processRangeUnselect = function (ev) {\r\n        var ignore;\r\n        // is there a time-range selection?\r\n        if (this.isSelected && this.opt('unselectAuto')) {\r\n            // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\r\n            ignore = this.opt('unselectCancel');\r\n            if (!ignore || !$(ev.target).closest(ignore).length) {\r\n                this.unselect(ev);\r\n            }\r\n        }\r\n    };\r\n    View.prototype.processEventUnselect = function (ev) {\r\n        if (this.selectedEventInstance) {\r\n            if (!$(ev.target).closest('.fc-selected').length) {\r\n                this.unselectEventInstance();\r\n            }\r\n        }\r\n    };\r\n    /* Triggers\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    View.prototype.triggerBaseRendered = function () {\r\n        this.publiclyTrigger('viewRender', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    View.prototype.triggerBaseUnrendered = function () {\r\n        this.publiclyTrigger('viewDestroy', {\r\n            context: this,\r\n            args: [this, this.el]\r\n        });\r\n    };\r\n    // Triggers handlers to 'dayClick'\r\n    // Span has start/end of the clicked area. Only the start is useful.\r\n    View.prototype.triggerDayClick = function (footprint, dayEl, ev) {\r\n        var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\r\n        this.publiclyTrigger('dayClick', {\r\n            context: dayEl,\r\n            args: [dateProfile.start, ev, this]\r\n        });\r\n    };\r\n    /* Date Utils\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // For DateComponent::getDayClasses\r\n    View.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n        return false;\r\n    };\r\n    // Arguments after name will be forwarded to a hypothetical function value\r\n    // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\r\n    // Always clone your objects if you fear mutation.\r\n    View.prototype.getUnzonedRangeOption = function (name) {\r\n        var val = this.opt(name);\r\n        if (typeof val === 'function') {\r\n            val = val.apply(null, Array.prototype.slice.call(arguments, 1));\r\n        }\r\n        if (val) {\r\n            return this.calendar.parseUnzonedRange(val);\r\n        }\r\n    };\r\n    /* Hidden Days\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Initializes internal variables related to calculating hidden days-of-week\r\n    View.prototype.initHiddenDays = function () {\r\n        var hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\r\n        var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\r\n        var dayCnt = 0;\r\n        var i;\r\n        if (this.opt('weekends') === false) {\r\n            hiddenDays.push(0, 6); // 0=sunday, 6=saturday\r\n        }\r\n        for (i = 0; i < 7; i++) {\r\n            if (!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)) {\r\n                dayCnt++;\r\n            }\r\n        }\r\n        if (!dayCnt) {\r\n            throw new Error('invalid hiddenDays'); // all days were hidden? bad.\r\n        }\r\n        this.isHiddenDayHash = isHiddenDayHash;\r\n    };\r\n    // Remove days from the beginning and end of the range that are computed as hidden.\r\n    // If the whole range is trimmed off, returns null\r\n    View.prototype.trimHiddenDays = function (inputUnzonedRange) {\r\n        var start = inputUnzonedRange.getStart();\r\n        var end = inputUnzonedRange.getEnd();\r\n        if (start) {\r\n            start = this.skipHiddenDays(start);\r\n        }\r\n        if (end) {\r\n            end = this.skipHiddenDays(end, -1, true);\r\n        }\r\n        if (start === null || end === null || start < end) {\r\n            return new UnzonedRange_1.default(start, end);\r\n        }\r\n        return null;\r\n    };\r\n    // Is the current day hidden?\r\n    // `day` is a day-of-week index (0-6), or a Moment\r\n    View.prototype.isHiddenDay = function (day) {\r\n        if (moment.isMoment(day)) {\r\n            day = day.day();\r\n        }\r\n        return this.isHiddenDayHash[day];\r\n    };\r\n    // Incrementing the current day until it is no longer a hidden day, returning a copy.\r\n    // DOES NOT CONSIDER validUnzonedRange!\r\n    // If the initial value of `date` is not a hidden day, don't do anything.\r\n    // Pass `isExclusive` as `true` if you are dealing with an end date.\r\n    // `inc` defaults to `1` (increment one day forward each time)\r\n    View.prototype.skipHiddenDays = function (date, inc, isExclusive) {\r\n        if (inc === void 0) { inc = 1; }\r\n        if (isExclusive === void 0) { isExclusive = false; }\r\n        var out = date.clone();\r\n        while (this.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]) {\r\n            out.add(inc, 'days');\r\n        }\r\n        return out;\r\n    };\r\n    return View;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = View;\r\nView.prototype.usesMinMaxTime = false;\r\nView.prototype.dateProfileGeneratorClass = DateProfileGenerator_1.default;\r\nView.watch('displayingDates', ['isInDom', 'dateProfile'], function (deps) {\r\n    this.requestDateRender(deps.dateProfile);\r\n}, function () {\r\n    this.requestDateUnrender();\r\n});\r\nView.watch('displayingBusinessHours', ['displayingDates', 'businessHourGenerator'], function (deps) {\r\n    this.requestBusinessHoursRender(deps.businessHourGenerator);\r\n}, function () {\r\n    this.requestBusinessHoursUnrender();\r\n});\r\nView.watch('initialEvents', ['dateProfile'], function (deps) {\r\n    return this.fetchInitialEvents(deps.dateProfile);\r\n});\r\nView.watch('bindingEvents', ['initialEvents'], function (deps) {\r\n    this.setEvents(deps.initialEvents);\r\n    this.bindEventChanges();\r\n}, function () {\r\n    this.unbindEventChanges();\r\n    this.unsetEvents();\r\n});\r\nView.watch('displayingEvents', ['displayingDates', 'hasEvents'], function () {\r\n    this.requestEventsRender(this.get('currentEvents'));\r\n}, function () {\r\n    this.requestEventsUnrender();\r\n});\r\nView.watch('title', ['dateProfile'], function (deps) {\r\n    return (this.title = this.computeTitle(deps.dateProfile)); // assign to View for legacy reasons\r\n});\r\nView.watch('legacyDateProps', ['dateProfile'], function (deps) {\r\n    var calendar = this.calendar;\r\n    var dateProfile = deps.dateProfile;\r\n    // DEPRECATED, but we need to keep it updated...\r\n    this.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n    this.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n    this.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, dateProfile.isRangeAllDay);\r\n    this.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, dateProfile.isRangeAllDay);\r\n});\r\n\n\n/***/ }),\n/* 44 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer = /** @class */ (function () {\r\n    function EventRenderer(component, fillRenderer) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n        this.fillRenderer = fillRenderer;\r\n    }\r\n    EventRenderer.prototype.opt = function (name) {\r\n        return this.view.opt(name);\r\n    };\r\n    // Updates values that rely on options and also relate to range\r\n    EventRenderer.prototype.rangeUpdated = function () {\r\n        var displayEventTime;\r\n        var displayEventEnd;\r\n        this.eventTimeFormat =\r\n            this.opt('eventTimeFormat') ||\r\n                this.opt('timeFormat') || // deprecated\r\n                this.computeEventTimeFormat();\r\n        displayEventTime = this.opt('displayEventTime');\r\n        if (displayEventTime == null) {\r\n            displayEventTime = this.computeDisplayEventTime(); // might be based off of range\r\n        }\r\n        displayEventEnd = this.opt('displayEventEnd');\r\n        if (displayEventEnd == null) {\r\n            displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\r\n        }\r\n        this.displayEventTime = displayEventTime;\r\n        this.displayEventEnd = displayEventEnd;\r\n    };\r\n    EventRenderer.prototype.render = function (eventsPayload) {\r\n        var dateProfile = this.component._getDateProfile();\r\n        var eventDefId;\r\n        var instanceGroup;\r\n        var eventRanges;\r\n        var bgRanges = [];\r\n        var fgRanges = [];\r\n        for (eventDefId in eventsPayload) {\r\n            instanceGroup = eventsPayload[eventDefId];\r\n            eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);\r\n            if (instanceGroup.getEventDef().hasBgRendering()) {\r\n                bgRanges.push.apply(bgRanges, eventRanges);\r\n            }\r\n            else {\r\n                fgRanges.push.apply(fgRanges, eventRanges);\r\n            }\r\n        }\r\n        this.renderBgRanges(bgRanges);\r\n        this.renderFgRanges(fgRanges);\r\n    };\r\n    EventRenderer.prototype.unrender = function () {\r\n        this.unrenderBgRanges();\r\n        this.unrenderFgRanges();\r\n    };\r\n    EventRenderer.prototype.renderFgRanges = function (eventRanges) {\r\n        var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        // render an `.el` on each seg\r\n        // returns a subset of the segs. segs that were actually rendered\r\n        segs = this.renderFgSegEls(segs);\r\n        if (this.renderFgSegs(segs) !== false) { // no failure?\r\n            this.fgSegs = segs;\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderFgRanges = function () {\r\n        this.unrenderFgSegs(this.fgSegs || []);\r\n        this.fgSegs = null;\r\n    };\r\n    EventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n        var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        if (this.renderBgSegs(segs) !== false) { // no failure?\r\n            this.bgSegs = segs;\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderBgRanges = function () {\r\n        this.unrenderBgSegs();\r\n        this.bgSegs = null;\r\n    };\r\n    EventRenderer.prototype.getSegs = function () {\r\n        return (this.bgSegs || []).concat(this.fgSegs || []);\r\n    };\r\n    // Renders foreground event segments onto the grid\r\n    EventRenderer.prototype.renderFgSegs = function (segs) {\r\n        // subclasses must implement\r\n        // segs already has rendered els, and has been filtered.\r\n        return false; // signal failure if not implemented\r\n    };\r\n    // Unrenders all currently rendered foreground segments\r\n    EventRenderer.prototype.unrenderFgSegs = function (segs) {\r\n        // subclasses must implement\r\n    };\r\n    EventRenderer.prototype.renderBgSegs = function (segs) {\r\n        var _this = this;\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderSegs('bgEvent', segs, {\r\n                getClasses: function (seg) {\r\n                    return _this.getBgClasses(seg.footprint.eventDef);\r\n                },\r\n                getCss: function (seg) {\r\n                    return {\r\n                        'background-color': _this.getBgColor(seg.footprint.eventDef)\r\n                    };\r\n                },\r\n                filterEl: function (seg, el) {\r\n                    return _this.filterEventRenderEl(seg.footprint, el);\r\n                }\r\n            });\r\n        }\r\n        else {\r\n            return false; // signal failure if no fillRenderer\r\n        }\r\n    };\r\n    EventRenderer.prototype.unrenderBgSegs = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('bgEvent');\r\n        }\r\n    };\r\n    // Renders and assigns an `el` property for each foreground event segment.\r\n    // Only returns segments that successfully rendered.\r\n    EventRenderer.prototype.renderFgSegEls = function (segs, disableResizing) {\r\n        var _this = this;\r\n        if (disableResizing === void 0) { disableResizing = false; }\r\n        var hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender');\r\n        var html = '';\r\n        var renderedSegs = [];\r\n        var i;\r\n        if (segs.length) { // don't build an empty html string\r\n            // build a large concatenation of event segment HTML\r\n            for (i = 0; i < segs.length; i++) {\r\n                this.beforeFgSegHtml(segs[i]);\r\n                html += this.fgSegHtml(segs[i], disableResizing);\r\n            }\r\n            // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n            // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\r\n            $(html).each(function (i, node) {\r\n                var seg = segs[i];\r\n                var el = $(node);\r\n                if (hasEventRenderHandlers) { // optimization\r\n                    el = _this.filterEventRenderEl(seg.footprint, el);\r\n                }\r\n                if (el) {\r\n                    el.data('fc-seg', seg); // used by handlers\r\n                    seg.el = el;\r\n                    renderedSegs.push(seg);\r\n                }\r\n            });\r\n        }\r\n        return renderedSegs;\r\n    };\r\n    EventRenderer.prototype.beforeFgSegHtml = function (seg) {\r\n    };\r\n    // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\r\n    EventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        // subclasses should implement\r\n    };\r\n    // Generic utility for generating the HTML classNames for an event segment's element\r\n    EventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable) {\r\n        var classes = [\r\n            'fc-event',\r\n            seg.isStart ? 'fc-start' : 'fc-not-start',\r\n            seg.isEnd ? 'fc-end' : 'fc-not-end'\r\n        ].concat(this.getClasses(seg.footprint.eventDef));\r\n        if (isDraggable) {\r\n            classes.push('fc-draggable');\r\n        }\r\n        if (isResizable) {\r\n            classes.push('fc-resizable');\r\n        }\r\n        // event is currently selected? attach a className.\r\n        if (this.view.isEventDefSelected(seg.footprint.eventDef)) {\r\n            classes.push('fc-selected');\r\n        }\r\n        return classes;\r\n    };\r\n    // Given an event and the default element used for rendering, returns the element that should actually be used.\r\n    // Basically runs events and elements through the eventRender hook.\r\n    EventRenderer.prototype.filterEventRenderEl = function (eventFootprint, el) {\r\n        var legacy = eventFootprint.getEventLegacy();\r\n        var custom = this.view.publiclyTrigger('eventRender', {\r\n            context: legacy,\r\n            args: [legacy, el, this.view]\r\n        });\r\n        if (custom === false) { // means don't render at all\r\n            el = null;\r\n        }\r\n        else if (custom && custom !== true) {\r\n            el = $(custom);\r\n        }\r\n        return el;\r\n    };\r\n    // Compute the text that should be displayed on an event's element.\r\n    // `range` can be the Event object itself, or something range-like, with at least a `start`.\r\n    // If event times are disabled, or the event has no time, will return a blank string.\r\n    // If not specified, formatStr will default to the eventTimeFormat setting,\r\n    // and displayEnd will default to the displayEventEnd setting.\r\n    EventRenderer.prototype.getTimeText = function (eventFootprint, formatStr, displayEnd) {\r\n        return this._getTimeText(eventFootprint.eventInstance.dateProfile.start, eventFootprint.eventInstance.dateProfile.end, eventFootprint.componentFootprint.isAllDay, formatStr, displayEnd);\r\n    };\r\n    EventRenderer.prototype._getTimeText = function (start, end, isAllDay, formatStr, displayEnd) {\r\n        if (formatStr == null) {\r\n            formatStr = this.eventTimeFormat;\r\n        }\r\n        if (displayEnd == null) {\r\n            displayEnd = this.displayEventEnd;\r\n        }\r\n        if (this.displayEventTime && !isAllDay) {\r\n            if (displayEnd && end) {\r\n                return this.view.formatRange({ start: start, end: end }, false, // allDay\r\n                formatStr);\r\n            }\r\n            else {\r\n                return start.format(formatStr);\r\n            }\r\n        }\r\n        return '';\r\n    };\r\n    EventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('smallTimeFormat');\r\n    };\r\n    EventRenderer.prototype.computeDisplayEventTime = function () {\r\n        return true;\r\n    };\r\n    EventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return true;\r\n    };\r\n    EventRenderer.prototype.getBgClasses = function (eventDef) {\r\n        var classNames = this.getClasses(eventDef);\r\n        classNames.push('fc-bgevent');\r\n        return classNames;\r\n    };\r\n    EventRenderer.prototype.getClasses = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var classNames = [];\r\n        for (i = 0; i < objs.length; i++) {\r\n            classNames.push.apply(// append\r\n            classNames, objs[i].eventClassName || objs[i].className || []);\r\n        }\r\n        return classNames;\r\n    };\r\n    // Utility for generating event skin-related CSS properties\r\n    EventRenderer.prototype.getSkinCss = function (eventDef) {\r\n        return {\r\n            'background-color': this.getBgColor(eventDef),\r\n            'border-color': this.getBorderColor(eventDef),\r\n            color: this.getTextColor(eventDef)\r\n        };\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getBgColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventBackgroundColor || objs[i].eventColor ||\r\n                objs[i].backgroundColor || objs[i].color;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventBackgroundColor') || this.opt('eventColor');\r\n        }\r\n        return val;\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getBorderColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventBorderColor || objs[i].eventColor ||\r\n                objs[i].borderColor || objs[i].color;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventBorderColor') || this.opt('eventColor');\r\n        }\r\n        return val;\r\n    };\r\n    // Queries for caller-specified color, then falls back to default\r\n    EventRenderer.prototype.getTextColor = function (eventDef) {\r\n        var objs = this.getStylingObjs(eventDef);\r\n        var i;\r\n        var val;\r\n        for (i = 0; i < objs.length && !val; i++) {\r\n            val = objs[i].eventTextColor ||\r\n                objs[i].textColor;\r\n        }\r\n        if (!val) {\r\n            val = this.opt('eventTextColor');\r\n        }\r\n        return val;\r\n    };\r\n    EventRenderer.prototype.getStylingObjs = function (eventDef) {\r\n        var objs = this.getFallbackStylingObjs(eventDef);\r\n        objs.unshift(eventDef);\r\n        return objs;\r\n    };\r\n    EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {\r\n        return [eventDef.source];\r\n    };\r\n    EventRenderer.prototype.sortEventSegs = function (segs) {\r\n        segs.sort(util_1.proxy(this, 'compareEventSegs'));\r\n    };\r\n    // A cmp function for determining which segments should take visual priority\r\n    EventRenderer.prototype.compareEventSegs = function (seg1, seg2) {\r\n        var f1 = seg1.footprint;\r\n        var f2 = seg2.footprint;\r\n        var cf1 = f1.componentFootprint;\r\n        var cf2 = f2.componentFootprint;\r\n        var r1 = cf1.unzonedRange;\r\n        var r2 = cf2.unzonedRange;\r\n        return r1.startMs - r2.startMs || // earlier events go first\r\n            (r2.endMs - r2.startMs) - (r1.endMs - r1.startMs) || // tie? longer events go first\r\n            cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)\r\n            util_1.compareByFieldSpecs(f1.eventDef, f2.eventDef, this.view.eventOrderSpecs, f1.eventDef.miscProps, f2.eventDef.miscProps);\r\n    };\r\n    return EventRenderer;\r\n}());\r\nexports.default = EventRenderer;\r\n\n\n/***/ }),\n/* 45 */,\n/* 46 */,\n/* 47 */,\n/* 48 */,\n/* 49 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment_ext_1 = __webpack_require__(11);\r\n// Plugin\r\n// -------------------------------------------------------------------------------------------------\r\nmoment_ext_1.newMomentProto.format = function () {\r\n    if (this._fullCalendar && arguments[0]) { // an enhanced moment? and a format string provided?\r\n        return formatDate(this, arguments[0]); // our extended formatting\r\n    }\r\n    if (this._ambigTime) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n    }\r\n    if (this._ambigZone) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n    }\r\n    if (this._fullCalendar) { // enhanced non-ambig moment?\r\n        // moment.format() doesn't ensure english, but we want to.\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this));\r\n    }\r\n    return moment_ext_1.oldMomentProto.format.apply(this, arguments);\r\n};\r\nmoment_ext_1.newMomentProto.toISOString = function () {\r\n    if (this._ambigTime) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\r\n    }\r\n    if (this._ambigZone) {\r\n        return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\r\n    }\r\n    if (this._fullCalendar) { // enhanced non-ambig moment?\r\n        // depending on browser, moment might not output english. ensure english.\r\n        // https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\r\n        return moment_ext_1.oldMomentProto.toISOString.apply(englishMoment(this), arguments);\r\n    }\r\n    return moment_ext_1.oldMomentProto.toISOString.apply(this, arguments);\r\n};\r\nfunction englishMoment(mom) {\r\n    if (mom.locale() !== 'en') {\r\n        return mom.clone().locale('en');\r\n    }\r\n    return mom;\r\n}\r\n// Config\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nInserted between chunks in the fake (\"intermediate\") formatting string.\r\nImportant that it passes as whitespace (\\s) because moment often identifies non-standalone months\r\nvia a regexp with an \\s.\r\n*/\r\nvar PART_SEPARATOR = '\\u000b'; // vertical tab\r\n/*\r\nInserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\r\nbut rather, a \"special\" token that has custom rendering (see specialTokens map).\r\n*/\r\nvar SPECIAL_TOKEN_MARKER = '\\u001f'; // information separator 1\r\n/*\r\nInserted at the beginning and end of a span of text that must have non-zero numeric characters.\r\nHandling of these markers is done in a post-processing step at the very end of text rendering.\r\n*/\r\nvar MAYBE_MARKER = '\\u001e'; // information separator 2\r\nvar MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\r\n/*\r\nAddition formatting tokens we want recognized\r\n*/\r\nvar specialTokens = {\r\n    t: function (date) {\r\n        return moment_ext_1.oldMomentFormat(date, 'a').charAt(0);\r\n    },\r\n    T: function (date) {\r\n        return moment_ext_1.oldMomentFormat(date, 'A').charAt(0);\r\n    }\r\n};\r\n/*\r\nThe first characters of formatting tokens for units that are 1 day or larger.\r\n`value` is for ranking relative size (lower means bigger).\r\n`unit` is a normalized unit, used for comparing moments.\r\n*/\r\nvar largeTokenMap = {\r\n    Y: { value: 1, unit: 'year' },\r\n    M: { value: 2, unit: 'month' },\r\n    W: { value: 3, unit: 'week' },\r\n    w: { value: 3, unit: 'week' },\r\n    D: { value: 4, unit: 'day' },\r\n    d: { value: 4, unit: 'day' } // day of week\r\n};\r\n// Single Date Formatting\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats `date` with a Moment formatting string, but allow our non-zero areas and special token\r\n*/\r\nfunction formatDate(date, formatStr) {\r\n    return renderFakeFormatString(getParsedFormatString(formatStr).fakeFormatString, date);\r\n}\r\nexports.formatDate = formatDate;\r\n// Date Range Formatting\r\n// -------------------------------------------------------------------------------------------------\r\n// TODO: make it work with timezone offset\r\n/*\r\nUsing a formatting string meant for a single date, generate a range string, like\r\n\"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\r\nIf the dates are the same as far as the format string is concerned, just return a single\r\nrendering of one date, without any separator.\r\n*/\r\nfunction formatRange(date1, date2, formatStr, separator, isRTL) {\r\n    var localeData;\r\n    date1 = moment_ext_1.default.parseZone(date1);\r\n    date2 = moment_ext_1.default.parseZone(date2);\r\n    localeData = date1.localeData();\r\n    // Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\".\r\n    // BTW, this is not important for `formatDate` because it is impossible to put custom tokens\r\n    // or non-zero areas in Moment's localized format strings.\r\n    formatStr = localeData.longDateFormat(formatStr) || formatStr;\r\n    return renderParsedFormat(getParsedFormatString(formatStr), date1, date2, separator || ' - ', isRTL);\r\n}\r\nexports.formatRange = formatRange;\r\n/*\r\nRenders a range with an already-parsed format string.\r\n*/\r\nfunction renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\r\n    var sameUnits = parsedFormat.sameUnits;\r\n    var unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\r\n    var unzonedDate2 = date2.clone().stripZone(); // \"\r\n    var renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\r\n    var renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\r\n    var leftI;\r\n    var leftStr = '';\r\n    var rightI;\r\n    var rightStr = '';\r\n    var middleI;\r\n    var middleStr1 = '';\r\n    var middleStr2 = '';\r\n    var middleStr = '';\r\n    // Start at the leftmost side of the formatting string and continue until you hit a token\r\n    // that is not the same between dates.\r\n    for (leftI = 0; leftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI])); leftI++) {\r\n        leftStr += renderedParts1[leftI];\r\n    }\r\n    // Similarly, start at the rightmost side of the formatting string and move left\r\n    for (rightI = sameUnits.length - 1; rightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI])); rightI--) {\r\n        // If current chunk is on the boundary of unique date-content, and is a special-case\r\n        // date-formatting postfix character, then don't consume it. Consider it unique date-content.\r\n        // TODO: make configurable\r\n        if (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\r\n            break;\r\n        }\r\n        rightStr = renderedParts1[rightI] + rightStr;\r\n    }\r\n    // The area in the middle is different for both of the dates.\r\n    // Collect them distinctly so we can jam them together later.\r\n    for (middleI = leftI; middleI <= rightI; middleI++) {\r\n        middleStr1 += renderedParts1[middleI];\r\n        middleStr2 += renderedParts2[middleI];\r\n    }\r\n    if (middleStr1 || middleStr2) {\r\n        if (isRTL) {\r\n            middleStr = middleStr2 + separator + middleStr1;\r\n        }\r\n        else {\r\n            middleStr = middleStr1 + separator + middleStr2;\r\n        }\r\n    }\r\n    return processMaybeMarkers(leftStr + middleStr + rightStr);\r\n}\r\n// Format String Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nvar parsedFormatStrCache = {};\r\n/*\r\nReturns a parsed format string, leveraging a cache.\r\n*/\r\nfunction getParsedFormatString(formatStr) {\r\n    return parsedFormatStrCache[formatStr] ||\r\n        (parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\r\n}\r\n/*\r\nParses a format string into the following:\r\n- fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\r\n- sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \"day\"),\r\n  that indicates how similar a range's start & end must be in order to share the same formatted text.\r\n  If not a token, then the value is null.\r\n  Always a flat array (not nested liked \"chunks\").\r\n*/\r\nfunction parseFormatString(formatStr) {\r\n    var chunks = chunkFormatString(formatStr);\r\n    return {\r\n        fakeFormatString: buildFakeFormatString(chunks),\r\n        sameUnits: buildSameUnits(chunks)\r\n    };\r\n}\r\n/*\r\nBreak the formatting string into an array of chunks.\r\nA 'maybe' chunk will have nested chunks.\r\n*/\r\nfunction chunkFormatString(formatStr) {\r\n    var chunks = [];\r\n    var match;\r\n    // TODO: more descrimination\r\n    // \\4 is a backreference to the first character of a multi-character set.\r\n    var chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\r\n    while ((match = chunker.exec(formatStr))) {\r\n        if (match[1]) { // a literal string inside [ ... ]\r\n            chunks.push.apply(chunks, // append\r\n            splitStringLiteral(match[1]));\r\n        }\r\n        else if (match[2]) { // non-zero formatting inside ( ... )\r\n            chunks.push({ maybe: chunkFormatString(match[2]) });\r\n        }\r\n        else if (match[3]) { // a formatting token\r\n            chunks.push({ token: match[3] });\r\n        }\r\n        else if (match[5]) { // an unenclosed literal string\r\n            chunks.push.apply(chunks, // append\r\n            splitStringLiteral(match[5]));\r\n        }\r\n    }\r\n    return chunks;\r\n}\r\n/*\r\nPotentially splits a literal-text string into multiple parts. For special cases.\r\n*/\r\nfunction splitStringLiteral(s) {\r\n    if (s === '. ') {\r\n        return ['.', ' ']; // for locales with periods bound to the end of each year/month/date\r\n    }\r\n    else {\r\n        return [s];\r\n    }\r\n}\r\n/*\r\nGiven chunks parsed from a real format string, generate a fake (aka \"intermediate\") format string with special control\r\ncharacters that will eventually be given to moment for formatting, and then post-processed.\r\n*/\r\nfunction buildFakeFormatString(chunks) {\r\n    var parts = [];\r\n    var i;\r\n    var chunk;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (typeof chunk === 'string') {\r\n            parts.push('[' + chunk + ']');\r\n        }\r\n        else if (chunk.token) {\r\n            if (chunk.token in specialTokens) {\r\n                parts.push(SPECIAL_TOKEN_MARKER + // useful during post-processing\r\n                    '[' + chunk.token + ']' // preserve as literal text\r\n                );\r\n            }\r\n            else {\r\n                parts.push(chunk.token); // unprotected text implies a format string\r\n            }\r\n        }\r\n        else if (chunk.maybe) {\r\n            parts.push(MAYBE_MARKER + // useful during post-processing\r\n                buildFakeFormatString(chunk.maybe) +\r\n                MAYBE_MARKER);\r\n        }\r\n    }\r\n    return parts.join(PART_SEPARATOR);\r\n}\r\n/*\r\nGiven parsed chunks from a real formatting string, generates an array of unit strings (like \"day\") that indicate\r\nin which regard two dates must be similar in order to share range formatting text.\r\nThe `chunks` can be nested (because of \"maybe\" chunks), however, the returned array will be flat.\r\n*/\r\nfunction buildSameUnits(chunks) {\r\n    var units = [];\r\n    var i;\r\n    var chunk;\r\n    var tokenInfo;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (chunk.token) {\r\n            tokenInfo = largeTokenMap[chunk.token.charAt(0)];\r\n            units.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\r\n        }\r\n        else if (chunk.maybe) {\r\n            units.push.apply(units, // append\r\n            buildSameUnits(chunk.maybe));\r\n        }\r\n        else {\r\n            units.push(null);\r\n        }\r\n    }\r\n    return units;\r\n}\r\n// Rendering to text\r\n// ---------------------------------------------------------------------------------------------------------------------\r\n/*\r\nFormats a date with a fake format string, post-processes the control characters, then returns.\r\n*/\r\nfunction renderFakeFormatString(fakeFormatString, date) {\r\n    return processMaybeMarkers(renderFakeFormatStringParts(fakeFormatString, date).join(''));\r\n}\r\n/*\r\nFormats a date into parts that will have been post-processed, EXCEPT for the \"maybe\" markers.\r\n*/\r\nfunction renderFakeFormatStringParts(fakeFormatString, date) {\r\n    var parts = [];\r\n    var fakeRender = moment_ext_1.oldMomentFormat(date, fakeFormatString);\r\n    var fakeParts = fakeRender.split(PART_SEPARATOR);\r\n    var i;\r\n    var fakePart;\r\n    for (i = 0; i < fakeParts.length; i++) {\r\n        fakePart = fakeParts[i];\r\n        if (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\r\n            parts.push(\r\n            // the literal string IS the token's name.\r\n            // call special token's registered function.\r\n            specialTokens[fakePart.substring(1)](date));\r\n        }\r\n        else {\r\n            parts.push(fakePart);\r\n        }\r\n    }\r\n    return parts;\r\n}\r\n/*\r\nAccepts an almost-finally-formatted string and processes the \"maybe\" control characters, returning a new string.\r\n*/\r\nfunction processMaybeMarkers(s) {\r\n    return s.replace(MAYBE_REGEXP, function (m0, m1) {\r\n        if (m1.match(/[1-9]/)) { // any non-zero numeric characters?\r\n            return m1;\r\n        }\r\n        else {\r\n            return '';\r\n        }\r\n    });\r\n}\r\n// Misc Utils\r\n// -------------------------------------------------------------------------------------------------\r\n/*\r\nReturns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\r\n*/\r\nfunction queryMostGranularFormatUnit(formatStr) {\r\n    var chunks = chunkFormatString(formatStr);\r\n    var i;\r\n    var chunk;\r\n    var candidate;\r\n    var best;\r\n    for (i = 0; i < chunks.length; i++) {\r\n        chunk = chunks[i];\r\n        if (chunk.token) {\r\n            candidate = largeTokenMap[chunk.token.charAt(0)];\r\n            if (candidate) {\r\n                if (!best || candidate.value > best.value) {\r\n                    best = candidate;\r\n                }\r\n            }\r\n        }\r\n    }\r\n    if (best) {\r\n        return best.unit;\r\n    }\r\n    return null;\r\n}\r\nexports.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\r\n\n\n/***/ }),\n/* 50 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventRange = /** @class */ (function () {\r\n    function EventRange(unzonedRange, eventDef, eventInstance) {\r\n        this.unzonedRange = unzonedRange;\r\n        this.eventDef = eventDef;\r\n        if (eventInstance) {\r\n            this.eventInstance = eventInstance;\r\n        }\r\n    }\r\n    return EventRange;\r\n}());\r\nexports.default = EventRange;\r\n\n\n/***/ }),\n/* 51 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Class_1 = __webpack_require__(35);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Model = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Model, _super);\r\n    function Model() {\r\n        var _this = _super.call(this) || this;\r\n        _this._watchers = {};\r\n        _this._props = {};\r\n        _this.applyGlobalWatchers();\r\n        _this.constructed();\r\n        return _this;\r\n    }\r\n    Model.watch = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        // subclasses should make a masked-copy of the superclass's map\r\n        // TODO: write test\r\n        if (!this.prototype.hasOwnProperty('_globalWatchArgs')) {\r\n            this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs);\r\n        }\r\n        this.prototype._globalWatchArgs[name] = args;\r\n    };\r\n    Model.prototype.constructed = function () {\r\n        // useful for monkeypatching. TODO: BaseClass?\r\n    };\r\n    Model.prototype.applyGlobalWatchers = function () {\r\n        var map = this._globalWatchArgs;\r\n        var name;\r\n        for (name in map) {\r\n            this.watch.apply(this, [name].concat(map[name]));\r\n        }\r\n    };\r\n    Model.prototype.has = function (name) {\r\n        return name in this._props;\r\n    };\r\n    Model.prototype.get = function (name) {\r\n        if (name === undefined) {\r\n            return this._props;\r\n        }\r\n        return this._props[name];\r\n    };\r\n    Model.prototype.set = function (name, val) {\r\n        var newProps;\r\n        if (typeof name === 'string') {\r\n            newProps = {};\r\n            newProps[name] = val === undefined ? null : val;\r\n        }\r\n        else {\r\n            newProps = name;\r\n        }\r\n        this.setProps(newProps);\r\n    };\r\n    Model.prototype.reset = function (newProps) {\r\n        var oldProps = this._props;\r\n        var changeset = {}; // will have undefined's to signal unsets\r\n        var name;\r\n        for (name in oldProps) {\r\n            changeset[name] = undefined;\r\n        }\r\n        for (name in newProps) {\r\n            changeset[name] = newProps[name];\r\n        }\r\n        this.setProps(changeset);\r\n    };\r\n    Model.prototype.unset = function (name) {\r\n        var newProps = {};\r\n        var names;\r\n        var i;\r\n        if (typeof name === 'string') {\r\n            names = [name];\r\n        }\r\n        else {\r\n            names = name;\r\n        }\r\n        for (i = 0; i < names.length; i++) {\r\n            newProps[names[i]] = undefined;\r\n        }\r\n        this.setProps(newProps);\r\n    };\r\n    Model.prototype.setProps = function (newProps) {\r\n        var changedProps = {};\r\n        var changedCnt = 0;\r\n        var name;\r\n        var val;\r\n        for (name in newProps) {\r\n            val = newProps[name];\r\n            // a change in value?\r\n            // if an object, don't check equality, because might have been mutated internally.\r\n            // TODO: eventually enforce immutability.\r\n            if (typeof val === 'object' ||\r\n                val !== this._props[name]) {\r\n                changedProps[name] = val;\r\n                changedCnt++;\r\n            }\r\n        }\r\n        if (changedCnt) {\r\n            this.trigger('before:batchChange', changedProps);\r\n            for (name in changedProps) {\r\n                val = changedProps[name];\r\n                this.trigger('before:change', name, val);\r\n                this.trigger('before:change:' + name, val);\r\n            }\r\n            for (name in changedProps) {\r\n                val = changedProps[name];\r\n                if (val === undefined) {\r\n                    delete this._props[name];\r\n                }\r\n                else {\r\n                    this._props[name] = val;\r\n                }\r\n                this.trigger('change:' + name, val);\r\n                this.trigger('change', name, val);\r\n            }\r\n            this.trigger('batchChange', changedProps);\r\n        }\r\n    };\r\n    Model.prototype.watch = function (name, depList, startFunc, stopFunc) {\r\n        var _this = this;\r\n        this.unwatch(name);\r\n        this._watchers[name] = this._watchDeps(depList, function (deps) {\r\n            var res = startFunc.call(_this, deps);\r\n            if (res && res.then) {\r\n                _this.unset(name); // put in an unset state while resolving\r\n                res.then(function (val) {\r\n                    _this.set(name, val);\r\n                });\r\n            }\r\n            else {\r\n                _this.set(name, res);\r\n            }\r\n        }, function (deps) {\r\n            _this.unset(name);\r\n            if (stopFunc) {\r\n                stopFunc.call(_this, deps);\r\n            }\r\n        });\r\n    };\r\n    Model.prototype.unwatch = function (name) {\r\n        var watcher = this._watchers[name];\r\n        if (watcher) {\r\n            delete this._watchers[name];\r\n            watcher.teardown();\r\n        }\r\n    };\r\n    Model.prototype._watchDeps = function (depList, startFunc, stopFunc) {\r\n        var _this = this;\r\n        var queuedChangeCnt = 0;\r\n        var depCnt = depList.length;\r\n        var satisfyCnt = 0;\r\n        var values = {}; // what's passed as the `deps` arguments\r\n        var bindTuples = []; // array of [ eventName, handlerFunc ] arrays\r\n        var isCallingStop = false;\r\n        var onBeforeDepChange = function (depName, val, isOptional) {\r\n            queuedChangeCnt++;\r\n            if (queuedChangeCnt === 1) { // first change to cause a \"stop\" ?\r\n                if (satisfyCnt === depCnt) { // all deps previously satisfied?\r\n                    isCallingStop = true;\r\n                    stopFunc(values);\r\n                    isCallingStop = false;\r\n                }\r\n            }\r\n        };\r\n        var onDepChange = function (depName, val, isOptional) {\r\n            if (val === undefined) { // unsetting a value?\r\n                // required dependency that was previously set?\r\n                if (!isOptional && values[depName] !== undefined) {\r\n                    satisfyCnt--;\r\n                }\r\n                delete values[depName];\r\n            }\r\n            else { // setting a value?\r\n                // required dependency that was previously unset?\r\n                if (!isOptional && values[depName] === undefined) {\r\n                    satisfyCnt++;\r\n                }\r\n                values[depName] = val;\r\n            }\r\n            queuedChangeCnt--;\r\n            if (!queuedChangeCnt) { // last change to cause a \"start\"?\r\n                // now finally satisfied or satisfied all along?\r\n                if (satisfyCnt === depCnt) {\r\n                    // if the stopFunc initiated another value change, ignore it.\r\n                    // it will be processed by another change event anyway.\r\n                    if (!isCallingStop) {\r\n                        startFunc(values);\r\n                    }\r\n                }\r\n            }\r\n        };\r\n        // intercept for .on() that remembers handlers\r\n        var bind = function (eventName, handler) {\r\n            _this.on(eventName, handler);\r\n            bindTuples.push([eventName, handler]);\r\n        };\r\n        // listen to dependency changes\r\n        depList.forEach(function (depName) {\r\n            var isOptional = false;\r\n            if (depName.charAt(0) === '?') { // TODO: more DRY\r\n                depName = depName.substring(1);\r\n                isOptional = true;\r\n            }\r\n            bind('before:change:' + depName, function (val) {\r\n                onBeforeDepChange(depName, val, isOptional);\r\n            });\r\n            bind('change:' + depName, function (val) {\r\n                onDepChange(depName, val, isOptional);\r\n            });\r\n        });\r\n        // process current dependency values\r\n        depList.forEach(function (depName) {\r\n            var isOptional = false;\r\n            if (depName.charAt(0) === '?') { // TODO: more DRY\r\n                depName = depName.substring(1);\r\n                isOptional = true;\r\n            }\r\n            if (_this.has(depName)) {\r\n                values[depName] = _this.get(depName);\r\n                satisfyCnt++;\r\n            }\r\n            else if (isOptional) {\r\n                satisfyCnt++;\r\n            }\r\n        });\r\n        // initially satisfied\r\n        if (satisfyCnt === depCnt) {\r\n            startFunc(values);\r\n        }\r\n        return {\r\n            teardown: function () {\r\n                // remove all handlers\r\n                for (var i = 0; i < bindTuples.length; i++) {\r\n                    _this.off(bindTuples[i][0], bindTuples[i][1]);\r\n                }\r\n                bindTuples = null;\r\n                // was satisfied, so call stopFunc\r\n                if (satisfyCnt === depCnt) {\r\n                    stopFunc();\r\n                }\r\n            },\r\n            flash: function () {\r\n                if (satisfyCnt === depCnt) {\r\n                    stopFunc();\r\n                    startFunc(values);\r\n                }\r\n            }\r\n        };\r\n    };\r\n    Model.prototype.flash = function (name) {\r\n        var watcher = this._watchers[name];\r\n        if (watcher) {\r\n            watcher.flash();\r\n        }\r\n    };\r\n    return Model;\r\n}(Class_1.default));\r\nexports.default = Model;\r\nModel.prototype._globalWatchArgs = {}; // mutation protection in Model.watch\r\nEmitterMixin_1.default.mixInto(Model);\r\nListenerMixin_1.default.mixInto(Model);\r\n\n\n/***/ }),\n/* 52 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/*\r\nUSAGE:\r\n  import { default as ParsableModelMixin, ParsableModelInterface } from './ParsableModelMixin'\r\nin class:\r\n  applyProps: ParsableModelInterface['applyProps']\r\n  applyManualStandardProps: ParsableModelInterface['applyManualStandardProps']\r\n  applyMiscProps: ParsableModelInterface['applyMiscProps']\r\n  isStandardProp: ParsableModelInterface['isStandardProp']\r\n  static defineStandardProps = ParsableModelMixin.defineStandardProps\r\n  static copyVerbatimStandardProps = ParsableModelMixin.copyVerbatimStandardProps\r\nafter class:\r\n  ParsableModelMixin.mixInto(TheClass)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar ParsableModelMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ParsableModelMixin, _super);\r\n    function ParsableModelMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ParsableModelMixin.defineStandardProps = function (propDefs) {\r\n        var proto = this.prototype;\r\n        if (!proto.hasOwnProperty('standardPropMap')) {\r\n            proto.standardPropMap = Object.create(proto.standardPropMap);\r\n        }\r\n        util_1.copyOwnProps(propDefs, proto.standardPropMap);\r\n    };\r\n    ParsableModelMixin.copyVerbatimStandardProps = function (src, dest) {\r\n        var map = this.prototype.standardPropMap;\r\n        var propName;\r\n        for (propName in map) {\r\n            if (src[propName] != null && // in the src object?\r\n                map[propName] === true // false means \"copy verbatim\"\r\n            ) {\r\n                dest[propName] = src[propName];\r\n            }\r\n        }\r\n    };\r\n    /*\r\n    Returns true/false for success.\r\n    Meant to be only called ONCE, at object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyProps = function (rawProps) {\r\n        var standardPropMap = this.standardPropMap;\r\n        var manualProps = {};\r\n        var miscProps = {};\r\n        var propName;\r\n        for (propName in rawProps) {\r\n            if (standardPropMap[propName] === true) { // copy verbatim\r\n                this[propName] = rawProps[propName];\r\n            }\r\n            else if (standardPropMap[propName] === false) {\r\n                manualProps[propName] = rawProps[propName];\r\n            }\r\n            else {\r\n                miscProps[propName] = rawProps[propName];\r\n            }\r\n        }\r\n        this.applyMiscProps(miscProps);\r\n        return this.applyManualStandardProps(manualProps);\r\n    };\r\n    /*\r\n    If subclasses override, they must call this supermethod and return the boolean response.\r\n    Meant to be only called ONCE, at object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyManualStandardProps = function (rawProps) {\r\n        return true;\r\n    };\r\n    /*\r\n    Can be called even after initial object creation.\r\n    */\r\n    ParsableModelMixin.prototype.applyMiscProps = function (rawProps) {\r\n        // subclasses can implement\r\n    };\r\n    /*\r\n    TODO: why is this a method when defineStandardProps is static\r\n    */\r\n    ParsableModelMixin.prototype.isStandardProp = function (propName) {\r\n        return propName in this.standardPropMap;\r\n    };\r\n    return ParsableModelMixin;\r\n}(Mixin_1.default));\r\nexports.default = ParsableModelMixin;\r\nParsableModelMixin.prototype.standardPropMap = {}; // will be cloned by defineStandardProps\r\n\n\n/***/ }),\n/* 53 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventInstance = /** @class */ (function () {\r\n    function EventInstance(def, dateProfile) {\r\n        this.def = def;\r\n        this.dateProfile = dateProfile;\r\n    }\r\n    EventInstance.prototype.toLegacy = function () {\r\n        var dateProfile = this.dateProfile;\r\n        var obj = this.def.toLegacy();\r\n        obj.start = dateProfile.start.clone();\r\n        obj.end = dateProfile.end ? dateProfile.end.clone() : null;\r\n        return obj;\r\n    };\r\n    return EventInstance;\r\n}());\r\nexports.default = EventInstance;\r\n\n\n/***/ }),\n/* 54 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar EventDef_1 = __webpack_require__(37);\r\nvar EventInstance_1 = __webpack_require__(53);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar RecurringEventDef = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RecurringEventDef, _super);\r\n    function RecurringEventDef() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    RecurringEventDef.prototype.isAllDay = function () {\r\n        return !this.startTime && !this.endTime;\r\n    };\r\n    RecurringEventDef.prototype.buildInstances = function (unzonedRange) {\r\n        var calendar = this.source.calendar;\r\n        var unzonedDate = unzonedRange.getStart();\r\n        var unzonedEnd = unzonedRange.getEnd();\r\n        var zonedDayStart;\r\n        var instanceStart;\r\n        var instanceEnd;\r\n        var instances = [];\r\n        while (unzonedDate.isBefore(unzonedEnd)) {\r\n            // if everyday, or this particular day-of-week\r\n            if (!this.dowHash || this.dowHash[unzonedDate.day()]) {\r\n                zonedDayStart = calendar.applyTimezone(unzonedDate);\r\n                instanceStart = zonedDayStart.clone();\r\n                instanceEnd = null;\r\n                if (this.startTime) {\r\n                    instanceStart.time(this.startTime);\r\n                }\r\n                else {\r\n                    instanceStart.stripTime();\r\n                }\r\n                if (this.endTime) {\r\n                    instanceEnd = zonedDayStart.clone().time(this.endTime);\r\n                }\r\n                instances.push(new EventInstance_1.default(this, // definition\r\n                new EventDateProfile_1.default(instanceStart, instanceEnd, calendar)));\r\n            }\r\n            unzonedDate.add(1, 'days');\r\n        }\r\n        return instances;\r\n    };\r\n    RecurringEventDef.prototype.setDow = function (dowNumbers) {\r\n        if (!this.dowHash) {\r\n            this.dowHash = {};\r\n        }\r\n        for (var i = 0; i < dowNumbers.length; i++) {\r\n            this.dowHash[dowNumbers[i]] = true;\r\n        }\r\n    };\r\n    RecurringEventDef.prototype.clone = function () {\r\n        var def = _super.prototype.clone.call(this);\r\n        if (def.startTime) {\r\n            def.startTime = moment.duration(this.startTime);\r\n        }\r\n        if (def.endTime) {\r\n            def.endTime = moment.duration(this.endTime);\r\n        }\r\n        if (this.dowHash) {\r\n            def.dowHash = $.extend({}, this.dowHash);\r\n        }\r\n        return def;\r\n    };\r\n    return RecurringEventDef;\r\n}(EventDef_1.default));\r\nexports.default = RecurringEventDef;\r\n/*\r\nHACK to work with TypeScript mixins\r\nNOTE: if super-method fails, should still attempt to apply\r\n*/\r\nRecurringEventDef.prototype.applyProps = function (rawProps) {\r\n    var superSuccess = EventDef_1.default.prototype.applyProps.call(this, rawProps);\r\n    if (rawProps.start) {\r\n        this.startTime = moment.duration(rawProps.start);\r\n    }\r\n    if (rawProps.end) {\r\n        this.endTime = moment.duration(rawProps.end);\r\n    }\r\n    if (rawProps.dow) {\r\n        this.setDow(rawProps.dow);\r\n    }\r\n    return superSuccess;\r\n};\r\n// Parsing\r\n// ---------------------------------------------------------------------------------------------------------------------\r\nRecurringEventDef.defineStandardProps({\r\n    start: false,\r\n    end: false,\r\n    dow: false\r\n});\r\n\n\n/***/ }),\n/* 55 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator = /** @class */ (function () {\r\n    function DateProfileGenerator(_view) {\r\n        this._view = _view;\r\n    }\r\n    DateProfileGenerator.prototype.opt = function (name) {\r\n        return this._view.opt(name);\r\n    };\r\n    DateProfileGenerator.prototype.trimHiddenDays = function (unzonedRange) {\r\n        return this._view.trimHiddenDays(unzonedRange);\r\n    };\r\n    DateProfileGenerator.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n        return this._view.calendar.msToUtcMoment(ms, forceAllDay);\r\n    };\r\n    /* Date Range Computation\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\r\n    DateProfileGenerator.prototype.buildPrev = function (currentDateProfile) {\r\n        var prevDate = currentDateProfile.date.clone()\r\n            .startOf(currentDateProfile.currentRangeUnit)\r\n            .subtract(currentDateProfile.dateIncrement);\r\n        return this.build(prevDate, -1);\r\n    };\r\n    // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\r\n    DateProfileGenerator.prototype.buildNext = function (currentDateProfile) {\r\n        var nextDate = currentDateProfile.date.clone()\r\n            .startOf(currentDateProfile.currentRangeUnit)\r\n            .add(currentDateProfile.dateIncrement);\r\n        return this.build(nextDate, 1);\r\n    };\r\n    // Builds a structure holding dates/ranges for rendering around the given date.\r\n    // Optional direction param indicates whether the date is being incremented/decremented\r\n    // from its previous value. decremented = -1, incremented = 1 (default).\r\n    DateProfileGenerator.prototype.build = function (date, direction, forceToValid) {\r\n        if (forceToValid === void 0) { forceToValid = false; }\r\n        var isDateAllDay = !date.hasTime();\r\n        var validUnzonedRange;\r\n        var minTime = null;\r\n        var maxTime = null;\r\n        var currentInfo;\r\n        var isRangeAllDay;\r\n        var renderUnzonedRange;\r\n        var activeUnzonedRange;\r\n        var isValid;\r\n        validUnzonedRange = this.buildValidRange();\r\n        validUnzonedRange = this.trimHiddenDays(validUnzonedRange);\r\n        if (forceToValid) {\r\n            date = this.msToUtcMoment(validUnzonedRange.constrainDate(date), // returns MS\r\n            isDateAllDay);\r\n        }\r\n        currentInfo = this.buildCurrentRangeInfo(date, direction);\r\n        isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\r\n        renderUnzonedRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.unzonedRange), currentInfo.unit, isRangeAllDay);\r\n        renderUnzonedRange = this.trimHiddenDays(renderUnzonedRange);\r\n        activeUnzonedRange = renderUnzonedRange.clone();\r\n        if (!this.opt('showNonCurrentDates')) {\r\n            activeUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);\r\n        }\r\n        minTime = moment.duration(this.opt('minTime'));\r\n        maxTime = moment.duration(this.opt('maxTime'));\r\n        activeUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);\r\n        activeUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange); // might return null\r\n        if (activeUnzonedRange) {\r\n            date = this.msToUtcMoment(activeUnzonedRange.constrainDate(date), // returns MS\r\n            isDateAllDay);\r\n        }\r\n        // it's invalid if the originally requested date is not contained,\r\n        // or if the range is completely outside of the valid range.\r\n        isValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);\r\n        return {\r\n            // constraint for where prev/next operations can go and where events can be dragged/resized to.\r\n            // an object with optional start and end properties.\r\n            validUnzonedRange: validUnzonedRange,\r\n            // range the view is formally responsible for.\r\n            // for example, a month view might have 1st-31st, excluding padded dates\r\n            currentUnzonedRange: currentInfo.unzonedRange,\r\n            // name of largest unit being displayed, like \"month\" or \"week\"\r\n            currentRangeUnit: currentInfo.unit,\r\n            isRangeAllDay: isRangeAllDay,\r\n            // dates that display events and accept drag-n-drop\r\n            // will be `null` if no dates accept events\r\n            activeUnzonedRange: activeUnzonedRange,\r\n            // date range with a rendered skeleton\r\n            // includes not-active days that need some sort of DOM\r\n            renderUnzonedRange: renderUnzonedRange,\r\n            // Duration object that denotes the first visible time of any given day\r\n            minTime: minTime,\r\n            // Duration object that denotes the exclusive visible end time of any given day\r\n            maxTime: maxTime,\r\n            isValid: isValid,\r\n            date: date,\r\n            // how far the current date will move for a prev/next operation\r\n            dateIncrement: this.buildDateIncrement(currentInfo.duration)\r\n            // pass a fallback (might be null) ^\r\n        };\r\n    };\r\n    // Builds an object with optional start/end properties.\r\n    // Indicates the minimum/maximum dates to display.\r\n    // not responsible for trimming hidden days.\r\n    DateProfileGenerator.prototype.buildValidRange = function () {\r\n        return this._view.getUnzonedRangeOption('validRange', this._view.calendar.getNow()) ||\r\n            new UnzonedRange_1.default(); // completely open-ended\r\n    };\r\n    // Builds a structure with info about the \"current\" range, the range that is\r\n    // highlighted as being the current month for example.\r\n    // See build() for a description of `direction`.\r\n    // Guaranteed to have `range` and `unit` properties. `duration` is optional.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\r\n        var viewSpec = this._view.viewSpec;\r\n        var duration = null;\r\n        var unit = null;\r\n        var unzonedRange = null;\r\n        var dayCount;\r\n        if (viewSpec.duration) {\r\n            duration = viewSpec.duration;\r\n            unit = viewSpec.durationUnit;\r\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n        }\r\n        else if ((dayCount = this.opt('dayCount'))) {\r\n            unit = 'day';\r\n            unzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);\r\n        }\r\n        else if ((unzonedRange = this.buildCustomVisibleRange(date))) {\r\n            unit = util_1.computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());\r\n        }\r\n        else {\r\n            duration = this.getFallbackDuration();\r\n            unit = util_1.computeGreatestUnit(duration);\r\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\r\n        }\r\n        return { duration: duration, unit: unit, unzonedRange: unzonedRange };\r\n    };\r\n    DateProfileGenerator.prototype.getFallbackDuration = function () {\r\n        return moment.duration({ days: 1 });\r\n    };\r\n    // Returns a new activeUnzonedRange to have time values (un-ambiguate)\r\n    // minTime or maxTime causes the range to expand.\r\n    DateProfileGenerator.prototype.adjustActiveRange = function (unzonedRange, minTime, maxTime) {\r\n        var start = unzonedRange.getStart();\r\n        var end = unzonedRange.getEnd();\r\n        if (this._view.usesMinMaxTime) {\r\n            if (minTime < 0) {\r\n                start.time(0).add(minTime);\r\n            }\r\n            if (maxTime > 24 * 60 * 60 * 1000) { // beyond 24 hours?\r\n                end.time(maxTime - (24 * 60 * 60 * 1000));\r\n            }\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Builds the \"current\" range when it is specified as an explicit duration.\r\n    // `unit` is the already-computed computeGreatestUnit value of duration.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\r\n        var alignment = this.opt('dateAlignment');\r\n        var dateIncrementInput;\r\n        var dateIncrementDuration;\r\n        var start;\r\n        var end;\r\n        var res;\r\n        // compute what the alignment should be\r\n        if (!alignment) {\r\n            dateIncrementInput = this.opt('dateIncrement');\r\n            if (dateIncrementInput) {\r\n                dateIncrementDuration = moment.duration(dateIncrementInput);\r\n                // use the smaller of the two units\r\n                if (dateIncrementDuration < duration) {\r\n                    alignment = util_1.computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\r\n                }\r\n                else {\r\n                    alignment = unit;\r\n                }\r\n            }\r\n            else {\r\n                alignment = unit;\r\n            }\r\n        }\r\n        // if the view displays a single day or smaller\r\n        if (duration.as('days') <= 1) {\r\n            if (this._view.isHiddenDay(start)) {\r\n                start = this._view.skipHiddenDays(start, direction);\r\n                start.startOf('day');\r\n            }\r\n        }\r\n        function computeRes() {\r\n            start = date.clone().startOf(alignment);\r\n            end = start.clone().add(duration);\r\n            res = new UnzonedRange_1.default(start, end);\r\n        }\r\n        computeRes();\r\n        // if range is completely enveloped by hidden days, go past the hidden days\r\n        if (!this.trimHiddenDays(res)) {\r\n            date = this._view.skipHiddenDays(date, direction);\r\n            computeRes();\r\n        }\r\n        return res;\r\n    };\r\n    // Builds the \"current\" range when a dayCount is specified.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\r\n        var customAlignment = this.opt('dateAlignment');\r\n        var runningCount = 0;\r\n        var start;\r\n        var end;\r\n        if (customAlignment || direction !== -1) {\r\n            start = date.clone();\r\n            if (customAlignment) {\r\n                start.startOf(customAlignment);\r\n            }\r\n            start.startOf('day');\r\n            start = this._view.skipHiddenDays(start);\r\n            end = start.clone();\r\n            do {\r\n                end.add(1, 'day');\r\n                if (!this._view.isHiddenDay(end)) {\r\n                    runningCount++;\r\n                }\r\n            } while (runningCount < dayCount);\r\n        }\r\n        else {\r\n            end = date.clone().startOf('day').add(1, 'day');\r\n            end = this._view.skipHiddenDays(end, -1, true);\r\n            start = end.clone();\r\n            do {\r\n                start.add(-1, 'day');\r\n                if (!this._view.isHiddenDay(start)) {\r\n                    runningCount++;\r\n                }\r\n            } while (runningCount < dayCount);\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Builds a normalized range object for the \"visible\" range,\r\n    // which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.\r\n    // TODO: accept a MS-time instead of a moment `date`?\r\n    DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\r\n        var visibleUnzonedRange = this._view.getUnzonedRangeOption('visibleRange', this._view.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations\r\n        );\r\n        if (visibleUnzonedRange && (visibleUnzonedRange.startMs == null || visibleUnzonedRange.endMs == null)) {\r\n            return null;\r\n        }\r\n        return visibleUnzonedRange;\r\n    };\r\n    // Computes the range that will represent the element/cells for *rendering*,\r\n    // but which may have voided days/times.\r\n    // not responsible for trimming hidden days.\r\n    DateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        return currentUnzonedRange.clone();\r\n    };\r\n    // Compute the duration value that should be added/substracted to the current date\r\n    // when a prev/next operation happens.\r\n    DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\r\n        var dateIncrementInput = this.opt('dateIncrement');\r\n        var customAlignment;\r\n        if (dateIncrementInput) {\r\n            return moment.duration(dateIncrementInput);\r\n        }\r\n        else if ((customAlignment = this.opt('dateAlignment'))) {\r\n            return moment.duration(1, customAlignment);\r\n        }\r\n        else if (fallback) {\r\n            return fallback;\r\n        }\r\n        else {\r\n            return moment.duration({ days: 1 });\r\n        }\r\n    };\r\n    return DateProfileGenerator;\r\n}());\r\nexports.default = DateProfileGenerator;\r\n\n\n/***/ }),\n/* 56 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar ArrayEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ArrayEventSource, _super);\r\n    function ArrayEventSource(calendar) {\r\n        var _this = _super.call(this, calendar) || this;\r\n        _this.eventDefs = []; // for if setRawEventDefs is never called\r\n        return _this;\r\n    }\r\n    ArrayEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if ($.isArray(rawInput.events)) { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if ($.isArray(rawInput)) { // short form\r\n            rawProps = { events: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    ArrayEventSource.prototype.setRawEventDefs = function (rawEventDefs) {\r\n        this.rawEventDefs = rawEventDefs;\r\n        this.eventDefs = this.parseEventDefs(rawEventDefs);\r\n    };\r\n    ArrayEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var eventDefs = this.eventDefs;\r\n        var i;\r\n        if (this.currentTimezone != null &&\r\n            this.currentTimezone !== timezone) {\r\n            for (i = 0; i < eventDefs.length; i++) {\r\n                if (eventDefs[i] instanceof SingleEventDef_1.default) {\r\n                    eventDefs[i].rezone();\r\n                }\r\n            }\r\n        }\r\n        this.currentTimezone = timezone;\r\n        return Promise_1.default.resolve(eventDefs);\r\n    };\r\n    ArrayEventSource.prototype.addEventDef = function (eventDef) {\r\n        this.eventDefs.push(eventDef);\r\n    };\r\n    /*\r\n    eventDefId already normalized to a string\r\n    */\r\n    ArrayEventSource.prototype.removeEventDefsById = function (eventDefId) {\r\n        return util_1.removeMatching(this.eventDefs, function (eventDef) {\r\n            return eventDef.id === eventDefId;\r\n        });\r\n    };\r\n    ArrayEventSource.prototype.removeAllEventDefs = function () {\r\n        this.eventDefs = [];\r\n    };\r\n    ArrayEventSource.prototype.getPrimitive = function () {\r\n        return this.rawEventDefs;\r\n    };\r\n    ArrayEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        this.setRawEventDefs(rawProps.events);\r\n        return superSuccess;\r\n    };\r\n    return ArrayEventSource;\r\n}(EventSource_1.default));\r\nexports.default = ArrayEventSource;\r\nArrayEventSource.defineStandardProps({\r\n    events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 57 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar themeClassHash = {};\r\nfunction defineThemeSystem(themeName, themeClass) {\r\n    themeClassHash[themeName] = themeClass;\r\n}\r\nexports.defineThemeSystem = defineThemeSystem;\r\nfunction getThemeSystemClass(themeSetting) {\r\n    if (!themeSetting) {\r\n        return StandardTheme_1.default;\r\n    }\r\n    else if (themeSetting === true) {\r\n        return JqueryUiTheme_1.default;\r\n    }\r\n    else {\r\n        return themeClassHash[themeSetting];\r\n    }\r\n}\r\nexports.getThemeSystemClass = getThemeSystemClass;\r\n\n\n/***/ }),\n/* 58 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/*\r\nA cache for the left/right/top/bottom/width/height values for one or more elements.\r\nWorks with both offset (from topleft document) and position (from offsetParent).\r\n\noptions:\r\n- els\r\n- isHorizontal\r\n- isVertical\r\n*/\r\nvar CoordCache = /** @class */ (function () {\r\n    function CoordCache(options) {\r\n        this.isHorizontal = false; // whether to query for left/right/width\r\n        this.isVertical = false; // whether to query for top/bottom/height\r\n        this.els = $(options.els);\r\n        this.isHorizontal = options.isHorizontal;\r\n        this.isVertical = options.isVertical;\r\n        this.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\r\n    }\r\n    // Queries the els for coordinates and stores them.\r\n    // Call this method before using and of the get* methods below.\r\n    CoordCache.prototype.build = function () {\r\n        var offsetParentEl = this.forcedOffsetParentEl;\r\n        if (!offsetParentEl && this.els.length > 0) {\r\n            offsetParentEl = this.els.eq(0).offsetParent();\r\n        }\r\n        this.origin = offsetParentEl ?\r\n            offsetParentEl.offset() :\r\n            null;\r\n        this.boundingRect = this.queryBoundingRect();\r\n        if (this.isHorizontal) {\r\n            this.buildElHorizontals();\r\n        }\r\n        if (this.isVertical) {\r\n            this.buildElVerticals();\r\n        }\r\n    };\r\n    // Destroys all internal data about coordinates, freeing memory\r\n    CoordCache.prototype.clear = function () {\r\n        this.origin = null;\r\n        this.boundingRect = null;\r\n        this.lefts = null;\r\n        this.rights = null;\r\n        this.tops = null;\r\n        this.bottoms = null;\r\n    };\r\n    // When called, if coord caches aren't built, builds them\r\n    CoordCache.prototype.ensureBuilt = function () {\r\n        if (!this.origin) {\r\n            this.build();\r\n        }\r\n    };\r\n    // Populates the left/right internal coordinate arrays\r\n    CoordCache.prototype.buildElHorizontals = function () {\r\n        var lefts = [];\r\n        var rights = [];\r\n        this.els.each(function (i, node) {\r\n            var el = $(node);\r\n            var left = el.offset().left;\r\n            var width = el.outerWidth();\r\n            lefts.push(left);\r\n            rights.push(left + width);\r\n        });\r\n        this.lefts = lefts;\r\n        this.rights = rights;\r\n    };\r\n    // Populates the top/bottom internal coordinate arrays\r\n    CoordCache.prototype.buildElVerticals = function () {\r\n        var tops = [];\r\n        var bottoms = [];\r\n        this.els.each(function (i, node) {\r\n            var el = $(node);\r\n            var top = el.offset().top;\r\n            var height = el.outerHeight();\r\n            tops.push(top);\r\n            bottoms.push(top + height);\r\n        });\r\n        this.tops = tops;\r\n        this.bottoms = bottoms;\r\n    };\r\n    // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\r\n    // If no intersection is made, returns undefined.\r\n    CoordCache.prototype.getHorizontalIndex = function (leftOffset) {\r\n        this.ensureBuilt();\r\n        var lefts = this.lefts;\r\n        var rights = this.rights;\r\n        var len = lefts.length;\r\n        var i;\r\n        for (i = 0; i < len; i++) {\r\n            if (leftOffset >= lefts[i] && leftOffset < rights[i]) {\r\n                return i;\r\n            }\r\n        }\r\n    };\r\n    // Given a top offset (from document top), returns the index of the el that it vertically intersects.\r\n    // If no intersection is made, returns undefined.\r\n    CoordCache.prototype.getVerticalIndex = function (topOffset) {\r\n        this.ensureBuilt();\r\n        var tops = this.tops;\r\n        var bottoms = this.bottoms;\r\n        var len = tops.length;\r\n        var i;\r\n        for (i = 0; i < len; i++) {\r\n            if (topOffset >= tops[i] && topOffset < bottoms[i]) {\r\n                return i;\r\n            }\r\n        }\r\n    };\r\n    // Gets the left offset (from document left) of the element at the given index\r\n    CoordCache.prototype.getLeftOffset = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.lefts[leftIndex];\r\n    };\r\n    // Gets the left position (from offsetParent left) of the element at the given index\r\n    CoordCache.prototype.getLeftPosition = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.lefts[leftIndex] - this.origin.left;\r\n    };\r\n    // Gets the right offset (from document left) of the element at the given index.\r\n    // This value is NOT relative to the document's right edge, like the CSS concept of \"right\" would be.\r\n    CoordCache.prototype.getRightOffset = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex];\r\n    };\r\n    // Gets the right position (from offsetParent left) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's right edge, like the CSS concept of \"right\" would be.\r\n    CoordCache.prototype.getRightPosition = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex] - this.origin.left;\r\n    };\r\n    // Gets the width of the element at the given index\r\n    CoordCache.prototype.getWidth = function (leftIndex) {\r\n        this.ensureBuilt();\r\n        return this.rights[leftIndex] - this.lefts[leftIndex];\r\n    };\r\n    // Gets the top offset (from document top) of the element at the given index\r\n    CoordCache.prototype.getTopOffset = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.tops[topIndex];\r\n    };\r\n    // Gets the top position (from offsetParent top) of the element at the given position\r\n    CoordCache.prototype.getTopPosition = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.tops[topIndex] - this.origin.top;\r\n    };\r\n    // Gets the bottom offset (from the document top) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n    CoordCache.prototype.getBottomOffset = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex];\r\n    };\r\n    // Gets the bottom position (from the offsetParent top) of the element at the given index.\r\n    // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\r\n    CoordCache.prototype.getBottomPosition = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex] - this.origin.top;\r\n    };\r\n    // Gets the height of the element at the given index\r\n    CoordCache.prototype.getHeight = function (topIndex) {\r\n        this.ensureBuilt();\r\n        return this.bottoms[topIndex] - this.tops[topIndex];\r\n    };\r\n    // Bounding Rect\r\n    // TODO: decouple this from CoordCache\r\n    // Compute and return what the elements' bounding rectangle is, from the user's perspective.\r\n    // Right now, only returns a rectangle if constrained by an overflow:scroll element.\r\n    // Returns null if there are no elements\r\n    CoordCache.prototype.queryBoundingRect = function () {\r\n        var scrollParentEl;\r\n        if (this.els.length > 0) {\r\n            scrollParentEl = util_1.getScrollParent(this.els.eq(0));\r\n            if (!scrollParentEl.is(document) &&\r\n                !scrollParentEl.is('html,body') // don't consider these bounding rects. solves issue 3615\r\n            ) {\r\n                return util_1.getClientRect(scrollParentEl);\r\n            }\r\n        }\r\n        return null;\r\n    };\r\n    CoordCache.prototype.isPointInBounds = function (leftOffset, topOffset) {\r\n        return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\r\n    };\r\n    CoordCache.prototype.isLeftInBounds = function (leftOffset) {\r\n        return !this.boundingRect || (leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right);\r\n    };\r\n    CoordCache.prototype.isTopInBounds = function (topOffset) {\r\n        return !this.boundingRect || (topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom);\r\n    };\r\n    return CoordCache;\r\n}());\r\nexports.default = CoordCache;\r\n\n\n/***/ }),\n/* 59 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\n/* Tracks a drag's mouse movement, firing various handlers\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// TODO: use Emitter\r\nvar DragListener = /** @class */ (function () {\r\n    function DragListener(options) {\r\n        this.isInteracting = false;\r\n        this.isDistanceSurpassed = false;\r\n        this.isDelayEnded = false;\r\n        this.isDragging = false;\r\n        this.isTouch = false;\r\n        this.isGeneric = false; // initiated by 'dragstart' (jqui)\r\n        this.shouldCancelTouchScroll = true;\r\n        this.scrollAlwaysKills = false;\r\n        this.isAutoScroll = false;\r\n        // defaults\r\n        this.scrollSensitivity = 30; // pixels from edge for scrolling to start\r\n        this.scrollSpeed = 200; // pixels per second, at maximum speed\r\n        this.scrollIntervalMs = 50; // millisecond wait between scroll increment\r\n        this.options = options || {};\r\n    }\r\n    // Interaction (high-level)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.startInteraction = function (ev, extraOptions) {\r\n        if (extraOptions === void 0) { extraOptions = {}; }\r\n        if (ev.type === 'mousedown') {\r\n            if (GlobalEmitter_1.default.get().shouldIgnoreMouse()) {\r\n                return;\r\n            }\r\n            else if (!util_1.isPrimaryMouseButton(ev)) {\r\n                return;\r\n            }\r\n            else {\r\n                ev.preventDefault(); // prevents native selection in most browsers\r\n            }\r\n        }\r\n        if (!this.isInteracting) {\r\n            // process options\r\n            this.delay = util_1.firstDefined(extraOptions.delay, this.options.delay, 0);\r\n            this.minDistance = util_1.firstDefined(extraOptions.distance, this.options.distance, 0);\r\n            this.subjectEl = this.options.subjectEl;\r\n            util_1.preventSelection($('body'));\r\n            this.isInteracting = true;\r\n            this.isTouch = util_1.getEvIsTouch(ev);\r\n            this.isGeneric = ev.type === 'dragstart';\r\n            this.isDelayEnded = false;\r\n            this.isDistanceSurpassed = false;\r\n            this.originX = util_1.getEvX(ev);\r\n            this.originY = util_1.getEvY(ev);\r\n            this.scrollEl = util_1.getScrollParent($(ev.target));\r\n            this.bindHandlers();\r\n            this.initAutoScroll();\r\n            this.handleInteractionStart(ev);\r\n            this.startDelay(ev);\r\n            if (!this.minDistance) {\r\n                this.handleDistanceSurpassed(ev);\r\n            }\r\n        }\r\n    };\r\n    DragListener.prototype.handleInteractionStart = function (ev) {\r\n        this.trigger('interactionStart', ev);\r\n    };\r\n    DragListener.prototype.endInteraction = function (ev, isCancelled) {\r\n        if (this.isInteracting) {\r\n            this.endDrag(ev);\r\n            if (this.delayTimeoutId) {\r\n                clearTimeout(this.delayTimeoutId);\r\n                this.delayTimeoutId = null;\r\n            }\r\n            this.destroyAutoScroll();\r\n            this.unbindHandlers();\r\n            this.isInteracting = false;\r\n            this.handleInteractionEnd(ev, isCancelled);\r\n            util_1.allowSelection($('body'));\r\n        }\r\n    };\r\n    DragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\r\n        this.trigger('interactionEnd', ev, isCancelled || false);\r\n    };\r\n    // Binding To DOM\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.bindHandlers = function () {\r\n        // some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\r\n        // so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\r\n        var globalEmitter = GlobalEmitter_1.default.get();\r\n        if (this.isGeneric) {\r\n            this.listenTo($(document), {\r\n                drag: this.handleMove,\r\n                dragstop: this.endInteraction\r\n            });\r\n        }\r\n        else if (this.isTouch) {\r\n            this.listenTo(globalEmitter, {\r\n                touchmove: this.handleTouchMove,\r\n                touchend: this.endInteraction,\r\n                scroll: this.handleTouchScroll\r\n            });\r\n        }\r\n        else {\r\n            this.listenTo(globalEmitter, {\r\n                mousemove: this.handleMouseMove,\r\n                mouseup: this.endInteraction\r\n            });\r\n        }\r\n        this.listenTo(globalEmitter, {\r\n            selectstart: util_1.preventDefault,\r\n            contextmenu: util_1.preventDefault // long taps would open menu on Chrome dev tools\r\n        });\r\n    };\r\n    DragListener.prototype.unbindHandlers = function () {\r\n        this.stopListeningTo(GlobalEmitter_1.default.get());\r\n        this.stopListeningTo($(document)); // for isGeneric\r\n    };\r\n    // Drag (high-level)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // extraOptions ignored if drag already started\r\n    DragListener.prototype.startDrag = function (ev, extraOptions) {\r\n        this.startInteraction(ev, extraOptions); // ensure interaction began\r\n        if (!this.isDragging) {\r\n            this.isDragging = true;\r\n            this.handleDragStart(ev);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDragStart = function (ev) {\r\n        this.trigger('dragStart', ev);\r\n    };\r\n    DragListener.prototype.handleMove = function (ev) {\r\n        var dx = util_1.getEvX(ev) - this.originX;\r\n        var dy = util_1.getEvY(ev) - this.originY;\r\n        var minDistance = this.minDistance;\r\n        var distanceSq; // current distance from the origin, squared\r\n        if (!this.isDistanceSurpassed) {\r\n            distanceSq = dx * dx + dy * dy;\r\n            if (distanceSq >= minDistance * minDistance) { // use pythagorean theorem\r\n                this.handleDistanceSurpassed(ev);\r\n            }\r\n        }\r\n        if (this.isDragging) {\r\n            this.handleDrag(dx, dy, ev);\r\n        }\r\n    };\r\n    // Called while the mouse is being moved and when we know a legitimate drag is taking place\r\n    DragListener.prototype.handleDrag = function (dx, dy, ev) {\r\n        this.trigger('drag', dx, dy, ev);\r\n        this.updateAutoScroll(ev); // will possibly cause scrolling\r\n    };\r\n    DragListener.prototype.endDrag = function (ev) {\r\n        if (this.isDragging) {\r\n            this.isDragging = false;\r\n            this.handleDragEnd(ev);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDragEnd = function (ev) {\r\n        this.trigger('dragEnd', ev);\r\n    };\r\n    // Delay\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.startDelay = function (initialEv) {\r\n        var _this = this;\r\n        if (this.delay) {\r\n            this.delayTimeoutId = setTimeout(function () {\r\n                _this.handleDelayEnd(initialEv);\r\n            }, this.delay);\r\n        }\r\n        else {\r\n            this.handleDelayEnd(initialEv);\r\n        }\r\n    };\r\n    DragListener.prototype.handleDelayEnd = function (initialEv) {\r\n        this.isDelayEnded = true;\r\n        if (this.isDistanceSurpassed) {\r\n            this.startDrag(initialEv);\r\n        }\r\n    };\r\n    // Distance\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleDistanceSurpassed = function (ev) {\r\n        this.isDistanceSurpassed = true;\r\n        if (this.isDelayEnded) {\r\n            this.startDrag(ev);\r\n        }\r\n    };\r\n    // Mouse / Touch\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleTouchMove = function (ev) {\r\n        // prevent inertia and touchmove-scrolling while dragging\r\n        if (this.isDragging && this.shouldCancelTouchScroll) {\r\n            ev.preventDefault();\r\n        }\r\n        this.handleMove(ev);\r\n    };\r\n    DragListener.prototype.handleMouseMove = function (ev) {\r\n        this.handleMove(ev);\r\n    };\r\n    // Scrolling (unrelated to auto-scroll)\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.handleTouchScroll = function (ev) {\r\n        // if the drag is being initiated by touch, but a scroll happens before\r\n        // the drag-initiating delay is over, cancel the drag\r\n        if (!this.isDragging || this.scrollAlwaysKills) {\r\n            this.endInteraction(ev, true); // isCancelled=true\r\n        }\r\n    };\r\n    // Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Triggers a callback. Calls a function in the option hash of the same name.\r\n    // Arguments beyond the first `name` are forwarded on.\r\n    DragListener.prototype.trigger = function (name) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        if (this.options[name]) {\r\n            this.options[name].apply(this, args);\r\n        }\r\n        // makes _methods callable by event name. TODO: kill this\r\n        if (this['_' + name]) {\r\n            this['_' + name].apply(this, args);\r\n        }\r\n    };\r\n    // Auto-scroll\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DragListener.prototype.initAutoScroll = function () {\r\n        var scrollEl = this.scrollEl;\r\n        this.isAutoScroll =\r\n            this.options.scroll &&\r\n                scrollEl &&\r\n                !scrollEl.is(window) &&\r\n                !scrollEl.is(document);\r\n        if (this.isAutoScroll) {\r\n            // debounce makes sure rapid calls don't happen\r\n            this.listenTo(scrollEl, 'scroll', util_1.debounce(this.handleDebouncedScroll, 100));\r\n        }\r\n    };\r\n    DragListener.prototype.destroyAutoScroll = function () {\r\n        this.endAutoScroll(); // kill any animation loop\r\n        // remove the scroll handler if there is a scrollEl\r\n        if (this.isAutoScroll) {\r\n            this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\r\n        }\r\n    };\r\n    // Computes and stores the bounding rectangle of scrollEl\r\n    DragListener.prototype.computeScrollBounds = function () {\r\n        if (this.isAutoScroll) {\r\n            this.scrollBounds = util_1.getOuterRect(this.scrollEl);\r\n            // TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\r\n        }\r\n    };\r\n    // Called when the dragging is in progress and scrolling should be updated\r\n    DragListener.prototype.updateAutoScroll = function (ev) {\r\n        var sensitivity = this.scrollSensitivity;\r\n        var bounds = this.scrollBounds;\r\n        var topCloseness;\r\n        var bottomCloseness;\r\n        var leftCloseness;\r\n        var rightCloseness;\r\n        var topVel = 0;\r\n        var leftVel = 0;\r\n        if (bounds) { // only scroll if scrollEl exists\r\n            // compute closeness to edges. valid range is from 0.0 - 1.0\r\n            topCloseness = (sensitivity - (util_1.getEvY(ev) - bounds.top)) / sensitivity;\r\n            bottomCloseness = (sensitivity - (bounds.bottom - util_1.getEvY(ev))) / sensitivity;\r\n            leftCloseness = (sensitivity - (util_1.getEvX(ev) - bounds.left)) / sensitivity;\r\n            rightCloseness = (sensitivity - (bounds.right - util_1.getEvX(ev))) / sensitivity;\r\n            // translate vertical closeness into velocity.\r\n            // mouse must be completely in bounds for velocity to happen.\r\n            if (topCloseness >= 0 && topCloseness <= 1) {\r\n                topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\r\n            }\r\n            else if (bottomCloseness >= 0 && bottomCloseness <= 1) {\r\n                topVel = bottomCloseness * this.scrollSpeed;\r\n            }\r\n            // translate horizontal closeness into velocity\r\n            if (leftCloseness >= 0 && leftCloseness <= 1) {\r\n                leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\r\n            }\r\n            else if (rightCloseness >= 0 && rightCloseness <= 1) {\r\n                leftVel = rightCloseness * this.scrollSpeed;\r\n            }\r\n        }\r\n        this.setScrollVel(topVel, leftVel);\r\n    };\r\n    // Sets the speed-of-scrolling for the scrollEl\r\n    DragListener.prototype.setScrollVel = function (topVel, leftVel) {\r\n        this.scrollTopVel = topVel;\r\n        this.scrollLeftVel = leftVel;\r\n        this.constrainScrollVel(); // massages into realistic values\r\n        // if there is non-zero velocity, and an animation loop hasn't already started, then START\r\n        if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\r\n            this.scrollIntervalId = setInterval(util_1.proxy(this, 'scrollIntervalFunc'), // scope to `this`\r\n            this.scrollIntervalMs);\r\n        }\r\n    };\r\n    // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\r\n    DragListener.prototype.constrainScrollVel = function () {\r\n        var el = this.scrollEl;\r\n        if (this.scrollTopVel < 0) { // scrolling up?\r\n            if (el.scrollTop() <= 0) { // already scrolled all the way up?\r\n                this.scrollTopVel = 0;\r\n            }\r\n        }\r\n        else if (this.scrollTopVel > 0) { // scrolling down?\r\n            if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) { // already scrolled all the way down?\r\n                this.scrollTopVel = 0;\r\n            }\r\n        }\r\n        if (this.scrollLeftVel < 0) { // scrolling left?\r\n            if (el.scrollLeft() <= 0) { // already scrolled all the left?\r\n                this.scrollLeftVel = 0;\r\n            }\r\n        }\r\n        else if (this.scrollLeftVel > 0) { // scrolling right?\r\n            if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) { // already scrolled all the way right?\r\n                this.scrollLeftVel = 0;\r\n            }\r\n        }\r\n    };\r\n    // This function gets called during every iteration of the scrolling animation loop\r\n    DragListener.prototype.scrollIntervalFunc = function () {\r\n        var el = this.scrollEl;\r\n        var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\r\n        // change the value of scrollEl's scroll\r\n        if (this.scrollTopVel) {\r\n            el.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\r\n        }\r\n        if (this.scrollLeftVel) {\r\n            el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\r\n        }\r\n        this.constrainScrollVel(); // since the scroll values changed, recompute the velocities\r\n        // if scrolled all the way, which causes the vels to be zero, stop the animation loop\r\n        if (!this.scrollTopVel && !this.scrollLeftVel) {\r\n            this.endAutoScroll();\r\n        }\r\n    };\r\n    // Kills any existing scrolling animation loop\r\n    DragListener.prototype.endAutoScroll = function () {\r\n        if (this.scrollIntervalId) {\r\n            clearInterval(this.scrollIntervalId);\r\n            this.scrollIntervalId = null;\r\n            this.handleScrollEnd();\r\n        }\r\n    };\r\n    // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\r\n    DragListener.prototype.handleDebouncedScroll = function () {\r\n        // recompute all coordinates, but *only* if this is *not* part of our scrolling animation\r\n        if (!this.scrollIntervalId) {\r\n            this.handleScrollEnd();\r\n        }\r\n    };\r\n    DragListener.prototype.handleScrollEnd = function () {\r\n        // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\r\n    };\r\n    return DragListener;\r\n}());\r\nexports.default = DragListener;\r\nListenerMixin_1.default.mixInto(DragListener);\r\n\n\n/***/ }),\n/* 60 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar Mixin_1 = __webpack_require__(15);\r\n/*\r\nA set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\r\nPrerequisite: the object being mixed into needs to be a *Grid*\r\n*/\r\nvar DayTableMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayTableMixin, _super);\r\n    function DayTableMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Populates internal variables used for date calculation and rendering\r\n    DayTableMixin.prototype.updateDayTable = function () {\r\n        var t = this;\r\n        var view = t.view;\r\n        var calendar = view.calendar;\r\n        var date = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.startMs, true);\r\n        var end = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.endMs, true);\r\n        var dayIndex = -1;\r\n        var dayIndices = [];\r\n        var dayDates = [];\r\n        var daysPerRow;\r\n        var firstDay;\r\n        var rowCnt;\r\n        while (date.isBefore(end)) { // loop each day from start to end\r\n            if (view.isHiddenDay(date)) {\r\n                dayIndices.push(dayIndex + 0.5); // mark that it's between indices\r\n            }\r\n            else {\r\n                dayIndex++;\r\n                dayIndices.push(dayIndex);\r\n                dayDates.push(date.clone());\r\n            }\r\n            date.add(1, 'days');\r\n        }\r\n        if (this.breakOnWeeks) {\r\n            // count columns until the day-of-week repeats\r\n            firstDay = dayDates[0].day();\r\n            for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\r\n                if (dayDates[daysPerRow].day() === firstDay) {\r\n                    break;\r\n                }\r\n            }\r\n            rowCnt = Math.ceil(dayDates.length / daysPerRow);\r\n        }\r\n        else {\r\n            rowCnt = 1;\r\n            daysPerRow = dayDates.length;\r\n        }\r\n        this.dayDates = dayDates;\r\n        this.dayIndices = dayIndices;\r\n        this.daysPerRow = daysPerRow;\r\n        this.rowCnt = rowCnt;\r\n        this.updateDayTableCols();\r\n    };\r\n    // Computes and assigned the colCnt property and updates any options that may be computed from it\r\n    DayTableMixin.prototype.updateDayTableCols = function () {\r\n        this.colCnt = this.computeColCnt();\r\n        this.colHeadFormat =\r\n            this.opt('columnHeaderFormat') ||\r\n                this.opt('columnFormat') || // deprecated\r\n                this.computeColHeadFormat();\r\n    };\r\n    // Determines how many columns there should be in the table\r\n    DayTableMixin.prototype.computeColCnt = function () {\r\n        return this.daysPerRow;\r\n    };\r\n    // Computes the ambiguously-timed moment for the given cell\r\n    DayTableMixin.prototype.getCellDate = function (row, col) {\r\n        return this.dayDates[this.getCellDayIndex(row, col)].clone();\r\n    };\r\n    // Computes the ambiguously-timed date range for the given cell\r\n    DayTableMixin.prototype.getCellRange = function (row, col) {\r\n        var start = this.getCellDate(row, col);\r\n        var end = start.clone().add(1, 'days');\r\n        return { start: start, end: end };\r\n    };\r\n    // Returns the number of day cells, chronologically, from the first of the grid (0-based)\r\n    DayTableMixin.prototype.getCellDayIndex = function (row, col) {\r\n        return row * this.daysPerRow + this.getColDayIndex(col);\r\n    };\r\n    // Returns the numner of day cells, chronologically, from the first cell in *any given row*\r\n    DayTableMixin.prototype.getColDayIndex = function (col) {\r\n        if (this.isRTL) {\r\n            return this.colCnt - 1 - col;\r\n        }\r\n        else {\r\n            return col;\r\n        }\r\n    };\r\n    // Given a date, returns its chronolocial cell-index from the first cell of the grid.\r\n    // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\r\n    // If before the first offset, returns a negative number.\r\n    // If after the last offset, returns an offset past the last cell offset.\r\n    // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\r\n    DayTableMixin.prototype.getDateDayIndex = function (date) {\r\n        var dayIndices = this.dayIndices;\r\n        var dayOffset = date.diff(this.dayDates[0], 'days');\r\n        if (dayOffset < 0) {\r\n            return dayIndices[0] - 1;\r\n        }\r\n        else if (dayOffset >= dayIndices.length) {\r\n            return dayIndices[dayIndices.length - 1] + 1;\r\n        }\r\n        else {\r\n            return dayIndices[dayOffset];\r\n        }\r\n    };\r\n    /* Options\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes a default column header formatting string if `colFormat` is not explicitly defined\r\n    DayTableMixin.prototype.computeColHeadFormat = function () {\r\n        // if more than one week row, or if there are a lot of columns with not much space,\r\n        // put just the day numbers will be in each cell\r\n        if (this.rowCnt > 1 || this.colCnt > 10) {\r\n            return 'ddd'; // \"Sat\"\r\n        }\r\n        else if (this.colCnt > 1) {\r\n            return this.opt('dayOfMonthFormat'); // \"Sat 12/10\"\r\n        }\r\n        else {\r\n            return 'dddd'; // \"Saturday\"\r\n        }\r\n    };\r\n    /* Slicing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Slices up a date range into a segment for every week-row it intersects with\r\n    DayTableMixin.prototype.sliceRangeByRow = function (unzonedRange) {\r\n        var daysPerRow = this.daysPerRow;\r\n        var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n        var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n        var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n        var segs = [];\r\n        var row;\r\n        var rowFirst;\r\n        var rowLast; // inclusive day-index range for current row\r\n        var segFirst;\r\n        var segLast; // inclusive day-index range for segment\r\n        for (row = 0; row < this.rowCnt; row++) {\r\n            rowFirst = row * daysPerRow;\r\n            rowLast = rowFirst + daysPerRow - 1;\r\n            // intersect segment's offset range with the row's\r\n            segFirst = Math.max(rangeFirst, rowFirst);\r\n            segLast = Math.min(rangeLast, rowLast);\r\n            // deal with in-between indices\r\n            segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n            segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n            if (segFirst <= segLast) { // was there any intersection with the current row?\r\n                segs.push({\r\n                    row: row,\r\n                    // normalize to start of row\r\n                    firstRowDayIndex: segFirst - rowFirst,\r\n                    lastRowDayIndex: segLast - rowFirst,\r\n                    // must be matching integers to be the segment's start/end\r\n                    isStart: segFirst === rangeFirst,\r\n                    isEnd: segLast === rangeLast\r\n                });\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    // Slices up a date range into a segment for every day-cell it intersects with.\r\n    // TODO: make more DRY with sliceRangeByRow somehow.\r\n    DayTableMixin.prototype.sliceRangeByDay = function (unzonedRange) {\r\n        var daysPerRow = this.daysPerRow;\r\n        var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\r\n        var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\r\n        var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\r\n        var segs = [];\r\n        var row;\r\n        var rowFirst;\r\n        var rowLast; // inclusive day-index range for current row\r\n        var i;\r\n        var segFirst;\r\n        var segLast; // inclusive day-index range for segment\r\n        for (row = 0; row < this.rowCnt; row++) {\r\n            rowFirst = row * daysPerRow;\r\n            rowLast = rowFirst + daysPerRow - 1;\r\n            for (i = rowFirst; i <= rowLast; i++) {\r\n                // intersect segment's offset range with the row's\r\n                segFirst = Math.max(rangeFirst, i);\r\n                segLast = Math.min(rangeLast, i);\r\n                // deal with in-between indices\r\n                segFirst = Math.ceil(segFirst); // in-between starts round to next cell\r\n                segLast = Math.floor(segLast); // in-between ends round to prev cell\r\n                if (segFirst <= segLast) { // was there any intersection with the current row?\r\n                    segs.push({\r\n                        row: row,\r\n                        // normalize to start of row\r\n                        firstRowDayIndex: segFirst - rowFirst,\r\n                        lastRowDayIndex: segLast - rowFirst,\r\n                        // must be matching integers to be the segment's start/end\r\n                        isStart: segFirst === rangeFirst,\r\n                        isEnd: segLast === rangeLast\r\n                    });\r\n                }\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Header Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderHeadHtml = function () {\r\n        var theme = this.view.calendar.theme;\r\n        return '' +\r\n            '<div class=\"fc-row ' + theme.getClass('headerRow') + '\">' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            '<thead>' +\r\n            this.renderHeadTrHtml() +\r\n            '</thead>' +\r\n            '</table>' +\r\n            '</div>';\r\n    };\r\n    DayTableMixin.prototype.renderHeadIntroHtml = function () {\r\n        return this.renderIntroHtml(); // fall back to generic\r\n    };\r\n    DayTableMixin.prototype.renderHeadTrHtml = function () {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderHeadIntroHtml()) +\r\n            this.renderHeadDateCellsHtml() +\r\n            (this.isRTL ? this.renderHeadIntroHtml() : '') +\r\n            '</tr>';\r\n    };\r\n    DayTableMixin.prototype.renderHeadDateCellsHtml = function () {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(0, col);\r\n            htmls.push(this.renderHeadDateCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    // TODO: when internalApiVersion, accept an object for HTML attributes\r\n    // (colspan should be no different)\r\n    DayTableMixin.prototype.renderHeadDateCellHtml = function (date, colspan, otherAttrs) {\r\n        var t = this;\r\n        var view = t.view;\r\n        var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var classNames = [\r\n            'fc-day-header',\r\n            view.calendar.theme.getClass('widgetHeader')\r\n        ];\r\n        var innerHtml;\r\n        if (typeof t.opt('columnHeaderHtml') === 'function') {\r\n            innerHtml = t.opt('columnHeaderHtml')(date);\r\n        }\r\n        else if (typeof t.opt('columnHeaderText') === 'function') {\r\n            innerHtml = util_1.htmlEscape(t.opt('columnHeaderText')(date));\r\n        }\r\n        else {\r\n            innerHtml = util_1.htmlEscape(date.format(t.colHeadFormat));\r\n        }\r\n        // if only one row of days, the classNames on the header can represent the specific days beneath\r\n        if (t.rowCnt === 1) {\r\n            classNames = classNames.concat(\r\n            // includes the day-of-week class\r\n            // noThemeHighlight=true (don't highlight the header)\r\n            t.getDayClasses(date, true));\r\n        }\r\n        else {\r\n            classNames.push('fc-' + util_1.dayIDs[date.day()]); // only add the day-of-week class\r\n        }\r\n        return '' +\r\n            '<th class=\"' + classNames.join(' ') + '\"' +\r\n            ((isDateValid && t.rowCnt) === 1 ?\r\n                ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' :\r\n                '') +\r\n            (colspan > 1 ?\r\n                ' colspan=\"' + colspan + '\"' :\r\n                '') +\r\n            (otherAttrs ?\r\n                ' ' + otherAttrs :\r\n                '') +\r\n            '>' +\r\n            (isDateValid ?\r\n                // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\r\n                view.buildGotoAnchorHtml({ date: date, forceOff: t.rowCnt > 1 || t.colCnt === 1 }, innerHtml) :\r\n                // if not valid, display text, but no link\r\n                innerHtml) +\r\n            '</th>';\r\n    };\r\n    /* Background Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderBgTrHtml = function (row) {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderBgIntroHtml(row)) +\r\n            this.renderBgCellsHtml(row) +\r\n            (this.isRTL ? this.renderBgIntroHtml(row) : '') +\r\n            '</tr>';\r\n    };\r\n    DayTableMixin.prototype.renderBgIntroHtml = function (row) {\r\n        return this.renderIntroHtml(); // fall back to generic\r\n    };\r\n    DayTableMixin.prototype.renderBgCellsHtml = function (row) {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(row, col);\r\n            htmls.push(this.renderBgCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    DayTableMixin.prototype.renderBgCellHtml = function (date, otherAttrs) {\r\n        var t = this;\r\n        var view = t.view;\r\n        var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var classes = t.getDayClasses(date);\r\n        classes.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));\r\n        return '<td class=\"' + classes.join(' ') + '\"' +\r\n            (isDateValid ?\r\n                ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' : // if date has a time, won't format it\r\n                '') +\r\n            (otherAttrs ?\r\n                ' ' + otherAttrs :\r\n                '') +\r\n            '></td>';\r\n    };\r\n    /* Generic\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayTableMixin.prototype.renderIntroHtml = function () {\r\n        // Generates the default HTML intro for any row. User classes should override\r\n    };\r\n    // TODO: a generic method for dealing with <tr>, RTL, intro\r\n    // when increment internalApiVersion\r\n    // wrapTr (scheduler)\r\n    /* Utils\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Applies the generic \"intro\" and \"outro\" HTML to the given cells.\r\n    // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\r\n    DayTableMixin.prototype.bookendCells = function (trEl) {\r\n        var introHtml = this.renderIntroHtml();\r\n        if (introHtml) {\r\n            if (this.isRTL) {\r\n                trEl.append(introHtml);\r\n            }\r\n            else {\r\n                trEl.prepend(introHtml);\r\n            }\r\n        }\r\n    };\r\n    return DayTableMixin;\r\n}(Mixin_1.default));\r\nexports.default = DayTableMixin;\r\n\n\n/***/ }),\n/* 61 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar BusinessHourRenderer = /** @class */ (function () {\r\n    /*\r\n    component implements:\r\n      - eventRangesToEventFootprints\r\n      - eventFootprintsToSegs\r\n    */\r\n    function BusinessHourRenderer(component, fillRenderer) {\r\n        this.component = component;\r\n        this.fillRenderer = fillRenderer;\r\n    }\r\n    BusinessHourRenderer.prototype.render = function (businessHourGenerator) {\r\n        var component = this.component;\r\n        var unzonedRange = component._getDateProfile().activeUnzonedRange;\r\n        var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(component.hasAllDayBusinessHours, unzonedRange);\r\n        var eventFootprints = eventInstanceGroup ?\r\n            component.eventRangesToEventFootprints(eventInstanceGroup.sliceRenderRanges(unzonedRange)) :\r\n            [];\r\n        this.renderEventFootprints(eventFootprints);\r\n    };\r\n    BusinessHourRenderer.prototype.renderEventFootprints = function (eventFootprints) {\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        this.renderSegs(segs);\r\n        this.segs = segs;\r\n    };\r\n    BusinessHourRenderer.prototype.renderSegs = function (segs) {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderSegs('businessHours', segs, {\r\n                getClasses: function (seg) {\r\n                    return ['fc-nonbusiness', 'fc-bgevent'];\r\n                }\r\n            });\r\n        }\r\n    };\r\n    BusinessHourRenderer.prototype.unrender = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('businessHours');\r\n        }\r\n        this.segs = null;\r\n    };\r\n    BusinessHourRenderer.prototype.getSegs = function () {\r\n        return this.segs || [];\r\n    };\r\n    return BusinessHourRenderer;\r\n}());\r\nexports.default = BusinessHourRenderer;\r\n\n\n/***/ }),\n/* 62 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar FillRenderer = /** @class */ (function () {\r\n    function FillRenderer(component) {\r\n        this.fillSegTag = 'div';\r\n        this.component = component;\r\n        this.elsByFill = {};\r\n    }\r\n    FillRenderer.prototype.renderFootprint = function (type, componentFootprint, props) {\r\n        this.renderSegs(type, this.component.componentFootprintToSegs(componentFootprint), props);\r\n    };\r\n    FillRenderer.prototype.renderSegs = function (type, segs, props) {\r\n        var els;\r\n        segs = this.buildSegEls(type, segs, props); // assignes `.el` to each seg. returns successfully rendered segs\r\n        els = this.attachSegEls(type, segs);\r\n        if (els) {\r\n            this.reportEls(type, els);\r\n        }\r\n        return segs;\r\n    };\r\n    // Unrenders a specific type of fill that is currently rendered on the grid\r\n    FillRenderer.prototype.unrender = function (type) {\r\n        var el = this.elsByFill[type];\r\n        if (el) {\r\n            el.remove();\r\n            delete this.elsByFill[type];\r\n        }\r\n    };\r\n    // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\r\n    // Only returns segments that successfully rendered.\r\n    FillRenderer.prototype.buildSegEls = function (type, segs, props) {\r\n        var _this = this;\r\n        var html = '';\r\n        var renderedSegs = [];\r\n        var i;\r\n        if (segs.length) {\r\n            // build a large concatenation of segment HTML\r\n            for (i = 0; i < segs.length; i++) {\r\n                html += this.buildSegHtml(type, segs[i], props);\r\n            }\r\n            // Grab individual elements from the combined HTML string. Use each as the default rendering.\r\n            // Then, compute the 'el' for each segment.\r\n            $(html).each(function (i, node) {\r\n                var seg = segs[i];\r\n                var el = $(node);\r\n                // allow custom filter methods per-type\r\n                if (props.filterEl) {\r\n                    el = props.filterEl(seg, el);\r\n                }\r\n                if (el) { // custom filters did not cancel the render\r\n                    el = $(el); // allow custom filter to return raw DOM node\r\n                    // correct element type? (would be bad if a non-TD were inserted into a table for example)\r\n                    if (el.is(_this.fillSegTag)) {\r\n                        seg.el = el;\r\n                        renderedSegs.push(seg);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n        return renderedSegs;\r\n    };\r\n    // Builds the HTML needed for one fill segment. Generic enough to work with different types.\r\n    FillRenderer.prototype.buildSegHtml = function (type, seg, props) {\r\n        // custom hooks per-type\r\n        var classes = props.getClasses ? props.getClasses(seg) : [];\r\n        var css = util_1.cssToStr(props.getCss ? props.getCss(seg) : {});\r\n        return '<' + this.fillSegTag +\r\n            (classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') +\r\n            (css ? ' style=\"' + css + '\"' : '') +\r\n            '></' + this.fillSegTag + '>';\r\n    };\r\n    // Should return wrapping DOM structure\r\n    FillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        // subclasses must implement\r\n    };\r\n    FillRenderer.prototype.reportEls = function (type, nodes) {\r\n        if (this.elsByFill[type]) {\r\n            this.elsByFill[type] = this.elsByFill[type].add(nodes);\r\n        }\r\n        else {\r\n            this.elsByFill[type] = $(nodes);\r\n        }\r\n    };\r\n    return FillRenderer;\r\n}());\r\nexports.default = FillRenderer;\r\n\n\n/***/ }),\n/* 63 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar HelperRenderer = /** @class */ (function () {\r\n    function HelperRenderer(component, eventRenderer) {\r\n        this.view = component._getView();\r\n        this.component = component;\r\n        this.eventRenderer = eventRenderer;\r\n    }\r\n    HelperRenderer.prototype.renderComponentFootprint = function (componentFootprint) {\r\n        this.renderEventFootprints([\r\n            this.fabricateEventFootprint(componentFootprint)\r\n        ]);\r\n    };\r\n    HelperRenderer.prototype.renderEventDraggingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n        this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-dragging', isTouch ? null : this.view.opt('dragOpacity'));\r\n    };\r\n    HelperRenderer.prototype.renderEventResizingFootprints = function (eventFootprints, sourceSeg, isTouch) {\r\n        this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-resizing');\r\n    };\r\n    HelperRenderer.prototype.renderEventFootprints = function (eventFootprints, sourceSeg, extraClassNames, opacity) {\r\n        var segs = this.component.eventFootprintsToSegs(eventFootprints);\r\n        var classNames = 'fc-helper ' + (extraClassNames || '');\r\n        var i;\r\n        // assigns each seg's el and returns a subset of segs that were rendered\r\n        segs = this.eventRenderer.renderFgSegEls(segs);\r\n        for (i = 0; i < segs.length; i++) {\r\n            segs[i].el.addClass(classNames);\r\n        }\r\n        if (opacity != null) {\r\n            for (i = 0; i < segs.length; i++) {\r\n                segs[i].el.css('opacity', opacity);\r\n            }\r\n        }\r\n        this.helperEls = this.renderSegs(segs, sourceSeg);\r\n    };\r\n    /*\r\n    Must return all mock event elements\r\n    */\r\n    HelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        // Subclasses must implement\r\n    };\r\n    HelperRenderer.prototype.unrender = function () {\r\n        if (this.helperEls) {\r\n            this.helperEls.remove();\r\n            this.helperEls = null;\r\n        }\r\n    };\r\n    HelperRenderer.prototype.fabricateEventFootprint = function (componentFootprint) {\r\n        var calendar = this.view.calendar;\r\n        var eventDateProfile = calendar.footprintToDateProfile(componentFootprint);\r\n        var dummyEvent = new SingleEventDef_1.default(new EventSource_1.default(calendar));\r\n        var dummyInstance;\r\n        dummyEvent.dateProfile = eventDateProfile;\r\n        dummyInstance = dummyEvent.buildInstance();\r\n        return new EventFootprint_1.default(componentFootprint, dummyEvent, dummyInstance);\r\n    };\r\n    return HelperRenderer;\r\n}());\r\nexports.default = HelperRenderer;\r\n\n\n/***/ }),\n/* 64 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventPointing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventPointing, _super);\r\n    function EventPointing() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    /*\r\n    component must implement:\r\n      - publiclyTrigger\r\n    */\r\n    EventPointing.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'click', this.handleClick.bind(this));\r\n        component.bindSegHandlerToEl(el, 'mouseenter', this.handleMouseover.bind(this));\r\n        component.bindSegHandlerToEl(el, 'mouseleave', this.handleMouseout.bind(this));\r\n    };\r\n    EventPointing.prototype.handleClick = function (seg, ev) {\r\n        var res = this.component.publiclyTrigger('eventClick', {\r\n            context: seg.el[0],\r\n            args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n        });\r\n        if (res === false) {\r\n            ev.preventDefault();\r\n        }\r\n    };\r\n    // Updates internal state and triggers handlers for when an event element is moused over\r\n    EventPointing.prototype.handleMouseover = function (seg, ev) {\r\n        if (!GlobalEmitter_1.default.get().shouldIgnoreMouse() &&\r\n            !this.mousedOverSeg) {\r\n            this.mousedOverSeg = seg;\r\n            // TODO: move to EventSelecting's responsibility\r\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n                seg.el.addClass('fc-allow-mouse-resize');\r\n            }\r\n            this.component.publiclyTrigger('eventMouseover', {\r\n                context: seg.el[0],\r\n                args: [seg.footprint.getEventLegacy(), ev, this.view]\r\n            });\r\n        }\r\n    };\r\n    // Updates internal state and triggers handlers for when an event element is moused out.\r\n    // Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\r\n    EventPointing.prototype.handleMouseout = function (seg, ev) {\r\n        if (this.mousedOverSeg) {\r\n            this.mousedOverSeg = null;\r\n            // TODO: move to EventSelecting's responsibility\r\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\r\n                seg.el.removeClass('fc-allow-mouse-resize');\r\n            }\r\n            this.component.publiclyTrigger('eventMouseout', {\r\n                context: seg.el[0],\r\n                args: [\r\n                    seg.footprint.getEventLegacy(),\r\n                    ev || {},\r\n                    this.view\r\n                ]\r\n            });\r\n        }\r\n    };\r\n    EventPointing.prototype.end = function () {\r\n        if (this.mousedOverSeg) {\r\n            this.handleMouseout(this.mousedOverSeg);\r\n        }\r\n    };\r\n    return EventPointing;\r\n}(Interaction_1.default));\r\nexports.default = EventPointing;\r\n\n\n/***/ }),\n/* 65 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Mixin_1 = __webpack_require__(15);\r\nvar DateClicking_1 = __webpack_require__(237);\r\nvar DateSelecting_1 = __webpack_require__(236);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar EventDragging_1 = __webpack_require__(235);\r\nvar EventResizing_1 = __webpack_require__(234);\r\nvar ExternalDropping_1 = __webpack_require__(233);\r\nvar StandardInteractionsMixin = /** @class */ (function (_super) {\r\n    tslib_1.__extends(StandardInteractionsMixin, _super);\r\n    function StandardInteractionsMixin() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return StandardInteractionsMixin;\r\n}(Mixin_1.default));\r\nexports.default = StandardInteractionsMixin;\r\nStandardInteractionsMixin.prototype.dateClickingClass = DateClicking_1.default;\r\nStandardInteractionsMixin.prototype.dateSelectingClass = DateSelecting_1.default;\r\nStandardInteractionsMixin.prototype.eventPointingClass = EventPointing_1.default;\r\nStandardInteractionsMixin.prototype.eventDraggingClass = EventDragging_1.default;\r\nStandardInteractionsMixin.prototype.eventResizingClass = EventResizing_1.default;\r\nStandardInteractionsMixin.prototype.externalDroppingClass = ExternalDropping_1.default;\r\n\n\n/***/ }),\n/* 66 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar Popover_1 = __webpack_require__(227);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventFootprint_1 = __webpack_require__(34);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar DayGridEventRenderer_1 = __webpack_require__(243);\r\nvar DayGridHelperRenderer_1 = __webpack_require__(244);\r\nvar DayGridFillRenderer_1 = __webpack_require__(245);\r\n/* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGrid = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGrid, _super);\r\n    function DayGrid(view) {\r\n        var _this = _super.call(this, view) || this;\r\n        _this.cellWeekNumbersVisible = false; // display week numbers in day cell?\r\n        _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\r\n        // isRigid determines whether the individual rows should ignore the contents and be a constant height.\r\n        // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\r\n        _this.isRigid = false;\r\n        _this.hasAllDayBusinessHours = true;\r\n        return _this;\r\n    }\r\n    // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n    DayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (this.isRTL) {\r\n                seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\r\n                seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\r\n            }\r\n            else {\r\n                seg.leftCol = seg.firstRowDayIndex;\r\n                seg.rightCol = seg.lastRowDayIndex;\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Date Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.renderDates = function (dateProfile) {\r\n        this.dateProfile = dateProfile;\r\n        this.updateDayTable();\r\n        this.renderGrid();\r\n    };\r\n    DayGrid.prototype.unrenderDates = function () {\r\n        this.removeSegPopover();\r\n    };\r\n    // Renders the rows and columns into the component's `this.el`, which should already be assigned.\r\n    DayGrid.prototype.renderGrid = function () {\r\n        var view = this.view;\r\n        var rowCnt = this.rowCnt;\r\n        var colCnt = this.colCnt;\r\n        var html = '';\r\n        var row;\r\n        var col;\r\n        if (this.headContainerEl) {\r\n            this.headContainerEl.html(this.renderHeadHtml());\r\n        }\r\n        for (row = 0; row < rowCnt; row++) {\r\n            html += this.renderDayRowHtml(row, this.isRigid);\r\n        }\r\n        this.el.html(html);\r\n        this.rowEls = this.el.find('.fc-row');\r\n        this.cellEls = this.el.find('.fc-day, .fc-disabled-day');\r\n        this.rowCoordCache = new CoordCache_1.default({\r\n            els: this.rowEls,\r\n            isVertical: true\r\n        });\r\n        this.colCoordCache = new CoordCache_1.default({\r\n            els: this.cellEls.slice(0, this.colCnt),\r\n            isHorizontal: true\r\n        });\r\n        // trigger dayRender with each cell's element\r\n        for (row = 0; row < rowCnt; row++) {\r\n            for (col = 0; col < colCnt; col++) {\r\n                this.publiclyTrigger('dayRender', {\r\n                    context: view,\r\n                    args: [\r\n                        this.getCellDate(row, col),\r\n                        this.getCellEl(row, col),\r\n                        view\r\n                    ]\r\n                });\r\n            }\r\n        }\r\n    };\r\n    // Generates the HTML for a single row, which is a div that wraps a table.\r\n    // `row` is the row number.\r\n    DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\r\n        var theme = this.view.calendar.theme;\r\n        var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\r\n        if (isRigid) {\r\n            classes.push('fc-rigid');\r\n        }\r\n        return '' +\r\n            '<div class=\"' + classes.join(' ') + '\">' +\r\n            '<div class=\"fc-bg\">' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderBgTrHtml(row) +\r\n            '</table>' +\r\n            '</div>' +\r\n            '<div class=\"fc-content-skeleton\">' +\r\n            '<table>' +\r\n            (this.getIsNumbersVisible() ?\r\n                '<thead>' +\r\n                    this.renderNumberTrHtml(row) +\r\n                    '</thead>' :\r\n                '') +\r\n            '</table>' +\r\n            '</div>' +\r\n            '</div>';\r\n    };\r\n    DayGrid.prototype.getIsNumbersVisible = function () {\r\n        return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible;\r\n    };\r\n    DayGrid.prototype.getIsDayNumbersVisible = function () {\r\n        return this.rowCnt > 1;\r\n    };\r\n    /* Grid Number Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.renderNumberTrHtml = function (row) {\r\n        return '' +\r\n            '<tr>' +\r\n            (this.isRTL ? '' : this.renderNumberIntroHtml(row)) +\r\n            this.renderNumberCellsHtml(row) +\r\n            (this.isRTL ? this.renderNumberIntroHtml(row) : '') +\r\n            '</tr>';\r\n    };\r\n    DayGrid.prototype.renderNumberIntroHtml = function (row) {\r\n        return this.renderIntroHtml();\r\n    };\r\n    DayGrid.prototype.renderNumberCellsHtml = function (row) {\r\n        var htmls = [];\r\n        var col;\r\n        var date;\r\n        for (col = 0; col < this.colCnt; col++) {\r\n            date = this.getCellDate(row, col);\r\n            htmls.push(this.renderNumberCellHtml(date));\r\n        }\r\n        return htmls.join('');\r\n    };\r\n    // Generates the HTML for the <td>s of the \"number\" row in the DayGrid's content skeleton.\r\n    // The number row will only exist if either day numbers or week numbers are turned on.\r\n    DayGrid.prototype.renderNumberCellHtml = function (date) {\r\n        var view = this.view;\r\n        var html = '';\r\n        var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\r\n        var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\r\n        var classes;\r\n        var weekCalcFirstDoW;\r\n        if (!isDayNumberVisible && !this.cellWeekNumbersVisible) {\r\n            // no numbers in day cell (week number must be along the side)\r\n            return '<td></td>'; //  will create an empty space above events :(\r\n        }\r\n        classes = this.getDayClasses(date);\r\n        classes.unshift('fc-day-top');\r\n        if (this.cellWeekNumbersVisible) {\r\n            // To determine the day of week number change under ISO, we cannot\r\n            // rely on moment.js methods such as firstDayOfWeek() or weekday(),\r\n            // because they rely on the locale's dow (possibly overridden by\r\n            // our firstDay option), which may not be Monday. We cannot change\r\n            // dow, because that would affect the calendar start day as well.\r\n            if (date._locale._fullCalendar_weekCalc === 'ISO') {\r\n                weekCalcFirstDoW = 1; // Monday by ISO 8601 definition\r\n            }\r\n            else {\r\n                weekCalcFirstDoW = date._locale.firstDayOfWeek();\r\n            }\r\n        }\r\n        html += '<td class=\"' + classes.join(' ') + '\"' +\r\n            (isDateValid ?\r\n                ' data-date=\"' + date.format() + '\"' :\r\n                '') +\r\n            '>';\r\n        if (this.cellWeekNumbersVisible && (date.day() === weekCalcFirstDoW)) {\r\n            html += view.buildGotoAnchorHtml({ date: date, type: 'week' }, { 'class': 'fc-week-number' }, date.format('w') // inner HTML\r\n            );\r\n        }\r\n        if (isDayNumberVisible) {\r\n            html += view.buildGotoAnchorHtml(date, { 'class': 'fc-day-number' }, date.format('D') // inner HTML\r\n            );\r\n        }\r\n        html += '</td>';\r\n        return html;\r\n    };\r\n    /* Hit System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.prepareHits = function () {\r\n        this.colCoordCache.build();\r\n        this.rowCoordCache.build();\r\n        this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\r\n    };\r\n    DayGrid.prototype.releaseHits = function () {\r\n        this.colCoordCache.clear();\r\n        this.rowCoordCache.clear();\r\n    };\r\n    DayGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n        if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\r\n            var col = this.colCoordCache.getHorizontalIndex(leftOffset);\r\n            var row = this.rowCoordCache.getVerticalIndex(topOffset);\r\n            if (row != null && col != null) {\r\n                return this.getCellHit(row, col);\r\n            }\r\n        }\r\n    };\r\n    DayGrid.prototype.getHitFootprint = function (hit) {\r\n        var range = this.getCellRange(hit.row, hit.col);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(range.start, range.end), true // all-day?\r\n        );\r\n    };\r\n    DayGrid.prototype.getHitEl = function (hit) {\r\n        return this.getCellEl(hit.row, hit.col);\r\n    };\r\n    /* Cell System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // FYI: the first column is the leftmost column, regardless of date\r\n    DayGrid.prototype.getCellHit = function (row, col) {\r\n        return {\r\n            row: row,\r\n            col: col,\r\n            component: this,\r\n            left: this.colCoordCache.getLeftOffset(col),\r\n            right: this.colCoordCache.getRightOffset(col),\r\n            top: this.rowCoordCache.getTopOffset(row),\r\n            bottom: this.rowCoordCache.getBottomOffset(row)\r\n        };\r\n    };\r\n    DayGrid.prototype.getCellEl = function (row, col) {\r\n        return this.cellEls.eq(row * this.colCnt + col);\r\n    };\r\n    /* Event Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Unrenders all events currently rendered on the grid\r\n    DayGrid.prototype.executeEventUnrender = function () {\r\n        this.removeSegPopover(); // removes the \"more..\" events popover\r\n        _super.prototype.executeEventUnrender.call(this);\r\n    };\r\n    // Retrieves all rendered segment objects currently rendered on the grid\r\n    DayGrid.prototype.getOwnEventSegs = function () {\r\n        // append the segments from the \"more...\" popover\r\n        return _super.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || []);\r\n    };\r\n    /* Event Drag Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event or external element being dragged.\r\n    // `eventLocation` has zoned start and end (optional)\r\n    DayGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            this.renderHighlight(eventFootprints[i].componentFootprint);\r\n        }\r\n        // render drags from OTHER components as helpers\r\n        if (eventFootprints.length && seg && seg.component !== this) {\r\n            this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n            return true; // signal helpers rendered\r\n        }\r\n    };\r\n    // Unrenders any visual indication of a hovering event\r\n    DayGrid.prototype.unrenderDrag = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Event Resize Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being resized\r\n    DayGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            this.renderHighlight(eventFootprints[i].componentFootprint);\r\n        }\r\n        this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n    };\r\n    // Unrenders a visual indication of an event being resized\r\n    DayGrid.prototype.unrenderEventResize = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* More+ Link Popover\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DayGrid.prototype.removeSegPopover = function () {\r\n        if (this.segPopover) {\r\n            this.segPopover.hide(); // in handler, will call segPopover's removeElement\r\n        }\r\n    };\r\n    // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\r\n    // `levelLimit` can be false (don't limit), a number, or true (should be computed).\r\n    DayGrid.prototype.limitRows = function (levelLimit) {\r\n        var rowStructs = this.eventRenderer.rowStructs || [];\r\n        var row; // row #\r\n        var rowLevelLimit;\r\n        for (row = 0; row < rowStructs.length; row++) {\r\n            this.unlimitRow(row);\r\n            if (!levelLimit) {\r\n                rowLevelLimit = false;\r\n            }\r\n            else if (typeof levelLimit === 'number') {\r\n                rowLevelLimit = levelLimit;\r\n            }\r\n            else {\r\n                rowLevelLimit = this.computeRowLevelLimit(row);\r\n            }\r\n            if (rowLevelLimit !== false) {\r\n                this.limitRow(row, rowLevelLimit);\r\n            }\r\n        }\r\n    };\r\n    // Computes the number of levels a row will accomodate without going outside its bounds.\r\n    // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\r\n    // `row` is the row number.\r\n    DayGrid.prototype.computeRowLevelLimit = function (row) {\r\n        var rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\r\n        var rowHeight = rowEl.height(); // TODO: cache somehow?\r\n        var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children();\r\n        var i;\r\n        var trEl;\r\n        var trHeight;\r\n        function iterInnerHeights(i, childNode) {\r\n            trHeight = Math.max(trHeight, $(childNode).outerHeight());\r\n        }\r\n        // Reveal one level <tr> at a time and stop when we find one out of bounds\r\n        for (i = 0; i < trEls.length; i++) {\r\n            trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\r\n            // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\r\n            // so instead, find the tallest inner content element.\r\n            trHeight = 0;\r\n            trEl.find('> td > :first-child').each(iterInnerHeights);\r\n            if (trEl.position().top + trHeight > rowHeight) {\r\n                return i;\r\n            }\r\n        }\r\n        return false; // should not limit at all\r\n    };\r\n    // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\r\n    // `row` is the row number.\r\n    // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\r\n    DayGrid.prototype.limitRow = function (row, levelLimit) {\r\n        var _this = this;\r\n        var rowStruct = this.eventRenderer.rowStructs[row];\r\n        var moreNodes = []; // array of \"more\" <a> links and <td> DOM nodes\r\n        var col = 0; // col #, left-to-right (not chronologically)\r\n        var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\r\n        var cellMatrix; // a matrix (by level, then column) of all <td> jQuery elements in the row\r\n        var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes\r\n        var i;\r\n        var seg;\r\n        var segsBelow; // array of segment objects below `seg` in the current `col`\r\n        var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\r\n        var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\r\n        var td;\r\n        var rowspan;\r\n        var segMoreNodes; // array of \"more\" <td> cells that will stand-in for the current seg's cell\r\n        var j;\r\n        var moreTd;\r\n        var moreWrap;\r\n        var moreLink;\r\n        // Iterates through empty level cells and places \"more\" links inside if need be\r\n        var emptyCellsUntil = function (endCol) {\r\n            while (col < endCol) {\r\n                segsBelow = _this.getCellSegs(row, col, levelLimit);\r\n                if (segsBelow.length) {\r\n                    td = cellMatrix[levelLimit - 1][col];\r\n                    moreLink = _this.renderMoreLink(row, col, segsBelow);\r\n                    moreWrap = $('<div>').append(moreLink);\r\n                    td.append(moreWrap);\r\n                    moreNodes.push(moreWrap[0]);\r\n                }\r\n                col++;\r\n            }\r\n        };\r\n        if (levelLimit && levelLimit < rowStruct.segLevels.length) { // is it actually over the limit?\r\n            levelSegs = rowStruct.segLevels[levelLimit - 1];\r\n            cellMatrix = rowStruct.cellMatrix;\r\n            limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level <tr> elements past the limit\r\n                .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\r\n            // iterate though segments in the last allowable level\r\n            for (i = 0; i < levelSegs.length; i++) {\r\n                seg = levelSegs[i];\r\n                emptyCellsUntil(seg.leftCol); // process empty cells before the segment\r\n                // determine *all* segments below `seg` that occupy the same columns\r\n                colSegsBelow = [];\r\n                totalSegsBelow = 0;\r\n                while (col <= seg.rightCol) {\r\n                    segsBelow = this.getCellSegs(row, col, levelLimit);\r\n                    colSegsBelow.push(segsBelow);\r\n                    totalSegsBelow += segsBelow.length;\r\n                    col++;\r\n                }\r\n                if (totalSegsBelow) { // do we need to replace this segment with one or many \"more\" links?\r\n                    td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\r\n                    rowspan = td.attr('rowspan') || 1;\r\n                    segMoreNodes = [];\r\n                    // make a replacement <td> for each column the segment occupies. will be one for each colspan\r\n                    for (j = 0; j < colSegsBelow.length; j++) {\r\n                        moreTd = $('<td class=\"fc-more-cell\">').attr('rowspan', rowspan);\r\n                        segsBelow = colSegsBelow[j];\r\n                        moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\r\n                        );\r\n                        moreWrap = $('<div>').append(moreLink);\r\n                        moreTd.append(moreWrap);\r\n                        segMoreNodes.push(moreTd[0]);\r\n                        moreNodes.push(moreTd[0]);\r\n                    }\r\n                    td.addClass('fc-limited').after($(segMoreNodes)); // hide original <td> and inject replacements\r\n                    limitedNodes.push(td[0]);\r\n                }\r\n            }\r\n            emptyCellsUntil(this.colCnt); // finish off the level\r\n            rowStruct.moreEls = $(moreNodes); // for easy undoing later\r\n            rowStruct.limitedEls = $(limitedNodes); // for easy undoing later\r\n        }\r\n    };\r\n    // Reveals all levels and removes all \"more\"-related elements for a grid's row.\r\n    // `row` is a row number.\r\n    DayGrid.prototype.unlimitRow = function (row) {\r\n        var rowStruct = this.eventRenderer.rowStructs[row];\r\n        if (rowStruct.moreEls) {\r\n            rowStruct.moreEls.remove();\r\n            rowStruct.moreEls = null;\r\n        }\r\n        if (rowStruct.limitedEls) {\r\n            rowStruct.limitedEls.removeClass('fc-limited');\r\n            rowStruct.limitedEls = null;\r\n        }\r\n    };\r\n    // Renders an <a> element that represents hidden event element for a cell.\r\n    // Responsible for attaching click handler as well.\r\n    DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        return $('<a class=\"fc-more\">')\r\n            .text(this.getMoreLinkText(hiddenSegs.length))\r\n            .on('click', function (ev) {\r\n            var clickOption = _this.opt('eventLimitClick');\r\n            var date = _this.getCellDate(row, col);\r\n            var moreEl = $(ev.currentTarget);\r\n            var dayEl = _this.getCellEl(row, col);\r\n            var allSegs = _this.getCellSegs(row, col);\r\n            // rescope the segments to be within the cell's date\r\n            var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\r\n            var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\r\n            if (typeof clickOption === 'function') {\r\n                // the returned value can be an atomic option\r\n                clickOption = _this.publiclyTrigger('eventLimitClick', {\r\n                    context: view,\r\n                    args: [\r\n                        {\r\n                            date: date.clone(),\r\n                            dayEl: dayEl,\r\n                            moreEl: moreEl,\r\n                            segs: reslicedAllSegs,\r\n                            hiddenSegs: reslicedHiddenSegs\r\n                        },\r\n                        ev,\r\n                        view\r\n                    ]\r\n                });\r\n            }\r\n            if (clickOption === 'popover') {\r\n                _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\r\n            }\r\n            else if (typeof clickOption === 'string') { // a view name\r\n                view.calendar.zoomTo(date, clickOption);\r\n            }\r\n        });\r\n    };\r\n    // Reveals the popover that displays all events within a cell\r\n    DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        var moreWrap = moreLink.parent(); // the <div> wrapper around the <a>\r\n        var topEl; // the element we want to match the top coordinate of\r\n        var options;\r\n        if (this.rowCnt === 1) {\r\n            topEl = view.el; // will cause the popover to cover any sort of header\r\n        }\r\n        else {\r\n            topEl = this.rowEls.eq(row); // will align with top of row\r\n        }\r\n        options = {\r\n            className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),\r\n            content: this.renderSegPopoverContent(row, col, segs),\r\n            parentEl: view.el,\r\n            top: topEl.offset().top,\r\n            autoHide: true,\r\n            viewportConstrain: this.opt('popoverViewportConstrain'),\r\n            hide: function () {\r\n                // kill everything when the popover is hidden\r\n                // notify events to be removed\r\n                if (_this.popoverSegs) {\r\n                    _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);\r\n                }\r\n                _this.segPopover.removeElement();\r\n                _this.segPopover = null;\r\n                _this.popoverSegs = null;\r\n            }\r\n        };\r\n        // Determine horizontal coordinate.\r\n        // We use the moreWrap instead of the <td> to avoid border confusion.\r\n        if (this.isRTL) {\r\n            options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\r\n        }\r\n        else {\r\n            options.left = moreWrap.offset().left - 1; // -1 to be over cell border\r\n        }\r\n        this.segPopover = new Popover_1.default(options);\r\n        this.segPopover.show();\r\n        // the popover doesn't live within the grid's container element, and thus won't get the event\r\n        // delegated-handlers for free. attach event-related handlers to the popover.\r\n        this.bindAllSegHandlersToEl(this.segPopover.el);\r\n        this.triggerAfterEventSegsRendered(segs);\r\n    };\r\n    // Builds the inner DOM contents of the segment popover\r\n    DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {\r\n        var view = this.view;\r\n        var theme = view.calendar.theme;\r\n        var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));\r\n        var content = $('<div class=\"fc-header ' + theme.getClass('popoverHeader') + '\">' +\r\n            '<span class=\"fc-close ' + theme.getIconClass('close') + '\"></span>' +\r\n            '<span class=\"fc-title\">' +\r\n            util_1.htmlEscape(title) +\r\n            '</span>' +\r\n            '<div class=\"fc-clear\"></div>' +\r\n            '</div>' +\r\n            '<div class=\"fc-body ' + theme.getClass('popoverContent') + '\">' +\r\n            '<div class=\"fc-event-container\"></div>' +\r\n            '</div>');\r\n        var segContainer = content.find('.fc-event-container');\r\n        var i;\r\n        // render each seg's `el` and only return the visible segs\r\n        segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true\r\n        this.popoverSegs = segs;\r\n        for (i = 0; i < segs.length; i++) {\r\n            // because segments in the popover are not part of a grid coordinate system, provide a hint to any\r\n            // grids that want to do drag-n-drop about which cell it came from\r\n            this.hitsNeeded();\r\n            segs[i].hit = this.getCellHit(row, col);\r\n            this.hitsNotNeeded();\r\n            segContainer.append(segs[i].el);\r\n        }\r\n        return content;\r\n    };\r\n    // Given the events within an array of segment objects, reslice them to be in a single day\r\n    DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\r\n        var dayStart = dayDate.clone();\r\n        var dayEnd = dayStart.clone().add(1, 'days');\r\n        var dayRange = new UnzonedRange_1.default(dayStart, dayEnd);\r\n        var newSegs = [];\r\n        var i;\r\n        var seg;\r\n        var slicedRange;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);\r\n            if (slicedRange) {\r\n                newSegs.push($.extend({}, seg, {\r\n                    footprint: new EventFootprint_1.default(new ComponentFootprint_1.default(slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),\r\n                    isStart: seg.isStart && slicedRange.isStart,\r\n                    isEnd: seg.isEnd && slicedRange.isEnd\r\n                }));\r\n            }\r\n        }\r\n        // force an order because eventsToSegs doesn't guarantee one\r\n        // TODO: research if still needed\r\n        this.eventRenderer.sortEventSegs(newSegs);\r\n        return newSegs;\r\n    };\r\n    // Generates the text that should be inside a \"more\" link, given the number of events it represents\r\n    DayGrid.prototype.getMoreLinkText = function (num) {\r\n        var opt = this.opt('eventLimitText');\r\n        if (typeof opt === 'function') {\r\n            return opt(num);\r\n        }\r\n        else {\r\n            return '+' + num + ' ' + opt;\r\n        }\r\n    };\r\n    // Returns segments within a given cell.\r\n    // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\r\n    DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\r\n        var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\r\n        var level = startLevel || 0;\r\n        var segs = [];\r\n        var seg;\r\n        while (level < segMatrix.length) {\r\n            seg = segMatrix[level][col];\r\n            if (seg) {\r\n                segs.push(seg);\r\n            }\r\n            level++;\r\n        }\r\n        return segs;\r\n    };\r\n    return DayGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = DayGrid;\r\nDayGrid.prototype.eventRendererClass = DayGridEventRenderer_1.default;\r\nDayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nDayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1.default;\r\nDayGrid.prototype.fillRendererClass = DayGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(DayGrid);\r\nDayTableMixin_1.default.mixInto(DayGrid);\r\n\n\n/***/ }),\n/* 67 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar DayGrid_1 = __webpack_require__(66);\r\n/* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\r\n// It is responsible for managing width/height.\r\nvar BasicView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BasicView, _super);\r\n    function BasicView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.dayGrid = _this.instantiateDayGrid();\r\n        _this.dayGrid.isRigid = _this.hasRigidRows();\r\n        if (_this.opt('weekNumbers')) {\r\n            if (_this.opt('weekNumbersWithinDays')) {\r\n                _this.dayGrid.cellWeekNumbersVisible = true;\r\n                _this.dayGrid.colWeekNumbersVisible = false;\r\n            }\r\n            else {\r\n                _this.dayGrid.cellWeekNumbersVisible = false;\r\n                _this.dayGrid.colWeekNumbersVisible = true;\r\n            }\r\n        }\r\n        _this.addChild(_this.dayGrid);\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    // Generates the DayGrid object this view needs. Draws from this.dayGridClass\r\n    BasicView.prototype.instantiateDayGrid = function () {\r\n        // generate a subclass on the fly with BasicView-specific behavior\r\n        // TODO: cache this subclass\r\n        var subclass = makeDayGridSubclass(this.dayGridClass);\r\n        return new subclass(this);\r\n    };\r\n    BasicView.prototype.executeDateRender = function (dateProfile) {\r\n        this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);\r\n        _super.prototype.executeDateRender.call(this, dateProfile);\r\n    };\r\n    BasicView.prototype.renderSkeleton = function () {\r\n        var dayGridContainerEl;\r\n        var dayGridEl;\r\n        this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\r\n        this.scroller.render();\r\n        dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\r\n        dayGridEl = $('<div class=\"fc-day-grid\">').appendTo(dayGridContainerEl);\r\n        this.el.find('.fc-body > tr > td').append(dayGridContainerEl);\r\n        this.dayGrid.headContainerEl = this.el.find('.fc-head-container');\r\n        this.dayGrid.setElement(dayGridEl);\r\n    };\r\n    BasicView.prototype.unrenderSkeleton = function () {\r\n        this.dayGrid.removeElement();\r\n        this.scroller.destroy();\r\n    };\r\n    // Builds the HTML skeleton for the view.\r\n    // The day-grid component will render inside of a container defined by this HTML.\r\n    BasicView.prototype.renderSkeletonHtml = function () {\r\n        var theme = this.calendar.theme;\r\n        return '' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            (this.opt('columnHeader') ?\r\n                '<thead class=\"fc-head\">' +\r\n                    '<tr>' +\r\n                    '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\r\n                    '</tr>' +\r\n                    '</thead>' :\r\n                '') +\r\n            '<tbody class=\"fc-body\">' +\r\n            '<tr>' +\r\n            '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' +\r\n            '</tr>' +\r\n            '</tbody>' +\r\n            '</table>';\r\n    };\r\n    // Generates an HTML attribute string for setting the width of the week number column, if it is known\r\n    BasicView.prototype.weekNumberStyleAttr = function () {\r\n        if (this.weekNumberWidth != null) {\r\n            return 'style=\"width:' + this.weekNumberWidth + 'px\"';\r\n        }\r\n        return '';\r\n    };\r\n    // Determines whether each row should have a constant height\r\n    BasicView.prototype.hasRigidRows = function () {\r\n        var eventLimit = this.opt('eventLimit');\r\n        return eventLimit && typeof eventLimit !== 'number';\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Refreshes the horizontal dimensions of the view\r\n    BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        var eventLimit = this.opt('eventLimit');\r\n        var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');\r\n        var scrollerHeight;\r\n        var scrollbarWidths;\r\n        // hack to give the view some height prior to dayGrid's columns being rendered\r\n        // TODO: separate setting height from scroller VS dayGrid.\r\n        if (!this.dayGrid.rowEls) {\r\n            if (!isAuto) {\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            return;\r\n        }\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        if (this.dayGrid.colWeekNumbersVisible) {\r\n            // Make sure all week number cells running down the side have the same width.\r\n            // Record the width for cells created later.\r\n            this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));\r\n        }\r\n        // reset all heights to be natural\r\n        this.scroller.clear();\r\n        util_1.uncompensateScroll(headRowEl);\r\n        this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n        // is the event limit a constant level number?\r\n        if (eventLimit && typeof eventLimit === 'number') {\r\n            this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\r\n        }\r\n        // distribute the height to the rows\r\n        // (totalHeight is a \"recommended\" value if isAuto)\r\n        scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n        this.setGridHeight(scrollerHeight, isAuto);\r\n        // is the event limit dynamically calculated?\r\n        if (eventLimit && typeof eventLimit !== 'number') {\r\n            this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\r\n        }\r\n        if (!isAuto) { // should we force dimensions of the scroll container?\r\n            this.scroller.setHeight(scrollerHeight);\r\n            scrollbarWidths = this.scroller.getScrollbarWidths();\r\n            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n                util_1.compensateScroll(headRowEl, scrollbarWidths);\r\n                // doing the scrollbar compensation might have created text overflow which created more height. redo\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            // guarantees the same scrollbar widths\r\n            this.scroller.lockOverflow(scrollbarWidths);\r\n        }\r\n    };\r\n    // given a desired total height of the view, returns what the height of the scroller should be\r\n    BasicView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    // Sets the height of just the DayGrid component in this view\r\n    BasicView.prototype.setGridHeight = function (height, isAuto) {\r\n        if (isAuto) {\r\n            util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\r\n        }\r\n        else {\r\n            util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\r\n        }\r\n    };\r\n    /* Scroll\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    BasicView.prototype.computeInitialDateScroll = function () {\r\n        return { top: 0 };\r\n    };\r\n    BasicView.prototype.queryDateScroll = function () {\r\n        return { top: this.scroller.getScrollTop() };\r\n    };\r\n    BasicView.prototype.applyDateScroll = function (scroll) {\r\n        if (scroll.top !== undefined) {\r\n            this.scroller.setScrollTop(scroll.top);\r\n        }\r\n    };\r\n    return BasicView;\r\n}(View_1.default));\r\nexports.default = BasicView;\r\nBasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1.default;\r\nBasicView.prototype.dayGridClass = DayGrid_1.default;\r\n// customize the rendering behavior of BasicView's dayGrid\r\nfunction makeDayGridSubclass(SuperClass) {\r\n    return /** @class */ (function (_super) {\r\n        tslib_1.__extends(SubClass, _super);\r\n        function SubClass() {\r\n            var _this = _super !== null && _super.apply(this, arguments) || this;\r\n            _this.colWeekNumbersVisible = false; // display week numbers along the side?\r\n            return _this;\r\n        }\r\n        // Generates the HTML that will go before the day-of week header cells\r\n        SubClass.prototype.renderHeadIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '' +\r\n                    '<th class=\"fc-week-number ' + view.calendar.theme.getClass('widgetHeader') + '\" ' + view.weekNumberStyleAttr() + '>' +\r\n                    '<span>' + // needed for matchCellWidths\r\n                    util_1.htmlEscape(this.opt('weekNumberTitle')) +\r\n                    '</span>' +\r\n                    '</th>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\r\n        SubClass.prototype.renderNumberIntroHtml = function (row) {\r\n            var view = this.view;\r\n            var weekStart = this.getCellDate(row, 0);\r\n            if (this.colWeekNumbersVisible) {\r\n                return '' +\r\n                    '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '>' +\r\n                    view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n                    { date: weekStart, type: 'week', forceOff: this.colCnt === 1 }, weekStart.format('w') // inner HTML\r\n                    ) +\r\n                    '</td>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that goes before the day bg cells for each day-row\r\n        SubClass.prototype.renderBgIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '<td class=\"fc-week-number ' + view.calendar.theme.getClass('widgetContent') + '\" ' +\r\n                    view.weekNumberStyleAttr() + '></td>';\r\n            }\r\n            return '';\r\n        };\r\n        // Generates the HTML that goes before every other type of row generated by DayGrid.\r\n        // Affects helper-skeleton and highlight-skeleton rows.\r\n        SubClass.prototype.renderIntroHtml = function () {\r\n            var view = this.view;\r\n            if (this.colWeekNumbersVisible) {\r\n                return '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '></td>';\r\n            }\r\n            return '';\r\n        };\r\n        SubClass.prototype.getIsNumbersVisible = function () {\r\n            return DayGrid_1.default.prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;\r\n        };\r\n        return SubClass;\r\n    }(SuperClass));\r\n}\r\n\n\n/***/ }),\n/* 68 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar DateProfileGenerator_1 = __webpack_require__(55);\r\nvar BasicViewDateProfileGenerator = /** @class */ (function (_super) {\r\n    tslib_1.__extends(BasicViewDateProfileGenerator, _super);\r\n    function BasicViewDateProfileGenerator() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Computes the date range that will be rendered.\r\n    BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange\r\n        var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n        var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n        // year and month views should be aligned with weeks. this is already done for week\r\n        if (/^(year|month)$/.test(currentRangeUnit)) {\r\n            start.startOf('week');\r\n            // make end-of-week if not already\r\n            if (end.weekday()) {\r\n                end.add(1, 'week').startOf('week'); // exclusively move backwards\r\n            }\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    return BasicViewDateProfileGenerator;\r\n}(DateProfileGenerator_1.default));\r\nexports.default = BasicViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 69 */,\n/* 70 */,\n/* 71 */,\n/* 72 */,\n/* 73 */,\n/* 74 */,\n/* 75 */,\n/* 76 */,\n/* 77 */,\n/* 78 */,\n/* 79 */,\n/* 80 */,\n/* 81 */,\n/* 82 */,\n/* 83 */,\n/* 84 */,\n/* 85 */,\n/* 86 */,\n/* 87 */,\n/* 88 */,\n/* 89 */,\n/* 90 */,\n/* 91 */,\n/* 92 */,\n/* 93 */,\n/* 94 */,\n/* 95 */,\n/* 96 */,\n/* 97 */,\n/* 98 */,\n/* 99 */,\n/* 100 */,\n/* 101 */,\n/* 102 */,\n/* 103 */,\n/* 104 */,\n/* 105 */,\n/* 106 */,\n/* 107 */,\n/* 108 */,\n/* 109 */,\n/* 110 */,\n/* 111 */,\n/* 112 */,\n/* 113 */,\n/* 114 */,\n/* 115 */,\n/* 116 */,\n/* 117 */,\n/* 118 */,\n/* 119 */,\n/* 120 */,\n/* 121 */,\n/* 122 */,\n/* 123 */,\n/* 124 */,\n/* 125 */,\n/* 126 */,\n/* 127 */,\n/* 128 */,\n/* 129 */,\n/* 130 */,\n/* 131 */,\n/* 132 */,\n/* 133 */,\n/* 134 */,\n/* 135 */,\n/* 136 */,\n/* 137 */,\n/* 138 */,\n/* 139 */,\n/* 140 */,\n/* 141 */,\n/* 142 */,\n/* 143 */,\n/* 144 */,\n/* 145 */,\n/* 146 */,\n/* 147 */,\n/* 148 */,\n/* 149 */,\n/* 150 */,\n/* 151 */,\n/* 152 */,\n/* 153 */,\n/* 154 */,\n/* 155 */,\n/* 156 */,\n/* 157 */,\n/* 158 */,\n/* 159 */,\n/* 160 */,\n/* 161 */,\n/* 162 */,\n/* 163 */,\n/* 164 */,\n/* 165 */,\n/* 166 */,\n/* 167 */,\n/* 168 */,\n/* 169 */,\n/* 170 */,\n/* 171 */,\n/* 172 */,\n/* 173 */,\n/* 174 */,\n/* 175 */,\n/* 176 */,\n/* 177 */,\n/* 178 */,\n/* 179 */,\n/* 180 */,\n/* 181 */,\n/* 182 */,\n/* 183 */,\n/* 184 */,\n/* 185 */,\n/* 186 */,\n/* 187 */,\n/* 188 */,\n/* 189 */,\n/* 190 */,\n/* 191 */,\n/* 192 */,\n/* 193 */,\n/* 194 */,\n/* 195 */,\n/* 196 */,\n/* 197 */,\n/* 198 */,\n/* 199 */,\n/* 200 */,\n/* 201 */,\n/* 202 */,\n/* 203 */,\n/* 204 */,\n/* 205 */,\n/* 206 */,\n/* 207 */,\n/* 208 */,\n/* 209 */,\n/* 210 */,\n/* 211 */,\n/* 212 */,\n/* 213 */,\n/* 214 */,\n/* 215 */,\n/* 216 */,\n/* 217 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar util_1 = __webpack_require__(19);\r\nvar Constraints = /** @class */ (function () {\r\n    function Constraints(eventManager, _calendar) {\r\n        this.eventManager = eventManager;\r\n        this._calendar = _calendar;\r\n    }\r\n    Constraints.prototype.opt = function (name) {\r\n        return this._calendar.opt(name);\r\n    };\r\n    /*\r\n    determines if eventInstanceGroup is allowed,\r\n    in relation to other EVENTS and business hours.\r\n    */\r\n    Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\r\n        var eventDef = eventInstanceGroup.getEventDef();\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\r\n        var i;\r\n        var peerEventInstances = this.getPeerEventInstances(eventDef);\r\n        var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n        var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n        var constraintVal = eventDef.getConstraint();\r\n        var overlapVal = eventDef.getOverlap();\r\n        var eventAllowFunc = this.opt('eventAllow');\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (eventAllowFunc) {\r\n            for (i = 0; i < eventFootprints.length; i++) {\r\n                if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {\r\n                    return false;\r\n                }\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    Constraints.prototype.getPeerEventInstances = function (eventDef) {\r\n        return this.eventManager.getEventInstancesWithoutId(eventDef.id);\r\n    };\r\n    Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n        var peerEventInstances = this.eventManager.getEventInstances();\r\n        var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\r\n        var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\r\n        var selectAllowFunc;\r\n        if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {\r\n            selectAllowFunc = this.opt('selectAllow');\r\n            if (selectAllowFunc) {\r\n                return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;\r\n            }\r\n            else {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional\r\n    ) {\r\n        var constraintFootprints; // ComponentFootprint[]\r\n        var overlapEventFootprints; // EventFootprint[]\r\n        if (constraintVal != null) {\r\n            constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);\r\n            if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {\r\n                return false;\r\n            }\r\n        }\r\n        overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);\r\n        if (overlapVal === false) {\r\n            if (overlapEventFootprints.length) {\r\n                return false;\r\n            }\r\n        }\r\n        else if (typeof overlapVal === 'function') {\r\n            if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        if (subjectEventInstance) {\r\n            if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n        return true;\r\n    };\r\n    // Constraint\r\n    // ------------------------------------------------------------------------------------------------\r\n    Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {\r\n        var i;\r\n        for (i = 0; i < constraintFootprints.length; i++) {\r\n            if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {\r\n                return true;\r\n            }\r\n        }\r\n        return false;\r\n    };\r\n    Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {\r\n        var eventInstances;\r\n        if (constraintVal === 'businessHours') {\r\n            return this.buildCurrentBusinessFootprints(isAllDay);\r\n        }\r\n        else if (typeof constraintVal === 'object') {\r\n            eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events\r\n            if (!eventInstances) { // invalid input. fallback to parsing footprint directly\r\n                return this.parseFootprints(constraintVal);\r\n            }\r\n            else {\r\n                return this.eventInstancesToFootprints(eventInstances);\r\n            }\r\n        }\r\n        else if (constraintVal != null) { // an ID\r\n            eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);\r\n            return this.eventInstancesToFootprints(eventInstances);\r\n        }\r\n    };\r\n    // returns ComponentFootprint[]\r\n    // uses current view's range\r\n    Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {\r\n        var view = this._calendar.view;\r\n        var businessHourGenerator = view.get('businessHourGenerator');\r\n        var unzonedRange = view.dateProfile.activeUnzonedRange;\r\n        var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);\r\n        if (eventInstanceGroup) {\r\n            return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);\r\n        }\r\n        else {\r\n            return [];\r\n        }\r\n    };\r\n    // conversion util\r\n    Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {\r\n        var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);\r\n        var eventFootprints = this.eventRangesToEventFootprints(eventRanges);\r\n        return eventFootprints.map(util_1.eventFootprintToComponentFootprint);\r\n    };\r\n    // Overlap\r\n    // ------------------------------------------------------------------------------------------------\r\n    Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {\r\n        var overlapEventFootprints = [];\r\n        var i;\r\n        for (i = 0; i < peerEventFootprints.length; i++) {\r\n            if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {\r\n                overlapEventFootprints.push(peerEventFootprints[i]);\r\n            }\r\n        }\r\n        return overlapEventFootprints;\r\n    };\r\n    // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints\r\n    // ------------------------------------------------------------------------------------------------\r\n    // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to\r\n    // constraints whereas the Grid code is related to rendering. Each approach might want to convert\r\n    // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make\r\n    // this more DRY.\r\n    /*\r\n    Returns false on invalid input.\r\n    */\r\n    Constraints.prototype.parseEventDefToInstances = function (eventInput) {\r\n        var eventManager = this.eventManager;\r\n        var eventDef = EventDefParser_1.default.parse(eventInput, new EventSource_1.default(this._calendar));\r\n        if (!eventDef) { // invalid\r\n            return false;\r\n        }\r\n        return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);\r\n    };\r\n    Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n        var i;\r\n        var eventFootprints = [];\r\n        for (i = 0; i < eventRanges.length; i++) {\r\n            eventFootprints.push.apply(// footprints\r\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n        }\r\n        return eventFootprints;\r\n    };\r\n    Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n        return [util_1.eventRangeToEventFootprint(eventRange)];\r\n    };\r\n    /*\r\n    Parses footprints directly.\r\n    Very similar to EventDateProfile::parse :(\r\n    */\r\n    Constraints.prototype.parseFootprints = function (rawInput) {\r\n        var start;\r\n        var end;\r\n        if (rawInput.start) {\r\n            start = this._calendar.moment(rawInput.start);\r\n            if (!start.isValid()) {\r\n                start = null;\r\n            }\r\n        }\r\n        if (rawInput.end) {\r\n            end = this._calendar.moment(rawInput.end);\r\n            if (!end.isValid()) {\r\n                end = null;\r\n            }\r\n        }\r\n        return [\r\n            new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), (start && !start.hasTime()) || (end && !end.hasTime()) // isAllDay\r\n            )\r\n        ];\r\n    };\r\n    // Footprint Utils\r\n    // ----------------------------------------------------------------------------------------\r\n    Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {\r\n        return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);\r\n    };\r\n    Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {\r\n        return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);\r\n    };\r\n    return Constraints;\r\n}());\r\nexports.default = Constraints;\r\n// optional subjectEventInstance\r\nfunction isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {\r\n    var i;\r\n    for (i = 0; i < overlapEventFootprints.length; i++) {\r\n        if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {\r\n            return false;\r\n        }\r\n    }\r\n    return true;\r\n}\r\nfunction isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {\r\n    var subjectLegacyInstance = subjectEventInstance.toLegacy();\r\n    var i;\r\n    var overlapEventInstance;\r\n    var overlapEventDef;\r\n    var overlapVal;\r\n    for (i = 0; i < overlapEventFootprints.length; i++) {\r\n        overlapEventInstance = overlapEventFootprints[i].eventInstance;\r\n        overlapEventDef = overlapEventInstance.def;\r\n        // don't need to pass in calendar, because don't want to consider global eventOverlap property,\r\n        // because we already considered that earlier in the process.\r\n        overlapVal = overlapEventDef.getOverlap();\r\n        if (overlapVal === false) {\r\n            return false;\r\n        }\r\n        else if (typeof overlapVal === 'function') {\r\n            if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {\r\n                return false;\r\n            }\r\n        }\r\n    }\r\n    return true;\r\n}\r\n\n\n/***/ }),\n/* 218 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(19);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar RecurringEventDef_1 = __webpack_require__(54);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar BUSINESS_HOUR_EVENT_DEFAULTS = {\r\n    start: '09:00',\r\n    end: '17:00',\r\n    dow: [1, 2, 3, 4, 5],\r\n    rendering: 'inverse-background'\r\n    // classNames are defined in businessHoursSegClasses\r\n};\r\nvar BusinessHourGenerator = /** @class */ (function () {\r\n    function BusinessHourGenerator(rawComplexDef, calendar) {\r\n        this.rawComplexDef = rawComplexDef;\r\n        this.calendar = calendar;\r\n    }\r\n    BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {\r\n        var eventDefs = this.buildEventDefs(isAllDay);\r\n        var eventInstanceGroup;\r\n        if (eventDefs.length) {\r\n            eventInstanceGroup = new EventInstanceGroup_1.default(util_1.eventDefsToEventInstances(eventDefs, unzonedRange));\r\n            // so that inverse-background rendering can happen even when no eventRanges in view\r\n            eventInstanceGroup.explicitEventDef = eventDefs[0];\r\n            return eventInstanceGroup;\r\n        }\r\n    };\r\n    BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {\r\n        var rawComplexDef = this.rawComplexDef;\r\n        var rawDefs = [];\r\n        var requireDow = false;\r\n        var i;\r\n        var defs = [];\r\n        if (rawComplexDef === true) {\r\n            rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim\r\n        }\r\n        else if ($.isPlainObject(rawComplexDef)) {\r\n            rawDefs = [rawComplexDef];\r\n        }\r\n        else if ($.isArray(rawComplexDef)) {\r\n            rawDefs = rawComplexDef;\r\n            requireDow = true; // every sub-definition NEEDS a day-of-week\r\n        }\r\n        for (i = 0; i < rawDefs.length; i++) {\r\n            if (!requireDow || rawDefs[i].dow) {\r\n                defs.push(this.buildEventDef(isAllDay, rawDefs[i]));\r\n            }\r\n        }\r\n        return defs;\r\n    };\r\n    BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {\r\n        var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);\r\n        if (isAllDay) {\r\n            fullRawDef.start = null;\r\n            fullRawDef.end = null;\r\n        }\r\n        return RecurringEventDef_1.default.parse(fullRawDef, new EventSource_1.default(this.calendar) // dummy source\r\n        );\r\n    };\r\n    return BusinessHourGenerator;\r\n}());\r\nexports.default = BusinessHourGenerator;\r\n\n\n/***/ }),\n/* 219 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventPeriod = /** @class */ (function () {\r\n    function EventPeriod(start, end, timezone) {\r\n        this.pendingCnt = 0;\r\n        this.freezeDepth = 0;\r\n        this.stuntedReleaseCnt = 0;\r\n        this.releaseCnt = 0;\r\n        this.start = start;\r\n        this.end = end;\r\n        this.timezone = timezone;\r\n        this.unzonedRange = new UnzonedRange_1.default(start.clone().stripZone(), end.clone().stripZone());\r\n        this.requestsByUid = {};\r\n        this.eventDefsByUid = {};\r\n        this.eventDefsById = {};\r\n        this.eventInstanceGroupsById = {};\r\n    }\r\n    EventPeriod.prototype.isWithinRange = function (start, end) {\r\n        // TODO: use a range util function?\r\n        return !start.isBefore(this.start) && !end.isAfter(this.end);\r\n    };\r\n    // Requesting and Purging\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.requestSources = function (sources) {\r\n        this.freeze();\r\n        for (var i = 0; i < sources.length; i++) {\r\n            this.requestSource(sources[i]);\r\n        }\r\n        this.thaw();\r\n    };\r\n    EventPeriod.prototype.requestSource = function (source) {\r\n        var _this = this;\r\n        var request = { source: source, status: 'pending', eventDefs: null };\r\n        this.requestsByUid[source.uid] = request;\r\n        this.pendingCnt += 1;\r\n        source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {\r\n            if (request.status !== 'cancelled') {\r\n                request.status = 'completed';\r\n                request.eventDefs = eventDefs;\r\n                _this.addEventDefs(eventDefs);\r\n                _this.pendingCnt--;\r\n                _this.tryRelease();\r\n            }\r\n        }, function () {\r\n            if (request.status !== 'cancelled') {\r\n                request.status = 'failed';\r\n                _this.pendingCnt--;\r\n                _this.tryRelease();\r\n            }\r\n        });\r\n    };\r\n    EventPeriod.prototype.purgeSource = function (source) {\r\n        var request = this.requestsByUid[source.uid];\r\n        if (request) {\r\n            delete this.requestsByUid[source.uid];\r\n            if (request.status === 'pending') {\r\n                request.status = 'cancelled';\r\n                this.pendingCnt--;\r\n                this.tryRelease();\r\n            }\r\n            else if (request.status === 'completed') {\r\n                request.eventDefs.forEach(this.removeEventDef.bind(this));\r\n            }\r\n        }\r\n    };\r\n    EventPeriod.prototype.purgeAllSources = function () {\r\n        var requestsByUid = this.requestsByUid;\r\n        var uid;\r\n        var request;\r\n        var completedCnt = 0;\r\n        for (uid in requestsByUid) {\r\n            request = requestsByUid[uid];\r\n            if (request.status === 'pending') {\r\n                request.status = 'cancelled';\r\n            }\r\n            else if (request.status === 'completed') {\r\n                completedCnt++;\r\n            }\r\n        }\r\n        this.requestsByUid = {};\r\n        this.pendingCnt = 0;\r\n        if (completedCnt) {\r\n            this.removeAllEventDefs(); // might release\r\n        }\r\n    };\r\n    // Event Definitions\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {\r\n        return this.eventDefsByUid[eventDefUid];\r\n    };\r\n    EventPeriod.prototype.getEventDefsById = function (eventDefId) {\r\n        var a = this.eventDefsById[eventDefId];\r\n        if (a) {\r\n            return a.slice(); // clone\r\n        }\r\n        return [];\r\n    };\r\n    EventPeriod.prototype.addEventDefs = function (eventDefs) {\r\n        for (var i = 0; i < eventDefs.length; i++) {\r\n            this.addEventDef(eventDefs[i]);\r\n        }\r\n    };\r\n    EventPeriod.prototype.addEventDef = function (eventDef) {\r\n        var eventDefsById = this.eventDefsById;\r\n        var eventDefId = eventDef.id;\r\n        var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);\r\n        var eventInstances = eventDef.buildInstances(this.unzonedRange);\r\n        var i;\r\n        eventDefs.push(eventDef);\r\n        this.eventDefsByUid[eventDef.uid] = eventDef;\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            this.addEventInstance(eventInstances[i], eventDefId);\r\n        }\r\n    };\r\n    EventPeriod.prototype.removeEventDefsById = function (eventDefId) {\r\n        var _this = this;\r\n        this.getEventDefsById(eventDefId).forEach(function (eventDef) {\r\n            _this.removeEventDef(eventDef);\r\n        });\r\n    };\r\n    EventPeriod.prototype.removeAllEventDefs = function () {\r\n        var isEmpty = $.isEmptyObject(this.eventDefsByUid);\r\n        this.eventDefsByUid = {};\r\n        this.eventDefsById = {};\r\n        this.eventInstanceGroupsById = {};\r\n        if (!isEmpty) {\r\n            this.tryRelease();\r\n        }\r\n    };\r\n    EventPeriod.prototype.removeEventDef = function (eventDef) {\r\n        var eventDefsById = this.eventDefsById;\r\n        var eventDefs = eventDefsById[eventDef.id];\r\n        delete this.eventDefsByUid[eventDef.uid];\r\n        if (eventDefs) {\r\n            util_1.removeExact(eventDefs, eventDef);\r\n            if (!eventDefs.length) {\r\n                delete eventDefsById[eventDef.id];\r\n            }\r\n            this.removeEventInstancesForDef(eventDef);\r\n        }\r\n    };\r\n    // Event Instances\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.getEventInstances = function () {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstances = [];\r\n        var id;\r\n        for (id in eventInstanceGroupsById) {\r\n            eventInstances.push.apply(eventInstances, // append\r\n            eventInstanceGroupsById[id].eventInstances);\r\n        }\r\n        return eventInstances;\r\n    };\r\n    EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {\r\n        var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];\r\n        if (eventInstanceGroup) {\r\n            return eventInstanceGroup.eventInstances.slice(); // clone\r\n        }\r\n        return [];\r\n    };\r\n    EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var matchingInstances = [];\r\n        var id;\r\n        for (id in eventInstanceGroupsById) {\r\n            if (id !== eventDefId) {\r\n                matchingInstances.push.apply(matchingInstances, // append\r\n                eventInstanceGroupsById[id].eventInstances);\r\n            }\r\n        }\r\n        return matchingInstances;\r\n    };\r\n    EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstanceGroup = eventInstanceGroupsById[eventDefId] ||\r\n            (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1.default());\r\n        eventInstanceGroup.eventInstances.push(eventInstance);\r\n        this.tryRelease();\r\n    };\r\n    EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {\r\n        var eventInstanceGroupsById = this.eventInstanceGroupsById;\r\n        var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];\r\n        var removeCnt;\r\n        if (eventInstanceGroup) {\r\n            removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {\r\n                return currentEventInstance.def === eventDef;\r\n            });\r\n            if (!eventInstanceGroup.eventInstances.length) {\r\n                delete eventInstanceGroupsById[eventDef.id];\r\n            }\r\n            if (removeCnt) {\r\n                this.tryRelease();\r\n            }\r\n        }\r\n    };\r\n    // Releasing and Freezing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventPeriod.prototype.tryRelease = function () {\r\n        if (!this.pendingCnt) {\r\n            if (!this.freezeDepth) {\r\n                this.release();\r\n            }\r\n            else {\r\n                this.stuntedReleaseCnt++;\r\n            }\r\n        }\r\n    };\r\n    EventPeriod.prototype.release = function () {\r\n        this.releaseCnt++;\r\n        this.trigger('release', this.eventInstanceGroupsById);\r\n    };\r\n    EventPeriod.prototype.whenReleased = function () {\r\n        var _this = this;\r\n        if (this.releaseCnt) {\r\n            return Promise_1.default.resolve(this.eventInstanceGroupsById);\r\n        }\r\n        else {\r\n            return Promise_1.default.construct(function (onResolve) {\r\n                _this.one('release', onResolve);\r\n            });\r\n        }\r\n    };\r\n    EventPeriod.prototype.freeze = function () {\r\n        if (!(this.freezeDepth++)) {\r\n            this.stuntedReleaseCnt = 0;\r\n        }\r\n    };\r\n    EventPeriod.prototype.thaw = function () {\r\n        if (!(--this.freezeDepth) && this.stuntedReleaseCnt && !this.pendingCnt) {\r\n            this.release();\r\n        }\r\n    };\r\n    return EventPeriod;\r\n}());\r\nexports.default = EventPeriod;\r\nEmitterMixin_1.default.mixInto(EventPeriod);\r\n\n\n/***/ }),\n/* 220 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventPeriod_1 = __webpack_require__(219);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar EventManager = /** @class */ (function () {\r\n    function EventManager(calendar) {\r\n        this.calendar = calendar;\r\n        this.stickySource = new ArrayEventSource_1.default(calendar);\r\n        this.otherSources = [];\r\n    }\r\n    EventManager.prototype.requestEvents = function (start, end, timezone, force) {\r\n        if (force ||\r\n            !this.currentPeriod ||\r\n            !this.currentPeriod.isWithinRange(start, end) ||\r\n            timezone !== this.currentPeriod.timezone) {\r\n            this.setPeriod(// will change this.currentPeriod\r\n            new EventPeriod_1.default(start, end, timezone));\r\n        }\r\n        return this.currentPeriod.whenReleased();\r\n    };\r\n    // Source Adding/Removing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.addSource = function (eventSource) {\r\n        this.otherSources.push(eventSource);\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.requestSource(eventSource); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeSource = function (doomedSource) {\r\n        util_1.removeExact(this.otherSources, doomedSource);\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.purgeSource(doomedSource); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeAllSources = function () {\r\n        this.otherSources = [];\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.purgeAllSources(); // might release\r\n        }\r\n    };\r\n    // Source Refetching\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.refetchSource = function (eventSource) {\r\n        var currentPeriod = this.currentPeriod;\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            currentPeriod.purgeSource(eventSource);\r\n            currentPeriod.requestSource(eventSource);\r\n            currentPeriod.thaw();\r\n        }\r\n    };\r\n    EventManager.prototype.refetchAllSources = function () {\r\n        var currentPeriod = this.currentPeriod;\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            currentPeriod.purgeAllSources();\r\n            currentPeriod.requestSources(this.getSources());\r\n            currentPeriod.thaw();\r\n        }\r\n    };\r\n    // Source Querying\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.getSources = function () {\r\n        return [this.stickySource].concat(this.otherSources);\r\n    };\r\n    // like querySources, but accepts multple match criteria (like multiple IDs)\r\n    EventManager.prototype.multiQuerySources = function (matchInputs) {\r\n        // coerce into an array\r\n        if (!matchInputs) {\r\n            matchInputs = [];\r\n        }\r\n        else if (!$.isArray(matchInputs)) {\r\n            matchInputs = [matchInputs];\r\n        }\r\n        var matchingSources = [];\r\n        var i;\r\n        // resolve raw inputs to real event source objects\r\n        for (i = 0; i < matchInputs.length; i++) {\r\n            matchingSources.push.apply(// append\r\n            matchingSources, this.querySources(matchInputs[i]));\r\n        }\r\n        return matchingSources;\r\n    };\r\n    // matchInput can either by a real event source object, an ID, or the function/URL for the source.\r\n    // returns an array of matching source objects.\r\n    EventManager.prototype.querySources = function (matchInput) {\r\n        var sources = this.otherSources;\r\n        var i;\r\n        var source;\r\n        // given a proper event source object\r\n        for (i = 0; i < sources.length; i++) {\r\n            source = sources[i];\r\n            if (source === matchInput) {\r\n                return [source];\r\n            }\r\n        }\r\n        // an ID match\r\n        source = this.getSourceById(EventSource_1.default.normalizeId(matchInput));\r\n        if (source) {\r\n            return [source];\r\n        }\r\n        // parse as an event source\r\n        matchInput = EventSourceParser_1.default.parse(matchInput, this.calendar);\r\n        if (matchInput) {\r\n            return $.grep(sources, function (source) {\r\n                return isSourcesEquivalent(matchInput, source);\r\n            });\r\n        }\r\n    };\r\n    /*\r\n    ID assumed to already be normalized\r\n    */\r\n    EventManager.prototype.getSourceById = function (id) {\r\n        return $.grep(this.otherSources, function (source) {\r\n            return source.id && source.id === id;\r\n        })[0];\r\n    };\r\n    // Event-Period\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.setPeriod = function (eventPeriod) {\r\n        if (this.currentPeriod) {\r\n            this.unbindPeriod(this.currentPeriod);\r\n            this.currentPeriod = null;\r\n        }\r\n        this.currentPeriod = eventPeriod;\r\n        this.bindPeriod(eventPeriod);\r\n        eventPeriod.requestSources(this.getSources());\r\n    };\r\n    EventManager.prototype.bindPeriod = function (eventPeriod) {\r\n        this.listenTo(eventPeriod, 'release', function (eventsPayload) {\r\n            this.trigger('release', eventsPayload);\r\n        });\r\n    };\r\n    EventManager.prototype.unbindPeriod = function (eventPeriod) {\r\n        this.stopListeningTo(eventPeriod);\r\n    };\r\n    // Event Getting/Adding/Removing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.getEventDefByUid = function (uid) {\r\n        if (this.currentPeriod) {\r\n            return this.currentPeriod.getEventDefByUid(uid);\r\n        }\r\n    };\r\n    EventManager.prototype.addEventDef = function (eventDef, isSticky) {\r\n        if (isSticky) {\r\n            this.stickySource.addEventDef(eventDef);\r\n        }\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.addEventDef(eventDef); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeEventDefsById = function (eventId) {\r\n        this.getSources().forEach(function (eventSource) {\r\n            eventSource.removeEventDefsById(eventId);\r\n        });\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.removeEventDefsById(eventId); // might release\r\n        }\r\n    };\r\n    EventManager.prototype.removeAllEventDefs = function () {\r\n        this.getSources().forEach(function (eventSource) {\r\n            eventSource.removeAllEventDefs();\r\n        });\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.removeAllEventDefs();\r\n        }\r\n    };\r\n    // Event Mutating\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    /*\r\n    Returns an undo function.\r\n    */\r\n    EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {\r\n        var currentPeriod = this.currentPeriod;\r\n        var eventDefs;\r\n        var undoFuncs = [];\r\n        if (currentPeriod) {\r\n            currentPeriod.freeze();\r\n            eventDefs = currentPeriod.getEventDefsById(eventDefId);\r\n            eventDefs.forEach(function (eventDef) {\r\n                // add/remove esp because id might change\r\n                currentPeriod.removeEventDef(eventDef);\r\n                undoFuncs.push(eventDefMutation.mutateSingle(eventDef));\r\n                currentPeriod.addEventDef(eventDef);\r\n            });\r\n            currentPeriod.thaw();\r\n            return function () {\r\n                currentPeriod.freeze();\r\n                for (var i = 0; i < eventDefs.length; i++) {\r\n                    currentPeriod.removeEventDef(eventDefs[i]);\r\n                    undoFuncs[i]();\r\n                    currentPeriod.addEventDef(eventDefs[i]);\r\n                }\r\n                currentPeriod.thaw();\r\n            };\r\n        }\r\n        return function () { };\r\n    };\r\n    /*\r\n    copies and then mutates\r\n    */\r\n    EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {\r\n        var eventDefs = this.getEventDefsById(eventDefId);\r\n        var i;\r\n        var defCopy;\r\n        var allInstances = [];\r\n        for (i = 0; i < eventDefs.length; i++) {\r\n            defCopy = eventDefs[i].clone();\r\n            if (defCopy instanceof SingleEventDef_1.default) {\r\n                eventDefMutation.mutateSingle(defCopy);\r\n                allInstances.push.apply(allInstances, // append\r\n                defCopy.buildInstances());\r\n            }\r\n        }\r\n        return new EventInstanceGroup_1.default(allInstances);\r\n    };\r\n    // Freezing\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    EventManager.prototype.freeze = function () {\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.freeze();\r\n        }\r\n    };\r\n    EventManager.prototype.thaw = function () {\r\n        if (this.currentPeriod) {\r\n            this.currentPeriod.thaw();\r\n        }\r\n    };\r\n    // methods that simply forward to EventPeriod\r\n    EventManager.prototype.getEventDefsById = function (eventDefId) {\r\n        return this.currentPeriod.getEventDefsById(eventDefId);\r\n    };\r\n    EventManager.prototype.getEventInstances = function () {\r\n        return this.currentPeriod.getEventInstances();\r\n    };\r\n    EventManager.prototype.getEventInstancesWithId = function (eventDefId) {\r\n        return this.currentPeriod.getEventInstancesWithId(eventDefId);\r\n    };\r\n    EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {\r\n        return this.currentPeriod.getEventInstancesWithoutId(eventDefId);\r\n    };\r\n    return EventManager;\r\n}());\r\nexports.default = EventManager;\r\nEmitterMixin_1.default.mixInto(EventManager);\r\nListenerMixin_1.default.mixInto(EventManager);\r\nfunction isSourcesEquivalent(source0, source1) {\r\n    return source0.getPrimitive() === source1.getPrimitive();\r\n}\r\n\n\n/***/ }),\n/* 221 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar StandardTheme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(StandardTheme, _super);\r\n    function StandardTheme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return StandardTheme;\r\n}(Theme_1.default));\r\nexports.default = StandardTheme;\r\nStandardTheme.prototype.classes = {\r\n    widget: 'fc-unthemed',\r\n    widgetHeader: 'fc-widget-header',\r\n    widgetContent: 'fc-widget-content',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'fc-button',\r\n    cornerLeft: 'fc-corner-left',\r\n    cornerRight: 'fc-corner-right',\r\n    stateDefault: 'fc-state-default',\r\n    stateActive: 'fc-state-active',\r\n    stateDisabled: 'fc-state-disabled',\r\n    stateHover: 'fc-state-hover',\r\n    stateDown: 'fc-state-down',\r\n    popoverHeader: 'fc-widget-header',\r\n    popoverContent: 'fc-widget-content',\r\n    // day grid\r\n    headerRow: 'fc-widget-header',\r\n    dayRow: 'fc-widget-content',\r\n    // list view\r\n    listView: 'fc-widget-content'\r\n};\r\nStandardTheme.prototype.baseIconClass = 'fc-icon';\r\nStandardTheme.prototype.iconClasses = {\r\n    close: 'fc-icon-x',\r\n    prev: 'fc-icon-left-single-arrow',\r\n    next: 'fc-icon-right-single-arrow',\r\n    prevYear: 'fc-icon-left-double-arrow',\r\n    nextYear: 'fc-icon-right-double-arrow'\r\n};\r\nStandardTheme.prototype.iconOverrideOption = 'buttonIcons';\r\nStandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\r\nStandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\r\n\n\n/***/ }),\n/* 222 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar JqueryUiTheme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JqueryUiTheme, _super);\r\n    function JqueryUiTheme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return JqueryUiTheme;\r\n}(Theme_1.default));\r\nexports.default = JqueryUiTheme;\r\nJqueryUiTheme.prototype.classes = {\r\n    widget: 'ui-widget',\r\n    widgetHeader: 'ui-widget-header',\r\n    widgetContent: 'ui-widget-content',\r\n    buttonGroup: 'fc-button-group',\r\n    button: 'ui-button',\r\n    cornerLeft: 'ui-corner-left',\r\n    cornerRight: 'ui-corner-right',\r\n    stateDefault: 'ui-state-default',\r\n    stateActive: 'ui-state-active',\r\n    stateDisabled: 'ui-state-disabled',\r\n    stateHover: 'ui-state-hover',\r\n    stateDown: 'ui-state-down',\r\n    today: 'ui-state-highlight',\r\n    popoverHeader: 'ui-widget-header',\r\n    popoverContent: 'ui-widget-content',\r\n    // day grid\r\n    headerRow: 'ui-widget-header',\r\n    dayRow: 'ui-widget-content',\r\n    // list view\r\n    listView: 'ui-widget-content'\r\n};\r\nJqueryUiTheme.prototype.baseIconClass = 'ui-icon';\r\nJqueryUiTheme.prototype.iconClasses = {\r\n    close: 'ui-icon-closethick',\r\n    prev: 'ui-icon-circle-triangle-w',\r\n    next: 'ui-icon-circle-triangle-e',\r\n    prevYear: 'ui-icon-seek-prev',\r\n    nextYear: 'ui-icon-seek-next'\r\n};\r\nJqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';\r\nJqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';\r\nJqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';\r\n\n\n/***/ }),\n/* 223 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar FuncEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(FuncEventSource, _super);\r\n    function FuncEventSource() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    FuncEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if ($.isFunction(rawInput.events)) { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if ($.isFunction(rawInput)) { // short form\r\n            rawProps = { events: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    FuncEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var _this = this;\r\n        this.calendar.pushLoading();\r\n        return Promise_1.default.construct(function (onResolve) {\r\n            _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {\r\n                _this.calendar.popLoading();\r\n                onResolve(_this.parseEventDefs(rawEventDefs));\r\n            });\r\n        });\r\n    };\r\n    FuncEventSource.prototype.getPrimitive = function () {\r\n        return this.func;\r\n    };\r\n    FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {\r\n        var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\r\n        this.func = rawProps.events;\r\n        return superSuccess;\r\n    };\r\n    return FuncEventSource;\r\n}(EventSource_1.default));\r\nexports.default = FuncEventSource;\r\nFuncEventSource.defineStandardProps({\r\n    events: false // don't automatically transfer\r\n});\r\n\n\n/***/ }),\n/* 224 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Promise_1 = __webpack_require__(21);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar JsonFeedEventSource = /** @class */ (function (_super) {\r\n    tslib_1.__extends(JsonFeedEventSource, _super);\r\n    function JsonFeedEventSource() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    JsonFeedEventSource.parse = function (rawInput, calendar) {\r\n        var rawProps;\r\n        // normalize raw input\r\n        if (typeof rawInput.url === 'string') { // extended form\r\n            rawProps = rawInput;\r\n        }\r\n        else if (typeof rawInput === 'string') { // short form\r\n            rawProps = { url: rawInput };\r\n        }\r\n        if (rawProps) {\r\n            return EventSource_1.default.parse.call(this, rawProps, calendar);\r\n        }\r\n        return false;\r\n    };\r\n    JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {\r\n        var _this = this;\r\n        var ajaxSettings = this.ajaxSettings;\r\n        var onSuccess = ajaxSettings.success;\r\n        var onError = ajaxSettings.error;\r\n        var requestParams = this.buildRequestParams(start, end, timezone);\r\n        // todo: eventually handle the promise's then,\r\n        // don't intercept success/error\r\n        // tho will be a breaking API change\r\n        this.calendar.pushLoading();\r\n        return Promise_1.default.construct(function (onResolve, onReject) {\r\n            $.ajax($.extend({}, // destination\r\n            JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {\r\n                url: _this.url,\r\n                data: requestParams,\r\n                success: function (rawEventDefs, status, xhr) {\r\n                    var callbackRes;\r\n                    _this.calendar.popLoading();\r\n                    if (rawEventDefs) {\r\n                        callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`\r\n                        if ($.isArray(callbackRes)) {\r\n                            rawEventDefs = callbackRes;\r\n                        }\r\n                        onResolve(_this.parseEventDefs(rawEventDefs));\r\n                    }\r\n                    else {\r\n                        onReject();\r\n                    }\r\n                },\r\n                error: function (xhr, statusText, errorThrown) {\r\n                    _this.calendar.popLoading();\r\n                    util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`\r\n                    onReject();\r\n                }\r\n            }));\r\n        });\r\n    };\r\n    JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {\r\n        var calendar = this.calendar;\r\n        var ajaxSettings = this.ajaxSettings;\r\n        var startParam;\r\n        var endParam;\r\n        var timezoneParam;\r\n        var customRequestParams;\r\n        var params = {};\r\n        startParam = this.startParam;\r\n        if (startParam == null) {\r\n            startParam = calendar.opt('startParam');\r\n        }\r\n        endParam = this.endParam;\r\n        if (endParam == null) {\r\n            endParam = calendar.opt('endParam');\r\n        }\r\n        timezoneParam = this.timezoneParam;\r\n        if (timezoneParam == null) {\r\n            timezoneParam = calendar.opt('timezoneParam');\r\n        }\r\n        // retrieve any outbound GET/POST $.ajax data from the options\r\n        if ($.isFunction(ajaxSettings.data)) {\r\n            // supplied as a function that returns a key/value object\r\n            customRequestParams = ajaxSettings.data();\r\n        }\r\n        else {\r\n            // probably supplied as a straight key/value object\r\n            customRequestParams = ajaxSettings.data || {};\r\n        }\r\n        $.extend(params, customRequestParams);\r\n        params[startParam] = start.format();\r\n        params[endParam] = end.format();\r\n        if (timezone && timezone !== 'local') {\r\n            params[timezoneParam] = timezone;\r\n        }\r\n        return params;\r\n    };\r\n    JsonFeedEventSource.prototype.getPrimitive = function () {\r\n        return this.url;\r\n    };\r\n    JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {\r\n        this.ajaxSettings = rawProps;\r\n    };\r\n    JsonFeedEventSource.AJAX_DEFAULTS = {\r\n        dataType: 'json',\r\n        cache: false\r\n    };\r\n    return JsonFeedEventSource;\r\n}(EventSource_1.default));\r\nexports.default = JsonFeedEventSource;\r\nJsonFeedEventSource.defineStandardProps({\r\n    // automatically transfer (true)...\r\n    url: true,\r\n    startParam: true,\r\n    endParam: true,\r\n    timezoneParam: true\r\n});\r\n\n\n/***/ }),\n/* 225 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar Iterator = /** @class */ (function () {\r\n    function Iterator(items) {\r\n        this.items = items || [];\r\n    }\r\n    /* Calls a method on every item passing the arguments through */\r\n    Iterator.prototype.proxyCall = function (methodName) {\r\n        var args = [];\r\n        for (var _i = 1; _i < arguments.length; _i++) {\r\n            args[_i - 1] = arguments[_i];\r\n        }\r\n        var results = [];\r\n        this.items.forEach(function (item) {\r\n            results.push(item[methodName].apply(item, args));\r\n        });\r\n        return results;\r\n    };\r\n    return Iterator;\r\n}());\r\nexports.default = Iterator;\r\n\n\n/***/ }),\n/* 226 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\n/* Creates a clone of an element and lets it track the mouse as it moves\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MouseFollower = /** @class */ (function () {\r\n    function MouseFollower(sourceEl, options) {\r\n        this.isFollowing = false;\r\n        this.isHidden = false;\r\n        this.isAnimating = false; // doing the revert animation?\r\n        this.options = options = options || {};\r\n        this.sourceEl = sourceEl;\r\n        this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\r\n    }\r\n    // Causes the element to start following the mouse\r\n    MouseFollower.prototype.start = function (ev) {\r\n        if (!this.isFollowing) {\r\n            this.isFollowing = true;\r\n            this.y0 = util_1.getEvY(ev);\r\n            this.x0 = util_1.getEvX(ev);\r\n            this.topDelta = 0;\r\n            this.leftDelta = 0;\r\n            if (!this.isHidden) {\r\n                this.updatePosition();\r\n            }\r\n            if (util_1.getEvIsTouch(ev)) {\r\n                this.listenTo($(document), 'touchmove', this.handleMove);\r\n            }\r\n            else {\r\n                this.listenTo($(document), 'mousemove', this.handleMove);\r\n            }\r\n        }\r\n    };\r\n    // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\r\n    // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\r\n    MouseFollower.prototype.stop = function (shouldRevert, callback) {\r\n        var _this = this;\r\n        var revertDuration = this.options.revertDuration;\r\n        var complete = function () {\r\n            _this.isAnimating = false;\r\n            _this.removeElement();\r\n            _this.top0 = _this.left0 = null; // reset state for future updatePosition calls\r\n            if (callback) {\r\n                callback();\r\n            }\r\n        };\r\n        if (this.isFollowing && !this.isAnimating) { // disallow more than one stop animation at a time\r\n            this.isFollowing = false;\r\n            this.stopListeningTo($(document));\r\n            if (shouldRevert && revertDuration && !this.isHidden) { // do a revert animation?\r\n                this.isAnimating = true;\r\n                this.el.animate({\r\n                    top: this.top0,\r\n                    left: this.left0\r\n                }, {\r\n                    duration: revertDuration,\r\n                    complete: complete\r\n                });\r\n            }\r\n            else {\r\n                complete();\r\n            }\r\n        }\r\n    };\r\n    // Gets the tracking element. Create it if necessary\r\n    MouseFollower.prototype.getEl = function () {\r\n        var el = this.el;\r\n        if (!el) {\r\n            el = this.el = this.sourceEl.clone()\r\n                .addClass(this.options.additionalClass || '')\r\n                .css({\r\n                position: 'absolute',\r\n                visibility: '',\r\n                display: this.isHidden ? 'none' : '',\r\n                margin: 0,\r\n                right: 'auto',\r\n                bottom: 'auto',\r\n                width: this.sourceEl.width(),\r\n                height: this.sourceEl.height(),\r\n                opacity: this.options.opacity || '',\r\n                zIndex: this.options.zIndex\r\n            });\r\n            // we don't want long taps or any mouse interaction causing selection/menus.\r\n            // would use preventSelection(), but that prevents selectstart, causing problems.\r\n            el.addClass('fc-unselectable');\r\n            el.appendTo(this.parentEl);\r\n        }\r\n        return el;\r\n    };\r\n    // Removes the tracking element if it has already been created\r\n    MouseFollower.prototype.removeElement = function () {\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n    };\r\n    // Update the CSS position of the tracking element\r\n    MouseFollower.prototype.updatePosition = function () {\r\n        var sourceOffset;\r\n        var origin;\r\n        this.getEl(); // ensure this.el\r\n        // make sure origin info was computed\r\n        if (this.top0 == null) {\r\n            sourceOffset = this.sourceEl.offset();\r\n            origin = this.el.offsetParent().offset();\r\n            this.top0 = sourceOffset.top - origin.top;\r\n            this.left0 = sourceOffset.left - origin.left;\r\n        }\r\n        this.el.css({\r\n            top: this.top0 + this.topDelta,\r\n            left: this.left0 + this.leftDelta\r\n        });\r\n    };\r\n    // Gets called when the user moves the mouse\r\n    MouseFollower.prototype.handleMove = function (ev) {\r\n        this.topDelta = util_1.getEvY(ev) - this.y0;\r\n        this.leftDelta = util_1.getEvX(ev) - this.x0;\r\n        if (!this.isHidden) {\r\n            this.updatePosition();\r\n        }\r\n    };\r\n    // Temporarily makes the tracking element invisible. Can be called before following starts\r\n    MouseFollower.prototype.hide = function () {\r\n        if (!this.isHidden) {\r\n            this.isHidden = true;\r\n            if (this.el) {\r\n                this.el.hide();\r\n            }\r\n        }\r\n    };\r\n    // Show the tracking element after it has been temporarily hidden\r\n    MouseFollower.prototype.show = function () {\r\n        if (this.isHidden) {\r\n            this.isHidden = false;\r\n            this.updatePosition();\r\n            this.getEl().show();\r\n        }\r\n    };\r\n    return MouseFollower;\r\n}());\r\nexports.default = MouseFollower;\r\nListenerMixin_1.default.mixInto(MouseFollower);\r\n\n\n/***/ }),\n/* 227 */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* A rectangular panel that is absolutely positioned over other content\r\n------------------------------------------------------------------------------------------------------------------------\r\nOptions:\r\n  - className (string)\r\n  - content (HTML string or jQuery element set)\r\n  - parentEl\r\n  - top\r\n  - left\r\n  - right (the x coord of where the right edge should be. not a \"CSS\" right)\r\n  - autoHide (boolean)\r\n  - show (callback)\r\n  - hide (callback)\r\n*/\r\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Popover = /** @class */ (function () {\r\n    function Popover(options) {\r\n        this.isHidden = true;\r\n        this.margin = 10; // the space required between the popover and the edges of the scroll container\r\n        this.options = options || {};\r\n    }\r\n    // Shows the popover on the specified position. Renders it if not already\r\n    Popover.prototype.show = function () {\r\n        if (this.isHidden) {\r\n            if (!this.el) {\r\n                this.render();\r\n            }\r\n            this.el.show();\r\n            this.position();\r\n            this.isHidden = false;\r\n            this.trigger('show');\r\n        }\r\n    };\r\n    // Hides the popover, through CSS, but does not remove it from the DOM\r\n    Popover.prototype.hide = function () {\r\n        if (!this.isHidden) {\r\n            this.el.hide();\r\n            this.isHidden = true;\r\n            this.trigger('hide');\r\n        }\r\n    };\r\n    // Creates `this.el` and renders content inside of it\r\n    Popover.prototype.render = function () {\r\n        var _this = this;\r\n        var options = this.options;\r\n        this.el = $('<div class=\"fc-popover\">')\r\n            .addClass(options.className || '')\r\n            .css({\r\n            // position initially to the top left to avoid creating scrollbars\r\n            top: 0,\r\n            left: 0\r\n        })\r\n            .append(options.content)\r\n            .appendTo(options.parentEl);\r\n        // when a click happens on anything inside with a 'fc-close' className, hide the popover\r\n        this.el.on('click', '.fc-close', function () {\r\n            _this.hide();\r\n        });\r\n        if (options.autoHide) {\r\n            this.listenTo($(document), 'mousedown', this.documentMousedown);\r\n        }\r\n    };\r\n    // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\r\n    Popover.prototype.documentMousedown = function (ev) {\r\n        // only hide the popover if the click happened outside the popover\r\n        if (this.el && !$(ev.target).closest(this.el).length) {\r\n            this.hide();\r\n        }\r\n    };\r\n    // Hides and unregisters any handlers\r\n    Popover.prototype.removeElement = function () {\r\n        this.hide();\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n        this.stopListeningTo($(document), 'mousedown');\r\n    };\r\n    // Positions the popover optimally, using the top/left/right options\r\n    Popover.prototype.position = function () {\r\n        var options = this.options;\r\n        var origin = this.el.offsetParent().offset();\r\n        var width = this.el.outerWidth();\r\n        var height = this.el.outerHeight();\r\n        var windowEl = $(window);\r\n        var viewportEl = util_1.getScrollParent(this.el);\r\n        var viewportTop;\r\n        var viewportLeft;\r\n        var viewportOffset;\r\n        var top; // the \"position\" (not \"offset\") values for the popover\r\n        var left; //\r\n        // compute top and left\r\n        top = options.top || 0;\r\n        if (options.left !== undefined) {\r\n            left = options.left;\r\n        }\r\n        else if (options.right !== undefined) {\r\n            left = options.right - width; // derive the left value from the right value\r\n        }\r\n        else {\r\n            left = 0;\r\n        }\r\n        if (viewportEl.is(window) || viewportEl.is(document)) { // normalize getScrollParent's result\r\n            viewportEl = windowEl;\r\n            viewportTop = 0; // the window is always at the top left\r\n            viewportLeft = 0; // (and .offset() won't work if called here)\r\n        }\r\n        else {\r\n            viewportOffset = viewportEl.offset();\r\n            viewportTop = viewportOffset.top;\r\n            viewportLeft = viewportOffset.left;\r\n        }\r\n        // if the window is scrolled, it causes the visible area to be further down\r\n        viewportTop += windowEl.scrollTop();\r\n        viewportLeft += windowEl.scrollLeft();\r\n        // constrain to the view port. if constrained by two edges, give precedence to top/left\r\n        if (options.viewportConstrain !== false) {\r\n            top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\r\n            top = Math.max(top, viewportTop + this.margin);\r\n            left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\r\n            left = Math.max(left, viewportLeft + this.margin);\r\n        }\r\n        this.el.css({\r\n            top: top - origin.top,\r\n            left: left - origin.left\r\n        });\r\n    };\r\n    // Triggers a callback. Calls a function in the option hash of the same name.\r\n    // Arguments beyond the first `name` are forwarded on.\r\n    // TODO: better code reuse for this. Repeat code\r\n    Popover.prototype.trigger = function (name) {\r\n        if (this.options[name]) {\r\n            this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\r\n        }\r\n    };\r\n    return Popover;\r\n}());\r\nexports.default = Popover;\r\nListenerMixin_1.default.mixInto(Popover);\r\n\n\n/***/ }),\n/* 228 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar TaskQueue = /** @class */ (function () {\r\n    function TaskQueue() {\r\n        this.q = [];\r\n        this.isPaused = false;\r\n        this.isRunning = false;\r\n    }\r\n    TaskQueue.prototype.queue = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        this.q.push.apply(this.q, args); // append\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.pause = function () {\r\n        this.isPaused = true;\r\n    };\r\n    TaskQueue.prototype.resume = function () {\r\n        this.isPaused = false;\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.getIsIdle = function () {\r\n        return !this.isRunning && !this.isPaused;\r\n    };\r\n    TaskQueue.prototype.tryStart = function () {\r\n        if (!this.isRunning && this.canRunNext()) {\r\n            this.isRunning = true;\r\n            this.trigger('start');\r\n            this.runRemaining();\r\n        }\r\n    };\r\n    TaskQueue.prototype.canRunNext = function () {\r\n        return !this.isPaused && this.q.length;\r\n    };\r\n    TaskQueue.prototype.runRemaining = function () {\r\n        var _this = this;\r\n        var task;\r\n        var res;\r\n        do {\r\n            task = this.q.shift(); // always freshly reference q. might have been reassigned.\r\n            res = this.runTask(task);\r\n            if (res && res.then) {\r\n                res.then(function () {\r\n                    if (_this.canRunNext()) {\r\n                        _this.runRemaining();\r\n                    }\r\n                });\r\n                return; // prevent marking as stopped\r\n            }\r\n        } while (this.canRunNext());\r\n        this.trigger('stop'); // not really a 'stop' ... more of a 'drained'\r\n        this.isRunning = false;\r\n        // if 'stop' handler added more tasks.... TODO: write test for this\r\n        this.tryStart();\r\n    };\r\n    TaskQueue.prototype.runTask = function (task) {\r\n        return task(); // task *is* the function, but subclasses can change the format of a task\r\n    };\r\n    return TaskQueue;\r\n}());\r\nexports.default = TaskQueue;\r\nEmitterMixin_1.default.mixInto(TaskQueue);\r\n\n\n/***/ }),\n/* 229 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar TaskQueue_1 = __webpack_require__(228);\r\nvar RenderQueue = /** @class */ (function (_super) {\r\n    tslib_1.__extends(RenderQueue, _super);\r\n    function RenderQueue(waitsByNamespace) {\r\n        var _this = _super.call(this) || this;\r\n        _this.waitsByNamespace = waitsByNamespace || {};\r\n        return _this;\r\n    }\r\n    RenderQueue.prototype.queue = function (taskFunc, namespace, type) {\r\n        var task = {\r\n            func: taskFunc,\r\n            namespace: namespace,\r\n            type: type\r\n        };\r\n        var waitMs;\r\n        if (namespace) {\r\n            waitMs = this.waitsByNamespace[namespace];\r\n        }\r\n        if (this.waitNamespace) {\r\n            if (namespace === this.waitNamespace && waitMs != null) {\r\n                this.delayWait(waitMs);\r\n            }\r\n            else {\r\n                this.clearWait();\r\n                this.tryStart();\r\n            }\r\n        }\r\n        if (this.compoundTask(task)) { // appended to queue?\r\n            if (!this.waitNamespace && waitMs != null) {\r\n                this.startWait(namespace, waitMs);\r\n            }\r\n            else {\r\n                this.tryStart();\r\n            }\r\n        }\r\n    };\r\n    RenderQueue.prototype.startWait = function (namespace, waitMs) {\r\n        this.waitNamespace = namespace;\r\n        this.spawnWait(waitMs);\r\n    };\r\n    RenderQueue.prototype.delayWait = function (waitMs) {\r\n        clearTimeout(this.waitId);\r\n        this.spawnWait(waitMs);\r\n    };\r\n    RenderQueue.prototype.spawnWait = function (waitMs) {\r\n        var _this = this;\r\n        this.waitId = setTimeout(function () {\r\n            _this.waitNamespace = null;\r\n            _this.tryStart();\r\n        }, waitMs);\r\n    };\r\n    RenderQueue.prototype.clearWait = function () {\r\n        if (this.waitNamespace) {\r\n            clearTimeout(this.waitId);\r\n            this.waitId = null;\r\n            this.waitNamespace = null;\r\n        }\r\n    };\r\n    RenderQueue.prototype.canRunNext = function () {\r\n        if (!_super.prototype.canRunNext.call(this)) {\r\n            return false;\r\n        }\r\n        // waiting for a certain namespace to stop receiving tasks?\r\n        if (this.waitNamespace) {\r\n            var q = this.q;\r\n            // if there was a different namespace task in the meantime,\r\n            // that forces all previously-waiting tasks to suddenly execute.\r\n            // TODO: find a way to do this in constant time.\r\n            for (var i = 0; i < q.length; i++) {\r\n                if (q[i].namespace !== this.waitNamespace) {\r\n                    return true; // allow execution\r\n                }\r\n            }\r\n            return false;\r\n        }\r\n        return true;\r\n    };\r\n    RenderQueue.prototype.runTask = function (task) {\r\n        task.func();\r\n    };\r\n    RenderQueue.prototype.compoundTask = function (newTask) {\r\n        var q = this.q;\r\n        var shouldAppend = true;\r\n        var i;\r\n        var task;\r\n        if (newTask.namespace && newTask.type === 'destroy') {\r\n            // remove all init/add/remove ops with same namespace, regardless of order\r\n            for (i = q.length - 1; i >= 0; i--) {\r\n                task = q[i];\r\n                if (task.namespace === newTask.namespace) {\r\n                    switch (task.type) {\r\n                        case 'init':\r\n                            shouldAppend = false;\r\n                        // the latest destroy is cancelled out by not doing the init\r\n                        /* falls through */\r\n                        case 'add':\r\n                        /* falls through */\r\n                        case 'remove':\r\n                            q.splice(i, 1); // remove task\r\n                    }\r\n                }\r\n            }\r\n        }\r\n        if (shouldAppend) {\r\n            q.push(newTask);\r\n        }\r\n        return shouldAppend;\r\n    };\r\n    return RenderQueue;\r\n}(TaskQueue_1.default));\r\nexports.default = RenderQueue;\r\n\n\n/***/ }),\n/* 230 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Model_1 = __webpack_require__(51);\r\nvar Component = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Component, _super);\r\n    function Component() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    Component.prototype.setElement = function (el) {\r\n        this.el = el;\r\n        this.bindGlobalHandlers();\r\n        this.renderSkeleton();\r\n        this.set('isInDom', true);\r\n    };\r\n    Component.prototype.removeElement = function () {\r\n        this.unset('isInDom');\r\n        this.unrenderSkeleton();\r\n        this.unbindGlobalHandlers();\r\n        this.el.remove();\r\n        // NOTE: don't null-out this.el in case the View was destroyed within an API callback.\r\n        // We don't null-out the View's other jQuery element references upon destroy,\r\n        //  so we shouldn't kill this.el either.\r\n    };\r\n    Component.prototype.bindGlobalHandlers = function () {\r\n        // subclasses can override\r\n    };\r\n    Component.prototype.unbindGlobalHandlers = function () {\r\n        // subclasses can override\r\n    };\r\n    /*\r\n    NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender\r\n    */\r\n    // Renders the basic structure of the view before any content is rendered\r\n    Component.prototype.renderSkeleton = function () {\r\n        // subclasses should implement\r\n    };\r\n    // Unrenders the basic structure of the view\r\n    Component.prototype.unrenderSkeleton = function () {\r\n        // subclasses should implement\r\n    };\r\n    return Component;\r\n}(Model_1.default));\r\nexports.default = Component;\r\n\n\n/***/ }),\n/* 231 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar date_formatting_1 = __webpack_require__(49);\r\nvar Component_1 = __webpack_require__(230);\r\nvar util_2 = __webpack_require__(19);\r\nvar DateComponent = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateComponent, _super);\r\n    function DateComponent(_view, _options) {\r\n        var _this = _super.call(this) || this;\r\n        _this.isRTL = false; // frequently accessed options\r\n        _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits\r\n        _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?\r\n        _this.isDatesRendered = false;\r\n        // hack to set options prior to the this.opt calls\r\n        if (_view) {\r\n            _this['view'] = _view;\r\n        }\r\n        if (_options) {\r\n            _this['options'] = _options;\r\n        }\r\n        _this.uid = String(DateComponent.guid++);\r\n        _this.childrenByUid = {};\r\n        _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));\r\n        _this.isRTL = _this.opt('isRTL');\r\n        if (_this.fillRendererClass) {\r\n            _this.fillRenderer = new _this.fillRendererClass(_this);\r\n        }\r\n        if (_this.eventRendererClass) { // fillRenderer is optional -----v\r\n            _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);\r\n        }\r\n        if (_this.helperRendererClass && _this.eventRenderer) {\r\n            _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);\r\n        }\r\n        if (_this.businessHourRendererClass && _this.fillRenderer) {\r\n            _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);\r\n        }\r\n        return _this;\r\n    }\r\n    DateComponent.prototype.addChild = function (child) {\r\n        if (!this.childrenByUid[child.uid]) {\r\n            this.childrenByUid[child.uid] = child;\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    DateComponent.prototype.removeChild = function (child) {\r\n        if (this.childrenByUid[child.uid]) {\r\n            delete this.childrenByUid[child.uid];\r\n            return true;\r\n        }\r\n        return false;\r\n    };\r\n    // TODO: only do if isInDom?\r\n    // TODO: make part of Component, along with children/batch-render system?\r\n    DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        this.callChildren('updateSize', arguments);\r\n    };\r\n    // Options\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.opt = function (name) {\r\n        return this._getView().opt(name); // default implementation\r\n    };\r\n    DateComponent.prototype.publiclyTrigger = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var calendar = this._getCalendar();\r\n        return calendar.publiclyTrigger.apply(calendar, args);\r\n    };\r\n    DateComponent.prototype.hasPublicHandlers = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var calendar = this._getCalendar();\r\n        return calendar.hasPublicHandlers.apply(calendar, args);\r\n    };\r\n    // Date\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.executeDateRender = function (dateProfile) {\r\n        this.dateProfile = dateProfile; // for rendering\r\n        this.renderDates(dateProfile);\r\n        this.isDatesRendered = true;\r\n        this.callChildren('executeDateRender', arguments);\r\n    };\r\n    DateComponent.prototype.executeDateUnrender = function () {\r\n        this.callChildren('executeDateUnrender', arguments);\r\n        this.dateProfile = null;\r\n        this.unrenderDates();\r\n        this.isDatesRendered = false;\r\n    };\r\n    // date-cell content only\r\n    DateComponent.prototype.renderDates = function (dateProfile) {\r\n        // subclasses should implement\r\n    };\r\n    // date-cell content only\r\n    DateComponent.prototype.unrenderDates = function () {\r\n        // subclasses should override\r\n    };\r\n    // Now-Indicator\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\r\n    // should be refreshed. If something falsy is returned, no time indicator is rendered at all.\r\n    DateComponent.prototype.getNowIndicatorUnit = function () {\r\n        // subclasses should implement\r\n    };\r\n    // Renders a current time indicator at the given datetime\r\n    DateComponent.prototype.renderNowIndicator = function (date) {\r\n        this.callChildren('renderNowIndicator', arguments);\r\n    };\r\n    // Undoes the rendering actions from renderNowIndicator\r\n    DateComponent.prototype.unrenderNowIndicator = function () {\r\n        this.callChildren('unrenderNowIndicator', arguments);\r\n    };\r\n    // Business Hours\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {\r\n        if (this.businessHourRenderer) {\r\n            this.businessHourRenderer.render(businessHourGenerator);\r\n        }\r\n        this.callChildren('renderBusinessHours', arguments);\r\n    };\r\n    // Unrenders previously-rendered business-hours\r\n    DateComponent.prototype.unrenderBusinessHours = function () {\r\n        this.callChildren('unrenderBusinessHours', arguments);\r\n        if (this.businessHourRenderer) {\r\n            this.businessHourRenderer.unrender();\r\n        }\r\n    };\r\n    // Event Displaying\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.executeEventRender = function (eventsPayload) {\r\n        if (this.eventRenderer) {\r\n            this.eventRenderer.rangeUpdated(); // poorly named now\r\n            this.eventRenderer.render(eventsPayload);\r\n        }\r\n        else if (this['renderEvents']) { // legacy\r\n            this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));\r\n        }\r\n        this.callChildren('executeEventRender', arguments);\r\n    };\r\n    DateComponent.prototype.executeEventUnrender = function () {\r\n        this.callChildren('executeEventUnrender', arguments);\r\n        if (this.eventRenderer) {\r\n            this.eventRenderer.unrender();\r\n        }\r\n        else if (this['destroyEvents']) { // legacy\r\n            this['destroyEvents']();\r\n        }\r\n    };\r\n    DateComponent.prototype.getBusinessHourSegs = function () {\r\n        var segs = this.getOwnBusinessHourSegs();\r\n        this.iterChildren(function (child) {\r\n            segs.push.apply(segs, child.getBusinessHourSegs());\r\n        });\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.getOwnBusinessHourSegs = function () {\r\n        if (this.businessHourRenderer) {\r\n            return this.businessHourRenderer.getSegs();\r\n        }\r\n        return [];\r\n    };\r\n    DateComponent.prototype.getEventSegs = function () {\r\n        var segs = this.getOwnEventSegs();\r\n        this.iterChildren(function (child) {\r\n            segs.push.apply(segs, child.getEventSegs());\r\n        });\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.getOwnEventSegs = function () {\r\n        if (this.eventRenderer) {\r\n            return this.eventRenderer.getSegs();\r\n        }\r\n        return [];\r\n    };\r\n    // Event Rendering Triggering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.triggerAfterEventsRendered = function () {\r\n        this.triggerAfterEventSegsRendered(this.getEventSegs());\r\n        this.publiclyTrigger('eventAfterAllRender', {\r\n            context: this,\r\n            args: [this]\r\n        });\r\n    };\r\n    DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {\r\n        var _this = this;\r\n        // an optimization, because getEventLegacy is expensive\r\n        if (this.hasPublicHandlers('eventAfterRender')) {\r\n            segs.forEach(function (seg) {\r\n                var legacy;\r\n                if (seg.el) { // necessary?\r\n                    legacy = seg.footprint.getEventLegacy();\r\n                    _this.publiclyTrigger('eventAfterRender', {\r\n                        context: legacy,\r\n                        args: [legacy, seg.el, _this]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n    DateComponent.prototype.triggerBeforeEventsDestroyed = function () {\r\n        this.triggerBeforeEventSegsDestroyed(this.getEventSegs());\r\n    };\r\n    DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {\r\n        var _this = this;\r\n        if (this.hasPublicHandlers('eventDestroy')) {\r\n            segs.forEach(function (seg) {\r\n                var legacy;\r\n                if (seg.el) { // necessary?\r\n                    legacy = seg.footprint.getEventLegacy();\r\n                    _this.publiclyTrigger('eventDestroy', {\r\n                        context: legacy,\r\n                        args: [legacy, seg.el, _this]\r\n                    });\r\n                }\r\n            });\r\n        }\r\n    };\r\n    // Event Rendering Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Hides all rendered event segments linked to the given event\r\n    // RECURSIVE with subcomponents\r\n    DateComponent.prototype.showEventsWithId = function (eventDefId) {\r\n        this.getEventSegs().forEach(function (seg) {\r\n            if (seg.footprint.eventDef.id === eventDefId &&\r\n                seg.el // necessary?\r\n            ) {\r\n                seg.el.css('visibility', '');\r\n            }\r\n        });\r\n        this.callChildren('showEventsWithId', arguments);\r\n    };\r\n    // Shows all rendered event segments linked to the given event\r\n    // RECURSIVE with subcomponents\r\n    DateComponent.prototype.hideEventsWithId = function (eventDefId) {\r\n        this.getEventSegs().forEach(function (seg) {\r\n            if (seg.footprint.eventDef.id === eventDefId &&\r\n                seg.el // necessary?\r\n            ) {\r\n                seg.el.css('visibility', 'hidden');\r\n            }\r\n        });\r\n        this.callChildren('hideEventsWithId', arguments);\r\n    };\r\n    // Drag-n-Drop Rendering (for both events and external elements)\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of a event or external-element drag over the given drop zone.\r\n    // If an external-element, seg will be `null`.\r\n    // Must return elements used for any mock events.\r\n    DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var renderedHelper = false;\r\n        this.iterChildren(function (child) {\r\n            if (child.renderDrag(eventFootprints, seg, isTouch)) {\r\n                renderedHelper = true;\r\n            }\r\n        });\r\n        return renderedHelper;\r\n    };\r\n    // Unrenders a visual indication of an event or external-element being dragged.\r\n    DateComponent.prototype.unrenderDrag = function () {\r\n        this.callChildren('unrenderDrag', arguments);\r\n    };\r\n    // Event Resizing\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of an event being resized.\r\n    DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        this.callChildren('renderEventResize', arguments);\r\n    };\r\n    // Unrenders a visual indication of an event being resized.\r\n    DateComponent.prototype.unrenderEventResize = function () {\r\n        this.callChildren('unrenderEventResize', arguments);\r\n    };\r\n    // Selection\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders a visual indication of the selection\r\n    // TODO: rename to `renderSelection` after legacy is gone\r\n    DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        this.renderHighlight(componentFootprint);\r\n        this.callChildren('renderSelectionFootprint', arguments);\r\n    };\r\n    // Unrenders a visual indication of selection\r\n    DateComponent.prototype.unrenderSelection = function () {\r\n        this.unrenderHighlight();\r\n        this.callChildren('unrenderSelection', arguments);\r\n    };\r\n    // Highlight\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\r\n    DateComponent.prototype.renderHighlight = function (componentFootprint) {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.renderFootprint('highlight', componentFootprint, {\r\n                getClasses: function () {\r\n                    return ['fc-highlight'];\r\n                }\r\n            });\r\n        }\r\n        this.callChildren('renderHighlight', arguments);\r\n    };\r\n    // Unrenders the emphasis on a date range\r\n    DateComponent.prototype.unrenderHighlight = function () {\r\n        if (this.fillRenderer) {\r\n            this.fillRenderer.unrender('highlight');\r\n        }\r\n        this.callChildren('unrenderHighlight', arguments);\r\n    };\r\n    // Hit Areas\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    // just because all DateComponents support this interface\r\n    // doesn't mean they need to have their own internal coord system. they can defer to sub-components.\r\n    DateComponent.prototype.hitsNeeded = function () {\r\n        if (!(this.hitsNeededDepth++)) {\r\n            this.prepareHits();\r\n        }\r\n        this.callChildren('hitsNeeded', arguments);\r\n    };\r\n    DateComponent.prototype.hitsNotNeeded = function () {\r\n        if (this.hitsNeededDepth && !(--this.hitsNeededDepth)) {\r\n            this.releaseHits();\r\n        }\r\n        this.callChildren('hitsNotNeeded', arguments);\r\n    };\r\n    DateComponent.prototype.prepareHits = function () {\r\n        // subclasses can implement\r\n    };\r\n    DateComponent.prototype.releaseHits = function () {\r\n        // subclasses can implement\r\n    };\r\n    // Given coordinates from the topleft of the document, return data about the date-related area underneath.\r\n    // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\r\n    // Must have a `grid` property, a reference to this current grid. TODO: avoid this\r\n    // The returned object will be processed by getHitFootprint and getHitEl.\r\n    DateComponent.prototype.queryHit = function (leftOffset, topOffset) {\r\n        var childrenByUid = this.childrenByUid;\r\n        var uid;\r\n        var hit;\r\n        for (uid in childrenByUid) {\r\n            hit = childrenByUid[uid].queryHit(leftOffset, topOffset);\r\n            if (hit) {\r\n                break;\r\n            }\r\n        }\r\n        return hit;\r\n    };\r\n    DateComponent.prototype.getSafeHitFootprint = function (hit) {\r\n        var footprint = this.getHitFootprint(hit);\r\n        if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {\r\n            return null;\r\n        }\r\n        return footprint;\r\n    };\r\n    DateComponent.prototype.getHitFootprint = function (hit) {\r\n        // what about being abstract!?\r\n    };\r\n    // Given position-level information about a date-related area within the grid,\r\n    // should return a jQuery element that best represents it. passed to dayClick callback.\r\n    DateComponent.prototype.getHitEl = function (hit) {\r\n        // what about being abstract!?\r\n    };\r\n    /* Converting eventRange -> eventFootprint\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {\r\n        var eventFootprints = [];\r\n        var i;\r\n        for (i = 0; i < eventRanges.length; i++) {\r\n            eventFootprints.push.apply(// append\r\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\r\n        }\r\n        return eventFootprints;\r\n    };\r\n    DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {\r\n        return [util_2.eventRangeToEventFootprint(eventRange)];\r\n    };\r\n    /* Converting componentFootprint/eventFootprint -> segs\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {\r\n        var segs = [];\r\n        var i;\r\n        for (i = 0; i < eventFootprints.length; i++) {\r\n            segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));\r\n        }\r\n        return segs;\r\n    };\r\n    // Given an event's span (unzoned start/end and other misc data), and the event itself,\r\n    // slices into segments and attaches event-derived properties to them.\r\n    // eventSpan - { start, end, isStart, isEnd, otherthings... }\r\n    DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {\r\n        var unzonedRange = eventFootprint.componentFootprint.unzonedRange;\r\n        var segs;\r\n        var i;\r\n        var seg;\r\n        segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (!unzonedRange.isStart) {\r\n                seg.isStart = false;\r\n            }\r\n            if (!unzonedRange.isEnd) {\r\n                seg.isEnd = false;\r\n            }\r\n            seg.footprint = eventFootprint;\r\n            // TODO: rename to seg.eventFootprint\r\n        }\r\n        return segs;\r\n    };\r\n    DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        return [];\r\n    };\r\n    // Utils\r\n    // ---------------------------------------------------------------------------------------------------------------\r\n    DateComponent.prototype.callChildren = function (methodName, args) {\r\n        this.iterChildren(function (child) {\r\n            child[methodName].apply(child, args);\r\n        });\r\n    };\r\n    DateComponent.prototype.iterChildren = function (func) {\r\n        var childrenByUid = this.childrenByUid;\r\n        var uid;\r\n        for (uid in childrenByUid) {\r\n            func(childrenByUid[uid]);\r\n        }\r\n    };\r\n    DateComponent.prototype._getCalendar = function () {\r\n        var t = this;\r\n        return t.calendar || t.view.calendar;\r\n    };\r\n    DateComponent.prototype._getView = function () {\r\n        return this.view;\r\n    };\r\n    DateComponent.prototype._getDateProfile = function () {\r\n        return this._getView().get('dateProfile');\r\n    };\r\n    // Generates HTML for an anchor to another view into the calendar.\r\n    // Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.\r\n    // `gotoOptions` can either be a moment input, or an object with the form:\r\n    // { date, type, forceOff }\r\n    // `type` is a view-type like \"day\" or \"week\". default value is \"day\".\r\n    // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\r\n    DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {\r\n        var date;\r\n        var type;\r\n        var forceOff;\r\n        var finalOptions;\r\n        if ($.isPlainObject(gotoOptions)) {\r\n            date = gotoOptions.date;\r\n            type = gotoOptions.type;\r\n            forceOff = gotoOptions.forceOff;\r\n        }\r\n        else {\r\n            date = gotoOptions; // a single moment input\r\n        }\r\n        date = moment_ext_1.default(date); // if a string, parse it\r\n        finalOptions = {\r\n            date: date.format('YYYY-MM-DD'),\r\n            type: type || 'day'\r\n        };\r\n        if (typeof attrs === 'string') {\r\n            innerHtml = attrs;\r\n            attrs = null;\r\n        }\r\n        attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space\r\n        innerHtml = innerHtml || '';\r\n        if (!forceOff && this.opt('navLinks')) {\r\n            return '<a' + attrs +\r\n                ' data-goto=\"' + util_1.htmlEscape(JSON.stringify(finalOptions)) + '\">' +\r\n                innerHtml +\r\n                '</a>';\r\n        }\r\n        else {\r\n            return '<span' + attrs + '>' +\r\n                innerHtml +\r\n                '</span>';\r\n        }\r\n    };\r\n    DateComponent.prototype.getAllDayHtml = function () {\r\n        return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));\r\n    };\r\n    // Computes HTML classNames for a single-day element\r\n    DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {\r\n        var view = this._getView();\r\n        var classes = [];\r\n        var today;\r\n        if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {\r\n            classes.push('fc-disabled-day'); // TODO: jQuery UI theme?\r\n        }\r\n        else {\r\n            classes.push('fc-' + util_1.dayIDs[date.day()]);\r\n            if (view.isDateInOtherMonth(date, this.dateProfile)) { // TODO: use DateComponent subclass somehow\r\n                classes.push('fc-other-month');\r\n            }\r\n            today = view.calendar.getNow();\r\n            if (date.isSame(today, 'day')) {\r\n                classes.push('fc-today');\r\n                if (noThemeHighlight !== true) {\r\n                    classes.push(view.calendar.theme.getClass('today'));\r\n                }\r\n            }\r\n            else if (date < today) {\r\n                classes.push('fc-past');\r\n            }\r\n            else {\r\n                classes.push('fc-future');\r\n            }\r\n        }\r\n        return classes;\r\n    };\r\n    // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\r\n    // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\r\n    // The timezones of the dates within `range` will be respected.\r\n    DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {\r\n        var end = range.end;\r\n        if (isAllDay) {\r\n            end = end.clone().subtract(1); // convert to inclusive. last ms of previous day\r\n        }\r\n        return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);\r\n    };\r\n    // Compute the number of the give units in the \"current\" range.\r\n    // Will return a floating-point number. Won't round.\r\n    DateComponent.prototype.currentRangeAs = function (unit) {\r\n        return this._getDateProfile().currentUnzonedRange.as(unit);\r\n    };\r\n    // Returns the date range of the full days the given range visually appears to occupy.\r\n    // Returns a plain object with start/end, NOT an UnzonedRange!\r\n    DateComponent.prototype.computeDayRange = function (unzonedRange) {\r\n        var calendar = this._getCalendar();\r\n        var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts\r\n        var end = calendar.msToUtcMoment(unzonedRange.endMs);\r\n        var endTimeMS = +end.time(); // # of milliseconds into `endDay`\r\n        var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\r\n        // If the end time is actually inclusively part of the next day and is equal to or\r\n        // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\r\n        // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\r\n        if (endTimeMS && endTimeMS >= this.nextDayThreshold) {\r\n            endDay.add(1, 'days');\r\n        }\r\n        // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\r\n        if (endDay <= startDay) {\r\n            endDay = startDay.clone().add(1, 'days');\r\n        }\r\n        return { start: startDay, end: endDay };\r\n    };\r\n    // Does the given range visually appear to occupy more than one day?\r\n    DateComponent.prototype.isMultiDayRange = function (unzonedRange) {\r\n        var dayRange = this.computeDayRange(unzonedRange);\r\n        return dayRange.end.diff(dayRange.start, 'days') > 1;\r\n    };\r\n    DateComponent.guid = 0; // TODO: better system for this?\r\n    return DateComponent;\r\n}(Component_1.default));\r\nexports.default = DateComponent;\r\n// legacy\r\nfunction convertEventsPayloadToLegacyArray(eventsPayload) {\r\n    var eventDefId;\r\n    var eventInstances;\r\n    var legacyEvents = [];\r\n    var i;\r\n    for (eventDefId in eventsPayload) {\r\n        eventInstances = eventsPayload[eventDefId].eventInstances;\r\n        for (i = 0; i < eventInstances.length; i++) {\r\n            legacyEvents.push(eventInstances[i].toLegacy());\r\n        }\r\n    }\r\n    return legacyEvents;\r\n}\r\n\n\n/***/ }),\n/* 232 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar Iterator_1 = __webpack_require__(225);\r\nvar GlobalEmitter_1 = __webpack_require__(23);\r\nvar EmitterMixin_1 = __webpack_require__(13);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar Toolbar_1 = __webpack_require__(257);\r\nvar OptionsManager_1 = __webpack_require__(258);\r\nvar ViewSpecManager_1 = __webpack_require__(259);\r\nvar Constraints_1 = __webpack_require__(217);\r\nvar locale_1 = __webpack_require__(32);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar EventDateProfile_1 = __webpack_require__(16);\r\nvar EventManager_1 = __webpack_require__(220);\r\nvar BusinessHourGenerator_1 = __webpack_require__(218);\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar EventDefParser_1 = __webpack_require__(36);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar Calendar = /** @class */ (function () {\r\n    function Calendar(el, overrides) {\r\n        this.loadingLevel = 0; // number of simultaneous loading tasks\r\n        this.ignoreUpdateViewSize = 0;\r\n        this.freezeContentHeightDepth = 0;\r\n        // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\r\n        // unneeded() is called in destroy.\r\n        GlobalEmitter_1.default.needed();\r\n        this.el = el;\r\n        this.viewsByType = {};\r\n        this.optionsManager = new OptionsManager_1.default(this, overrides);\r\n        this.viewSpecManager = new ViewSpecManager_1.default(this.optionsManager, this);\r\n        this.initMomentInternals(); // needs to happen after options hash initialized\r\n        this.initCurrentDate();\r\n        this.initEventManager();\r\n        this.constraints = new Constraints_1.default(this.eventManager, this);\r\n        this.constructed();\r\n    }\r\n    Calendar.prototype.constructed = function () {\r\n        // useful for monkeypatching. used?\r\n    };\r\n    Calendar.prototype.getView = function () {\r\n        return this.view;\r\n    };\r\n    Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {\r\n        var optHandler = this.opt(name);\r\n        var context;\r\n        var args;\r\n        if ($.isPlainObject(triggerInfo)) {\r\n            context = triggerInfo.context;\r\n            args = triggerInfo.args;\r\n        }\r\n        else if ($.isArray(triggerInfo)) {\r\n            args = triggerInfo;\r\n        }\r\n        if (context == null) {\r\n            context = this.el[0]; // fallback context\r\n        }\r\n        if (!args) {\r\n            args = [];\r\n        }\r\n        this.triggerWith(name, context, args); // Emitter's method\r\n        if (optHandler) {\r\n            return optHandler.apply(context, args);\r\n        }\r\n    };\r\n    Calendar.prototype.hasPublicHandlers = function (name) {\r\n        return this.hasHandlers(name) ||\r\n            this.opt(name); // handler specified in options\r\n    };\r\n    // Options Public API\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // public getter/setter\r\n    Calendar.prototype.option = function (name, value) {\r\n        var newOptionHash;\r\n        if (typeof name === 'string') {\r\n            if (value === undefined) { // getter\r\n                return this.optionsManager.get(name);\r\n            }\r\n            else { // setter for individual option\r\n                newOptionHash = {};\r\n                newOptionHash[name] = value;\r\n                this.optionsManager.add(newOptionHash);\r\n            }\r\n        }\r\n        else if (typeof name === 'object') { // compound setter with object input\r\n            this.optionsManager.add(name);\r\n        }\r\n    };\r\n    // private getter\r\n    Calendar.prototype.opt = function (name) {\r\n        return this.optionsManager.get(name);\r\n    };\r\n    // View\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Given a view name for a custom view or a standard view, creates a ready-to-go View object\r\n    Calendar.prototype.instantiateView = function (viewType) {\r\n        var spec = this.viewSpecManager.getViewSpec(viewType);\r\n        if (!spec) {\r\n            throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\r\n        }\r\n        return new spec['class'](this, spec);\r\n    };\r\n    // Returns a boolean about whether the view is okay to instantiate at some point\r\n    Calendar.prototype.isValidViewType = function (viewType) {\r\n        return Boolean(this.viewSpecManager.getViewSpec(viewType));\r\n    };\r\n    Calendar.prototype.changeView = function (viewName, dateOrRange) {\r\n        if (dateOrRange) {\r\n            if (dateOrRange.start && dateOrRange.end) { // a range\r\n                this.optionsManager.recordOverrides({\r\n                    visibleRange: dateOrRange\r\n                });\r\n            }\r\n            else { // a date\r\n                this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\r\n            }\r\n        }\r\n        this.renderView(viewName);\r\n    };\r\n    // Forces navigation to a view for the given date.\r\n    // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\r\n    Calendar.prototype.zoomTo = function (newDate, viewType) {\r\n        var spec;\r\n        viewType = viewType || 'day'; // day is default zoom\r\n        spec = this.viewSpecManager.getViewSpec(viewType) ||\r\n            this.viewSpecManager.getUnitViewSpec(viewType);\r\n        this.currentDate = newDate.clone();\r\n        this.renderView(spec ? spec.type : null);\r\n    };\r\n    // Current Date\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initCurrentDate = function () {\r\n        var defaultDateInput = this.opt('defaultDate');\r\n        // compute the initial ambig-timezone date\r\n        if (defaultDateInput != null) {\r\n            this.currentDate = this.moment(defaultDateInput).stripZone();\r\n        }\r\n        else {\r\n            this.currentDate = this.getNow(); // getNow already returns unzoned\r\n        }\r\n    };\r\n    Calendar.prototype.prev = function () {\r\n        var view = this.view;\r\n        var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n        if (prevInfo.isValid) {\r\n            this.currentDate = prevInfo.date;\r\n            this.renderView();\r\n        }\r\n    };\r\n    Calendar.prototype.next = function () {\r\n        var view = this.view;\r\n        var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n        if (nextInfo.isValid) {\r\n            this.currentDate = nextInfo.date;\r\n            this.renderView();\r\n        }\r\n    };\r\n    Calendar.prototype.prevYear = function () {\r\n        this.currentDate.add(-1, 'years');\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.nextYear = function () {\r\n        this.currentDate.add(1, 'years');\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.today = function () {\r\n        this.currentDate = this.getNow(); // should deny like prev/next?\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.gotoDate = function (zonedDateInput) {\r\n        this.currentDate = this.moment(zonedDateInput).stripZone();\r\n        this.renderView();\r\n    };\r\n    Calendar.prototype.incrementDate = function (delta) {\r\n        this.currentDate.add(moment.duration(delta));\r\n        this.renderView();\r\n    };\r\n    // for external API\r\n    Calendar.prototype.getDate = function () {\r\n        return this.applyTimezone(this.currentDate); // infuse the calendar's timezone\r\n    };\r\n    // Loading Triggering\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // Should be called when any type of async data fetching begins\r\n    Calendar.prototype.pushLoading = function () {\r\n        if (!(this.loadingLevel++)) {\r\n            this.publiclyTrigger('loading', [true, this.view]);\r\n        }\r\n    };\r\n    // Should be called when any type of async data fetching completes\r\n    Calendar.prototype.popLoading = function () {\r\n        if (!(--this.loadingLevel)) {\r\n            this.publiclyTrigger('loading', [false, this.view]);\r\n        }\r\n    };\r\n    // High-level Rendering\r\n    // -----------------------------------------------------------------------------------\r\n    Calendar.prototype.render = function () {\r\n        if (!this.contentEl) {\r\n            this.initialRender();\r\n        }\r\n        else if (this.elementVisible()) {\r\n            // mainly for the public API\r\n            this.calcSize();\r\n            this.updateViewSize();\r\n        }\r\n    };\r\n    Calendar.prototype.initialRender = function () {\r\n        var _this = this;\r\n        var el = this.el;\r\n        el.addClass('fc');\r\n        // event delegation for nav links\r\n        el.on('click.fc', 'a[data-goto]', function (ev) {\r\n            var anchorEl = $(ev.currentTarget);\r\n            var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\r\n            var date = _this.moment(gotoOptions.date);\r\n            var viewType = gotoOptions.type;\r\n            // property like \"navLinkDayClick\". might be a string or a function\r\n            var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');\r\n            if (typeof customAction === 'function') {\r\n                customAction(date, ev);\r\n            }\r\n            else {\r\n                if (typeof customAction === 'string') {\r\n                    viewType = customAction;\r\n                }\r\n                _this.zoomTo(date, viewType);\r\n            }\r\n        });\r\n        // called immediately, and upon option change\r\n        this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {\r\n            var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);\r\n            var theme = new themeClass(_this.optionsManager);\r\n            var widgetClass = theme.getClass('widget');\r\n            _this.theme = theme;\r\n            if (widgetClass) {\r\n                el.addClass(widgetClass);\r\n            }\r\n        }, function () {\r\n            var widgetClass = _this.theme.getClass('widget');\r\n            _this.theme = null;\r\n            if (widgetClass) {\r\n                el.removeClass(widgetClass);\r\n            }\r\n        });\r\n        this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {\r\n            _this.businessHourGenerator = new BusinessHourGenerator_1.default(deps.businessHours, _this);\r\n            if (_this.view) {\r\n                _this.view.set('businessHourGenerator', _this.businessHourGenerator);\r\n            }\r\n        }, function () {\r\n            _this.businessHourGenerator = null;\r\n        });\r\n        // called immediately, and upon option change.\r\n        // HACK: locale often affects isRTL, so we explicitly listen to that too.\r\n        this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {\r\n            el.toggleClass('fc-ltr', !opts.isRTL);\r\n            el.toggleClass('fc-rtl', opts.isRTL);\r\n        });\r\n        this.contentEl = $(\"<div class='fc-view-container'>\").prependTo(el);\r\n        this.initToolbars();\r\n        this.renderHeader();\r\n        this.renderFooter();\r\n        this.renderView(this.opt('defaultView'));\r\n        if (this.opt('handleWindowResize')) {\r\n            $(window).resize(this.windowResizeProxy = util_1.debounce(// prevents rapid calls\r\n            this.windowResize.bind(this), this.opt('windowResizeDelay')));\r\n        }\r\n    };\r\n    Calendar.prototype.destroy = function () {\r\n        if (this.view) {\r\n            this.clearView();\r\n        }\r\n        this.toolbarsManager.proxyCall('removeElement');\r\n        this.contentEl.remove();\r\n        this.el.removeClass('fc fc-ltr fc-rtl');\r\n        // removes theme-related root className\r\n        this.optionsManager.unwatch('settingTheme');\r\n        this.optionsManager.unwatch('settingBusinessHourGenerator');\r\n        this.el.off('.fc'); // unbind nav link handlers\r\n        if (this.windowResizeProxy) {\r\n            $(window).unbind('resize', this.windowResizeProxy);\r\n            this.windowResizeProxy = null;\r\n        }\r\n        GlobalEmitter_1.default.unneeded();\r\n    };\r\n    Calendar.prototype.elementVisible = function () {\r\n        return this.el.is(':visible');\r\n    };\r\n    // Render Queue\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.bindViewHandlers = function (view) {\r\n        var _this = this;\r\n        view.watch('titleForCalendar', ['title'], function (deps) {\r\n            if (view === _this.view) { // hack\r\n                _this.setToolbarsTitle(deps.title);\r\n            }\r\n        });\r\n        view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {\r\n            if (view === _this.view) { // hack\r\n                _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates\r\n                _this.updateToolbarButtons(deps.dateProfile);\r\n            }\r\n        });\r\n    };\r\n    Calendar.prototype.unbindViewHandlers = function (view) {\r\n        view.unwatch('titleForCalendar');\r\n        view.unwatch('dateProfileForCalendar');\r\n    };\r\n    // View Rendering\r\n    // -----------------------------------------------------------------------------------\r\n    // Renders a view because of a date change, view-type change, or for the first time.\r\n    // If not given a viewType, keep the current view but render different dates.\r\n    // Accepts an optional scroll state to restore to.\r\n    Calendar.prototype.renderView = function (viewType) {\r\n        var oldView = this.view;\r\n        var newView;\r\n        this.freezeContentHeight();\r\n        if (oldView && viewType && oldView.type !== viewType) {\r\n            this.clearView();\r\n        }\r\n        // if viewType changed, or the view was never created, create a fresh view\r\n        if (!this.view && viewType) {\r\n            newView = this.view =\r\n                this.viewsByType[viewType] ||\r\n                    (this.viewsByType[viewType] = this.instantiateView(viewType));\r\n            this.bindViewHandlers(newView);\r\n            newView.startBatchRender(); // so that setElement+setDate rendering are joined\r\n            newView.setElement($(\"<div class='fc-view fc-\" + viewType + \"-view'>\").appendTo(this.contentEl));\r\n            this.toolbarsManager.proxyCall('activateButton', viewType);\r\n        }\r\n        if (this.view) {\r\n            // prevent unnecessary change firing\r\n            if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {\r\n                this.view.set('businessHourGenerator', this.businessHourGenerator);\r\n            }\r\n            this.view.setDate(this.currentDate);\r\n            if (newView) {\r\n                newView.stopBatchRender();\r\n            }\r\n        }\r\n        this.thawContentHeight();\r\n    };\r\n    // Unrenders the current view and reflects this change in the Header.\r\n    // Unregsiters the `view`, but does not remove from viewByType hash.\r\n    Calendar.prototype.clearView = function () {\r\n        var currentView = this.view;\r\n        this.toolbarsManager.proxyCall('deactivateButton', currentView.type);\r\n        this.unbindViewHandlers(currentView);\r\n        currentView.removeElement();\r\n        currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time\r\n        this.view = null;\r\n    };\r\n    // Destroys the view, including the view object. Then, re-instantiates it and renders it.\r\n    // Maintains the same scroll state.\r\n    // TODO: maintain any other user-manipulated state.\r\n    Calendar.prototype.reinitView = function () {\r\n        var oldView = this.view;\r\n        var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll\r\n        this.freezeContentHeight();\r\n        this.clearView();\r\n        this.calcSize();\r\n        this.renderView(oldView.type); // needs the type to freshly render\r\n        this.view.applyScroll(scroll);\r\n        this.thawContentHeight();\r\n    };\r\n    // Resizing\r\n    // -----------------------------------------------------------------------------------\r\n    Calendar.prototype.getSuggestedViewHeight = function () {\r\n        if (this.suggestedViewHeight == null) {\r\n            this.calcSize();\r\n        }\r\n        return this.suggestedViewHeight;\r\n    };\r\n    Calendar.prototype.isHeightAuto = function () {\r\n        return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\r\n    };\r\n    Calendar.prototype.updateViewSize = function (isResize) {\r\n        if (isResize === void 0) { isResize = false; }\r\n        var view = this.view;\r\n        var scroll;\r\n        if (!this.ignoreUpdateViewSize && view) {\r\n            if (isResize) {\r\n                this.calcSize();\r\n                scroll = view.queryScroll();\r\n            }\r\n            this.ignoreUpdateViewSize++;\r\n            view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);\r\n            this.ignoreUpdateViewSize--;\r\n            if (isResize) {\r\n                view.applyScroll(scroll);\r\n            }\r\n            return true; // signal success\r\n        }\r\n    };\r\n    Calendar.prototype.calcSize = function () {\r\n        if (this.elementVisible()) {\r\n            this._calcSize();\r\n        }\r\n    };\r\n    Calendar.prototype._calcSize = function () {\r\n        var contentHeightInput = this.opt('contentHeight');\r\n        var heightInput = this.opt('height');\r\n        if (typeof contentHeightInput === 'number') { // exists and not 'auto'\r\n            this.suggestedViewHeight = contentHeightInput;\r\n        }\r\n        else if (typeof contentHeightInput === 'function') { // exists and is a function\r\n            this.suggestedViewHeight = contentHeightInput();\r\n        }\r\n        else if (typeof heightInput === 'number') { // exists and not 'auto'\r\n            this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\r\n        }\r\n        else if (typeof heightInput === 'function') { // exists and is a function\r\n            this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\r\n        }\r\n        else if (heightInput === 'parent') { // set to height of parent element\r\n            this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\r\n        }\r\n        else {\r\n            this.suggestedViewHeight = Math.round(this.contentEl.width() /\r\n                Math.max(this.opt('aspectRatio'), .5));\r\n        }\r\n    };\r\n    Calendar.prototype.windowResize = function (ev) {\r\n        if (\r\n        // the purpose: so we don't process jqui \"resize\" events that have bubbled up\r\n        // cast to any because .target, which is Element, can't be compared to window for some reason.\r\n        ev.target === window &&\r\n            this.view &&\r\n            this.view.isDatesRendered) {\r\n            if (this.updateViewSize(true)) { // isResize=true, returns true on success\r\n                this.publiclyTrigger('windowResize', [this.view]);\r\n            }\r\n        }\r\n    };\r\n    /* Height \"Freezing\"\r\n    -----------------------------------------------------------------------------*/\r\n    Calendar.prototype.freezeContentHeight = function () {\r\n        if (!(this.freezeContentHeightDepth++)) {\r\n            this.forceFreezeContentHeight();\r\n        }\r\n    };\r\n    Calendar.prototype.forceFreezeContentHeight = function () {\r\n        this.contentEl.css({\r\n            width: '100%',\r\n            height: this.contentEl.height(),\r\n            overflow: 'hidden'\r\n        });\r\n    };\r\n    Calendar.prototype.thawContentHeight = function () {\r\n        this.freezeContentHeightDepth--;\r\n        // always bring back to natural height\r\n        this.contentEl.css({\r\n            width: '',\r\n            height: '',\r\n            overflow: ''\r\n        });\r\n        // but if there are future thaws, re-freeze\r\n        if (this.freezeContentHeightDepth) {\r\n            this.forceFreezeContentHeight();\r\n        }\r\n    };\r\n    // Toolbar\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initToolbars = function () {\r\n        this.header = new Toolbar_1.default(this, this.computeHeaderOptions());\r\n        this.footer = new Toolbar_1.default(this, this.computeFooterOptions());\r\n        this.toolbarsManager = new Iterator_1.default([this.header, this.footer]);\r\n    };\r\n    Calendar.prototype.computeHeaderOptions = function () {\r\n        return {\r\n            extraClasses: 'fc-header-toolbar',\r\n            layout: this.opt('header')\r\n        };\r\n    };\r\n    Calendar.prototype.computeFooterOptions = function () {\r\n        return {\r\n            extraClasses: 'fc-footer-toolbar',\r\n            layout: this.opt('footer')\r\n        };\r\n    };\r\n    // can be called repeatedly and Header will rerender\r\n    Calendar.prototype.renderHeader = function () {\r\n        var header = this.header;\r\n        header.setToolbarOptions(this.computeHeaderOptions());\r\n        header.render();\r\n        if (header.el) {\r\n            this.el.prepend(header.el);\r\n        }\r\n    };\r\n    // can be called repeatedly and Footer will rerender\r\n    Calendar.prototype.renderFooter = function () {\r\n        var footer = this.footer;\r\n        footer.setToolbarOptions(this.computeFooterOptions());\r\n        footer.render();\r\n        if (footer.el) {\r\n            this.el.append(footer.el);\r\n        }\r\n    };\r\n    Calendar.prototype.setToolbarsTitle = function (title) {\r\n        this.toolbarsManager.proxyCall('updateTitle', title);\r\n    };\r\n    Calendar.prototype.updateToolbarButtons = function (dateProfile) {\r\n        var now = this.getNow();\r\n        var view = this.view;\r\n        var todayInfo = view.dateProfileGenerator.build(now);\r\n        var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\r\n        var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\r\n        this.toolbarsManager.proxyCall((todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now)) ?\r\n            'enableButton' :\r\n            'disableButton', 'today');\r\n        this.toolbarsManager.proxyCall(prevInfo.isValid ?\r\n            'enableButton' :\r\n            'disableButton', 'prev');\r\n        this.toolbarsManager.proxyCall(nextInfo.isValid ?\r\n            'enableButton' :\r\n            'disableButton', 'next');\r\n    };\r\n    Calendar.prototype.queryToolbarsHeight = function () {\r\n        return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {\r\n            var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\r\n            return accumulator + toolbarHeight;\r\n        }, 0);\r\n    };\r\n    // Selection\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    // this public method receives start/end dates in any format, with any timezone\r\n    Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {\r\n        this.view.select(this.buildSelectFootprint.apply(this, arguments));\r\n    };\r\n    Calendar.prototype.unselect = function () {\r\n        if (this.view) {\r\n            this.view.unselect();\r\n        }\r\n    };\r\n    // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\r\n    Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {\r\n        var start = this.moment(zonedStartInput).stripZone();\r\n        var end;\r\n        if (zonedEndInput) {\r\n            end = this.moment(zonedEndInput).stripZone();\r\n        }\r\n        else if (start.hasTime()) {\r\n            end = start.clone().add(this.defaultTimedEventDuration);\r\n        }\r\n        else {\r\n            end = start.clone().add(this.defaultAllDayEventDuration);\r\n        }\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), !start.hasTime());\r\n    };\r\n    // Date Utils\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initMomentInternals = function () {\r\n        var _this = this;\r\n        this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\r\n        this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration'));\r\n        // Called immediately, and when any of the options change.\r\n        // Happens before any internal objects rebuild or rerender, because this is very core.\r\n        this.optionsManager.watch('buildingMomentLocale', [\r\n            '?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort',\r\n            '?firstDay', '?weekNumberCalculation'\r\n        ], function (opts) {\r\n            var weekNumberCalculation = opts.weekNumberCalculation;\r\n            var firstDay = opts.firstDay;\r\n            var _week;\r\n            // normalize\r\n            if (weekNumberCalculation === 'iso') {\r\n                weekNumberCalculation = 'ISO'; // normalize\r\n            }\r\n            var localeData = Object.create(// make a cheap copy\r\n            locale_1.getMomentLocaleData(opts.locale) // will fall back to en\r\n            );\r\n            if (opts.monthNames) {\r\n                localeData._months = opts.monthNames;\r\n            }\r\n            if (opts.monthNamesShort) {\r\n                localeData._monthsShort = opts.monthNamesShort;\r\n            }\r\n            if (opts.dayNames) {\r\n                localeData._weekdays = opts.dayNames;\r\n            }\r\n            if (opts.dayNamesShort) {\r\n                localeData._weekdaysShort = opts.dayNamesShort;\r\n            }\r\n            if (firstDay == null && weekNumberCalculation === 'ISO') {\r\n                firstDay = 1;\r\n            }\r\n            if (firstDay != null) {\r\n                _week = Object.create(localeData._week); // _week: { dow: # }\r\n                _week.dow = firstDay;\r\n                localeData._week = _week;\r\n            }\r\n            if ( // whitelist certain kinds of input\r\n            weekNumberCalculation === 'ISO' ||\r\n                weekNumberCalculation === 'local' ||\r\n                typeof weekNumberCalculation === 'function') {\r\n                localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\r\n            }\r\n            _this.localeData = localeData;\r\n            // If the internal current date object already exists, move to new locale.\r\n            // We do NOT need to do this technique for event dates, because this happens when converting to \"segments\".\r\n            if (_this.currentDate) {\r\n                _this.localizeMoment(_this.currentDate); // sets to localeData\r\n            }\r\n        });\r\n    };\r\n    // Builds a moment using the settings of the current calendar: timezone and locale.\r\n    // Accepts anything the vanilla moment() constructor accepts.\r\n    Calendar.prototype.moment = function () {\r\n        var args = [];\r\n        for (var _i = 0; _i < arguments.length; _i++) {\r\n            args[_i] = arguments[_i];\r\n        }\r\n        var mom;\r\n        if (this.opt('timezone') === 'local') {\r\n            mom = moment_ext_1.default.apply(null, args);\r\n            // Force the moment to be local, because momentExt doesn't guarantee it.\r\n            if (mom.hasTime()) { // don't give ambiguously-timed moments a local zone\r\n                mom.local();\r\n            }\r\n        }\r\n        else if (this.opt('timezone') === 'UTC') {\r\n            mom = moment_ext_1.default.utc.apply(null, args); // process as UTC\r\n        }\r\n        else {\r\n            mom = moment_ext_1.default.parseZone.apply(null, args); // let the input decide the zone\r\n        }\r\n        this.localizeMoment(mom); // TODO\r\n        return mom;\r\n    };\r\n    Calendar.prototype.msToMoment = function (ms, forceAllDay) {\r\n        var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n        if (forceAllDay) {\r\n            mom.stripTime();\r\n        }\r\n        else {\r\n            mom = this.applyTimezone(mom); // may or may not apply locale\r\n        }\r\n        this.localizeMoment(mom);\r\n        return mom;\r\n    };\r\n    Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {\r\n        var mom = moment_ext_1.default.utc(ms); // TODO: optimize by using Date.UTC\r\n        if (forceAllDay) {\r\n            mom.stripTime();\r\n        }\r\n        this.localizeMoment(mom);\r\n        return mom;\r\n    };\r\n    // Updates the given moment's locale settings to the current calendar locale settings.\r\n    Calendar.prototype.localizeMoment = function (mom) {\r\n        mom._locale = this.localeData;\r\n    };\r\n    // Returns a boolean about whether or not the calendar knows how to calculate\r\n    // the timezone offset of arbitrary dates in the current timezone.\r\n    Calendar.prototype.getIsAmbigTimezone = function () {\r\n        return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\r\n    };\r\n    // Returns a copy of the given date in the current timezone. Has no effect on dates without times.\r\n    Calendar.prototype.applyTimezone = function (date) {\r\n        if (!date.hasTime()) {\r\n            return date.clone();\r\n        }\r\n        var zonedDate = this.moment(date.toArray());\r\n        var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();\r\n        var adjustedZonedDate;\r\n        // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\r\n        if (timeAdjust) { // is the time result different than expected?\r\n            adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\r\n            if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) { // does it match perfectly now?\r\n                zonedDate = adjustedZonedDate;\r\n            }\r\n        }\r\n        return zonedDate;\r\n    };\r\n    /*\r\n    Assumes the footprint is non-open-ended.\r\n    */\r\n    Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {\r\n        if (ignoreEnd === void 0) { ignoreEnd = false; }\r\n        var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs);\r\n        var end;\r\n        if (!ignoreEnd) {\r\n            end = moment_ext_1.default.utc(componentFootprint.unzonedRange.endMs);\r\n        }\r\n        if (componentFootprint.isAllDay) {\r\n            start.stripTime();\r\n            if (end) {\r\n                end.stripTime();\r\n            }\r\n        }\r\n        else {\r\n            start = this.applyTimezone(start);\r\n            if (end) {\r\n                end = this.applyTimezone(end);\r\n            }\r\n        }\r\n        this.localizeMoment(start);\r\n        if (end) {\r\n            this.localizeMoment(end);\r\n        }\r\n        return new EventDateProfile_1.default(start, end, this);\r\n    };\r\n    // Returns a moment for the current date, as defined by the client's computer or from the `now` option.\r\n    // Will return an moment with an ambiguous timezone.\r\n    Calendar.prototype.getNow = function () {\r\n        var now = this.opt('now');\r\n        if (typeof now === 'function') {\r\n            now = now();\r\n        }\r\n        return this.moment(now).stripZone();\r\n    };\r\n    // Produces a human-readable string for the given duration.\r\n    // Side-effect: changes the locale of the given duration.\r\n    Calendar.prototype.humanizeDuration = function (duration) {\r\n        return duration.locale(this.opt('locale')).humanize();\r\n    };\r\n    // will return `null` if invalid range\r\n    Calendar.prototype.parseUnzonedRange = function (rangeInput) {\r\n        var start = null;\r\n        var end = null;\r\n        if (rangeInput.start) {\r\n            start = this.moment(rangeInput.start).stripZone();\r\n        }\r\n        if (rangeInput.end) {\r\n            end = this.moment(rangeInput.end).stripZone();\r\n        }\r\n        if (!start && !end) {\r\n            return null;\r\n        }\r\n        if (start && end && end.isBefore(start)) {\r\n            return null;\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    // Event-Date Utilities\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.initEventManager = function () {\r\n        var _this = this;\r\n        var eventManager = new EventManager_1.default(this);\r\n        var rawSources = this.opt('eventSources') || [];\r\n        var singleRawSource = this.opt('events');\r\n        this.eventManager = eventManager;\r\n        if (singleRawSource) {\r\n            rawSources.unshift(singleRawSource);\r\n        }\r\n        eventManager.on('release', function (eventsPayload) {\r\n            _this.trigger('eventsReset', eventsPayload);\r\n        });\r\n        eventManager.freeze();\r\n        rawSources.forEach(function (rawSource) {\r\n            var source = EventSourceParser_1.default.parse(rawSource, _this);\r\n            if (source) {\r\n                eventManager.addSource(source);\r\n            }\r\n        });\r\n        eventManager.thaw();\r\n    };\r\n    Calendar.prototype.requestEvents = function (start, end) {\r\n        return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));\r\n    };\r\n    // Get an event's normalized end date. If not present, calculate it from the defaults.\r\n    Calendar.prototype.getEventEnd = function (event) {\r\n        if (event.end) {\r\n            return event.end.clone();\r\n        }\r\n        else {\r\n            return this.getDefaultEventEnd(event.allDay, event.start);\r\n        }\r\n    };\r\n    // Given an event's allDay status and start date, return what its fallback end date should be.\r\n    // TODO: rename to computeDefaultEventEnd\r\n    Calendar.prototype.getDefaultEventEnd = function (allDay, zonedStart) {\r\n        var end = zonedStart.clone();\r\n        if (allDay) {\r\n            end.stripTime().add(this.defaultAllDayEventDuration);\r\n        }\r\n        else {\r\n            end.add(this.defaultTimedEventDuration);\r\n        }\r\n        if (this.getIsAmbigTimezone()) {\r\n            end.stripZone(); // we don't know what the tzo should be\r\n        }\r\n        return end;\r\n    };\r\n    // Public Events API\r\n    // -----------------------------------------------------------------------------------------------------------------\r\n    Calendar.prototype.rerenderEvents = function () {\r\n        this.view.flash('displayingEvents');\r\n    };\r\n    Calendar.prototype.refetchEvents = function () {\r\n        this.eventManager.refetchAllSources();\r\n    };\r\n    Calendar.prototype.renderEvents = function (eventInputs, isSticky) {\r\n        this.eventManager.freeze();\r\n        for (var i = 0; i < eventInputs.length; i++) {\r\n            this.renderEvent(eventInputs[i], isSticky);\r\n        }\r\n        this.eventManager.thaw();\r\n    };\r\n    Calendar.prototype.renderEvent = function (eventInput, isSticky) {\r\n        if (isSticky === void 0) { isSticky = false; }\r\n        var eventManager = this.eventManager;\r\n        var eventDef = EventDefParser_1.default.parse(eventInput, eventInput.source || eventManager.stickySource);\r\n        if (eventDef) {\r\n            eventManager.addEventDef(eventDef, isSticky);\r\n        }\r\n    };\r\n    // legacyQuery operates on legacy event instance objects\r\n    Calendar.prototype.removeEvents = function (legacyQuery) {\r\n        var eventManager = this.eventManager;\r\n        var legacyInstances = [];\r\n        var idMap = {};\r\n        var eventDef;\r\n        var i;\r\n        if (legacyQuery == null) { // shortcut for removing all\r\n            eventManager.removeAllEventDefs(); // persist=true\r\n        }\r\n        else {\r\n            eventManager.getEventInstances().forEach(function (eventInstance) {\r\n                legacyInstances.push(eventInstance.toLegacy());\r\n            });\r\n            legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery);\r\n            // compute unique IDs\r\n            for (i = 0; i < legacyInstances.length; i++) {\r\n                eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);\r\n                idMap[eventDef.id] = true;\r\n            }\r\n            eventManager.freeze();\r\n            for (i in idMap) { // reuse `i` as an \"id\"\r\n                eventManager.removeEventDefsById(i); // persist=true\r\n            }\r\n            eventManager.thaw();\r\n        }\r\n    };\r\n    // legacyQuery operates on legacy event instance objects\r\n    Calendar.prototype.clientEvents = function (legacyQuery) {\r\n        var legacyEventInstances = [];\r\n        this.eventManager.getEventInstances().forEach(function (eventInstance) {\r\n            legacyEventInstances.push(eventInstance.toLegacy());\r\n        });\r\n        return filterLegacyEventInstances(legacyEventInstances, legacyQuery);\r\n    };\r\n    Calendar.prototype.updateEvents = function (eventPropsArray) {\r\n        this.eventManager.freeze();\r\n        for (var i = 0; i < eventPropsArray.length; i++) {\r\n            this.updateEvent(eventPropsArray[i]);\r\n        }\r\n        this.eventManager.thaw();\r\n    };\r\n    Calendar.prototype.updateEvent = function (eventProps) {\r\n        var eventDef = this.eventManager.getEventDefByUid(eventProps._id);\r\n        var eventInstance;\r\n        var eventDefMutation;\r\n        if (eventDef instanceof SingleEventDef_1.default) {\r\n            eventInstance = eventDef.buildInstance();\r\n            eventDefMutation = EventDefMutation_1.default.createFromRawProps(eventInstance, eventProps, // raw props\r\n            null // largeUnit -- who uses it?\r\n            );\r\n            this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release\r\n        }\r\n    };\r\n    // Public Event Sources API\r\n    // ------------------------------------------------------------------------------------\r\n    Calendar.prototype.getEventSources = function () {\r\n        return this.eventManager.otherSources.slice(); // clone\r\n    };\r\n    Calendar.prototype.getEventSourceById = function (id) {\r\n        return this.eventManager.getSourceById(EventSource_1.default.normalizeId(id));\r\n    };\r\n    Calendar.prototype.addEventSource = function (sourceInput) {\r\n        var source = EventSourceParser_1.default.parse(sourceInput, this);\r\n        if (source) {\r\n            this.eventManager.addSource(source);\r\n        }\r\n    };\r\n    Calendar.prototype.removeEventSources = function (sourceMultiQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources;\r\n        var i;\r\n        if (sourceMultiQuery == null) {\r\n            this.eventManager.removeAllSources();\r\n        }\r\n        else {\r\n            sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n            eventManager.freeze();\r\n            for (i = 0; i < sources.length; i++) {\r\n                eventManager.removeSource(sources[i]);\r\n            }\r\n            eventManager.thaw();\r\n        }\r\n    };\r\n    Calendar.prototype.removeEventSource = function (sourceQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources = eventManager.querySources(sourceQuery);\r\n        var i;\r\n        eventManager.freeze();\r\n        for (i = 0; i < sources.length; i++) {\r\n            eventManager.removeSource(sources[i]);\r\n        }\r\n        eventManager.thaw();\r\n    };\r\n    Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {\r\n        var eventManager = this.eventManager;\r\n        var sources = eventManager.multiQuerySources(sourceMultiQuery);\r\n        var i;\r\n        eventManager.freeze();\r\n        for (i = 0; i < sources.length; i++) {\r\n            eventManager.refetchSource(sources[i]);\r\n        }\r\n        eventManager.thaw();\r\n    };\r\n    // not for internal use. use options module directly instead.\r\n    Calendar.defaults = options_1.globalDefaults;\r\n    Calendar.englishDefaults = options_1.englishDefaults;\r\n    Calendar.rtlDefaults = options_1.rtlDefaults;\r\n    return Calendar;\r\n}());\r\nexports.default = Calendar;\r\nEmitterMixin_1.default.mixInto(Calendar);\r\nListenerMixin_1.default.mixInto(Calendar);\r\nfunction filterLegacyEventInstances(legacyEventInstances, legacyQuery) {\r\n    if (legacyQuery == null) {\r\n        return legacyEventInstances;\r\n    }\r\n    else if ($.isFunction(legacyQuery)) {\r\n        return legacyEventInstances.filter(legacyQuery);\r\n    }\r\n    else { // an event ID\r\n        legacyQuery += ''; // normalize to string\r\n        return legacyEventInstances.filter(function (legacyEventInstance) {\r\n            // soft comparison because id not be normalized to string\r\n            // tslint:disable-next-line\r\n            return legacyEventInstance.id == legacyQuery ||\r\n                legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match\r\n        });\r\n    }\r\n}\r\n\n\n/***/ }),\n/* 233 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar moment_ext_1 = __webpack_require__(11);\r\nvar ListenerMixin_1 = __webpack_require__(7);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar SingleEventDef_1 = __webpack_require__(9);\r\nvar EventInstanceGroup_1 = __webpack_require__(20);\r\nvar EventSource_1 = __webpack_require__(6);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar ExternalDropping = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ExternalDropping, _super);\r\n    function ExternalDropping() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.isDragging = false; // jqui-dragging an external element? boolean\r\n        return _this;\r\n    }\r\n    /*\r\n    component impements:\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n      - isExternalInstanceGroupAllowed\r\n      - renderDrag\r\n      - unrenderDrag\r\n    */\r\n    ExternalDropping.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    ExternalDropping.prototype.bindToDocument = function () {\r\n        this.listenTo($(document), {\r\n            dragstart: this.handleDragStart,\r\n            sortstart: this.handleDragStart // jqui\r\n        });\r\n    };\r\n    ExternalDropping.prototype.unbindFromDocument = function () {\r\n        this.stopListeningTo($(document));\r\n    };\r\n    // Called when a jQuery UI drag is initiated anywhere in the DOM\r\n    ExternalDropping.prototype.handleDragStart = function (ev, ui) {\r\n        var el;\r\n        var accept;\r\n        if (this.opt('droppable')) { // only listen if this setting is on\r\n            el = $((ui ? ui.item : null) || ev.target);\r\n            // Test that the dragged element passes the dropAccept selector or filter function.\r\n            // FYI, the default is \"*\" (matches all)\r\n            accept = this.opt('dropAccept');\r\n            if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\r\n                if (!this.isDragging) { // prevent double-listening if fired twice\r\n                    this.listenToExternalDrag(el, ev, ui);\r\n                }\r\n            }\r\n        }\r\n    };\r\n    // Called when a jQuery UI drag starts and it needs to be monitored for dropping\r\n    ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\r\n        var singleEventDef; // a null value signals an unsuccessful drag\r\n        // listener that tracks mouse movement over date-associated pixel regions\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n            interactionStart: function () {\r\n                _this.isDragging = true;\r\n            },\r\n            hitOver: function (hit) {\r\n                var isAllowed = true;\r\n                var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid\r\n                var mutatedEventInstanceGroup;\r\n                if (hitFootprint) {\r\n                    singleEventDef = _this.computeExternalDrop(hitFootprint, meta);\r\n                    if (singleEventDef) {\r\n                        mutatedEventInstanceGroup = new EventInstanceGroup_1.default(singleEventDef.buildInstances());\r\n                        isAllowed = meta.eventProps ? // isEvent?\r\n                            component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) :\r\n                            component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    singleEventDef = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                if (singleEventDef) {\r\n                    component.renderDrag(// called without a seg parameter\r\n                    component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                singleEventDef = null; // signal unsuccessful\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n                component.unrenderDrag();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                if (singleEventDef) { // element was dropped on a valid hit\r\n                    view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent\r\n                    Boolean(meta.stick), // isSticky\r\n                    el, ev, ui);\r\n                }\r\n                _this.isDragging = false;\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        dragListener.startDrag(ev); // start listening immediately\r\n    };\r\n    // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\r\n    // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\r\n    // Returning a null value signals an invalid drop hit.\r\n    // DOES NOT consider overlap/constraint.\r\n    // Assumes both footprints are non-open-ended.\r\n    ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {\r\n        var calendar = this.view.calendar;\r\n        var start = moment_ext_1.default.utc(componentFootprint.unzonedRange.startMs).stripZone();\r\n        var end;\r\n        var eventDef;\r\n        if (componentFootprint.isAllDay) {\r\n            // if dropped on an all-day span, and element's metadata specified a time, set it\r\n            if (meta.startTime) {\r\n                start.time(meta.startTime);\r\n            }\r\n            else {\r\n                start.stripTime();\r\n            }\r\n        }\r\n        if (meta.duration) {\r\n            end = start.clone().add(meta.duration);\r\n        }\r\n        start = calendar.applyTimezone(start);\r\n        if (end) {\r\n            end = calendar.applyTimezone(end);\r\n        }\r\n        eventDef = SingleEventDef_1.default.parse($.extend({}, meta.eventProps, {\r\n            start: start,\r\n            end: end\r\n        }), new EventSource_1.default(calendar));\r\n        return eventDef;\r\n    };\r\n    return ExternalDropping;\r\n}(Interaction_1.default));\r\nexports.default = ExternalDropping;\r\nListenerMixin_1.default.mixInto(ExternalDropping);\r\n/* External-Dragging-Element Data\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\r\n// A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\r\nexportHooks.dataAttrPrefix = '';\r\n// Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\r\n// to be used for Event Object creation.\r\n// A defined `.eventProps`, even when empty, indicates that an event should be created.\r\nfunction getDraggedElMeta(el) {\r\n    var prefix = exportHooks.dataAttrPrefix;\r\n    var eventProps; // properties for creating the event, not related to date/time\r\n    var startTime; // a Duration\r\n    var duration;\r\n    var stick;\r\n    if (prefix) {\r\n        prefix += '-';\r\n    }\r\n    eventProps = el.data(prefix + 'event') || null;\r\n    if (eventProps) {\r\n        if (typeof eventProps === 'object') {\r\n            eventProps = $.extend({}, eventProps); // make a copy\r\n        }\r\n        else { // something like 1 or true. still signal event creation\r\n            eventProps = {};\r\n        }\r\n        // pluck special-cased date/time properties\r\n        startTime = eventProps.start;\r\n        if (startTime == null) {\r\n            startTime = eventProps.time;\r\n        } // accept 'time' as well\r\n        duration = eventProps.duration;\r\n        stick = eventProps.stick;\r\n        delete eventProps.start;\r\n        delete eventProps.time;\r\n        delete eventProps.duration;\r\n        delete eventProps.stick;\r\n    }\r\n    // fallback to standalone attribute values for each of the date/time properties\r\n    if (startTime == null) {\r\n        startTime = el.data(prefix + 'start');\r\n    }\r\n    if (startTime == null) {\r\n        startTime = el.data(prefix + 'time');\r\n    } // accept 'time' as well\r\n    if (duration == null) {\r\n        duration = el.data(prefix + 'duration');\r\n    }\r\n    if (stick == null) {\r\n        stick = el.data(prefix + 'stick');\r\n    }\r\n    // massage into correct data types\r\n    startTime = startTime != null ? moment.duration(startTime) : null;\r\n    duration = duration != null ? moment.duration(duration) : null;\r\n    stick = Boolean(stick);\r\n    return { eventProps: eventProps, startTime: startTime, duration: duration, stick: stick };\r\n}\r\n\n\n/***/ }),\n/* 234 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventResizing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventResizing, _super);\r\n    /*\r\n    component impements:\r\n      - bindSegHandlerToEl\r\n      - publiclyTrigger\r\n      - diffDates\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n      - getSafeHitFootprint\r\n    */\r\n    function EventResizing(component, eventPointing) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.isResizing = false;\r\n        _this.eventPointing = eventPointing;\r\n        return _this;\r\n    }\r\n    EventResizing.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    EventResizing.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));\r\n        component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n    };\r\n    EventResizing.prototype.handleMouseDown = function (seg, ev) {\r\n        if (this.component.canStartResize(seg, ev)) {\r\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n                .startInteraction(ev, { distance: 5 });\r\n        }\r\n    };\r\n    EventResizing.prototype.handleTouchStart = function (seg, ev) {\r\n        if (this.component.canStartResize(seg, ev)) {\r\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer'))\r\n                .startInteraction(ev);\r\n        }\r\n    };\r\n    // Creates a listener that tracks the user as they resize an event segment.\r\n    // Generic enough to work with any type of Grid.\r\n    EventResizing.prototype.buildDragListener = function (seg, isStart) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var eventManager = calendar.eventManager;\r\n        var el = seg.el;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance;\r\n        var isDragging;\r\n        var resizeMutation; // zoned event date properties. falsy if invalid resize\r\n        // Tracks mouse movement over the *grid's* coordinate map\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            subjectEl: el,\r\n            interactionStart: function () {\r\n                isDragging = false;\r\n            },\r\n            dragStart: function (ev) {\r\n                isDragging = true;\r\n                // ensure a mouseout on the manipulated event has been reported\r\n                _this.eventPointing.handleMouseout(seg, ev);\r\n                _this.segResizeStart(seg, ev);\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var isAllowed = true;\r\n                var origHitFootprint = component.getSafeHitFootprint(origHit);\r\n                var hitFootprint = component.getSafeHitFootprint(hit);\r\n                var mutatedEventInstanceGroup;\r\n                if (origHitFootprint && hitFootprint) {\r\n                    resizeMutation = isStart ?\r\n                        _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) :\r\n                        _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);\r\n                    if (resizeMutation) {\r\n                        mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);\r\n                        isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    resizeMutation = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                else if (resizeMutation.isEmpty()) {\r\n                    // no change. (FYI, event dates might have zones)\r\n                    resizeMutation = null;\r\n                }\r\n                if (resizeMutation) {\r\n                    view.hideEventsWithId(seg.footprint.eventDef.id);\r\n                    view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                resizeMutation = null;\r\n            },\r\n            hitDone: function () {\r\n                view.unrenderEventResize(seg);\r\n                view.showEventsWithId(seg.footprint.eventDef.id);\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                if (isDragging) {\r\n                    _this.segResizeStop(seg, ev);\r\n                }\r\n                if (resizeMutation) { // valid date to resize to?\r\n                    // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n                    view.reportEventResize(eventInstance, resizeMutation, el, ev);\r\n                }\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Called before event segment resizing starts\r\n    EventResizing.prototype.segResizeStart = function (seg, ev) {\r\n        this.isResizing = true;\r\n        this.component.publiclyTrigger('eventResizeStart', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Called after event segment resizing stops\r\n    EventResizing.prototype.segResizeStop = function (seg, ev) {\r\n        this.isResizing = false;\r\n        this.component.publiclyTrigger('eventResizeStop', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Returns new date-information for an event segment being resized from its start\r\n    EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n        var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n        var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());\r\n        var dateMutation;\r\n        var eventDefMutation;\r\n        if (origRange.getStart().add(startDelta) < origRange.getEnd()) {\r\n            dateMutation = new EventDefDateMutation_1.default();\r\n            dateMutation.setStartDelta(startDelta);\r\n            eventDefMutation = new EventDefMutation_1.default();\r\n            eventDefMutation.setDateMutation(dateMutation);\r\n            return eventDefMutation;\r\n        }\r\n        return false;\r\n    };\r\n    // Returns new date-information for an event segment being resized from its end\r\n    EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\r\n        var origRange = origEventFootprint.componentFootprint.unzonedRange;\r\n        var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());\r\n        var dateMutation;\r\n        var eventDefMutation;\r\n        if (origRange.getEnd().add(endDelta) > origRange.getStart()) {\r\n            dateMutation = new EventDefDateMutation_1.default();\r\n            dateMutation.setEndDelta(endDelta);\r\n            eventDefMutation = new EventDefMutation_1.default();\r\n            eventDefMutation.setDateMutation(dateMutation);\r\n            return eventDefMutation;\r\n        }\r\n        return false;\r\n    };\r\n    return EventResizing;\r\n}(Interaction_1.default));\r\nexports.default = EventResizing;\r\n\n\n/***/ }),\n/* 235 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventDefMutation_1 = __webpack_require__(39);\r\nvar EventDefDateMutation_1 = __webpack_require__(40);\r\nvar DragListener_1 = __webpack_require__(59);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar MouseFollower_1 = __webpack_require__(226);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar EventDragging = /** @class */ (function (_super) {\r\n    tslib_1.__extends(EventDragging, _super);\r\n    /*\r\n    component implements:\r\n      - bindSegHandlerToEl\r\n      - publiclyTrigger\r\n      - diffDates\r\n      - eventRangesToEventFootprints\r\n      - isEventInstanceGroupAllowed\r\n    */\r\n    function EventDragging(component, eventPointing) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.isDragging = false;\r\n        _this.eventPointing = eventPointing;\r\n        return _this;\r\n    }\r\n    EventDragging.prototype.end = function () {\r\n        if (this.dragListener) {\r\n            this.dragListener.endInteraction();\r\n        }\r\n    };\r\n    EventDragging.prototype.getSelectionDelay = function () {\r\n        var delay = this.opt('eventLongPressDelay');\r\n        if (delay == null) {\r\n            delay = this.opt('longPressDelay'); // fallback\r\n        }\r\n        return delay;\r\n    };\r\n    EventDragging.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));\r\n        component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\r\n    };\r\n    EventDragging.prototype.handleMousedown = function (seg, ev) {\r\n        if (!this.component.shouldIgnoreMouse() &&\r\n            this.component.canStartDrag(seg, ev)) {\r\n            this.buildDragListener(seg).startInteraction(ev, { distance: 5 });\r\n        }\r\n    };\r\n    EventDragging.prototype.handleTouchStart = function (seg, ev) {\r\n        var component = this.component;\r\n        var settings = {\r\n            delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?\r\n                0 : this.getSelectionDelay()\r\n        };\r\n        if (component.canStartDrag(seg, ev)) {\r\n            this.buildDragListener(seg).startInteraction(ev, settings);\r\n        }\r\n        else if (component.canStartSelection(seg, ev)) {\r\n            this.buildSelectListener(seg).startInteraction(ev, settings);\r\n        }\r\n    };\r\n    // seg isn't draggable, but let's use a generic DragListener\r\n    // simply for the delay, so it can be selected.\r\n    // Has side effect of setting/unsetting `dragListener`\r\n    EventDragging.prototype.buildSelectListener = function (seg) {\r\n        var _this = this;\r\n        var view = this.view;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n        if (this.dragListener) {\r\n            return this.dragListener;\r\n        }\r\n        var dragListener = this.dragListener = new DragListener_1.default({\r\n            dragStart: function (ev) {\r\n                if (dragListener.isTouch &&\r\n                    !view.isEventDefSelected(eventDef) &&\r\n                    eventInstance) {\r\n                    // if not previously selected, will fire after a delay. then, select the event\r\n                    view.selectEventInstance(eventInstance);\r\n                }\r\n            },\r\n            interactionEnd: function (ev) {\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Builds a listener that will track user-dragging on an event segment.\r\n    // Generic enough to work with any type of Grid.\r\n    // Has side effect of setting/unsetting `dragListener`\r\n    EventDragging.prototype.buildDragListener = function (seg) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var eventManager = calendar.eventManager;\r\n        var el = seg.el;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\r\n        var isDragging;\r\n        var mouseFollower; // A clone of the original element that will move with the mouse\r\n        var eventDefMutation;\r\n        if (this.dragListener) {\r\n            return this.dragListener;\r\n        }\r\n        // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\r\n        // of the view.\r\n        var dragListener = this.dragListener = new HitDragListener_1.default(view, {\r\n            scroll: this.opt('dragScroll'),\r\n            subjectEl: el,\r\n            subjectCenter: true,\r\n            interactionStart: function (ev) {\r\n                seg.component = component; // for renderDrag\r\n                isDragging = false;\r\n                mouseFollower = new MouseFollower_1.default(seg.el, {\r\n                    additionalClass: 'fc-dragging',\r\n                    parentEl: view.el,\r\n                    opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),\r\n                    revertDuration: _this.opt('dragRevertDuration'),\r\n                    zIndex: 2 // one above the .fc-view\r\n                });\r\n                mouseFollower.hide(); // don't show until we know this is a real drag\r\n                mouseFollower.start(ev);\r\n            },\r\n            dragStart: function (ev) {\r\n                if (dragListener.isTouch &&\r\n                    !view.isEventDefSelected(eventDef) &&\r\n                    eventInstance) {\r\n                    // if not previously selected, will fire after a delay. then, select the event\r\n                    view.selectEventInstance(eventInstance);\r\n                }\r\n                isDragging = true;\r\n                // ensure a mouseout on the manipulated event has been reported\r\n                _this.eventPointing.handleMouseout(seg, ev);\r\n                _this.segDragStart(seg, ev);\r\n                view.hideEventsWithId(seg.footprint.eventDef.id);\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var isAllowed = true;\r\n                var origFootprint;\r\n                var footprint;\r\n                var mutatedEventInstanceGroup;\r\n                // starting hit could be forced (DayGrid.limit)\r\n                if (seg.hit) {\r\n                    origHit = seg.hit;\r\n                }\r\n                // hit might not belong to this grid, so query origin grid\r\n                origFootprint = origHit.component.getSafeHitFootprint(origHit);\r\n                footprint = hit.component.getSafeHitFootprint(hit);\r\n                if (origFootprint && footprint) {\r\n                    eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);\r\n                    if (eventDefMutation) {\r\n                        mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);\r\n                        isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\r\n                    }\r\n                    else {\r\n                        isAllowed = false;\r\n                    }\r\n                }\r\n                else {\r\n                    isAllowed = false;\r\n                }\r\n                if (!isAllowed) {\r\n                    eventDefMutation = null;\r\n                    util_1.disableCursor();\r\n                }\r\n                // if a valid drop location, have the subclass render a visual indication\r\n                if (eventDefMutation &&\r\n                    view.renderDrag(// truthy if rendered something\r\n                    component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {\r\n                    mouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\r\n                }\r\n                else {\r\n                    mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\r\n                }\r\n                if (isOrig) {\r\n                    // needs to have moved hits to be a valid drop\r\n                    eventDefMutation = null;\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                view.unrenderDrag(seg); // unrender whatever was done in renderDrag\r\n                mouseFollower.show(); // show in case we are moving out of all hits\r\n                eventDefMutation = null;\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev) {\r\n                delete seg.component; // prevent side effects\r\n                // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\r\n                mouseFollower.stop(!eventDefMutation, function () {\r\n                    if (isDragging) {\r\n                        view.unrenderDrag(seg);\r\n                        _this.segDragStop(seg, ev);\r\n                    }\r\n                    view.showEventsWithId(seg.footprint.eventDef.id);\r\n                    if (eventDefMutation) {\r\n                        // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\r\n                        view.reportEventDrop(eventInstance, eventDefMutation, el, ev);\r\n                    }\r\n                });\r\n                _this.dragListener = null;\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Called before event segment dragging starts\r\n    EventDragging.prototype.segDragStart = function (seg, ev) {\r\n        this.isDragging = true;\r\n        this.component.publiclyTrigger('eventDragStart', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // Called after event segment dragging stops\r\n    EventDragging.prototype.segDragStop = function (seg, ev) {\r\n        this.isDragging = false;\r\n        this.component.publiclyTrigger('eventDragStop', {\r\n            context: seg.el[0],\r\n            args: [\r\n                seg.footprint.getEventLegacy(),\r\n                ev,\r\n                {},\r\n                this.view\r\n            ]\r\n        });\r\n    };\r\n    // DOES NOT consider overlap/constraint\r\n    EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {\r\n        var eventDefMutation = new EventDefMutation_1.default();\r\n        eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));\r\n        return eventDefMutation;\r\n    };\r\n    EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {\r\n        var date0 = startFootprint.unzonedRange.getStart();\r\n        var date1 = endFootprint.unzonedRange.getStart();\r\n        var clearEnd = false;\r\n        var forceTimed = false;\r\n        var forceAllDay = false;\r\n        var dateDelta;\r\n        var dateMutation;\r\n        if (startFootprint.isAllDay !== endFootprint.isAllDay) {\r\n            clearEnd = true;\r\n            if (endFootprint.isAllDay) {\r\n                forceAllDay = true;\r\n                date0.stripTime();\r\n            }\r\n            else {\r\n                forceTimed = true;\r\n            }\r\n        }\r\n        dateDelta = this.component.diffDates(date1, date0);\r\n        dateMutation = new EventDefDateMutation_1.default();\r\n        dateMutation.clearEnd = clearEnd;\r\n        dateMutation.forceTimed = forceTimed;\r\n        dateMutation.forceAllDay = forceAllDay;\r\n        dateMutation.setDateDelta(dateDelta);\r\n        return dateMutation;\r\n    };\r\n    return EventDragging;\r\n}(Interaction_1.default));\r\nexports.default = EventDragging;\r\n\n\n/***/ }),\n/* 236 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateSelecting = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateSelecting, _super);\r\n    /*\r\n    component must implement:\r\n      - bindDateHandlerToEl\r\n      - getSafeHitFootprint\r\n      - renderHighlight\r\n      - unrenderHighlight\r\n    */\r\n    function DateSelecting(component) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.dragListener = _this.buildDragListener();\r\n        return _this;\r\n    }\r\n    DateSelecting.prototype.end = function () {\r\n        this.dragListener.endInteraction();\r\n    };\r\n    DateSelecting.prototype.getDelay = function () {\r\n        var delay = this.opt('selectLongPressDelay');\r\n        if (delay == null) {\r\n            delay = this.opt('longPressDelay'); // fallback\r\n        }\r\n        return delay;\r\n    };\r\n    DateSelecting.prototype.bindToEl = function (el) {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var dragListener = this.dragListener;\r\n        component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n            if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {\r\n                dragListener.startInteraction(ev, {\r\n                    distance: _this.opt('selectMinDistance')\r\n                });\r\n            }\r\n        });\r\n        component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n            if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {\r\n                dragListener.startInteraction(ev, {\r\n                    delay: _this.getDelay()\r\n                });\r\n            }\r\n        });\r\n        util_1.preventSelection(el);\r\n    };\r\n    // Creates a listener that tracks the user's drag across day elements, for day selecting.\r\n    DateSelecting.prototype.buildDragListener = function () {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var selectionFootprint; // null if invalid selection\r\n        var dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            interactionStart: function () {\r\n                selectionFootprint = null;\r\n            },\r\n            dragStart: function (ev) {\r\n                _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                var origHitFootprint;\r\n                var hitFootprint;\r\n                if (origHit) { // click needs to have started on a hit\r\n                    origHitFootprint = component.getSafeHitFootprint(origHit);\r\n                    hitFootprint = component.getSafeHitFootprint(hit);\r\n                    if (origHitFootprint && hitFootprint) {\r\n                        selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);\r\n                    }\r\n                    else {\r\n                        selectionFootprint = null;\r\n                    }\r\n                    if (selectionFootprint) {\r\n                        component.renderSelectionFootprint(selectionFootprint);\r\n                    }\r\n                    else if (selectionFootprint === false) {\r\n                        util_1.disableCursor();\r\n                    }\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                selectionFootprint = null;\r\n                component.unrenderSelection();\r\n            },\r\n            hitDone: function () {\r\n                util_1.enableCursor();\r\n            },\r\n            interactionEnd: function (ev, isCancelled) {\r\n                if (!isCancelled && selectionFootprint) {\r\n                    // the selection will already have been rendered. just report it\r\n                    _this.view.reportSelection(selectionFootprint, ev);\r\n                }\r\n            }\r\n        });\r\n        return dragListener;\r\n    };\r\n    // Given the first and last date-spans of a selection, returns another date-span object.\r\n    // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().\r\n    // Will return false if the selection is invalid and this should be indicated to the user.\r\n    // Will return null/undefined if a selection invalid but no error should be reported.\r\n    DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {\r\n        var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);\r\n        if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {\r\n            return false;\r\n        }\r\n        return wholeFootprint;\r\n    };\r\n    // Given two spans, must return the combination of the two.\r\n    // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\r\n    // Assumes both footprints are non-open-ended.\r\n    DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {\r\n        var ms = [\r\n            footprint0.unzonedRange.startMs,\r\n            footprint0.unzonedRange.endMs,\r\n            footprint1.unzonedRange.startMs,\r\n            footprint1.unzonedRange.endMs\r\n        ];\r\n        ms.sort(util_1.compareNumbers);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(ms[0], ms[3]), footprint0.isAllDay);\r\n    };\r\n    DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\r\n        return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) &&\r\n            this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);\r\n    };\r\n    return DateSelecting;\r\n}(Interaction_1.default));\r\nexports.default = DateSelecting;\r\n\n\n/***/ }),\n/* 237 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar HitDragListener_1 = __webpack_require__(17);\r\nvar Interaction_1 = __webpack_require__(14);\r\nvar DateClicking = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DateClicking, _super);\r\n    /*\r\n    component must implement:\r\n      - bindDateHandlerToEl\r\n      - getSafeHitFootprint\r\n      - getHitEl\r\n    */\r\n    function DateClicking(component) {\r\n        var _this = _super.call(this, component) || this;\r\n        _this.dragListener = _this.buildDragListener();\r\n        return _this;\r\n    }\r\n    DateClicking.prototype.end = function () {\r\n        this.dragListener.endInteraction();\r\n    };\r\n    DateClicking.prototype.bindToEl = function (el) {\r\n        var component = this.component;\r\n        var dragListener = this.dragListener;\r\n        component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\r\n            if (!component.shouldIgnoreMouse()) {\r\n                dragListener.startInteraction(ev);\r\n            }\r\n        });\r\n        component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\r\n            if (!component.shouldIgnoreTouch()) {\r\n                dragListener.startInteraction(ev);\r\n            }\r\n        });\r\n    };\r\n    // Creates a listener that tracks the user's drag across day elements, for day clicking.\r\n    DateClicking.prototype.buildDragListener = function () {\r\n        var _this = this;\r\n        var component = this.component;\r\n        var dayClickHit; // null if invalid dayClick\r\n        var dragListener = new HitDragListener_1.default(component, {\r\n            scroll: this.opt('dragScroll'),\r\n            interactionStart: function () {\r\n                dayClickHit = dragListener.origHit;\r\n            },\r\n            hitOver: function (hit, isOrig, origHit) {\r\n                // if user dragged to another cell at any point, it can no longer be a dayClick\r\n                if (!isOrig) {\r\n                    dayClickHit = null;\r\n                }\r\n            },\r\n            hitOut: function () {\r\n                dayClickHit = null;\r\n            },\r\n            interactionEnd: function (ev, isCancelled) {\r\n                var componentFootprint;\r\n                if (!isCancelled && dayClickHit) {\r\n                    componentFootprint = component.getSafeHitFootprint(dayClickHit);\r\n                    if (componentFootprint) {\r\n                        _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);\r\n                    }\r\n                }\r\n            }\r\n        });\r\n        // because dragListener won't be called with any time delay, \"dragging\" will begin immediately,\r\n        // which will kill any touchmoving/scrolling. Prevent this.\r\n        dragListener.shouldCancelTouchScroll = false;\r\n        dragListener.scrollAlwaysKills = true;\r\n        return dragListener;\r\n    };\r\n    return DateClicking;\r\n}(Interaction_1.default));\r\nexports.default = DateClicking;\r\n\n\n/***/ }),\n/* 238 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar View_1 = __webpack_require__(43);\r\nvar TimeGrid_1 = __webpack_require__(239);\r\nvar DayGrid_1 = __webpack_require__(66);\r\nvar AGENDA_ALL_DAY_EVENT_LIMIT = 5;\r\nvar agendaTimeGridMethods;\r\nvar agendaDayGridMethods;\r\n/* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\r\n// Responsible for managing width/height.\r\nvar AgendaView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(AgendaView, _super);\r\n    function AgendaView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering\r\n        _this.timeGrid = _this.instantiateTimeGrid();\r\n        _this.addChild(_this.timeGrid);\r\n        if (_this.opt('allDaySlot')) { // should we display the \"all-day\" area?\r\n            _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view\r\n            _this.addChild(_this.dayGrid);\r\n        }\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\r\n    AgendaView.prototype.instantiateTimeGrid = function () {\r\n        var timeGrid = new this.timeGridClass(this);\r\n        util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);\r\n        return timeGrid;\r\n    };\r\n    // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\r\n    AgendaView.prototype.instantiateDayGrid = function () {\r\n        var dayGrid = new this.dayGridClass(this);\r\n        util_1.copyOwnProps(agendaDayGridMethods, dayGrid);\r\n        return dayGrid;\r\n    };\r\n    /* Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.renderSkeleton = function () {\r\n        var timeGridWrapEl;\r\n        var timeGridEl;\r\n        this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\r\n        this.scroller.render();\r\n        timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\r\n        timeGridEl = $('<div class=\"fc-time-grid\">').appendTo(timeGridWrapEl);\r\n        this.el.find('.fc-body > tr > td').append(timeGridWrapEl);\r\n        this.timeGrid.headContainerEl = this.el.find('.fc-head-container');\r\n        this.timeGrid.setElement(timeGridEl);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.setElement(this.el.find('.fc-day-grid'));\r\n            // have the day-grid extend it's coordinate area over the <hr> dividing the two grids\r\n            this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\r\n        }\r\n    };\r\n    AgendaView.prototype.unrenderSkeleton = function () {\r\n        this.timeGrid.removeElement();\r\n        if (this.dayGrid) {\r\n            this.dayGrid.removeElement();\r\n        }\r\n        this.scroller.destroy();\r\n    };\r\n    // Builds the HTML skeleton for the view.\r\n    // The day-grid and time-grid components will render inside containers defined by this HTML.\r\n    AgendaView.prototype.renderSkeletonHtml = function () {\r\n        var theme = this.calendar.theme;\r\n        return '' +\r\n            '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            (this.opt('columnHeader') ?\r\n                '<thead class=\"fc-head\">' +\r\n                    '<tr>' +\r\n                    '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' +\r\n                    '</tr>' +\r\n                    '</thead>' :\r\n                '') +\r\n            '<tbody class=\"fc-body\">' +\r\n            '<tr>' +\r\n            '<td class=\"' + theme.getClass('widgetContent') + '\">' +\r\n            (this.dayGrid ?\r\n                '<div class=\"fc-day-grid\"></div>' +\r\n                    '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\"></hr>' :\r\n                '') +\r\n            '</td>' +\r\n            '</tr>' +\r\n            '</tbody>' +\r\n            '</table>';\r\n    };\r\n    // Generates an HTML attribute string for setting the width of the axis, if it is known\r\n    AgendaView.prototype.axisStyleAttr = function () {\r\n        if (this.axisWidth != null) {\r\n            return 'style=\"width:' + this.axisWidth + 'px\"';\r\n        }\r\n        return '';\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.getNowIndicatorUnit = function () {\r\n        return this.timeGrid.getNowIndicatorUnit();\r\n    };\r\n    /* Dimensions\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Adjusts the vertical dimensions of the view to the specified values\r\n    AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        var eventLimit;\r\n        var scrollerHeight;\r\n        var scrollbarWidths;\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        // make all axis cells line up, and record the width so newly created axis cells will have it\r\n        this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis'));\r\n        // hack to give the view some height prior to timeGrid's columns being rendered\r\n        // TODO: separate setting height from scroller VS timeGrid.\r\n        if (!this.timeGrid.colEls) {\r\n            if (!isAuto) {\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            return;\r\n        }\r\n        // set of fake row elements that must compensate when scroller has scrollbars\r\n        var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)');\r\n        // reset all dimensions back to the original state\r\n        this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary\r\n        this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n        util_1.uncompensateScroll(noScrollRowEls);\r\n        // limit number of events in the all-day area\r\n        if (this.dayGrid) {\r\n            this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\r\n            eventLimit = this.opt('eventLimit');\r\n            if (eventLimit && typeof eventLimit !== 'number') {\r\n                eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\r\n            }\r\n            if (eventLimit) {\r\n                this.dayGrid.limitRows(eventLimit);\r\n            }\r\n        }\r\n        if (!isAuto) { // should we force dimensions of the scroll container?\r\n            scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n            this.scroller.setHeight(scrollerHeight);\r\n            scrollbarWidths = this.scroller.getScrollbarWidths();\r\n            if (scrollbarWidths.left || scrollbarWidths.right) { // using scrollbars?\r\n                // make the all-day and header rows lines up\r\n                util_1.compensateScroll(noScrollRowEls, scrollbarWidths);\r\n                // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\r\n                // and reapply the desired height to the scroller.\r\n                scrollerHeight = this.computeScrollerHeight(totalHeight);\r\n                this.scroller.setHeight(scrollerHeight);\r\n            }\r\n            // guarantees the same scrollbar widths\r\n            this.scroller.lockOverflow(scrollbarWidths);\r\n            // if there's any space below the slats, show the horizontal rule.\r\n            // this won't cause any new overflow, because lockOverflow already called.\r\n            if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\r\n                this.timeGrid.bottomRuleEl.show();\r\n            }\r\n        }\r\n    };\r\n    // given a desired total height of the view, returns what the height of the scroller should be\r\n    AgendaView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    /* Scroll\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Computes the initial pre-configured scroll state prior to allowing the user to change it\r\n    AgendaView.prototype.computeInitialDateScroll = function () {\r\n        var scrollTime = moment.duration(this.opt('scrollTime'));\r\n        var top = this.timeGrid.computeTimeTop(scrollTime);\r\n        // zoom can give weird floating-point values. rather scroll a little bit further\r\n        top = Math.ceil(top);\r\n        if (top) {\r\n            top++; // to overcome top border that slots beyond the first have. looks better\r\n        }\r\n        return { top: top };\r\n    };\r\n    AgendaView.prototype.queryDateScroll = function () {\r\n        return { top: this.scroller.getScrollTop() };\r\n    };\r\n    AgendaView.prototype.applyDateScroll = function (scroll) {\r\n        if (scroll.top !== undefined) {\r\n            this.scroller.setScrollTop(scroll.top);\r\n        }\r\n    };\r\n    /* Hit Areas\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // forward all hit-related method calls to the grids (dayGrid might not be defined)\r\n    AgendaView.prototype.getHitFootprint = function (hit) {\r\n        // TODO: hit.component is set as a hack to identify where the hit came from\r\n        return hit.component.getHitFootprint(hit);\r\n    };\r\n    AgendaView.prototype.getHitEl = function (hit) {\r\n        // TODO: hit.component is set as a hack to identify where the hit came from\r\n        return hit.component.getHitEl(hit);\r\n    };\r\n    /* Event Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    AgendaView.prototype.executeEventRender = function (eventsPayload) {\r\n        var dayEventsPayload = {};\r\n        var timedEventsPayload = {};\r\n        var id;\r\n        var eventInstanceGroup;\r\n        // separate the events into all-day and timed\r\n        for (id in eventsPayload) {\r\n            eventInstanceGroup = eventsPayload[id];\r\n            if (eventInstanceGroup.getEventDef().isAllDay()) {\r\n                dayEventsPayload[id] = eventInstanceGroup;\r\n            }\r\n            else {\r\n                timedEventsPayload[id] = eventInstanceGroup;\r\n            }\r\n        }\r\n        this.timeGrid.executeEventRender(timedEventsPayload);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.executeEventRender(dayEventsPayload);\r\n        }\r\n    };\r\n    /* Dragging/Resizing Routing\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n    AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n        var renderedHelper = false;\r\n        renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);\r\n        if (this.dayGrid) {\r\n            renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;\r\n        }\r\n        return renderedHelper;\r\n    };\r\n    AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        var groups = groupEventFootprintsByAllDay(eventFootprints);\r\n        this.timeGrid.renderEventResize(groups.timed, seg, isTouch);\r\n        if (this.dayGrid) {\r\n            this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);\r\n        }\r\n    };\r\n    /* Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of a selection\r\n    AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        if (!componentFootprint.isAllDay) {\r\n            this.timeGrid.renderSelectionFootprint(componentFootprint);\r\n        }\r\n        else if (this.dayGrid) {\r\n            this.dayGrid.renderSelectionFootprint(componentFootprint);\r\n        }\r\n    };\r\n    return AgendaView;\r\n}(View_1.default));\r\nexports.default = AgendaView;\r\nAgendaView.prototype.timeGridClass = TimeGrid_1.default;\r\nAgendaView.prototype.dayGridClass = DayGrid_1.default;\r\n// Will customize the rendering behavior of the AgendaView's timeGrid\r\nagendaTimeGridMethods = {\r\n    // Generates the HTML that will go before the day-of week header cells\r\n    renderHeadIntroHtml: function () {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);\r\n        var weekText;\r\n        if (this.opt('weekNumbers')) {\r\n            weekText = weekStart.format(this.opt('smallWeekFormat'));\r\n            return '' +\r\n                '<th class=\"fc-axis fc-week-number ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '>' +\r\n                view.buildGotoAnchorHtml(// aside from link, important for matchCellWidths\r\n                { date: weekStart, type: 'week', forceOff: this.colCnt > 1 }, util_1.htmlEscape(weekText) // inner HTML\r\n                ) +\r\n                '</th>';\r\n        }\r\n        else {\r\n            return '<th class=\"fc-axis ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '></th>';\r\n        }\r\n    },\r\n    // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\r\n    renderBgIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '></td>';\r\n    },\r\n    // Generates the HTML that goes before all other types of cells.\r\n    // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n    renderIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\r\n    }\r\n};\r\n// Will customize the rendering behavior of the AgendaView's dayGrid\r\nagendaDayGridMethods = {\r\n    // Generates the HTML that goes before the all-day cells\r\n    renderBgIntroHtml: function () {\r\n        var view = this.view;\r\n        return '' +\r\n            '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' +\r\n            '<span>' + // needed for matchCellWidths\r\n            view.getAllDayHtml() +\r\n            '</span>' +\r\n            '</td>';\r\n    },\r\n    // Generates the HTML that goes before all other types of cells.\r\n    // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\r\n    renderIntroHtml: function () {\r\n        var view = this.view;\r\n        return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\r\n    }\r\n};\r\nfunction groupEventFootprintsByAllDay(eventFootprints) {\r\n    var allDay = [];\r\n    var timed = [];\r\n    var i;\r\n    for (i = 0; i < eventFootprints.length; i++) {\r\n        if (eventFootprints[i].componentFootprint.isAllDay) {\r\n            allDay.push(eventFootprints[i]);\r\n        }\r\n        else {\r\n            timed.push(eventFootprints[i]);\r\n        }\r\n    }\r\n    return { allDay: allDay, timed: timed };\r\n}\r\n\n\n/***/ }),\n/* 239 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar InteractiveDateComponent_1 = __webpack_require__(42);\r\nvar BusinessHourRenderer_1 = __webpack_require__(61);\r\nvar StandardInteractionsMixin_1 = __webpack_require__(65);\r\nvar DayTableMixin_1 = __webpack_require__(60);\r\nvar CoordCache_1 = __webpack_require__(58);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar ComponentFootprint_1 = __webpack_require__(12);\r\nvar TimeGridEventRenderer_1 = __webpack_require__(240);\r\nvar TimeGridHelperRenderer_1 = __webpack_require__(241);\r\nvar TimeGridFillRenderer_1 = __webpack_require__(242);\r\n/* A component that renders one or more columns of vertical time slots\r\n----------------------------------------------------------------------------------------------------------------------*/\r\n// We mixin DayTable, even though there is only a single row of days\r\n// potential nice values for the slot-duration and interval-duration\r\n// from largest to smallest\r\nvar AGENDA_STOCK_SUB_DURATIONS = [\r\n    { hours: 1 },\r\n    { minutes: 30 },\r\n    { minutes: 15 },\r\n    { seconds: 30 },\r\n    { seconds: 15 }\r\n];\r\nvar TimeGrid = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGrid, _super);\r\n    function TimeGrid(view) {\r\n        var _this = _super.call(this, view) || this;\r\n        _this.processOptions();\r\n        return _this;\r\n    }\r\n    // Slices up the given span (unzoned start/end with other misc data) into an array of segments\r\n    TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\r\n        var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);\r\n        var i;\r\n        for (i = 0; i < segs.length; i++) {\r\n            if (this.isRTL) {\r\n                segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\r\n            }\r\n            else {\r\n                segs[i].col = segs[i].dayIndex;\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Date Handling\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {\r\n        var segs = [];\r\n        var segRange;\r\n        var dayIndex;\r\n        for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\r\n            segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);\r\n            if (segRange) {\r\n                segs.push({\r\n                    startMs: segRange.startMs,\r\n                    endMs: segRange.endMs,\r\n                    isStart: segRange.isStart,\r\n                    isEnd: segRange.isEnd,\r\n                    dayIndex: dayIndex\r\n                });\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    /* Options\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Parses various options into properties of this object\r\n    TimeGrid.prototype.processOptions = function () {\r\n        var slotDuration = this.opt('slotDuration');\r\n        var snapDuration = this.opt('snapDuration');\r\n        var input;\r\n        slotDuration = moment.duration(slotDuration);\r\n        snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\r\n        this.slotDuration = slotDuration;\r\n        this.snapDuration = snapDuration;\r\n        this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\r\n        // might be an array value (for TimelineView).\r\n        // if so, getting the most granular entry (the last one probably).\r\n        input = this.opt('slotLabelFormat');\r\n        if ($.isArray(input)) {\r\n            input = input[input.length - 1];\r\n        }\r\n        this.labelFormat = input ||\r\n            this.opt('smallTimeFormat'); // the computed default\r\n        input = this.opt('slotLabelInterval');\r\n        this.labelInterval = input ?\r\n            moment.duration(input) :\r\n            this.computeLabelInterval(slotDuration);\r\n    };\r\n    // Computes an automatic value for slotLabelInterval\r\n    TimeGrid.prototype.computeLabelInterval = function (slotDuration) {\r\n        var i;\r\n        var labelInterval;\r\n        var slotsPerLabel;\r\n        // find the smallest stock label interval that results in more than one slots-per-label\r\n        for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\r\n            labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\r\n            slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);\r\n            if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {\r\n                return labelInterval;\r\n            }\r\n        }\r\n        return moment.duration(slotDuration); // fall back. clone\r\n    };\r\n    /* Date Rendering\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.renderDates = function (dateProfile) {\r\n        this.dateProfile = dateProfile;\r\n        this.updateDayTable();\r\n        this.renderSlats();\r\n        this.renderColumns();\r\n    };\r\n    TimeGrid.prototype.unrenderDates = function () {\r\n        // this.unrenderSlats(); // don't need this because repeated .html() calls clear\r\n        this.unrenderColumns();\r\n    };\r\n    TimeGrid.prototype.renderSkeleton = function () {\r\n        var theme = this.view.calendar.theme;\r\n        this.el.html('<div class=\"fc-bg\"></div>' +\r\n            '<div class=\"fc-slats\"></div>' +\r\n            '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\" style=\"display:none\"></hr>');\r\n        this.bottomRuleEl = this.el.find('hr');\r\n    };\r\n    TimeGrid.prototype.renderSlats = function () {\r\n        var theme = this.view.calendar.theme;\r\n        this.slatContainerEl = this.el.find('> .fc-slats')\r\n            .html(// avoids needing ::unrenderSlats()\r\n        '<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderSlatRowHtml() +\r\n            '</table>');\r\n        this.slatEls = this.slatContainerEl.find('tr');\r\n        this.slatCoordCache = new CoordCache_1.default({\r\n            els: this.slatEls,\r\n            isVertical: true\r\n        });\r\n    };\r\n    // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\r\n    TimeGrid.prototype.renderSlatRowHtml = function () {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var theme = calendar.theme;\r\n        var isRTL = this.isRTL;\r\n        var dateProfile = this.dateProfile;\r\n        var html = '';\r\n        var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations\r\n        var slotIterator = moment.duration(0);\r\n        var slotDate; // will be on the view's first day, but we only care about its time\r\n        var isLabeled;\r\n        var axisHtml;\r\n        // Calculate the time for each slot\r\n        while (slotTime < dateProfile.maxTime) {\r\n            slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);\r\n            isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));\r\n            axisHtml =\r\n                '<td class=\"fc-axis fc-time ' + theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' +\r\n                    (isLabeled ?\r\n                        '<span>' + // for matchCellWidths\r\n                            util_1.htmlEscape(slotDate.format(this.labelFormat)) +\r\n                            '</span>' :\r\n                        '') +\r\n                    '</td>';\r\n            html +=\r\n                '<tr data-time=\"' + slotDate.format('HH:mm:ss') + '\"' +\r\n                    (isLabeled ? '' : ' class=\"fc-minor\"') +\r\n                    '>' +\r\n                    (!isRTL ? axisHtml : '') +\r\n                    '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' +\r\n                    (isRTL ? axisHtml : '') +\r\n                    '</tr>';\r\n            slotTime.add(this.slotDuration);\r\n            slotIterator.add(this.slotDuration);\r\n        }\r\n        return html;\r\n    };\r\n    TimeGrid.prototype.renderColumns = function () {\r\n        var dateProfile = this.dateProfile;\r\n        var theme = this.view.calendar.theme;\r\n        this.dayRanges = this.dayDates.map(function (dayDate) {\r\n            return new UnzonedRange_1.default(dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));\r\n        });\r\n        if (this.headContainerEl) {\r\n            this.headContainerEl.html(this.renderHeadHtml());\r\n        }\r\n        this.el.find('> .fc-bg').html('<table class=\"' + theme.getClass('tableGrid') + '\">' +\r\n            this.renderBgTrHtml(0) + // row=0\r\n            '</table>');\r\n        this.colEls = this.el.find('.fc-day, .fc-disabled-day');\r\n        this.colCoordCache = new CoordCache_1.default({\r\n            els: this.colEls,\r\n            isHorizontal: true\r\n        });\r\n        this.renderContentSkeleton();\r\n    };\r\n    TimeGrid.prototype.unrenderColumns = function () {\r\n        this.unrenderContentSkeleton();\r\n    };\r\n    /* Content Skeleton\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders the DOM that the view's content will live in\r\n    TimeGrid.prototype.renderContentSkeleton = function () {\r\n        var cellHtml = '';\r\n        var i;\r\n        var skeletonEl;\r\n        for (i = 0; i < this.colCnt; i++) {\r\n            cellHtml +=\r\n                '<td>' +\r\n                    '<div class=\"fc-content-col\">' +\r\n                    '<div class=\"fc-event-container fc-helper-container\"></div>' +\r\n                    '<div class=\"fc-event-container\"></div>' +\r\n                    '<div class=\"fc-highlight-container\"></div>' +\r\n                    '<div class=\"fc-bgevent-container\"></div>' +\r\n                    '<div class=\"fc-business-container\"></div>' +\r\n                    '</div>' +\r\n                    '</td>';\r\n        }\r\n        skeletonEl = this.contentSkeletonEl = $('<div class=\"fc-content-skeleton\">' +\r\n            '<table>' +\r\n            '<tr>' + cellHtml + '</tr>' +\r\n            '</table>' +\r\n            '</div>');\r\n        this.colContainerEls = skeletonEl.find('.fc-content-col');\r\n        this.helperContainerEls = skeletonEl.find('.fc-helper-container');\r\n        this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\r\n        this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\r\n        this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\r\n        this.businessContainerEls = skeletonEl.find('.fc-business-container');\r\n        this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\r\n        this.el.append(skeletonEl);\r\n    };\r\n    TimeGrid.prototype.unrenderContentSkeleton = function () {\r\n        if (this.contentSkeletonEl) { // defensive :(\r\n            this.contentSkeletonEl.remove();\r\n            this.contentSkeletonEl = null;\r\n            this.colContainerEls = null;\r\n            this.helperContainerEls = null;\r\n            this.fgContainerEls = null;\r\n            this.bgContainerEls = null;\r\n            this.highlightContainerEls = null;\r\n            this.businessContainerEls = null;\r\n        }\r\n    };\r\n    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\r\n    TimeGrid.prototype.groupSegsByCol = function (segs) {\r\n        var segsByCol = [];\r\n        var i;\r\n        for (i = 0; i < this.colCnt; i++) {\r\n            segsByCol.push([]);\r\n        }\r\n        for (i = 0; i < segs.length; i++) {\r\n            segsByCol[segs[i].col].push(segs[i]);\r\n        }\r\n        return segsByCol;\r\n    };\r\n    // Given segments grouped by column, insert the segments' elements into a parallel array of container\r\n    // elements, each living within a column.\r\n    TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {\r\n        var col;\r\n        var segs;\r\n        var i;\r\n        for (col = 0; col < this.colCnt; col++) { // iterate each column grouping\r\n            segs = segsByCol[col];\r\n            for (i = 0; i < segs.length; i++) {\r\n                containerEls.eq(col).append(segs[i].el);\r\n            }\r\n        }\r\n    };\r\n    /* Now Indicator\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.getNowIndicatorUnit = function () {\r\n        return 'minute'; // will refresh on the minute\r\n    };\r\n    TimeGrid.prototype.renderNowIndicator = function (date) {\r\n        // HACK: if date columns not ready for some reason (scheduler)\r\n        if (!this.colContainerEls) {\r\n            return;\r\n        }\r\n        // seg system might be overkill, but it handles scenario where line needs to be rendered\r\n        //  more than once because of columns with the same date (resources columns for example)\r\n        var segs = this.componentFootprintToSegs(new ComponentFootprint_1.default(new UnzonedRange_1.default(date, date.valueOf() + 1), // protect against null range\r\n        false // all-day\r\n        ));\r\n        var top = this.computeDateTop(date, date);\r\n        var nodes = [];\r\n        var i;\r\n        // render lines within the columns\r\n        for (i = 0; i < segs.length; i++) {\r\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-line\"></div>')\r\n                .css('top', top)\r\n                .appendTo(this.colContainerEls.eq(segs[i].col))[0]);\r\n        }\r\n        // render an arrow over the axis\r\n        if (segs.length > 0) { // is the current time in view?\r\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-arrow\"></div>')\r\n                .css('top', top)\r\n                .appendTo(this.el.find('.fc-content-skeleton'))[0]);\r\n        }\r\n        this.nowIndicatorEls = $(nodes);\r\n    };\r\n    TimeGrid.prototype.unrenderNowIndicator = function () {\r\n        if (this.nowIndicatorEls) {\r\n            this.nowIndicatorEls.remove();\r\n            this.nowIndicatorEls = null;\r\n        }\r\n    };\r\n    /* Coordinates\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        this.slatCoordCache.build();\r\n        if (isResize) {\r\n            this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));\r\n        }\r\n    };\r\n    TimeGrid.prototype.getTotalSlatHeight = function () {\r\n        return this.slatContainerEl.outerHeight();\r\n    };\r\n    // Computes the top coordinate, relative to the bounds of the grid, of the given date.\r\n    // `ms` can be a millisecond UTC time OR a UTC moment.\r\n    // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\r\n    TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {\r\n        return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));\r\n    };\r\n    // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\r\n    TimeGrid.prototype.computeTimeTop = function (time) {\r\n        var len = this.slatEls.length;\r\n        var dateProfile = this.dateProfile;\r\n        var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered\r\n        var slatIndex;\r\n        var slatRemainder;\r\n        // compute a floating-point number for how many slats should be progressed through.\r\n        // from 0 to number of slats (inclusive)\r\n        // constrained because minTime/maxTime might be customized.\r\n        slatCoverage = Math.max(0, slatCoverage);\r\n        slatCoverage = Math.min(len, slatCoverage);\r\n        // an integer index of the furthest whole slat\r\n        // from 0 to number slats (*exclusive*, so len-1)\r\n        slatIndex = Math.floor(slatCoverage);\r\n        slatIndex = Math.min(slatIndex, len - 1);\r\n        // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\r\n        // could be 1.0 if slatCoverage is covering *all* the slots\r\n        slatRemainder = slatCoverage - slatIndex;\r\n        return this.slatCoordCache.getTopPosition(slatIndex) +\r\n            this.slatCoordCache.getHeight(slatIndex) * slatRemainder;\r\n    };\r\n    // Refreshes the CSS top/bottom coordinates for each segment element.\r\n    // Works when called after initial render, after a window resize/zoom for example.\r\n    TimeGrid.prototype.updateSegVerticals = function (segs) {\r\n        this.computeSegVerticals(segs);\r\n        this.assignSegVerticals(segs);\r\n    };\r\n    // For each segment in an array, computes and assigns its top and bottom properties\r\n    TimeGrid.prototype.computeSegVerticals = function (segs) {\r\n        var eventMinHeight = this.opt('agendaEventMinHeight');\r\n        var i;\r\n        var seg;\r\n        var dayDate;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            dayDate = this.dayDates[seg.dayIndex];\r\n            seg.top = this.computeDateTop(seg.startMs, dayDate);\r\n            seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));\r\n        }\r\n    };\r\n    // Given segments that already have their top/bottom properties computed, applies those values to\r\n    // the segments' elements.\r\n    TimeGrid.prototype.assignSegVerticals = function (segs) {\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            seg.el.css(this.generateSegVerticalCss(seg));\r\n        }\r\n    };\r\n    // Generates an object with CSS properties for the top/bottom coordinates of a segment element\r\n    TimeGrid.prototype.generateSegVerticalCss = function (seg) {\r\n        return {\r\n            top: seg.top,\r\n            bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\r\n        };\r\n    };\r\n    /* Hit System\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    TimeGrid.prototype.prepareHits = function () {\r\n        this.colCoordCache.build();\r\n        this.slatCoordCache.build();\r\n    };\r\n    TimeGrid.prototype.releaseHits = function () {\r\n        this.colCoordCache.clear();\r\n        // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\r\n    };\r\n    TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {\r\n        var snapsPerSlot = this.snapsPerSlot;\r\n        var colCoordCache = this.colCoordCache;\r\n        var slatCoordCache = this.slatCoordCache;\r\n        if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\r\n            var colIndex = colCoordCache.getHorizontalIndex(leftOffset);\r\n            var slatIndex = slatCoordCache.getVerticalIndex(topOffset);\r\n            if (colIndex != null && slatIndex != null) {\r\n                var slatTop = slatCoordCache.getTopOffset(slatIndex);\r\n                var slatHeight = slatCoordCache.getHeight(slatIndex);\r\n                var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\r\n                var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\r\n                var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\r\n                var snapTop = slatTop + (localSnapIndex / snapsPerSlot) * slatHeight;\r\n                var snapBottom = slatTop + ((localSnapIndex + 1) / snapsPerSlot) * slatHeight;\r\n                return {\r\n                    col: colIndex,\r\n                    snap: snapIndex,\r\n                    component: this,\r\n                    left: colCoordCache.getLeftOffset(colIndex),\r\n                    right: colCoordCache.getRightOffset(colIndex),\r\n                    top: snapTop,\r\n                    bottom: snapBottom\r\n                };\r\n            }\r\n        }\r\n    };\r\n    TimeGrid.prototype.getHitFootprint = function (hit) {\r\n        var start = this.getCellDate(0, hit.col); // row=0\r\n        var time = this.computeSnapTime(hit.snap); // pass in the snap-index\r\n        var end;\r\n        start.time(time);\r\n        end = start.clone().add(this.snapDuration);\r\n        return new ComponentFootprint_1.default(new UnzonedRange_1.default(start, end), false // all-day?\r\n        );\r\n    };\r\n    // Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\r\n    TimeGrid.prototype.computeSnapTime = function (snapIndex) {\r\n        return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);\r\n    };\r\n    TimeGrid.prototype.getHitEl = function (hit) {\r\n        return this.colEls.eq(hit.col);\r\n    };\r\n    /* Event Drag Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being dragged over the specified date(s).\r\n    // A returned value of `true` signals that a mock \"helper\" event has been rendered.\r\n    TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\r\n        var i;\r\n        if (seg) { // if there is event information for this drag, render a helper event\r\n            if (eventFootprints.length) {\r\n                this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\r\n                // signal that a helper has been rendered\r\n                return true;\r\n            }\r\n        }\r\n        else { // otherwise, just render a highlight\r\n            for (i = 0; i < eventFootprints.length; i++) {\r\n                this.renderHighlight(eventFootprints[i].componentFootprint);\r\n            }\r\n        }\r\n    };\r\n    // Unrenders any visual indication of an event being dragged\r\n    TimeGrid.prototype.unrenderDrag = function () {\r\n        this.unrenderHighlight();\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Event Resize Visualization\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of an event being resized\r\n    TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\r\n        this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\r\n    };\r\n    // Unrenders any visual indication of an event being resized\r\n    TimeGrid.prototype.unrenderEventResize = function () {\r\n        this.helperRenderer.unrender();\r\n    };\r\n    /* Selection\r\n    ------------------------------------------------------------------------------------------------------------------*/\r\n    // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\r\n    TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {\r\n        if (this.opt('selectHelper')) { // this setting signals that a mock helper event should be rendered\r\n            this.helperRenderer.renderComponentFootprint(componentFootprint);\r\n        }\r\n        else {\r\n            this.renderHighlight(componentFootprint);\r\n        }\r\n    };\r\n    // Unrenders any visual indication of a selection\r\n    TimeGrid.prototype.unrenderSelection = function () {\r\n        this.helperRenderer.unrender();\r\n        this.unrenderHighlight();\r\n    };\r\n    return TimeGrid;\r\n}(InteractiveDateComponent_1.default));\r\nexports.default = TimeGrid;\r\nTimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1.default;\r\nTimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1.default;\r\nTimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1.default;\r\nTimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1.default;\r\nStandardInteractionsMixin_1.default.mixInto(TimeGrid);\r\nDayTableMixin_1.default.mixInto(TimeGrid);\r\n\n\n/***/ }),\n/* 240 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/*\r\nOnly handles foreground segs.\r\nDoes not own rendering. Use for low-level util methods by TimeGrid.\r\n*/\r\nvar TimeGridEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridEventRenderer, _super);\r\n    function TimeGridEventRenderer(timeGrid, fillRenderer) {\r\n        var _this = _super.call(this, timeGrid, fillRenderer) || this;\r\n        _this.timeGrid = timeGrid;\r\n        return _this;\r\n    }\r\n    TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);\r\n    };\r\n    // Given an array of foreground segments, render a DOM element for each, computes position,\r\n    // and attaches to the column inner-container elements.\r\n    TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {\r\n        var segsByCol;\r\n        var col;\r\n        segsByCol = this.timeGrid.groupSegsByCol(segs);\r\n        for (col = 0; col < this.timeGrid.colCnt; col++) {\r\n            this.updateFgSegCoords(segsByCol[col]);\r\n        }\r\n        this.timeGrid.attachSegsByCol(segsByCol, containerEls);\r\n    };\r\n    TimeGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n        if (this.fgSegs) { // hack\r\n            this.fgSegs.forEach(function (seg) {\r\n                seg.el.remove();\r\n            });\r\n        }\r\n    };\r\n    // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n    TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\r\n    };\r\n    // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n    TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return true;\r\n    };\r\n    // Renders the HTML for a single event segment's default rendering\r\n    TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var componentFootprint = seg.footprint.componentFootprint;\r\n        var isAllDay = componentFootprint.isAllDay;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var isDraggable = view.isEventDefDraggable(eventDef);\r\n        var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n        var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n        var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n        var timeText;\r\n        var fullTimeText; // more verbose time text. for the print stylesheet\r\n        var startTimeText; // just the start time text\r\n        classes.unshift('fc-time-grid-event', 'fc-v-event');\r\n        // if the event appears to span more than one day...\r\n        if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n            // Don't display time text on segments that run entirely through a day.\r\n            // That would appear as midnight-midnight and would look dumb.\r\n            // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\r\n            if (seg.isStart || seg.isEnd) {\r\n                var zonedStart = calendar.msToMoment(seg.startMs);\r\n                var zonedEnd = calendar.msToMoment(seg.endMs);\r\n                timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);\r\n                fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');\r\n                startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false\r\n            }\r\n        }\r\n        else {\r\n            // Display the normal time text for the *event's* times\r\n            timeText = this.getTimeText(seg.footprint);\r\n            fullTimeText = this.getTimeText(seg.footprint, 'LT');\r\n            startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false\r\n        }\r\n        return '<a class=\"' + classes.join(' ') + '\"' +\r\n            (eventDef.url ?\r\n                ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' :\r\n                '') +\r\n            (skinCss ?\r\n                ' style=\"' + skinCss + '\"' :\r\n                '') +\r\n            '>' +\r\n            '<div class=\"fc-content\">' +\r\n            (timeText ?\r\n                '<div class=\"fc-time\"' +\r\n                    ' data-start=\"' + util_1.htmlEscape(startTimeText) + '\"' +\r\n                    ' data-full=\"' + util_1.htmlEscape(fullTimeText) + '\"' +\r\n                    '>' +\r\n                    '<span>' + util_1.htmlEscape(timeText) + '</span>' +\r\n                    '</div>' :\r\n                '') +\r\n            (eventDef.title ?\r\n                '<div class=\"fc-title\">' +\r\n                    util_1.htmlEscape(eventDef.title) +\r\n                    '</div>' :\r\n                '') +\r\n            '</div>' +\r\n            '<div class=\"fc-bg\"></div>' +\r\n            /* TODO: write CSS for this\r\n            (isResizableFromStart ?\r\n              '<div class=\"fc-resizer fc-start-resizer\"></div>' :\r\n              ''\r\n              ) +\r\n            */\r\n            (isResizableFromEnd ?\r\n                '<div class=\"fc-resizer fc-end-resizer\"></div>' :\r\n                '') +\r\n            '</a>';\r\n    };\r\n    // Given segments that are assumed to all live in the *same column*,\r\n    // compute their verical/horizontal coordinates and assign to their elements.\r\n    TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {\r\n        this.timeGrid.computeSegVerticals(segs); // horizontals relies on this\r\n        this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\r\n        this.timeGrid.assignSegVerticals(segs);\r\n        this.assignFgSegHorizontals(segs);\r\n    };\r\n    // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\r\n    // NOTE: Also reorders the given array by date!\r\n    TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {\r\n        var levels;\r\n        var level0;\r\n        var i;\r\n        this.sortEventSegs(segs); // order by certain criteria\r\n        levels = buildSlotSegLevels(segs);\r\n        computeForwardSlotSegs(levels);\r\n        if ((level0 = levels[0])) {\r\n            for (i = 0; i < level0.length; i++) {\r\n                computeSlotSegPressures(level0[i]);\r\n            }\r\n            for (i = 0; i < level0.length; i++) {\r\n                this.computeFgSegForwardBack(level0[i], 0, 0);\r\n            }\r\n        }\r\n    };\r\n    // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\r\n    // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\r\n    // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\r\n    //\r\n    // The segment might be part of a \"series\", which means consecutive segments with the same pressure\r\n    // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\r\n    // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\r\n    // coordinate of the first segment in the series.\r\n    TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {\r\n        var forwardSegs = seg.forwardSegs;\r\n        var i;\r\n        if (seg.forwardCoord === undefined) { // not already computed\r\n            if (!forwardSegs.length) {\r\n                // if there are no forward segments, this segment should butt up against the edge\r\n                seg.forwardCoord = 1;\r\n            }\r\n            else {\r\n                // sort highest pressure first\r\n                this.sortForwardSegs(forwardSegs);\r\n                // this segment's forwardCoord will be calculated from the backwardCoord of the\r\n                // highest-pressure forward segment.\r\n                this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\r\n                seg.forwardCoord = forwardSegs[0].backwardCoord;\r\n            }\r\n            // calculate the backwardCoord from the forwardCoord. consider the series\r\n            seg.backwardCoord = seg.forwardCoord -\r\n                (seg.forwardCoord - seriesBackwardCoord) / // available width for series\r\n                    (seriesBackwardPressure + 1); // # of segments in the series\r\n            // use this segment's coordinates to computed the coordinates of the less-pressurized\r\n            // forward segments\r\n            for (i = 0; i < forwardSegs.length; i++) {\r\n                this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\r\n            }\r\n        }\r\n    };\r\n    TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {\r\n        forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));\r\n    };\r\n    // A cmp function for determining which forward segment to rely on more when computing coordinates.\r\n    TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {\r\n        // put higher-pressure first\r\n        return seg2.forwardPressure - seg1.forwardPressure ||\r\n            // put segments that are closer to initial edge first (and favor ones with no coords yet)\r\n            (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) ||\r\n            // do normal sorting...\r\n            this.compareEventSegs(seg1, seg2);\r\n    };\r\n    // Given foreground event segments that have already had their position coordinates computed,\r\n    // assigns position-related CSS values to their elements.\r\n    TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            seg.el.css(this.generateFgSegHorizontalCss(seg));\r\n            // if the event is short that the title will be cut off,\r\n            // attach a className that condenses the title into the time area.\r\n            if (seg.footprint.eventDef.title && seg.bottom - seg.top < 30) {\r\n                seg.el.addClass('fc-short'); // TODO: \"condensed\" is a better name\r\n            }\r\n        }\r\n    };\r\n    // Generates an object with CSS properties/values that should be applied to an event segment element.\r\n    // Contains important positioning-related properties that should be applied to any event element, customized or not.\r\n    TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {\r\n        var shouldOverlap = this.opt('slotEventOverlap');\r\n        var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\r\n        var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\r\n        var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first\r\n        var isRTL = this.timeGrid.isRTL;\r\n        var left; // amount of space from left edge, a fraction of the total width\r\n        var right; // amount of space from right edge, a fraction of the total width\r\n        if (shouldOverlap) {\r\n            // double the width, but don't go beyond the maximum forward coordinate (1.0)\r\n            forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\r\n        }\r\n        if (isRTL) {\r\n            left = 1 - forwardCoord;\r\n            right = backwardCoord;\r\n        }\r\n        else {\r\n            left = backwardCoord;\r\n            right = 1 - forwardCoord;\r\n        }\r\n        props.zIndex = seg.level + 1; // convert from 0-base to 1-based\r\n        props.left = left * 100 + '%';\r\n        props.right = right * 100 + '%';\r\n        if (shouldOverlap && seg.forwardPressure) {\r\n            // add padding to the edge so that forward stacked events don't cover the resizer's icon\r\n            props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\r\n        }\r\n        return props;\r\n    };\r\n    return TimeGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = TimeGridEventRenderer;\r\n// Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\r\n// left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\r\nfunction buildSlotSegLevels(segs) {\r\n    var levels = [];\r\n    var i;\r\n    var seg;\r\n    var j;\r\n    for (i = 0; i < segs.length; i++) {\r\n        seg = segs[i];\r\n        // go through all the levels and stop on the first level where there are no collisions\r\n        for (j = 0; j < levels.length; j++) {\r\n            if (!computeSlotSegCollisions(seg, levels[j]).length) {\r\n                break;\r\n            }\r\n        }\r\n        seg.level = j;\r\n        (levels[j] || (levels[j] = [])).push(seg);\r\n    }\r\n    return levels;\r\n}\r\n// For every segment, figure out the other segments that are in subsequent\r\n// levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\r\nfunction computeForwardSlotSegs(levels) {\r\n    var i;\r\n    var level;\r\n    var j;\r\n    var seg;\r\n    var k;\r\n    for (i = 0; i < levels.length; i++) {\r\n        level = levels[i];\r\n        for (j = 0; j < level.length; j++) {\r\n            seg = level[j];\r\n            seg.forwardSegs = [];\r\n            for (k = i + 1; k < levels.length; k++) {\r\n                computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\r\n            }\r\n        }\r\n    }\r\n}\r\n// Figure out which path forward (via seg.forwardSegs) results in the longest path until\r\n// the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\r\nfunction computeSlotSegPressures(seg) {\r\n    var forwardSegs = seg.forwardSegs;\r\n    var forwardPressure = 0;\r\n    var i;\r\n    var forwardSeg;\r\n    if (seg.forwardPressure === undefined) { // not already computed\r\n        for (i = 0; i < forwardSegs.length; i++) {\r\n            forwardSeg = forwardSegs[i];\r\n            // figure out the child's maximum forward path\r\n            computeSlotSegPressures(forwardSeg);\r\n            // either use the existing maximum, or use the child's forward pressure\r\n            // plus one (for the forwardSeg itself)\r\n            forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);\r\n        }\r\n        seg.forwardPressure = forwardPressure;\r\n    }\r\n}\r\n// Find all the segments in `otherSegs` that vertically collide with `seg`.\r\n// Append into an optionally-supplied `results` array and return.\r\nfunction computeSlotSegCollisions(seg, otherSegs, results) {\r\n    if (results === void 0) { results = []; }\r\n    for (var i = 0; i < otherSegs.length; i++) {\r\n        if (isSlotSegCollision(seg, otherSegs[i])) {\r\n            results.push(otherSegs[i]);\r\n        }\r\n    }\r\n    return results;\r\n}\r\n// Do these segments occupy the same vertical space?\r\nfunction isSlotSegCollision(seg1, seg2) {\r\n    return seg1.bottom > seg2.top && seg1.top < seg2.bottom;\r\n}\r\n\n\n/***/ }),\n/* 241 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar TimeGridHelperRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridHelperRenderer, _super);\r\n    function TimeGridHelperRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        var helperNodes = [];\r\n        var i;\r\n        var seg;\r\n        var sourceEl;\r\n        // TODO: not good to call eventRenderer this way\r\n        this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls);\r\n        // Try to make the segment that is in the same row as sourceSeg look the same\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            if (sourceSeg && sourceSeg.col === seg.col) {\r\n                sourceEl = sourceSeg.el;\r\n                seg.el.css({\r\n                    left: sourceEl.css('left'),\r\n                    right: sourceEl.css('right'),\r\n                    'margin-left': sourceEl.css('margin-left'),\r\n                    'margin-right': sourceEl.css('margin-right')\r\n                });\r\n            }\r\n            helperNodes.push(seg.el[0]);\r\n        }\r\n        return $(helperNodes); // must return the elements rendered\r\n    };\r\n    return TimeGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = TimeGridHelperRenderer;\r\n\n\n/***/ }),\n/* 242 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar TimeGridFillRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(TimeGridFillRenderer, _super);\r\n    function TimeGridFillRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        var timeGrid = this.component;\r\n        var containerEls;\r\n        // TODO: more efficient lookup\r\n        if (type === 'bgEvent') {\r\n            containerEls = timeGrid.bgContainerEls;\r\n        }\r\n        else if (type === 'businessHours') {\r\n            containerEls = timeGrid.businessContainerEls;\r\n        }\r\n        else if (type === 'highlight') {\r\n            containerEls = timeGrid.highlightContainerEls;\r\n        }\r\n        timeGrid.updateSegVerticals(segs);\r\n        timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);\r\n        return segs.map(function (seg) {\r\n            return seg.el[0];\r\n        });\r\n    };\r\n    return TimeGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = TimeGridFillRenderer;\r\n\n\n/***/ }),\n/* 243 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\n/* Event-rendering methods for the DayGrid class\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar DayGridEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridEventRenderer, _super);\r\n    function DayGridEventRenderer(dayGrid, fillRenderer) {\r\n        var _this = _super.call(this, dayGrid, fillRenderer) || this;\r\n        _this.dayGrid = dayGrid;\r\n        return _this;\r\n    }\r\n    DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {\r\n        // don't render timed background events\r\n        eventRanges = $.grep(eventRanges, function (eventRange) {\r\n            return eventRange.eventDef.isAllDay();\r\n        });\r\n        _super.prototype.renderBgRanges.call(this, eventRanges);\r\n    };\r\n    // Renders the given foreground event segments onto the grid\r\n    DayGridEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        var rowStructs = this.rowStructs = this.renderSegRows(segs);\r\n        // append to each row's content skeleton\r\n        this.dayGrid.rowEls.each(function (i, rowNode) {\r\n            $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);\r\n        });\r\n    };\r\n    // Unrenders all currently rendered foreground event segments\r\n    DayGridEventRenderer.prototype.unrenderFgSegs = function () {\r\n        var rowStructs = this.rowStructs || [];\r\n        var rowStruct;\r\n        while ((rowStruct = rowStructs.pop())) {\r\n            rowStruct.tbodyEl.remove();\r\n        }\r\n        this.rowStructs = null;\r\n    };\r\n    // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.\r\n    // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\r\n    // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\r\n    DayGridEventRenderer.prototype.renderSegRows = function (segs) {\r\n        var rowStructs = [];\r\n        var segRows;\r\n        var row;\r\n        segRows = this.groupSegRows(segs); // group into nested arrays\r\n        // iterate each row of segment groupings\r\n        for (row = 0; row < segRows.length; row++) {\r\n            rowStructs.push(this.renderSegRow(row, segRows[row]));\r\n        }\r\n        return rowStructs;\r\n    };\r\n    // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains\r\n    // the segments. Returns object with a bunch of internal data about how the render was calculated.\r\n    // NOTE: modifies rowSegs\r\n    DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\r\n        var colCnt = this.dayGrid.colCnt;\r\n        var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\r\n        var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\r\n        var tbody = $('<tbody>');\r\n        var segMatrix = []; // lookup for which segments are rendered into which level+col cells\r\n        var cellMatrix = []; // lookup for all <td> elements of the level+col matrix\r\n        var loneCellMatrix = []; // lookup for <td> elements that only take up a single column\r\n        var i;\r\n        var levelSegs;\r\n        var col;\r\n        var tr;\r\n        var j;\r\n        var seg;\r\n        var td;\r\n        // populates empty cells from the current column (`col`) to `endCol`\r\n        function emptyCellsUntil(endCol) {\r\n            while (col < endCol) {\r\n                // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\r\n                td = (loneCellMatrix[i - 1] || [])[col];\r\n                if (td) {\r\n                    td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);\r\n                }\r\n                else {\r\n                    td = $('<td>');\r\n                    tr.append(td);\r\n                }\r\n                cellMatrix[i][col] = td;\r\n                loneCellMatrix[i][col] = td;\r\n                col++;\r\n            }\r\n        }\r\n        for (i = 0; i < levelCnt; i++) { // iterate through all levels\r\n            levelSegs = segLevels[i];\r\n            col = 0;\r\n            tr = $('<tr>');\r\n            segMatrix.push([]);\r\n            cellMatrix.push([]);\r\n            loneCellMatrix.push([]);\r\n            // levelCnt might be 1 even though there are no actual levels. protect against this.\r\n            // this single empty row is useful for styling.\r\n            if (levelSegs) {\r\n                for (j = 0; j < levelSegs.length; j++) { // iterate through segments in level\r\n                    seg = levelSegs[j];\r\n                    emptyCellsUntil(seg.leftCol);\r\n                    // create a container that occupies or more columns. append the event element.\r\n                    td = $('<td class=\"fc-event-container\">').append(seg.el);\r\n                    if (seg.leftCol !== seg.rightCol) {\r\n                        td.attr('colspan', seg.rightCol - seg.leftCol + 1);\r\n                    }\r\n                    else { // a single-column segment\r\n                        loneCellMatrix[i][col] = td;\r\n                    }\r\n                    while (col <= seg.rightCol) {\r\n                        cellMatrix[i][col] = td;\r\n                        segMatrix[i][col] = seg;\r\n                        col++;\r\n                    }\r\n                    tr.append(td);\r\n                }\r\n            }\r\n            emptyCellsUntil(colCnt); // finish off the row\r\n            this.dayGrid.bookendCells(tr);\r\n            tbody.append(tr);\r\n        }\r\n        return {\r\n            row: row,\r\n            tbodyEl: tbody,\r\n            cellMatrix: cellMatrix,\r\n            segMatrix: segMatrix,\r\n            segLevels: segLevels,\r\n            segs: rowSegs\r\n        };\r\n    };\r\n    // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\r\n    // NOTE: modifies segs\r\n    DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\r\n        var levels = [];\r\n        var i;\r\n        var seg;\r\n        var j;\r\n        // Give preference to elements with certain criteria, so they have\r\n        // a chance to be closer to the top.\r\n        this.sortEventSegs(segs);\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\r\n            for (j = 0; j < levels.length; j++) {\r\n                if (!isDaySegCollision(seg, levels[j])) {\r\n                    break;\r\n                }\r\n            }\r\n            // `j` now holds the desired subrow index\r\n            seg.level = j;\r\n            // create new level array if needed and append segment\r\n            (levels[j] || (levels[j] = [])).push(seg);\r\n        }\r\n        // order segments left-to-right. very important if calendar is RTL\r\n        for (j = 0; j < levels.length; j++) {\r\n            levels[j].sort(compareDaySegCols);\r\n        }\r\n        return levels;\r\n    };\r\n    // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\r\n    DayGridEventRenderer.prototype.groupSegRows = function (segs) {\r\n        var segRows = [];\r\n        var i;\r\n        for (i = 0; i < this.dayGrid.rowCnt; i++) {\r\n            segRows.push([]);\r\n        }\r\n        for (i = 0; i < segs.length; i++) {\r\n            segRows[segs[i].row].push(segs[i]);\r\n        }\r\n        return segRows;\r\n    };\r\n    // Computes a default event time formatting string if `timeFormat` is not explicitly defined\r\n    DayGridEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\r\n    };\r\n    // Computes a default `displayEventEnd` value if one is not expliclty defined\r\n    DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\r\n        return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\r\n    };\r\n    // Builds the HTML to be used for the default element for an individual segment\r\n    DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\r\n        var view = this.view;\r\n        var eventDef = seg.footprint.eventDef;\r\n        var isAllDay = seg.footprint.componentFootprint.isAllDay;\r\n        var isDraggable = view.isEventDefDraggable(eventDef);\r\n        var isResizableFromStart = !disableResizing && isAllDay &&\r\n            seg.isStart && view.isEventDefResizableFromStart(eventDef);\r\n        var isResizableFromEnd = !disableResizing && isAllDay &&\r\n            seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\r\n        var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\r\n        var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\r\n        var timeHtml = '';\r\n        var timeText;\r\n        var titleHtml;\r\n        classes.unshift('fc-day-grid-event', 'fc-h-event');\r\n        // Only display a timed events time if it is the starting segment\r\n        if (seg.isStart) {\r\n            timeText = this.getTimeText(seg.footprint);\r\n            if (timeText) {\r\n                timeHtml = '<span class=\"fc-time\">' + util_1.htmlEscape(timeText) + '</span>';\r\n            }\r\n        }\r\n        titleHtml =\r\n            '<span class=\"fc-title\">' +\r\n                (util_1.htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height\r\n                '</span>';\r\n        return '<a class=\"' + classes.join(' ') + '\"' +\r\n            (eventDef.url ?\r\n                ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' :\r\n                '') +\r\n            (skinCss ?\r\n                ' style=\"' + skinCss + '\"' :\r\n                '') +\r\n            '>' +\r\n            '<div class=\"fc-content\">' +\r\n            (this.dayGrid.isRTL ?\r\n                titleHtml + ' ' + timeHtml : // put a natural space in between\r\n                timeHtml + ' ' + titleHtml //\r\n            ) +\r\n            '</div>' +\r\n            (isResizableFromStart ?\r\n                '<div class=\"fc-resizer fc-start-resizer\"></div>' :\r\n                '') +\r\n            (isResizableFromEnd ?\r\n                '<div class=\"fc-resizer fc-end-resizer\"></div>' :\r\n                '') +\r\n            '</a>';\r\n    };\r\n    return DayGridEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = DayGridEventRenderer;\r\n// Computes whether two segments' columns collide. They are assumed to be in the same row.\r\nfunction isDaySegCollision(seg, otherSegs) {\r\n    var i;\r\n    var otherSeg;\r\n    for (i = 0; i < otherSegs.length; i++) {\r\n        otherSeg = otherSegs[i];\r\n        if (otherSeg.leftCol <= seg.rightCol &&\r\n            otherSeg.rightCol >= seg.leftCol) {\r\n            return true;\r\n        }\r\n    }\r\n    return false;\r\n}\r\n// A cmp function for determining the leftmost event\r\nfunction compareDaySegCols(a, b) {\r\n    return a.leftCol - b.leftCol;\r\n}\r\n\n\n/***/ }),\n/* 244 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar HelperRenderer_1 = __webpack_require__(63);\r\nvar DayGridHelperRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridHelperRenderer, _super);\r\n    function DayGridHelperRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\r\n    DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\r\n        var helperNodes = [];\r\n        var rowStructs;\r\n        // TODO: not good to call eventRenderer this way\r\n        rowStructs = this.eventRenderer.renderSegRows(segs);\r\n        // inject each new event skeleton into each associated row\r\n        this.component.rowEls.each(function (row, rowNode) {\r\n            var rowEl = $(rowNode); // the .fc-row\r\n            var skeletonEl = $('<div class=\"fc-helper-skeleton\"><table></table></div>'); // will be absolutely positioned\r\n            var skeletonTopEl;\r\n            var skeletonTop;\r\n            // If there is an original segment, match the top position. Otherwise, put it at the row's top level\r\n            if (sourceSeg && sourceSeg.row === row) {\r\n                skeletonTop = sourceSeg.el.position().top;\r\n            }\r\n            else {\r\n                skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');\r\n                if (!skeletonTopEl.length) { // when no events\r\n                    skeletonTopEl = rowEl.find('.fc-content-skeleton table');\r\n                }\r\n                skeletonTop = skeletonTopEl.position().top;\r\n            }\r\n            skeletonEl.css('top', skeletonTop)\r\n                .find('table')\r\n                .append(rowStructs[row].tbodyEl);\r\n            rowEl.append(skeletonEl);\r\n            helperNodes.push(skeletonEl[0]);\r\n        });\r\n        return $(helperNodes); // must return the elements rendered\r\n    };\r\n    return DayGridHelperRenderer;\r\n}(HelperRenderer_1.default));\r\nexports.default = DayGridHelperRenderer;\r\n\n\n/***/ }),\n/* 245 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar FillRenderer_1 = __webpack_require__(62);\r\nvar DayGridFillRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(DayGridFillRenderer, _super);\r\n    function DayGridFillRenderer() {\r\n        var _this = _super !== null && _super.apply(this, arguments) || this;\r\n        _this.fillSegTag = 'td'; // override the default tag name\r\n        return _this;\r\n    }\r\n    DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {\r\n        var nodes = [];\r\n        var i;\r\n        var seg;\r\n        var skeletonEl;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            skeletonEl = this.renderFillRow(type, seg);\r\n            this.component.rowEls.eq(seg.row).append(skeletonEl);\r\n            nodes.push(skeletonEl[0]);\r\n        }\r\n        return nodes;\r\n    };\r\n    // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\r\n    DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\r\n        var colCnt = this.component.colCnt;\r\n        var startCol = seg.leftCol;\r\n        var endCol = seg.rightCol + 1;\r\n        var className;\r\n        var skeletonEl;\r\n        var trEl;\r\n        if (type === 'businessHours') {\r\n            className = 'bgevent';\r\n        }\r\n        else {\r\n            className = type.toLowerCase();\r\n        }\r\n        skeletonEl = $('<div class=\"fc-' + className + '-skeleton\">' +\r\n            '<table><tr></tr></table>' +\r\n            '</div>');\r\n        trEl = skeletonEl.find('tr');\r\n        if (startCol > 0) {\r\n            trEl.append(\r\n            // will create (startCol + 1) td's\r\n            new Array(startCol + 1).join('<td></td>'));\r\n        }\r\n        trEl.append(seg.el.attr('colspan', endCol - startCol));\r\n        if (endCol < colCnt) {\r\n            trEl.append(\r\n            // will create (colCnt - endCol) td's\r\n            new Array(colCnt - endCol + 1).join('<td></td>'));\r\n        }\r\n        this.component.bookendCells(trEl);\r\n        return skeletonEl;\r\n    };\r\n    return DayGridFillRenderer;\r\n}(FillRenderer_1.default));\r\nexports.default = DayGridFillRenderer;\r\n\n\n/***/ }),\n/* 246 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar moment = __webpack_require__(0);\r\nvar util_1 = __webpack_require__(4);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthViewDateProfileGenerator_1 = __webpack_require__(247);\r\n/* A month view with day cells running in rows (one-per-week) and columns\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar MonthView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MonthView, _super);\r\n    function MonthView() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Overrides the default BasicView behavior to have special multi-week auto-height logic\r\n    MonthView.prototype.setGridHeight = function (height, isAuto) {\r\n        // if auto, make the height of each row the height that it would be if there were 6 weeks\r\n        if (isAuto) {\r\n            height *= this.dayGrid.rowCnt / 6;\r\n        }\r\n        util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\r\n    };\r\n    MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {\r\n        return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize\r\n    };\r\n    return MonthView;\r\n}(BasicView_1.default));\r\nexports.default = MonthView;\r\nMonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1.default;\r\n\n\n/***/ }),\n/* 247 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar BasicViewDateProfileGenerator_1 = __webpack_require__(68);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar MonthViewDateProfileGenerator = /** @class */ (function (_super) {\r\n    tslib_1.__extends(MonthViewDateProfileGenerator, _super);\r\n    function MonthViewDateProfileGenerator() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // Computes the date range that will be rendered.\r\n    MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\r\n        var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);\r\n        var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\r\n        var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\r\n        var rowCnt;\r\n        // ensure 6 weeks\r\n        if (this.opt('fixedWeekCount')) {\r\n            rowCnt = Math.ceil(// could be partial weeks due to hiddenDays\r\n            end.diff(start, 'weeks', true) // dontRound=true\r\n            );\r\n            end.add(6 - rowCnt, 'weeks');\r\n        }\r\n        return new UnzonedRange_1.default(start, end);\r\n    };\r\n    return MonthViewDateProfileGenerator;\r\n}(BasicViewDateProfileGenerator_1.default));\r\nexports.default = MonthViewDateProfileGenerator;\r\n\n\n/***/ }),\n/* 248 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar UnzonedRange_1 = __webpack_require__(5);\r\nvar View_1 = __webpack_require__(43);\r\nvar Scroller_1 = __webpack_require__(41);\r\nvar ListEventRenderer_1 = __webpack_require__(249);\r\nvar ListEventPointing_1 = __webpack_require__(250);\r\n/*\r\nResponsible for the scroller, and forwarding event-related actions into the \"grid\".\r\n*/\r\nvar ListView = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListView, _super);\r\n    function ListView(calendar, viewSpec) {\r\n        var _this = _super.call(this, calendar, viewSpec) || this;\r\n        _this.segSelector = '.fc-list-item'; // which elements accept event actions\r\n        _this.scroller = new Scroller_1.default({\r\n            overflowX: 'hidden',\r\n            overflowY: 'auto'\r\n        });\r\n        return _this;\r\n    }\r\n    ListView.prototype.renderSkeleton = function () {\r\n        this.el.addClass('fc-list-view ' +\r\n            this.calendar.theme.getClass('listView'));\r\n        this.scroller.render();\r\n        this.scroller.el.appendTo(this.el);\r\n        this.contentEl = this.scroller.scrollEl; // shortcut\r\n    };\r\n    ListView.prototype.unrenderSkeleton = function () {\r\n        this.scroller.destroy(); // will remove the Grid too\r\n    };\r\n    ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\r\n        _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\r\n        this.scroller.clear(); // sets height to 'auto' and clears overflow\r\n        if (!isAuto) {\r\n            this.scroller.setHeight(this.computeScrollerHeight(totalHeight));\r\n        }\r\n    };\r\n    ListView.prototype.computeScrollerHeight = function (totalHeight) {\r\n        return totalHeight -\r\n            util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\r\n    };\r\n    ListView.prototype.renderDates = function (dateProfile) {\r\n        var calendar = this.calendar;\r\n        var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);\r\n        var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);\r\n        var dayDates = [];\r\n        var dayRanges = [];\r\n        while (dayStart < viewEnd) {\r\n            dayDates.push(dayStart.clone());\r\n            dayRanges.push(new UnzonedRange_1.default(dayStart, dayStart.clone().add(1, 'day')));\r\n            dayStart.add(1, 'day');\r\n        }\r\n        this.dayDates = dayDates;\r\n        this.dayRanges = dayRanges;\r\n        // all real rendering happens in EventRenderer\r\n    };\r\n    // slices by day\r\n    ListView.prototype.componentFootprintToSegs = function (footprint) {\r\n        var dayRanges = this.dayRanges;\r\n        var dayIndex;\r\n        var segRange;\r\n        var seg;\r\n        var segs = [];\r\n        for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\r\n            segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);\r\n            if (segRange) {\r\n                seg = {\r\n                    startMs: segRange.startMs,\r\n                    endMs: segRange.endMs,\r\n                    isStart: segRange.isStart,\r\n                    isEnd: segRange.isEnd,\r\n                    dayIndex: dayIndex\r\n                };\r\n                segs.push(seg);\r\n                // detect when footprint won't go fully into the next day,\r\n                // and mutate the latest seg to the be the end.\r\n                if (!seg.isEnd && !footprint.isAllDay &&\r\n                    dayIndex + 1 < dayRanges.length &&\r\n                    footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {\r\n                    seg.endMs = footprint.unzonedRange.endMs;\r\n                    seg.isEnd = true;\r\n                    break;\r\n                }\r\n            }\r\n        }\r\n        return segs;\r\n    };\r\n    ListView.prototype.renderEmptyMessage = function () {\r\n        this.contentEl.html('<div class=\"fc-list-empty-wrap2\">' + // TODO: try less wraps\r\n            '<div class=\"fc-list-empty-wrap1\">' +\r\n            '<div class=\"fc-list-empty\">' +\r\n            util_1.htmlEscape(this.opt('noEventsMessage')) +\r\n            '</div>' +\r\n            '</div>' +\r\n            '</div>');\r\n    };\r\n    // render the event segments in the view\r\n    ListView.prototype.renderSegList = function (allSegs) {\r\n        var segsByDay = this.groupSegsByDay(allSegs); // sparse array\r\n        var dayIndex;\r\n        var daySegs;\r\n        var i;\r\n        var tableEl = $('<table class=\"fc-list-table ' + this.calendar.theme.getClass('tableList') + '\"><tbody></tbody></table>');\r\n        var tbodyEl = tableEl.find('tbody');\r\n        for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\r\n            daySegs = segsByDay[dayIndex];\r\n            if (daySegs) { // sparse array, so might be undefined\r\n                // append a day header\r\n                tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));\r\n                this.eventRenderer.sortEventSegs(daySegs);\r\n                for (i = 0; i < daySegs.length; i++) {\r\n                    tbodyEl.append(daySegs[i].el); // append event row\r\n                }\r\n            }\r\n        }\r\n        this.contentEl.empty().append(tableEl);\r\n    };\r\n    // Returns a sparse array of arrays, segs grouped by their dayIndex\r\n    ListView.prototype.groupSegsByDay = function (segs) {\r\n        var segsByDay = []; // sparse array\r\n        var i;\r\n        var seg;\r\n        for (i = 0; i < segs.length; i++) {\r\n            seg = segs[i];\r\n            (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = []))\r\n                .push(seg);\r\n        }\r\n        return segsByDay;\r\n    };\r\n    // generates the HTML for the day headers that live amongst the event rows\r\n    ListView.prototype.dayHeaderHtml = function (dayDate) {\r\n        var mainFormat = this.opt('listDayFormat');\r\n        var altFormat = this.opt('listDayAltFormat');\r\n        return '<tr class=\"fc-list-heading\" data-date=\"' + dayDate.format('YYYY-MM-DD') + '\">' +\r\n            '<td class=\"' + (this.calendar.theme.getClass('tableListHeading') ||\r\n            this.calendar.theme.getClass('widgetHeader')) + '\" colspan=\"3\">' +\r\n            (mainFormat ?\r\n                this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-main' }, util_1.htmlEscape(dayDate.format(mainFormat)) // inner HTML\r\n                ) :\r\n                '') +\r\n            (altFormat ?\r\n                this.buildGotoAnchorHtml(dayDate, { 'class': 'fc-list-heading-alt' }, util_1.htmlEscape(dayDate.format(altFormat)) // inner HTML\r\n                ) :\r\n                '') +\r\n            '</td>' +\r\n            '</tr>';\r\n    };\r\n    return ListView;\r\n}(View_1.default));\r\nexports.default = ListView;\r\nListView.prototype.eventRendererClass = ListEventRenderer_1.default;\r\nListView.prototype.eventPointingClass = ListEventPointing_1.default;\r\n\n\n/***/ }),\n/* 249 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar util_1 = __webpack_require__(4);\r\nvar EventRenderer_1 = __webpack_require__(44);\r\nvar ListEventRenderer = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListEventRenderer, _super);\r\n    function ListEventRenderer() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    ListEventRenderer.prototype.renderFgSegs = function (segs) {\r\n        if (!segs.length) {\r\n            this.component.renderEmptyMessage();\r\n        }\r\n        else {\r\n            this.component.renderSegList(segs);\r\n        }\r\n    };\r\n    // generates the HTML for a single event row\r\n    ListEventRenderer.prototype.fgSegHtml = function (seg) {\r\n        var view = this.view;\r\n        var calendar = view.calendar;\r\n        var theme = calendar.theme;\r\n        var eventFootprint = seg.footprint;\r\n        var eventDef = eventFootprint.eventDef;\r\n        var componentFootprint = eventFootprint.componentFootprint;\r\n        var url = eventDef.url;\r\n        var classes = ['fc-list-item'].concat(this.getClasses(eventDef));\r\n        var bgColor = this.getBgColor(eventDef);\r\n        var timeHtml;\r\n        if (componentFootprint.isAllDay) {\r\n            timeHtml = view.getAllDayHtml();\r\n        }\r\n        else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\r\n            if (seg.isStart || seg.isEnd) { // outer segment that probably lasts part of the day\r\n                timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));\r\n            }\r\n            else { // inner segment that lasts the whole day\r\n                timeHtml = view.getAllDayHtml();\r\n            }\r\n        }\r\n        else {\r\n            // Display the normal time text for the *event's* times\r\n            timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));\r\n        }\r\n        if (url) {\r\n            classes.push('fc-has-url');\r\n        }\r\n        return '<tr class=\"' + classes.join(' ') + '\">' +\r\n            (this.displayEventTime ?\r\n                '<td class=\"fc-list-item-time ' + theme.getClass('widgetContent') + '\">' +\r\n                    (timeHtml || '') +\r\n                    '</td>' :\r\n                '') +\r\n            '<td class=\"fc-list-item-marker ' + theme.getClass('widgetContent') + '\">' +\r\n            '<span class=\"fc-event-dot\"' +\r\n            (bgColor ?\r\n                ' style=\"background-color:' + bgColor + '\"' :\r\n                '') +\r\n            '></span>' +\r\n            '</td>' +\r\n            '<td class=\"fc-list-item-title ' + theme.getClass('widgetContent') + '\">' +\r\n            '<a' + (url ? ' href=\"' + util_1.htmlEscape(url) + '\"' : '') + '>' +\r\n            util_1.htmlEscape(eventDef.title || '') +\r\n            '</a>' +\r\n            '</td>' +\r\n            '</tr>';\r\n    };\r\n    // like \"4:00am\"\r\n    ListEventRenderer.prototype.computeEventTimeFormat = function () {\r\n        return this.opt('mediumTimeFormat');\r\n    };\r\n    return ListEventRenderer;\r\n}(EventRenderer_1.default));\r\nexports.default = ListEventRenderer;\r\n\n\n/***/ }),\n/* 250 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar EventPointing_1 = __webpack_require__(64);\r\nvar ListEventPointing = /** @class */ (function (_super) {\r\n    tslib_1.__extends(ListEventPointing, _super);\r\n    function ListEventPointing() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    // for events with a url, the whole <tr> should be clickable,\r\n    // but it's impossible to wrap with an <a> tag. simulate this.\r\n    ListEventPointing.prototype.handleClick = function (seg, ev) {\r\n        var url;\r\n        _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action\r\n        // not clicking on or within an <a> with an href\r\n        if (!$(ev.target).closest('a[href]').length) {\r\n            url = seg.footprint.eventDef.url;\r\n            if (url && !ev.isDefaultPrevented()) { // jsEvent not cancelled in handler\r\n                window.location.href = url; // simulate link click\r\n            }\r\n        }\r\n    };\r\n    return ListEventPointing;\r\n}(EventPointing_1.default));\r\nexports.default = ListEventPointing;\r\n\n\n/***/ }),\n/* 251 */,\n/* 252 */,\n/* 253 */,\n/* 254 */,\n/* 255 */,\n/* 256 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(3);\r\nvar exportHooks = __webpack_require__(18);\r\nvar util_1 = __webpack_require__(4);\r\nvar Calendar_1 = __webpack_require__(232);\r\n// for intentional side-effects\r\n__webpack_require__(11);\r\n__webpack_require__(49);\r\n__webpack_require__(260);\r\n__webpack_require__(261);\r\n__webpack_require__(264);\r\n__webpack_require__(265);\r\n__webpack_require__(266);\r\n__webpack_require__(267);\r\n$.fullCalendar = exportHooks;\r\n$.fn.fullCalendar = function (options) {\r\n    var args = Array.prototype.slice.call(arguments, 1); // for a possible method call\r\n    var res = this; // what this function will return (this jQuery object by default)\r\n    this.each(function (i, _element) {\r\n        var element = $(_element);\r\n        var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\r\n        var singleRes; // the returned value of this single method call\r\n        // a method call\r\n        if (typeof options === 'string') {\r\n            if (options === 'getCalendar') {\r\n                if (!i) { // first element only\r\n                    res = calendar;\r\n                }\r\n            }\r\n            else if (options === 'destroy') { // don't warn if no calendar object\r\n                if (calendar) {\r\n                    calendar.destroy();\r\n                    element.removeData('fullCalendar');\r\n                }\r\n            }\r\n            else if (!calendar) {\r\n                util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');\r\n            }\r\n            else if ($.isFunction(calendar[options])) {\r\n                singleRes = calendar[options].apply(calendar, args);\r\n                if (!i) {\r\n                    res = singleRes; // record the first method call result\r\n                }\r\n                if (options === 'destroy') { // for the destroy method, must remove Calendar object data\r\n                    element.removeData('fullCalendar');\r\n                }\r\n            }\r\n            else {\r\n                util_1.warn(\"'\" + options + \"' is an unknown FullCalendar method.\");\r\n            }\r\n        }\r\n        else if (!calendar) { // don't initialize twice\r\n            calendar = new Calendar_1.default(element, options);\r\n            element.data('fullCalendar', calendar);\r\n            calendar.render();\r\n        }\r\n    });\r\n    return res;\r\n};\r\nmodule.exports = exportHooks;\r\n\n\n/***/ }),\n/* 257 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\n/* Toolbar with buttons and title\r\n----------------------------------------------------------------------------------------------------------------------*/\r\nvar Toolbar = /** @class */ (function () {\r\n    function Toolbar(calendar, toolbarOptions) {\r\n        this.el = null; // mirrors local `el`\r\n        this.viewsWithButtons = [];\r\n        this.calendar = calendar;\r\n        this.toolbarOptions = toolbarOptions;\r\n    }\r\n    // method to update toolbar-specific options, not calendar-wide options\r\n    Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {\r\n        this.toolbarOptions = newToolbarOptions;\r\n    };\r\n    // can be called repeatedly and will rerender\r\n    Toolbar.prototype.render = function () {\r\n        var sections = this.toolbarOptions.layout;\r\n        var el = this.el;\r\n        if (sections) {\r\n            if (!el) {\r\n                el = this.el = $(\"<div class='fc-toolbar \" + this.toolbarOptions.extraClasses + \"'>\");\r\n            }\r\n            else {\r\n                el.empty();\r\n            }\r\n            el.append(this.renderSection('left'))\r\n                .append(this.renderSection('right'))\r\n                .append(this.renderSection('center'))\r\n                .append('<div class=\"fc-clear\"></div>');\r\n        }\r\n        else {\r\n            this.removeElement();\r\n        }\r\n    };\r\n    Toolbar.prototype.removeElement = function () {\r\n        if (this.el) {\r\n            this.el.remove();\r\n            this.el = null;\r\n        }\r\n    };\r\n    Toolbar.prototype.renderSection = function (position) {\r\n        var _this = this;\r\n        var calendar = this.calendar;\r\n        var theme = calendar.theme;\r\n        var optionsManager = calendar.optionsManager;\r\n        var viewSpecManager = calendar.viewSpecManager;\r\n        var sectionEl = $('<div class=\"fc-' + position + '\">');\r\n        var buttonStr = this.toolbarOptions.layout[position];\r\n        var calendarCustomButtons = optionsManager.get('customButtons') || {};\r\n        var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\r\n        var calendarButtonText = optionsManager.get('buttonText') || {};\r\n        if (buttonStr) {\r\n            $.each(buttonStr.split(' '), function (i, buttonGroupStr) {\r\n                var groupChildren = $();\r\n                var isOnlyButtons = true;\r\n                var groupEl;\r\n                $.each(buttonGroupStr.split(','), function (j, buttonName) {\r\n                    var customButtonProps;\r\n                    var viewSpec;\r\n                    var buttonClick;\r\n                    var buttonIcon; // only one of these will be set\r\n                    var buttonText; // \"\r\n                    var buttonInnerHtml;\r\n                    var buttonClasses;\r\n                    var buttonEl;\r\n                    var buttonAriaAttr;\r\n                    if (buttonName === 'title') {\r\n                        groupChildren = groupChildren.add($('<h2>&nbsp;</h2>')); // we always want it to take up height\r\n                        isOnlyButtons = false;\r\n                    }\r\n                    else {\r\n                        if ((customButtonProps = calendarCustomButtons[buttonName])) {\r\n                            buttonClick = function (ev) {\r\n                                if (customButtonProps.click) {\r\n                                    customButtonProps.click.call(buttonEl[0], ev);\r\n                                }\r\n                            };\r\n                            (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = customButtonProps.text);\r\n                        }\r\n                        else if ((viewSpec = viewSpecManager.getViewSpec(buttonName))) {\r\n                            _this.viewsWithButtons.push(buttonName);\r\n                            buttonClick = function () {\r\n                                calendar.changeView(buttonName);\r\n                            };\r\n                            (buttonText = viewSpec.buttonTextOverride) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = viewSpec.buttonTextDefault);\r\n                        }\r\n                        else if (calendar[buttonName]) { // a calendar method\r\n                            buttonClick = function () {\r\n                                calendar[buttonName]();\r\n                            };\r\n                            (buttonText = calendarButtonTextOverrides[buttonName]) ||\r\n                                (buttonIcon = theme.getIconClass(buttonName)) ||\r\n                                (buttonText = calendarButtonText[buttonName]);\r\n                            //            ^ everything else is considered default\r\n                        }\r\n                        if (buttonClick) {\r\n                            buttonClasses = [\r\n                                'fc-' + buttonName + '-button',\r\n                                theme.getClass('button'),\r\n                                theme.getClass('stateDefault')\r\n                            ];\r\n                            if (buttonText) {\r\n                                buttonInnerHtml = util_1.htmlEscape(buttonText);\r\n                                buttonAriaAttr = '';\r\n                            }\r\n                            else if (buttonIcon) {\r\n                                buttonInnerHtml = \"<span class='\" + buttonIcon + \"'></span>\";\r\n                                buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\r\n                            }\r\n                            buttonEl = $(// type=\"button\" so that it doesn't submit a form\r\n                            '<button type=\"button\" class=\"' + buttonClasses.join(' ') + '\"' +\r\n                                buttonAriaAttr +\r\n                                '>' + buttonInnerHtml + '</button>')\r\n                                .click(function (ev) {\r\n                                // don't process clicks for disabled buttons\r\n                                if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n                                    buttonClick(ev);\r\n                                    // after the click action, if the button becomes the \"active\" tab, or disabled,\r\n                                    // it should never have a hover class, so remove it now.\r\n                                    if (buttonEl.hasClass(theme.getClass('stateActive')) ||\r\n                                        buttonEl.hasClass(theme.getClass('stateDisabled'))) {\r\n                                        buttonEl.removeClass(theme.getClass('stateHover'));\r\n                                    }\r\n                                }\r\n                            })\r\n                                .mousedown(function () {\r\n                                // the *down* effect (mouse pressed in).\r\n                                // only on buttons that are not the \"active\" tab, or disabled\r\n                                buttonEl\r\n                                    .not('.' + theme.getClass('stateActive'))\r\n                                    .not('.' + theme.getClass('stateDisabled'))\r\n                                    .addClass(theme.getClass('stateDown'));\r\n                            })\r\n                                .mouseup(function () {\r\n                                // undo the *down* effect\r\n                                buttonEl.removeClass(theme.getClass('stateDown'));\r\n                            })\r\n                                .hover(function () {\r\n                                // the *hover* effect.\r\n                                // only on buttons that are not the \"active\" tab, or disabled\r\n                                buttonEl\r\n                                    .not('.' + theme.getClass('stateActive'))\r\n                                    .not('.' + theme.getClass('stateDisabled'))\r\n                                    .addClass(theme.getClass('stateHover'));\r\n                            }, function () {\r\n                                // undo the *hover* effect\r\n                                buttonEl\r\n                                    .removeClass(theme.getClass('stateHover'))\r\n                                    .removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup\r\n                            });\r\n                            groupChildren = groupChildren.add(buttonEl);\r\n                        }\r\n                    }\r\n                });\r\n                if (isOnlyButtons) {\r\n                    groupChildren\r\n                        .first().addClass(theme.getClass('cornerLeft')).end()\r\n                        .last().addClass(theme.getClass('cornerRight')).end();\r\n                }\r\n                if (groupChildren.length > 1) {\r\n                    groupEl = $('<div>');\r\n                    if (isOnlyButtons) {\r\n                        groupEl.addClass(theme.getClass('buttonGroup'));\r\n                    }\r\n                    groupEl.append(groupChildren);\r\n                    sectionEl.append(groupEl);\r\n                }\r\n                else {\r\n                    sectionEl.append(groupChildren); // 1 or 0 children\r\n                }\r\n            });\r\n        }\r\n        return sectionEl;\r\n    };\r\n    Toolbar.prototype.updateTitle = function (text) {\r\n        if (this.el) {\r\n            this.el.find('h2').text(text);\r\n        }\r\n    };\r\n    Toolbar.prototype.activateButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .addClass(this.calendar.theme.getClass('stateActive'));\r\n        }\r\n    };\r\n    Toolbar.prototype.deactivateButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .removeClass(this.calendar.theme.getClass('stateActive'));\r\n        }\r\n    };\r\n    Toolbar.prototype.disableButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .prop('disabled', true)\r\n                .addClass(this.calendar.theme.getClass('stateDisabled'));\r\n        }\r\n    };\r\n    Toolbar.prototype.enableButton = function (buttonName) {\r\n        if (this.el) {\r\n            this.el.find('.fc-' + buttonName + '-button')\r\n                .prop('disabled', false)\r\n                .removeClass(this.calendar.theme.getClass('stateDisabled'));\r\n        }\r\n    };\r\n    Toolbar.prototype.getViewsWithButtons = function () {\r\n        return this.viewsWithButtons;\r\n    };\r\n    return Toolbar;\r\n}());\r\nexports.default = Toolbar;\r\n\n\n/***/ }),\n/* 258 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar $ = __webpack_require__(3);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar Model_1 = __webpack_require__(51);\r\nvar OptionsManager = /** @class */ (function (_super) {\r\n    tslib_1.__extends(OptionsManager, _super);\r\n    function OptionsManager(_calendar, overrides) {\r\n        var _this = _super.call(this) || this;\r\n        _this._calendar = _calendar;\r\n        _this.overrides = $.extend({}, overrides); // make a copy\r\n        _this.dynamicOverrides = {};\r\n        _this.compute();\r\n        return _this;\r\n    }\r\n    OptionsManager.prototype.add = function (newOptionHash) {\r\n        var optionCnt = 0;\r\n        var optionName;\r\n        this.recordOverrides(newOptionHash); // will trigger this model's watchers\r\n        for (optionName in newOptionHash) {\r\n            optionCnt++;\r\n        }\r\n        // special-case handling of single option change.\r\n        // if only one option change, `optionName` will be its name.\r\n        if (optionCnt === 1) {\r\n            if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\r\n                this._calendar.updateViewSize(true); // isResize=true\r\n                return;\r\n            }\r\n            else if (optionName === 'defaultDate') {\r\n                return; // can't change date this way. use gotoDate instead\r\n            }\r\n            else if (optionName === 'businessHours') {\r\n                return; // this model already reacts to this\r\n            }\r\n            else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {\r\n                return; // doesn't affect rendering. only interactions.\r\n            }\r\n            else if (optionName === 'timezone') {\r\n                this._calendar.view.flash('initialEvents');\r\n                return;\r\n            }\r\n        }\r\n        // catch-all. rerender the header and footer and rebuild/rerender the current view\r\n        this._calendar.renderHeader();\r\n        this._calendar.renderFooter();\r\n        // even non-current views will be affected by this option change. do before rerender\r\n        // TODO: detangle\r\n        this._calendar.viewsByType = {};\r\n        this._calendar.reinitView();\r\n    };\r\n    // Computes the flattened options hash for the calendar and assigns to `this.options`.\r\n    // Assumes this.overrides and this.dynamicOverrides have already been initialized.\r\n    OptionsManager.prototype.compute = function () {\r\n        var locale;\r\n        var localeDefaults;\r\n        var isRTL;\r\n        var dirDefaults;\r\n        var rawOptions;\r\n        locale = util_1.firstDefined(// explicit locale option given?\r\n        this.dynamicOverrides.locale, this.overrides.locale);\r\n        localeDefaults = locale_1.localeOptionHash[locale];\r\n        if (!localeDefaults) { // explicit locale option not given or invalid?\r\n            locale = options_1.globalDefaults.locale;\r\n            localeDefaults = locale_1.localeOptionHash[locale] || {};\r\n        }\r\n        isRTL = util_1.firstDefined(// based on options computed so far, is direction RTL?\r\n        this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);\r\n        dirDefaults = isRTL ? options_1.rtlDefaults : {};\r\n        this.dirDefaults = dirDefaults;\r\n        this.localeDefaults = localeDefaults;\r\n        rawOptions = options_1.mergeOptions([\r\n            options_1.globalDefaults,\r\n            dirDefaults,\r\n            localeDefaults,\r\n            this.overrides,\r\n            this.dynamicOverrides\r\n        ]);\r\n        locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\r\n        this.reset(rawOptions);\r\n    };\r\n    // stores the new options internally, but does not rerender anything.\r\n    OptionsManager.prototype.recordOverrides = function (newOptionHash) {\r\n        var optionName;\r\n        for (optionName in newOptionHash) {\r\n            this.dynamicOverrides[optionName] = newOptionHash[optionName];\r\n        }\r\n        this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it\r\n        this.compute(); // this.options needs to be recomputed after the dynamic override\r\n    };\r\n    return OptionsManager;\r\n}(Model_1.default));\r\nexports.default = OptionsManager;\r\n\n\n/***/ }),\n/* 259 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar moment = __webpack_require__(0);\r\nvar $ = __webpack_require__(3);\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar util_1 = __webpack_require__(4);\r\nvar options_1 = __webpack_require__(33);\r\nvar locale_1 = __webpack_require__(32);\r\nvar ViewSpecManager = /** @class */ (function () {\r\n    function ViewSpecManager(optionsManager, _calendar) {\r\n        this.optionsManager = optionsManager;\r\n        this._calendar = _calendar;\r\n        this.clearCache();\r\n    }\r\n    ViewSpecManager.prototype.clearCache = function () {\r\n        this.viewSpecCache = {};\r\n    };\r\n    // Gets information about how to create a view. Will use a cache.\r\n    ViewSpecManager.prototype.getViewSpec = function (viewType) {\r\n        var cache = this.viewSpecCache;\r\n        return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\r\n    };\r\n    // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\r\n    // Preference is given to views that have corresponding buttons.\r\n    ViewSpecManager.prototype.getUnitViewSpec = function (unit) {\r\n        var viewTypes;\r\n        var i;\r\n        var spec;\r\n        if ($.inArray(unit, util_1.unitsDesc) !== -1) {\r\n            // put views that have buttons first. there will be duplicates, but oh well\r\n            viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?\r\n            $.each(ViewRegistry_1.viewHash, function (viewType) {\r\n                viewTypes.push(viewType);\r\n            });\r\n            for (i = 0; i < viewTypes.length; i++) {\r\n                spec = this.getViewSpec(viewTypes[i]);\r\n                if (spec) {\r\n                    if (spec.singleUnit === unit) {\r\n                        return spec;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n    };\r\n    // Builds an object with information on how to create a given view\r\n    ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {\r\n        var viewOverrides = this.optionsManager.overrides.views || {};\r\n        var specChain = []; // for the view. lowest to highest priority\r\n        var defaultsChain = []; // for the view. lowest to highest priority\r\n        var overridesChain = []; // for the view. lowest to highest priority\r\n        var viewType = requestedViewType;\r\n        var spec; // for the view\r\n        var overrides; // for the view\r\n        var durationInput;\r\n        var duration;\r\n        var unit;\r\n        // iterate from the specific view definition to a more general one until we hit an actual View class\r\n        while (viewType) {\r\n            spec = ViewRegistry_1.viewHash[viewType];\r\n            overrides = viewOverrides[viewType];\r\n            viewType = null; // clear. might repopulate for another iteration\r\n            if (typeof spec === 'function') { // TODO: deprecate\r\n                spec = { 'class': spec };\r\n            }\r\n            if (spec) {\r\n                specChain.unshift(spec);\r\n                defaultsChain.unshift(spec.defaults || {});\r\n                durationInput = durationInput || spec.duration;\r\n                viewType = viewType || spec.type;\r\n            }\r\n            if (overrides) {\r\n                overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\r\n                durationInput = durationInput || overrides.duration;\r\n                viewType = viewType || overrides.type;\r\n            }\r\n        }\r\n        spec = util_1.mergeProps(specChain);\r\n        spec.type = requestedViewType;\r\n        if (!spec['class']) {\r\n            return false;\r\n        }\r\n        // fall back to top-level `duration` option\r\n        durationInput = durationInput ||\r\n            this.optionsManager.dynamicOverrides.duration ||\r\n            this.optionsManager.overrides.duration;\r\n        if (durationInput) {\r\n            duration = moment.duration(durationInput);\r\n            if (duration.valueOf()) { // valid?\r\n                unit = util_1.computeDurationGreatestUnit(duration, durationInput);\r\n                spec.duration = duration;\r\n                spec.durationUnit = unit;\r\n                // view is a single-unit duration, like \"week\" or \"day\"\r\n                // incorporate options for this. lowest priority\r\n                if (duration.as(unit) === 1) {\r\n                    spec.singleUnit = unit;\r\n                    overridesChain.unshift(viewOverrides[unit] || {});\r\n                }\r\n            }\r\n        }\r\n        spec.defaults = options_1.mergeOptions(defaultsChain);\r\n        spec.overrides = options_1.mergeOptions(overridesChain);\r\n        this.buildViewSpecOptions(spec);\r\n        this.buildViewSpecButtonText(spec, requestedViewType);\r\n        return spec;\r\n    };\r\n    // Builds and assigns a view spec's options object from its already-assigned defaults and overrides\r\n    ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {\r\n        var optionsManager = this.optionsManager;\r\n        spec.options = options_1.mergeOptions([\r\n            options_1.globalDefaults,\r\n            spec.defaults,\r\n            optionsManager.dirDefaults,\r\n            optionsManager.localeDefaults,\r\n            optionsManager.overrides,\r\n            spec.overrides,\r\n            optionsManager.dynamicOverrides // dynamically set via setter. highest precedence\r\n        ]);\r\n        locale_1.populateInstanceComputableOptions(spec.options);\r\n    };\r\n    // Computes and assigns a view spec's buttonText-related options\r\n    ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {\r\n        var optionsManager = this.optionsManager;\r\n        // given an options object with a possible `buttonText` hash, lookup the buttonText for the\r\n        // requested view, falling back to a generic unit entry like \"week\" or \"day\"\r\n        function queryButtonText(options) {\r\n            var buttonText = options.buttonText || {};\r\n            return buttonText[requestedViewType] ||\r\n                // view can decide to look up a certain key\r\n                (spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) ||\r\n                // a key like \"month\"\r\n                (spec.singleUnit ? buttonText[spec.singleUnit] : null);\r\n        }\r\n        // highest to lowest priority\r\n        spec.buttonTextOverride =\r\n            queryButtonText(optionsManager.dynamicOverrides) ||\r\n                queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\r\n                spec.overrides.buttonText; // `buttonText` for view-specific options is a string\r\n        // highest to lowest priority. mirrors buildViewSpecOptions\r\n        spec.buttonTextDefault =\r\n            queryButtonText(optionsManager.localeDefaults) ||\r\n                queryButtonText(optionsManager.dirDefaults) ||\r\n                spec.defaults.buttonText || // a single string. from ViewSubclass.defaults\r\n                queryButtonText(options_1.globalDefaults) ||\r\n                (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like \"3 days\"\r\n                requestedViewType; // fall back to given view name\r\n    };\r\n    return ViewSpecManager;\r\n}());\r\nexports.default = ViewSpecManager;\r\n\n\n/***/ }),\n/* 260 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar EventSourceParser_1 = __webpack_require__(38);\r\nvar ArrayEventSource_1 = __webpack_require__(56);\r\nvar FuncEventSource_1 = __webpack_require__(223);\r\nvar JsonFeedEventSource_1 = __webpack_require__(224);\r\nEventSourceParser_1.default.registerClass(ArrayEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(FuncEventSource_1.default);\r\nEventSourceParser_1.default.registerClass(JsonFeedEventSource_1.default);\r\n\n\n/***/ }),\n/* 261 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ThemeRegistry_1 = __webpack_require__(57);\r\nvar StandardTheme_1 = __webpack_require__(221);\r\nvar JqueryUiTheme_1 = __webpack_require__(222);\r\nvar Bootstrap3Theme_1 = __webpack_require__(262);\r\nvar Bootstrap4Theme_1 = __webpack_require__(263);\r\nThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1.default);\r\nThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1.default);\r\n\n\n/***/ }),\n/* 262 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap3Theme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bootstrap3Theme, _super);\r\n    function Bootstrap3Theme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Bootstrap3Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap3Theme;\r\nBootstrap3Theme.prototype.classes = {\r\n    widget: 'fc-bootstrap3',\r\n    tableGrid: 'table-bordered',\r\n    tableList: 'table',\r\n    tableListHeading: 'active',\r\n    buttonGroup: 'btn-group',\r\n    button: 'btn btn-default',\r\n    stateActive: 'active',\r\n    stateDisabled: 'disabled',\r\n    today: 'alert alert-info',\r\n    popover: 'panel panel-default',\r\n    popoverHeader: 'panel-heading',\r\n    popoverContent: 'panel-body',\r\n    // day grid\r\n    // for left/right border color when border is inset from edges (all-day in agenda view)\r\n    // avoid `panel` class b/c don't want margins/radius. only border color.\r\n    headerRow: 'panel-default',\r\n    dayRow: 'panel-default',\r\n    // list view\r\n    listView: 'panel panel-default'\r\n};\r\nBootstrap3Theme.prototype.baseIconClass = 'glyphicon';\r\nBootstrap3Theme.prototype.iconClasses = {\r\n    close: 'glyphicon-remove',\r\n    prev: 'glyphicon-chevron-left',\r\n    next: 'glyphicon-chevron-right',\r\n    prevYear: 'glyphicon-backward',\r\n    nextYear: 'glyphicon-forward'\r\n};\r\nBootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';\r\nBootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';\r\nBootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';\r\n\n\n/***/ }),\n/* 263 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar tslib_1 = __webpack_require__(2);\r\nvar Theme_1 = __webpack_require__(22);\r\nvar Bootstrap4Theme = /** @class */ (function (_super) {\r\n    tslib_1.__extends(Bootstrap4Theme, _super);\r\n    function Bootstrap4Theme() {\r\n        return _super !== null && _super.apply(this, arguments) || this;\r\n    }\r\n    return Bootstrap4Theme;\r\n}(Theme_1.default));\r\nexports.default = Bootstrap4Theme;\r\nBootstrap4Theme.prototype.classes = {\r\n    widget: 'fc-bootstrap4',\r\n    tableGrid: 'table-bordered',\r\n    tableList: 'table',\r\n    tableListHeading: 'table-active',\r\n    buttonGroup: 'btn-group',\r\n    button: 'btn btn-primary',\r\n    stateActive: 'active',\r\n    stateDisabled: 'disabled',\r\n    today: 'alert alert-info',\r\n    popover: 'card card-primary',\r\n    popoverHeader: 'card-header',\r\n    popoverContent: 'card-body',\r\n    // day grid\r\n    // for left/right border color when border is inset from edges (all-day in agenda view)\r\n    // avoid `table` class b/c don't want margins/padding/structure. only border color.\r\n    headerRow: 'table-bordered',\r\n    dayRow: 'table-bordered',\r\n    // list view\r\n    listView: 'card card-primary'\r\n};\r\nBootstrap4Theme.prototype.baseIconClass = 'fa';\r\nBootstrap4Theme.prototype.iconClasses = {\r\n    close: 'fa-times',\r\n    prev: 'fa-chevron-left',\r\n    next: 'fa-chevron-right',\r\n    prevYear: 'fa-angle-double-left',\r\n    nextYear: 'fa-angle-double-right'\r\n};\r\nBootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';\r\nBootstrap4Theme.prototype.iconOverridePrefix = 'fa-';\r\n\n\n/***/ }),\n/* 264 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar BasicView_1 = __webpack_require__(67);\r\nvar MonthView_1 = __webpack_require__(246);\r\nViewRegistry_1.defineView('basic', {\r\n    'class': BasicView_1.default\r\n});\r\nViewRegistry_1.defineView('basicDay', {\r\n    type: 'basic',\r\n    duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('basicWeek', {\r\n    type: 'basic',\r\n    duration: { weeks: 1 }\r\n});\r\nViewRegistry_1.defineView('month', {\r\n    'class': MonthView_1.default,\r\n    duration: { months: 1 },\r\n    defaults: {\r\n        fixedWeekCount: true\r\n    }\r\n});\r\n\n\n/***/ }),\n/* 265 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar AgendaView_1 = __webpack_require__(238);\r\nViewRegistry_1.defineView('agenda', {\r\n    'class': AgendaView_1.default,\r\n    defaults: {\r\n        allDaySlot: true,\r\n        slotDuration: '00:30:00',\r\n        slotEventOverlap: true // a bad name. confused with overlap/constraint system\r\n    }\r\n});\r\nViewRegistry_1.defineView('agendaDay', {\r\n    type: 'agenda',\r\n    duration: { days: 1 }\r\n});\r\nViewRegistry_1.defineView('agendaWeek', {\r\n    type: 'agenda',\r\n    duration: { weeks: 1 }\r\n});\r\n\n\n/***/ }),\n/* 266 */\n/***/ (function(module, exports, __webpack_require__) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\nvar ViewRegistry_1 = __webpack_require__(24);\r\nvar ListView_1 = __webpack_require__(248);\r\nViewRegistry_1.defineView('list', {\r\n    'class': ListView_1.default,\r\n    buttonTextKey: 'list',\r\n    defaults: {\r\n        buttonText: 'list',\r\n        listDayFormat: 'LL',\r\n        noEventsMessage: 'No events to display'\r\n    }\r\n});\r\nViewRegistry_1.defineView('listDay', {\r\n    type: 'list',\r\n    duration: { days: 1 },\r\n    defaults: {\r\n        listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\r\n    }\r\n});\r\nViewRegistry_1.defineView('listWeek', {\r\n    type: 'list',\r\n    duration: { weeks: 1 },\r\n    defaults: {\r\n        listDayFormat: 'dddd',\r\n        listDayAltFormat: 'LL'\r\n    }\r\n});\r\nViewRegistry_1.defineView('listMonth', {\r\n    type: 'list',\r\n    duration: { month: 1 },\r\n    defaults: {\r\n        listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n    }\r\n});\r\nViewRegistry_1.defineView('listYear', {\r\n    type: 'list',\r\n    duration: { year: 1 },\r\n    defaults: {\r\n        listDayAltFormat: 'dddd' // day-of-week is nice-to-have\r\n    }\r\n});\r\n\n\n/***/ }),\n/* 267 */\n/***/ (function(module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", { value: true });\r\n\n\n/***/ })\n/******/ ]);\n});\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/fullcalendar/dist/fullcalendar.js\n// module id = 823\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> PROJECTS\\n            <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Projects</li>\\n        </ol>\\n    </section>\\n    <!-- Main content -->\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"addproject()\\\" style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create\\\">\\n                                <i class=\\\"sq sq-create-new-project\\\" style=\\\"color:rgb(27, 110, 198); font-size: 32px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selprojects.length == 0 || statusdelete.length > 0\\\" (click)=\\\"closeproject(null)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                <i class=\\\"sq sq-delete-project\\\" style=\\\"color:rgb(27, 110, 198); font-size: 32px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selprojects.length == 0 || statusdelete.length > 0\\\" (click)=\\\"deleteproject(null)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <i class=\\\"sq sq-eliminar\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selprojects.length == 0 || statusdelete.length > 0\\\" (click)=\\\"openproject(null)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                                <i class=\\\"sq sq-reopen-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" (click)=\\\"showFilter()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Filter\\\">\\n                                <i class=\\\"fa fa-filter\\\" style=\\\"color:rgb(27, 110, 198); font-size: 22px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input id=\\\"search_proj\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\"\\n                                            class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"searchProject()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\" style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div *ngIf=\\\"filter\\\" class=\\\"box-header with-border filter-options\\\">\\n                    <div class=\\\"col-xs-10 col-sm-11 col-md-11 col-lg-11\\\">\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Subject</label>\\n                            <li *ngIf=\\\"myprojcopy.description\\\">\\n                                {{myproj.description}}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.description\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date initial</label>\\n                            <li *ngIf=\\\"myproj.date_ini\\\">\\n                                {{formatDate(myproj.date_ini)}}\\n                            </li>\\n                            <li *ngIf=\\\"!myproj.date_ini\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date end</label>\\n                            <li *ngIf=\\\"myproj.date_end\\\">\\n                                {{formatDate(myproj.date_end)}}\\n                            </li>\\n                            <li *ngIf=\\\"!myproj.date_end\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Project_ids</label>\\n                            <li *ngFor=\\\"let pj of myprojcopy.proj_ids\\\">\\n                                {{pj}}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.proj_ids\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Product(s)</label>\\n                            <li *ngFor=\\\"let pr of myprojcopy.products\\\">\\n                                {{pr.prod_name}}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.products || myprojcopy.products.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Applicant(s)</label>\\n                            <li *ngFor=\\\"let app of myprojcopy.applicants\\\">\\n                                {{ app.user_lastname + \\\", \\\" + app.user_name }}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.applicants || myprojcopy.applicants.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Creator(s)</label>\\n                            <li *ngFor=\\\"let ur of myprojcopy.creators\\\">\\n                                {{ ur.user_lastname + \\\", \\\" + ur.user_name }}\\n                            </li>\\n                            <li *ngIf=\\\"!myprojcopy.creators || myprojcopy.creators.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"text-align: right;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"closeFilter()\\\" class=\\\"pull-rigth\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:#0ba8da; font-weight: bolder;\\\"></i>\\n                        </a>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && projects.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"projects.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: 3px solid white;width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\">\\n                                <thead>\\n                                    <th (click)=\\\"selectAll()\\\" style=\\\"text-align:center;width: 50px;border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <i *ngIf=\\\"selprojects.length && selprojects.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                        <i *ngIf=\\\"selprojects.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('proj_start')\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Start Date\\n                                        <span [hidden]=\\\"posOrder !== 'proj_start'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('proj_id')\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Number\\n                                        <span [hidden]=\\\"posOrder !== 'proj_id'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('user_creator')\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Creator\\n                                        <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('user_applicant')\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Applicant\\n                                        <span [hidden]=\\\"posOrder !== 'user_applicant'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th style=\\\"width: 300px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Subject\\n                                    </th>\\n                                    <th *ngIf=\\\"textState.indexOf('Closed') >= 0\\\" style=\\\"width: 100px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Closed by\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('proj_percentage')\\\" style=\\\"width: 60px; text-align: center;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        %\\n                                        <span [hidden]=\\\"posOrder !== 'proj_percentage'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                        </span>\\n                                    </th>\\n                                    <th style=\\\"width: 150px;border: 2px solid rgb(227,237,241) !important;color:rgb(79, 93, 100);\\\">\\n                                        Actions\\n                                    </th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let tk of projects\\\" [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"listproject\\\" name=\\\"listproject\\\" value=\\\"{{tk.proj_id}}\\\"\\n                                                    label=\\\"\\\" [(ngModel)]=\\\"selprojects\\\" (onChange)=\\\"verifyStatus()\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.proj_start) }}</a>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.proj_id) }}</a>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.creator) }}</a>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.applicant) }}</a>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ escapeHtml(tk.proj_subject)\\n                                                }}</a>\\n                                        </td>\\n                                        <td *ngIf=\\\"textState.indexOf('Closed') >= 0\\\" [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                [routerLink]=\\\"['/project', tk.proj_id]\\\">{{ tk.closer }}</a>\\n                                        </td>\\n                                        <td *ngIf=\\\"tk.iscomplete == 1\\\" [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <span [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(237, 59, 89)'}\\\"\\n                                                class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tk.proj_percentage_diff}}%</span>\\n                                            <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%;\\\">\\n                                                <div class=\\\"success-tasks\\\" [ngStyle]=\\\"tk.para_status == 5 ? { 'background': 'rgb(237, 59, 89)', 'width': tk.proj_percentage + '%' } : tk.para_status == 3 ? { 'background': 'rgb(237, 59, 89)' , 'width': tk.proj_percentage + '%' } :{'background': 'rgb(237, 59, 89)' , 'width': tk.proj_percentage + '%' }\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td *ngIf=\\\"tk.iscomplete == 0\\\" [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <span [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tk.proj_percentage}}%</span>\\n                                            <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%;\\\">\\n                                                <div class=\\\"success-tasks\\\" [ngStyle]=\\\"tk.para_status == 5 ? { 'background': 'rgb(237, 59, 89)', 'width': tk.proj_percentage + '%' } : tk.para_status == 3 ? { 'background': 'rgb(79, 93, 100)' , 'width': tk.proj_percentage + '%' } :{'background': 'rgb(68, 180, 248)' , 'width': tk.proj_percentage + '%' }\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 3 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <div class=\\\"row\\\">\\n                                                    <button type=\\\"button\\\" (click)=\\\"showModalProject(tk.proj_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                                        style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                                                        pTooltip=\\\"Quick view\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-search\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"tk.para_status != 5\\\" type=\\\"button\\\" (click)=\\\"showEditModal(tk)\\\"\\n                                                        class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                                        data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-quickedit\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"tk.para_status == 3 \\\" (click)=\\\"openproject(tk.proj_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                                        data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"fa fa-undo\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"tk.para_status != 3 && tk.para_status != 5\\\" (click)=\\\"closeproject(tk.proj_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                                        data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"fa fa-times-circle-o\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"tk.para_status != 5\\\" (click)=\\\"deleteproject(tk.proj_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                                                        data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 5 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 3 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </div>\\n                                            </div>\\n                                            <projectview [myProjectId]=\\\"tk.proj_id\\\"></projectview>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"goTo(0)\\\">\\n                                            <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"setCurPage(0)\\\">\\n                                            <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                    <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\"\\n                                        [(ngModel)]=\\\"currentpage\\\" (change)=\\\"searchProject()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                    <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </section>\\n\\n    <!--modal add project-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdproject\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params\\\"\\n                style=\\\"text-align: center;text-align: center; position: absolute; z-index: 10; background-color: rgba(121,121,121,0.54); height: 100%;    margin-top: 0px ;display: flex;justify-content: center;  align-items: center;\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div class=\\\"modal-content-params\\\">\\n                <div *ngIf=\\\"project.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + project.proj_id + \\\" - \\\" +\\n                        project.proj_subject}}</h4>\\n                </div>\\n                <div *ngIf=\\\"!project.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>&nbsp;&nbsp; New project</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"project.proj_subject\\\" name=\\\"project_subject\\\"\\n                                    placeholder=\\\"Subject\\\">\\n                            </div>\\n                        </div>\\n                        <!--.subject-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User Applicant</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"applicantlbl\\\" [(ngModel)]=\\\"project.user_applicant\\\" placeholder=\\\"Select a user\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!--.user applicant-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User Creator</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"applicantlbl\\\" [(ngModel)]=\\\"project.user_creator\\\" placeholder=\\\"Select a user\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!--.user creator-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"lblgroups\\\" [(ngModel)]=\\\"project.group_assigned\\\" placeholder=\\\"Select a group\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!--.group-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"products\\\" [(ngModel)]=\\\"project.prod_id\\\" placeholder=\\\"Select a Product\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!--.product-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"project.proj_end\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!--.delivery date-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Estimated Points</label>\\n                                <input type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"project.proj_propoints\\\"\\n                                    [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <!--.estimates points-->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"project.userssh\\\"\\n                                        [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--.share with-->\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                                <a id=\\\"editProject-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_project\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"project.attachments && project.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                                <a id=\\\"editProject-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_project\\\" (click)=\\\"setPage(2)\\\">Attachments\\n                                    <span>({{project.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor [(ngModel)]=\\\"project.proj_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                            <!--.description-->\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"attachments_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of project.attachments\\\">\\n                                            <a id=\\\"href-attp-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\"\\n                                                class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type && (att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/')\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a id=\\\"href-attp2-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\"\\n                                                    class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.pjat_name}}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button *ngIf=\\\"project.proj_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentProject(project,att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"!project.proj_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachment(att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button type=\\\"submit\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" \\n                            [disabled]=\\\"validateProj()\\\" (click)=\\\"saveproject()\\\" style=\\\"padding: 5px 12px;\\\"> Save\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-left\\\">\\n                        <label for=\\\"file-upload\\\" class=\\\"custom-file-upload custom-upload-form-projectlist\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--.modal add project-->\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdSearchProject\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Main filter</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"description_projectfilter\\\" name=\\\"description_projectfilter\\\"\\n                                    [(ngModel)]=\\\"myproj.description\\\" placeholder=\\\"type a keyword\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-chips\\\">\\n                                <label>Project id(s)</label>\\n                                <p-chips class=\\\"chipsSqlx\\\" [(ngModel)]=\\\"myproj.proj_ids\\\" placeholder=\\\"Ex.17,19-22 enter\\\"></p-chips>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Product(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myproj.products\\\"\\n                                        [suggestions]=\\\"productsa\\\" (completeMethod)=\\\"filterMultiple($event, 1)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Products(s)\\\" field=\\\"prod_name\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Creator</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myproj.creators\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Applicant</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myproj.applicants\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date initial</label>\\n                                <p-calendar id=\\\"calendarDateInit_projectfilter\\\" name=\\\"calendarDateInit_projectfilter\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myproj.date_ini\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date end</label>\\n                                <p-calendar id=\\\"calendarDateEnd_projectfilter\\\" name=\\\"calendarDateEnd_projectfilter\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myproj.date_end\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonSearch_projectfilter\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"filterProject()\\\">\\n                            Search\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/project/projectlist.template.html\n// module id = 825\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h2>\\n      Project #{{ project.proj_id }}\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a [routerLink]=\\\"['/dashboard']\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li>\\n        <a [routerLink]=\\\"['/projects']\\\">Projects</a>\\n      </li>\\n      <li class=\\\"active\\\">Project #{{ project.proj_id }}</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-desc-project\\\">\\n          <div class=\\\"modal-header header-project\\\" [ngStyle]=\\\"project.para_status == 5 ? {'background-color': 'red'} : project.para_status == 3 ? {'background-color': 'gray'} : {}\\\">\\n            <div style=\\\"float: left; overflow-y: scroll;max-height: 29px;\\\">\\n              <label class=\\\"label-box-title\\\">{{project.proj_subject}} {{ project.para_status == 5 ? '(Deleted)' : ''\\n                }}{{ project.para_status == 3 ? '(Closed)' : '' }}</label>\\n            </div>\\n            <div class=\\\"pull-right\\\">\\n              <button type=\\\"button\\\" (click)=\\\"showEditModal()\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\"\\n                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                <i class=\\\"sq sq-quickedit\\\" style=\\\"color: white;\\\"></i>\\n              </button>\\n              <button *ngIf=\\\"project.para_status != 3 && project.para_status != 5\\\" type=\\\"button\\\" (click)=\\\"closeproject()\\\"\\n                class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                pTooltip=\\\"Close\\\">\\n                <i class=\\\"fa fa-times-circle-o\\\" style=\\\"color: white;\\\"></i>\\n              </button>\\n              <button *ngIf=\\\"project.para_status == 3 \\\" (click)=\\\"openproject(project.proj_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reopen\\\">\\n                <i class=\\\"fa fa-undo\\\" style=\\\"color: white;\\\"></i>\\n              </button>\\n              <button *ngIf=\\\"project.para_status != 5\\\" (click)=\\\"deleteproject(project.proj_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                style=\\\"width: 34px;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                <i class=\\\"sq sq-trash\\\" style=\\\"color: white;\\\"></i>\\n              </button>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body box-project\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Project Number: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_id}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Creation Date: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_start}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Product: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.prod_name}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Project Creator: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.creator}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">End Date</label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{ project.proj_end}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Applicant: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.applicant}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Group: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.groupname}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Estimated Points: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_propoints}}</span>\\n              </div>\\n              <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Done Points: </label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_compoints}}</span>\\n              </div>\\n              <div *ngIf=\\\"project.iscomplete == 1\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                  <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Progress</label>\\n                  <span class=\\\"label-noedit col-xs-6 col-md-6 danger-span-sqlx\\\">{{project.proj_percentage_diff}}%</span>\\n                  <div *ngIf=\\\"project.proj_percentage >0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                    <div class=\\\"danger-sqlx col-xs-12 col-md-4\\\" [ngStyle]=\\\"{ 'width': project.proj_percentage + '%' }\\\">\\n                    </div>\\n                  </div>\\n                  <div *ngIf=\\\"project.proj_percentage == 0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                    <div class=\\\"danger-sqlx col-xs-12 col-md-4\\\" style=\\\"width:0%;background-color:transparent;\\\">\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div *ngIf=\\\"project.iscomplete == 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-4 col-lg-4\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">Progress</label>\\n                <span class=\\\"label-noedit col-xs-6 col-md-6 span-sqlx\\\">{{project.proj_percentage}}%</span>\\n                <div *ngIf=\\\"project.proj_percentage >0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                  <div class=\\\"success-sqlx col-xs-12 col-md-4\\\" [ngStyle]=\\\"{ 'width': project.proj_percentage + '%' }\\\">\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"project.proj_percentage == 0\\\" class=\\\"progress-bar-sqlx col-xs-12 col-md-4\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                  <div class=\\\"success-sqlx col-xs-12 col-md-4\\\" style=\\\"width:0%;background-color:transparent;\\\">\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                  <label class=\\\"control-label\\\">Shared With</label>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                  <span *ngIf=\\\"!project.userssh || project.userssh.length == 0\\\">None</span>\\n                  <span *ngFor=\\\"let uss of project.userssh\\\" class=\\\"label label-primary\\\">{{ uss.user_name + ' ' +\\n                    uss.user_lastname }}</span>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <label class=\\\"control-label col-xs-6 col-md-6 label-sqlx\\\">DescriptionColor</label>\\n                <div class=\\\"col-xs-12 col-md-12 iframe-desc-proj\\\" style=\\\"padding-top:10px;margin-left:10px;\\\">\\n                  <span class=\\\"iframe-desc-proj\\\">\\n                    <div [innerHtml]=\\\"project.proj_description\\\"></div>\\n                  </span>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-md-12 col-lg-12\\\">\\n            <div class=\\\"box box-desc-milestone\\\">\\n              <div class=\\\"box-header header-milestone\\\">\\n                <div class=\\\"header-border-milestone\\\">\\n                  <div class=\\\"col-xs-6 col-sm-6 col-md-8 col-lg-9\\\" style=\\\"padding:0;\\\">\\n                    <div class=\\\"pull-left\\\" style=\\\"padding:2px 2px 2px 20px; margin:2px;\\\">\\n                      <i class=\\\"sq sq-milestones\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 28px!important\\\"></i>\\n                    </div>\\n                    <div class=\\\"pull-rigth\\\" style=\\\"padding:3px;margin-top: 6px;\\\">\\n                      <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold; font-size: 16px;\\\">MILESTONES</span>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-3\\\" style=\\\"padding:0;\\\">\\n                    <div class=\\\"pull-right\\\" style=\\\"background-color: #026ec5; border-radius: 20px;\\\">\\n                      <div class=\\\"pull-left\\\" style=\\\"margin: 2px 0 2px 2px;\\\">\\n                        <i class=\\\"sq sq-milestones\\\" aria-hidden=\\\"true\\\" style=\\\"color:white;font-size: 25px; padding-left: 8px;\\\"></i>\\n                      </div>\\n                      <div class=\\\"pull-right button-add-milestone\\\" style=\\\"padding-top:3px; margin-top: 6px;\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"addMilestone()\\\" data-toggle=\\\"modal\\\" style=\\\"color:white;font-weight: bold; background-color: transparent; border: none; padding-right: 10px;\\\">ADD\\n                          MILESTONE</button>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--.box-header-->\\n              <div *ngIf=\\\"milestones.length > 0\\\" class=\\\"box-body box-milestone\\\">\\n                <div class=\\\"row\\\">\\n                  <div class=\\\"col-xs-6 col-sm-7 col-md-9 col-lg-9\\\" style=\\\"padding-right: 0px;\\\">\\n                    <div>\\n                      <label class=\\\"control-label  label-sqlx\\\">Start Date</label>\\n                    </div>\\n                    <div>\\n                      <span class=\\\"label-noedit  span-sqlx\\\">{{project.proj_start}}</span>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"col-xs-6 col-sm-5 col-md-3 col-lg-3\\\" style=\\\"padding-left: 0px;\\\">\\n                    <div class=\\\"pull-right\\\">\\n                      <div>\\n                        <label class=\\\"control-label label-sqlx pull-right\\\">Delivery Date</label>\\n                      </div>\\n                      <div>\\n                        <span class=\\\"label-noedit span-sqlx\\\">{{project.proj_end ? project.proj_end : 'Not Defined'}}</span>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div style=\\\"position: absolute; width: calc(100% - 180px); padding: 5px; left: 86px; font-size: 3em; padding-bottom: 20px; \\\">\\n                  <div *ngFor=\\\"let y of milestones\\\" [ngStyle]=\\\"{'width':y.nper + '%', 'float': 'left'}\\\">\\n                    <a href=\\\"javascript:void(0)\\\" (click)=\\\"showMilestone(y)\\\">\\n                      <i class=\\\"sq sq-milestones-o pull-right\\\" aria-hidden=\\\"true\\\" [ngStyle]=\\\"{'color':y.color, 'margin-right' : '-21px'}\\\"><span\\n                          style=\\\" position: absolute; font-size: 20px;margin-left: -27px;margin-top: 4px;font-family: Arial;\\\">{{y.number}}</span></i>\\n                    </a>\\n                  </div>\\n                </div>\\n                <div class=\\\"row\\\" style=\\\"padding-top: 40px;\\\">\\n                  <div style=\\\"width: 50px; position: absolute; left: 40px; padding-top: 4px\\\">\\n                    <div style=\\\"box-shadow:0 1px 5px rgba(0, 0, 0, 0.5); border-radius: 50%; width: 50px; height: 50px; text-align: center; padding-top: 8px;\\\">\\n                      <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\" style=\\\"color:#026ec5;font-size: 28px;\\\"></i>\\n                    </div>\\n                  </div>\\n                  <div style=\\\"position: absolute; width: calc(100% - 180px); padding: 5px; left: 86px; padding-top: 20px;\\\">\\n                    <div class=\\\"progress\\\" style=\\\"height: 15px; background-color:rgb(230, 240, 243);\\\">\\n                      <div *ngFor=\\\"let y of milestones\\\" class=\\\"progress-bar\\\" role=\\\"progressbar\\\" aria-valuenow=\\\"15\\\"\\n                        aria-valuemin=\\\"0\\\" aria-valuemax=\\\"100\\\" [ngStyle]=\\\"{'width':y.nper + '%','background':y.color}\\\">\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div style=\\\"width:50px; padding: 0; position: absolute; right: 50px;\\\">\\n                    <i class=\\\"sq sq-milestones\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(230, 240, 243);;font-size: 50px;  width: 50px;\\\"></i>\\n                  </div>\\n                  <div style=\\\"position: absolute; width: calc(100% - 180px); padding: 5px; padding-top: 35px; left: 86px; font-size: 3em;height: 63px;\\\">\\n                    <div *ngFor=\\\"let x of milestones\\\" [ngStyle]=\\\"{'width':x.nper + '%', 'float': 'left', 'text-align': 'right'}\\\">\\n                      <p style=\\\"font-size: 10px;\\\">{{x.meet_date}}</p>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div class=\\\"row\\\" style=\\\"padding: 20px 5px; border-radius: 10px; border: 2px solid rgb(230, 240, 243); margin: 83px 50px 20px 50px;\\\">\\n                  <button (click)=\\\"deleteMilestone(milestone_show.pjml_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm pull-right\\\"\\n                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                    <i class=\\\"fa fa-trash-o\\\"></i>\\n                  </button>\\n                  <div class=\\\"col-xs-12 col-sm-3 col-md-2 col-lg-1\\\" style=\\\"padding: 0;\\\">\\n                    <i class=\\\"sq sq-milestones-o\\\" aria-hidden=\\\"true\\\" [ngStyle]=\\\"{'color':milestone_show.color , 'font-size': '5em', 'position': 'relative'}\\\">\\n                      <span style=\\\"font-size: 22px; left: 28px; top: 10px; font-family: Arial; position: absolute;\\\">{{milestone_show.number}}</span>\\n                    </i>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-sm-10 col-md-6 col-lg-4\\\">\\n                    <div>\\n                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding: 0px;\\\">\\n                        <p style=\\\"color: #707070; font-weight: bold; font-size: 16px;\\\">Creator</p>\\n                        <span style=\\\"color: #707070; font-size: 15px;\\\">{{milestone_show.name_owner}}</span>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding: 0px;\\\">\\n                        <p style=\\\"color: #707070; font-weight: bold; font-size: 16px; \\\">Delivery Date</p>\\n                        <span style=\\\"color: #707070; font-size: 15px;\\\">{{milestone_show.meet_date}}</span>\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-sm-9 col-md-2 col-lg-2\\\">\\n                    <span style=\\\"color: #707070; font-weight: bold; font-size: 16px; \\\">Place</span>\\n                    <p style=\\\"color: #707070; font-size: 15px;\\\">{{milestone_show.para_name}}</p>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-4\\\">\\n                    <span style=\\\"color: #707070; font-weight: bold; font-size: 16px; \\\">Description</span>\\n                    <p style=\\\"color: #707070; font-size: 15px;\\\">{{milestone_show.pjml_description}}</p>\\n                  </div>\\n                </div>\\n              </div>\\n              <!--.box-body milestone -->\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-sm-12 col-lg-6 comments-project\\\" style=\\\"margin-left: 31px; margin-bottom: 20px;\\\">\\n            <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;\\\">\\n              <div class=pull-left style=\\\"padding:2px; margin:2px;\\\">\\n                <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 23px!important\\\"></i>\\n              </div>\\n              <div class=\\\"pull-rigth\\\" style=\\\"padding:2px; margin:2px;margin-top: 6px;\\\">\\n                <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold;\\\">COMMENTS</span>\\n              </div>\\n              <div style=\\\"background-color:gray; width:90%;margin-left:10px;\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"content-comments-users scrollable\\\" style=\\\"max-height:273px;\\\">\\n              <ul class=\\\"timeline comment-timeline\\\">\\n                <li *ngFor=\\\"let dt of detail; let i=index;\\\" style=\\\"margin-top:5px;\\\">\\n                  <div class=\\\"border-imguser\\\">\\n                    <img [src]=\\\"dt.urlimagen\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"img-usersqlx\\\">\\n                  </div>\\n\\n                  <div class=\\\"timeline-item comment-timeline-item\\\">\\n                    <span class=\\\"time\\\">\\n                      {{dt.note_date}}</span>\\n                    <h3 class=\\\"timeline-header comment-timeline-header\\\">\\n                      <b>{{dt.creator}}</b>\\n                      <!-- {{\\\" \\\" + dt.title + \\\" \\\"}} -->\\n                      commented on a\\n                      <b>project</b>\\n                    </h3>\\n                    <div class=\\\"timeline-body\\\" style=\\\"overflow-y: scroll; max-height:200px; padding-bottom: 1px;\\\">\\n                      <div class=\\\"box-body\\\">\\n                        <div class=\\\"col-xs-12 col-md-12\\\">\\n                          <div class=\\\"col-xs-12 col-md-12 comment-user\\\" style=\\\"padding-top:10px;margin-left:10px;\\\">\\n                            <p class=\\\"comment-user\\\"> {{escapeHtml(dt.note_text)}}</p>\\n                          </div>\\n                          <div *ngIf=\\\"dt.childs.length > 0\\\">\\n                            <div *ngFor=\\\"let chn of dt.childs\\\" class=\\\"col-xs-12 col-md-12 reply-user\\\" style=\\\"padding-top:10px;margin-left:10px; padding-top:0px;\\\">\\n                              <div class=\\\"pull-right reply-comment\\\">\\n                                <h3 class=\\\"reply-user\\\">\\n                                  <b>{{chn.creator}}</b>\\n                                  <!-- {{\\\" \\\" + chn.title + \\\" \\\"}} -->\\n                                  commented on a\\n                                  <b>project</b>\\n                                </h3>\\n                                <p class=\\\"reply-user\\\"> {{escapeHtml(chn.note_text)}}</p>\\n                              </div>\\n                              <div style=\\\"background-color:rgb(230, 240, 243); height:6px; position: relative;\\\">\\n                              </div>\\n                            </div>\\n                          </div>\\n                          <div id=\\\"reply-user\\\" class=\\\"row\\\">\\n                            <div class=\\\"col-md-11 reply-note\\\" *ngIf=\\\"!dt.active\\\" style=\\\"text-align: right;\\\">\\n                              <a href=\\\"javascript:void(0)\\\" (click)=\\\"showNoteReply(i)\\\">\\n                                <p class=\\\"reply-the-comment\\\" style=\\\"color:rgb(167, 167, 167)!important;padding-top: 7px;display: inline-block;text-align: right;\\\">Reply\\n                                  the comment</p>\\n                              </a>\\n                            </div>\\n                            <div class=\\\"col-md-11\\\" *ngIf=\\\"dt.active\\\">\\n                              <a href=\\\"javascript:void(0)\\\" (click)=\\\"createNoteReply(dt.note_id)\\\">\\n                                <div class=\\\"col-md-12\\\" style=\\\"background-color: rgb(230, 240, 243); height: 24px;margin-left:10px;margin-top:6px;\\\">\\n                                  <input type=\\\"text\\\" class=\\\"col-md-12 imput-comments\\\" style=\\\"background-color: rgb(230, 240, 243);height: 24px;margin-top: 5px;margin-bottom: 2px;margin-left: 12px; width: 100%;\\\"\\n                                    [(ngModel)]=\\\"notereply.note_data\\\" placeholder=\\\"Type Comment\\\">\\n                                </div>\\n                              </a>\\n                            </div>\\n                            <div class=\\\"pull-right col-md-1\\\">\\n                              <button type=\\\"submit\\\" (click)=\\\"saveNoteReply(dt.note_id, dt)\\\" style=\\\"background-color:transparent; border:none; margin-top: 3px;\\\">\\n                                <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i>\\n                              </button>\\n                            </div>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </li>\\n              </ul>\\n            </div>\\n            <div class=\\\"modal-footer clearfix footer-comments-users\\\">\\n              <div class=\\\"row\\\">\\n                <div class=\\\"pull-left col-md-11\\\">\\n                  <div class=\\\"pull-left col-md-12\\\" style=\\\"background-color:white; height: 24px;\\\">\\n                    <input type=\\\"text\\\" class=\\\"pull-left col-md-12 imput-comments\\\" [(ngModel)]=\\\"note.note_text\\\"\\n                      placeholder=\\\"New Comment\\\">\\n                  </div>\\n                </div>\\n                <div class=\\\"pull-right col-md-1\\\">\\n                  <button type=\\\"submit\\\" (click)=\\\"saveNote()\\\" class=\\\"button-save-comment-sqlx\\\">\\n                    <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i>\\n                  </button>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"col-sm-12 col-lg-6 comments-project\\\" style=\\\"margin-left: 31px;\\\">\\n            <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;\\\">\\n              <div class=pull-left style=\\\"padding:2px; margin:2px;\\\">\\n                <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(79, 93, 100);font-size: 23px!important\\\"></i>\\n              </div>\\n              <div class=\\\"pull-rigth\\\" style=\\\"padding:2px; margin:2px; margin-top: 6px;\\\">\\n                <span style=\\\"margin-right:5px;color:rgb(79, 93, 100);font-weight: bold;\\\">STATUS TASKS</span>\\n              </div>\\n            </div>\\n            <div class=\\\"content-status-tasks\\\">\\n              <div class=\\\"box-body\\\" style=\\\"min-width: 200px;\\\">\\n                <table class=\\\"table table-bordered-sqlx table-hover table-striped table-projects\\\">\\n                  <tr>\\n                    <th style=\\\"width: 10px; text-align:center;\\\">#</th>\\n                    <th style=\\\"width: 80px; text-align:center;\\\">Task</th>\\n                    <th style=\\\"width: 50px; text-align:center;\\\">Progress</th>\\n                    <th style=\\\"width: 15px; text-align:center;\\\">Delivery Date</th>\\n                  </tr>\\n                  <tr *ngFor=\\\"let tks of statustasks | paginate : { currp : currentpage, limit : limitpage}\\\">\\n                    <td>\\n                      <span class=\\\"span-sqlx\\\" (click)=\\\"showModal(tks)\\\" style=\\\"text-align: center; cursor: pointer; font-size: 14px;\\\">{{tks.task\\n                        }}</span>\\n                      <taskview [myTaskId]=\\\"tks.task\\\"></taskview>\\n                    </td>\\n                    <td>\\n                      <span class=\\\"span-sqlx\\\" style=\\\"font-size: 14px;\\\">{{ tks.subject }}</span>\\n                    </td>\\n                    <td style=\\\"text-align: center;\\\">\\n                      <span class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tks.points}}%</span>\\n                      <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%; margin-left: 12px;\\\">\\n                        <div class=\\\"success-tasks-request\\\" [ngStyle]=\\\"{ 'width': tks.points + '%' }\\\">\\n                        </div>\\n                      </div>\\n                    </td>\\n                    <td style=\\\"text-align: center;\\\">\\n                      <span class=\\\"span-sqlx\\\" style=\\\"font-size: 14px;\\\">{{ tks.datedelivery }}</span>\\n                    </td>\\n                  </tr>\\n                </table>\\n\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"statustasks\\\">\\n              <div class=\\\"box-footer clearfix\\\">\\n                <div class=\\\"pagination pagination-sm no-margin pull-right\\\">\\n                  {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) > (statustasks).length\\n                  ? (statustasks).length\\n                  : (limitpage * currentpage) }} / {{ (statustasks).length }}\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setPage(0)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                      <i aria-hidden=\\\"true\\\" class=\\\"fa fa-step-backward\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setPage(1)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                      <i aria-hidden=\\\"true\\\" class=\\\"fa fa-step-forward\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddMilestone\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-milestone\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">Add Milestone</h4>\\n        </div>\\n        <!--.modal-header-->\\n        <div class=\\\"modal-body\\\" style=\\\"height:500px;\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"pull left col-xs-6 col-sm-7 col-md-7 col-lg-7 calendar-squadlinx\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Date</label>\\n                  <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"milestone.meet_datex\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                    [showTime]=\\\"true\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                    [monthNavigator]=\\\"true\\\" [minDate]=\\\"minDate\\\" [maxDate]=\\\"maxDate\\\"></p-calendar>\\n                </div>\\n              </div>\\n              <!--.delivery date-->\\n              <div class=\\\"pull-right col-xs-6 col-sm-5 col-md-5 col-lg-5\\\">\\n                <div class=\\\"form-group dropdownSqlx\\\">\\n                  <label style=\\\"color:#707070;\\\">Owner\\n                    <i *ngIf=\\\"!milestone.user_owner \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i>\\n                  </label>\\n                  <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"milestone.user_owner\\\"\\n                    placeholder=\\\"Select Owner\\\" filter=\\\"filter\\\"></p-dropdown>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0;\\\">\\n            <label style=\\\"padding-left: 17px; color:#707070;\\\" class=\\\"control-label col-xs-10 col-md-10\\\">Description\\n              <i *ngIf=\\\"!milestone.pjml_description \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i>\\n            </label>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <textarea name=\\\"textarea\\\" rows=\\\"5\\\" cols=\\\"70\\\" class=\\\"col-xs-12 input-description-milestone\\\" [(ngModel)]=\\\"milestone.pjml_description\\\"\\n                style=\\\"resize: vertical;\\\"></textarea>\\n            </div>\\n          </div>\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"form-group\\\">\\n              <label style=\\\"padding-top: 15px; color: #707070;\\\">Meeting Title\\n                <i *ngIf=\\\"!milestone.meet_text \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i>\\n              </label>\\n              <input style=\\\"border-radius:15px;\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"milestone.meet_text\\\" placeholder=\\\"Meeting Title\\\">\\n            </div>\\n          </div>\\n          <!-- Meeting Tittle -->\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"form-group dropdownSqlx\\\">\\n              <label style=\\\"color: #707070;\\\">Place\\n                <i *ngIf=\\\"!milestone.para_place \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i>\\n              </label>\\n              <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plmt\\\" [(ngModel)]=\\\"milestone.para_place\\\"\\n                placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n            </div>\\n          </div>\\n          <!--meeting Place -->\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n              <label style=\\\"color: #707070;\\\">Share with\\n                <!-- <i *ngIf=\\\"milestone.usershared == '' \\\" class=\\\"fa fa-circle\\\" style=\\\"color:#ff0000; font-size:5px; vertical-align:middle;\\\"></i> -->\\n              </label>\\n              <span class=\\\"ui-fluid\\\">\\n                <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"milestone.usershared\\\" [suggestions]=\\\"usersShareWith\\\"\\n                  (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\"\\n                  field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                </p-autoComplete>\\n              </span>\\n            </div>\\n          </div>\\n        </div>\\n        <!--.modal-body-->\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\" style=\\\"margin-right: 15px;\\\">\\n            <button type=\\\"btn btn-default\\\" class=\\\"btn-done-milestone\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"submit\\\" class=\\\"btn btn-primary btn-done-milestone\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateMiles()\\\"\\n              (click)=\\\"saveMilestone()\\\" style=\\\"border:none; background-color: #A4CB5B;\\\">Save</button>\\n\\n          </div>\\n        </div>\\n        <!--.modal-footer-->\\n      </div>\\n      <!--.modal-content-->\\n    </div>\\n    <!--.modal-dialog-->\\n  </div>\\n\\n  <!--Modal edit project-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdproject\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content-params\\\">\\n        <div *ngIf=\\\"myproj.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"sq sq-myprojs\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + myproj.proj_id + \\\" - \\\" +\\n            myproj.proj_subject}}</h4>\\n        </div>\\n        <div *ngIf=\\\"!myproj.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"sq sq-myprojs\\\" aria-hidden=\\\"true\\\"></i>&nbsp;&nbsp; New myproj</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Subject</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"myproj.proj_subject\\\" name=\\\"myproj_subject\\\"\\n                  placeholder=\\\"Subject\\\">\\n              </div>\\n            </div>\\n            <!--.subject-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>User Applicant</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"applicantlbl\\\"\\n                  [(ngModel)]=\\\"myproj.user_applicant\\\" placeholder=\\\"Select a user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.user applicant-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Group</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\"\\n                  [(ngModel)]=\\\"myproj.group_assigned\\\" placeholder=\\\"Select a Group\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.group-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                  [(ngModel)]=\\\"myproj.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.product-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"myproj.proj_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                  [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <!--.delivery date-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Estimated Points</label>\\n                <input type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"myproj.proj_propoints\\\" [step]=\\\"0.25\\\"\\n                  [min]=\\\"0\\\">\\n              </div>\\n            </div>\\n            <!--.estimates points-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                <label>Share with</label>\\n                <span class=\\\"ui-fluid\\\">\\n                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"myproj.userssh\\\" [suggestions]=\\\"usersShareWith\\\"\\n                    (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\"\\n                    field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                  </p-autoComplete>\\n                </span>\\n              </div>\\n            </div>\\n          </div>\\n          <!--.share with-->\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                <a id=\\\"editProject-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_project\\\" (click)=\\\"setPageMenu(1)\\\">Description</a>\\n              </li>\\n              <li *ngIf=\\\"myproj.attachments && myproj.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                <a id=\\\"editProject-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_project\\\" (click)=\\\"setPageMenu(2)\\\">Attachments\\n                  <span>({{myproj.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n\\n            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor [(ngModel)]=\\\"myproj.proj_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"attachments_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of myproj.attachments\\\">\\n                      <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\" style=\\\" overflow-x: scroll;\\\">\\n                        <a id=\\\"href-attp2-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.pjat_name}}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentProject(myproj,att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n              Close\\n            </button>\\n            <button type=\\\"submit\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateProj()\\\"\\n              (click)=\\\"savemyproj()\\\" style=\\\"padding: 5px 12px;\\\"> Save\\n            </button>\\n          </div>\\n          <div class=\\\"pull-left\\\">\\n            <label for=\\\"file-upload\\\" class=\\\"custom-file-upload custom-upload-form-projectlist\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!--.Modal edit Project-->\\n  <!--.modal fade-->\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/project/project.template.html\n// module id = 826\n// module chunks = 0","import {Component, Input} from \"@angular/core\";\nimport {Router} from \"@angular/router\";\nimport {ToastrService} from \"ngx-toastr\";\nimport {DomSanitizer} from \"@angular/platform-browser\";\nimport {ConfirmationService} from \"primeng/primeng\";\nimport {Title} from \"@angular/platform-browser\";\n\nimport {ProjectService} from \"../../services/project.service\";\nimport {NoteService} from \"../../services/note.service\";\n\nimport {\n    TruncatePipe,\n    PaginatePipe,\n    FilterPipe,\n    FilterfieldPipe,\n    OrderPipe\n} from \"../../pipes\";\nimport template from \"./projectview.template.html\";\nimport {IfObservable} from \"rxjs/observable/IfObservable\";\n\n@Component({\n    selector: \"projectview\",\n    template: template,\n    pipes: [TruncatePipe, PaginatePipe, FilterPipe, FilterfieldPipe, OrderPipe],\n    providers: [ConfirmationService]\n})\nexport class ProjectViewComponent {\n    @Input() myProjectId;\n\n    constructor(\n        title: Title,\n        route: Router,\n        sanitizer: DomSanitizer,\n        toastr: ToastrService,\n        ProjectService: ProjectService,\n        noteService: NoteService,\n        confirmationService: ConfirmationService\n    ) {\n        this._title = title;\n        this._router = route;\n        this.toastr = toastr;\n        this.toastr.options = {\n            preventDuplicates: true,\n            preventOpenDuplicates: true\n        };\n        this._sanitizer = sanitizer;\n        this._projects = ProjectService;\n        this._notes = noteService;\n        this.confirm = confirmationService;\n        this.project = {users: [], attachments: []};\n        this.total_attachments = 0;\n        this.isLoading = false;\n        this.search = \"\";\n        this.comments = [];\n        this.note = {};\n    }\n\n    ngOnInit() {\n    }\n\n    showModalProject() {\n        $('[data-toggle=\"tooltip\"]').tooltip(\"hide\");\n        this.project = {users: [], attachments: []};\n        this.note = {};\n        // var proj_id = this.myProjectId;\n        this.getProject(this.myProjectId);\n        this.getComments(this.myProjectId);\n\n    }\n\n    getProject(proj_id) {\n        this._projects.getproject(proj_id).subscribe(res => {\n\n            this.project = res.data;\n            this.project.proj_description = this.escapeHtml(\n                this.project.proj_description\n            );\n            this.project.attachments = res.data.attachments;\n            this.total_attachments = res.data.attachments.length;\n            $(\"#mdProjectView-\" + this.myProjectId).modal(\"show\");\n        });\n    }\n\n    getComments(proj_id) {\n        this.isLoading = true;\n        this._projects.getCommentsUsers(proj_id).subscribe(res => {\n            this.comments = res.data;\n            this.isLoading = false;\n        });\n        this.note_text = \"\";\n        this.note = {};\n    }\n\n    escapeHtml(text) {\n        if (!text) {\n            text = \"\";\n        }\n        text += \"\";\n        text = text\n            .replace(/&amp;/g, \"&\")\n            .replace(/&lt;/g, \"<\")\n            .replace(/&gt;/g, \">\")\n            .replace(/&quot;/g, '\"')\n            .replace(/&#039;/g, \"'\");\n        return text;\n    }\n\n    noteAdd(proj_id) {\n\n        this.isLoading = true;\n        this.note.proj_id = proj_id;\n        if (\n            this.note.note_text == undefined &&\n            this.note_text != null &&\n            this.note_text != \"\"\n        ) {\n            this.note.note_text = this.note_text;\n        }\n\n        this._notes.putNote(this.note).subscribe(res => {\n            this.note.user_creator = this.comments.creator;\n            this.isLoading = false;\n            if (res.data != null) {\n                this.getComments(proj_id);\n            } else {\n                this.toastr.warning(\"\", res.message);\n                $(\".textarea-comments\").val(\"\");\n            }\n        });\n\n        this.note = {};\n    }\n\n}\n\n\n\n// WEBPACK FOOTER //\n// ./app/components/projectview/projectview.component.js","module.exports = \"<button type=\\\"button\\\" [attr.id]=\\\"'myProject'+myProjectId\\\" (click)=\\\"showModalProject()\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n    style=\\\"display:none;\\\">\\n</button>\\n<div class=\\\"modal modal-task fade\\\" [attr.id]=\\\"'mdProjectView-'+myProjectId\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n        <div [attr.id]=\\\"'primerdiv'+myProjectId\\\" class=\\\"modal-content content_modal_projectView\\\">\\n            <div class=\\\"modal-header header-project\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                    <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <div style=\\\"overflow-y: scroll;max-height: 25px;\\\">\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>{{\\\" \\\" + project.proj_id + \\\"-\\\" +\\n                        project.proj_subject }}\\n                    </h4>\\n                </div>\\n            </div>\\n\\n            <div [attr.id]=\\\"'segundoDiv'+myProjectId\\\" class=\\\"modal-body body_modal_projectView\\\">\\n                <div class=\\\"row\\\">\\n                    <!--Listado opciones-->\\n                    <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\">\\n                        <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                            <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                                <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                                    id=\\\"tabsTaskview\\\">\\n                                    <li class=\\\"active\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#infoProj-{{project.proj_id}}\\\">Info</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"project.tasklist && project.tasklist.length > 0\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#projTasks-{{project.proj_id}}\\\">Tasks</a>\\n                                    </li>\\n                                    <li *ngIf=\\\"project.attachments && project.attachments.length > 0 \\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#projAttachments-{{project.proj_id}}\\\">Attachments</a>\\n                                    </li>\\n                                    <li>\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#projComment-{{project.proj_id}}\\\">Comments</a>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--. Listado opciones-->\\n\\n                    <!--Contenido secciones del project view-->\\n                    <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"min-height: 390px;\\\">\\n                        <div class=\\\"tab-content\\\">\\n                            <!--Informacion project-->\\n                            <div [attr.id]=\\\"'infoProj-'+project.proj_id\\\" class=\\\"tab-pane fade in active\\\">\\n                                <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creator</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.creator}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.applicant}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.groupname}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.proj_start}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">End Date</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.proj_end}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Estimated Points</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.proj_propoints}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.prod_name}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Done Points</label>\\n                                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{project.proj_compoints}}</p>\\n                                    </div>\\n                                    <div *ngIf=\\\"project.userssh && project.userssh.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                        style=\\\"float: left; text-align: left;\\\">\\n                                        <label class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 label-sqlx label_sharedWithTask_sqlx\\\">Shared\\n                                            with</label>\\n                                        <p class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 element_p_sqlx info_sharedWhitTask_sqlx\\\"\\n                                            *ngFor=\\\"let user_share of project.userssh\\\">{{user_share.completename}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"float: left;text-align: left;\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"project.proj_description\\\"\\n                                            style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--.Informacion project-->\\n\\n\\n                            <!--Tasks project-->\\n                            <div [attr.id]=\\\"'projTasks-'+project.proj_id\\\" class=\\\"tab-pane fade cont_tasksProject_sqlx\\\">\\n                                <div *ngFor=\\\"let task of project.tasklist\\\" class=\\\"div_taskProject_sqlx\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infoGeneralTask_sqlx\\\">\\n                                        <label class=\\\"control-label label-sqlx\\\">\\n                                            <i class=\\\"sq sq-statustasks iconTask_taskProj_sqlx\\\"></i>\\n                                            <span style=\\\"font-weight: bold; color: rgb(113, 113, 113);\\\">#\\n                                                {{task.task_id}} - {{task.task_subject}}</span>\\n                                        </label>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 divCol_descriptionTask_taskProj\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 12px;\\\">\\n                                            <label class=\\\"control-label label-sqlx label_infoDescriptionTask_taskProj_sqlx\\\">Description</label>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infoDescriptionTask_taskProj_sqlx\\\"\\n                                                [innerHTML]=\\\"task.task_description\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Creator</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.creator}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Assigned\\n                                                to</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.asigned}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Creation\\n                                                Date</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.task_date}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"min-height: 53px;\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Delivery\\n                                                Date</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.datedelivery ? task.datedelivery :\\n                                                []}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <label class=\\\"control-label label-sqlx descriptionTask_taskProj_sqlx\\\">Status</label>\\n                                            <p class=\\\"infoTask_taskProj_sqlx\\\">{{task.status}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 contenedor_informationProgressTaskProject_sqlx\\\">\\n                                            <label class=\\\" col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"><span class=\\\"descriptionProgressTask_taskProj_sqlx\\\">Progress</span><span\\n                                                    class=\\\"span_numeProgress_taskProject\\\">{{task.task_percentage}}%</span></label>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                <div *ngIf=\\\"task.task_percentage > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 progress-taskRelated-sqlx\\\">\\n                                                    <div class=\\\"infoBarraProgress_taskProject\\\" [ngStyle]=\\\"{ 'width': task.task_percentage  + '%' }\\\"></div>\\n                                                </div>\\n                                                <div *ngIf=\\\"task.task_percentage == 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 progress-taskRelated-sqlx\\\">\\n                                                    <div class=\\\"info_barraProgress_ifcero_taskRelated\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                            <!--.Tasks project-->\\n\\n                            <!--Attachments project-->\\n                            <div [attr.id]=\\\"'projAttachments-'+project.proj_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div *ngIf=\\\"!project.attachments\\\" class=\\\"row\\\">\\n\\n                                </div>\\n                                <div class=\\\"row\\\" *ngIf=\\\"project.attachments && project.attachments.length > 0\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"height: 407px;font-size: 14px;\\\">\\n                                        <label>Attachments ({{total_attachments}})</label>\\n                                        <ul class=\\\"ul_taskAttachments_taskview\\\">\\n                                            <li *ngFor=\\\"let att of project.attachments\\\" style=\\\"width:200px;margin:5px;height:225px;\\\"\\n                                                class=\\\"pull-left\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>\\n                                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                                        <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                        <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                        <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                                    </span>\\n                                                </a>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                        <i class=\\\"fa fa-paperclip\\\"></i>{{ att.pjat_alias }}</a>\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.pjat_size + ' bytes'}}\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--. Attachments project-->\\n\\n                            <!--Comments Project-->\\n                            <div [attr.id]=\\\"'projComment-'+project.proj_id\\\" class=\\\"tab-pane fade\\\">\\n                                <div class=\\\"row\\\" style=\\\" margin-right: 0px;\\\">\\n                                    <div class=\\\"box-footer box-comments commentsProjectView-squadlinx\\\">\\n                                        <div class=\\\"content-comments-users commentsContents_squadlinx\\\">\\n                                            <ul class=\\\"timeline comment-timeline-tk ul_mdTcomments_sqlx\\\">\\n                                                <li class=\\\"li_mdTcomments_sqlx\\\" *ngFor=\\\"let comment of comments\\\">\\n                                                    <div class=\\\"icon-team-sprint div_usuarioComment_sqlx\\\">\\n                                                        <i class=\\\"sq sq-working-team user-icon-team icono_usuarioComment_sqlx\\\"\\n                                                            aria-hidden=\\\"true\\\"></i>\\n                                                    </div>\\n                                                    <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                        <span class=\\\"time\\\">\\n                                                            {{comment.note_date}}</span>\\n                                                        <h3 class=\\\"timeline-header comment-timeline-header h3_commented_sqlx\\\">\\n                                                            <b class=\\\"name_creator_comment_sqlx\\\">{{comment.creator + \\\"\\n                                                                \\\"}}</b>\\n                                                            <span class=\\\"text_commented_sqlx\\\">Commented</span>\\n                                                        </h3>\\n                                                        <div class=\\\"timeline-body div_fatherComment_sqlx\\\">\\n                                                            <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                                                <div class=\\\"col-xs-12 col-md-12 div_comentUser_sqlx\\\">\\n                                                                    <div class=\\\"col-xs-12 col-md-12 comment-user divDiv_comentUser_sqlx\\\">\\n                                                                        <p class=\\\"comment-user p_comentUser_sqlx\\\">\\n                                                                            <i class=\\\"sq sq-comments icon_textComment_sqlx\\\"\\n                                                                                aria-hidden=\\\"true\\\"></i>\\n                                                                            <span class=\\\"text_comment_squadlinx\\\">{{escapeHtml(comment.note_text)}}</span>\\n                                                                        </p>\\n                                                                    </div>\\n                                                                    <div *ngIf=\\\"comment.childs.length > 0\\\" style=\\\"background-color:rgb(238, 242, 244)\\\">\\n                                                                        <div *ngFor=\\\"let comment_child of comment.childs\\\"\\n                                                                            class=\\\"col-xs-12 col-md-12 reply-user\\\"\\n                                                                            style=\\\"padding-top:10px;margin-left:0px; padding-top:0px;background-color:rgb(238, 242, 244);\\\">\\n                                                                            <div class=\\\"pull-right reply-comment\\\" style=\\\"color:rgb(130, 145, 152); background-color:rgb(238, 242, 244)!important; padding-right:0px;\\\">\\n                                                                                <div class=\\\"timeline-item comment-timeline-item\\\">\\n                                                                                    <span style=\\\"color: #999;float: right;font-size: 12px; padding-right: 0px;\\\">\\n                                                                                        {{comment_child.note_date}}</span>\\n                                                                                    <h3 class=\\\"reply-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                                        <b>{{comment_child.creator}}</b>\\n                                                                                        replied\\n                                                                                    </h3>\\n                                                                                    <p class=\\\"reply-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                                                                        <i class=\\\"sq sq-comments\\\"\\n                                                                                            aria-hidden=\\\"true\\\" style=\\\"color:rgb(68, 180, 248); font-size: 16px;\\\"></i>\\n                                                                                        {{escapeHtml(comment_child.note_text)}}\\n                                                                                    </p>\\n                                                                                </div>\\n                                                                            </div>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </li>\\n                                            </ul>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-footer footer_newsComments_sqlx\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-sm button_leaveComment_sqlx\\\" data-toggle=\\\"collapse\\\"\\n                                            [attr.data-target]=\\\"'#collapse-'+ project.proj_id\\\">\\n                                            <div class=\\\"pull-left\\\">\\n                                                <i class=\\\"sq sq-comments i_leaveComment_sqlx\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </div>\\n                                            <div class=\\\"pull-right div_leaveComment_sqlx\\\">\\n                                                Leave a Comment\\n                                            </div>\\n                                        </button>\\n                                        <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                                            <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                                            <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                                        </div>\\n                                        <div [attr.id]=\\\"'collapse-' + project.proj_id\\\" class=\\\"panel-collapse collapse panel_newComment_sqlx\\\">\\n                                            <textarea class=\\\"textarea-comments textarea_comments_squadlinx\\\" [(ngModel)]=\\\"note.note_text\\\"\\n                                                style=\\\"max-height: 130px;\\\"></textarea>\\n                                            <div class=\\\"pull-right\\\">\\n                                                <button class=\\\"btn btn-sm btn-sqlx button_publishComment_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"noteAdd(project.proj_id)\\\" [disabled]=\\\"note.text == ''\\\"\\n                                                    data-toggle=\\\"collapse\\\" [attr.data-target]=\\\"'#collapse-'+ project.proj_id\\\">Publish\\n                                                </button>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--. Comments Project-->\\n                        </div>\\n                    </div>\\n                    <!--. Contenido secciones del project view-->\\n                </div>\\n\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close\\n                </button>\\n            </div>\\n        </div>\\n    </div>\\n</div>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/projectview/projectview.template.html\n// module id = 828\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"tasks\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <!-- <h1><img src=\\\"img/newmegrey_mailbox.svg\\\" id=\\\"envelope-mail\\\" alt=\\\"\\\">Mail</h1> -->\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-mail\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> MAIL\\n            <small style=\\\"font-size:15px;\\\">Home</small>\\n        </h2>\\n        <!--<ol class=\\\"breadcrumb\\\">\\n<li><a href=\\\"#\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n<li class=\\\"active\\\">Mailbox</li>\\n</ol>-->\\n    </section>\\n    <section class=\\\"content-mail\\\">\\n        <div class=\\\"container-fluid\\\">\\n            <div class=\\\"row\\\" style=\\\"background:#fff\\\">\\n                <div class=\\\"col-xs-12 col-sm-4 col-lg-2\\\" style=\\\"padding: 0px;\\\">\\n                    <div class=\\\"left-col-opt-mail\\\">\\n                        <div>\\n                            <div class=\\\"box-header-col1\\\" style=\\\"height:50px;\\\">\\n                                <div class=\\\"box-tools\\\" style=\\\"margin-top:5px;\\\">\\n                                    <div class=\\\"has-feedback-mail\\\">\\n                                        <!--<input type=\\\"text\\\" class=\\\"form-control input-sm\\\" placeholder=\\\"Search\\\" [(ngModel)]=\\\"search\\\">-->\\n                                        <!--<span lass=\\\"glyphicon glyphicon-search form-control-feedback\\\"></span>-->\\n                                        <h4>Mailboxes</h4>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div style=\\\" width:100%;\\\">\\n                                <!-- <div style=\\\"overflow: scroll; width:100%; height:450px; margin-bottom:15px;\\\">\\n<p-tree [value]=\\\"foldersTree\\\" selectionMode=\\\"checkbox\\\" [(selection)]=\\\"selectedNodes\\\" (onNodeSelect)=\\\"updateSelect($event)\\\" (onNodeUnselect)=\\\"updateSelect($event)\\\"></p-tree>\\n</div> -->\\n                                <section class=\\\"sidebar-mail\\\">\\n                                    <ul class=\\\"sidebar-menu-mail\\\" style=\\\"padding-left: 16px;\\\">\\n                                        <!---->\\n                                        <li id=\\\"inbox-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-inbox\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Inbox</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"inbox-children\\\" class=\\\"treeview-menu-mail\\\" style=\\\"padding:0px;\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','INBOX')\\\">\\n                                                        <i class=\\\"sq sq-inbox\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n                                        <li id=\\\"draft-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-drafts\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Drafts</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"draft-children\\\" style=\\\"display:none;padding:0px;\\\" class=\\\"treeview-menu-mail\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','Drafts')\\\">\\n                                                        <i class=\\\"sq sq-drafts\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n                                        <li id=\\\"sent-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-sent\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Sent</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"sent-children\\\" style=\\\"display:none;padding:0px;\\\" class=\\\"treeview-menu-mail\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','Sent')\\\">\\n                                                        <i class=\\\"sq sq-sent\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n                                        <li id=\\\"junk-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-spam\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Spam</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"junk-children\\\" style=\\\"display:none;padding:0px;\\\" class=\\\"treeview-menu-mail\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','Junk')\\\">\\n                                                        <i class=\\\"sq sq-spam\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n\\n                                        <li id=\\\"trash-email\\\" class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\"\\n                                            (click)=\\\"showChildsMenu($event)\\\">\\n                                            <a>\\n                                                <i class=\\\"sq sq-trash\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Trash</span>\\n                                                <i class=\\\"fa fa-angle-left pull-right\\\"></i>\\n                                            </a>\\n                                            <ul id=\\\"trash-children\\\" style=\\\"display:none;padding:0px;\\\" class=\\\"treeview-menu-mail\\\">\\n                                                <li routerlinkactive=\\\"active\\\" *ngFor=\\\"let acc of mailaccounts\\\" style=\\\"padding:0px;\\\">\\n                                                    <a routerlink=\\\"#\\\" class=\\\"item-mail\\\" style=\\\"cursor:pointer;\\\" (click)=\\\"NewMailbox(acc.id,0,'','Trash')\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i> {{acc.name | truncate : 15}}\\n                                                    </a>\\n                                                </li>\\n                                            </ul>\\n                                        </li>\\n                                        <!---->\\n                                        <li class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\">\\n                                            <a style=\\\"cursor: pointer;\\\">\\n                                                <img src=\\\"img/groupsi_mailbox.svg\\\" id=\\\"groups-mail\\\" alt=\\\"\\\">\\n                                                <span>My groups</span>\\n                                            </a>\\n                                        </li>\\n                                        <!---->\\n                                        <li class=\\\"treeview ng-star-inserted\\\" routerlinkactive=\\\"active\\\">\\n                                            <a style=\\\"cursor: pointer;\\\" (click)=\\\"showSettings(1)\\\">\\n                                                <i class=\\\"sq sq-settings\\\" style=\\\"font-size: 20px;padding: 0;vertical-align: middle;\\\"></i>\\n                                                <span>Settings</span>\\n                                            </a>\\n                                        </li>\\n                                    </ul>\\n                                </section>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"activemenu == 0\\\" class=\\\"col-xs-12 col-sm-8 col-lg-3\\\" style=\\\"padding: 0;\\\">\\n                    <div class=\\\"box-header-mail with-border-mail\\\" style=\\\"height:50px;\\\">\\n                        <div style=\\\"float:left;\\\">\\n                            <h5 (click)=\\\"selectAll()\\\">\\n                                <i *ngIf=\\\"selmails.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                <i *ngIf=\\\"selmails.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i> Select All\\n                            </h5>\\n                        </div>\\n                        <div *ngIf=\\\"selmails.length > 0 \\\" style=\\\"float:right;\\\">\\n                            <h5 (click)=\\\"showActionMenu()\\\">Actions <i aria-hidden=\\\"true\\\" class=\\\"fa fa-code-fork\\\"></i></h5>\\n                        </div>\\n                        <div style=\\\"float:right;\\\">\\n                            <h5 (click)=\\\"showSortMenu()\\\" style=\\\"cursor:default;\\\">Sort by <i aria-hidden=\\\"true\\\" class=\\\"fa fa-code-fork\\\"></i></h5>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"box-body-mail\\\">\\n                        <div>\\n                            <div id=\\\"sort-menu\\\" class=\\\"order-menu\\\">\\n                                <p-listbox [options]=\\\"sortoptions\\\" [(ngModel)]=\\\"selectedOption\\\" [style]=\\\"{'width':'180px','margin':'0 auto'}\\\"\\n                                    optionLabel=\\\"label\\\" (click)=\\\"changeSortOption(selectedOption)\\\"></p-listbox>\\n                                <hr style=\\\"margin:0px;\\\">\\n                                <p-listbox [options]=\\\"sortorder\\\" [(ngModel)]=\\\"selectedOrder\\\" [style]=\\\"{'width':'180px','margin':'0 auto'}\\\"\\n                                    optionLabel=\\\"label\\\" (click)=\\\"changeSortOption(selectedOption)\\\"></p-listbox>\\n                            </div>\\n                            <div id=\\\"action-menu\\\" class=\\\"order-menu\\\">\\n                                <ul style=\\\"list-style-type: none; padding-left: 20px;\\\" class=\\\"radio\\\">\\n                                    <li (click)=\\\"emailAction('read')\\\">Mark as read</li>\\n                                    <li (click)=\\\"emailAction('unread')\\\">Mark as unread</li>\\n                                    <li (click)=\\\"emailAction('trash')\\\">Move to trash</li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                        <div style=\\\"height:600px;overflow:scroll;\\\">\\n                            <div *ngIf=\\\"spinner == true && emails.length == 0\\\" class=\\\"sk-fading-circle\\\">\\n                                <div class=\\\"sk-circle1 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle2 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle3 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle4 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle5 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle6 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle7 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle8 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle9 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle10 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle11 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle12 sk-circle\\\"></div>\\n                            </div>\\n                            <div id=\\\"mail-{{email.number}}acc-{{email.accountid}}\\\" class=\\\"inbox_mail email_element\\\" *ngFor=\\\"let email of emails | filterfield : { pos: posFlag, text: selectedFlag } | filterfield : { pos: posFolder, text: selectedFolders } | paginate : { currp : currentpage, limit : limitpage} \\\" (click)=\\\"streamMessage(email)\\\" [ngStyle]=\\\"email.proj_id ? { 'background': 'rgba(255, 0, 0, 0.13)' } : {}\\\" [ngClass]=\\\"{'email_unread': email.status == 'U','email_selected': selmails.indexOf(email.number) >= 0}\\\">\\n                                <div *ngIf=\\\"email.sender != '' || email.sender != null\\\">\\n                                    <p><i id=\\\"unread{{email.number}}{{email.accountid}}\\\" *ngIf=\\\"email.status == 'U'\\\"\\n                                            class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(25,110,198);margin-right:10px;\\\"></i>{{email.sender\\n                                        | truncate : 15}}<i *ngIf=\\\"email.attachments.length > 0\\\" class=\\\"fa fa-paperclip\\\"\\n                                            aria-hidden=\\\"true\\\" style=\\\"color:rgb(25,110,198)\\\"></i></p>\\n                                </div>\\n                                <p id=\\\"inbox_date\\\">{{calculateTime(email.date)}}</p>\\n                                <div *ngIf=\\\"email.subject && (email.subject != '' || email.subject != null)\\\">\\n                                    <p>{{email.subject | truncate : 90}}</p>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"height:70px;\\\">\\n                        <div class=\\\"mailbox-controls\\\">\\n                            <!-- Check all button -->\\n                            <!--<button type=\\\"button\\\" class=\\\"btn btn-default btn-sm checkbox-toggle\\\"><i class=\\\"fa fa-square-o\\\"></i>\\n                            </button>-->\\n                            <!--<div class=\\\"btn-group\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-trash-o\\\"></i></button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-reply\\\"></i></button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-share\\\"></i></button>\\n                            </div>-->\\n                            <!-- /.btn-group -->\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-refresh\\\"></i></button>\\n                            <div class=\\\"pull-right\\\">\\n                                {{ topmail }} - {{ botmail }} / {{ totalmsg }}\\n                                <div class=\\\"btn-group\\\">\\n                                    <button type=\\\"button\\\" [disabled]=\\\" (topmail == 1 || topmail == 0)\\\" class=\\\"btn btn-default btn-sm\\\"\\n                                        (click)=\\\"setCurPage(0)\\\"><i class=\\\"fa fa-chevron-left\\\"></i></button>\\n                                    <button type=\\\"button\\\" [disabled]=\\\" (botmail == totalmsg)\\\" class=\\\"btn btn-default btn-sm\\\"\\n                                        (click)=\\\"setCurPage(1)\\\"><i class=\\\"fa fa-chevron-right\\\"></i></button>\\n                                </div>\\n                                <!-- /.btn-group -->\\n                            </div>\\n                            <!-- /.pull-right -->\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"activemenu == 0\\\" class=\\\"col-xs-12 col-sm-12 col-lg-7\\\" style=\\\"padding: 0;\\\">\\n                    <div>\\n                        <div class=\\\"box-header-mail with-border-mail\\\" style=\\\"height:50px;\\\">\\n                            <div class=\\\"btn-group\\\" style=\\\"float:left;\\\">\\n                                <h5 style=\\\"cursor:default;\\\" (click)=\\\"showNewMessage()\\\"><i class=\\\"sq sq-mail\\\"></i>New\\n                                    Message</h5>\\n                            </div>\\n                            <div class=\\\"btn-group\\\" style=\\\"float: right;\\\">\\n                                <div class=\\\"mailbox-controls\\\">\\n                                    <div>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/archive_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/trash_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/spam_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/reply_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/replyall_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                                            <img src=\\\"img/label_mailbox.svg\\\" id=\\\"clip\\\">\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div>\\n                            <div *ngIf=\\\"spinner == true && !mymail.htmlmsg && emails.length > 0\\\" class=\\\"sk-fading-circle \\\">\\n                                <div class=\\\"sk-circle1 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle2 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle3 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle4 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle5 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle6 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle7 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle8 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle9 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle10 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle11 sk-circle\\\"></div>\\n                                <div class=\\\"sk-circle12 sk-circle\\\"></div>\\n                            </div>\\n                            <div *ngIf=\\\"mymail && mymail.htmlmsg\\\" class=\\\"mailbox-messages\\\">\\n                                <div class=\\\"inbound-info\\\">\\n                                    <div class=\\\"col-lg-6 inbound-data\\\">\\n                                        <p>{{mymail.sender_personal}}</p>\\n                                        <p>{{mymail.subject}}</p>\\n                                        <p>TO: {{mymail.to}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-lg-6 inbound-date\\\">\\n                                        <img src=\\\"img/inbox_mailbox.svg\\\" id=\\\"inbox\\\">{{mymail.date}}\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"inbound-attachment\\\">\\n                                    <div class=\\\"col-xs-1 attachment-data\\\" style=\\\"border-right: 1px solid black\\\">\\n                                        <img src=\\\"img/clip_mailbox.svg\\\" id=\\\"clip\\\" alt=\\\"\\\">\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"mail-message\\\">\\n                                    <iframe id=\\\"someFrame\\\" sandbox=\\\"allow-scripts allow-same-origin allow-top-navigation allow-popups allow-forms\\\"\\n                                        style=\\\"width: 100%; min-height: 600px; border: 0px;\\\" #iframe></iframe>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"activemenu==1\\\" class=\\\"col-xs-12 col-sm-8 col-lg-3\\\" style=\\\"padding: 0;\\\">\\n                    <div class=\\\"box-header-mail with-border-mail\\\" style=\\\"height:50px;\\\">\\n                        Account Manager\\n                    </div>\\n                    <div class=\\\"box-body-mail\\\" style=\\\"min-height:500px;border-right:1px solid #dce3e6;\\\">\\n                        <div class=\\\"inbox_mail\\\" *ngFor=\\\"let mailacc of mailaccounts\\\" (click)=\\\"getAccountDetails(mailacc)\\\">\\n                            <p><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" [ngStyle]=\\\"{'color': mailacc.status}\\\" style=\\\"margin-right:10px;\\\"></i>{{mailacc.name\\n                                | truncate : 20}}</p>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"activemenu == 1\\\" class=\\\"col-xs-12 col-sm-12 col-lg-7\\\" style=\\\"padding: 0;\\\">\\n                    <div class=\\\"box-header-mail with-border-mail\\\" style=\\\"height:50px;\\\">\\n                        <div class=\\\"btn-group\\\" style=\\\"float: right;\\\">\\n                            <div class=\\\"mailbox-controls\\\">\\n                                <div>\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"editAccount()\\\"><i\\n                                            class=\\\"sq sq-quickedit\\\"></i></button>\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"deleteAccount()\\\"><i\\n                                            class=\\\"sq sq-trash\\\"></i></button>\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-toggle=\\\"modal\\\" data-target=\\\"#newMailAcccount\\\"\\n                                        style=\\\"width:auto!important;background-color: #55a0f5;\\\">Create New Account</button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"mail-message\\\" style=\\\"color:#000000;padding:10px;\\\">\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-4\\\" style=\\\"padding:8px;\\\">Host Name:</div>\\n                                <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        class=\\\"input-user\\\" [(ngModel)]=\\\"accountDetails.mbac_host\\\"></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-4\\\" style=\\\"padding:8px;\\\">Email Address:</div>\\n                                <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        class=\\\"input-user\\\" [(ngModel)]=\\\"accountDetails.mbac_email\\\"></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-4\\\" style=\\\"padding:8px;\\\">Password:</div>\\n                                <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        class=\\\"input-user\\\" [(ngModel)]=\\\"accountDetails.mbac_password\\\"></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-4\\\" style=\\\"padding:8px;\\\">Mailbox Description:</div>\\n                                <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        class=\\\"input-user\\\" [(ngModel)]=\\\"accountDetails.mbus_description\\\"></div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddproject\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n                    <h4 class=\\\"modal-title\\\">New project</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Subject</label>\\n                                <input class=\\\"form-control\\\" [(ngModel)]=\\\"project.proj_subject\\\" name=\\\"project_subject\\\"\\n                                    placeholder=\\\"Subject\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"applicantlbl\\\"\\n                                    [(ngModel)]=\\\"project.user_applicant\\\" placeholder=\\\"Select a user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Group</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\" [(ngModel)]=\\\"project.group_assigned\\\"\\n                                    placeholder=\\\"Select a group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete [(ngModel)]=\\\"project.users\\\" [suggestions]=\\\"usersCRM\\\"\\n                                        (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                        placeholder=\\\"Share\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Product</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"project.prod_id\\\"\\n                                    placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Category</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"categories\\\"\\n                                    [(ngModel)]=\\\"project.id_caproject\\\" placeholder=\\\"Select a Category\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Description</label>\\n                                <p-editor [(ngModel)]=\\\"project.proj_description\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"project.attachments.length > 0\\\">\\n                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of project.attachments\\\">\\n                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type && (att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/')\\\"></i>\\n                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type && att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                            </span>\\n                            <div class=\\\"mailbox-attachment-info\\\">\\n                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i\\n                                            class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                </span>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveproject()\\\"><i\\n                                class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                            for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdprojectView\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n                    <h4 class=\\\"modal-title\\\">project #{{ project.proj_id }}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Subject</label>\\n                                <p>{{ project.proj_subject }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>User Applicant</label>\\n                                <p>{{ project.applicant }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Group</label>\\n                                <p>{{ project.groupname }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <div>\\n                                    <span *ngFor=\\\"let uss of project.userssh\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px; display: inline-block;\\\">{{uss.user_name\\n                                        + ' ' + uss.user_lastname }}</span>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Product</label>\\n                                <p>{{ project.prod_name }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Category</label>\\n                                <p>{{ project.category }}</p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Description</label>\\n                                <div [innerHTML]=\\\"project.proj_description\\\"></div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"project.attachments && project.attachments.length > 0\\\">\\n                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of project.attachments\\\">\\n                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                    <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                </span></a>\\n                            <div class=\\\"mailbox-attachment-info\\\">\\n                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">{{ att.file_name\\n                                    }}</a>\\n                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{ att.size + ' bytes' }}\\n                                </span>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mailEdit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n                    <h4 class=\\\"modal-title\\\">Compose a Reply </h4>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>To: </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete [(ngModel)]=\\\"mail.emails\\\" [suggestions]=\\\"listmails\\\"\\n                                        (completeMethod)=\\\"filterMultipleEmails($event)\\\" styleClass=\\\"wid200\\\" [minLength]=\\\"1\\\"\\n                                        placeholder=\\\"{{mymail.mabo_sender}}\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <label>Subject:</label>\\n                                <input class=\\\"form-control\\\" [(ngModel)]=\\\"mail.mail_subject\\\" placeholder=\\\"RE: {{mymail.mabo_subject}}\\\">\\n                            </div>\\n                            <div class=\\\"btn-group\\\" role=\\\"group\\\">\\n                                <button *ngFor=\\\"let tmp of templates\\\" (click)=\\\"changeTmp(tmp)\\\">{{tmp.mtpl_name}}</button>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <p-editor [(ngModel)]=\\\"mail.content\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n                            </div>\\n                            <div class=\\\"btn-group\\\" role=\\\"group\\\">\\n                                <button *ngFor=\\\"let sign of signatures\\\" (click)=\\\"changeSgn(sign)\\\">{{sign.mtpl_name}}</button>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"pull-right\\\">\\n                                <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" [disabled]=\\\" (!mail.emails || mail.emails == '') || (!mail.mail_subject || mail.mail_subject == '') || (!mail.content || mail.content == '')\\\"\\n                                    (click)=\\\"saveMail()\\\">\\n                                    <i class=\\\"fa fa-paper-plane-o\\\"></i> Send</button>\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                            </div>\\n                            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                                for=\\\"mail-file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                            </label>\\n                            <input id=\\\"mail-file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                style=\\\"display: none;\\\" (change)=\\\"onChangeMail($event)\\\" />\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"newMailAcccount\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">New Mail Account </h4>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Incoming mail server </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <input class=\\\"form-control\\\" [(ngModel)]=\\\"newaccount.host\\\" placeholder=\\\"Incoming mail server...\\\">\\n                                </span>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <label>User name </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <input class=\\\"form-control\\\" [(ngModel)]=\\\"newaccount.username\\\" placeholder=\\\"email@account.com\\\">\\n                                </span>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <label>Password </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <input type=\\\"password\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"newaccount.password\\\"\\n                                        placeholder=\\\"Password...\\\">\\n                                </span>\\n                            </div>\\n                            <div class=\\\"form-group\\\">\\n                                <label>Description </label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <input class=\\\"form-control\\\" [(ngModel)]=\\\"newaccount.description\\\" placeholder=\\\"Description...\\\">\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"pull-right\\\">\\n                                <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" [disabled]=\\\" (!newaccount.host || newaccount.host == '') || (!newaccount.username || newaccount.username == '') || (!newaccount.password || newaccount.password == '')\\\"\\n                                    (click)=\\\"saveNewAccount(newaccount)\\\">\\n                                    <i class=\\\"fa fa-paper-plane-o\\\"></i> Save</button>\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"NewMessage\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" style=\\\"border-radius: 15px;\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header header-event\\\" style=\\\"color:#829198\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:#829198;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:#829198;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\"><i class=\\\"sq sq-mail\\\" style=\\\"font-size: 24px;vertical-align: middle;\\\"></i><span>\\n                            New Message</span></h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-2\\\" style=\\\"padding:8px;\\\">From:</div>\\n                                <p-multiSelect [options]=\\\"fromOptions\\\" [(ngModel)]=\\\"newMessage.from\\\" (onChange)=\\\"changeFromOption($event)\\\"\\n                                    filter=\\\"false\\\"></p-multiSelect>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-2\\\" style=\\\"padding:8px;\\\">To:</div>\\n                                <div class=\\\"col-md-10\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        type=\\\"email\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"newMessage.to\\\" multiple></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-2\\\" style=\\\"padding:8px;\\\">CC:</div>\\n                                <div class=\\\"col-md-10\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        type=\\\"email\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"newMessage.cc\\\" multiple></div>\\n                            </div>\\n                            <div style=\\\"height:40px;border-bottom:1px solid #dce3e6;margin-bottom:5px;\\\">\\n                                <div class=\\\"col-md-2\\\" style=\\\"padding:8px;\\\">Subject:</div>\\n                                <div class=\\\"col-md-10\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;padding-top:5px;\\\"><input\\n                                        type=\\\"text\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"newMessage.subject\\\" multiple></div>\\n                            </div>\\n                            <!-- <div class=\\\"form-group\\\">\\n                                <label>Message</label>\\n                                <p-editor [(ngModel)]=\\\"newMessage.body\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n                            </div> -->\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_email\\\" [ngClass]=\\\"{'active':tagMenuNew == 1}\\\">\\n                                <a id=\\\"a_descriptionTask_newEmail\\\" data-toggle=\\\"tab\\\" href=\\\"#description_newEmail\\\" (click)=\\\"setPageNewEmail(1)\\\">Message</a>\\n                            </li>\\n                            <li id=\\\"li_attachments_email\\\" *ngIf=\\\"newMessage.attachments && newMessage.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenuNew == 2}\\\">\\n                                <a id=\\\"a_attachmentsTask_newEmail\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_newEmail\\\" (click)=\\\"setPageNewEmail(2)\\\">Attachments\\n                                    <span>({{newMessage.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuNew == 1\\\" id=\\\"description_newTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_newEmail\\\" name=\\\"divContenedor_description_newEmail\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editorDescription_newEmail\\\" name=\\\"editorDescription_newEmail\\\" [(ngModel)]=\\\"newMessage.body\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                        <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\"\\n                                                  type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\"\\n                                                  type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenuNew == 2 && newMessage.attachments && newMessage.attachments.length > 0\\\" id=\\\"attachments_newEmail\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div id=\\\"divAttachments_newEmail\\\" name=\\\"divAttachments_newEmail\\\" class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of newMessage.attachments\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                <i class=\\\"sq sq-documents-related\\\"\\n                                   *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                               <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                  style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                <i class=\\\"sq sq-doc\\\"\\n                                   *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                <i class=\\\"sq sq-word\\\"\\n                                   *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                <i class=\\\"sq sq-excel\\\"\\n                                   *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                <i class=\\\"sq sq-compress\\\"\\n                                   *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                <i class=\\\"sq sq-powerpoint\\\"\\n                                   *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                            </span>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <i class=\\\"sq sq-attach-files\\\"></i>{{ att.name }}\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                    <button id=\\\"button_1\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                            (click)=\\\"deleteAttachment(att)\\\">\\n                                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #008BCB; display: inline-block; padding: 6px 12px; cursor: pointer; border-radius: 15px;background-color: #008BCB; color:white;\\\"\\n                            for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                            <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"sendMail(newMessage)\\\"\\n                            [disabled]=\\\"(!newMessage || newMessage.to == '' || newMessage.to == 'undefined')\\\">\\n                            Send</button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"saveDraft(newMessage)\\\" style=\\\"background:#008BCB;width:115px;margin-right:10px;\\\"\\n                            [disabled]=\\\"(!newMessage || newMessage.to == '' || newMessage.to == 'undefined')\\\">\\n                            Save as Draft</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/mail/mailbox.template.html\n// module id = 829\n// module chunks = 0","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n  function getOwnPropertyDescriptors(obj) {\n    var keys = Object.keys(obj);\n    var descriptors = {};\n    for (var i = 0; i < keys.length; i++) {\n      descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n    }\n    return descriptors;\n  };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n  if (!isString(f)) {\n    var objects = [];\n    for (var i = 0; i < arguments.length; i++) {\n      objects.push(inspect(arguments[i]));\n    }\n    return objects.join(' ');\n  }\n\n  var i = 1;\n  var args = arguments;\n  var len = args.length;\n  var str = String(f).replace(formatRegExp, function(x) {\n    if (x === '%%') return '%';\n    if (i >= len) return x;\n    switch (x) {\n      case '%s': return String(args[i++]);\n      case '%d': return Number(args[i++]);\n      case '%j':\n        try {\n          return JSON.stringify(args[i++]);\n        } catch (_) {\n          return '[Circular]';\n        }\n      default:\n        return x;\n    }\n  });\n  for (var x = args[i]; i < len; x = args[++i]) {\n    if (isNull(x) || !isObject(x)) {\n      str += ' ' + x;\n    } else {\n      str += ' ' + inspect(x);\n    }\n  }\n  return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n  if (typeof process !== 'undefined' && process.noDeprecation === true) {\n    return fn;\n  }\n\n  // Allow for deprecating things in the process of starting up.\n  if (typeof process === 'undefined') {\n    return function() {\n      return exports.deprecate(fn, msg).apply(this, arguments);\n    };\n  }\n\n  var warned = false;\n  function deprecated() {\n    if (!warned) {\n      if (process.throwDeprecation) {\n        throw new Error(msg);\n      } else if (process.traceDeprecation) {\n        console.trace(msg);\n      } else {\n        console.error(msg);\n      }\n      warned = true;\n    }\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n  if (isUndefined(debugEnviron))\n    debugEnviron = process.env.NODE_DEBUG || '';\n  set = set.toUpperCase();\n  if (!debugs[set]) {\n    if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n      var pid = process.pid;\n      debugs[set] = function() {\n        var msg = exports.format.apply(exports, arguments);\n        console.error('%s %d: %s', set, pid, msg);\n      };\n    } else {\n      debugs[set] = function() {};\n    }\n  }\n  return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n  // default options\n  var ctx = {\n    seen: [],\n    stylize: stylizeNoColor\n  };\n  // legacy...\n  if (arguments.length >= 3) ctx.depth = arguments[2];\n  if (arguments.length >= 4) ctx.colors = arguments[3];\n  if (isBoolean(opts)) {\n    // legacy...\n    ctx.showHidden = opts;\n  } else if (opts) {\n    // got an \"options\" object\n    exports._extend(ctx, opts);\n  }\n  // set default options\n  if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n  if (isUndefined(ctx.depth)) ctx.depth = 2;\n  if (isUndefined(ctx.colors)) ctx.colors = false;\n  if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n  if (ctx.colors) ctx.stylize = stylizeWithColor;\n  return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n  'bold' : [1, 22],\n  'italic' : [3, 23],\n  'underline' : [4, 24],\n  'inverse' : [7, 27],\n  'white' : [37, 39],\n  'grey' : [90, 39],\n  'black' : [30, 39],\n  'blue' : [34, 39],\n  'cyan' : [36, 39],\n  'green' : [32, 39],\n  'magenta' : [35, 39],\n  'red' : [31, 39],\n  'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n  'special': 'cyan',\n  'number': 'yellow',\n  'boolean': 'yellow',\n  'undefined': 'grey',\n  'null': 'bold',\n  'string': 'green',\n  'date': 'magenta',\n  // \"name\": intentionally not styling\n  'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n  var style = inspect.styles[styleType];\n\n  if (style) {\n    return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n           '\\u001b[' + inspect.colors[style][1] + 'm';\n  } else {\n    return str;\n  }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n  return str;\n}\n\n\nfunction arrayToHash(array) {\n  var hash = {};\n\n  array.forEach(function(val, idx) {\n    hash[val] = true;\n  });\n\n  return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n  // Provide a hook for user-specified inspect functions.\n  // Check that value is an object with an inspect function on it\n  if (ctx.customInspect &&\n      value &&\n      isFunction(value.inspect) &&\n      // Filter out the util module, it's inspect function is special\n      value.inspect !== exports.inspect &&\n      // Also filter out any prototype objects using the circular check.\n      !(value.constructor && value.constructor.prototype === value)) {\n    var ret = value.inspect(recurseTimes, ctx);\n    if (!isString(ret)) {\n      ret = formatValue(ctx, ret, recurseTimes);\n    }\n    return ret;\n  }\n\n  // Primitive types cannot have properties\n  var primitive = formatPrimitive(ctx, value);\n  if (primitive) {\n    return primitive;\n  }\n\n  // Look up the keys of the object.\n  var keys = Object.keys(value);\n  var visibleKeys = arrayToHash(keys);\n\n  if (ctx.showHidden) {\n    keys = Object.getOwnPropertyNames(value);\n  }\n\n  // IE doesn't make error fields non-enumerable\n  // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n  if (isError(value)\n      && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n    return formatError(value);\n  }\n\n  // Some type of object without properties can be shortcutted.\n  if (keys.length === 0) {\n    if (isFunction(value)) {\n      var name = value.name ? ': ' + value.name : '';\n      return ctx.stylize('[Function' + name + ']', 'special');\n    }\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    }\n    if (isDate(value)) {\n      return ctx.stylize(Date.prototype.toString.call(value), 'date');\n    }\n    if (isError(value)) {\n      return formatError(value);\n    }\n  }\n\n  var base = '', array = false, braces = ['{', '}'];\n\n  // Make Array say that they are Array\n  if (isArray(value)) {\n    array = true;\n    braces = ['[', ']'];\n  }\n\n  // Make functions say that they are functions\n  if (isFunction(value)) {\n    var n = value.name ? ': ' + value.name : '';\n    base = ' [Function' + n + ']';\n  }\n\n  // Make RegExps say that they are RegExps\n  if (isRegExp(value)) {\n    base = ' ' + RegExp.prototype.toString.call(value);\n  }\n\n  // Make dates with properties first say the date\n  if (isDate(value)) {\n    base = ' ' + Date.prototype.toUTCString.call(value);\n  }\n\n  // Make error with message first say the error\n  if (isError(value)) {\n    base = ' ' + formatError(value);\n  }\n\n  if (keys.length === 0 && (!array || value.length == 0)) {\n    return braces[0] + base + braces[1];\n  }\n\n  if (recurseTimes < 0) {\n    if (isRegExp(value)) {\n      return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n    } else {\n      return ctx.stylize('[Object]', 'special');\n    }\n  }\n\n  ctx.seen.push(value);\n\n  var output;\n  if (array) {\n    output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n  } else {\n    output = keys.map(function(key) {\n      return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n    });\n  }\n\n  ctx.seen.pop();\n\n  return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n  if (isUndefined(value))\n    return ctx.stylize('undefined', 'undefined');\n  if (isString(value)) {\n    var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n                                             .replace(/'/g, \"\\\\'\")\n                                             .replace(/\\\\\"/g, '\"') + '\\'';\n    return ctx.stylize(simple, 'string');\n  }\n  if (isNumber(value))\n    return ctx.stylize('' + value, 'number');\n  if (isBoolean(value))\n    return ctx.stylize('' + value, 'boolean');\n  // For some reason typeof null is \"object\", so special case here.\n  if (isNull(value))\n    return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n  return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n  var output = [];\n  for (var i = 0, l = value.length; i < l; ++i) {\n    if (hasOwnProperty(value, String(i))) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          String(i), true));\n    } else {\n      output.push('');\n    }\n  }\n  keys.forEach(function(key) {\n    if (!key.match(/^\\d+$/)) {\n      output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n          key, true));\n    }\n  });\n  return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n  var name, str, desc;\n  desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n  if (desc.get) {\n    if (desc.set) {\n      str = ctx.stylize('[Getter/Setter]', 'special');\n    } else {\n      str = ctx.stylize('[Getter]', 'special');\n    }\n  } else {\n    if (desc.set) {\n      str = ctx.stylize('[Setter]', 'special');\n    }\n  }\n  if (!hasOwnProperty(visibleKeys, key)) {\n    name = '[' + key + ']';\n  }\n  if (!str) {\n    if (ctx.seen.indexOf(desc.value) < 0) {\n      if (isNull(recurseTimes)) {\n        str = formatValue(ctx, desc.value, null);\n      } else {\n        str = formatValue(ctx, desc.value, recurseTimes - 1);\n      }\n      if (str.indexOf('\\n') > -1) {\n        if (array) {\n          str = str.split('\\n').map(function(line) {\n            return '  ' + line;\n          }).join('\\n').substr(2);\n        } else {\n          str = '\\n' + str.split('\\n').map(function(line) {\n            return '   ' + line;\n          }).join('\\n');\n        }\n      }\n    } else {\n      str = ctx.stylize('[Circular]', 'special');\n    }\n  }\n  if (isUndefined(name)) {\n    if (array && key.match(/^\\d+$/)) {\n      return str;\n    }\n    name = JSON.stringify('' + key);\n    if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n      name = name.substr(1, name.length - 2);\n      name = ctx.stylize(name, 'name');\n    } else {\n      name = name.replace(/'/g, \"\\\\'\")\n                 .replace(/\\\\\"/g, '\"')\n                 .replace(/(^\"|\"$)/g, \"'\");\n      name = ctx.stylize(name, 'string');\n    }\n  }\n\n  return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n  var numLinesEst = 0;\n  var length = output.reduce(function(prev, cur) {\n    numLinesEst++;\n    if (cur.indexOf('\\n') >= 0) numLinesEst++;\n    return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n  }, 0);\n\n  if (length > 60) {\n    return braces[0] +\n           (base === '' ? '' : base + '\\n ') +\n           ' ' +\n           output.join(',\\n  ') +\n           ' ' +\n           braces[1];\n  }\n\n  return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n  return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return isObject(e) &&\n      (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n  return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n              'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n  var d = new Date();\n  var time = [pad(d.getHours()),\n              pad(d.getMinutes()),\n              pad(d.getSeconds())].join(':');\n  return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n  console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n *     prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n  // Don't do anything if add isn't an object\n  if (!add || !isObject(add)) return origin;\n\n  var keys = Object.keys(add);\n  var i = keys.length;\n  while (i--) {\n    origin[keys[i]] = add[keys[i]];\n  }\n  return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n  return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n  if (typeof original !== 'function')\n    throw new TypeError('The \"original\" argument must be of type Function');\n\n  if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n    var fn = original[kCustomPromisifiedSymbol];\n    if (typeof fn !== 'function') {\n      throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n    }\n    Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n      value: fn, enumerable: false, writable: false, configurable: true\n    });\n    return fn;\n  }\n\n  function fn() {\n    var promiseResolve, promiseReject;\n    var promise = new Promise(function (resolve, reject) {\n      promiseResolve = resolve;\n      promiseReject = reject;\n    });\n\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n    args.push(function (err, value) {\n      if (err) {\n        promiseReject(err);\n      } else {\n        promiseResolve(value);\n      }\n    });\n\n    try {\n      original.apply(this, args);\n    } catch (err) {\n      promiseReject(err);\n    }\n\n    return promise;\n  }\n\n  Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n  if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n    value: fn, enumerable: false, writable: false, configurable: true\n  });\n  return Object.defineProperties(\n    fn,\n    getOwnPropertyDescriptors(original)\n  );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n  // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n  // Because `null` is a special error value in callbacks which means \"no error\n  // occurred\", we error-wrap so the callback consumer can distinguish between\n  // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n  if (!reason) {\n    var newReason = new Error('Promise was rejected with a falsy value');\n    newReason.reason = reason;\n    reason = newReason;\n  }\n  return cb(reason);\n}\n\nfunction callbackify(original) {\n  if (typeof original !== 'function') {\n    throw new TypeError('The \"original\" argument must be of type Function');\n  }\n\n  // We DO NOT return the promise as it gives the user a false sense that\n  // the promise is actually somehow related to the callback's execution\n  // and that the callback throwing will reject the promise.\n  function callbackified() {\n    var args = [];\n    for (var i = 0; i < arguments.length; i++) {\n      args.push(arguments[i]);\n    }\n\n    var maybeCb = args.pop();\n    if (typeof maybeCb !== 'function') {\n      throw new TypeError('The last argument must be of type Function');\n    }\n    var self = this;\n    var cb = function() {\n      return maybeCb.apply(self, arguments);\n    };\n    // In true node style we process the callback on `nextTick` with all the\n    // implications (stack, `uncaughtException`, `async_hooks`)\n    original.apply(this, args)\n      .then(function(ret) { process.nextTick(cb, null, ret) },\n            function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n  }\n\n  Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n  Object.defineProperties(callbackified,\n                          getOwnPropertyDescriptors(original));\n  return callbackified;\n}\nexports.callbackify = callbackify;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/node-libs-browser/node_modules/util/util.js\n// module id = 830\n// module chunks = 0","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n    throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n    throw new Error('clearTimeout has not been defined');\n}\n(function () {\n    try {\n        if (typeof setTimeout === 'function') {\n            cachedSetTimeout = setTimeout;\n        } else {\n            cachedSetTimeout = defaultSetTimout;\n        }\n    } catch (e) {\n        cachedSetTimeout = defaultSetTimout;\n    }\n    try {\n        if (typeof clearTimeout === 'function') {\n            cachedClearTimeout = clearTimeout;\n        } else {\n            cachedClearTimeout = defaultClearTimeout;\n        }\n    } catch (e) {\n        cachedClearTimeout = defaultClearTimeout;\n    }\n} ())\nfunction runTimeout(fun) {\n    if (cachedSetTimeout === setTimeout) {\n        //normal enviroments in sane situations\n        return setTimeout(fun, 0);\n    }\n    // if setTimeout wasn't available but was latter defined\n    if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n        cachedSetTimeout = setTimeout;\n        return setTimeout(fun, 0);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedSetTimeout(fun, 0);\n    } catch(e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n            return cachedSetTimeout.call(null, fun, 0);\n        } catch(e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n            return cachedSetTimeout.call(this, fun, 0);\n        }\n    }\n\n\n}\nfunction runClearTimeout(marker) {\n    if (cachedClearTimeout === clearTimeout) {\n        //normal enviroments in sane situations\n        return clearTimeout(marker);\n    }\n    // if clearTimeout wasn't available but was latter defined\n    if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n        cachedClearTimeout = clearTimeout;\n        return clearTimeout(marker);\n    }\n    try {\n        // when when somebody has screwed with setTimeout but no I.E. maddness\n        return cachedClearTimeout(marker);\n    } catch (e){\n        try {\n            // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n            return cachedClearTimeout.call(null, marker);\n        } catch (e){\n            // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n            // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n            return cachedClearTimeout.call(this, marker);\n        }\n    }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n    if (!draining || !currentQueue) {\n        return;\n    }\n    draining = false;\n    if (currentQueue.length) {\n        queue = currentQueue.concat(queue);\n    } else {\n        queueIndex = -1;\n    }\n    if (queue.length) {\n        drainQueue();\n    }\n}\n\nfunction drainQueue() {\n    if (draining) {\n        return;\n    }\n    var timeout = runTimeout(cleanUpNextTick);\n    draining = true;\n\n    var len = queue.length;\n    while(len) {\n        currentQueue = queue;\n        queue = [];\n        while (++queueIndex < len) {\n            if (currentQueue) {\n                currentQueue[queueIndex].run();\n            }\n        }\n        queueIndex = -1;\n        len = queue.length;\n    }\n    currentQueue = null;\n    draining = false;\n    runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n    var args = new Array(arguments.length - 1);\n    if (arguments.length > 1) {\n        for (var i = 1; i < arguments.length; i++) {\n            args[i - 1] = arguments[i];\n        }\n    }\n    queue.push(new Item(fun, args));\n    if (queue.length === 1 && !draining) {\n        runTimeout(drainQueue);\n    }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n    this.fun = fun;\n    this.array = array;\n}\nItem.prototype.run = function () {\n    this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n    throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n    throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/process/browser.js\n// module id = 831\n// module chunks = 0","module.exports = function isBuffer(arg) {\n  return arg && typeof arg === 'object'\n    && typeof arg.copy === 'function'\n    && typeof arg.fill === 'function'\n    && typeof arg.readUInt8 === 'function';\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/node-libs-browser/node_modules/util/support/isBufferBrowser.js\n// module id = 832\n// module chunks = 0","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    ctor.prototype = Object.create(superCtor.prototype, {\n      constructor: {\n        value: ctor,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      }\n    });\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor\n    var TempCtor = function () {}\n    TempCtor.prototype = superCtor.prototype\n    ctor.prototype = new TempCtor()\n    ctor.prototype.constructor = ctor\n  }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/node-libs-browser/node_modules/inherits/inherits_browser.js\n// module id = 833\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h2>\\n      <i class=\\\"fa fa-address-book\\\" aria-hidden=\\\"true\\\"></i>\\n      CONTACTS\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"icon icon-home\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Directory</li>\\n    </ol>\\n  </section>\\n  <div *ngIf=\\\"contacts && contacts.length == 0\\\" class=\\\"col-6 col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"height: 150px;\\n        width: 305px;\\n        position: absolute;\\n        font-size: 15px;\\n        color: #707070;\\n        left: 50%;\\n        top: 50%;\\n        margin-top: -70px;\\n        margin-left: -80px;\\n        text-align: center;\\n        align-items: center;\\\">\\n        <div class=\\\"box-tools directory-tools\\\">\\n          <div class=\\\" col-6 col-xs-12 col-sm-12 col-md-12 col-lg-12 inputs-mainfilter2\\\">\\n            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n              <div class=\\\"label-input-mainfilter\\\">\\n                <input type=\\\"text\\\" id=\\\"search_contact\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                  placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\" style=\\\"width:300px;\\\">\\n              </div>\\n              <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                  <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                      <i class=\\\"sq sq-view\\\"></i>\\n                  </button>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n                        <p style=\\\"margin-bottom: 20px;text-align: center;\\\">Contacts empty, let's create one.</p>\\n            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Create\\\">\\n              <!-- <div class=\\\"content-message\\\">\\n                <p style=\\\"margin-bottom: 20px\\\">Empty timeline, lets fill it up. Post a message</p>\\n                <button class=\\\"btn btn-sm button_savedescriptionrejected_sqlx\\\"\\n                    style=\\\"padding: 8px 10px !important; width:180px;\\\" (click)=showMessage()>New\\n                    Message</button>\\n            </div> -->\\n              <button type=\\\"button\\\" class=\\\"btn btn-sm button_savedescriptionrejected_sqlx\\\" (click)=\\\"opensavecontact()\\\" data-container=\\\"body\\\"\\n                tooltipPosition=\\\"top\\\" style=\\\"background-color:white;\\\">\\n                <i class=\\\"fa fa-address-book\\\" style=\\\"color:rgb(27, 110, 198); font-size: 25px;\\\"></i>\\n              </button>\\n            </span>\\n            <!-- <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n              <button id=\\\"\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"reload()\\\"\\n                style=\\\"background-color:white;\\\">\\n                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n              </button>\\n            </span> -->\\n          </div>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <!-- /.col -->\\n      <div *ngIf=\\\"contacts && contacts.length > 0\\\" class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\">\\n          <div class=\\\"box-header with-border directory-header\\\" style=\\\"margin-bottom:50px;\\\">\\n            <div class=\\\" col-6 col-xs-6 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"margin-top:-13px;margin-left: -15px;\\\">\\n              <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Create\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"opensavecontact()\\\" data-container=\\\"body\\\"\\n                  tooltipPosition=\\\"top\\\" style=\\\"background-color:white;\\\">\\n                  <i class=\\\"fa fa-address-book\\\" style=\\\"color:rgb(27, 110, 198); font-size: 25px;\\\"></i>\\n                </button>\\n              </span>\\n              <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                <button id=\\\"\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"reload()\\\"\\n                  style=\\\"background-color:white;\\\">\\n                  <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                </button>\\n              </span>\\n            </div>\\n            <div class=\\\"box-tools directory-tools\\\">\\n                <div class=\\\" col-6 col-xs-12 col-sm-12 col-md-12 col-lg-12 inputs-mainfilter2\\\">\\n                  <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                    <div class=\\\"label-input-mainfilter\\\">\\n                      <input type=\\\"text\\\" id=\\\"search_contact\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                        placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\" style=\\\"width:300px;\\\">\\n                    </div>\\n                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                            <i class=\\\"sq sq-view\\\"></i>\\n                        </button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n              <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;margin-bottom: 60px;\\\">\\n                  <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                  <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n              </div>\\n            <div *ngFor=\\\"let ct of contacts\\\">\\n              <div class=\\\"col-12 col-xs-12 col-sm-6 col-md-4 col-lg-3\\\" style=\\\"margin-bottom:20px;\\\">\\n                <div *ngIf=\\\"isLoadingcontact\\\" class=\\\"contact\\\" style=\\\"border-radius: 20px; box-shadow: 0 0 0.2em 0.2em rgba(199, 195, 202, 0.5);\\\">\\n                  <div class=\\\"name-contact\\\">\\n                    <p> <i class=\\\"\\\" aria-hidden=\\\"true\\\"></i>{{escapeHtml (ct.cont_firstname)}}\\n                      {{ escapeHtml(ct.cont_lastname)}}</p>\\n                  </div>\\n                  <!--.name contact-->\\n                  <div class=\\\"profile-contact\\\">\\n                    <img [src]=\\\"ct.user_photo\\\" onError=\\\"this.src='img/user.png'\\\">\\n                    <p>cargo: {{ escapeHtml(ct.cont_cargo)}}</p>\\n                  </div>\\n                  <!--.profile contact-->\\n                  <div class=\\\"info-contacts\\\">\\n                    <p>Email: {{escapeHtml(ct.cont_email)}}</p>\\n                    <p>Cell Phone: {{escapeHtml(ct.cont_cellphone)}}</p>\\n                    <p>Work Address: {{ escapeHtml(ct.cont_workaddress)}}</p>\\n                  </div>\\n                  <div class=\\\"button-group\\\">\\n                    <i class=\\\"sq sq-search\\\" style=\\\"color:#0ba8da;font-size: 18px;cursor:pointer;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"quick view\\\" (click)=quickciew(ct.cont_id)></i>\\n                    <i class=\\\"sq sq-trash\\\" style=\\\"color:#0ba8da;font-size: 18px;cursor:pointer;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\" (click)=\\\"deleteContact(ct)\\\"></i>\\n                    <!-- <i class=\\\"sq sq-quickedit\\\" style=\\\"color:#0ba8da;font-size: 18px;cursor:pointer;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\" (click)=\\\"openuppcontact(ct.cont_id)\\\"></i> -->\\n                    <a class=\\\"sq sq-info\\\" [routerLink]=\\\"['/contact', ct.cont_id]\\\" style=\\\"color:#0ba8da;font-size: 18px;cursor:pointer;\\\" ></a>\\n                    <img class=\\\"qr-code\\\" src=\\\"img/qr-code-scan.svg\\\" (click)=\\\"openQrcode(ct)\\\">\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n\\n          </div>\\n          <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white; bottom: 0;width: 100%;\\\">\\n              <div *ngIf=\\\"isLoadingpagination\\\" class=\\\"contacts-controls\\\">\\n                  <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                      {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage) > itemcount ? itemcount : (currentpage * limitpage) }} of {{ itemcount }} results\\n                  </button>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                      <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                          <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                              (click)=\\\"goTo(0)\\\">\\n                              <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                      </span>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                      <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                          <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                              <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                      </span>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                      <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                          <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                      </select>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                      <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                          (click)=\\\"setCurPage(1)\\\">\\n                          <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                  </span>\\n                  </div>\\n                  <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                      <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                          <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                  </span>\\n                  </div>\\n              </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n</section>\\n<!-- modal add contact -->\\n<div class=\\\"modal fade\\\" id=\\\"opensavecontact\\\" role=\\\"dialog\\\">\\n  <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n    <div class=\\\"modal-content-params\\\">\\n      <div class=\\\"modal-header modal-header-info-params\\\">\\n        <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n          style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n        </button>\\n        <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"fa fa-address-book\\\"></i> New Contact </h4>\\n      </div>\\n      <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n        <div class=\\\"row\\\">\\n          <div style=\\\"height: 128px; background-color: #eef4f8;\\\">\\n            <div id=\\\"contact-profile\\\" (mouseenter)=\\\"ChangeAddUser('profile')\\\" (mouseleave)=\\\"ChangeAddUser('profile')\\\">\\n              <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; width:100px;height:100px;margin:0 auto;border-radius:50%;overflow:hidden;text-align: center;\\\">\\n                <img [src]=\\\"contact.cont_photo\\\" id=\\\"profile-img\\\" onError=\\\"this.src='img/user.png'\\\" style=\\\"width:100px;height:auto;top:1px;\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                <div id=\\\"change-profileUser\\\" class=\\\"upload-picture-btn-wrapper icon_customUpload\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\" name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"UploadAddUser($event,'profile')\\\">\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>First Name</label>\\n                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_firstname\\\" name=\\\"cont_firstname\\\" [(ngModel)]=\\\"contact.cont_firstname\\\"\\n                  placeholder=\\\"First Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Last Name</label>\\n                <input class=\\\"form-control sqlx-input\\\" id=\\\"cont_lastname\\\" name=\\\"cont_lastname\\\" [(ngModel)]=\\\"contact.cont_lastname\\\"\\n                  placeholder=\\\"Last Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Birth Date</label>\\n                  <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" id=\\\"calendarStartDate_sprints\\\" [(ngModel)]=\\\"contact.cont_birthday\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"1900:2020\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Share with</label>\\n                        <span class=\\\"ui-fluid\\\">\\n                    <p-autoComplete id=\\\"autcompleteShareWith_editTask\\\" name=\\\"autcompleteShareWith_editTask\\\" class=\\\"autocompleteSqlx\\\"\\n                                    [(ngModel)]=\\\"contact.usersShared\\\"\\n                                    [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                    styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"label\\\"\\n                                    [multiple]=\\\"true\\\">\\n\\n                    </p-autoComplete>\\n                </span>\\n                    </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Phone Number</label>\\n                <p-inputMask class=\\\" form-control sqlx-inputmask\\\" mask=\\\"+99 999 9999999\\\" id=\\\"cont_cellphone\\\" [(ngModel)]=\\\"contact.cont_cellphone\\\"\\n                  name=\\\"phoneUser_addUser\\\" placeholder=\\\"+99 999 9999999\\\"></p-inputMask>\\n              </div>\\n            </div> \\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>E-mail Address</label>\\n                <input type=\\\"email\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_email\\\" name=\\\"cont_email\\\" [(ngModel)]=\\\"contact.cont_email\\\"\\n                  placeholder=\\\"jdoe@mdcloudps.com\\\" pattern=\\\".+@mdcloudps.com\\\" size=\\\"30\\\" (change)=\\\"verifyEmaild(contact.cont_email)\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>workaddress</label>\\n                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_workaddress\\\" name=\\\"cont_workaddress\\\" [(ngModel)]=\\\"contact.cont_workaddress\\\" placeholder=\\\"workaddress\\\"  size=\\\"30\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>cargo</label>\\n                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_cargo\\\" name=\\\"cont_cargo\\\" [(ngModel)]=\\\"contact.cont_cargo\\\" placeholder=\\\"cargo\\\" size=\\\"30\\\" (keypress)=\\\"soloLetras($event)\\\">\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"modal-footer\\\">\\n        <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n          <button id=\\\"buttonClose_addUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:rgb(164, 203, 91) !important;border-color:rgb(164, 203, 91) !important\\\">Close\\n          </button>\\n          <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints\\\"\\n          data-dismiss=\\\"modal\\\" (click)=\\\"saveContact(contact)\\\"\\n          [disabled]=\\\"(!contact.cont_firstname) || (!contact.cont_lastname) || (!contact.cont_birthday) ||  (!contact.cont_cellphone) ||  (!contact.cont_email) ||  (!contact.cont_workaddress) || errors != 0\\\">\\n          Save\\n          </button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n</div>\\n<!-- modal update contact -->\\n<div class=\\\"modal fade\\\" id=\\\"openuppcontact\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"fa fa-address-book\\\"></i> Update Contact {{\\\" #\\\" + contact.cont_id}} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>First Name</label>\\n                  <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_firstname\\\" name=\\\"cont_firstname\\\" [(ngModel)]=\\\"contact.cont_firstname\\\" placeholder=\\\"First Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>Last Name</label>\\n                  <input class=\\\"form-control sqlx-input\\\" id=\\\"cont_lastname\\\" name=\\\"cont_lastname\\\" [(ngModel)]=\\\"contact.cont_lastname\\\" placeholder=\\\"Last Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                <div class=\\\"form-group\\\">\\n                  <label>Birth Date</label>\\n                  <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\"  id=\\\"calendarStartDate_sprints\\\" [(ngModel)]=\\\"contact.cont_birthday\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"1900:2020\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>Phone Number</label>\\n                  <p-inputMask class=\\\" form-control sqlx-inputmask \\\" mask=\\\"+99 999 9999999\\\" id=\\\"cont_cellphone\\\" [(ngModel)]=\\\"contact.cont_cellphone\\\" name=\\\"phoneUser_addUser\\\" placeholder=\\\"+99 999 9999999\\\"></p-inputMask>\\n                </div>\\n              </div> \\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>E-mail Address</label>\\n                  <input type=\\\"email\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_email\\\" name=\\\"cont_email\\\" [(ngModel)]=\\\"contact.cont_email\\\" placeholder=\\\"jdoe@mdcloudps.com\\\" pattern=\\\".+@mdcloudps.com\\\" size=\\\"30\\\">\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>workaddress</label>\\n                  <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_workaddress\\\" name=\\\"cont_workaddress\\\" [(ngModel)]=\\\"contact.cont_workaddress\\\"  placeholder=\\\"workaddress\\\"  size=\\\"30\\\">\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"form-group input-squadlinx\\\">\\n                  <label>cargo</label>\\n                  <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"cont_cargo\\\" name=\\\"cont_cargo\\\" [(ngModel)]=\\\"contact.cont_cargo\\\" placeholder=\\\"cargo\\\" size=\\\"30\\\">\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n            <button id=\\\"buttonClose_addUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n              data-dismiss=\\\"modal\\\" (click)=\\\"reload()\\\">Close\\n            </button>\\n            <button id=\\\"buttonSave_addUser\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n              class=\\\"btn-success btn-sm btn-add-sprint\\\"\\n              [disabled]=\\\"(!contact.cont_firstname) || (!contact.cont_lastname) || (!contact.cont_birthday) ||  (!contact.cont_cellphone) ||  (!contact.cont_email) ||  (!contact.cont_workaddress)\\\"\\n              data-dismiss=\\\"modal\\\" (click)=\\\"updateContact(contact)\\\">update\\n            </button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!-- modal quick view -->\\n  <div class=\\\"modal fade\\\" id=\\\"quickciew\\\" role=\\\"dialog\\\">\\n      <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n          <div class=\\\"modal-header modal-header-info-params\\\">\\n            <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n              style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n            </button>\\n            <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"fa fa-address-book\\\"></i> View Contact {{\\\" #\\\" + contact.cont_id}} </h4>\\n          </div>\\n          <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                      <div class=\\\"form-group input-squadlinx\\\">\\n                        <label>First Name</label>\\n                        <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                          {{contact.cont_firstname}}\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                      <div class=\\\"form-group input-squadlinx\\\">\\n                        <label>Last Name</label>\\n                        <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                          {{contact.cont_lastname}}\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                        <div class=\\\"form-group\\\">\\n                            <label>Birth Date</label>\\n                            <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                                {{contact.cont_birthday}}\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                      <div class=\\\"form-group input-squadlinx\\\">\\n                        <label>Phone Number</label>\\n                        <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                            {{contact.cont_cellphone}}\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                      <div class=\\\"form-group input-squadlinx\\\">\\n                        <label>E-mail Address</label>\\n                        <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                            {{contact.cont_email}}\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"form-group input-squadlinx\\\">\\n                          <label>workaddress</label>\\n                          <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                              {{contact.cont_workaddress}}\\n                          </div>\\n                        </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group input-squadlinx\\\">\\n                            <label>cargo</label>\\n                            <div style=\\\"border: 2px solid #CCD7DD; border-radius: 25px; padding: 5px 10px;\\\">\\n                                {{contact.cont_cargo}}\\n                            </div>\\n                          </div>\\n                        </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"modal-footer\\\">\\n            <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n              <button id=\\\"buttonClose_addUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                data-dismiss=\\\"modal\\\" (click)=\\\"reload()\\\">Close\\n              </button>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdqrcode\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%;\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header mdheader-directory\\\" >\\n                    <div style=\\\"height: 40px; border-bottom: 1px solid #3092E9;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btnclose-qr\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                            <i class=\\\"sq sq-close\\\"></i>\\n                        </button>\\n                    </div> \\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"min-height: 200px;padding: 20px;\\\">\\n                  <div class=\\\"row mdcontent-profile\\\">\\n                    <div class=\\\"col-xs-5 col-md-5 col-md-5 col-lg-5\\\">\\n                      <div style=\\\"margin-left:25px;\\\">\\n                        <button style=\\\"background:#DEDBDB; overflow: hidden;  border-radius: 50%; width: 100px; height: 100px; border: transparent;\\\">\\n                         <img [src]=\\\"user.cont_photo\\\" onError=\\\"this.src='img/user.png'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"max-width: 100%\\\">\\n                        </button>\\n                      </div>\\n                      <h4 style=\\\"color: #3092E9; margin-top: 10px; font-weight: bold; margin-left: 25px;\\\">{{user.cont_firstname}} {{user.cont_lastname}}</h4>\\n                    </div>\\n                    <div class=\\\"col-xs-7 col-md-7 col-md-7 col-lg-7\\\" style=\\\"margin-top: 10px;\\\">\\n                      <div id=\\\"output\\\" style=\\\"text-align: center;\\\"></div>\\n                    </div>\\n                  </div>\\n                    \\n                </div>             \\n                <div class=\\\"modal-footer\\\" style=\\\"padding-top: 0px; border: none;\\\">\\n                    <div style=\\\"text-align: center; height: 40px; padding-top: 20px; border-top: 1px solid #CBC9C9;\\\"> \\n                        <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                          <button  class=\\\"btn-sm btn-close-qrcode\\\" data-dismiss=\\\"modal\\\"  type=\\\"button\\\">Close </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n  </div> \\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/directory/directory.template.html\n// module id = 834\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> DAILY\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Daily</li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n        <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n          <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n        <div class=\\\"nav-tabs-sqlx-v\\\">\\n          <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n            <li class=\\\"active\\\">\\n              <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n            </li>\\n            <li *ngFor=\\\"let gr of groups\\\">\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n            </li>\\n          </ul>\\n        </div>\\n      </div>\\n      <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n        <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;text-align: center;\\\">\\n          <button type=\\\"button\\\" (click)=\\\"searchDaily()\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);\\\">\\n            Refresh</button>\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"addDaily(null)\\\" style=\\\"padding: 5px 5px; background-color:rgb(155,212,107);\\\">\\n            Add Daily</button>\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"showFilter()\\\" style=\\\"padding: 5px 5px; background-color:#036bc9;\\\">\\n            Filter</button>\\n          <div class=\\\"inputs-mainfilter\\\" style=\\\"display: inline-block;margin-right: 10px;background-color: #fff;\\\">\\n            <div class=\\\"row\\\" style=\\\"display: inline-block;position:relative;width: 100%;\\\">\\n              <div class=\\\"label-input-mainfilter\\\">\\n                <input type=\\\"text\\\" style=\\\"width: 97%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n              </div>\\n              <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                  <!-- <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i> -->\\n                  <button type=\\\"button\\\" (click)=\\\"searchDaily()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                    <i class=\\\"sq sq-view\\\"></i>\\n                  </button>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div *ngIf=\\\"filter\\\" class=\\\"box-header with-border filter-options\\\">\\n          <div class=\\\"col-xs-10 col-sm-11 col-md-11 col-lg-11\\\">\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Description</label>\\n                <li *ngIf=\\\"mydailycopy.description\\\">\\n                    {{mydailycopy.description}}\\n                </li>\\n                <li *ngIf=\\\"!mydailycopy.description\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\" >\\n                <label>Date initial</label>\\n                <li *ngIf=\\\"mydaily.date_ini\\\">\\n                  {{formatDate(mydaily.date_ini)}}\\n                </li>\\n                <li *ngIf=\\\"!mydaily.date_ini\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Date end</label>\\n                <li  *ngIf=\\\"mydaily.date_end\\\">\\n                  {{formatDate(mydaily.date_end)}}\\n                </li>\\n                <li  *ngIf=\\\"!mydaily.date_end\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Product(s)</label>\\n                <li *ngFor=\\\"let pr of mydailycopy.products\\\">\\n                    {{pr.prod_name}}\\n                </li>\\n                <li *ngIf=\\\"!mydailycopy.products || mydailycopy.products.length == 0\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Creator(s)</label>\\n                <li *ngFor=\\\"let ur of mydailycopy.creators\\\">\\n                  {{ ur.user_lastname + \\\", \\\" + ur.user_name }}\\n                </li>\\n                <li *ngIf=\\\"!mydailycopy.creators || mydailycopy.creators.length == 0\\\">\\n                    -\\n                </li>\\n              </ul>\\n              <ul class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                <label>Project(s)</label>\\n                <li *ngFor=\\\"let pj of mydailycopy.projects\\\">\\n                  {{pj.proj_subject}}\\n                </li>\\n                <li *ngIf=\\\"!mydailycopy.projects || mydailycopy.projects.length == 0\\\">\\n                    -\\n                </li>\\n              </ul>\\n\\n          </div>\\n          <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"text-align: right;\\\">\\n            <a href=\\\"javascript:void(0)\\\" (click)=\\\"closeFilter()\\\" class=\\\"pull-rigth\\\">\\n                <i class=\\\"sq sq-close\\\" style=\\\"color:#0ba8da; font-weight: bolder;\\\"></i>\\n            </a>\\n          </div>\\n        </div>\\n        <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n            <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n        </div>\\n        <div *ngIf=\\\"!isLoading && daily.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            No Data\\n        </div>\\n        <div *ngIf=\\\"daily.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"table-responsive tasks-messages\\\">\\n\\n              <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxd table-tasklistd\\\" style=\\\"width: 100%;\\\">\\n                <thead>\\n                  <tr style=\\\"border-bottom: 2px solid rgb(227,237,241)!important; border-top: 2px solid rgb(227,237,241)!important;\\\">\\n                    <th (click)=\\\"setOrder('dail_date')\\\" class=\\\"head-table-daily\\\" style=\\\"width: 15%; \\\">Date\\n                      <span [hidden]=\\\"posOrder !== 'dail_date'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('dail_id')\\\" class=\\\"head-table-daily\\\" style=\\\"width: 8%; \\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'dail_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('creator')\\\" class=\\\"head-table-daily\\\" style=\\\"width: 15%; \\\">Creator\\n                      <span [hidden]=\\\"posOrder !== 'creator'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('dail_text')\\\" class=\\\"head-table-daily\\\" style=\\\"width: 33%; \\\">Description\\n                      <span [hidden]=\\\"posOrder !== 'dail_text'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th class=\\\"head-table-daily\\\" style=\\\"width: 8%;\\\">Points</th>\\n                    <th class=\\\"head-table-daily\\\" (click)=\\\"setOrder('task_id')\\\" style=\\\"width: 8%;\\\">Task\\n                      <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                    style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th class=\\\"head-table-daily\\\" style=\\\"width: 13%;\\\">Actions</th>\\n                  </tr>\\n                </thead>\\n                <tbody>\\n                  <tr *ngFor=\\\"let day of daily\\\">\\n                    <td>\\n                      {{ escapeHtml(day.dail_date) }}\\n                    </td>\\n                    <td style=\\\"text-align: center;\\\">\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(day)\\\">{{ escapeHtml(day.dail_id) }}</a>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModalUser(day.user_id)\\\">{{ escapeHtml(day.creator) }}</a>\\n                    </td>\\n\\n                    <td>\\n                      <div style=\\\"height: 37px!important;overflow-y: scroll;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(day)\\\">{{ escapeHtml(day.dail_text) }}</a>\\n                      </div>\\n                    </td>\\n                    <td style=\\\"text-align: center;\\\">\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(day)\\\">{{ escapeHtml(day.dail_points) }}</a>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModaltk(day.task_id)\\\">{{ escapeHtml(day.task_id) }}</a>\\n                      <taskview [myTaskId]=\\\"day.task_id\\\"></taskview>\\n                    </td>\\n                    <td>\\n                      <div class=\\\"btn-group\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"View\\\">\\n                          <button type=\\\"button\\\" (click)=\\\"showModal(day)\\\" class=\\\"btn btn-default btn-sm\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                            style=\\\"width: 34px;\\\">\\n                            <i class=\\\"sq sq-search\\\"></i>\\n                          </button>\\n                        </span>\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <button type=\\\"button\\\" (click)=\\\"editDaily(day)\\\" class=\\\"btn btn-default btn-sm\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\">\\n                            <i class=\\\"sq sq-quickedit\\\"></i>\\n                          </button>\\n                        </span>\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                          <button (click)=\\\"deleteDay(day)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" style=\\\"width: 34px;\\\">\\n                            <i class=\\\"sq sq-trash\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                <div class=\\\"contacts-controls\\\">\\n                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage) > itemcount ? itemcount : (currentpage * limitpage) }} of {{ itemcount }} results\\n                    </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                (click)=\\\"goTo(0)\\\">\\n                                <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                            </button>\\n                        </span>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                            </button>\\n                        </span>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                        <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"searchDaily()\\\">\\n                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                        </select>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                            (click)=\\\"setCurPage(1)\\\">\\n                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                        </button>\\n                    </span>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                        </button>\\n                    </span>\\n                    </div>\\n                </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdDayView\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"font-weight: bold;color:white;\\\"></i>\\n          </button>\\n          <h4 *ngIf=\\\"myDay\\\" class=\\\"modal-title\\\" style=\\\"margin-left: 7px;font-weight: bold; color: white;\\\">Daily #\\n            {{myDay.dail_id}} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" *ngIf=\\\"myDay\\\" style=\\\"margin-left: 8px;margin-right: 8px;\\\">\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Date</label>\\n                <p>{{ myDay.dail_date }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Points</label>\\n                <p>{{ myDay.dail_points }}</p>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"!myDay.task_id\\\" class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Product</label>\\n                <p>{{myDay.prod_name}}</p>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"!myDay.task_id\\\" class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Category</label>\\n                <p>{{myDay.para_name}}</p>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"myDay.unit_id && myDay.unit_id > 0 \\\" class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Performance Indicator</label>\\n                <p>{{myDay.units_points + ' ' + myDay.unit_desc}}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Description</label>\\n                <div [innerHTML]=\\\"escapeHtml(myDay.dail_text)\\\" style=\\\"height: 58px;overflow-y: scroll;\\\"></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div style=\\\"text-align: center\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-roles\\\" data-dismiss=\\\"modal\\\" style=\\\"font-weight: bold; background-color:rgb(15, 188, 255);\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal modal-task fade\\\" id=\\\"mdDailyTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n        <div class=\\\"modal-header header-project\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\"></i>\\n            Record progress\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"overflow:scroll; height:507px;\\\">\\n              <h4 *ngIf=\\\"developing && developing.length > 0\\\" class=\\\"modal-title\\\">\\n                Tasks\\n              </h4>\\n              <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                  <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                    <li class=\\\"active\\\">\\n                      <a data-toggle=\\\"tab\\\" href=\\\"#ptsknew\\\" (click)=\\\"setMytask(0);\\\">None</a>\\n                    </li>\\n                  </ul>\\n                  <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\"\\n                    *ngFor=\\\"let dv of developing\\\">\\n                    <li *ngIf=\\\"dv.task_pointsl > 0\\\" class=\\\"active\\\">\\n                      <a data-toggle=\\\"tab\\\" href=\\\"#ptsk{{dv.task_id}}\\\" (click)=\\\"showInfo(dv);\\\">{{dv.task_id}}</a>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-9 col-sm-10 col-md-10 col-lg-10\\\">\\n              <div class=\\\"tab-content\\\">\\n                <div *ngIf=\\\"mytask && developing && developing.length > 0 && dailynew == -1\\\" id=\\\"ptsk{{mytask.task_id}}\\\"\\n                  class=\\\"tab-pane fade in active\\\">\\n                  <h3>{{mytask.task_subject}}</h3>\\n                  <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Number</label>\\n                      <p>{{mytask.task_id}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Date</label>\\n                      <p>{{mytask.task_date}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Creator</label>\\n                      <p>{{mytask.creator}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Status</label>\\n                      <p>{{ mytask.status_name }}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Assigned to</label>\\n                      <p>{{mytask.asigned}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Delivery Date</label>\\n                      <p>{{mytask.task_delivery}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Points</label>\\n                      <p>{{mytask.task_points}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Points Recorded</label>\\n                      <p>{{mytask.task_pointsd}}</p>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                      <label class=\\\"control-label\\\">Product</label>\\n                      <p>{{mytask.prod_name}}</p>\\n                    </div>\\n                    <div *ngIf=\\\"mytask.unit_id && mytask.unit_id > 0\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label\\\">Unit Points</label>\\n                        <p>{{mytask.unit_points}}</p>\\n                    </div>\\n                    <div *ngIf=\\\"mytask.unit_id && mytask.unit_id > 0\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label\\\">Unit Points Recorded</label>\\n                        <p>{{mytask.unit_pointsd}}</p>\\n                    </div>\\n                  </div>\\n                  <label class=\\\"control-label\\\">Description</label>\\n                  <div [innerHtml]=\\\"mytask.task_description\\\" style=\\\"overflow: scroll; height: 80px;\\\"></div>\\n                  <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mcTask-daily\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" [showTime]=\\\"true\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"[yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\" [minDate]=\\\"minDateDaily\\\" [maxDate]=\\\"maxDateDaily\\\"></p-calendar>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"compareDate(day.spri_init) === -1 || compareDate(day.spri_end) === 1\\\">Date out of sprint range.</span>\\n                      <span>{{date3|date}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                      <div class=\\\"form-group spinner-squadlinx\\\">\\n                        <label>Points</label>\\n                        <input type=\\\"number\\\" id=\\\"points-mcTask-daily\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"day.dail_points\\\" step=\\\"0.01\\\" min=\\\"0.01\\\">\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points <= 0\\\">Points must be greater than zero</span>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"(parseFloat(mytask.task_pointsd)+parseFloat(day.dail_points) > parseFloat(mytask.task_points))\\\">Points\\n                          selected exceed current task duration.</span>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"day.unit_id && day.unit_id != 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">  \\n                        <div class=\\\"form-group\\\">\\n                            <div class=\\\"performance-container\\\">\\n                                <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                </div>\\n                                <div class=\\\"spinner-squadlinx performance\\\">\\n                                    <input type=\\\"number\\\" id=\\\"units_newDaily\\\" name=\\\"units_newDaily\\\" class=\\\"input_number_squadlinx\\\"\\n                                        [(ngModel)]=\\\"day.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\" style=\\\"margin-bottom: 6px;\\\"> \\n                                </div>\\n                                <div class=\\\"dropdownSqlx\\\">\\n                                    <p-dropdown [disabled]=\\\"true\\\" id=\\\"dropdownUnits_newDaily\\\" name=\\\"dropdownUnits_newDaily\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"day.unit_id\\\"\\n                                        placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                </div>     \\n                            </div> \\n                            <span class=\\\"has-error\\\" *ngIf=\\\"day.unit_points <= 0\\\">\\n                                Performance Indicator must be greater than zero</span>\\n                        </div>                          \\n                    </div>\\n                  </div>\\n                  <div class=\\\"form-group textarea-squadlinx\\\">\\n                    <label>Description</label>\\n                    <textarea id=\\\"text-mcTask-daily\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\" rows=\\\"3\\\"\\n                      placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text\\\">{{ \\\"*\\\" + day.dail_date + \\\"*\\\" }}</textarea>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"dailynew == 0\\\" id=\\\"ptsknew\\\" class=\\\"tab-pane fade in active\\\">\\n                  <div class=\\\"modal-body calendar-squadlinx\\\">\\n                    <div class=\\\"row\\\">\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"text-align: center;\\\">\\n                          <div class=\\\"form-group\\\">\\n                            <label>Sprint</label>\\n                            <p-dropdown id=\\\"ddwnr_sprint\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" (onChange)=\\\"onChangeSprint()\\\"\\n                                [autoWidth]=\\\"false\\\" [options]=\\\"sprintslist\\\" [(ngModel)]=\\\"day.spri_id\\\" placeholder=\\\"Select a Sprint\\\"\\n                                  filter=\\\"filter\\\"></p-dropdown>\\n                          </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date</label>\\n                                <p-calendar id=\\\"dail_date-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date_2\\\"\\n                                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"[yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [minDate]=\\\"minDateDaily\\\" [maxDate]=\\\"maxDateDaily\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"compareDate2(day.spri_init) === -1 || compareDate2(day.spri_end) === 1\\\">Date out of sprint range.</span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"points-mcTask-daily2\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"day.dail_points_2\\\" step=\\\"0.01\\\" min=\\\"0.01\\\">\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points_2 <= 0\\\">Points must be greater than zero</span>\\n                              </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"form-group dropdownSqlx\\\">\\n                      <label>Product</label>\\n                      <p-dropdown id=\\\"prod_id-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                        [(ngModel)]=\\\"day.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group dropdownSqlx\\\">\\n                      <label>Category</label>\\n                      <p-dropdown id=\\\"para_category-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"catdaily\\\"\\n                        [(ngModel)]=\\\"day.para_category\\\" placeholder=\\\"Select a Category\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group dropdownSqlx\\\">\\n                      <label>Task Refernce</label>\\n                      <p-dropdown id=\\\"task_reference-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblmytasks\\\"\\n                        [(ngModel)]=\\\"day.task_reference\\\" placeholder=\\\"Select a Task\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"form-group textarea-squadlinx\\\">\\n                      <label>Description</label>\\n                      <textarea id=\\\"text-mdDaily-daily\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\" rows=\\\"3\\\"\\n                        placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text_2\\\"></textarea>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"!mytask && !developing && developing.length == 0\\\" id=\\\"ptsk{{mytask.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                  <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n          <button *ngIf=\\\"day && dailynew != 0\\\" id=\\\"save-mcTask-daily\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" [disabled]=\\\"validateDaily(1)\\\" (click)=\\\"saveDaily(day, mytask.task_id)\\\">Save</button>\\n          <button *ngIf=\\\"day && dailynew == 0\\\" id=\\\"save-mcTask2-daily\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" [disabled]=\\\"validateDaily(2)\\\" (click)=\\\"saveDaily(day, 0)\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdUser\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\" style=\\\"height: 110px;\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;margin-top: 3px;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <div style=\\\"transform: translate(195px, 40px);\\\">\\n            <span style=\\\"text-transform: uppercase; color:white;font-size: 26px;font-weight: bold;\\\" [innerHTML]=\\\"getNameUser(user.user_name , user.user_lastname)\\\"> </span>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div id=\\\"user-profile-picture\\\" style=\\\"height: 120px;width: 120px;background: transparent;border-radius: 50%;margin-left: 40px;margin-top: -92px;border: 7px solid white;box-shadow: grey -1px 0px 10px -2px; overflow:hidden;position:relative;\\\">\\n            <div style=\\\"height: 100%;width: 100%;background: white;position: relative;\\\">\\n              <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"left:0px;top:0px;width: 106px;\\\">\\n              <div id=\\\"change-picture\\\" style=\\\"display:none;position:absolute;background:#6b6b6b3d;height:100%;width: 100%;top:0px;left:-5px;color:white;text-align: center;padding-top:15px;\\\">Change\\n                <br>Picture\\n                <br>\\n                <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n              </div>\\n            </div>\\n          </div>\\n          <div style=\\\"transform: translate(195px, -37px);\\\">\\n            <span style=\\\"color:rgb(28,110,198);font-size: 20px;font-weight: bold;\\\">{{user.role_name}} </span>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"margin-top: 0px;margin-left: 15px;margin-right: 15px;\\\">\\n            <div class=\\\"form-group\\\">\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Email:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_email}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Cell Phone:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_phone}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Work Address:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_workaddress}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Work Phone:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_workphone}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Home Address:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_homeaddress}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Home Phone:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_homephone}}\\n                </div>\\n              </div>\\n              <div class=\\\"row row_dataPersonalUser\\\">\\n                <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 div_descriptionDataPersonalUser\\\">\\n                  <label style=\\\"color:rgb(130, 145, 152);\\\">Personal Email:</label>\\n                </div>\\n                <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 div_infoUser_dataPersonal\\\">\\n                  {{user.user_personalemail}}\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer close-footer\\\" style=\\\"text-align: center;\\\">\\n          <div style=\\\"padding-right:20px;border-top: 1px solid rgb(181,199,208);width: 95%;margin-left: 2%;padding-top: 6px;\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px; font-weight: bold;\\\"\\n              data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal modal-task fade\\\" id=\\\"mdEditDailyTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n        <div class=\\\"modal-header header-project\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"sq sq-daily\\\" aria-hidden=\\\"true\\\"></i>\\n            Edit daily\\n          </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"tab-content\\\">\\n                <div class=\\\"tab-pane fade in active\\\">\\n                  <div *ngIf=\\\"day.task && day.task.task_id && day.task.task_id > 0\\\">\\n                      <h3>{{day.task.task_subject}}</h3>\\n                      <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Number</label>\\n                          <p>{{day.task.task_id}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Date</label>\\n                          <p>{{day.task.task_date}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Creator</label>\\n                          <p>{{day.task.creator}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Status</label>\\n                          <p>{{ day.task.status_name }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Assigned to</label>\\n                          <p>{{day.task.asigned}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Delivery Date</label>\\n                          <p>{{day.task.task_delivery}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Points</label>\\n                          <p>{{day.task.task_points}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Points Recorded</label>\\n                          <p>{{day.task.task_pointsd}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                          <label class=\\\"control-label\\\">Product</label>\\n                          <p>{{day.task.prod_name}}</p>\\n                        </div>\\n                        <div *ngIf=\\\"day.task.unit_id != null && day.task.unit_id != 0\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <label class=\\\"control-label\\\">Unit Points</label>\\n                            <p>{{day.task.unit_points}}</p>\\n                        </div>\\n                        <div *ngIf=\\\"day.task.unit_id != null && day.task.unit_id != 0\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <label class=\\\"control-label\\\">Unit Points Recorded</label>\\n                            <p>{{day.task.unit_pointsd}}</p>\\n                        </div>\\n                      </div>\\n                      <label class=\\\"control-label\\\">Description</label>\\n    \\n                      <div [innerHtml]=\\\"day.task.task_description\\\" style=\\\"overflow: scroll; height: 80px;\\\"></div>\\n\\n                  </div>\\n                  <div class=\\\"row\\\" *ngIf=\\\"day.task && day.task.task_id && day.task.task_id > 0\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mcTask-daily2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" (onInput)=\\\"onInputDate($event)\\\" (onSelect)=\\\"onChangeDate($event)\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"[yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [minDate]=\\\"minDateDaily\\\" [maxDate]=\\\"maxDateDaily\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"compareDate(day.spri_init) === -1 || compareDate(day.spri_end) === 1\\\">Date out of sprint range.</span>\\n                      <!-- <span>{{date3|date}}</span> -->\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                      <div class=\\\"form-group spinner-squadlinx\\\">\\n                        <label>Points</label>\\n                        <input type=\\\"number\\\" class=\\\"input_number_squadlinx\\\" id=\\\"points-mcTask-daily2\\\" [(ngModel)]=\\\"day.dail_points\\\" step=\\\"0.01\\\">\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"day.dail_points <= 0\\\">Points must be greater than zero</span>\\n                        <span class=\\\"has-error\\\" *ngIf=\\\"(day.dail_points > day.pointsr)\\\">Points\\n                          selected exceed current task duration.</span>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"day.unit_id && day.unit_id != 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">  \\n                        <div class=\\\"form-group\\\">\\n                            <div class=\\\"performance-container\\\">\\n                                <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                </div>\\n                                <div class=\\\"spinner-squadlinx performance\\\">\\n                                    <input type=\\\"number\\\" id=\\\"units_editDaily\\\" name=\\\"units_editDaily\\\" class=\\\"input_number_squadlinx\\\"\\n                                        [(ngModel)]=\\\"day.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\" style=\\\"margin-bottom: 6px;\\\">   \\n                                </div>\\n                                <div class=\\\"dropdownSqlx\\\">\\n                                    <p-dropdown [disabled]=\\\"true\\\" id=\\\"dropdownUnits_editDaily\\\" name=\\\"dropdownUnits_editDaily\\\" class=\\\"ui-g ui-fluid\\\"\\n                                        dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"day.unit_id\\\"\\n                                        placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                </div>  \\n                            </div> \\n                            <span class=\\\"has-error\\\" *ngIf=\\\"day.unit_points <= 0\\\">\\n                                Performance Indicator must be greater than zero</span>\\n                        </div>                          \\n                    </div>\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group textarea-squadlinx\\\">\\n                    <label>Description</label>\\n                    <textarea id=\\\"text-mcTask-daily2\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\" rows=\\\"3\\\"\\n                      placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text\\\"></textarea>\\n                  </div>\\n                </div>\\n                <div class=\\\"row\\\" *ngIf=\\\"!day.task || !day.task.task_id || day.task.task_id == 0\\\">\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group dropdownSqlx\\\">\\n                      <label>Product</label>\\n                      <p-dropdown id=\\\"prod_id-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                        [(ngModel)]=\\\"day.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 form-group dropdownSqlx\\\">\\n                      <label>Category</label>\\n                      <p-dropdown id=\\\"para_category-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"catdaily\\\"\\n                        [(ngModel)]=\\\"day.para_category\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 form-group dropdownSqlx\\\">\\n                      <label>Task Refernce</label>\\n                      <p-dropdown id=\\\"task_reference-mdDaily-daily\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"lblmytasks\\\"\\n                        [(ngModel)]=\\\"day.task_reference\\\" placeholder=\\\"Select a Task\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                      <label>Date</label>\\n                      <p-calendar id=\\\"dail_date-mcTask-daily3\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"day.dail_date\\\"\\n                        dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\"[yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [maxDate]=\\\"maxDateDaily\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                      <!-- <span>{{date3|date}}</span> -->\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                      <div class=\\\"form-group spinner-squadlinx\\\">\\n                        <label>Points</label>\\n                        <input type=\\\"number\\\" id=\\\"points-mcTask-daily3\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"day.dail_points\\\" step=\\\"0.01\\\" min=\\\"0.01\\\">\\n                      </div>\\n                    </div>\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 form-group textarea-squadlinx\\\">\\n                    <label>Description</label>\\n                    <textarea id=\\\"text-mcTask-daily2\\\" style=\\\"resize: vertical;\\\" class=\\\"txt-sqlx form-control\\\" rows=\\\"3\\\"\\n                      placeholder=\\\"Type a description\\\" [(ngModel)]=\\\"day.dail_text\\\"></textarea>\\n                  </div>\\n                </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"day.task && day.task.task_id && day.task.task_id > 0\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n          <button id=\\\"save-mcTask-daily2\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n            data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" (click)=\\\"updateDaily(day, 1)\\\"[disabled]=\\\"validateDaily(3)\\\">Save</button>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"!day.task || !day.task.task_id || day.task.task_id == 0\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n            <button id=\\\"save-mcTask-daily2\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n              data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\" (click)=\\\"updateDaily(day, 2)\\\"[disabled]=\\\"validateDaily(4)\\\">Save</button>\\n          </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdSearchDaily\\\" role=\\\"dialog\\\">\\n      <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n          <div class=\\\"modal-content-params\\\">\\n              <div class=\\\"modal-header modal-header-info-params\\\">\\n                  <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                      <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                  </button>\\n                  <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Main filter</h4>\\n              </div>\\n              <div class=\\\"modal-body\\\">\\n                  <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group input-squadlinx\\\">\\n                              <label>Description</label>\\n                              <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"description_dailyfilter\\\" name=\\\"description_dailyfilter\\\" [(ngModel)]=\\\"mydaily.description\\\" placeholder=\\\"\\\">\\n                          </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                              <label>Product(s)</label>\\n                              <span class=\\\"ui-fluid\\\">\\n                                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mydaily.products\\\"\\n                                      [suggestions]=\\\"productsa\\\" (completeMethod)=\\\"filterMultiple($event, 1)\\\" styleClass=\\\"wid100\\\"\\n                                      [minLength]=\\\"1\\\" placeholder=\\\"Products(s)\\\" field=\\\"prod_name\\\" [multiple]=\\\"true\\\">\\n                                  </p-autoComplete>\\n                              </span>\\n                          </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                              <label>Creator(s)</label>\\n                              <span class=\\\"ui-fluid\\\">\\n                                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mydaily.creators\\\"\\n                                      [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\" styleClass=\\\"wid100\\\"\\n                                      [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                  </p-autoComplete>\\n                              </span>\\n                          </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                          <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                              <label>Project(s)</label>\\n                              <span class=\\\"ui-fluid\\\">\\n                                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mydaily.projects\\\"\\n                                      [suggestions]=\\\"myProjects\\\" (completeMethod)=\\\"filterMultiple($event, 3)\\\" styleClass=\\\"wid100\\\"\\n                                      [minLength]=\\\"1\\\" placeholder=\\\"Project(s)\\\" field=\\\"proj_subject\\\" [multiple]=\\\"true\\\">\\n                                  </p-autoComplete>\\n                              </span>\\n                          </div>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                          <div class=\\\"form-group\\\">\\n                              <label>Date initial</label>\\n                              <p-calendar id=\\\"calendarDateInit_dailyfilter\\\" name=\\\"calendarDateInit_dailyfilter\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mydaily.date_ini\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                          </div>\\n                      </div>\\n\\n                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                          <div class=\\\"form-group\\\">\\n                              <label>Date end</label>\\n                              <p-calendar id=\\\"calendarDateEnd_dailyfilter\\\" name=\\\"calendarDateEnd_dailyfilter\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mydaily.date_end\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                          </div>\\n                      </div>\\n                  </div>\\n              </div>\\n              <div class=\\\"modal-footer\\\">\\n                  <div class=\\\"pull-right\\\">\\n                      <button id=\\\"buttonSearch_dailyfilter\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"filterDaily()\\\"> Search\\n                      </button>\\n                  </div>\\n              </div>\\n          </div>\\n      </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/daily/daily.template.html\n// module id = 835\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2>\\n            <i class=\\\"fa fa-address-book\\\" aria-hidden=\\\"true\\\"></i>\\n            CONTACTS\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a [routerLink]=\\\"['/dashboard']\\\">\\n                <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n            </li>\\n            <li>\\n                <a [routerLink]=\\\"['/directory']\\\">Contacts</a>\\n            </li>\\n            <li class=\\\"active\\\">Contact</li>\\n        </ol>\\n    </section>\\n    <!-- Main content -->\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box box-primary\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div id=\\\"size\\\" class=\\\"col-xs-12 col-sm-5 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"contact-section\\\">\\n                                <div class=\\\"name-contact\\\">\\n                                    <i class=\\\"sq sq-comments\\\"></i>\\n                                    <p style=\\\"display: inline; font-size: 15px; margin-left: 5px;\\\"> {{ (contact.cont_firstname)}} {{(contact.cont_lastname)}}</p>\\n                                </div>\\n                                <!--.name contact-->\\n                                <div class=\\\"profile-contact\\\">\\n                                    <!-- <img src=\\\"img/profile.jpg\\\"> -->\\n                                    <img [src]=\\\"contact.cont_photo\\\" onError=\\\"this.src='img/user.png'\\\">\\n                                    <p> {{ (contact.cont_cargo)}}</p>\\n                                </div>\\n                                <!--.profile contact-->\\n                                <div class=\\\"row\\\" style=\\\"padding:15px;\\\">\\n                                    <div class=\\\"col-xs-5\\\"> \\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Email:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Cell Phone:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Work Address:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Work Phone:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Home Address:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Home Phone:</p>\\n                                        <p style=\\\"color:#807E7E; font-weight:bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">Personal Email:</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-7\\\">\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_email)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_cellphone)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_workaddress)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_workphone)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_homeaddress)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_homephone)}}</p>\\n                                        <p style=\\\"color:#807E7E; min-height: 19px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\\\">{{(contact.cont_personalemail)}}</p>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--.contacts-->\\n                            <div class=\\\"options-items\\\">\\n                                <div id=\\\"activity\\\" class=\\\"tab-activity fade in active\\\">\\n                                    <div class=\\\"item-contact active\\\">\\n                                        <img src=\\\"img/activity.svg\\\" style=\\\"height:25px;\\\">\\n                                        <!-- <i class=\\\"fa fa-circle-o-notch\\\" aria-hidden=\\\"true\\\"></i> -->\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#mdActivity\\\" (click)=\\\"registerTab('activity', $event)\\\">Activity </a>\\n                                    </div>\\n                                </div>\\n                                <div id=\\\"profile-settings\\\" class=\\\"tab-profile-settings\\\">\\n                                    <div class=\\\"item-contact\\\">\\n                                        <!-- <i class=\\\"sq sq-settings\\\" aria-hidden=\\\"true\\\"></i> -->\\n                                        <img src=\\\"img/profilesettings.svg\\\" style=\\\"height:25px;\\\">\\n                                        <a data-toggle=\\\"tab\\\" href=\\\"#mdProfile\\\" (click)=\\\"registerTab('profile', $event)\\\">Profile-Settings </a>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--.options-items-->\\n                        </div>\\n                        <!--.col size-->\\n                        <div class=\\\"col-xs-12 col-sm-7 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"tab-content\\\" id=\\\"content-right\\\">\\n                                <div *ngIf =\\\"tabActive == 'activity'\\\" id=\\\"mdActivity\\\" class=\\\"tab-activity fade in active\\\" [ngClass]=\\\"{'d-none': tabActive == 'profile'}\\\">\\n                                    <div class=\\\"form-group\\\">\\n                                        <p> Activity </p>\\n                                    </div>\\n                                </div>\\n                                <div *ngIf =\\\"tabActive == 'profile'\\\" id=\\\"mdProfile\\\" class=\\\"tab-profile fade row\\\" [ngClass]=\\\"{'d-none': tabActive == 'activity'}\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Name</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory form-directory\\\" [(ngModel)]=\\\"editcontact.cont_firstname\\\" placeholder=\\\"Type Name\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Last Name</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                           <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_lastname\\\" placeholder=\\\"Type Lastname\\\">                                            \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Email</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_email\\\" placeholder=\\\"Add email\\\">                                            \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Cell Phone</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <!-- <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_cellphone\\\" placeholder=\\\"Add Cell Phone\\\"> -->\\n                                            <p-inputMask class=\\\" form-control sqlx-inputmask inputmask-directory\\\" mask=\\\"+99 999 9999999\\\" id=\\\"cellphone\\\" [(ngModel)]=\\\"editcontact.cont_cellphone\\\" name=\\\"phoneUser_addUser\\\" placeholder=\\\"Add Cell Phone\\\"></p-inputMask>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Charge</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_cargo\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Work Address</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_workaddress\\\" placeholder=\\\"Type Address\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Work Phone</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_workphone\\\" placeholder=\\\"Change Work Phone\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Home Address</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_homeaddress\\\" placeholder=\\\"Type Address\\\">                                            \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Home Phone</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_homephone\\\" placeholder=\\\"Change Home Phone\\\">                      \\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                                        <label class=\\\"col-xs-12\\\" style=\\\"color:#807E7E;\\\">Personal Email</label>\\n                                        <div class=\\\"col-xs-12\\\" style=\\\"margin-bottom:10px;\\\">\\n                                            <input class=\\\"form-control form-directory\\\" [(ngModel)]=\\\"editcontact.cont_personalemail\\\" placeholder=\\\"Add email\\\">                                            \\n                                        </div>\\n                                    </div>\\n                                      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Share with</label>\\n                                                <span class=\\\"ui-fluid\\\">\\n                                            <p-autoComplete id=\\\"autcompleteShareWith_editTask\\\" name=\\\"autcompleteShareWith_editTask\\\" class=\\\"autocompleteSqlx\\\"\\n                                                            [(ngModel)]=\\\"editcontact.grupsShared\\\"\\n                                                            [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                                            styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"label\\\"\\n                                                            [multiple]=\\\"true\\\">\\n                        \\n                                            </p-autoComplete>\\n                                        </span>\\n                                            </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6 content-btncontact\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btnedit-contact\\\" (click)=\\\"updateContact()\\\" [disabled]=\\\"validate()\\\">Save</button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <!--.tab-content-->\\n                        </div>\\n                        <!--.col size-->\\n                    </div>\\n                    <!-- /.box-body -->\\n                </div>\\n                <!-- /.box primary -->\\n            </div>\\n            <!-- /.col -->\\n        </div>\\n        <!-- /.row -->\\n    </section>\\n    <!-- /.content -->\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/directory/contact.template.html\n// module id = 836\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"sprint_det\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight: bold;\\\">\\n            <i class=\\\"icon icon-maincontrol\\\" aria-hidden=\\\"true\\\"></i> SPRINT {{'# ' + sprint.spri_id }}\\n            <span style=\\\"font-weight: bold; color: #737374;\\\">&nbsp;&nbsp; Group: {{ sprint.grop_name }}</span>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"icon icon-home\\\"></i> Home</a>\\n            </li>\\n            <li>\\n                <a routerLink=\\\"/sprints\\\">\\n                    <i class=\\\"icon icon-home\\\"></i> sprints</a>\\n            </li>\\n            <li class=\\\"active\\\">Sprint {{'# ' + sprint.spri_id }}</li>\\n        </ol>\\n    </section>\\n    <div class=\\\"row\\\" style=\\\"height: 54px;background: #dce3e6;\\\">\\n        <div class=\\\"\\\">\\n            <!-- <div class=\\\"title-header-sprint col-xs-2 col-sm-2 col-md-2 col-lg-2\\\">\\n              <h4>Group: {{ sprint.grop_name }}</h4>\\n            </div> -->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"text-align: center;background-color: rgb(227,237,241); \\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                    <div class=\\\"btn-groupP\\\" style=\\\"position: relative; margin-top: 14px;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"addSpTask()\\\" data-toggle=\\\"modal-sptask\\\"\\n                            data-target=\\\"#mdAddSpTask\\\" style=\\\"font-weight: bold; color:white;background-color:rgb(15, 180, 225);width: 160px!important;margin-bottom: 5px;\\\">\\n                            <i class=\\\"sq sq-tasks-notifications\\\" style=\\\"font-size: 16px;\\\"></i>\\n                            <div class=\\\"pull-right\\\" style=\\\"transform: translate(-31px, 1px);\\\">Add task</div>\\n                        </button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"addTask()\\\" data-toggle=\\\"modal\\\"\\n                             style=\\\"font-weight: bold;color:white;background-color: rgb(128, 186, 84);width: 160px!important;margin-bottom: 5px;\\\">\\n                            <i class=\\\"sq sq-tasks-notifications\\\" style=\\\"font-size: 16px;\\\"></i>\\n                            <div class=\\\"pull-right\\\" style=\\\" transform: translate(-23px, 1px);\\\">Create Task</div>\\n                        </button>\\n                        <button [disabled]=\\\"seltasks.length == 0\\\" [ngStyle]=\\\"{'cursor': seltasks.length == 0 ? 'not-allowed' : 'pointer' }\\\"\\n                            type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"delTaskToSprint(null)\\\" style=\\\"font-weight: bold;color:white;background-color:rgb(240, 20, 88);width: 160px!important;margin-bottom: 5px;\\\">\\n                            <i class=\\\"fa fa-minus\\\" style=\\\"font-size: 14px;\\\"></i>&nbsp;Delete Task\\n                        </button>\\n                        <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);width: 160px!important;margin-bottom: 5px;\\\"\\n                            data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                            <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(247,251,252); font-size: 14px;\\\"></i> Refresh\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <section class=\\\"content\\\" style=\\\"background-color: rgb(247,251,252);\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-7\\\" style=\\\"padding-left: 0px; padding-right: 0px;margin-bottom: 5px;\\\">\\n                <!-- info sprint -->\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 10px;\\\">\\n                    <div class=\\\"modal-content-sprint\\\">\\n                        <div class=\\\"modal-header-info-sprint\\\">\\n                            <span>Sprint Info</span>\\n                            <h4 class=\\\"modal-title\\\"></h4>\\n                        </div>\\n                        <div class=\\\"modal-body\\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">Sprint Start: </label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_init}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">End Date: </label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_end}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">Points: </label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_points}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                    <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Description:\\n                                    </label>\\n                                    <div class=\\\"label-noedit col-xs-10 col-sm-10 col-md-10 col-lg-10 span-sqlx\\\" style=\\\"max-height: 75px; overflow: scroll;\\\">\\n                                        {{sprint.spri_description}}\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <!-- end info sprint -->\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right: 0px; padding-left: 0px;\\\">\\n                    <!-- team -->\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"modal-content-sprint\\\">\\n                            <div class=\\\"modal-header-info-sprint\\\">\\n                                <span>Team</span>\\n                                <h4 class=\\\"modal-title\\\"></h4>\\n                            </div>\\n                            <div class=\\\"modal-body\\\">\\n                                <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                                    <div class=\\\"nav-tabs-custom-spr\\\" style=\\\"overflow-x: scroll;\\\">\\n                                        <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                            <li *ngFor=\\\"let tm of team; let i = index\\\" [ngClass]=\\\"{ 'active': i=='0'}\\\">\\n                                                <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" [ngClass]=\\\"{ 'assigned': tm.user_assigned }\\\" (click)=\\\"teamInfo(tm.user_name, tm.user_lastname, tm.role_name,[tm.user_id],tm.user_id) \\\"\\n                                                    style=\\\"color: #839195; text-decoration: none;\\\">\\n                                                    <div *ngIf=\\\"tm.user_id != 0\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.user_name +' '+ tm.user_lastname}}\\\"\\n                                                        class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;background: transparent;\\\"\\n                                                        [ngStyle]=\\\"{ 'border-color': tm.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                                                        <img [src]=\\\"tm.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                            style=\\\"padding: 0px; width:39px;height:39px;border-radius: 50%;\\\"\\n                                                            class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tm.user_id == 0\\\" class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;\\\"\\n                                                        [ngStyle]=\\\"{ 'background': tm.role_color}\\\">\\n                                                        <i class=\\\"sq sq-scrum user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 30px;\\\"></i>\\n                                                    </div>\\n                                                </a>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-md-12\\\">\\n                                        <h5 id=\\\"team-name\\\" class=\\\"team-label\\\" style=\\\"margin-bottom:0;\\\"></h5>\\n                                        <h6 id=\\\"team-profile\\\" class=\\\"team-label\\\" style=\\\"margin:0;\\\"></h6>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-5\\\" style=\\\"padding-left: 0px;margin-top: 5px;\\\">\\n                <!-- grafica burndown -->\\n                <div id=\\\"burndown-sprint\\\" class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11\\\">\\n                    <div class=\\\"box box-success burndown-border\\\">\\n                        <div class=\\\"box-header with-border border-burndown\\\">\\n                            <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 btns-burndown\\\" style=\\\"padding:0;\\\">\\n                                <div class=\\\"box-tittle BurnDown\\\" style=\\\"padding-top: 5px;transform: translate(-7px, -9px);\\\">\\n                                    <i class=\\\"sq sq-burndown\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <div class=\\\"burndownsprint\\\">BurnDown</div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 btns-burndown\\\" style=\\\"padding-left: 0px;padding-right: 0px;\\\">\\n                                <button id=\\\"burndown-sprint-minus-sprint\\\" type=\\\"button\\\" class=\\\"btn btn-box-tool btn-minus pull-right\\\"\\n                                    data-widget=\\\"collapse\\\" style=\\\"height: 23px;width: 23px;\\\">\\n                                    <i class=\\\"fa fa-minus\\\" style=\\\"margin-left: -5px;margin-top: -6px;padding: -3px;position: absolute;\\\"></i>\\n                                </button>\\n                                <div class=\\\"pull-right\\\" id=\\\"button-work-team\\\">\\n                                    <a id=\\\"showburndown_sprint\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showburndown()\\\">YOUR\\n                                        WORK TEAM\\n                                        <i class=\\\"fa fa-chevron-down\\\" aria-hidden=\\\"true\\\"></i></a>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"box-body\\\">\\n                            <p-chart id=\\\"burndownData_sprint\\\" type=\\\"line\\\" [data]=\\\"burndownData\\\" (onDataSelect)=\\\"chartClicked($event)\\\"\\n                                height=\\\"200\\\"></p-chart>\\n                        </div>\\n                    </div>\\n                </div>\\n                <!-- end grafica burndown -->\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <!-- <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div> -->\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-12 col-lg-12\\\">\\n                <div class=\\\"box-params-sprint\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div>\\n                            <br>\\n                            <table *ngIf=\\\"sprintrefs\\\" id=\\\"results-params\\\" class=\\\"table table-bordered-sqlxs table-sprintsview\\\">\\n                                <thead style=\\\"border: 1px solid #fff;\\\">\\n                                    <th (click)=\\\"selectAll(1)\\\" style=\\\"width: 5%\\\">\\n                                        <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                        <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                    </th>\\n                                    <th style=\\\"width: 5%;\\\">Task</th>\\n                                    <th style=\\\"width: 40%;\\\">Task Description</th>\\n                                    <th style=\\\"width: 10%;\\\">Product</th>\\n                                    <th style=\\\"width: 5%;\\\">Project Related</th>\\n                                    <th style=\\\"width: 10%;\\\">Delivery Date</th>\\n                                    <th style=\\\"width: 5%;\\\">Task Points</th>\\n                                    <th style=\\\"width: 5%;\\\">Task Points D</th>\\n                                    <th style=\\\"width: 5%;\\\">Assigned</th>\\n                                    <th style=\\\"width: 15%;\\\">Actions</th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let spr of sprints | filterfield : { pos : posState, text : textState }\\\">\\n                                        <td>\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"selTasks_sprint\\\" name=\\\"seltasks\\\" value=\\\"{{spr.task_id}}\\\"\\n                                                    label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td>{{ escapeHtml(spr.task_id) }}</td>\\n                                        <td style=\\\"text-align: justify!important;\\\">{{ escapeHtml(spr.task_subject) }}\\n                                        </td>\\n                                        <td>{{ spr.prod_name }}</td>\\n                                        <td>\\n                                            <a (click)=\\\"showModalProject(spr.proj_id)\\\" *ngIf=\\\"spr.proj_id; else alternan\\\">{{escapeHtml(spr.proj_id)\\n                                                }}</a>\\n                                            <ng-template #alternan>\\n                                                <p> - </p>\\n                                            </ng-template>\\n                                        </td>\\n                                        <td>{{ escapeHtml(spr.task_delivery) }}</td>\\n                                        <td>{{ escapeHtml(spr.task_points) }}</td>\\n                                        <td>{{ escapeHtml(spr.task_pointsd) }}</td>\\n                                        <td>\\n                                            <div class=\\\"col-xs-12 col-md-12\\\">\\n                                                <div class=\\\"icon-team-sprint-table\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{spr.user_name +' '+ spr.user_lastname}}\\\"\\n                                                    style=\\\"padding: 0px; margin-left: 5px;background: transparent;\\\"\\n                                                    [ngStyle]=\\\"{ 'border-color': spr.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                                                    <img [src]=\\\"spr.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                        style=\\\"width:24px;height:24px;border-radius: 50%;\\\" class=\\\"user-image\\\"\\n                                                        alt=\\\"User Image\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td>\\n                                            <div class=\\\"btn-group-params\\\">\\n                                                <i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"showModaltk(spr.task_id)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"View\\\"></i>\\n                                                <i class=\\\"fa fa-trash\\\" aria-hidden=\\\"true\\\" (click)=\\\"delTaskToSprint(spr.task_id)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\"></i>\\n                                                <i class=\\\"fa fa-pencil\\\" aria-hidden=\\\"true\\\" (click)=\\\"editTask(spr)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"></i>\\n                                                <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" (click)=\\\"showDuplicateTaskModal(spr.task_id)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Duplicate\\\"></i>\\n                                            </div>\\n                                        </td>\\n                                        <projectview [myProjectId]=\\\"spr.proj_id\\\"></projectview>\\n                                    </tr>\\n                                </tbody>\\n                                <tfoot *ngIf=\\\"textState !=''\\\">\\n                                    <tr>\\n                                        <th></th>\\n                                        <th></th>\\n                                        <th></th>\\n                                        <th></th>\\n                                        <th></th>\\n                                        <th style=\\\"text-align: right; color:#333333;\\\">Total Points:</th>\\n                                        <th style=\\\"text-align: center; color:#333333;\\\">{{round(totalpoints_p, 2)}}</th>\\n                                        <th style=\\\"text-align: center; color:#333333;\\\">{{round(totalpoints_d, 2)}}</th>\\n                                        <th style=\\\"text-align: right; color:#333333;\\\">Pending Points:</th>\\n                                        <th style=\\\"text-align: center; color:#333333;\\\">(\\n                                            {{round(totalpoints_pending, 2)}}\\n                                            )\\n                                        </th>\\n                                    </tr>\\n                                </tfoot>\\n                            </table>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <!-- <div class=\\\"row\\\" style=\\\"margin-top: 10px;\\\">\\n\\n        </div> -->\\n    </section>\\n\\n    <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdAddSpTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"closeModal()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        Add Tasks\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"tab-content\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;margin-bottom: 3px;\\\">\\n                                <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff; float: right;\\\">\\n                                    <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                        <div class=\\\"label-input-mainfilter\\\">\\n                                            <input id=\\\"searchTask_mdAddSpTask\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\"\\n                                                class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"searchtask\\\"\\n                                                (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                        </div>\\n                                        <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                            <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                                <i class=\\\"sq sq-view\\\"></i>\\n                                            </button>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\" style=\\\"margin-bottom: 0px;\\\">\\n                                        <thead>\\n                                            <th style=\\\"text-align: center; width: 5%;\\\">\\n                                                <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                                <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                            </th>\\n                                            <th style=\\\"text-align: center; width: 8%;\\\">Task</th>\\n                                            <th style=\\\"text-align: center; width: 13%;\\\">Status</th>\\n                                            <th style=\\\"text-align: center; width: 40%;\\\">Task Description</th>\\n                                            <th style=\\\"text-align: center; width: 8%;\\\">Points</th>\\n                                            <th style=\\\"text-align: center; width: 8%;\\\">Points Recorded</th>\\n                                            <th style=\\\"text-align: center; width: 18%;\\\">Asigned</th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"max-height: 600px;overflow: scroll;width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let tk of sprintTask\\\">\\n                                                <td style=\\\"text-align: center; width: 5%;\\\">\\n                                                    <div class=\\\"ui-g\\\">\\n                                                        <p-checkbox id=\\\"checkboxSeltasks_mdAddSpTask\\\" name=\\\"listask\\\"\\n                                                            value=\\\"{{tk.task_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\">\\n                                                        </p-checkbox>\\n                                                    </div>\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 8%;\\\">{{ escapeHtml(tk.task_id) }}\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 13%;\\\">\\n                                                    <div *ngIf=\\\"tk.para_status == 35 || tk.para_status == 36 ||tk.para_status == 37 \\\">\\n                                                        <small class=\\\"label task-pending \\\">\\n                                                            <i class=\\\"sq sq-pending\\\"></i> Pending\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 38\\\">\\n                                                        <small class=\\\"label task-developing\\\">\\n                                                            <i class=\\\"sq sq-developing\\\"></i> Developing\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 39\\\">\\n                                                        <small class=\\\"label task-developing\\\">\\n                                                            <i class=\\\"sq sq-move-to-testing\\\"></i> Testing\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 41\\\">\\n                                                        <small class=\\\"label task-improving\\\">\\n                                                            <i class=\\\"sq sq-improving\\\"></i> Improving\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 42\\\">\\n                                                        <small class=\\\"label task-expiring\\\">\\n                                                            <i class=\\\"fa fa-times-circle\\\"></i> Closed\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 40\\\">\\n                                                        <small class=\\\"label task-completed\\\">\\n                                                            <i class=\\\"sq sq-completed\\\"></i> Completed\\n                                                        </small>\\n                                                    </div>\\n                                                    <div *ngIf=\\\"tk.para_status == 44\\\">\\n                                                        <small class=\\\"label task-backlog\\\">\\n                                                            <i class=\\\"sq sq-backlog\\\"></i> Backlog\\n                                                        </small>\\n                                                    </div>\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 40%;\\\">\\n                                                    {{ escapeHtml(tk.task_subject) }}\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 8%;\\\">\\n                                                    {{ escapeHtml(tk.task_points) }}\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 8%;\\\">\\n                                                    {{ escapeHtml(tk.task_pointsd) }}\\n                                                </td>\\n                                                <td style=\\\"text-align: center; width: 18%;\\\">{{ escapeHtml(tk.asigned)\\n                                                    }}\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n\\n                            <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                <div class=\\\"contacts-controls\\\">\\n                                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                            {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage *\\n                                            limitpage)\\n                                            >\\n                                            itemcount ?\\n                                            itemcount : (currentpage * limitpage)\\n                                            }} of {{ itemcount }} results\\n                                        </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                        <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                            [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                            <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                            (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                            <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                        <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" style=\\\"\\\"\\n                                            [(ngModel)]=\\\"currentpage\\\" (change)=\\\"getList()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                        </select>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                        <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                            [disabled]=\\\"setCurPage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\" (click)=\\\"closeModal()\\\">Close\\n                    </button>\\n                    <button (click)=\\\"saveSpTask(seltasks)\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add\\\" [disabled]=\\\"!seltasks.length || !sprintTask || sprintTask.length == 0\\\"\\n                        data-dismiss=\\\"modal\\\">\\n                        Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <!--Formulario Create Task y edit task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddTaskToSprint\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div class=\\\"modal-content-params\\\">\\n                <div *ngIf=\\\"task.task_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" +\\n                        task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div *ngIf=\\\"!task.task_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>&nbsp;&nbsp; New Task</h4>\\n                </div>\\n\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input id=\\\"inputSubject_AddTaskToSprint\\\" name=\\\"inputSubject_AddTaskToSprint\\\" class=\\\"form-control sqlx-input\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"Subject\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssign_AddTaskToSprint\\\" name=\\\"dropdownAssign_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"dropdownAssign_AddTaskToSprint\\\" name=\\\"dropdownAssign_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropdownProduct_AddTaskToSprint\\\" name=\\\"dropdownProduct_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group input-squadlinx \\\">\\n                                <label>Points</label>\\n                                <input id=\\\"inputPoints_AddTaskToSprint\\\" name=\\\"inputPoints_AddTaskToSprint\\\" type=\\\"number\\\"\\n                                    class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_points\\\" [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_AddTaskToSprint\\\" name=\\\"calendarDeliveryDate_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"task.task_delivery\\\" icon=\\\"sq sq-calendar\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_AddTaskToSprint\\\" name=\\\"dropdownProject_AddTaskToSprint\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_newTask\\\" name=\\\"dropdownLevel_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container-sprint\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n\\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_newTask\\\" name=\\\"units_newTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">\\n                                    </div>\\n\\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_newTask\\\" name=\\\"dropdownUnits_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\"\\n                                            [(ngModel)]=\\\"task.unit_id\\\" placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_newTask\\\" name=\\\"autcompleteShareWith_newTask\\\"\\n                                        class=\\\"autocompleteSqlx shareWith_taskUsers\\\" [(ngModel)]=\\\"task.usersShared\\\"\\n                                        [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <!--<div class=\\\"col-xs-12 col-sm-6 col-md-5 col-lg-5\\\" style=\\\"height: 58px;\\\">-->\\n                        <!--<label class=\\\"label-input-checkbox-sqlx\\\">Options</label>-->\\n                        <!--<div class=\\\"col-xs-12 col-md-12 col-lg-12 input-checkbox-sqlx\\\" style=\\\"padding-top: 5px;\\\">-->\\n                        <!--<label class=\\\"form-check-label\\\">-->\\n                        <!--<input id=\\\"inputComplete_AddTaskToSprint\\\" name=\\\"inputComplete_AddTaskToSprint\\\"-->\\n                        <!--type=\\\"checkbox\\\" class=\\\"form-check-input\\\" [(ngModel)]=\\\"task.completed\\\">-->\\n                        <!--Mark-->\\n                        <!--as Complete-->\\n                        <!--</label>-->\\n                        <!--</div>-->\\n                        <!--</div>-->\\n                    </div>\\n\\n                    <!-- row navegacion-->\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\" id=\\\"tabs_createTask\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                                <a id=\\\"descriptionTask_AddTaskToSprint\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\"\\n                                    (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                                <a id=\\\"associateFormTask_AddTaskToSprint\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\"\\n                                    (click)=\\\"setPage(2)\\\">Associate Form</a>\\n                            </li>\\n                            <li id=\\\"li_criteria_sprint_newTask\\\" *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenu == 3}\\\">\\n                                <a id=\\\"a_criteriaTask_sprint_newTask\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_sprint_newTask\\\"\\n                                    (click)=\\\"setPage(3)\\\">Criteria </a>\\n                            </li>\\n                            <li id=\\\"li_attachments_sprint_newtask\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenu == 4}\\\">\\n                                <a id=\\\"a_attachmentsTask_sprint_newTask\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_sprint_newTask\\\"\\n                                    (click)=\\\"setPage(4)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\" id=\\\"divContenedor_descriptionTask_AddTaskToSprint\\\"\\n                                name=\\\"divContenedor_descriptionTask_AddTaskToSprint\\\">\\n                                <p-editor id=\\\"editor_descriptionTask_AddTaskToSprint\\\" name=\\\"editor_descriptionTask_AddTaskToSprint\\\"\\n                                    [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\" id=\\\"divAssociateForm_AddTaskToSprint\\\" name=\\\"divAssociateForm_AddTaskToSprint\\\">\\n                                <div style=\\\"max-height:142px; overflow:scroll; width:100%\\\">\\n                                    <table style=\\\"text-align: center;width: 100%;\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 50px;\\\">\\n                                                <td style=\\\"width: 40%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                                    <div class=\\\"form-squadlinx\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td style=\\\"width: 60%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                                    <div class=\\\"form-squadlinx\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!--pestaña para los criterios de aceptacion de las tareas-->\\n                        <div *ngIf=\\\"tagMenu == 3 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_sprint_newTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask ; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldForm(i)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Criteria\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n                        <!--end pestaña para los criterios de aceptacion de las tareas-->\\n\\n                        <!--pestaña new div for attachments-->\\n                        <div *ngIf=\\\"tagMenu == 4 && task.attachments && task.attachments.length > 0\\\" id=\\\"attachments_sprint_newTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div id=\\\"divAttachmentsTask_AddTaskToSprint\\\" name=\\\"divAttachmentsTask_AddTaskToSprint\\\"\\n                                class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button *ngIf=\\\"task.task_id\\\" id=\\\"btnDeleteAttachmentTask_AddTaskToSprint\\\"\\n                                                        type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment_editTask(task, att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"!task.task_id\\\" id=\\\"btnDeleteAttachment_AddTaskToSprint\\\"\\n                                                        type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment_newTask(att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!-- row navegacion-->\\n                </div>\\n                <!--end. pestaña new div for attachments-->\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;position: inherit;background-color: #007bd2!important;border-color: #007bd2!important;\\\"\\n                            for=\\\"fileUpload_AddTaskToSprint\\\" class=\\\"custom-file-upload btn-success btn-sm custom-upload-form-projectlist\\\">\\n                            <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_AddTaskToSprint\\\" name=\\\"fileUpload_AddTaskToSprint\\\" type=\\\"file\\\" style=\\\"display: none;\\\"\\n                            accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            (change)=\\\"onChange($event)\\\" />\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                            <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm  btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\"\\n                            [disabled]=\\\"validateTask()\\\" (click)=\\\"saveTaskToSprint(sprint.spri_id)\\\">\\n                            Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!--End Formulario Create Task y edit task-->\\n\\n    <!--Modal duplicate task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdDuplicateTask\\\" role=\\\"dialog\\\">\\n        <!--Modal New Task-->\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n                role=\\\"document\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"subject_duplicateTask\\\" name=\\\"subject_duplicateTask\\\"\\n                                    [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"dropwonProduct_duplicateTask\\\" name=\\\"dropwonProduct_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                    [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Applicant</label>\\n                                <p-dropdown id=\\\"dropdownAssign_duplicateTask\\\" name=\\\"dropdownAssign_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                    [(ngModel)]=\\\"task.user_applicant\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"dropdownProject_duplicateTask\\\" name=\\\"dropdownProject_duplicateTask\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\"\\n                                    [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"dropdownSprint_duplicateTask\\\" name=\\\"dropdownSprint_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\"\\n                                    [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Level</label>\\n                                <p-dropdown id=\\\"dropdownLevel_duplicateTask\\\" name=\\\"dropdownLevel_duplicateTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"levels\\\" [(ngModel)]=\\\"task.tklv_id\\\"\\n                                    placeholder=\\\"Select a Level\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_duplicateTask\\\" name=\\\"calendarDeliveryDate_duplicateTask\\\"\\n                                    class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                                    dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\"\\n                                    yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"points_duplicateTask\\\" name=\\\"points_duplicateTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                    [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete id=\\\"autcompleteShareWith_duplicateTask\\\" name=\\\"autcompleteShareWith_duplicateTask\\\"\\n                                        class=\\\"autocompleteSqlx shareWith_taskUsers\\\" [(ngModel)]=\\\"task.usersShared\\\"\\n                                        [suggestions]=\\\"usersShareWith\\\" (completeMethod)=\\\"filterMultipleShared($event)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\" field=\\\"completename\\\"\\n                                        [multiple]=\\\"true\\\">\\n\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-8 col-lg-8\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"performance-container\\\">\\n                                    <div class=\\\"performance performance-text\\\">\\n                                        <label>Performance Indicator</label>\\n                                    </div>\\n                        \\n                                    <div class=\\\"spinner-squadlinx performance\\\">\\n                                        <input type=\\\"number\\\" id=\\\"units_editTask\\\" name=\\\"units_editTask\\\" class=\\\"input_number_squadlinx\\\"\\n                                            [(ngModel)]=\\\"task.unit_points\\\" step=\\\"01\\\" min=\\\"0\\\">\\n                                    </div>\\n                        \\n                                    <div class=\\\"dropdownSqlx\\\">\\n                                        <p-dropdown id=\\\"dropdownUnits_editTask\\\" name=\\\"dropdownUnits_editTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"task.unit_id\\\"\\n                                            placeholder=\\\"Select a Unit\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                                <span class=\\\"has-error\\\" *ngIf=\\\"task.unit_points &&  task.unit_points < 0\\\">Units must be greater than zero</span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_duplicateTask\\\" [ngClass]=\\\"{'active':tagMenuDupliTk == 1}\\\">\\n                                <a id=\\\"a_descriptionTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#description_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(1)\\\">Description</a>\\n                            </li>\\n                            <li id=\\\"li_criteria_duplicateTask\\\" *ngIf=\\\"task.criteriaTask && task.criteriaTask.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuDupliTk == 2}\\\">\\n                                <a id=\\\"a_criteriaTask_duplicateTask\\\" data-toggle=\\\"tab\\\" href=\\\"#criteria_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(2)\\\">Criteria </a>\\n                            </li>\\n                            <li id=\\\"li_attachments_duplicateTask\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuDupliTk == 3}\\\">\\n                                <a id=\\\"a_attachmentsTask_duplicateTaskk\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_duplicateTask\\\"\\n                                    (click)=\\\"setPageDupliTk(3)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuDupliTk == 1\\\" id=\\\"description_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" id=\\\"divContenedor_description_duplicateTask\\\" name=\\\"divContenedor_description_duplicateTask\\\"\\n                                style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editorDescription_duplicateTask\\\" name=\\\"editorDescription_duplicateTask\\\"\\n                                    [(ngModel)]=\\\"task.task_description_d\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <span class=\\\"ql-header\\\">\\n                                                <select class=\\\"ql-header\\\">\\n                                                    <option value=\\\"1\\\">Heading</option>\\n                                                    <option value=\\\"2\\\">Subheading</option>\\n                                                    <option selected>Normal</option>\\n                                                </select>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                                <select class=\\\"ql-font\\\">\\n                                                    <option selected>Sans Serif</option>\\n                                                    <option value=\\\"serif\\\">Serif</option>\\n                                                    <option value=\\\"monospace\\\">Monospace</option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                            <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                            <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                            <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                            <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                            <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                <select class=\\\"ql-align\\\">\\n                                                    <option selected></option>\\n                                                    <option value=\\\"center\\\"></option>\\n                                                    <option value=\\\"right\\\"></option>\\n                                                    <option value=\\\"justify\\\"></option>\\n                                                </select>\\n                                            </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 2 && task.criteriaTask && task.criteriaTask.length > 0\\\" id=\\\"criteria_duplicateTask\\\"\\n                            class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px; margin-bottom: 0px;\\\">\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <tr>\\n                                            <th class=\\\"th_columnField_criteriaTask\\\">Field</th>\\n                                            <th class=\\\"th_columnDescription_criteriaTask\\\">Description</th>\\n                                            <th class=\\\"th_columnBtnDelete_criteriaTask\\\"></th>\\n                                        </tr>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tkcr of task.criteriaTask ; let i=index;\\\">\\n                                            <td class=\\\"td_columnField_newForm_sqlx\\\">\\n                                                <label>{{tkcr.tkcr_num}}</label>\\n                                            </td>\\n                                            <td class=\\\"td_columnName_newForm_sqlx\\\">\\n                                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"tkcr.tkcr_description\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnBtnDelete_criteriaTask\\\">\\n                                                <button class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" type=\\\"button\\\"\\n                                                    (click)=\\\"deleteFieldFormDuplicateTask(i)\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Delete Criteria\\\" style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div>\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <tfoot>\\n                                        <tr>\\n                                            <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                    pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm(task.task_id )\\\"><i class=\\\"fa fa-plus-square-o\\\"></i></button>\\n                                            </td>\\n                                        </tr>\\n                                    </tfoot>\\n                                </table>\\n                            </div>\\n                        </div>\\n\\n                        <div *ngIf=\\\"tagMenuDupliTk == 3\\\" id=\\\"attachments_duplicateTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\" id=\\\"contenedorAttachmentsTask_duplicateTask\\\"\\n                                name=\\\"contenedorAttachmentsTask_duplicateTask\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                    <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                        style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentDuplicateTask(task, att)\\\">\\n                                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc;  font-size: 12px; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n                            for=\\\"fileUpload_duplicateTask\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"fileUpload_duplicateTask\\\" name=\\\"fileUpload_duplicateTask\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                            style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                        <button *ngIf=\\\"task.criteriaTask && task.criteriaTask.length == 0\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-associateCriteria\\\"\\n                            tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Criteria\\\" (click)=\\\"getFormTaskCriteria(0)\\\">\\n                            <i class=\\\"fa fa-plus-square-o add_criteria\\\"></i>Add Criteria\\n                        </button>\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_duplicateTask\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                            data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"buttonSave_duplicateTask\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validateDuplicateTask()\\\" (click)=\\\"saveDuplicateTask()\\\">\\n                            Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!-- . Modal duplicate task-->\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdBurndown\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdBurndown-sprint\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                        style=\\\"color: #ffffff; opacity: 1;\\\" (click)=\\\"doneFilter()\\\">\\n                        <i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h3 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">Select work\\n                        team\\n                    </h3>\\n                </div>\\n                <!--.modal-header-->\\n                <div id=\\\"search-mdBurndown-sprint\\\" class=\\\"modal-body\\\" style=\\\"height:100%;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 search-work-team\\\" style=\\\"padding-right: 3px;\\\">\\n                            <div class=\\\"pull left col-xs-11 col-sm-11 col-md-11 col-lg-11 label-input-mainfilter\\\" style=\\\" padding: 0; margin-left: 0;\\\">\\n                                <input id=\\\"searchuser-mdBurndown-sprint\\\" name=\\\"searchuser-mdBurndown-sprint\\\" type=\\\"text\\\"\\n                                    class=\\\"input-mainfilter\\\" placeholder=\\\"Search\\\" [(ngModel)]=\\\"searchuser\\\" style=\\\"font-weight: bold; font-size: 17px;\\\">\\n                            </div>\\n                            <div class=\\\"pull-right col-xs-1 col-sm-1 col-md-1 col-lg-1 search-input-mainfilter\\\" style=\\\"margin: 0; padding: 0;\\\">\\n                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248); font-size: 1.8em;\\\"></i>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div id=\\\"select-mdBurndown-sprint\\\" class=\\\"form-group\\\" style=\\\"max-height: 400px;overflow: scroll;\\\">\\n                        <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n                            <thead>\\n                                <th id=\\\"selectall-mdBurndown-sprint\\\" (click)=\\\"selectAllItems()\\\" style=\\\"width: 30px; padding-left: 10px; padding-top: 10px;\\\">\\n                                    <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"padding-left: 15px; padding-top: 0; font-size: 1.5em;\\\">\\n                                        <i *ngIf=\\\"selectedNodes.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                        <i *ngIf=\\\"selectedNodes.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                    </div>\\n                                    <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 select-product\\\" style=\\\"color: rgb(130, 145, 152); padding: 6px 0;\\\">\\n                                        ALL\\n                                    </div>\\n                                </th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let ct of contactsTree\\\">\\n                                    <td style=\\\"padding:0 12px 12px 12px; \\\">\\n                                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"height: auto; padding: 0;\\\">\\n\\n                                            <p-checkbox id=\\\"selectparent-mdBurndown-sprint\\\" name=\\\"selectparent-mdBurndown-sprint\\\"\\n                                                value=\\\"{{ct.data}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelectA($event, ct.children, ct.data)\\\"\\n                                                (change)=\\\"updateSelectA($event, ct.children, ct.data)\\\"></p-checkbox>\\n\\n                                        </div>\\n                                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align: left; padding: 0;text-transform: uppercase; font-weight: bold; \\\">\\n                                            {{ ct.label }}\\n                                        </div>\\n                                        <div *ngIf=\\\"ct.children.length > 0\\\">\\n                                            <div *ngFor=\\\"let ch of ct.children | filter : searchuser\\\" style=\\\"margin-left:20px;\\\">\\n                                                <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\"\\n                                                    style=\\\"margin:0;padding:0;height:auto;max-height: 30px;\\\">\\n                                                    <p-checkbox id=\\\"selectchild-mdBurndown-sprint\\\" name=\\\"selectchild-mdBurndown-sprint\\\"\\n                                                        value=\\\"{{ch.data}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\"\\n                                                        (click)=\\\"updateSelect($event)\\\" (change)=\\\"updateSelect($event)\\\">\\n                                                    </p-checkbox>\\n                                                </div>\\n                                                <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align:left;height:auto;max-height: 30px; padding:0; font-weight: bold;\\\">\\n                                                    {{ ch.label }}\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                </div>\\n                <!--.modal-body-->\\n                <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n                    <button id=\\\"btnDone_mdBurndown_sprint\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\"\\n                        data-dismiss=\\\"modal\\\" (click)=\\\"doneFilter()\\\">Done\\n                    </button>\\n                </div>\\n                <!--.modal-footer-->\\n            </div>\\n            <!--.modal-content-->\\n        </div>\\n        <!--.modal-dialog-->\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdDayView\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\" id=\\\"divContenedor_burndown_mdDayView\\\" name=\\\"divContenedor_burndown_mdDayView\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                            class=\\\"sq sq-close\\\" style=\\\"color:white;font-weight: bold;font-size: 20px;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color:white;font-weight: bold;font-size: 18px;text-transform: uppercase;\\\"><i\\n                            class=\\\"sq sq-burndown\\\" style=\\\"font-weight: bold;font-size: 33px;\\\"></i> Day Job for\\n                        {{dayJob}} </h4>\\n                </div>\\n                <div class=\\\"content-comments-users\\\" style=\\\"max-height: 190px;min-height: 75px;overflow: scroll;\\\">\\n                    <div class=\\\"box-body\\\" style=\\\"margin-top:10px;\\\" id=\\\"contentDescriptionSprint_mdDayView\\\" name=\\\"contentDescriptionSprint_mdDayView\\\">\\n                        <ul class=\\\"timeline daily-timeline\\\">\\n                            <li *ngFor=\\\"let day of dayView\\\" style=\\\"padding-bottom:5px;\\\">\\n                                <i class=\\\"fa fa-dot-circle-o\\\" style=\\\"color: rgb(68, 180, 248); font-size: 30px;background-color: transparent;margin-left: -3px; margin-top: -3px;\\\"></i>\\n                                <div class=\\\"timeline-item daily-timeline-item\\\">\\n                                    <h3 class=\\\"timeline-header timeline-dailyheader\\\">\\n                                        <span *ngIf=\\\"day.task_id && day.task_id != null\\\" [ngStyle]=\\\"day.spri_id == null ? { 'color': 'red' } : {}\\\">\\n                                            <b>TASK #{{day.task_id}}</b><br>\\n                                        </span>\\n                                        <b>Points registered:\\n                                            {{day.dail_points}}</b>\\n                                        <span *ngIf=\\\"day.task_percentage && day.task_percentage != 0\\\" style=\\\"font-weight: bold;margin-left: 258px;\\\">Progress:\\n                                            {{day.task_percentage}}%</span>\\n                                    </h3>\\n                                    <div class=\\\"timeline-body daily-timeline-body\\\" style=\\\"margin-top: -8px;max-height: 45px;overflow: scroll;color:rgb(167, 167, 167); width: 93%;text-align: justify;\\\">\\n                                        {{\\\"Comments: \\\" + escapeHtml(day.dail_text)}}\\n                                    </div>\\n                                </div>\\n                            </li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"totalp && totalp > 0\\\" style=\\\"border: none; text-align: center;\\\">\\n                    <h4 style=\\\"font-weight: bold;font-size: 14px;\\\"> TOTAL POINTS REGISTERED : {{\\\" \\\" + totalp}} </h4>\\n                </div>\\n                <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n                    <button id=\\\"btnClose_mdDayView_sprint\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                        style=\\\"background-color: rgb(141,180,95);\\\">Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\\n<taskview *ngFor=\\\"let spr of sprints | filterfield : { pos : posState, text : textState }\\\" [myTaskId]=\\\"spr.task_id\\\">\\n</taskview>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/sprint/sprint.template.html\n// module id = 837\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"sprints\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> SPRINTS\\n            <small style=\\\"font-size:15px;\\\">Scrum</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Sprints</li>\\n        </ol>\\n    </section>\\n    <div class=\\\"row\\\" style=\\\"height: 74px;background: #dce3e6;\\\">\\n        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"box-header-params\\\" style=\\\"border-bottom: none;\\\">\\n                <div class=\\\"btn-groupP\\\">\\n                    <input id=\\\"search-input\\\" type=\\\"text\\\" class=\\\"form-control input-sm\\\" [(ngModel)]=\\\"search\\\"\\n                           (ngModelChange)=\\\"changedExtraHandler($event)\\\"\\n                           style=\\\"display: inline-flex; background-color: #fff;color: #000;font-weight: 100;position:inherit;\\\">\\n                    <button type=\\\"button\\\" (click)=\\\"addSprint()\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n                            style=\\\"background-color:rgb(180, 188, 191);\\\" data-toggle=\\\"modal\\\"\\n                            data-target=\\\"#mdAddSprint\\\"\\n                            style=\\\"background: #b4bcbf!important; border: 1px solid #b4bcbf !important; color: #565a5b;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-plus\\\"></i>&nbsp;Add\\n                    </button>\\n                    <button type=\\\"button\\\" (click)=\\\"getMySprints()\\\" class=\\\"btn btn-sm btn-sqlx\\\"\\n                            style=\\\"background-color:rgb(180, 188, 191);\\\"\\n                            style=\\\"background: #b4bcbf!important; border: 1px solid #b4bcbf !important; color: #565a5b;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <section class=\\\"content\\\" style=\\\"padding: 0;\\\">\\n\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-1 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\"\\n                        style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList([''])\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\"\\n                               (click)=\\\"setGroupList([gr.grop_id+''])\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n\\n            <!-- <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\">\\n            </div> -->\\n            <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"margin-top: 20px; margin-left: 10px;\\\">\\n                <div>\\n                    <div class=\\\"box-params \\\">\\n                        <div class=\\\"box-body\\\">\\n                            <div class=\\\"table-responsive\\\" style=\\\"text-align: center;\\\">\\n                                <table id=\\\"results-params\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                                    <thead>\\n                                    <th (click)=\\\"setOrder('spri_init')\\\" style=\\\"width: 10%;\\\">Number\\n                                        <span [hidden]=\\\"posOrder !== 'spri_init'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('spri_init')\\\" style=\\\"width: 15%;\\\">Group\\n                                        <span [hidden]=\\\"posOrder !== 'spri_init'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('spri_init')\\\" style=\\\"width: 10%;\\\">Date Start\\n                                        <span [hidden]=\\\"posOrder !== 'spri_init'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th (click)=\\\"setOrder('spri_end')\\\" style=\\\"width: 10%;\\\">Date End\\n                                        <span [hidden]=\\\"posOrder !== 'spri_end'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th style=\\\"width: 10%;\\\">Points</th>\\n                                    <th (click)=\\\"setOrder('spri_description')\\\" style=\\\"width: 30%;\\\">Description\\n                                        <span [hidden]=\\\"posOrder !== 'spri_description'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                                    </th>\\n                                    <th style=\\\"width: 15%;\\\">Actions</th>\\n                                    </thead>\\n                                    <tbody>\\n                                    <!--<tr *ngFor=\\\"let spr of sprints | filter : search \\\">-->\\n                                    <tr *ngFor=\\\"let spr of sprints | filter : search | filterfield : { pos : posGroup, text : textGroup} | paginate : { currp : currentpage, limit : limitpage} | order : { pos : posOrder, desc : orderDesc }\\\"\\n                                        [ngStyle]=\\\"spr.para_status == 42 ? { 'background': 'rgba(255, 0, 0, 0.13)' } : spr.para_status == 43 ? { 'background': '#c0c0bf' } : {}\\\">\\n\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.spri_id) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.grop_name)\\n                                                }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.spri_init)\\n                                                }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.spri_end)\\n                                                }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">{{ escapeHtml(spr.spri_points)\\n                                                }}</a>\\n                                        </td>\\n                                        <td style=\\\"text-align: justify!important;max-height: 194px; overflow: scroll;\\\">\\n                                            <a [ngStyle]=\\\"{'font-weight': spr.tsst_name == 'New' ? 'bold' : 'normal' }\\\"\\n                                               [routerLink]=\\\"['/sprint', spr.spri_id]\\\">\\n                                                {{ escapeHtml(spr.spri_description) }}\\n                                            </a>\\n                                        </td>\\n                                        <td>\\n                                            <div class=\\\"btn-group-params\\\">\\n                                                <i class=\\\"sq sq-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"showModal(spr)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\"></i>\\n                                                <i class=\\\"sq sq-quickedit\\\" aria-hidden=\\\"true\\\" (click)=\\\"edit(spr)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"></i>\\n                                                <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\" (click)=\\\"delete(spr)\\\"\\n                                                    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\"></i>\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                            <div class=\\\"box-footer no-padding\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"margin-top: 10px;\\\">\\n                        <div class=\\\"footer-table-controls\\\">\\n                            <div class=\\\"btn-group\\\">\\n                                <button type=\\\"button\\\" (click)=\\\"load()\\\" class=\\\"btn btn-sm\\\" style=\\\"background: #dce3e6;\\\">\\n                                    <i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh\\n                                </button>\\n                            </div>\\n                            <div class=\\\"pull-right\\\">\\n                                {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) >\\n                                (sprints | filter : search | filterfield : { pos : posGroup, text : textGroup }).length\\n                                ? (sprints | filter : search | filterfield : { pos : posGroup, text : textGroup\\n                                }).length : (limitpage * currentpage) }} / {{ (sprints | filter : search | filterfield :\\n                                { pos : posGroup, text : textGroup }).length }}\\n                                <div class=\\\"btn-group\\\">\\n                                    <button [disabled]=\\\"currentpage == 1\\\" type=\\\"button\\\" class=\\\"btn btn-sm\\\"\\n                                            (click)=\\\"setCurPage(0)\\\" style=\\\"background: #dce3e6;\\\">\\n                                        <i class=\\\"fa fa-chevron-left\\\"></i>\\n                                    </button>\\n                                    <button [disabled]=\\\"currentpage == lastpage\\\" type=\\\"button\\\" class=\\\"btn btn-sm\\\"\\n                                            (click)=\\\"setCurPage(1)\\\" style=\\\"background: #dce3e6;\\\">\\n                                        <i class=\\\"fa fa-chevron-right\\\"></i>\\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdSprint\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff; font-size: 20px;\\\"></i>\\n                    <span>SPRINT # {{ sprint.spri_id }}</span>\\n                    <button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\"></h4>\\n                    <!--<i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>-->\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>Group</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6\\\">\\n                            <p>{{sprint.grop_name}}</p>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>Start Date:</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6\\\">\\n                            <p>{{sprint.spri_init}}</p>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>End Date:</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6\\\">\\n                            <p>{{ sprint.spri_end }}</p>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>Points:</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6\\\">\\n                            <p>{{ sprint.spri_points }}</p>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-3\\\">\\n                            <label>Description:</label>\\n                        </div>\\n                        <div class=\\\"col-xs-8\\\"\\n                             style=\\\"max-height: 150px;overflow: scroll;text-align: justify;color: #919da1;\\\">\\n                            <p>{{ sprint.spri_description }}</p>\\n                        </div>\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddSprint\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n                    <span>NEW SPRINT</span>\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\"></h4>\\n                </div>\\n                <div class=\\\"modal-body\\\" style=\\\"padding-right: 25px\\\">\\n                    <div class=\\\"row\\\">\\n                        <!-- Start Date -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Start Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\"\\n                                            id=\\\"calendarStartDate_sprints\\\"\\n                                            [(ngModel)]=\\\"newSprint.spri_init\\\"\\n                                            dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"\\n                                            view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                            [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!-- End Date -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>End Date</label>\\n                                <p-calendar id=\\\"calendarEndDate_sprints\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\"\\n                                            [(ngModel)]=\\\"newSprint.spri_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                            [showIcon]=\\\"true\\\"\\n                                            view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                            [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!-- Points -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input id=\\\"inputPoints_sprints\\\" name=\\\"inputPoints_sprints\\\" type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"newSprint.spri_points\\\" [min]=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <!-- Groups -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown id=\\\"dropdownGroup_sprints\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                            [autoWidth]=\\\"false\\\" [options]=\\\"lblgroups\\\"\\n                                            [(ngModel)]=\\\"newSprint.grop_id\\\" placeholder=\\\"Select Group\\\"\\n                                            filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Description -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 col-lg-12\\\">\\n                            <div class=\\\"form-group textarea-squadlinx\\\">\\n                                <label>Description</label>\\n                                <textarea id=\\\"textareaDescription_sprints\\\" class=\\\"form-control ng-pristine ng-valid ng-touched txt-sqlx\\\"\\n                                          placeholder=\\\"Description of the Sprint\\\" rows=\\\"3\\\"\\n                                          [(ngModel)]=\\\"newSprint.spri_description\\\"></textarea>\\n                            </div>\\n                        </div>\\n                        <!-- Days of Sprint -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group scrollable squadlinx-table\\\" style=\\\"max-height: 300px;\\\">\\n                                <label>Sprint Days</label>\\n                                <table class=\\\"table table-bordered\\\"\\n                                       style=\\\"margin-bottom:0px;\\\" id=\\\"tableSprintDays_sprints\\\">\\n                                    <thead>\\n                                    <th style=\\\"width:5%;\\\"></th>\\n                                    <th style=\\\"width:60%;\\\">Date</th>\\n                                    <th style=\\\"width:35%;\\\">Points</th>\\n                                    </thead>\\n                                    <tbody>\\n                                    <tr *ngFor=\\\"let spd of newSprint.spdays\\\">\\n                                        <td>\\n                                            <input class=\\\"checkbox-sprint \\\"type=\\\"checkbox\\\" id=\\\"checkboxDaysSprint_sprints\\\" name=\\\"product-checkbox\\\" [value]=\\\"spd.spdy_status\\\"\\n                                            [(ngModel)]=\\\"spd.spdy_status\\\" (change)=\\\"updateTotal(newSprint.spri_points)\\\">\\n                                        </td>\\n                                        <td class=\\\"td-table-sqlx\\\">{{spd.spdy_date}}\\n                                            <span style=\\\"text-align:right;\\\">({{spd.spdy_day_name}})</span>\\n                                        </td>\\n                                        <td class=\\\"td-table-sqlx\\\">\\n                                            <input type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"spd.spdy_value\\\"\\n                                                   [min]=\\\"0\\\" (value)=\\\"spd.spdy_value\\\" [disabled]=\\\"!spd.spdy_status\\\"\\n                                                   (ngModelChange)=\\\"calculateTotal()\\\">\\n                                        </td>\\n                                    </tr>\\n                                    </tbody>\\n                                </table>\\n\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div *ngIf=\\\"editvalue == true\\\" class=\\\"form-group squadlinx-label-table\\\">\\n                                <label style=\\\"margin-right:20px;\\\" class=\\\"label-table-sqlx\\\">Total {{currSprintPts_e}}</label>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" (newSprint.spri_points != null && newSprint.spri_points != '') && newSprint.spri_points <= 0\\\">Sprint points must be greater than zero</span>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" currSprintPts_e != null && newSprint.spri_points > 0 && (currSprintPts_e > newSprint.spri_points)\\\">Current points exceed sprint duration</span>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" (newSprint.spri_points != null && newSprint.spri_points != '') && (currSprintPts_e < newSprint.spri_points) \\\">There are still ({{sprintDiff_e}}) points to be assigned.</span>\\n                            </div>\\n                            <div *ngIf=\\\"editvalue == false\\\" class=\\\"form-group squadlinx-label-table\\\">\\n                                <label style=\\\"margin-right:20px;\\\">Total {{currSprintPts}}</label>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" (newSprint.spri_points != null && newSprint.spri_points != '') && newSprint.spri_points <= 0\\\">Sprint points must be greater than zero</span>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" currSprintPts != null && newSprint.spri_points > 0 && (currSprintPts > newSprint.spri_points)\\\">Current points exceed sprint duration</span>\\n                                <span class=\\\"has-error\\\"\\n                                      *ngIf=\\\" (newSprint.spri_points != null && newSprint.spri_points != '') && (currSprintPts < newSprint.spri_points) \\\">There are still ({{sprintDiff}}) points to be assigned.</span>\\n                            </div>\\n                        </div>\\n\\n\\n                    </div>\\n                    <!-- .row -->\\n                </div>\\n                <!-- modal-body -->\\n                <div class=\\\"modal-footer\\\" id=\\\"modalSprintNew\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <button type=\\\"button\\\" id=\\\"buttonCalculate_sprintNew_sprints\\\" class=\\\"btn btn-primary btn-calculate-form-sprints\\\"\\n                                (click)=\\\"calculateDays(newSprint.spri_init,newSprint.spri_end,newSprint.spri_points)\\\"\\n                                [disabled]=\\\"newSprint.spri_points == 0 || !newSprint.spri_points || !newSprint.spri_init || newSprint.spri_init == 'null' || !newSprint.spri_end || newSprint.spri_end == 'null'\\\">\\n                            <i class=\\\"fa fa-calendar\\\"></i> Calculate\\n                        </button>\\n\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"buttonClose_sprintNew_sprints\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                        <button id=\\\"buttonSave_sprintNew_sprints\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-save-form-sprints\\\" (click)=\\\"saveSprint()\\\"\\n                                [disabled]=\\\"validateSprint()\\\">\\n                           <!-- <i class=\\\"fa fa-floppy-o\\\"></i>--> Save\\n                        </button>\\n                    </div>\\n                </div>\\n                <!-- modal-footer -->\\n            </div>\\n            <!-- modal-content -->\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/sprint/sprints.template.html\n// module id = 838\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n \\n<span class=\\\"addt sendemail fa fa-paper-plane-o bg-purple\\\" (click)=\\\"addMail()\\\" data-container=\\\"body\\\"\\n      tooltipPosition=\\\"top\\\" pTooltip=\\\"Compose a new email\\\"></span>\\n<span class=\\\"addt atemail fa fa-envelope bg-blue\\\" (click)=\\\"showAsociateMail()\\\" data-container=\\\"body\\\"\\n      tooltipPosition=\\\"top\\\" pTooltip=\\\"Link an email\\\"></span>\\n<span class=\\\"addt comment fa fa-comments bg-yellow\\\" (click)=\\\"addNote()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Leave a comment\\\"></span>\\n<span class=\\\"addt task fa fa-tasks bg-aqua\\\" (click)=\\\"addTask()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create a task\\\"></span>\\n<span class=\\\"addt btnplus fa fa-plus bg-blue\\\" style=\\\"height: 45px; width: 45px;\\\" (click)=\\\"enableBtn()\\\"\\n    data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tools\\\"></span>\\n \\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n        <section class=\\\"content-header\\\">\\n            <h1>\\n                Scheduler #{{ scheduler.sche_id }}\\n            </h1>\\n            <ol class=\\\"breadcrumb\\\">\\n                    <li><a [routerLink]=\\\"['/dashboard']\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n                    <li><a [routerLink]=\\\"['/schedulerlist']\\\">Scheduler List</a></li>\\n                    <li class=\\\"active\\\">Scheduler</li>\\n            </ol>\\n        </section>\\n        <section class=\\\"content\\\">\\n            <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                    <div class=\\\"box box-primary\\\">\\n                        <div class=\\\"box-header with-border\\\">\\n                            <h3 class=\\\"box-title\\\">{{scheduler.sche_title}}</h3>\\n                        </div>\\n                        <div class=\\\"box-body box-scheduler\\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Date Start</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.sche_start}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                        <label class=\\\"control-label col-xs-5 col-md-5\\\">Date End</label>\\n                                        <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.sche_end}}</span>\\n                                    </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">User</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.completename}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Category</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.para_name}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Place</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.place}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                        <label class=\\\"control-label col-xs-5 col-md-5\\\">Status</label>\\n                                        <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{scheduler.SchStatus}}</span>\\n                                </div>\\n                                <div class=\\\"col-md-12\\\">\\n                                    <label class=\\\"control-label\\\">Description</label>\\n                                    <div class=\\\"well\\\" id=\\\"textTask\\\" [innerHTML]=\\\"scheduler.sche_description\\\"></div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        \\n                    </div>\\n                    <ul class=\\\"timeline\\\">\\n                        <li>\\n                            <i class=\\\"fa fa-clock-o bg-gray\\\"></i>\\n                        </li>\\n                        <li class=\\\"time-label\\\">\\n                            <span class=\\\"bg-success\\\">{{scheduler.sche_start}}</span>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n        </section>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/scheduler/scheduler.template.html\n// module id = 839\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"scheduler\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-scheduler\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> SCHEDULER LIST\\n            <small style=\\\"font-size:15px;\\\">Calendar</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Scheduler</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_name, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"addScheduler()\\\" style=\\\"padding: 1px 4px; background-color:white;\\\" data-container=\\\"body\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddScheduler\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Add\\\">\\n                                <i class=\\\"sq sq-create-new-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selsch.length == 0\\\" (click)=\\\"deleteScheduler(null)\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <i class=\\\"sq sq-eliminar\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input id=\\\"search_scheulder\\\" type=\\\"text\\\" class=\\\"input-mainfilter input_search_categories\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (ngModelChange)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                        <i class=\\\"sq sq-view\\\"></i>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\"><a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Active','Cancelled','Finished'])\\\">All</a></li>\\n                        <li><a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Active'])\\\">Active</a></li>\\n                        <li><a href=\\\"#tab_2\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Cancelled'])\\\">Cancelled</a></li>\\n                        <li><a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Finished'])\\\">Finished</a></li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th (click)=\\\"selectAll()\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 30px;\\\">\\n                                            <i *ngIf=\\\"selsch.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                            <i *ngIf=\\\"selsch.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_id')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 50px;\\\">\\n                                            Number\\n                                            <span [hidden]=\\\"posOrder !== 'sche_id'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_start')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 150px;\\\">\\n                                            Date Start\\n                                            <span [hidden]=\\\"posOrder !== 'sche_start'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_end')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 150px;\\\">\\n                                            Date End\\n                                            <span [hidden]=\\\"posOrder !== 'sche_end'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_title')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 200px;\\\">\\n                                            Tittle\\n                                            <span [hidden]=\\\"posOrder !== 'sche_title'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('sche_description')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 300px;\\\">\\n                                            Description\\n                                            <span [hidden]=\\\"posOrder !== 'sche_description'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('user_id')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 100px;\\\">\\n                                            User\\n                                            <span [hidden]=\\\"posOrder !== 'user_id'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('para_category')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 100px;\\\">\\n                                            Category\\n                                            <span [hidden]=\\\"posOrder !== 'para_category'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 100px;\\\">\\n                                            Place\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('para_status')\\\" style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 100px;\\\">\\n                                            Status\\n                                            <span [hidden]=\\\"posOrder !== 'para_status'\\\">\\n                          <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                          style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                         style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th style=\\\" color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important; width: 150px;\\\">\\n                                            Actions\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let sch of schedules | filterfield : { pos : posState, text : textState } | filterfield : { pos : posGroup, text : textGroup} | paginate : { currp : currentpage, limit : limitpage} | order : { pos : posOrder, desc : orderDesc }\\\" [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"schedulerlist\\\" name=\\\"schedulerlist\\\" value=\\\"{{sch.sche_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selsch\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_id) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_start) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_end) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_title) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.sche_description) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.completename) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.para_name) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.place) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(sch)\\\">{{ escapeHtml(sch.SchStatus) }}</a></td>\\n                                        <td [ngStyle]=\\\"sch.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(sch)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\">\\n                                                <i [ngStyle]=\\\"sch.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-search\\\"></i>\\n                                            </button>\\n                                                <button type=\\\"button\\\" (click)=\\\"showEditModal(sch)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                <i [ngStyle]=\\\"sch.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-quickedit\\\"></i>\\n                                            </button>\\n                                                <button (click)=\\\"deleteScheduler(sch.sche_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                <i [ngStyle]=\\\"sch.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-trash\\\"></i>\\n                                            </button>\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                    <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdScheduler\\\" role=\\\"dialog\\\" *ngIf=\\\"sch\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdScheduler-scheduler\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\"><i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">\\n                        <i class=\\\"sq sq-scheduler\\\" style=\\\"color:white;\\\"></i> {{\\\" #\\\" + sch.sche_id + \\\" - \\\" + sch.sche_title}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"row\\\" style=\\\"margin-top: 5px;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Start Date: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.sche_start}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">End Date: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.sche_end}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Category: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.para_name}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Status: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.SchStatus}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">User: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{sch.completename}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Description: </label>\\n                        <span class=\\\"label-noedit col-xs-10 col-sm-10 col-md-10 col-lg-10 span-sqlx\\\">{{escapeHtml(sch.sche_description)}}</span>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n                    <button id=\\\"close2-schedule\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\" data-dismiss=\\\"modal\\\">\\n                        Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <!-- mdScheduler -->\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddScheduler\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close3-mdAddScheduler\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\"><i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Scheduler</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx input-calendar-shedulerlist-sqlx \\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Start Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"scheduler.sche_start\\\" icon=\\\"sq sq-calendar\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!-- Start Date -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx input-calendar-shedulerlist-sqlx \\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>End Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"scheduler.sche_end\\\" icon=\\\"sq sq-calendar\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <!-- End Date -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Tittle</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"scheduler.sche_title\\\" placeholder=\\\"Scheduler Tittle\\\">\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Tittle -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"scheduler.user_id\\\" placeholder=\\\"Select User\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler User -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Category</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"catsche\\\" [(ngModel)]=\\\"scheduler.para_category\\\" placeholder=\\\"Select Category\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Category -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stssche\\\" [(ngModel)]=\\\"scheduler.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Status -->\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Place</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plsch\\\" [(ngModel)]=\\\"scheduler.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Place -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\">\\n                                <label>Description</label>\\n                                <p-editor [(ngModel)]=\\\"scheduler.sche_description\\\" [style]=\\\"{'height':'150px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                        <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                         </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <!-- Scheduler Description -->\\n                    </div>\\n                    <!-- .row -->\\n                </div>\\n                <!-- modal-body -->\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!scheduler.sche_description || scheduler.sche_description == '' || scheduler.sche_description == 'undefined') || (!scheduler.user_id) || (!scheduler.para_category) || (!scheduler.para_status) || (!scheduler.sche_start != '') || (!scheduler.sche_end != '') || (!scheduler.para_place)\\\"\\n                            (click)=\\\"saveScheduler()\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n                        </button>\\n                    </div>\\n                </div>\\n                <!-- modal-footer -->\\n            </div>\\n            <!-- modal-content -->\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditScheduler\\\" role=\\\"dialog\\\" *ngIf=\\\"sch\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close4-scheduler\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\"><i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Edit Schedule # {{sch.sche_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx input-calendar-shedulerlist-sqlx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Start Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"sch.sche_start\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx input-calendar-shedulerlist-sqlx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>End Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"sch.sche_end\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Tittle</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"sch.sche_title\\\" placeholder=\\\"sch Tittle\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"sch.user_id\\\" placeholder=\\\"Select User\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Category</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"catsche\\\" [(ngModel)]=\\\"sch.para_category\\\" placeholder=\\\"Select Category\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stssche\\\" [(ngModel)]=\\\"sch.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Place</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plsch\\\" [(ngModel)]=\\\"sch.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\">\\n                                <label>Description</label>\\n                                <p-editor [(ngModel)]=\\\"sch.sche_description\\\" [style]=\\\"{'height':'150px'}\\\">\\n                                    <p-header>\\n                                        <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                        <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                         </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button style=\\\"position: inherit; width: 83px!important; padding: 5px 12px;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!sch.sche_description || sch.sche_description == '' || sch.sche_description == 'undefined') || (!sch.user_id) || (!sch.para_category) || (!sch.para_status) || (!sch.sche_start != '') || (!sch.sche_end != '') || (!sch.para_place)\\\"\\n                            (click)=\\\"actScheduler(sch)\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n                        </button>\\n                    </div>\\n                </div>\\n                <!-- modal-footer -->\\n            </div>\\n            <!-- modal-content -->\\n        </div>\\n    </div>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/scheduler/schedulerlist.template.html\n// module id = 840\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"events\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-scrum\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> EVENTS\\n            <small style=\\\"font-size:15px;\\\">Calendar</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Events</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groups\\\">\\n                            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_name, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"addMeeting()\\\" style=\\\"padding: 1px 4px; background-color:white;\\\" data-container=\\\"body\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddMeeting\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Add\\\">\\n                                <i class=\\\"sq sq-create-new-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                            </button>\\n                            <button [disabled]=\\\"this.selmee.length == 0\\\" (click)=\\\"deleteMeeting(null)\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                <i class=\\\"sq sq-eliminar\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" class=\\\"input-mainfilter input_search_categories\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (ngModelChange)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                        <i class=\\\"sq sq-view\\\"></i>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\"><a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\">All</a></li>\\n                        <li><a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Active'])\\\">Active</a></li>\\n                        <li><a href=\\\"#tab_2\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Cancelled'])\\\">Cancelled</a></li>\\n                        <li><a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Finished'])\\\">Finished</a></li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th (click)=\\\"selectAll()\\\" style=\\\"text-align: center; width: 5%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <i *ngIf=\\\"selmee.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                            <i *ngIf=\\\"selmee.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('meet_id')\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Number\\n                                            <span [hidden]=\\\"posOrder !== 'meet_id'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('user_creator')\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            User creator\\n                                            <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('datetime')\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Date Time\\n                                            <span [hidden]=\\\"posOrder !== 'datetime'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('meet_text')\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Text\\n                                            <span [hidden]=\\\"posOrder !== 'meet_text'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('para_status')\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Status\\n                                            <span [hidden]=\\\"posOrder !== 'para_status'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th (click)=\\\"setOrder('para_place')\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Place\\n                                            <span [hidden]=\\\"posOrder !== 'para_place'\\\">\\n                              <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\"\\n                                                                                              style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\"\\n                                                                                             style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                            </span>\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Actions\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let meet of events\\\" [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"events\\\" name=\\\"events\\\" value=\\\"{{meet.meet_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selmee\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.meet_id)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.creator)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.meet_date)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.meet_text)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.para_name)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <a style=\\\"color: rgb(79, 93, 100)\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\">{{ escapeHtml(meet.MtPlaces)\\n                                            }}</a></td>\\n                                        <td [ngStyle]=\\\"meet.para_codigo == 2 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(meet.meet_id, 'mdMeeting')\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\">\\n                                                <i [ngStyle]=\\\"meet.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-search\\\"></i>\\n                                            </button>\\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(meet.meet_id, 'mdEditMeeting')\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                <i [ngStyle]=\\\"meet.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-quickedit\\\"></i>\\n                                            </button>\\n                                                <button (click)=\\\"cancelMeeting(meet.meet_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Cancel\\\">\\n                                                <i [ngStyle]=\\\"meet.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"fa fa-times-circle-o\\\"></i>\\n                                            </button>\\n                                                <button (click)=\\\"deleteMeeting(meet.meet_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                <i [ngStyle]=\\\"meet.para_codigo == 2 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                   class=\\\"sq sq-trash\\\"></i>\\n                                            </button>\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                    <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdMeeting\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdBurndown-dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\">\\n                        <i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h3 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">\\n                        <i class=\\\"sq sq-scrum\\\" style=\\\"color:white;\\\"></i> {{\\\" #\\\" + meeting.meet_id + \\\" - \\\" + meeting.meet_text}}\\n                    </h3>\\n                </div>\\n                <div class=\\\"row\\\" style=\\\"margin-top: 5px;\\\">\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">User\\n                            Creator: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{meeting.creator}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Date: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{meeting.meet_date}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Status: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{meeting.para_name}}</span>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                        <label class=\\\"control-label col-xs-5 col-sm-5 col-md-5 col-lg-5 label-sqlx\\\">Place: </label>\\n                        <span class=\\\"label-noedit col-xs-7 col-sm-7 col-md-7 col-lg-7 span-sqlx\\\">{{meeting.MtPlaces}}</span>\\n                    </div>\\n                    <div *ngIf=\\\"meeting.usershared.length> 0\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" *ngIf=\\\"meeting.usershared.length> 0\\\">\\n                            <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Shared\\n                                with: </label>\\n                            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\">\\n                                <span *ngFor=\\\"let usr of meeting.usershared\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px; display: inline-block;\\\">{{ usr.completename }}</span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Description: </label>\\n                        <span class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\">{{meeting.meet_text}}</span>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n                    <button id=\\\"close2-mdBurndown-dashboard\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\" data-dismiss=\\\"modal\\\"> Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddMeeting\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdBurndown-dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\">\\n                        <i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Meeting</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"meeting.datetime\\\" icon=\\\"sq sq-calendar\\\" dateFormat=\\\"yy-mm-dd\\\" [showTime]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stsmt\\\" [(ngModel)]=\\\"meeting.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- Status Place -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Meeting Title</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"meeting.meet_text\\\" placeholder=\\\"Meeting Title\\\">\\n                            </div>\\n                        </div>\\n                        <!-- Meeting Tittle -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Place</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [options]=\\\"plmt\\\" [(ngModel)]=\\\"meeting.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <!-- meeting Place -->\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                <p-autoComplete class=\\\"autocompleteSqlx\\\"\\n                                [(ngModel)]=\\\"meeting.usershared\\\" [suggestions]=\\\"usersCRM\\\"\\n                                (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\"\\n                                [minLength]=\\\"1\\\" placeholder=\\\"Share\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                </p-autoComplete>\\n              </span>\\n                            </div>\\n                        </div>\\n                        <!-- Share Meeting -->\\n                    </div>\\n                    <!-- .row -->\\n                </div>\\n                <!-- modal-body -->\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button style=\\\"position: inherit;width: 83px!important;padding: 5px 12px;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints \\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!meeting.meet_text || meeting.meet_text == '') || (!meeting.para_place) || (!meeting.datetime != '') || (!meeting.para_status)|| (!meeting.usershared || meeting.usershared.length <= 0)\\\"\\n                            (click)=\\\"saveMeeting(meeting)\\\"> Save\\n                        </button>\\n                    </div>\\n                </div>\\n                <!-- modal-footer -->\\n            </div>\\n            <!-- modal-content -->\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditMeeting\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n                <div class=\\\"modal-header modal-workteam\\\">\\n                    <button id=\\\"close-mdEditMeeting-dashboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color: #ffffff; opacity: 1;\\\">\\n                        <i class=\\\"sq sq-close\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Edit Meeting # {{meeting.meet_id}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date</label>\\n                                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"meeting.datetime\\\" dateFormat=\\\"yy-mm-dd\\\" [showTime]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>User Creator</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"meeting.user_creator\\\" placeholder=\\\"Select User Creator\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stsmt\\\" [(ngModel)]=\\\"meeting.para_status\\\" placeholder=\\\"Select Status\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Place</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"plmt\\\" [(ngModel)]=\\\"meeting.para_place\\\" placeholder=\\\"Select Place\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Meeting Title</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"meeting.meet_text\\\" placeholder=\\\"Meeting Title\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Share with</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                <p-autoComplete class=\\\"autocompleteSqlx\\\"\\n                        [(ngModel)]=\\\"meeting.usershared\\\" [suggestions]=\\\"usersCRM\\\"\\n                                (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                placeholder=\\\"Share\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\"></p-autoComplete>\\n              </span>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n                            Close\\n                        </button>\\n                        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!meeting.meet_text || meeting.meet_text == '') || (!meeting.para_place) || (!meeting.datetime != '') || (!meeting.para_status)|| (!meeting.usershared || meeting.usershared.length <= 0)\\\"\\n                            (click)=\\\"saveMeeting()\\\" style=\\\"position: inherit;width: 83px!important; padding: 5px 12px;\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/events/eventslist.template.html\n// module id = 841\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n \\n<span class=\\\"addt sendemail fa fa-paper-plane-o bg-purple\\\" (click)=\\\"addMail()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Compose a new email\\\"></span>\\n<span class=\\\"addt atemail fa fa-envelope bg-blue\\\" (click)=\\\"showAsociateMail()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Link an email\\\"></span>\\n<span class=\\\"addt comment fa fa-comments bg-yellow\\\" (click)=\\\"addNote()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Leave a comment\\\"></span>\\n<span class=\\\"addt task fa fa-tasks bg-aqua\\\" (click)=\\\"addTask()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create a task\\\"></span>\\n<span class=\\\"addt atetask fa fa-external-link-square bg-aqua\\\" (click)=\\\"showAsociateTask()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Link a task\\\"></span>\\n<span class=\\\"addt btnplus fa fa-plus bg-blue\\\" style=\\\"height: 45px; width: 45px;\\\" (click)=\\\"enableBtn()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tools\\\"></span>\\n \\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n        <section class=\\\"content-header\\\">\\n            <h1>\\n                Meeting #{{ meeting.meet_id }}\\n            </h1>\\n            <ol class=\\\"breadcrumb\\\">\\n                    <li><a [routerLink]=\\\"['/dashboard']\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n                    <li><a [routerLink]=\\\"['/meetings']\\\">Meetings</a></li>\\n                    <li class=\\\"active\\\">Meeting</li>\\n            </ol>\\n        </section>\\n        <section class=\\\"content\\\" style=\\\"background-color:#f4f9fc;\\\">\\n            <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                    <div class=\\\"box box-primary\\\">\\n                        <div class=\\\"box-header with-border\\\">\\n                            <h3 class=\\\"box-title\\\">{{meeting.meet_text}}</h3>\\n                        </div>\\n                        <div class=\\\"box-body box-meeting\\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Date Time</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{meeting.meet_date}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Creator</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{meeting.creator}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Status</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{meeting.para_name}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-3\\\">\\n                                    <label class=\\\"control-label col-xs-5 col-md-5\\\">Place</label>\\n                                    <span class=\\\"label-noedit col-xs-7 col-md-7\\\">{{meeting.MtPlaces}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-12\\\">\\n                                    <label class=\\\"control-label\\\">Shared with</label>\\n                                    <span *ngFor=\\\"let uss of meeting.usershared\\\" class=\\\"label label-primary\\\" style=\\\"margin:5px; display: inline-block;\\\">{{uss.completename}}</span>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-md-12\\\">\\n    \\n                                </div>\\n                                <!-- <div class=\\\"col-xs-12 col-md-12\\\">\\n                                    <iframe [srcdoc]=\\\"sanitizeHtml(meeting.meet_text)\\\" style=\\\"width: 100%; min-height: 450px; border: 0px;\\\">\\n                                        <div class=\\\"mailbox-read-message\\\" [innerHtml]=\\\"sanitizeHtml(meeting.meet_text)\\\">\\n                                        </div>\\n                                    </iframe>\\n                                    <iframe style=\\\"width: 100%; min-height: 450px; border: 0px;\\\" id=\\\"someFrame\\\">\\n                                    </iframe>\\n                                </div> -->\\n                            </div>\\n                        </div>\\n                        \\n                    </div>\\n                    <ul class=\\\"timeline\\\">\\n                        <li>\\n                            <i class=\\\"fa fa-clock-o bg-gray\\\"></i>\\n                        </li>\\n                        <li class=\\\"time-label\\\">\\n                            <span class=\\\"bg-success\\\">{{meeting.meet_date}}</span>\\n                        </li>\\n                        <li *ngFor=\\\"let dt of detail\\\">\\n                            <i class=\\\"{{ dt.label }}\\\"></i>\\n                            <div class=\\\"timeline-item\\\">\\n                                <span class=\\\"time\\\"><b>{{\\\"#\\\" + dt.number + \\\" \\\"}}</b>{{dt.date}}</span>\\n                                <h3 class=\\\"timeline-header\\\">\\n                                    <a>{{dt.creator}}</a>\\n                                    {{\\\" \\\" + dt.title}}\\n                                    <a>{{dt.asigned}}</a>\\n                                    <!-- <span *ngFor=\\\"let as of dt.asigned\\\">{{ \\\"<\\\" + as.user_lastname + \\\", \\\" + as.user_name + \\\">,\\\" }}</span> -->\\t\\n                                </h3>\\n                                <div class=\\\"timeline-body\\\">\\n                                    <div class=\\\"box-body\\\">\\n                                        <div class=\\\"progress progress-md\\\" *ngIf=\\\"dt.percentage > 0\\\">\\n                                            <div class=\\\"progress-bar progress-bar-success\\\" [ngStyle]=\\\"{ 'width': dt.percentage + '%' }\\\"></div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-md-12 col-bg-12\\\" *ngIf=\\\"dt.subject.length > 0\\\">\\n                                            <p>{{dt.subject}}</p>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-md-12\\\">\\n                                            <iframe [attr.id]=\\\"'fr'+dt.number\\\" [attr.srcdoc]=\\\"escapeHtml(sanitizeHtml(dt.description))\\\" [ngStyle]=\\\"escapeHtml(sanitizeHtml(dt.description)).length == 0 ? {'width': '100%', 'height': '0px', 'border': '0px', 'overflow': 'scroll'} : escapeHtml(sanitizeHtml(dt.description)).length <= 100 ? {'width': '100%', 'height': '100px', 'border': '0px', 'overflow': 'scroll'} : {'width': '100%', 'height': '450px', 'border': '0px', 'overflow': 'scroll'}\\\" >\\n                                            </iframe>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"box-footer\\\" *ngIf=\\\"dt.attachments.length > 0\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of dt.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" download=\\\"{{ att.file_name }}\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                                </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" download=\\\"{{ att.file_name }}\\\" class=\\\"mailbox-attachment-name\\\"><i class=\\\"fa fa-paperclip\\\"></i> {{ att.file_name }}</a>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\t\\t\\t\\t\\t\\t\\t\\n                        </li>\\n                        <li class=\\\"collapse\\\" id=\\\"collapseNote\\\">\\n                                <i class=\\\"fa fa-comments bg-yellow\\\"></i>\\n                                <div class=\\\"timeline-item\\\">\\n                                    <h3 class=\\\"timeline-header\\\">\\n                                        <a>Leave a Comment</a> New comment for this Meeting</h3>\\n                                    <div class=\\\"timeline-body\\\">\\n                                        <p-editor [(ngModel)]=\\\"note.note_text\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                            <p-header>\\n                                              <span class=\\\"ql-formats\\\">\\n                                                   <span class=\\\"ql-header\\\">\\n                                                      <select class=\\\"ql-header\\\">\\n                                                        <option value=\\\"1\\\">Heading</option>\\n                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                        <option selected>Normal</option>\\n                                                      </select>\\n                                                   </span>\\n\\n                                                    <span class=\\\"ql-font\\\">\\n                                                      <select class=\\\"ql-font\\\">\\n                                                        <option selected>Sans Serif</option>\\n                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                      </select>\\n                                                    </span>\\n                                              </span>\\n\\n                                                <span class=\\\"ql-formats\\\">\\n                                                  <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                  <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                  <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                                 </span>\\n\\n                                                <span class=\\\"ql-formats\\\">\\n                                                  <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                  <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                  <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                    <select class=\\\"ql-align\\\">\\n                                                       <option selected></option>\\n                                                       <option value=\\\"center\\\"></option>\\n                                                       <option value=\\\"right\\\"></option>\\n                                                       <option value=\\\"justify\\\"></option>\\n                                                     </select>\\n                                                  </span>\\n                                                 </span>\\n                                            </p-header>\\n                                        </p-editor>\\n                                    </div>\\n                                    <div class=\\\"timeline-footer\\\">\\n                                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                            <li *ngFor=\\\"let att of note.attachments\\\">\\n                                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                                </span>\\n                                                <div class=\\\"mailbox-attachment-info\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                                        {{att.size + ' bytes'}}\\n                                                        <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentNote(att)\\\">\\n                                                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                        </button>\\n                                                    </span>\\n                                                </div>\\n                                            </li>\\n                                        </ul>\\n                                    </div>\\n                                    <div class=\\\"timeline-footer\\\">\\n                                        <div class=\\\"pull-right\\\">\\n                                            <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" (click)=\\\"saveNote()\\\">\\n                                                <i class=\\\"fa fa-floppy-o\\\"></i> Publish</button>\\n                                            <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\">\\n                                                <i class=\\\"fa fa-times\\\"></i> Close</button>\\n                                        </div>\\n                                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\" for=\\\"note-file-upload\\\"\\n                                            class=\\\"custom-file-upload\\\">\\n                                            <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                        </label>\\n                                        <input id=\\\"note-file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChangeNote($event)\\\"/>\\n                                    </div>\\n                                </div>\\n                        </li>\\n                        <li class=\\\"collapse \\\" id=\\\"collapseTask\\\">\\n                            <i class=\\\"fa fa-tasks bg-blue\\\"></i>\\n                            <div class=\\\"timeline-item\\\">\\n                                <div class=\\\"timeline-header\\\">\\n                                    <h4 class=\\\"timeline-title\\\">New Task</h4>\\n                                </div>\\n                                <div class=\\\"timeline-body\\\">\\n                                    <div class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Subject</label>\\n                                                <input class=\\\"form-control\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"Subject\\\">\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Product</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Assign to</label>\\n                                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Delivery Date</label>\\n                                                <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Points</label>\\n                                                <input type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"task.task_points\\\" [step]=\\\"0.25\\\" [min]=\\\"0\\\" >\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12\\\">\\n                                            <div class=\\\"form-group\\\">\\n                                                <label>Description</label>\\n                                                <p-editor [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'250px'}\\\"></p-editor>\\n                                            </div>      \\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"timeline-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                            </span>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                    {{att.size + ' bytes'}}\\n                                                    <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                                <div class=\\\"timeline-footer\\\">\\n                                    <div class=\\\"row\\\">\\n                                        <div class=\\\"col-xs-12 col-md-12\\\">\\n                                            <div class=\\\"pull-left\\\">\\n                                                <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\" for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                                    <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                                </label>\\n                                                <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChangeTask($event)\\\"/>\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\">\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\"><i class=\\\"fa fa-times\\\"></i> Close</button>\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0)\\\" (click)=\\\"saveTask()\\\"><i class=\\\"fa fa-floppy-o\\\"></i> Create</button>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n        </section>\\n        <div class=\\\"modal fade\\\" id=\\\"mdAsoTask\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n                <div class=\\\"modal-content\\\">\\n                    <div class=\\\"modal-header modal-header-info\\\">\\n                        <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                            <span aria-hidden=\\\"true\\\">&times;</span>\\n                        </button>\\n                        <h4 class=\\\"modal-title\\\">\\n                            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i> Link a Task</h4>\\n                    </div>\\n                    <div class=\\\"modal-body\\\">\\n                        <div class=\\\"form-group\\\">\\n                            <!-- <form (ngSubmit)=\\\"srchTask()\\\"> -->\\n                                <div class=\\\"input-group\\\">\\n                                    <!-- <input type=\\\"text\\\" name=\\\"searcht\\\" [(ngModel)]=\\\"searchTask\\\" class=\\\"form-control\\\" placeholder=\\\"Search for...\\\">\\n                                    <span class=\\\"input-group-btn\\\"> -->\\n                                        <input type=\\\"text\\\" class=\\\"form-control input-sm\\\" placeholder=\\\"Search\\\" [(ngModel)]=\\\"search\\\">\\n                                            <span class=\\\"glyphicon glyphicon-search form-control-feedback\\\"></span>\\n                                        <!-- <button class=\\\"btn btn-default\\\" type=\\\"submit\\\"> -->\\n                                            <!-- <i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\"></i> Search</button> -->\\n                                    <!-- </span> -->\\n                                </div>\\n                            <!-- </form> -->\\n                        </div>\\n                        <div class=\\\"form-group\\\">\\n                            <!-- <label>{{ listtasks.length }} Results</label> -->\\n                            <label>{{ (listtasks | filter : search).length }} Results</label>\\n                            <div class=\\\"table\\\" style=\\\"height: 350px; overflow: scroll;\\\">\\n                                <table id=\\\"results\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                                    <thead>\\n                                        <th></th>\\n                                        <th>ID</th>\\n                                        <th>Date</th>\\n                                        <th>Creator</th>\\n                                        <th>Asigned to</th>\\n                                        <th>Status</th>\\n                                        <th>Subject</th>\\n                                        <th>Points</th>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let tk of listtasks | filter : search\\\">\\n                                            <td>\\n                                                <div class=\\\"ui-g\\\">\\n                                                    <p-checkbox id=\\\"list\\\" name=\\\"list\\\" value=\\\"{{tk.task_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"list\\\"></p-checkbox>\\n                                                </div>\\n                                            </td>\\n                                            <td>{{tk.task_id}}</td>\\n                                            <td>{{tk.task_date}}</td>\\n                                            <td>{{tk.creator}}</td>\\n                                            <td>{{tk.asigned}}</td>\\n                                            <td>{{tk.status_name}}</td>\\n                                            <td>{{tk.task_subject}}</td>\\n                                            <td>{{tk.task_points}}</td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"modal-footer\\\">\\n                            <div class=\\\"pull-right\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                                <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"listtasks.length == 0\\\" (click)=\\\"addAsociateTask()\\\">\\n                                    <i class=\\\"fa fa-floppy-o\\\"></i> Link\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/events/events.template.html\n// module id = 842\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"roles\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight: bold;\\\">\\n            <span style=\\\"font-size:20px;\\\">Roles</span>\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Roles</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"button-add\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"btn-group col-md-12 create-rol\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-sm btn-rol\\\" (click)=\\\"addRole()\\\" data-toggle=\\\"modal\\\">\\n                    Create Role\\n                </button>\\n            </div>\\n        </div>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box role-box\\\" style=\\\"border-top:none;\\\">\\n                    <div class=\\\"table-responsive\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered2 table-hover table-striped table-role\\\">\\n                            <thead>\\n                                <th style=\\\"width: 150px\\\">Role Number</th>\\n                                <th style=\\\"width: 200px;\\\">Role Name</th>\\n                                <th style=\\\"width: 400px;\\\">Description</th>\\n                                <th style=\\\"width: 150px;\\\">Actions</th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let rl of roles\\\">\\n                                    <td>\\n                                        {{ rl.value }}\\n                                    </td>\\n                                    <td class=\\\"name-role\\\" style=\\\"text-align:center;margin-right:10px;\\\">\\n                                        <i class=\\\"{{rl.icon}}\\\"></i>\\n                                        {{ escapeHtml(rl.label) }}\\n                                    </td>\\n                                    <td style=\\\"text-align:center; margin-right:10px;\\\">\\n                                        <span style=\\\"padding-left: 15px;\\\">{{ escapeHtml(rl.description) }}</span>\\n                                    </td>\\n                                    <td>\\n                                        <div class=\\\"btn-group actions\\\">\\n                                            <button type=\\\"button\\\" (click)=\\\"showModal(rl.value, rl.label)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\" data-container=\\\"body\\\">\\n                                                <i class=\\\"sq sq-search\\\"></i>\\n                                            </button>\\n                                            <button (click)=\\\"editRole(rl.value, rl.label, rl.description)\\\" type=\\\"button\\\"\\n                                                class=\\\"btn btn-default btn-sm btn-act\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"\\n                                                data-container=\\\"body\\\">\\n                                                <i class=\\\"sq sq-quickedit\\\"></i>\\n                                            </button>\\n                                            <button (click)=\\\"deleteRole(rl.value)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\" data-container=\\\"body\\\">\\n                                                <i class=\\\"sq sq-trash\\\"></i>\\n                                            </button>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n</section>\\n\\n<div class=\\\"modal fade\\\" id=\\\"mdRole\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content modal-roles\\\" style=\\\"width: 600px;\\\">\\n            <div class=\\\"modal-header header-event header-role\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                        class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title\\\"> {{\\\"Modules - Role #\\\" + myRol + \\\": \\\" + myRolName }}</h4>\\n            </div>\\n            <div class=\\\"modal-body scrollable\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-lg-12 col-md-12 col-sm-12 col-xs-12\\\">\\n                        <div class=\\\"form-group scrollable\\\">\\n                            <table class=\\\"table table-bordered table-roles col-lg-12 col-md-12 col-sm-12 col-xs-12\\\"\\n                                *ngIf=\\\"modulesMyTree.length > 0\\\">\\n\\n                                <!-- <thead>\\n                                    <th style=\\\"width:100px;\\\"></th>\\n                                    <th style=\\\"width:455px;\\\"></th>\\n                                </thead> -->\\n                                <thead>\\n                                    <th class=\\\"col-lg-2 col-md-3 col-sm-3 col-xs-6\\\"></th>\\n                                    <th class=\\\"col-lg-3 col-md-3 col-sm-3 col-xs-6\\\"></th>\\n                                    <th class=\\\"col-lg-7 col-md-6 col-sm-6 col-xs-6\\\"></th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let mdt of modulesMyTree\\\">\\n                                        <td>\\n                                            {{mdt.label}}\\n                                        </td>\\n                                        <td *ngIf=\\\"mdt.children.length > 0\\\">\\n                                            <div class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n                                        </td>\\n                                        <td class=\\\" \\\" style=\\\"display:flex; font-size:0.7em; width:100% ;\\\" *ngIf=\\\"mdt.children.length > 0\\\">\\n                                            <div style=\\\"width:25% \\\" class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n                                            <div style=\\\"width:25%\\\" class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n                                            <div style=\\\"width:25%\\\" class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n                                            <div style=\\\"width:25%\\\" class=\\\" module-bordered2\\\" *ngFor=\\\"let chl of mdt.children\\\">\\n                                                {{ chl.label }}\\n                                            </div>\\n\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"modal-footer close-footer\\\">\\n                <div style=\\\"margin-left:250px;padding-top:8px;\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-close btn-close-form-sprints\\\" style=\\\"display:block;\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"modal fade\\\" id=\\\"addRole\\\" role=\\\"dialog\\\">\\n    <!--modal new role-->\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content modal-roles\\\">\\n            <div class=\\\"modal-header header-event header-role\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                        class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title\\\"><i class=\\\"sq sq-drafts\\\"></i> New Role </h4>\\n            </div>\\n            <div class=\\\"modal-body scrollable md-roles\\\">\\n                <div class=\\\"row\\\" style=\\\"padding-bottom: 10px;\\\">\\n                    <div class=\\\"col-xs-6 col-md-6\\\" style=\\\"padding-left: 20px;\\\">\\n                        <div class=\\\"input-squadlinx\\\">\\n                            <label style=\\\"color:rgb(130, 145, 152);\\\">Role Name</label>\\n                            <input type=\\\"text\\\" class=\\\"form-control imputtext-role sqlx-input\\\" [(ngModel)]=\\\"obj.role_NameNew\\\"\\n                                placeholder=\\\"Type a role name\\\">\\n                            <span class=\\\"has-error\\\" *ngIf=\\\"rolesMenu.indexOf(obj.role_NameNew) >= 0\\\">This name is\\n                                already in use</span>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding-top: 5px;padding-left: 20px;padding-right: 20px;\\\">\\n                        <div class=\\\"textarea-squadlinx\\\">\\n                            <label style=\\\"color:rgb(130, 145, 152);\\\">Description</label>\\n                            <textarea style=\\\"resize: vertical;\\\" class=\\\"form-control txt-sqlx\\\" rows=\\\"2\\\" [(ngModel)]=\\\"obj.role_description\\\"></textarea>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"form-group \\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\" pull-left  col-xs-4 col-sm-4 col-md-4 col-lg-4 squadlinx-acces-a\\\" style=\\\"padding-left: 20px; padding-right:0px; \\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Access</label>\\n                                    <div class=\\\"row size-mod \\\" *ngFor=\\\"let pt of parentsTree\\\">\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModules(pt.data, pt.children)\\\" class=\\\"link-module\\\">\\n                                            <div class=\\\"parents-mod acces-a-sqlx\\\">\\n                                                {{ pt.label }}\\n                                            </div>\\n                                        </a>\\n                                        <div class=\\\"row parents-mod-footer size-mod\\\">\\n                                            <div class=\\\"pull-left\\\" style=\\\"background-color: rgb(239, 244, 245); width: 20px; height: 5px; margin-left: 15px;\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\" style=\\\"background-color:white; height: 5px;\\\">\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"pull-rigth col-xs-8 col-sm-8 col-md-8 col-lg-8\\\" style=\\\"padding-top: 24px;padding-right: 20px; padding-left: 0px;\\\">\\n                                    <div class=\\\"form-group\\\">\\n                                        <table class=\\\"table table-parent\\\" style=\\\"border:none!important;\\\">\\n                                            <thead>\\n                                                <th style=\\\"width:95px;\\\"></th>\\n                                            </thead>\\n                                            <tbody>\\n                                                <tr *ngFor=\\\"let chs of children_show\\\">\\n\\n                                                    <td style=\\\"padding:0px;margin:0px;\\\">\\n\\n                                                        <div class=\\\"submod col-lg-12 col-md-12 col-sm-12 col-xs-12 add-module pull-rigth\\\">\\n                                                            <p-checkbox name=\\\"role-checkbox\\\" value=\\\"{{chs.data}}\\\" label=\\\"{{ chs.label }} \\\"\\n                                                                [(ngModel)]=\\\"selectedSubmodule\\\"></p-checkbox>\\n\\n                                                        </div>\\n                                                        <!-- <div class=\\\"ui-g col-md-1 add-module\\\"\\n                                                         style=\\\"margin:0px;padding-left:0px;\\\">\\n                                                    </div> -->\\n                                                        <div class=\\\"row roles-select\\\">\\n                                                            <table class=\\\"col-lg-12 col-md-12 col-sm-12 col-xs-12\\\">\\n                                                                <tr class=\\\"col-lg-6 col-md-6 col-sm-6 col-xs-12\\\" *ngFor=\\\"let per of chs.permits\\\">\\n                                                                    <td>\\n                                                                        <p-checkbox name=\\\"per-checkbox\\\" value=\\\"{{per.data}}\\\"\\n                                                                            label=\\\"{{per.label}}\\\" [(ngModel)]=\\\"selectedPer\\\"\\n                                                                            id=\\\"per-check\\\"></p-checkbox>\\n                                                                    </td>\\n                                                                </tr>\\n                                                            </table>\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"modal-footer close-footer\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\"\\n                        data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">Close\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles\\\" style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"!selectedSubmodule || selectedSubmodule <= 0 || selectedSubmodule == '' || obj.role_NameNew == '' || obj.role_NameNew == null || obj.role_description == '' || obj.role_description == null || !selectedPer || selectedPer <= 0 || selectedPer == '' \\\"\\n                        (click)=\\\"saveRole(obj,selectedSubmodule,selectedPer)\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n<!--.modal new role-->\\n\\n<div class=\\\"modal fade\\\" id=\\\"editRoleNew\\\" role=\\\"dialog\\\">\\n    <!--Modal Editar-->\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content modal-roles\\\">\\n            <div class=\\\"modal-header header-event header-role\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                        class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title\\\"><i class=\\\"sq sq-quickedit\\\"></i> {{\\\"Edit - Role #\\\" + myRol + \\\": \\\" + myRolName }}\\n                </h4>\\n            </div>\\n            <div class=\\\"modal-body scrollable md-roles\\\">\\n                <div class=\\\"row\\\" style=\\\"padding-bottom: 10px;\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\" style=\\\"padding-left: 20px;\\\">\\n                        <div class=\\\"input-squadlinx\\\">\\n                            <label style=\\\"color:rgb(130, 145, 152);\\\">Role Name</label>\\n                            <input type=\\\"text\\\" class=\\\"form-control imputtext-role sqlx-input\\\" [(ngModel)]=\\\"obj.role_NameNew\\\"\\n                                placeholder=\\\"Type a role name\\\">\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-top: 5px;padding-left: 20px;padding-right: 20px;\\\">\\n                        <div class=\\\"textarea-squadlinx\\\">\\n                            <label style=\\\"color:rgb(130, 145, 152);\\\">Description</label>\\n                            <textarea style=\\\"resize: vertical;\\\" class=\\\"form-control txt-sqlx\\\" rows=\\\"2\\\" [(ngModel)]=\\\"obj.role_description\\\"></textarea>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"form-group \\\">\\n                            <div class=\\\"row\\\">\\n                                <div class=\\\" pull-left  col-xs-4 col-sm-4 col-md-4 col-lg-4\\\" style=\\\"padding-left: 20px; padding-right:0px;\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Access</label>\\n                                    <div class=\\\"row size-mod\\\" *ngFor=\\\"let pt of parentsTree\\\">\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModules(pt.data, pt.children)\\\" class=\\\"link-module\\\">\\n                                            <div class=\\\"parents-mod\\\">\\n                                                {{ pt.label }}\\n                                            </div>\\n                                        </a>\\n                                        <div class=\\\"row parents-mod-footer size-mod\\\">\\n                                            <div class=\\\"pull-left\\\" style=\\\"background-color: rgb(239, 244, 245); width: 20px; height: 5px; margin-left: 15px;\\\">\\n                                            </div>\\n                                            <div class=\\\"pull-right\\\" style=\\\"background-color:white; height: 5px;\\\">\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"pull-rigth col-xs-8 col-sm-8 col-md-8 col-lg-8\\\" style=\\\"padding-top: 24px;padding-right: 20px; padding-left: 0px;\\\">\\n                                    <div class=\\\"form-group\\\">\\n                                        <table class=\\\"table table-parent\\\" style=\\\"border:none!important;\\\">\\n                                            <thead>\\n                                                <th style=\\\"width:95px;\\\"></th>\\n                                            </thead>\\n                                            <tbody>\\n                                                <tr *ngFor=\\\"let chs of children_show\\\">\\n                                                    <td style=\\\"padding:0px;margin:0px;\\\">\\n                                                        <!-- <div class=\\\"col-md-5 add-module pull-rigth\\\">\\n                                                        {{ chs.label }}\\n                                                    </div>\\n                                                    <div class=\\\"ui-g col-md-1 add-module\\\"\\n                                                         style=\\\"width: 10%!important;margin:0px;padding-left:0px;\\\">\\n                                                        <p-checkbox name=\\\"role-checkbox\\\" value=\\\"{{chs.data}}\\\" label=\\\"\\\"\\n                                                                    [(ngModel)]=\\\"selectedSubmodule\\\"></p-checkbox>\\n                                                    </div> -->\\n                                                        <div class=\\\"submod col-lg-12 col-md-12 col-sm-12 col-xs-12 add-module pull-rigth\\\">\\n                                                            <p-checkbox name=\\\"role-checkbox\\\" value=\\\"{{chs.data}}\\\" label=\\\"{{ chs.label }} \\\"\\n                                                                [(ngModel)]=\\\"selectedSubmodule\\\"></p-checkbox>\\n                                                        </div>\\n                                                        <div class=\\\"row roles-select\\\">\\n                                                            <table class=\\\"col-lg-12 col-md-12 col-sm-12 col-xs-12\\\">\\n                                                                <tr class=\\\"col-lg-6 col-md-6 col-sm-6 col-xs-12\\\" *ngFor=\\\"let per of chs.permits\\\">\\n                                                                    <td>\\n                                                                        <p-checkbox name=\\\"per-checkbox\\\" value=\\\"{{per.data}}\\\"\\n                                                                            label=\\\"{{per.label}}\\\" [(ngModel)]=\\\"selectedPer\\\"\\n                                                                            id=\\\"per-check\\\"></p-checkbox>\\n                                                                    </td>\\n                                                                </tr>\\n                                                            </table>\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </tbody>\\n                                        </table>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"modal-footer close-footer\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles btn-close-form-sprints\\\" style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\"\\n                        data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">Close\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints\\\" style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"!selectedSubmodule || selectedSubmodule <= 0 || selectedSubmodule == '' || obj.role_NameNew == '' || obj.role_NameNew == null || obj.role_description == '' || obj.role_description == null\\\"\\n                        (click)=\\\"updateRole(myRol,obj,selectedSubmodule)\\\">Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div><!-- .Modal Editar-->\\n\\n\\n<p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/roles/roles.template.html\n// module id = 843\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"sprint_det\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Rol Modules\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a [routerLink]=\\\"['/dashboard']\\\">\\n          <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li>\\n        <a [routerLink]=\\\"['/roles']\\\">Roles</a>\\n      </li>\\n      <li class=\\\"active\\\">Rol</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\">\\n          <div class=\\\"box-header with-border\\\">\\n            <h3 class=\\\"box-title\\\"> Group : </h3>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"col-md-12\\\">\\n              <div>\\n                <br>\\n                <table id=\\\"resultdetails\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                  <thead>\\n                    <th>Number</th>\\n                    <th>Name</th>\\n                    <th>Icon</th>\\n                    <th>Actions</th>\\n                  </thead>\\n                  <tbody>\\n                    <tr *ngFor=\\\"let md of modulesMyTree\\\">\\n                      <td>{{ md.data }}</td>\\n                      <td>{{ md.label }}</td>\\n                      <td>{{ md.expandedIcon }}</td>\\n\\n                      <div class=\\\"btn-group\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"showMyModal(md.data)\\\" class=\\\"btn btn-default btn-sm\\\" data-target=\\\"#mdTask\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"View\\\">\\n                            <i class=\\\"fa fa-eye\\\"></i>\\n                          </button>\\n                      </div>\\n                      <!--<button (click)=\\\"deleteSpTask(spr.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                            title=\\\"Delete\\\">\\n                            <i class=\\\"fa fa-trash-o\\\"></i>\\n                          </button>\\n                        </div>\\n                      </td>-->\\n                    </tr>\\n                  </tbody>\\n                </table>\\n              </div>\\n              <!--<div>\\n                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"addSpTask()\\\" data-toggle=\\\"modal-sptask\\\" data-target=\\\"#mdAddSpTask\\\">\\n                  <i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n              </div>-->\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdSons\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-md \\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <!--<div class=\\\"modal-header modal-header-info\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>\\n          </h4>\\n        </div>-->\\n        <div class=\\\"modal-body\\\">\\n          <!--<ul class=\\\"nav nav-tabs\\\">\\n            <li class=\\\"active\\\">\\n              <a data-toggle=\\\"tab\\\" href=\\\"\\\">SubModule(s)</a>\\n            </li>\\n          </ul>-->\\n          <table class=\\\"table\\\">\\n            <thead>\\n              <tr>\\n                <th>Submodule name</th>\\n              </tr>\\n            </thead>\\n            <tbody>\\n              <tr *ngFor=\\\"let son of children\\\">\\n                <td>{{son.label}}</td>\\n              </tr>\\n              <tr *ngIf=\\\"children.length == 0\\\">\\n                <td>This Module doesn`t have Submodules!</td>\\n              </tr>\\n            </tbody>\\n          </table>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/roles/rol.template.html\n// module id = 844\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"roles\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-todolist\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> TO DO LIST\\n            <small style=\\\"font-size:15px;\\\">Home</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">To Do List</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content sectionPrincipal_moduloCategories\\\">\\n        <!--div row-->\\n        <div class=\\\"row\\\">\\n            <!--div col 10-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 sectionPrincipal_div_div_moduloCategories\\\">\\n                <!-- box-body-->\\n                <div class=\\\"box-body\\\">\\n                    <!--table-responsive-->\\n\\n                    <div class=\\\"table-responsive tasks-messages\\\" style=\\\" padding-top: 25px;\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 93%; max-width: 93%; margin-left: 60px;  margin-right: 0px;\\\">\\n                            <thead>\\n                                <th id=\\\"order_1\\\" class=\\\"th_columnNumber_todolist\\\">Level</th>\\n                                <th id=\\\"order_2\\\" class=\\\"th_columnNumber_todolist\\\">Number</th>\\n                                <th id=\\\"order_3\\\" class=\\\"th_columnType_todolist\\\">Type</th>\\n                                <th id=\\\"order_4\\\" class=\\\"th_columnStatus_todolist\\\">Status</th>\\n                                <th id=\\\"order_5\\\" class=\\\"th_columnDate_todolist\\\">Date</th>\\n                                <th id=\\\"order_6\\\" class=\\\"th_columnDescription_todolist\\\">Description</th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let list of todolist \\\">\\n                                    <td style=\\\"text-align: center; font-size: 15px;\\\">\\n                                        <a class=\\\"info_todoList\\\"><i class=\\\"sq sq-errors decriptionLevel_todoList\\\"\\n                                                [ngStyle]=\\\"list.level == '0' ? {'color':'#cfcfcf'} : list.level == '1' ? {'color':'#fdd835'} : list.level == '2' ? {'color':'#8bc34a'} : list.level == '3' ? {'color':'#ffa726'} : {'color':'#f4511e'} \\\"></i>{{list.description_level}}</a>\\n                                    </td>\\n                                    <td style=\\\"text-align: center; font-size: 15px;\\\">\\n                                        <a (click)=\\\"showModaltk(list.id)\\\">\\n                                            <span class=\\\"info_todoList\\\">{{list.id}}</span>\\n                                        </a>\\n                                        <taskview [myTaskId]=\\\"list.id\\\"></taskview>\\n                                    </td>\\n                                    <td style=\\\"text-align: center; font-size: 14px;\\\">\\n                                        <a class=\\\"infoType_todoList\\\" *ngIf=\\\"list.type == 'task'\\\">\\n                                            <small class=\\\"statusTaskShared todolist_typeTask \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-statustasks\\\"></i> Task\\n                                            </small>\\n                                        </a>\\n                                        <a class=\\\"infoType_todoList\\\" *ngIf=\\\"list.type == 'event'\\\">\\n                                            <small class=\\\"statusTaskShared todolist_typeEvent \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-scrum\\\"></i> Event\\n                                            </small>\\n                                        </a>\\n                                        <a class=\\\"infoType_todoList\\\" *ngIf=\\\"list.type == 'scheduler'\\\">\\n                                            <small class=\\\"statusTaskShared todolist_typeScheduler \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-scheduler\\\"></i> Scheduler\\n                                            </small>\\n                                        </a>\\n                                    </td>\\n                                    <td style=\\\"text-align: center; font-size: 15px;\\\">\\n                                        <a class=\\\"infoStatus_todoList\\\" *ngIf=\\\"list.para_status == '38'\\\">\\n                                            <small class=\\\"statusTodoList\\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-developing icon_taskDeveloping\\\"></i> Developing\\n                                            </small>\\n                                        </a>\\n                                        <a class=\\\"infoStatus_todoList\\\" *ngIf=\\\"list.para_status == '35' || list.para_status == '36' || list.para_status == '37'\\\">\\n                                            <small class=\\\"statusTodoList \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-pending icon_taskPending\\\"></i> Pending\\n                                            </small>\\n                                        </a>\\n                                        <a class=\\\"infoStatus_todoList\\\" *ngIf=\\\"list.para_status == '51'\\\">\\n                                            <small class=\\\"statusTodoList \\\" style=\\\"margin-left: -4px;\\\">\\n                                                <i class=\\\"sq sq-planning icon_eventScheduler\\\"></i> Active\\n                                            </small>\\n                                        </a>\\n                                    </td>\\n                                    <td style=\\\"text-align: center; font-size: 15px;\\\">\\n                                        <a class=\\\"info_todoList\\\">{{list.delivery_date}}</a>\\n                                    </td>\\n                                    <td style=\\\"text-align: justify; font-size: 15px;\\\">\\n                                        <a class=\\\"info_todoList\\\">{{escapeHtml(list.description)}}</a>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                    <!--end table-responsive-->\\n                    <!--div box-footer-->\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white; width: 93%; max-width: 93%;  margin-left: 60px;  margin-right: 0px;\\\">\\n                        <div class=\\\"contacts-controls\\\">\\n                            <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                    {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                    >\\n                                    itemcount ?\\n                                    itemcount : (currentpage * limitpage)\\n                                    }} of {{ itemcount }} results\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                    <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                    (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                    <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" style=\\\"\\\"\\n                                    [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                    <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                </select>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                    (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                    <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                    <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--end div box-footer-->\\n                </div>\\n                <!-- end box-body-->\\n            </div>\\n            <!--end div col 10-->\\n        </div>\\n        <!--end div row-->\\n    </section>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/todolist/todolist.template.html\n// module id = 845\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"sprints\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight: bold;\\\">\\n            <span style=\\\"font-size:20px;\\\">Users</span>\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Users</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"a_1\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let gr of groupsFilter\\\">\\n                            <a id=\\\"a_2\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id, gr.grop_name)\\\">{{gr.grop_name}}</a>\\n                        </li>\\n                        <li>\\n                            <a id=\\\"a_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('noGroup', '')\\\">No group </a>\\n                        </li>\\n\\n                    </ul>\\n\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-11 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n                            <button (click)=\\\"addUser()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create user\\\">\\n                                <i class=\\\"sq sq-working-team\\\" style=\\\"color:rgb(27, 110, 198); font-size: 35px;\\\"></i>\\n                            </button>\\n                            <button (click)=\\\"refresh()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                            </button>\\n\\n                        </div>\\n\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2 div_elementsSearchCategories\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" id=\\\"search_categorie\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                                            placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n\\n                <div class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <!--table-responsive-->\\n                        <div *ngIf=\\\"!userList.length\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                            No Data\\n                        </div>\\n                        <div *ngIf=\\\"userList.length\\\" class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <th style=\\\"width: 90%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <table style=\\\"width: 100%;\\\">\\n                                            <thead>\\n                                                <tr>\\n\\n                                                    <th id=\\\"orderUserId_userList\\\" style=\\\"text-align: center;     width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_id')\\\">Id\\n                                                        <span [hidden]=\\\"posOrder !== 'user_id'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderFirstName_userList\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_name')\\\">First Name\\n                                                        <span [hidden]=\\\"posOrder !== 'user_name'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderLastName_userList\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_lastname')\\\">Last Name\\n                                                        <span [hidden]=\\\"posOrder !== 'user_lastname'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderPhoneNumber_userList\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_phone')\\\">Phone Number\\n                                                        <span [hidden]=\\\"posOrder !== 'user_phone'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderEmail_userList\\\" style=\\\"text-align: center; width: 25%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_email')\\\">E-mail Address\\n                                                        <span [hidden]=\\\"posOrder !== 'user_email'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n\\n                                                    <th id=\\\"orderRole_userList\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('role_name')\\\">Role\\n                                                        <span [hidden]=\\\"posOrder !== 'role_name'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n                                                    <th id=\\\"orderGroup_userList\\\" style=\\\"text-align: center; width: 15%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('grop_name')\\\">Group\\n                                                        <span [hidden]=\\\"posOrder !== 'grop_name'\\\">\\n                                                            <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                            </span>\\n                                                        </span>\\n                                                    </th>\\n                                                </tr>\\n                                            </thead>\\n                                        </table>\\n                                    </th>\\n                                    <th style=\\\"text-align: center; width: 10%;color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        Actions\\n                                    </th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let user  of userList\\\">\\n\\n                                        <td style=\\\"text-align: center;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td style=\\\" width: 10%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\" [routerLink]=\\\"['/users', user.user_id]\\\">{{user.user_id}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 15%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\" [routerLink]=\\\"['/users', user.user_id]\\\">{{user.user_name}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 15%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\" [routerLink]=\\\"['/users', user.user_id]\\\">{{user.user_lastname}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 10%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\">{{user.user_phone}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 25%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\">{{user.user_email}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 10%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\">{{user.role_name}}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 15%;\\\">\\n                                                        <a class=\\\"element_a_userList\\\">{{user.grop_name}}</a>\\n                                                    </td>\\n                                                </tr>\\n                                            </table>\\n                                        </td>\\n                                        <td>\\n                                            <div class=\\\"btn-group\\\">\\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(user)\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                                                    <i class=\\\"sq sq-search\\\"></i>\\n                                                </button>\\n                                                <button type=\\\"button\\\" (click)=\\\" showModalEditUser(user)\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n\\n                                                    <i class=\\\"sq sq-quickedit\\\"></i>\\n                                                </button>\\n                                                <button (click)=\\\"deleteUser(user)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                    tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n\\n\\n                        <div *ngIf=\\\"userList.length\\\" class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                        [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                        (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                        <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                    <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" [(ngModel)]=\\\"currentpage\\\"\\n                                        (change)=\\\"reload()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                        (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                        [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                        <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\\n\\n<div class=\\\"modal fade\\\" id=\\\"EditUser\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n            <div class=\\\"modal-header modal_header_info_categories\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                    <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title titleCategorie_editCategorie\\\"><i class=\\\"sq sq-profiles\\\"></i> Edit User</h4>\\n            </div>\\n            <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n                <div class=\\\"row\\\">\\n                    <div style=\\\"height: 25px;background-color: #eef4f8;width: 100%;\\\"></div>\\n                    <div style=\\\"height: 174px; padding-top: 10px;background-color: #eef4f8;padding: 0px;width: 100%;text-align: center;\\\">\\n                        <div id=\\\"user-profile-picture\\\" class=\\\"container_imageModuleUser\\\" style=\\\"margin-left: 250px;\\\"\\n                            (mouseenter)=\\\"showChangePicture('profile')\\\" (mouseleave)=\\\"showChangePicture('profile')\\\">\\n                            <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; width:100px;height:100px;margin:0 auto;border-radius:50%;overflow:hidden;text-align: center;\\\">\\n                                <img [src]=\\\"user.urlimg\\\" id=\\\"profile-img\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                    style=\\\"width:95px;height:auto;top:1px;\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                <div id=\\\"change-profile\\\" class=\\\"upload-picture-btn-wrapper icon_customUpload\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input\\n                                        type=\\\"file\\\" class=\\\"input-picture\\\" name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\"\\n                                        (change)=\\\"onBasicUpload($event,'profile')\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"infoUserUser_User\\\">\\n                            {{user.user_user}}\\n                        </div>\\n                    </div>\\n                    <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>First Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" type=\\\"text\\\" size=\\\"30\\\" pInputText [(ngModel)]=\\\"user.user_name\\\"\\n                                    id=\\\"nameUser_editUser\\\" name=\\\"nameUser_editUser\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Last Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" type=\\\"text\\\" size=\\\"30\\\" pInputText [(ngModel)]=\\\"user.user_lastname\\\"\\n                                    id=\\\"lastNameUser_editUser\\\" name=\\\"lastNameUser_editUser\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Phone Number</label>\\n                                <p-inputMask class=\\\" form-control sqlx-inputmask\\\" mask=\\\"+99 999 9999999\\\" [(ngModel)]=\\\"user.user_phone\\\"\\n                                    [autoClear]=\\\"false\\\" placeholder=\\\"+99 999 9999999\\\" id=\\\"phoneUser_editUser\\\" name=\\\"phoneUser_editUser\\\"></p-inputMask>\\n\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>E-mail Address</label>\\n                                <input class=\\\"form-control sqlx-input\\\" id=\\\"emailUser_editUser\\\" name=\\\"emailUser_editUser\\\"\\n                                    [disabled]=\\\"user.user_id != '' && user.user_id != null \\\" type=\\\"text\\\" size=\\\"30\\\"\\n                                    pInputText [(ngModel)]=\\\"user.user_email\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Role</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"roles\\\" [(ngModel)]=\\\"user.role_id\\\"\\n                                    placeholder=\\\"Select a Role\\\" id=\\\"rolUser_editUser\\\" name=\\\"rolUser_editUser\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" filter=\\\"filter\\\"></p-dropdown>\\n\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groups\\\" [(ngModel)]=\\\"user.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" id=\\\"groupUser_editUser\\\" name=\\\"groupUser_editUser\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" filter=\\\"filter\\\"></p-dropdown>\\n\\n                            </div>\\n                        </div>\\n                    </div>\\n\\n                </div>\\n            </div>\\n\\n            <div class=\\\"modal-footer\\\">\\n                <div class=\\\"pull-right\\\">\\n                    <button id=\\\"buttonClose_editUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                    <!--<button id=\\\"buttonSave_editUser\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"-->\\n                    <!--class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"editUser()\\\"-->\\n                    <!--data-dismiss=\\\"modal\\\"-->\\n                    <!--[disabled]=\\\"!user.role_id || !user.grop_id || user.user_name == '' || user.user_lastname == '' || user.user_name == null\\\">-->\\n                    <!--Save-->\\n                    <!--</button>-->\\n                    <button id=\\\"buttonSave_editUser\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                        class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"editUser(user)\\\"\\n                        data-dismiss=\\\"modal\\\" [disabled]=\\\"!user.role_id || !user.grop_id || user.user_name == '' || user.user_lastname == '' || user.user_name == null\\\">\\n                        Save\\n                    </button>\\n\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n<div class=\\\"modal fade\\\" id=\\\"viewUser\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n            <div class=\\\"modal-header modal_header_info_categories\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                    <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title titleCategorie_editCategorie\\\"><i class=\\\"sq sq-profiles\\\"></i> View User</h4>\\n            </div>\\n            <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n                <div class=\\\"row\\\">\\n                    <div style=\\\"height: 174px; padding-top: 10px;background-color: #eef4f8;padding: 0px;width: 100%;text-align: center;\\\">\\n                        <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; width:100px;height:100px;margin:0 auto;border-radius:50%;overflow:hidden;transform: translate(0px, 17px);text-align: center;\\\">\\n                            <img [src]=\\\"user.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" style=\\\"width:95px;height:auto;top:1px;\\\"\\n                                class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                        </div>\\n                        <div class=\\\"infoUserUser_User\\\">\\n                            {{user.user_user}}\\n                        </div>\\n                    </div>\\n                    <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>First Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_name\\\" id=\\\"nameUser_quickView\\\"\\n                                    name=\\\"nameUser_quickView\\\" disabled>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Last Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_lastname\\\" id=\\\"lastNameUser_quickView\\\"\\n                                    name=\\\"lastNameUser_quickView\\\" disabled>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Phone Number</label>\\n                                <p-inputMask class=\\\" form-control sqlx-inputmask\\\" [autoClear]=\\\"false\\\" mask=\\\"+99 999 9999999\\\"\\n                                    [(ngModel)]=\\\"user.user_phone\\\" placeholder=\\\"+99 999 9999999\\\" disabled></p-inputMask>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>E-mail Address</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_email\\\" id=\\\"emailUser_quickView\\\"\\n                                    name=\\\"emailUser_quickView\\\" disabled>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Role</label>\\n                                <p-dropdown id=\\\"rolUser_quickView\\\" name=\\\"rolUser_quickView\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"roles\\\" [(ngModel)]=\\\"user.role_id\\\"\\n                                    placeholder=\\\"Select a Role\\\" disabled></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown id=\\\"groupUser_quickView\\\" name=\\\"groupUser_quickView\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groups\\\" [(ngModel)]=\\\"user.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" disabled></p-dropdown>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"modal-footer\\\">\\n                <div class=\\\"pull-right\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btncloseModal_moduloCategories\\\" data-dismiss=\\\"modal\\\">\\n                        Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\\n\\n\\n<div class=\\\"modal fade\\\" id=\\\"addUser\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n            <div class=\\\"modal-header modal-header-info-params\\\">\\n                <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i\\n                        class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                </button>\\n                <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"sq sq-profiles\\\"></i> New User </h4>\\n            </div>\\n            <div class=\\\"modal-body\\\" style=\\\"padding-top: 0px; padding-bottom: 0px;\\\">\\n                <div class=\\\"row\\\">\\n                    <div style=\\\"height: 25px;background-color: #eef4f8;width: 100%;\\\"></div>\\n                    <div style=\\\"height: 128px; padding-top: 10px;background-color: #eef4f8;padding: 0px;width: 100%;text-align: center;\\\">\\n                        <div id=\\\"user-profile-pictureModuleUser\\\" class=\\\"container_imageModuleUser\\\" style=\\\"margin-left: 250px;\\\"\\n                            (mouseenter)=\\\"showChangePictureUser('profile')\\\" (mouseleave)=\\\"showChangePictureUser('profile')\\\">\\n                            <div class=\\\"thumbnail\\\" style=\\\"padding: 0px; width:100px;height:100px;margin:0 auto;border-radius:50%;overflow:hidden;text-align: center;\\\">\\n                                <img [src]=\\\"user.urlimg\\\" id=\\\"profile-img-user\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                    style=\\\"width:95px;height:auto;top:1px;\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                <div id=\\\"change-profile-user\\\" class=\\\"upload-picture-btn-wrapper icon_customUpload\\\"><i\\n                                        class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\" name=\\\"demo[]\\\"\\n                                        accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"onBasicUploadUser($event,'profile')\\\">\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n\\n                    <div class=\\\"no-modify-info\\\" style=\\\"min-height: 240px; margin-top: 18px; width: 95%;\\\">\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>First Name</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_name\\\" id=\\\"nameUser_addUser\\\"\\n                                    name=\\\"nameUser_addUser\\\" placeholder=\\\"First Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Last Name</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_lastname\\\" id=\\\"lastNameUser_addUser\\\"\\n                                    name=\\\"lastNameUser_addUser\\\" placeholder=\\\"Last Name\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                            </div>\\n                        </div>\\n\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Phone Number</label>\\n                                <!-- <p-inputMask class=\\\" form-control sqlx-inputmask\\\" mask=\\\"+99 999 9999999\\\" [(ngModel)]=\\\"user.user_phone\\\"\\n                                    id=\\\"phoneUser_addUser\\\" name=\\\"phoneUser_addUser\\\" placeholder=\\\"+99 999 9999999\\\"></p-inputMask> -->\\n                                <int-phone-prefix id =\\\"phoneUser_addUser\\\" name=\\\"phoneUser_addUser\\\" class=\\\"user-inputphone\\\" type=\\\"number\\\" [(ngModel)]=\\\"user.user_phone\\\" (keypress)=\\\"validateTel($event)\\\"></int-phone-prefix>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>E-mail Address</label>\\n                                <input type=\\\"email\\\" class=\\\"form-control sqlx-input\\\" id=\\\"emailUser_addUser\\\" name=\\\"emailUser_addUser\\\"\\n                                    [(ngModel)]=\\\"user.user_email\\\" placeholder=\\\"jdoe@mdcloudps.com\\\" pattern=\\\".+@mdcloudps.com\\\"\\n                                    size=\\\"30\\\" (change)=\\\"verifyEmail(user.user_email)\\\">\\n                            </div>\\n                            <div *ngIf=\\\"errors > 0\\\" class=\\\"errors\\\">\\n                                <h6 id=\\\"result\\\">Invalid email</h6>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Role</label>\\n                                <p-dropdown [options]=\\\"roles\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" id=\\\"roleUser_addUser\\\"\\n                                    name=\\\"roleUser_addUser\\\" [autoWidth]=\\\"false\\\" [(ngModel)]=\\\"user.role_id\\\" placeholder=\\\"Select a Role\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown [options]=\\\"groups\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" id=\\\"groupUser_addUser\\\"\\n                                    name=\\\"groupUser_addUser\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"user.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                    <button id=\\\"buttonClose_addUser\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n                        data-dismiss=\\\"modal\\\">Close\\n                    </button>\\n                    <button id=\\\"buttonSave_addUser\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\"\\n                        class=\\\"btn-success btn-sm btn-add-sprint\\\"  [disabled]=\\\"validateUser()\\\"\\n                        (click)=\\\"saveUser(user)\\\">Save\\n                    </button>\\n\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</div>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/users/users.template.html\n// module id = 846\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"usershistory\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <span style=\\\"font-size:20px;\\\">{{ user.user_alias }}</span>\\n            <!-- <small style=\\\"font-size:15px;\\\">Administrator</small> -->\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">{{ user.user_alias }}</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\">\\n        <!--div row-->\\n        <div class=\\\"row\\\">\\n            <!--div col 10-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <!--div box-header-->\\n                <div class=\\\"box-header with-border\\\">\\n                    <!--opciones parte superior-->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5 div_topOptions_sqlx\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnAdd_moduloCategories\\\" (click)=\\\"showAddModal()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAdd\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n                            <button [disabled]=\\\"this.seluser.length == 0\\\" (click)=\\\"delete(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnDelete_moduloCategories\\\"><i class=\\\"fa fa-trash\\\"></i>&nbsp;Delete</button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm btnRefresh_moduloCategories\\\"><i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n                        </div>\\n                        <!--end opciones parte superior-->\\n                        <!--search-->\\n                        <!-- <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" id=\\\"search_userhistory\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                                            placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div> -->\\n                        <!--end search-->\\n                    </div>\\n                </div>\\n                <!--end div box-header-->\\n                <div class=\\\"nav-tabs-custom div_navTitleCampos_categories_sqlx\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx div_ul_navTitleCampos_sqlx\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <!-- <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li> -->\\n                    </ul>\\n                </div>\\n                <!-- box-body-->\\n                <div class=\\\"box-body\\\">\\n                    <!--table-responsive-->\\n\\n                    <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                    </div>\\n                    <div *ngIf=\\\"!isLoading && userHistories.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                        No Data\\n                    </div>\\n\\n                    <div *ngIf=\\\"userHistories.length > 0\\\" class=\\\"table-responsive tasks-messages\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\">\\n                            <thead>\\n                                <th (click)=\\\"selectAll()\\\" class=\\\"th_selectAll_sqlx\\\">\\n                                    <i *ngIf=\\\"seluser.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                    <i *ngIf=\\\"seluser.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                </th>\\n                                <th id=\\\"order_1\\\" class=\\\"th_columnName_sqlx\\\">Name\\n                                    <span [hidden]=\\\"posOrder !== 'grop_name'\\\">\\n                                        <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                        <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                    </span>\\n                                </th>\\n                                <th id=\\\"order_2\\\" class=\\\"th_columnName_sqlx\\\">Date Start\\n                                    <span [hidden]=\\\"posOrder !== 'date_init'\\\">\\n                                        <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                        <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                    </span>\\n                                </th>\\n                                <th id=\\\"order_3\\\" class=\\\"th_columnName_sqlx\\\">Date End\\n                                    <span [hidden]=\\\"posOrder !== 'date_end'\\\">\\n                                        <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                        <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                    </span>\\n                                </th>\\n                                <th class=\\\"th_columnActions_sqlx\\\">Actions\\n                                </th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let uh of userHistories \\\">\\n                                    <td>\\n                                        <div class=\\\"ui-g\\\">\\n                                            <p-checkbox id=\\\"user_history\\\" name=\\\"user_history\\\" value=\\\"{{uh.grhi_id}}\\\" label=\\\"\\\"\\n                                                [(ngModel)]=\\\"seluser\\\"></p-checkbox>\\n                                        </div>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(uh)\\\">{{\\n                                            escapeHtml(uh.grop_name) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(uh)\\\">{{\\n                                            escapeHtml(uh.date_init) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(uh)\\\">{{\\n                                            escapeHtml(uh.date_end) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <div class=\\\"btn-group\\\">\\n                                            <div class=\\\"row\\\">                                                    \\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(uh)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                                                    <i class=\\\"sq sq-search\\\"></i>\\n                                                </button>\\n                                                <button type=\\\"button\\\" (click)=\\\"showEditModal(uh)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                    <i class=\\\"sq sq-quickedit\\\"></i>\\n                                                </button>\\n                                                <button (click)=\\\"delete(uh.grhi_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </div>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                    <!--end table-responsive-->\\n                    <!--div box-footer-->\\n                    <!-- <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                        <div class=\\\"contacts-controls\\\">\\n                            <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                    {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                    >\\n                                    itemcount ?\\n                                    itemcount : (currentpage * limitpage)\\n                                    }} of {{ itemcount }} results\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                    <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                    (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                    <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\"\\n                                    [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                    <option *ngFor=\\\"let u of pages\\\" [ngValue]=\\\"u\\\">{{ u }}</option>\\n                                </select>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                    (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                    <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                    <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div> -->\\n                    <!--end div box-footer-->\\n                </div>\\n                <!-- end box-body-->\\n            </div>\\n            <!--end div col 10-->\\n        </div>\\n        <!--end div row-->\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdDetail\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content \\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-unit\\\" aria-hidden=\\\"true\\\"></i>{{\\\" User History Group # \\\" + userHistory.grhi_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"form-group col-xs-12 col-sm-12 col-md-4 col-lg-4\\\">\\n                            <label>Group</label>\\n                            <p>{{ userHistory.grop_name }}</p>\\n                        </div>\\n                        <div class=\\\"form-group col-xs-12 col-sm-12 col-md-4 col-lg-4\\\">\\n                            <label>Date Start</label>\\n                            <p>{{ userHistory.date_init }}</p>\\n                        </div>\\n                        <div class=\\\"form-group col-xs-12 col-sm-12 col-md-4 col-lg-4\\\">\\n                            <label>Date End</label>\\n                            <p>{{ userHistory.date_end }}</p>\\n                        </div>\\n                    </div>                    \\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdAdd\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i style=\\\"color:rgb(227,237,241)\\\" class=\\\"sq sq-unit\\\"></i>New History Group\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown [options]=\\\"groups\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" id=\\\"groupUser_addUser\\\"\\n                                    name=\\\"groupUser_addUser\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"userHistory.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date Start</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"userHistory.date_init\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date End</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"userHistory.date_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"validateSave()\\\"\\n                            (click)=\\\"save()\\\">\\n                            Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdEdit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" User History Group # \\\" + userHistory.grhi_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group</label>\\n                                <p-dropdown [options]=\\\"groups\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" id=\\\"groupUser_addUser\\\"\\n                                    name=\\\"groupUser_addUser\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"userHistory.grop_id\\\"\\n                                    placeholder=\\\"Select a Group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date Start</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"userHistory.date_init\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date End</label>\\n                                <p-calendar id=\\\"calendarDeliveryDate_newTask\\\" name=\\\"calendarDeliveryDate_newTask\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"userHistory.date_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"validateSave()\\\"\\n                            (click)=\\\"update()\\\">\\n                            Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/users/usershistory.template.html\n// module id = 847\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Parameters\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li><a routerLink=\\\"/dashboard\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n      <li class=\\\"active\\\"><a routerLink=\\\"/parameters\\\">Parameters</a></li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\" style=\\\"background: #edf5f8;\\\">\\n    <div class=\\\"row\\\">\\n      <!-- /.col -->\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"content-parameters\\\">\\n          <div role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n              <div class=\\\"modal-header modal-header-info-params\\\">\\n                <i class=\\\"fa fa-sliders fa-2x\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n                <span>Class Information</span>\\n                <!--<button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                              <span aria-hidden=\\\"true\\\">&times;</span>\\n                            </button>-->\\n                <h4 class=\\\"modal-title\\\"></h4>\\n                <!--<i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>-->\\n              </div>\\n              <div class=\\\"modal-body\\\">\\n               <div class=\\\"row\\\">\\n                 <div class=\\\"col-xs-12 col-lg-4\\\">\\n                  <div class=\\\"col-xs-7 col-sm-6 col-lg-6\\\">\\n                    <label>Class Number:</label>\\n                  </div>\\n                    <p>{{ clase.clas_id }}</p>\\n                   <div class=\\\"col-xs-7 col-sm-6 col-lg-6\\\">\\n                    <label>Creator:</label>\\n                  </div>\\n                    <p>{{ clase.creator_name }}</p>\\n                 </div>\\n\\n                 <div class=\\\"col-xs-12 col-lg-4\\\">\\n                    <div class=\\\"col-xs-7 col-sm-6 col-lg-6\\\">\\n                      <label>Creation Date:</label>\\n                    </div>\\n                      <p>{{ clase.clas_date }}</p>\\n\\n                   <div class=\\\"col-xs-7 col-sm-6 col-lg-6\\\">\\n                    <label>Description:</label>\\n                  </div>\\n                    <p>{{ clase.clas_description }}</p>\\n                </div>\\n               </div>\\n              </div>\\n\\n              <!--<div class=\\\"modal-footer\\\">\\n                          <div class=\\\"pull-right\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                          </div>\\n                        </div>-->\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12 content-table-parameters\\\">\\n        <div class=\\\"box-params\\\">\\n          <div class=\\\"table-responsive\\\" style=\\\"min-height: 0px!important;\\\">\\n\\n            <table id=\\\"results-params\\\" class=\\\"table table-bordered table-hover table-striped\\\" style=\\\"margin-bottom: 0px;\\\">\\n              <thead>\\n                <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px; height:40px;\\\"> PARAMETERS RELATED <span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                </th>\\n                <th style=\\\"width: 120px;\\\">ACTIONS </th>\\n              </thead>\\n              <tbody>\\n                <tr class *ngFor=\\\"let cl of parameters \\\">\\n                  <td>{{ cl.para_name }}</td>\\n                  <td>\\n                    <div class=\\\"btn-group-params\\\">\\n                      <i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"mdShowParam(cl)\\\"></i>\\n                      <i class=\\\"fa fa-paint-brush\\\" aria-hidden=\\\"true\\\" (click)=\\\"mdEditParam(cl)\\\"></i>\\n                      <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\" (click)=\\\"delParameter(cl.para_id)\\\"></i>\\n                    </div>\\n                  </td>\\n                </tr>\\n              </tbody>\\n            </table>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12\\\" style=\\\"text-align: center;\\\">\\n        <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-addParams\\\" (click)=\\\"mdAddParam()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddP\\\">Add Parameter</button>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddParam\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-xs\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n           <h4 style=\\\"color:#fff;\\\" class=\\\"modal-title\\\"><i class=\\\"fa fa-sliders\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i> Add Parameter</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Class Name:</label>\\n                <input class=\\\"form-control\\\" value=\\\"{{clase.clas_name}}\\\" disabled>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Parameter Name:</label>\\n                <input class=\\\"form-control\\\" [(ngModel)]=\\\"parameter.para_name\\\" >\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default-params\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" \\n              (click)=\\\"saveParameter(clase.clas_id)\\\">\\n                <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditParam\\\" role=\\\"dialog\\\">\\n     <div class=\\\"modal-dialog modal-xs\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n           <h4 style=\\\"color:#fff;\\\" class=\\\"modal-title\\\"><i class=\\\"fa fa-sliders\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i> Add Parameter</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Class Name:</label>\\n                <input class=\\\"form-control\\\" value=\\\"{{clase.clas_name}}\\\" disabled>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Parameter Name:</label>\\n                <input class=\\\"form-control\\\" [(ngModel)]=\\\"parameter.para_name\\\" >\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default-params\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" \\n              (click)=\\\"updateParameter(clase.clas_id,parameter.para_id)\\\">\\n                <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n   <div class=\\\"modal fade\\\" id=\\\"mdShowParam\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <i class=\\\"fa fa-sliders fa-2x\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n          <span>Parameter QuickView</span>\\n          <button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n              <span aria-hidden=\\\"true\\\">&times;</span>\\n            </button>\\n          <h4 class=\\\"modal-title\\\"></h4>\\n          <!--<i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>-->\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Class Number:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.clas_id }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Class Name:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.clas_name }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Creator:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                 <p>{{ clase.creator_name }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Creation Date:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.clas_date }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Description:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.clas_description }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Parameter Number:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.para_id }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3\\\">\\n                <label>Class Related:</label>\\n              </div>\\n              <div class=\\\"col-xs-6\\\">\\n                <p>{{ clase.para_name }}</p>\\n              </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/parameter/parameterlist.template.html\n// module id = 848\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n      <h2 style=\\\"font-weight: bold;\\\">\\n          <i class=\\\"fa fa-sliders fa-lg\\\" aria-hidden=\\\"true\\\" style=\\\"color:#007BD2;font-size:20px;\\\"></i> Parameters\\n          <small style=\\\"font-size:15px;\\\">Settings</small>\\n      </h2>\\n      <ol class=\\\"breadcrumb\\\">\\n          <li>\\n              <a routerLink=\\\"/dashboard\\\">\\n                  <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n          </li>\\n          <li class=\\\"active\\\">Parameters</li>\\n      </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <!-- /.col -->\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box-header-params\\\">\\n          <div class=\\\"btn-groupP\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-add\\\" (click)=\\\"mdAddClass()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddP\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n            <button type=\\\"button\\\" class=\\\"btn-primary btn-sm btn-refresh\\\" (click)=\\\"load()\\\"><i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box-params\\\">\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"table-responsive\\\">\\n                \\n              <table id=\\\"results-params\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                <thead>\\n                  <th (click)=\\\"setOrder('clas_name')\\\" style=\\\"width: 150px;\\\"> Class #<span [hidden]=\\\"posOrder !== 'clas_name'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px;\\\">Creator <span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px;\\\">Description<span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px;\\\"> Parameters<span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th (click)=\\\"setOrder('para_id')\\\" style=\\\"width: 70px;\\\"> Creation date<span [hidden]=\\\"posOrder !== 'para_id'\\\"><span [hidden]=\\\"!orderDesc\\\">▼</span><span [hidden]=\\\"orderDesc\\\">▲</span></span>\\n                  </th>\\n                  <th style=\\\"width: 120px;\\\">Actions</th>\\n\\n                </thead>\\n                <tbody>\\n                  <tr class *ngFor=\\\"let cl of parameters \\\">\\n\\n\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.clas_name }}</a></td>\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.creator_name }}</a></td>\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.clas_description }}</a></td>\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.related_parameters }}</a></td>\\n                    <td><a [routerLink]=\\\"['/parameterlist', cl.clas_id]\\\">{{ cl.clas_date }}</a></td>\\n\\n                    <td>\\n                      <div class=\\\"btn-group-params\\\">\\n                        <i class=\\\"sq sq-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"showClass(cl)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\"></i>\\n                        <i class=\\\"sq sq-quickedit\\\" aria-hidden=\\\"true\\\" (click)=\\\"editClass(cl)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"></i>\\n                        <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\" (click)=\\\"delClass(cl.clas_id)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\"></i>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div class=\\\"box-footer no-padding\\\">\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"contacts-controls-params\\\">\\n          <div class=\\\"pull-right\\\">\\n            <div class=\\\"btn-group\\\">\\n              <button type=\\\"button\\\" class=\\\"btn btn-default-params btn-sm\\\" style=\\\"margin-right: 6px;\\\" (click)=\\\"setCurPage(0)\\\"><i class=\\\"fa fa-chevron-left\\\"></i></button>\\n              <button type=\\\"button\\\" class=\\\"btn btn-default-params btn-sm\\\" (click)=\\\"setCurPage(1)\\\"><i class=\\\"fa fa-chevron-right\\\"></i></button>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdClass\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <i class=\\\"fa fa-sliders fa-2x\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n          <span>Parameter QuickView</span>\\n          <button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n              <span aria-hidden=\\\"true\\\">&times;</span>\\n            </button>\\n          <h4 class=\\\"modal-title\\\"></h4>\\n          <!--<i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>-->\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Class Number:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n                <p>{{ parameter.clas_id }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Creator:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n                 <p>{{ parameter.creator_name }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Creation Date:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n                <p>{{ parameter.clas_date }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Parameters:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n               <p>{{ parameter.related_parameters }}</p>\\n              </div>\\n            </div>\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 label-title-squadlinx\\\">\\n                <label>Description:</label>\\n              </div>\\n              <div class=\\\"col-xs-6 label-p-content-squadlinx \\\">\\n                <p>{{ parameter.clas_description }}</p>\\n              </div>\\n            </div>\\n        </div>\\n\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditClass\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title-params\\\">\\n             <i class=\\\"fa fa-sliders\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>{{\\\" Class #\\\" + parameter.clas_id }}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Name:</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"parameter.clas_name\\\" placeholder=\\\"Name\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group textarea-squadlinx\\\">\\n                <label>Description:</label>\\n                 <textarea class=\\\"form-control txt-sqlx\\\" rows=\\\"5\\\" id=\\\"comment\\\" [(ngModel)]=\\\"parameter.clas_description\\\" placeholder=\\\"Description\\\"></textarea>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default-params btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!parameter.clas_description || parameter.clas_description == '' || parameter.clas_description == 'undefined') || (!parameter.clas_id) || (!parameter.clas_name || parameter.clas_name == '' || parameter.clas_name == 'undefined')\\\"\\n              (click)=\\\"updateClass()\\\">\\n              <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddClass\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n           <h4 style=\\\"color:#fff;\\\" class=\\\"modal-title\\\"><i class=\\\"fa fa-sliders\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i> New Class</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Name:</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"parameter.clas_name\\\" placeholder=\\\"Name\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group textarea-squadlinx\\\">\\n                <label>Description:</label>\\n                 <textarea class=\\\"form-control txt-sqlx\\\" rows=\\\"5\\\" id=\\\"comment\\\" [(ngModel)]=\\\"parameter.clas_description\\\" placeholder=\\\"Description\\\"></textarea>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default-params btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!parameter.clas_description || parameter.clas_description == '' || parameter.clas_description == 'undefined') || (!parameter.clas_name || parameter.clas_name == '' || parameter.clas_name == 'undefined')\\\"\\n              (click)=\\\"saveClass()\\\">\\n                <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/parameter/parameters.template.html\n// module id = 849\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"categories\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> Categories\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Categories</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{ prodname }}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"a_1\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setProductList('', 'ALL')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let pr of products\\\">\\n                            <a id=\\\"a_2\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setProductList(pr.value, pr.label)\\\">{{ pr.label }}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 sectionPrincipal_div_div_moduloCategories\\\">\\n                <!--div box-header-->\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!--opciones parte superior-->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5 div_topOptions_sqlx\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnAdd_moduloCategories\\\" (click)=\\\"addCategory()\\\"\\n                                data-toggle=\\\"modal\\\" data-target=\\\"#AddForm\\\">Add Category</button>\\n                            <button [disabled]=\\\"this.selcat.length == 0\\\" (click)=\\\"deleteCategory(null)\\\" type=\\\"button\\\"\\n                                class=\\\"btn btn-default btn-sm btnDelete_moduloCategories\\\">Delete</button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm btnRefresh_moduloCategories\\\">Refresh</button>\\n                        </div>\\n                        <!--end opciones parte superior-->\\n                        <!--search-->\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2 div_elementsSearchCategories\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" id=\\\"search_categorie\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                                            placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!--end search-->\\n                    </div>\\n                </div>\\n                <!--end div box-header-->\\n                <div class=\\\"nav-tabs-custom div_navTitleCampos_categories_sqlx\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx div_ul_navTitleCampos_sqlx\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <!-- box-body-->\\n                <div class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <th (click)=\\\"selectAll()\\\" class=\\\"th_selectAll_sqlx\\\">\\n                                        <i *ngIf=\\\"selcat.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                        <i *ngIf=\\\"selcat.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                    </th>\\n                                    <th id=\\\"order_1\\\" (click)=\\\"setOrder('cate_id')\\\" class=\\\"th_columnNumber_sqlx\\\">Number\\n                                        <span [hidden]=\\\"posOrder !== 'cate_id'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                            <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                        </span>\\n                                    </th>\\n                                    <th id=\\\"order_2\\\" (click)=\\\"setOrder('cate_desc')\\\" class=\\\"th_columnName_sqlx\\\">Name\\n                                        <span [hidden]=\\\"posOrder !== 'cate_desc'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                            <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                        </span>\\n                                    </th>\\n                                    <th id=\\\"order_3\\\" (click)=\\\"setOrder('para_status')\\\" class=\\\"th_columnStatus_sqlx\\\">Status\\n                                        <span [hidden]=\\\"posOrder !== 'para_status'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                            <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                        </span>\\n                                    </th>\\n                                    <th id=\\\"order_4\\\" (click)=\\\"setOrder('para_type')\\\" class=\\\"th_columnType_sqlx\\\">Type\\n                                        <span [hidden]=\\\"posOrder !== 'para_type'\\\">\\n                                            <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                            <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                                <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                            </span>\\n                                        </span>\\n                                    </th>\\n                                    <th class=\\\"th_columnActions_sqlx\\\">Actions\\n                                    </th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let cat of categories \\\" [ngStyle]=\\\"cat.para_codigo == 2 ? { 'background': '#c0c0bf' } : {}\\\">\\n                                        <td>\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"categories\\\" name=\\\"categories\\\" value=\\\"{{cat.cate_id}}\\\" label=\\\"\\\"\\n                                                    [(ngModel)]=\\\"selcat\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td>\\n                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(cat)\\\">{{\\n                                                escapeHtml(cat.cate_id) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(cat)\\\">{{\\n                                                escapeHtml(cat.cate_desc) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(cat)\\\">{{\\n                                                escapeHtml(cat.status) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(cat)\\\">{{\\n                                                escapeHtml(cat.type_name) }}</a>\\n                                        </td>\\n                                        <td>\\n                                            <div class=\\\"btn-group\\\">\\n                                                <div class=\\\"row\\\">\\n                                                    <button type=\\\"button\\\" (click)=\\\"showModal(cat)\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                                                        <i class=\\\"sq sq-search\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"cat.para_status != 72 && cat.para_status != 73\\\" type=\\\"button\\\"\\n                                                        (click)=\\\"showModalEditCategory(cat)\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                        <i class=\\\"sq sq-quickedit\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"cat.para_status == 72\\\" (click)=\\\"reactiveCategory(cat.cate_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Reactive\\\">\\n                                                        <i class=\\\"fa fa-undo\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\"cat.para_status != 72 && cat.para_status != 73\\\" (click)=\\\"innactiveCategory(cat.cate_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Inactive\\\">\\n                                                        <i class=\\\"fa fa-times-circle-o\\\"></i>\\n                                                    </button>\\n                                                    <button *ngIf=\\\" cat.para_status != 73\\\" (click)=\\\"deleteCategory(cat.cate_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <!--end table-responsive-->\\n                        <!--div box-footer-->\\n                        <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                            <div class=\\\"contacts-controls\\\">\\n                                <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                        [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                        (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                        <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                    <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" style=\\\"\\\"\\n                                        [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                    </select>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                        (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                                <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                    <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                        [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                        <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!--end div box-footer-->\\n                    </div>\\n                </div>\\n                <!-- end box-body-->\\n            </div>\\n        </div>\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdCategory\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal_header_info_categories\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title titleCategorie_modalQuick\\\">\\n                        <i class=\\\"fa fa-tags\\\" aria-hidden=\\\"true\\\"></i>{{ \\\" Category #\\\" + category.cate_id }}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\">Name:</label>\\n                            <p class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 element_p_sqlx\\\">{{ category.cate_desc }}</p>\\n                        </div>\\n                        <div *ngIf=\\\"category.approvalusers.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 \\\">Users authorized to approve tasks with\\n                                this category:</label>\\n                            <p class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 element_p_sqlx\\\" *ngFor=\\\"let usr of category.approvalusers\\\">{{\\n                                usr.completename }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">Status:</label>\\n                            <p class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 element_p_sqlx\\\">{{ category.status }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">Type:</label>\\n                            <p class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 element_p_sqlx\\\">{{ category.type_name }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 div_campo_quickViewCategorie\\\">\\n                            <label class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4\\\">Product:</label>\\n                            <p class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 element_p_sqlx\\\">{{ category.prod_name }}</p>\\n                        </div>\\n                        <div *ngIf=\\\"category.fields.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <label class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 div_campo_quickViewCategorie\\\">Form\\n                                fields:</label>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 \\\">\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <thead>\\n                                            <th class=\\\"th_columnField_showCat_sqlx\\\">Field</th>\\n                                            <th class=\\\"th_columnName_showCat_sqlx\\\">Name</th>\\n                                            <th class=\\\"th_columnMand_showCat_sqlx\\\">(*)</th>\\n                                        </thead>\\n                                    </table>\\n                                    <!--</div>-->\\n                                </div>\\n                                <div class=\\\"div_tbody_newForm_quickView\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let fd of category.fields ; let i=index;\\\">\\n                                                <td class=\\\"td_columnField_showCat_sqlx\\\">\\n                                                    <label>{{i+1}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnName_showCat_sqlx\\\">\\n                                                    <label>{{ fd.form_field }}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnMand_showCat_sqlx\\\">\\n                                                    <p-checkbox [(ngModel)]=\\\"fd.form_mandatory\\\" binary=\\\"true\\\" disabled></p-checkbox>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btncloseModal_moduloCategories\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"AddCategory\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal_header_info_categories \\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title titleCategorie_modalQuick\\\">New Category</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Name</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"category.categoryNameNew\\\">\\n                            </div>\\n                            <span class=\\\"has-error\\\" *ngIf=\\\"categoryMenu.indexOf(categoryNameNew) >= 0\\\">This name is\\n                                already in use</span>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Need approval from</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"category.approvalusers\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\"\\n                                        [minLength]=\\\"1\\\" placeholder=\\\"Select users\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"stscat\\\" [(ngModel)]=\\\"category.para_status\\\" placeholder=\\\"Select Status\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Type</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [options]=\\\"tycate\\\" [(ngModel)]=\\\"category.para_type\\\" placeholder=\\\"Select Type\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 input-squadlinx\\\">\\n                            <label>Number of fields</label>\\n                            <input type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"category.number\\\" min=\\\"1\\\"\\n                                step=\\\"1\\\">\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n                          <label>Product</label>\\n                          <p-dropdown id=\\\"ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                            [options]=\\\"products\\\" [(ngModel)]=\\\"category.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-sm btn-default btnAddForm_moduloCategories\\\" data-toggle=\\\"collapse\\\"\\n                        data-target=\\\"#addForm\\\" (click)=\\\"createForm(category.number)\\\" [disabled]=\\\"(!category.number)\\\">\\n                        Add Form\\n                        <i class=\\\"fa fa-angle-down\\\" aria-hidden=\\\"true\\\"></i>\\n                    </button>\\n\\n                    <div id=\\\"addForm\\\" class=\\\"panel-collapse collapse\\\" style=\\\"padding-top: 15px;\\\">\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group scrollable\\\" style=\\\"max-height: 300px;\\\">\\n                                <!--<label>New Form</label>-->\\n                                <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                    <thead>\\n                                        <th class=\\\"th_columnField_newForm_sqlx\\\">Field</th>\\n                                        <th class=\\\"th_columnName_newForm_sqlx\\\">Name</th>\\n                                        <th class=\\\"th_columnMand_newForm_sqlx\\\">(*)</th>\\n                                    </thead>\\n                                    <tbody>\\n                                        <tr *ngFor=\\\"let cat of category.fields; let i=index\\\">\\n                                            <td style=\\\"text-align: center;\\\">\\n                                                <label>{{i+1}}</label>\\n                                            </td>\\n                                            <td>\\n                                                <input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"cat.campo_value\\\"\\n                                                    (value)=\\\"cat.campo_value\\\">\\n                                            </td>\\n                                            <td class=\\\"td_columnMand_newForm_sqlx\\\">\\n                                                <p-checkbox [(ngModel)]=\\\"cat.campo_mandatory\\\" binary=\\\"true\\\"></p-checkbox>\\n                                            </td>\\n                                        </tr>\\n                                    </tbody>\\n                                </table>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btncloseModal_moduloCategories\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                        <button type=\\\"button\\\" id=\\\"buttonSave_newCategorie\\\" class=\\\"btn btnSave_moduloCategories\\\"\\n                            [disabled]=\\\"(!category.para_type) || (!category.categoryNameNew) || (!category.para_status) || (!category.prod_id)\\\"\\n                            (click)=\\\"saveCategory()\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"EditCategory\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal_header_info_categories\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title titleCategorie_editCategorie\\\">Edit Category</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Name</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"categorie.cate_desc\\\">\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Need approval from</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"categorie.users\\\"\\n                                        [suggestions]=\\\"usersCRM\\\" (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\"\\n                                        [minLength]=\\\"1\\\" placeholder=\\\"Select users\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Status</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                                    [options]=\\\"stscat\\\" [(ngModel)]=\\\"categorie.para_status\\\" placeholder=\\\"Select Status\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Type</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                    [options]=\\\"tycate\\\" [(ngModel)]=\\\"categorie.para_type\\\" placeholder=\\\"Select Type\\\"\\n                                    filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n                          <label>Product</label>\\n                          <p-dropdown id=\\\"ddwnr_7\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                            [options]=\\\"products\\\" [(ngModel)]=\\\"categorie.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n                        </div>\\n                        <div *ngIf=\\\"categorie.fields.length > 0\\\" class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                            <label class=\\\"label_categorie_squadlinx\\\">Form Associate</label>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <thead>\\n                                            <th class=\\\"th_columnField_editCat_sqlx\\\">Field</th>\\n                                            <th class=\\\"th_columnName_editCat_sqlx\\\">Name</th>\\n                                            <th class=\\\"th_columnMand_editCat_sqlx\\\">(*)</th>\\n                                            <th class=\\\"th_columnButtonDelete_editCat_sqlx\\\"></th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                                <!--tbody para la tabla del form-->\\n                                <div class=\\\"form-group scrollable tbodyForm_editCategory\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tbody>\\n                                            <tr *ngFor=\\\"let cat of categorie.fields; let i=index\\\">\\n                                                <td class=\\\"td_columnField_editCat_sqlx\\\">\\n                                                    <label style=\\\"margin-top: 8px;\\\">{{i + 1}}</label>\\n                                                </td>\\n                                                <td class=\\\"td_columnName_editCat_sqlx\\\">\\n                                                    <input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"cat.form_field\\\"\\n                                                        (value)=\\\"cat.form_field\\\">\\n                                                </td>\\n                                                <td class=\\\"td_columnMand_editCat_sqlx\\\">\\n                                                    <p-checkbox [(ngModel)]=\\\"cat.form_mandatory\\\" binary=\\\"true\\\"></p-checkbox>\\n                                                </td>\\n                                                <td class=\\\"td_columnButtonDelete_editCat_sqlx\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        (click)=\\\"deleteFieldForm(i)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete Field\\\"\\n                                                        style=\\\"font-size: 20px; padding: 0px; margin-top: 4px;\\\">\\n                                                        <i class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                                <!--tfoot para la tabla del form-->\\n                                <div>\\n                                    <table class=\\\"table table-bordered table-hover table-striped table_newForm_sqlx\\\">\\n                                        <tfoot>\\n                                            <tr>\\n                                                <td colspan=\\\"3\\\" class=\\\"td_addNewField\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\"\\n                                                        style=\\\"font-size: 20px; padding: 0px;\\\" tooltipPosition=\\\"top\\\"\\n                                                        pTooltip=\\\"Add Field\\\" (click)=\\\"addFieldForm()\\\"><i class=\\\"fa fa-plus-square\\\"></i></button>\\n                                                </td>\\n                                            </tr>\\n                                        </tfoot>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"categorie.fields.length == 0\\\" class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                            <label class=\\\"label_categorie_squadlinx\\\">Associate New Form</label>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act buttonOptions_sqlx\\\" style=\\\"font-size: 20px; padding: 0px;\\\"\\n                                tooltipPosition=\\\"top\\\" pTooltip=\\\"Add Form\\\" (click)=\\\"addFieldForm()\\\"><i class=\\\"fa fa-plus-square\\\"></i></button>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btncloseModal_moduloCategories\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btnSave_moduloCategories\\\" [disabled]=\\\"(!categorie.para_type) || (!categorie.cate_desc) || (!categorie.para_status) || (!categorie.prod_id)\\\"\\n                            (click)=\\\"updateCategory()\\\">\\n                            <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n                    </div>\\n                </div>\\n\\n            </div>\\n        </div>\\n    </div>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/categories/categories.template.html\n// module id = 850\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"units\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <span style=\\\"font-size:20px;\\\">Units</span>\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Units</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\">\\n        <!--div row-->\\n        <div class=\\\"row\\\">\\n            <!--div col 10-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <!--div box-header-->\\n                <div class=\\\"box-header with-border\\\">\\n                    <!--opciones parte superior-->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5 div_topOptions_sqlx\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnAdd_moduloCategories\\\" (click)=\\\"showAddModal()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddUnit\\\"><i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n                            <button [disabled]=\\\"this.selunit.length == 0\\\" (click)=\\\"deleteUnit(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btnDelete_moduloCategories\\\"><i class=\\\"fa fa-trash\\\"></i>&nbsp;Delete</button>\\n                            <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm btnRefresh_moduloCategories\\\"><i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n                        </div>\\n                        <!--end opciones parte superior-->\\n                        <!--search-->\\n                        <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" id=\\\"search_categorie\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                                            placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!--end search-->\\n                    </div>\\n                </div>\\n                <!--end div box-header-->\\n                <div class=\\\"nav-tabs-custom div_navTitleCampos_categories_sqlx\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx div_ul_navTitleCampos_sqlx\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <!-- <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li> -->\\n                    </ul>\\n                </div>\\n                <!-- box-body-->\\n                <div class=\\\"box-body\\\">\\n                    <!--table-responsive-->\\n                    <div class=\\\"table-responsive tasks-messages\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\">\\n                            <thead>\\n                                <th (click)=\\\"selectAll()\\\" class=\\\"th_selectAll_sqlx\\\">\\n                                    <i *ngIf=\\\"selunit.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                    <i *ngIf=\\\"selunit.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                </th>\\n                                <th id=\\\"order_1\\\" (click)=\\\"setOrder('unit_desc')\\\" class=\\\"th_columnName_sqlx\\\">Name\\n                                    <span [hidden]=\\\"posOrder !== 'unit_desc'\\\">\\n                                        <span [hidden]=\\\"!orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                        <span [hidden]=\\\"orderDesc\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                                        </span>\\n                                    </span>\\n                                </th>\\n                                <th class=\\\"th_columnActions_sqlx\\\">Actions\\n                                </th>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let unit of units \\\">\\n                                    <td>\\n                                        <div class=\\\"ui-g\\\">\\n                                            <p-checkbox id=\\\"units\\\" name=\\\"units\\\" value=\\\"{{unit.unit_id}}\\\" label=\\\"\\\"\\n                                                [(ngModel)]=\\\"selunit\\\"></p-checkbox>\\n                                        </div>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(unit)\\\">{{\\n                                            escapeHtml(unit.unit_desc) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <div class=\\\"btn-group\\\">\\n                                            <div class=\\\"row\\\">                                                    \\n                                                <button type=\\\"button\\\" (click)=\\\"showModal(unit)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                                                    <i class=\\\"sq sq-search\\\"></i>\\n                                                </button>\\n                                                <button type=\\\"button\\\" (click)=\\\"showEditModal(unit)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                    <i class=\\\"sq sq-quickedit\\\"></i>\\n                                                </button>\\n                                                <button (click)=\\\"deleteUnit(unit.unit_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <i class=\\\"sq sq-trash\\\"></i>\\n                                                </button>\\n                                            </div>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n                    <!--end table-responsive-->\\n                    <!--div box-footer-->\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                        <div class=\\\"contacts-controls\\\">\\n                            <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                                    {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                    >\\n                                    itemcount ?\\n                                    itemcount : (currentpage * limitpage)\\n                                    }} of {{ itemcount }} results\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                    <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                    (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                    <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\"\\n                                    [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                    <option *ngFor=\\\"let u of pages\\\" [ngValue]=\\\"u\\\">{{ u }}</option>\\n                                </select>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                    (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                    <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                                    [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                    <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!--end div box-footer-->\\n                </div>\\n                <!-- end box-body-->\\n            </div>\\n            <!--end div col 10-->\\n        </div>\\n        <!--end div row-->\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdUnit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content \\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-unit\\\" aria-hidden=\\\"true\\\"></i>{{\\\" Unit # \\\" + unit.unit_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Unit Name</label>\\n                        <p>{{ unit.unit_desc }}</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddUnit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i style=\\\"color:rgb(227,237,241)\\\" class=\\\"sq sq-unit\\\"></i>New Unit\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Name</label>\\n                                <input class=\\\"form-control sqlx-input \\\" [(ngModel)]=\\\"unit.unit_desc\\\"\\n                                    placeholder=\\\"Unit Name\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\"\\n                            [disabled]=\\\"(!unit.unit_desc || unit.unit_desc == '' || unit.unit_desc == 'undefined')\\\"\\n                            (click)=\\\"saveUnit()\\\">\\n                            Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditUnit\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" Unit # \\\" + unit.unit_id}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Unit Name</label>\\n                                <input class=\\\"form-control sqlx-input \\\" [(ngModel)]=\\\"unit.unit_desc\\\"\\n                                    placeholder=\\\"Unit Name\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\"\\n                            style=\\\"background-color: rgb(128, 186, 84);\\\"\\n                            [disabled]=\\\"(!unit.unit_desc || unit.unit_desc == '' || unit.unit_desc == 'undefined')\\\"\\n                            (click)=\\\"updateUnit()\\\">\\n                            Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    \\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/units/units.template.html\n// module id = 851\n// module chunks = 0","module.exports = \"<img src=\\\"img/404.png\\\" style=\\\"height: 100%; width: 100%;\\\">\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/notfound/notfound.template.html\n// module id = 852\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px; background: white;\\\">\\n    <section class=\\\"content\\\" style=\\\"padding: 0px;\\\">\\n        <img src=\\\"img/404.png\\\" style=\\\"height: 100%; width: 100%;\\\">\\n    </section>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/notfound/notpermits.template.html\n// module id = 853\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n\\n<span class=\\\"addt sendemail fa fa-paper-plane-o bg-purple\\\" (click)=\\\"addMail()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n    pTooltip=\\\"Compose a new email\\\"></span>\\n<span class=\\\"addt atemail fa fa-envelope bg-blue\\\" (click)=\\\"showAsociateMail()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n    pTooltip=\\\"Link an email\\\"></span>\\n<span class=\\\"addt comment fa fa-comments bg-yellow\\\" (click)=\\\"addNote()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n    pTooltip=\\\"Leave a comment\\\"></span>\\n<span class=\\\"addt task fa fa-tasks bg-aqua\\\" (click)=\\\"addTask()\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create a task\\\"></span>\\n<span class=\\\"addt btnplus fa fa-plus bg-blue\\\" style=\\\"height: 45px; width: 45px;\\\" (click)=\\\"enableBtn()\\\" data-container=\\\"body\\\"\\n    tooltipPosition=\\\"top\\\" pTooltip=\\\"Tools\\\"></span>\\n\\n<section id=\\\"contact\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h1>\\n            Products666 #{{ task.task_id }}\\n        </h1>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li><a href=\\\"#\\\"><i class=\\\"fa fa-dashboard\\\"></i>Home</a></li>\\n            <li><a href=\\\"#\\\">Tasks</a></li>\\n            <li class=\\\"active\\\">Task</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box box-primary\\\">\\n                    <div class=\\\"box-header with-border\\\">\\n                        <h3 class=\\\"box-title\\\">{{ task.task_subject }}</h3>\\n                    </div>\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Number</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.task_id}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Date</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.task_date}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Creator</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.creator ? task.creator : \\\"Error\\\"}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Status</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{ task.tsst_name }}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Assigned to</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.asigned ? task.asigned : \\\"Error\\\"}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Delivery Date</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.task_delivery}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Points</label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <p>{{task.task_points}}</p>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <label class=\\\"control-label\\\">Percentage {{ task.task_percentage + '%' }} </label>\\n                        </div>\\n                        <div class=\\\"col-xs-6 col-md-3\\\">\\n                            <div class='progress progress-sm active'>\\n                                <div class=\\\"progress-bar progress-bar-success progress-bar-striped\\\" role=\\\"progressbar\\\"\\n                                    aria-valuenow=\\\"20\\\" aria-valuemin=\\\"0\\\" aria-valuemax=\\\"100\\\" [ngStyle]=\\\"{ 'width': task.task_percentage + '%' }\\\"><span\\n                                        class='sr-only'> Complete</span>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-md-12\\\">\\n                            <label class=\\\"control-label\\\">Description</label>\\n                            <div class=\\\"well\\\" id=\\\"textTask\\\" [innerHTML]=\\\"task.task_description\\\"></div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"box-footer\\\" *ngIf=\\\"task.attachments.length > 0\\\">\\n                        <ul class=\\\"mailbox-attachments clearfix\\\">\\n                            <li *ngFor=\\\"let att of task.attachments\\\">\\n                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                    <span class=\\\"mailbox-attachment-icon\\\">\\n                                        <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.tsat_type !== 'application/pdf' && att.tsat_type !== 'text/plain' && att.tsat_type !== 'text/csv' && att.tsat_type !== 'application/msword' && att.tsat_type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.tsat_type !== 'application/vnd.ms-excel' && att.tsat_type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.tsat_type !== 'image/jpeg' && att.tsat_type !== 'image/jpg' && att.tsat_type !== 'image/png' && att.tsat_type !== 'image/gift' && att.tsat_type !== 'application/x-rar-compressed' && att.tsat_type !== 'application/zip' && att.tsat_type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.tsat_type !== 'application/vnd.ms-powerpoint' && att.tsat_type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.tsat_type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                        <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.tsat_type == 'application/pdf'\\\"></i>\\n                                        <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.tsat_type == 'image/jpeg' || att.tsat_type == 'image/jpg' || att.tsat_type == 'image/png' || att.tsat_type == 'image/gift'\\\"></i>\\n                                        <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.tsat_type == 'text/plain' || att.tsat_type == 'text/csv'\\\"></i>\\n                                        <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.tsat_type == 'application/msword' || att.tsat_type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                        <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.tsat_type == 'application/vnd.ms-excel' || att.tsat_type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                        <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.tsat_type == 'application/x-rar-compressed' || att.tsat_type == 'application/zip'\\\"></i>\\n                                        <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.tsat_type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.tsat_type == 'application/vnd.ms-powerpoint' || att.tsat_type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                        <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.tsat_type.substring(0, 6) == 'audio/'\\\"></i>\\n                                    </span></a>\\n                                <div class=\\\"mailbox-attachment-info\\\">\\n                                    <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\"><i class=\\\"fa fa-paperclip\\\"></i>{{\\n                                        att.tsat_name }}</a>\\n                                    <span class=\\\"mailbox-attachment-size\\\">\\n                                        {{att.tsat_size + ' bytes'}}\\n                                        <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i\\n                                                class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                    </span>\\n                                </div>\\n                            </li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <ul class=\\\"timeline\\\">\\n                    <li><i class=\\\"fa fa-clock-o bg-gray\\\"></i></li>\\n                    <li class=\\\"time-label\\\">\\n                        <span class=\\\"bg-success\\\">{{task.task_date}}</span>\\n                    </li>\\n                    <li *ngFor=\\\"let dt of detail\\\">\\n                        <i class=\\\"{{ dt.label }}\\\"></i>\\n                        <div class=\\\"timeline-item\\\">\\n                            <span class=\\\"time\\\"><b>{{\\\"#\\\" + dt.number + \\\" \\\"}}</b>{{dt.date}}</span>\\n                            <h3 class=\\\"timeline-header\\\">\\n                                <a>{{dt.creator}}</a>\\n                                {{\\\" \\\" + dt.title}}\\n                                <a>{{dt.asigned}}</a>\\n                                <!-- <span *ngFor=\\\"let as of dt.asigned\\\">{{ \\\"<\\\" + as.user_lastname + \\\", \\\" + as.user_name + \\\">,\\\" }}</span> -->\\n                            </h3>\\n                            <div class=\\\"timeline-body\\\">\\n                                <div class=\\\"box-body\\\">\\n                                    <div class=\\\"progress progress-md\\\" *ngIf=\\\"dt.percentage > 0\\\">\\n                                        <div class=\\\"progress-bar progress-bar-success\\\" [ngStyle]=\\\"{ 'width': dt.percentage + '%' }\\\"></div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-md-12 col-bg-12\\\" *ngIf=\\\"dt.subject.length > 0\\\">\\n                                        <p>{{dt.subject}}</p>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-md-12\\\">\\n                                        <iframe [attr.id]=\\\"'fr'+dt.number\\\" [attr.srcdoc]=\\\"escapeHtml(sanitizeHtml(dt.description))\\\"\\n                                            [ngStyle]=\\\"escapeHtml(sanitizeHtml(dt.description)).length == 0 ? {'width': '100%', 'height': '0px', 'border': '0px', 'overflow': 'scroll'} : escapeHtml(sanitizeHtml(dt.description)).length <= 100 ? {'width': '100%', 'height': '100px', 'border': '0px', 'overflow': 'scroll'} : {'width': '100%', 'height': '450px', 'border': '0px', 'overflow': 'scroll'}\\\">\\n                                        </iframe>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"box-footer\\\" *ngIf=\\\"dt.attachments.length > 0\\\">\\n                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                    <li *ngFor=\\\"let att of dt.attachments\\\">\\n                                        <a [href]=\\\"att.path\\\" download=\\\"{{ att.file_name }}\\\" class=\\\"mailbox-attachment-name\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                                <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                                <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                                <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                                <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                                <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                                <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                            </span>\\n                                        </a>\\n                                        <div class=\\\"mailbox-attachment-info\\\">\\n                                            <a [href]=\\\"att.path\\\" download=\\\"{{ att.file_name }}\\\" class=\\\"mailbox-attachment-name\\\"><i\\n                                                    class=\\\"fa fa-paperclip\\\"></i> {{ att.file_name }}</a>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                        </div>\\n                    </li>\\n                    <li class=\\\"collapse\\\" id=\\\"collapseNote\\\">\\n                        <i class=\\\"fa fa-comments bg-yellow\\\"></i>\\n                        <div class=\\\"timeline-item\\\">\\n                            <h3 class=\\\"timeline-header\\\"><a>Leave a comment</a> New comment for this task</h3>\\n                            <div class=\\\"timeline-body\\\">\\n                                <textarea class=\\\"form-control\\\" [(ngModel)]=\\\"note.note_text\\\"></textarea>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\">\\n                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                    <li *ngFor=\\\"let att of note.attachments\\\">\\n                                        <span class=\\\"mailbox-attachment-icon\\\">\\n                                            <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                            <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                            <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                            <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                            <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                            <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                            <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                            <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                            <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                        </span>\\n                                        <div class=\\\"mailbox-attachment-info\\\">\\n                                            <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                            <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentNote(att)\\\"><i\\n                                                        class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                            </span>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\">\\n                                <div class=\\\"pull-right\\\">\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" (click)=\\\"saveNote()\\\"><i class=\\\"fa fa-floppy-o\\\"></i>\\n                                        Publish</button>\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\"><i class=\\\"fa fa-times\\\"></i>\\n                                        Close</button>\\n                                </div>\\n                                <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                                    for=\\\"note-file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                    <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                </label>\\n                                <input id=\\\"note-file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                    style=\\\"display: none;\\\" (change)=\\\"onChangeNote($event)\\\" />\\n                            </div>\\n                        </div>\\n                    </li>\\n                    <li class=\\\"collapse \\\" id=\\\"collapseTask\\\">\\n                        <i class=\\\"fa fa-tasks bg-blue\\\"></i>\\n                        <div class=\\\"timeline-item\\\">\\n                            <div class=\\\"timeline-header\\\">\\n                                <h4 class=\\\"timeline-title\\\">New Task</h4>\\n                            </div>\\n                            <div class=\\\"timeline-body\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Subject</label>\\n                                            <input class=\\\"form-control\\\" [(ngModel)]=\\\"subtask.task_subject\\\" placeholder=\\\"Subject\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Product</label>\\n                                            <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                                                [(ngModel)]=\\\"subtask.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Assign to</label>\\n                                            <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\"\\n                                                [(ngModel)]=\\\"subtask.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Delivery Date</label>\\n                                            <p-calendar class=\\\"ui-g ui-fluid\\\" [(ngModel)]=\\\"subtask.task_delivery\\\"\\n                                                dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\"></p-calendar>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Points</label>\\n                                            <input type=\\\"number\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"subtask.task_points\\\"\\n                                                [step]=\\\"0.25\\\" [min]=\\\"0\\\">\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12\\\">\\n                                        <div class=\\\"form-group\\\">\\n                                            <label>Description</label>\\n                                            <p-editor [(ngModel)]=\\\"subtask.task_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                                <p-header>\\n                                                    <span class=\\\"ql-formats\\\">\\n                                                        <span class=\\\"ql-header\\\">\\n                                                            <select class=\\\"ql-header\\\">\\n                                                                <option value=\\\"1\\\">Heading</option>\\n                                                                <option value=\\\"2\\\">Subheading</option>\\n                                                                <option selected>Normal</option>\\n                                                            </select>\\n                                                        </span>\\n\\n                                                        <span class=\\\"ql-font\\\">\\n                                                            <select class=\\\"ql-font\\\">\\n                                                                <option selected>Sans Serif</option>\\n                                                                <option value=\\\"serif\\\">Serif</option>\\n                                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                                            </select>\\n                                                        </span>\\n                                                    </span>\\n\\n                                                    <span class=\\\"ql-formats\\\">\\n                                                        <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                        <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                        <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                                    </span>\\n\\n                                                    <span class=\\\"ql-formats\\\">\\n                                                        <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\"\\n                                                            type=\\\"button\\\"></button>\\n                                                        <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\"\\n                                                            type=\\\"button\\\"></button>\\n                                                        <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                            <select class=\\\"ql-align\\\">\\n                                                                <option selected></option>\\n                                                                <option value=\\\"center\\\"></option>\\n                                                                <option value=\\\"right\\\"></option>\\n                                                                <option value=\\\"justify\\\"></option>\\n                                                            </select>\\n                                                        </span>\\n                                                    </span>\\n                                                </p-header>\\n                                            </p-editor>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\" *ngIf=\\\"subtask.attachments && subtask.attachments.length > 0\\\">\\n                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                    <li *ngFor=\\\"let att of subtask.attachments\\\">\\n                                        <span class=\\\"mailbox-attachment-icon\\\">\\n                                            <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                            <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                            <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                            <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                            <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                            <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                            <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                            <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                            <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                        </span>\\n                                        <div class=\\\"mailbox-attachment-info\\\">\\n                                            <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                            <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i\\n                                                        class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                            </span>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\">\\n                                <div class=\\\"row\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12\\\">\\n                                        <div class=\\\"pull-left\\\">\\n                                            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                                                for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                                <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                            </label>\\n                                            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                                style=\\\"display: none;\\\" (change)=\\\"onChangeTask($event)\\\" />\\n                                        </div>\\n                                        <div class=\\\"pull-right\\\">\\n                                            <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\"><i class=\\\"fa fa-times\\\"></i>\\n                                                Close</button>\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\"\\n                                                [disabled]=\\\"(!subtask.task_description || subtask.task_description == '' || subtask.task_description == 'undefined') || (!subtask.prod_id) || (!subtask.task_points || subtask.task_points <= 0)\\\"\\n                                                (click)=\\\"saveTask()\\\"><i class=\\\"fa fa-floppy-o\\\"></i> Create</button>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </li>\\n                    <li class=\\\"collapse \\\" id=\\\"collapseMail\\\">\\n                        <i class=\\\"fa fa-paper-plane-o bg-purple\\\"></i>\\n                        <div class=\\\"timeline-item\\\">\\n                            <h3 class=\\\"timeline-header\\\"><a>Compose an email</a> New email for this task</h3>\\n                            <div class=\\\"timeline-body\\\">\\n                                <div class=\\\"form-group\\\">\\n                                    <label>To:</label>\\n                                    <span class=\\\"ui-fluid\\\">\\n                                        <p-autoComplete [(ngModel)]=\\\"mail.emails\\\" [suggestions]=\\\"listmails\\\"\\n                                            (completeMethod)=\\\"filterMultiple($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\"\\n                                            placeholder=\\\"Recipient\\\" field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                                        </p-autoComplete>\\n                                    </span>\\n                                </div>\\n                                <div class=\\\"form-group\\\">\\n                                    <label>Subject: </label>\\n                                    <input class=\\\"form-control\\\" [(ngModel)]=\\\"mail.mail_subject\\\" placeholder=\\\"Subject\\\">\\n                                </div>\\n                                <div class=\\\"btn-group\\\" role=\\\"group\\\">\\n                                    <button *ngFor=\\\"let tmp of templates\\\" (click)=\\\"changeTmp(tmp)\\\">{{tmp.mtpl_name}}</button>\\n                                </div>\\n                                <div class=\\\"form-group\\\">\\n                                    <p-editor [(ngModel)]=\\\"mail.content\\\" [style]=\\\"{'height':'250px'}\\\">\\n                                        <p-header>\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <span class=\\\"ql-header\\\">\\n                                                    <select class=\\\"ql-header\\\">\\n                                                        <option value=\\\"1\\\">Heading</option>\\n                                                        <option value=\\\"2\\\">Subheading</option>\\n                                                        <option selected>Normal</option>\\n                                                    </select>\\n                                                </span>\\n\\n                                                <span class=\\\"ql-font\\\">\\n                                                    <select class=\\\"ql-font\\\">\\n                                                        <option selected>Sans Serif</option>\\n                                                        <option value=\\\"serif\\\">Serif</option>\\n                                                        <option value=\\\"monospace\\\">Monospace</option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                                <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                                <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                            </span>\\n\\n                                            <span class=\\\"ql-formats\\\">\\n                                                <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                                <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                                <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                                    <select class=\\\"ql-align\\\">\\n                                                        <option selected></option>\\n                                                        <option value=\\\"center\\\"></option>\\n                                                        <option value=\\\"right\\\"></option>\\n                                                        <option value=\\\"justify\\\"></option>\\n                                                    </select>\\n                                                </span>\\n                                            </span>\\n                                        </p-header>\\n                                    </p-editor>\\n                                </div>\\n                                <div class=\\\"btn-group\\\" role=\\\"group\\\">\\n                                    <button *ngFor=\\\"let sign of signatures\\\" (click)=\\\"changeSgn(sign)\\\">{{sign.mtpl_name}}</button>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\" *ngIf=\\\"mail.attachments.length > 0\\\">\\n                                <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                    <li *ngFor=\\\"let att of mail.attachments\\\">\\n                                        <span class=\\\"mailbox-attachment-icon\\\">\\n                                            <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                            <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                            <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"></i>\\n                                            <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                            <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                            <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                            <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                            <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                            <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                        </span>\\n                                        <div class=\\\"mailbox-attachment-info\\\">\\n                                            <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                            <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\"><i\\n                                                        class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i></button>\\n                                            </span>\\n                                        </div>\\n                                    </li>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"timeline-footer\\\">\\n                                <div class=\\\"pull-right\\\">\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-primary\\\" (click)=\\\"saveMail()\\\"><i class=\\\"fa fa-floppy-o\\\"></i>\\n                                        Send</button>\\n                                    <button type=\\\"submit\\\" class=\\\"btn btn-danger\\\" (click)=\\\"closedt()\\\"><i class=\\\"fa fa-times\\\"></i>\\n                                        Close</button>\\n                                </div>\\n                                <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;\\\"\\n                                    for=\\\"mail-file-upload\\\" class=\\\"custom-file-upload\\\">\\n                                    <i class=\\\"fa fa-cloud-upload\\\"></i> Custom Upload\\n                                </label>\\n                                <input id=\\\"mail-file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n                                    style=\\\"display: none;\\\" (change)=\\\"onChangeMail($event)\\\" />\\n                            </div>\\n                        </div>\\n                    </li>\\n                </ul>\\n            </div>\\n        </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAsoMail\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header modal-header-info\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"><span aria-hidden=\\\"true\\\">&times;</span></button>\\n                    <h4 class=\\\"modal-title\\\"><i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i> Link an email</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <form (ngSubmit)=\\\"srchMail()\\\">\\n                            <div class=\\\"input-group\\\">\\n                                <input type=\\\"text\\\" name=\\\"searchm\\\" [(ngModel)]=\\\"searchMail\\\" class=\\\"form-control\\\"\\n                                    placeholder=\\\"Search...\\\">\\n                                <span class=\\\"input-group-btn\\\">\\n                                    <button class=\\\"btn btn-default\\\" type=\\\"submit\\\"><i class=\\\"fa fa-search\\\" aria-hidden=\\\"true\\\"></i>\\n                                        Search</button>\\n                                </span>\\n                            </div>\\n                        </form>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>{{ mails.length }} Results</label>\\n                        <div class=\\\"table\\\" style=\\\"height: 350px; overflow: scroll;\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                                <thead>\\n                                    <th></th>\\n                                    <th>ID</th>\\n                                    <th>Date</th>\\n                                    <th>Sender</th>\\n                                    <th>Subject</th>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let ml of mails\\\">\\n                                        <td>\\n                                            <div class=\\\"ui-g\\\">\\n                                                <p-checkbox id=\\\"listmails\\\" name=\\\"listmails\\\" value=\\\"{{ml.id}}\\\" label=\\\"\\\"\\n                                                    [(ngModel)]=\\\"listmails\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td>{{ml.id}}</td>\\n                                        <td>{{ml.mabo_date}}</td>\\n                                        <td>{{ml.mabo_from}}</td>\\n                                        <td>{{ml.mabo_subject}}</td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-right\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"listmails.length == 0\\\"\\n                                (click)=\\\"addAsociateMail()\\\">\\n                                <i class=\\\"fa fa-floppy-o\\\"></i> Link\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/product/product.template.html\n// module id = 854\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"tasks\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight: bold;\\\">\\n          <i class=\\\"sq sq-products\\\" aria-hidden=\\\"true\\\" style=\\\"color:#007BD2;font-size:20px;\\\"></i> Products\\n          <small style=\\\"font-size:15px;\\\">Settings</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n                <li>\\n                    <a routerLink=\\\"/dashboard\\\">\\n                        <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n                </li>\\n                <li class=\\\"active\\\">Products</li>\\n        </ol>\\n    </section>\\n\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box-header with-border\\\">\\n                    <div class=\\\"col-xs-12 col-sm-5 col-md-6\\\" style=\\\"display: inline-flex;\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"refresh()\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);\\\">\\n                <i ></i>&nbsp;Refresh</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(155,212,107);\\\" (click)=\\\"addProduct()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddProduct\\\">\\n                <i ></i>&nbsp;Add</button>\\n                        <button [disabled]=\\\"this.selproducts.length == 0\\\" (click)=\\\"deleteProduct(null)\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(155,212,107);\\\">\\n                <i ></i>&nbsp;Delete</button>\\n                    </div>\\n\\n                    <div class=\\\"col-xs-11 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                        <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                <div class=\\\"label-input-mainfilter\\\">\\n                                    <input id=\\\"search_prod\\\" type=\\\"text\\\" class=\\\"input-mainfilter input_search_categories\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                </div>\\n                                <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                                    <button type=\\\"button\\\" (click)=\\\"filterText()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                                    <i class=\\\"sq sq-view\\\"></i>\\n                                </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"box-body\\\">\\n                    <div class=\\\"table-responsive product-messages\\\">\\n                        <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-productlistd\\\">\\n                            <thead>\\n                                <tr style=\\\"text-align:center;width: 50px;border: 3px solid rgb(227,237,241) !important;\\\">\\n                                    <th (click)=\\\"selectAll()\\\" style=\\\"width: 40px;\\\">\\n                                        <i *ngIf=\\\"selproducts.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                        <i *ngIf=\\\"selproducts.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                    </th>\\n\\n                                    <th (click)=\\\"setOrder('product.prod_name')\\\">Product Name\\n                                        <span [hidden]=\\\"posOrder !== 'product.prod_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                                        </span>\\n                                    </th>\\n                                    <th style=\\\"width: 150px;\\\">Actions</th>\\n                                </tr>\\n                            </thead>\\n                            <tbody>\\n                                <tr *ngFor=\\\"let prod of products\\\">\\n                                    <td>\\n                                        <div class=\\\"ui-g\\\">\\n                                            <p-checkbox id=\\\"listproduct\\\" name=\\\"lisproduct\\\" value=\\\"{{prod.prod_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"selproducts\\\"></p-checkbox>\\n                                        </div>\\n                                    </td>\\n                                    <td>\\n                                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(prod.prod_id)\\\">{{ escapeHtml(prod.prod_name) }}</a>\\n                                    </td>\\n                                    <td>\\n                                        <div class=\\\"btn-group\\\">\\n                                            <button type=\\\"button\\\" (click)=\\\"showModal(prod.prod_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\">\\n                          <i class=\\\"sq sq-search\\\"></i>\\n                        </button>\\n                                            <button type=\\\"button\\\" (click)=\\\"showEditModal(prod.prod_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\"></i>\\n                        </button>\\n                                            <button (click)=\\\"deleteProduct(prod.prod_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                          <i class=\\\"sq sq-trash\\\"></i>\\n                        </button>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                            </tbody>\\n                        </table>\\n                    </div>\\n\\n                    <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                    </div>\\n                    <div *ngIf=\\\"!isLoading && product.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                        No Data\\n                    </div>\\n\\n                    <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                        <div class=\\\"contacts-controls\\\">\\n                            <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                    {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                    >\\n                                    itemcount ?\\n                                    itemcount : (currentpage * limitpage)\\n                                    }} of {{ itemcount }} results\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"goTo(0)\\\">\\n                                    <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                            <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                                <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                        <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                </select>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                            </div>\\n                            <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                                <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"goTo(1)\\\">\\n                                        <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n\\n                </div>\\n\\n            </div>\\n\\n        </div>\\n\\n    </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"mdProduct\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content \\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" # \\\" + product.prod_name}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Product Name</label>\\n                        <p>{{ product.prod_name }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Group Assigned</label>\\n                        <p>{{ product.grop_name }}</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddProduct\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i style=\\\"color:rgb(227,237,241)\\\" class=\\\"sq sq-products\\\"></i>New Product\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Name</label>\\n                                <input class=\\\"form-control sqlx-input \\\" [(ngModel)]=\\\"product.prod_name\\\" placeholder=\\\"Product Name\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Groups</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groupslbl\\\" [(ngModel)]=\\\"product.grop_id\\\" placeholder=\\\"Select group\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"(!product.prod_name || product.prod_name == '' || product.prod_name == 'undefined') || (!product.grop_id || product.grop_id == '' || product.grop_id == 'undefined' )\\\"\\n                            (click)=\\\"saveProduct()\\\">\\n               Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditProduct\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n                <div class=\\\"modal-header header-project\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + product.prod_name}}</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Product Name</label>\\n                                <input class=\\\"form-control sqlx-input \\\" [(ngModel)]=\\\"product.prod_name\\\" placeholder=\\\"Product Name\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Group Assigned</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groupslbl\\\" [(ngModel)]=\\\"product.grop_id\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color:  rgb(68, 180, 248);\\\">Close</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx ng-star-inserted\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\" [disabled]=\\\"(!product.prod_name || product.prod_name == '' || product.prod_name == 'undefined')\\\" (click)=\\\"updateProduct()\\\">\\n              Save</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/product/productlist.template.html\n// module id = 855\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"typelist\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Types\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a href=\\\"#\\\">\\n          <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Types</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\">\\n          <div class=\\\"box-header with-border\\\">\\n            <div class=\\\"btn-group\\\">\\n              <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n              <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"addType()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddType\\\">\\n                <i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n              <button [disabled]=\\\"this.seltypes.length == 0\\\" (click)=\\\"deleteType(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-trash-o\\\"></i>&nbsp;Delete</button>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"table-responsive tasks-messages\\\">\\n              <div class=\\\"nav-tabs-custom\\\">\\n                <ul class=\\\"nav nav-tabs\\\">\\n                  <li class=\\\"active\\\">\\n                    <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('')\\\">All</a>\\n                  </li>\\n                </ul>\\n              </div>\\n\\n              <table id=\\\"results\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                <thead>\\n                  <tr>\\n                    <th (click)=\\\"selectAll()\\\" style=\\\"width: 30px;\\\">\\n                      <i *ngIf=\\\"seltypes.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                      <i *ngIf=\\\"seltypes.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    </th>\\n                    <th (click)=\\\"setOrder('type.type_id')\\\" style=\\\"width: 50px;\\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'type.type_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                       </span>\\n                     </th>\\n                    <th (click)=\\\"setOrder('type.type_name')\\\" style=\\\"width: 300px;\\\">Type Name\\n                      <span [hidden]=\\\"posOrder !== 'type.type_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('type.para_name')\\\" style=\\\"width: 100px;\\\">Status \\n                      <span [hidden]=\\\"posOrder !== 'type.para_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width: 150px;\\\">Actions</th>\\n                  </tr>\\n                </thead>\\n                <tbody>\\n                  <tr *ngFor=\\\"let tys of types\\\">\\n                    <td>\\n                       <div class=\\\"ui-g\\\" >\\n                        <p-checkbox id=\\\"types\\\" name=\\\"types\\\" value=\\\"{{tys.type_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"seltypes\\\"></p-checkbox>\\n                       </div>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(tys.type_id)\\\">{{ escapeHtml(tys.type_id) }}</a>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(tys.type_id)\\\">{{ escapeHtml(tys.type_name) }}</a>\\n                    </td>\\n                    <td>\\n                      <a href=\\\"javascript:void(0)\\\" (click)=\\\"showModal(tys.type_id)\\\">{{ escapeHtml(tys.para_name) }}</a>\\n                    </td>\\n                    <td>\\n                      <div class=\\\"btn-group\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"showModal(tys.type_id)\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                          title=\\\"Quick View\\\">\\n                          <i class=\\\"fa fa-eye\\\"></i>\\n                        </button>\\n                        <button type=\\\"button\\\" (click)=\\\"showEditModal(tys)\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                          title=\\\"Edit\\\">\\n                          <i class=\\\"fa fa-pencil-square-o\\\"></i>\\n                        </button>\\n                        <button  (click)=\\\"deleteType(tys.type_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\"\\n                          data-container=\\\"body\\\" title=\\\"Delete\\\">\\n                          <i class=\\\"fa fa-trash-o\\\"></i>\\n                        </button>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div class=\\\"box-footer no-padding\\\">\\n              <div class=\\\"contacts-controls\\\">\\n                \\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdType\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header modal-header-info\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" # \\\" + type.type_id}}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label> Name</label>\\n            <p>{{ type.type_name }}</p>\\n          </div>\\n          <div class=\\\"form-group\\\">\\n            <label>Status</label>\\n            <p>{{ type.status }}</p>\\n          </div> \\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddType\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">New Type</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-6 col-md-6\\\">\\n                  <label>Name</label>\\n                  <input type=\\\"text\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"type.typeNameNew\\\">\\n                  <span class=\\\"has-error\\\" *ngIf = \\\"typeMenu.indexOf(typeNameNew) >= 0\\\">This name is already in use</span>\\n              </div>\\n              <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                  <div class=\\\"form-group\\\">\\n                    <label>Status</label>\\n                    <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stscat\\\" [(ngModel)]=\\\"type.para_status\\\" placeholder=\\\"Select Status\\\"\\n                    filter=\\\"filter\\\"></p-dropdown>\\n                  </div>\\n              </div> \\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveType()\\\">\\n              <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditType\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header modal-header-info\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" Type #\\\"  + type.type_id}}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Name</label>\\n                <input class=\\\"form-control\\\" [(ngModel)]=\\\"type.type_name\\\" placeholder=\\\"Type Name\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Status</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"stscat\\\" [(ngModel)]=\\\"type.para_status\\\" placeholder=\\\"Select Status\\\"\\n                filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" (click)=\\\"updateType()\\\">\\n              <i class=\\\"fa fa-floppy-o\\\"></i> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/type/typelist.template.html\n// module id = 856\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"typelist\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Code\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a href=\\\"/dashboard\\\">\\n          <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Code</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\" style=\\\"background-color:#fff;\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <ul class=\\\"nav nav-tabs wiki-tabs\\\" id=\\\"myTab\\\" role=\\\"tablist\\\">\\n          <li class=\\\"nav-item active\\\">\\n            <a class=\\\"nav-link active\\\" id=\\\"code-tab\\\" data-toggle=\\\"tab\\\" href=\\\"#code\\\" role=\\\"tab\\\" aria-controls=\\\"code\\\" aria-selected=\\\"true\\\">Code</a>\\n          </li>\\n          <li class=\\\"nav-item\\\">\\n            <a class=\\\"nav-link\\\" id=\\\"issues-tab\\\" data-toggle=\\\"tab\\\" href=\\\"#issues\\\" role=\\\"tab\\\" aria-controls=\\\"issues\\\" aria-selected=\\\"false\\\">Issues</a>\\n          </li>\\n        </ul>\\n        <div class=\\\"tab-content\\\" id=\\\"myTabContent\\\">\\n          <div class=\\\"tab-pane fade active in\\\" id=\\\"code\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"code-tab\\\">\\n            <section>\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-xs-12 col-md-12\\\">\\n                  <div style=\\\"margin-top:12px;font-size: 16px;\\\">\\n                    <p>One framework. Mobile & desktop. <a>https://angular.io</a></p>\\n                  </div>\\n                  <div>\\n                    <ul class=\\\"code-list\\\">\\n                      <li>angular</li>\\n                      <li>web</li>\\n                      <li>javascript</li>\\n                      <li>pwa</li>\\n                      <li>web-framework</li>\\n                      <li>php</li>\\n                      <li>html</li>\\n                    </ul>\\n                  </div>\\n                  <div class=\\\"panel panel-default\\\">\\n                    <div class=\\\"panel-body\\\">\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-time\\\"></span>2,235 commits</div>\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-grain\\\"></span> 32 branches</div>\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-sort\\\"></span> 43 releases</div>\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-user\\\"></span> 53 contributors</div>\\n                      <div class=\\\"col-xs-6 col-md-2\\\"><span class=\\\"glyphicon glyphicon-education\\\"> </span> MIT</div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                  <div class=\\\"pull-left\\\">\\n                    <div class=\\\"btn-group\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-xs dropdown-toggle\\\" data-toggle=\\\"dropdown\\\"><a style=\\\"text-decoration: none; overflow: hidden; color: gray\\\">Branch:</a> <label>master</label>  <span class=\\\"caret\\\"></span></button>\\n                      <ul class=\\\"dropdown-menu\\\" role=\\\"menu\\\">\\n                        <label style=\\\"font-family: Arial, Helvetica, sans-serif; font-size: 13px\\\">Switch branches/tags</label>\\n                        <li class=\\\"divider\\\"></li>\\n                        <form class=\\\"navbar-form navbar-left\\\">\\n                          <div class=\\\"form-group\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control\\\" placeholder=\\\"Search\\\">\\n                          </div>\\n                        </form>\\n                        <li class=\\\"divider\\\"></li>\\n                        <li><a href=\\\"#\\\">Acción #1</a></li>\\n                        <li><a href=\\\"#\\\">Acción #2</a></li>\\n                        <li><a href=\\\"#\\\">Acción #3</a></li>\\n                        <li><a href=\\\"#\\\">Acción #4</a></li>\\n                      </ul>\\n                    </div>\\n                  </div>\\n\\n                  <div class=\\\"pull-right\\\" style=\\\"text-align: right\\\">\\n                    <div class=\\\"btn-group\\\" style=\\\"margin: 5px 0;\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" Style=\\\"margin-right:5px;\\\">Find file</button>\\n                      <button type=\\\"button\\\" class=\\\"btn btn-success dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" Style=\\\"margin-right:5px;\\\">Clone or Download<span class=\\\"caret\\\"></span></button>\\n                      <div class=\\\"dropdown-menu\\\" role=\\\"menu\\\" style=\\\"width: 351px;left: -120px;padding:0;\\\">\\n                        <div style=\\\"padding: 8px 16px 16px;\\\">\\n                          <h4>Clone with HTTPS<i class=\\\"sq sq-info\\\"></i></h4>\\n                          <p>Use Git or checkout with SVN using the web URL.</p>\\n                          <input type=\\\"text\\\" class=\\\"form-control input-monospace input-sm js-url-field\\\" value=\\\"https://github.com/git-lfs/git-lfs.git\\\"\\n                            aria-label=\\\"Clone this repository at https://github.com/git-lfs/git-lfs.git\\\" readonly=\\\"\\\">\\n                        </div>\\n                        <div>\\n                          <a href=\\\"https://desktop.github.com\\\" class=\\\"btn wiki-outline wiki-btn tooltipped tooltipped-s tooltipped-multiline\\\" data-open-app=\\\"mac\\\"\\n                            aria-label=\\\"Clone git-lfs/git-lfs to your computer and use it in GitHub Desktop.\\\" style=\\\"border-right: 2px solid #e1e4e8;font-weight: bold;\\\">Open in Desktop</a>\\n                          <a href=\\\"https://desktop.github.com\\\" class=\\\"btn wiki-outline wiki-btn tooltipped tooltipped-s tooltipped-multiline\\\" data-open-app=\\\"mac\\\"\\n                            aria-label=\\\"Clone git-lfs/git-lfs to your computer and use it in GitHub Desktop.\\\" style=\\\"font-weight: bold;\\\">Download ZIP</a>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n\\n                </div>\\n              </div>\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                  <div class=\\\"panel panel-default\\\">\\n                    <div class=\\\"col-xs-12 col-md-12 code-panel\\\">\\n                      <div class=\\\"col-xs-12 col-md-6\\\">\\n                        <span class=\\\"glyphicon glyphicon-user\\\" style=\\\"margin-right: 4px;\\\"></span>\\n                        <h5 style=\\\"display: contents;\\\">alexeagle and vicb ci: require green integration tests to publish snapshot (#23517)</h5>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-md-6\\\">\\n                        <span style=\\\"float:right;\\\">Latest commit 1c9200e  19 hours ago</span>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"wiki-body\\\">\\n                      <table class=\\\"table table-hover table-sm\\\" style=\\\"margin-bottom: 0;\\\">\\n                        <tbody>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> comands</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go: add documentation to trimCurrentPrefix</td>\\n                            <td><label style=\\\"color: grey\\\">21 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> config</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> debian</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> comands</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go: add documentation to trimCurrentPrefix</td>\\n                            <td><label style=\\\"color: grey\\\">21 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> config</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> debian</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> comands</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go: add documentation to trimCurrentPrefix</td>\\n                            <td><label style=\\\"color: grey\\\">21 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> config</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                          <tr>\\n                            <td style=\\\"min-width: 102px;\\\"><span class=\\\"glyphicon glyphicon-folder-close\\\"></span> debian</td>\\n                            <td><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>release: v2.0.1</td>\\n                            <td><label style=\\\"color: grey\\\">5 days ago</label></td>\\n                          </tr>\\n                        </tbody>\\n                      </table>\\n                    </div>\\n                  </div>\\n\\n                  <div class=\\\"panel panel-default\\\">\\n                    <div class=\\\"panel-heading\\\">\\n                      <span class=\\\"glyphicon glyphicon-book\\\"></span> README.md\\n                    </div>\\n                    <div class=\\\"panel-body\\\">\\n                      <div class=\\\"\\\">\\n                        <div class=\\\"col-md-10\\\">\\n                          <h2>Git Large File Storage</h2>\\n                          <hr />\\n                        </div>\\n                      </div>\\n                      <div class=\\\"\\\">\\n                        <div class=\\\"col-xs-12 col-md-4\\\">\\n                          <table class=\\\"table table-bordered\\\">\\n                            <thead>\\n                              <tr>\\n                                <th scope=\\\"col\\\">Linux</th>\\n                                <th scope=\\\"col\\\">macOS</th>\\n                                <th scope=\\\"col\\\">Windows</th>\\n                              </tr>\\n                            </thead>\\n                            <tbody>\\n                              <tr>\\n                                <td><a href=\\\"#\\\"><img src=\\\"img/icon.svg\\\" class=\\\"img-responsive\\\" ></a></td>\\n                                <td><a href=\\\"#\\\"><img src=\\\"img/icon.svg\\\" class=\\\"img-responsive\\\"></a></td>\\n                                <td><a href=\\\"#\\\"><img src=\\\"img/icon.svg\\\" class=\\\"img-responsive\\\"></a></td>\\n                              </tr>\\n                            </tbody>\\n                          </table>\\n                        </div>\\n\\n                      </div>\\n                      <div class=\\\"\\\">\\n                        <div class=\\\"col-xs-12 col-md-8\\\">\\n                          <section>\\n                            <P> Git LFS is a command line extension and specification for managing large files with Git.</P>\\n                            <p>The client is written in Go, with pre-compiled binaries available for Mac, Windows, Linux, and\\n                              FreeBSD. Check out the website for an overview of features. </p>\\n                          </section>\\n                        </div>\\n                      </div>\\n\\n                      <div class=\\\"\\\">\\n                        <div class=\\\"col-xs-12 col-md-10 \\\">\\n                          <h3>Getting Started</h3>\\n                          <hr />\\n                          <h4>Installation</h4>\\n                          <section>\\n                            <P> Descargar e instalar version git\\n                            </P>\\n                            <ul>\\n                              <li><strong>Linux users.</strong> Debian <code style=\\\"color: gray\\\">$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext \\\\libz-dev libssl-dev</code>                                </li>\\n                              <li><strong>macOS users.</strong> Instalar ssh-copy<code style=\\\"color: gray\\\">ruby -e \\\"$(curl -fsSL <a href=\\\"#\\\" style=\\\"text-decoration: none; color: black; overflow-x:hidden;word-wrap:break-word;\\\">https://raw.githubusercontent.com/Homebrew/install/master/install</a>)\\\"</code></li>\\n                              <li><strong>Windows users.</strong><code style=\\\"color: gray\\\">choco install git</code></li>\\n                            </ul>\\n                            <p>In addition, binary packages are available for Linux, macOS, Windows, and FreeBSD. This repository\\n                              can also be built-from-source using the latest version of Go.</p>\\n                            <h4>Usage</h4>\\n                            Lorem ipsum, dolor sit amet consectetur adipisicing elit. Harum sint ipsa deserunt quas culpa.\\n                            <pre style=\\\"background-color: #f6f8fa;  \\\">Lorem ipsum dolor sit amet consectetur adipisicing elit.</pre> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Harum sint ipsa deserunt quas culpa.\\n                            <pre style=\\\"background-color: #f6f8fa;  \\\">Lorem ipsum dolor sit amet consectetur adipisicing elit.</pre> Lorem ipsum, dolor sit amet consectetur adipisicing elit. Harum sint ipsa deserunt quas culpa.\\n                            <pre style=\\\"background-color: #f6f8fa;  \\\">Lorem ipsum dolor sit amet consectetur adipisicing elit.</pre>\\n                            <br>\\n                            <h3>Contributing</h3>\\n                            <hr />\\n                            <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Blanditiis, quam cum. Vitae hic cum\\n                              labore consectetur maiores aut in ab, praesentium dolorum! Enim inventore explicabo atque ipsam,\\n                              iste nesciunt itaque!</p>\\n                            <br>\\n                            <h3>Core Team</h3>\\n                            <hr />\\n                            <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Adipisci, placeat. Quisquam facere maxime,\\n                              quae corrupti voluptatibus.:</p>\\n                            <div class=\\\"col-xs-12 col-md-4 \\\">\\n                              <table class=\\\"table table-hover table-sm table-bordered\\\">\\n\\n                                <tbody>\\n                                  <tr>\\n                                    <td><a href=\\\"#\\\" style=\\\"text-decoration: none\\\">@lorem</a></td>\\n                                    <td><a href=\\\"#\\\" style=\\\"text-decoration: none\\\">@loremsd</a></td>\\n                                  </tr>\\n                                  <tr>\\n                                    <td><img class=\\\"img-responsive\\\" src=\\\"img/descarga.png\\\"></td>\\n                                    <td><img class=\\\"img-responsive\\\" src=\\\"img/descarga.png\\\"></td>\\n                                  </tr>\\n                                </tbody>\\n                              </table>\\n                            </div>\\n                          </section>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </section>\\n          </div>\\n          <div class=\\\"tab-pane fade in\\\" id=\\\"issues\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"issues-tab\\\">\\n            <section>\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-xs-12 col-md-12\\\">\\n                  <div style=\\\"margin-top:12px;font-size: 16px;\\\">\\n                    <div class=\\\"box-header with-border\\\">\\n                      <div class=\\\" search_projects\\\" style=\\\"display: inline-flex;\\\">\\n                        <input type=\\\"text\\\" class=\\\"form-control input-md\\\" placeholder=\\\"Search all issues\\\" [(ngModel)]=\\\"search\\\" style=\\\"text-indent: 15px;\\\">\\n                        <span class=\\\"glyphicon glyphicon-search form-control-feedback\\\" style=\\\"left: 8px;top: 11px;\\\"></span>\\n                      </div>\\n                    </div>\\n                    <div>\\n                      <div class=\\\"\\\" style=\\\"display: inline-flex;\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm\\\">Labels</button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"addproject()\\\">Milestones</button>\\n                      </div>\\n                      <div class=\\\"btn-group\\\" style=\\\"margin: 5px 0;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-success dropdown-toggle\\\" data-toggle=\\\"dropdown\\\" Style=\\\"margin-right:5px;\\\">New Issue</button>\\n                      </div>\\n                      <div class=\\\"filter-panel\\\">\\n                        <div class=\\\"filter-head\\\">\\n                          Filter by author\\n                        </div>\\n                        <div class=\\\"filter-head\\\">\\n                          <input type=\\\"text\\\" class=\\\"form-control input-sm\\\" placeholder=\\\"Filter users\\\" [(ngModel)]=\\\"searchUsers\\\">\\n                        </div>\\n                        <div class=\\\"filter-profiles\\\">\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Nestor</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Camilo</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Yajaira</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Doyler</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Luddy</a>\\n                         <a href=\\\"\\\"><i class=\\\"sq sq-profile\\\" style=\\\"margin: 0 5px\\\"></i>Admin</a>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-md-12\\\">\\n                  <div class=\\\"panel panel-default\\\">\\n                    <div class=\\\"col-xs-12 col-md-12 code-panel\\\">\\n                      <div class=\\\"col-xs-12 col-md-12\\\">\\n                        <span class=\\\"sq sq-info\\\" style=\\\"margin-right: 4px;\\\"></span>\\n                        <h5 style=\\\"display: contents;\\\">1,968 Open</h5>\\n                        <span class=\\\"sq sq-move-to-testing\\\" style=\\\"margin: 0 4px;\\\"></span>\\n                        <h5 style=\\\"display: contents;\\\">12,540 Closed</h5>\\n                      \\n\\n                        <div style=\\\"float:right;\\\">\\n                          <div class=\\\"btn-group\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-xs dropdown-toggle\\\" (click)=\\\"showFilter()\\\" data-toggle=\\\"dropdown\\\"><label>Author</label><span class=\\\"caret\\\"></span></button>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"wiki-body\\\">\\n                      <table class=\\\"table table-hover table-sm\\\" style=\\\"margin-bottom: 0;\\\">\\n                        <tbody>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                          <tr>\\n                            <td><span class=\\\"sq sq-taskboard\\\" style=\\\"margin: 0 12px;color: #28a745;\\\"></span><a href=\\\"#\\\" style=\\\"color: gray\\\"></a>commands/path.go:\\n                              add documentation to trimCurrentPrefix</td>\\n                            <td style=\\\"text-align: right;\\\"><i class=\\\"sq sq-comments\\\"></i><span style=\\\"margin: 0 12px;\\\">6</span></td>\\n                          </tr>\\n                        </tbody>\\n                      </table>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"row\\\">\\n                <div style=\\\"margin: 0 auto;width: 300px;\\\">\\n                  <nav aria-label=\\\"Page navigation example\\\">\\n                    <ul class=\\\"pagination justify-content-center\\\">\\n                      <li class=\\\"page-item disabled\\\">\\n                        <a class=\\\"page-link\\\" href=\\\"#\\\" tabindex=\\\"-1\\\">Previous</a>\\n                      </li>\\n                      <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">1</a></li>\\n                      <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">2</a></li>\\n                      <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">3</a></li>\\n                      <li class=\\\"page-item\\\">\\n                        <a class=\\\"page-link\\\" href=\\\"#\\\">Next</a>\\n                      </li>\\n                    </ul>\\n                  </nav>\\n                </div>\\n              </div>\\n            </section>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdFilter\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header modal-header-info\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i></h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label>Product Name</label>\\n            <p></p>\\n          </div>\\n          <div class=\\\"form-group\\\">\\n            <label>Group Assigned</label>\\n            <p></p>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/code/code.template.html\n// module id = 857\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"typelist\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      wiki\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a href=\\\"/dashboard\\\">\\n          <i class=\\\"fa fa-dashboard\\\"></i>Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Code</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\" style=\\\"background-color: #fff; height: 95%;\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-md-3\\\">\\n        <nav class=\\\"wiki border\\\" data-pjax=\\\"\\\">\\n          <a class=\\\"wiki-item selected\\\" href=\\\"javascript:void(0)\\\">Repositories<span class=\\\"Counter ml-1 mt-1\\\">366K</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Code<span class=\\\"Counter ml-1 mt-1\\\">67M</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Commits<span class=\\\"Counter ml-1 mt-1\\\">1M</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Issues<span class=\\\"Counter ml-1 mt-1\\\">382K</span></a>\\n\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Topics<span class=\\\"Counter ml-1 mt-1\\\">877</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Wikis<span class=\\\"Counter ml-1 mt-1\\\">34K</span></a>\\n          <a class=\\\"wiki-item\\\" href=\\\"javascript:void(0)\\\">Users<span class=\\\"Counter ml-1 mt-1\\\">6K</span></a>\\n        </nav>\\n      </div>\\n\\n      <div class=\\\"col-xs-12 col-md-9\\\">\\n        <div style=\\\"width: 101%;\\\">\\n          <h3 style=\\\"display: contents;\\\">366,843 repository results</h3>\\n          <div class=\\\"btn-group\\\" style=\\\"float: right;\\\">\\n            <button type=\\\"button\\\" class=\\\"btn btn-default btn-xs dropdown-toggle\\\" data-toggle=\\\"dropdown\\\"><a style=\\\"text-decoration: none; overflow: hidden; color: gray\\\" >Sort:</a> <label>master</label>  <span class=\\\"caret\\\"></span></button>\\n\\n            <ul class=\\\"dropdown-menu\\\" role=\\\"menu\\\" style=\\\"left: -100px;\\\">\\n              <label style=\\\"font-family: Arial, Helvetica, sans-serif; font-size: 13px;padding-left:4px;\\\">Sort Options</label>\\n              <li class=\\\"divider\\\"></li>\\n              <li><a href=\\\"javascript:void(0)\\\">Acción #1</a></li>\\n              <li><a href=\\\"javascript:void(0)\\\">Acción #2</a></li>\\n              <li><a href=\\\"javascript:void(0)\\\">Acción #3</a></li>\\n              <li><a href=\\\"javascript:void(0)\\\">Acción #4</a></li>\\n            </ul>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" routerLink=\\\"/code\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" routerLink=\\\"/code\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\" style=\\\"padding: 20px;\\\">\\n          <div class=\\\"wiki-result\\\">\\n            <div class=\\\"col-xs-6 col-md-8\\\">\\n              <h4 style=\\\"display: contents;\\\"><a class=\\\"v-align-middle\\\" href=\\\"javascript:void(0)\\\">angular/<em>angular</em></a></h4>\\n            </div>\\n            <div class=\\\"col-xs-3  col-md-2\\\">JavaScript</div>\\n            <div class=\\\"col-xs-3 col-md-2\\\"><a class=\\\"wiki-link\\\" href=\\\"javascript:void(0)\\\"><i class=\\\"fa fa-star\\\" aria-hidden=\\\"true\\\" style=\\\"margin-right:4px;\\\"></i>35.4k</a></div>\\n          </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n          <div style=\\\"margin: 0 auto;width: 300px;\\\">\\n            <nav aria-label=\\\"Page navigation example\\\">\\n              <ul class=\\\"pagination justify-content-center\\\">\\n                <li class=\\\"page-item disabled\\\">\\n                  <a class=\\\"page-link\\\" href=\\\"#\\\" tabindex=\\\"-1\\\">Previous</a>\\n                </li>\\n                <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">1</a></li>\\n                <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">2</a></li>\\n                <li class=\\\"page-item\\\"><a class=\\\"page-link\\\" href=\\\"#\\\">3</a></li>\\n                <li class=\\\"page-item\\\">\\n                  <a class=\\\"page-link\\\" href=\\\"#\\\">Next</a>\\n                </li>\\n              </ul>\\n            </nav>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <p-confirmDialog></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/wiki/wiki.template.html\n// module id = 858\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"requests\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-requests\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> REQUESTS\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Request</li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\" style=\\\"min-width: 410px;\\\">\\n      <div *ngFor=\\\"let ty of types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.type_color, 'border-radius': '15px', 'color': 'white', 'padding-right': '10px', 'cursor': 'pointer', 'border': 'solid 6px rgb(247,247,247)'} : {}\\\"\\n        class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\" (click)=\\\"setStateList([ty.type_id])\\\">\\n        <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 content-buttons pull-left\\\" style=\\\"margin-top: 18px;padding: 0px;\\\">\\n          <span style=\\\"font-size: 20px; font-weight: bold; text-align: center;\\\">{{ty.count}}</span>\\n          <span style=\\\"text-transform: uppercase; font-size: 20px; font-weight: bold; text-align: center;\\\"> <i class=\\\"{{ty.type_label}}\\\"\\n              style=\\\"font-size: 24px; text-align: center; font-weight: bold;\\\"></i>{{ty.type_name}} </span>\\n        </div>\\n        <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 content-buttons pull-right\\\" style=\\\"padding:0px; margin-bottom: 4px; margin-top: -8px;\\\">\\n          <div class=\\\"row button-row\\\">\\n            <div class=\\\"col-xs-6 button-types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.backgorund_color, 'border-radius': '15px', 'color': 'white' } : {}\\\">\\n              <div style=\\\"padding-top: 9px;padding-left: -3px; margin-left: -2px;\\\">\\n                <a href=\\\"javascript:void(0)\\\" (click)=\\\"showCategories(ty.type_id, ty.type_name, ty.type_color,ty.type_label)\\\"\\n                  style=\\\"color:white;text-decoration:none\\\">\\n                  <i class=\\\"sq sq-info more-info\\\" style=\\\"font-size: 30px;\\\"></i>\\n                </a>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-6 button-types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.backgorund_color, 'border-radius': '15px', 'color': 'white' } : {}\\\">\\n              <div style=\\\" padding-top: 10px; margin-left: -16px; margin-right: 3px;padding-left: 12px;\\\">\\n                <a href=\\\"javascript:void(0)\\\" id=\\\"addError\\\" (click)=\\\"addEvent(ty.type_id, ty.type_name, ty.type_color,ty.type_label)\\\"\\n                  style=\\\"color:white;text-decoration:none\\\">\\n                  <i class=\\\"sq sq-add-1 more-info\\\" style=\\\"font-size: 30px;\\\"></i>\\n                </a>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\" style=\\\"margin-top: 5px; margin-bottom: 5px; margin-right: 5px;\\\">\\n        <div class=\\\"nav-tabs-customr col-xs-12 col-sm-5 col-md-5 col-lg-5 req_btn\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n          <ul *ngIf=\\\"types && types.length > 0\\\" class=\\\"nav nav-tabs nav-tabs-sqlxs\\\" style=\\\"border-bottom:none;\\\">\\n            <li [ngClass]=\\\"{'active':typeSelected === '1,3,4'}\\\" style=\\\"border-top:none; padding: 8px;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"All\\\">\\n              <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['1','3','4'])\\\" style=\\\"padding: 0px 10px 0px 7px;border-color:transparent!important;\\\">All</a>\\n            </li>\\n            <li [ngClass]=\\\"{'active':typeSelected === '1'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[0].type_name}}>\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['1'])\\\" style=\\\"border-color:transparent!important;\\\">\\n                <i class=\\\"sq sq-errors\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; text-align: center;margin-left: 3px; margin-right: 1px;\\\"></i>\\n              </a>\\n            </li>\\n            <li [ngClass]=\\\"{'active':typeSelected === '3'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[1].type_name}}>\\n                <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['3'])\\\" style=\\\"border-color:transparent!important;\\\">\\n                  <i class=\\\"sq sq-developing\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; text-align: center; margin-left: 3px; margin-right: 1px;\\\"></i>\\n                </a>\\n            </li>\\n            <li [ngClass]=\\\"{'active':typeSelected === '4'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[2].type_name}}>\\n                <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['4'])\\\" style=\\\"border-color:transparent!important;\\\">\\n                    <i class=\\\"sq sq-implementations\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n                </a>\\n            </li>\\n            <li style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Requests\\\">\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"filterRequest(1)\\\" style=\\\"border-color:transparent!important;\\\">\\n                <i class=\\\"sq sq-requests\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n              </a>\\n            </li>\\n            <li style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Tasks\\\">\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"filterRequest(2)\\\" style=\\\"border-color:transparent!important;\\\">\\n                <i class=\\\"sq sq-statustasks\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n              </a>\\n            </li>\\n            <li style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Rejected\\\">\\n              <label class=\\\"switch-request\\\">\\n                <input type=\\\"checkbox\\\" [(ngModel)]=\\\"rejected\\\" (change)=\\\"filterRejected()\\\" binary=\\\"true\\\" >\\n                <span class=\\\"slider-request round\\\"></span>\\n            </label>\\n            </li>\\n          </ul>\\n        </div>\\n      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n        <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n          <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n            <div class=\\\"label-input-mainfilter\\\">\\n              <input id=\\\"search_req\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\"\\n                placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n            </div>\\n            <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n              <button type=\\\"button\\\" (click)=\\\"searchFilter()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 1px; margin-right: 8px; margin-top: 2px; color: rgb(68, 180, 248);\\\">\\n                <i class=\\\"sq sq-view\\\"></i>\\n              </button>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-xs-1 col-sm-1 col-md-1 col-lg-1\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" (click)=\\\"exportExcel()\\\">\\n              <i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i>\\n          </button>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary2\\\">\\n          <div class=\\\"box-body\\\" style=\\\"max-height:400px;padding-top:20px;\\\">\\n            <div class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;\\\">\\n              <table id=\\\"resultsh\\\" class=\\\"table table-hover\\\" style=\\\"margin-bottom:0px;\\\">\\n                <thead>\\n                  <tr style=\\\"color:#707070;\\\">\\n                    <th style=\\\"width: 1%; text-align:center!important;\\\">\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_id')\\\" style=\\\"width: 8%;text-align:center!important;\\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width: 10%; text-align:center!important;\\\">Progress\\n                    </th>\\n                    <th (click)=\\\"setOrder('tkstatus')\\\" style=\\\"width:10%;text-align:center!important;\\\">Status\\n                      <span [hidden]=\\\"posOrder !== 'tkstatus'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_subject')\\\" style=\\\"width:15%;text-align:center!important;\\\">Subject\\n                      <span [hidden]=\\\"posOrder !== 'task_subject'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_date')\\\" style=\\\"width:12%; text-align:center!important;\\\">Date\\n                      <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('user_creator')\\\" style=\\\"width:10%;text-align:center!important;\\\"> Creator\\n                      <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('asigned')\\\" style=\\\"width:10%;text-align:center!important;\\\">Assigned\\n                      <span [hidden]=\\\"posOrder !== 'asigned'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('type_name')\\\" style=\\\"width:14%; text-align:center!important;\\\"> Type\\n                      <span [hidden]=\\\"posOrder !== 'type_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width:10%;text-align:center!important;\\\">Actions\\n                    </th>\\n                  </tr>\\n                </thead>\\n              </table>\\n            </div>\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n              <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n              <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div *ngIf=\\\"!isLoading && requests.length == 0\\\" class=\\\"table-responsive2 col-lg-12 col-md-12 col-xs-12\\\"\\n              style=\\\"text-align: center;\\\">\\n              No Data\\n            </div>\\n            <div *ngIf=\\\"requests.length > 0\\\" class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-bottom: 2px solid #ddd;\\n            margin-bottom: 3px;padding: 0px;\\\">\\n              <table id=\\\"resultsb\\\" class=\\\"table table-hover\\\">\\n                <tbody style=\\\"height: 100px; overflow:scroll; background: white\\\">\\n                  <tr *ngFor=\\\"let eve of requests\\\" style=\\\"color:#707070;\\\">\\n                    <td class=\\\"td_icontype_slqx\\\" style=\\\"width: 1%;\\\">\\n                      <div *ngIf=\\\"eve.task_delivery == null\\\" class=\\\"icon_type_squalinx\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Request\\\">\\n                        <i class=\\\"sq sq-requests\\\" style=\\\"color:#707070;\\\"></i>\\n                      </div>\\n                      <div *ngIf=\\\"eve.task_delivery != null\\\" class=\\\"icon_type_squalinx\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Task\\\">\\n                        <i class=\\\"sq sq-statustasks\\\" style=\\\"color:#707070;\\\"></i>\\n                      </div>\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: center;width: 8%;\\\">\\n                      {{ escapeHtml(eve.task_id) }}\\n                    </td>\\n                    <td style=\\\"text-align:center;border:none;width: 10%;\\\">\\n                      <span class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{eve.percent}}%</span>\\n                      <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%; margin-left: 12px; height: 10px; background-color:rgb(220, 227, 230); \\\">\\n                        <div class=\\\"success-tasks-request\\\" [ngStyle]=\\\"{ 'width': eve.percent + '%' }\\\">\\n                        </div>\\n                      </div>\\n                    </td>\\n                    <td [ngStyle]=\\\"eve.tkstatus == 'Rejected' ? { 'color': '#F01458', 'border-top':'1px solid white', 'width':'10%' } : eve.tkstatus == 'Complete' ? { 'color': '#92CC66', 'border-top':'1px solid white', 'width':'10%' }  : {'color': '#707070;', 'border-top':'1px solid white', 'width':'10%'}\\\">\\n                      {{ escapeHtml(eve.tkstatus) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;width:15%;\\\">\\n                      {{ escapeHtml(eve.task_subject) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: center;width:12%;\\\">\\n                      {{ escapeHtml(eve.task_date) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: left;width:10%;\\\">\\n                      {{ escapeHtml(eve.user_creator) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: center;width:10%;\\\">\\n                      {{ escapeHtml(eve.asigned) }}\\n                    </td>\\n                    <td style=\\\"border:none;text-align: center;width:14%;\\\">\\n                      <div [ngStyle]=\\\"eve.type_id ? {'background': eve.type_color} : {} \\\" class=\\\"colortype\\\"></div>\\n                    </td>\\n                    <td style=\\\"border:none;width:10%;\\\">\\n                      <div class=\\\"btn-group\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"showModaltk(eve.task_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\">\\n                          <i class=\\\"sq sq-search\\\" style=\\\"font-weight: bold;\\\"></i>\\n                        </button>\\n                        <taskview [myTaskId]=\\\"eve.task_id\\\"></taskview>\\n                        <button *ngIf=\\\"eve.task_delivery == null && eve.asigned_to == 'forme' && eve.para_status != 50\\\"\\n                          type=\\\"button\\\" (click)=\\\"showRequest(eve.asigned_to, eve.canclose, eve.tktype, eve.task_id,eve.type_id, eve.type_name)\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\" style=\\\"font-weight: bold;\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_delivery == null && eve.asigned_to == 'byme' && eve.para_status != 50\\\"\\n                          type=\\\"button\\\" (click)=\\\"showRequest(eve.asigned_to, eve.canclose, eve.tktype, eve.task_id,eve.type_id, eve.type_name)\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.percent == 100 && eve.canclose == '1'\\\" (click)=\\\"closeTask(eve.task_id)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                          <i class=\\\"sq sq-close-bg\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1'\\\" (click)=\\\"deleteTask(eve.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                          <i class=\\\"sq sq-eliminar\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canrj === '1' && eve.para_status != 50\\\" (click)=\\\"showReject(eve)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reject\\\">\\n                          <i class=\\\"sq sq-backlog\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1' && eve.para_status != 50\\\" (click)=\\\"showImprov(eve)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Improve\\\">\\n                          <i class=\\\"sq sq-improving\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1' && eve.para_status == 50\\\" (click)=\\\"reopenTask(eve.task_id)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Reopen\\\">\\n                          <i class=\\\"fa fa-undo\\\"></i>\\n                        </button>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div *ngIf=\\\"requests.length > 0\\\" class=\\\"box-footer no-padding\\\">\\n              <div class=\\\"contacts-controls\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"color:#707070;\\\">\\n                  {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage) > itemcount ?\\n                  itemcount : (currentpage * limitpage)\\n                  }} of {{ itemcount }} results\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\" style=\\\"color:#707070;\\\"></i>\\n                    </button>\\n                    <select class=\\\"btn btn-default btn-sm\\\" style=\\\"height: 30px; background-color: rgb(255,255,255);\\\"\\n                      [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                      <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                    </select>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\" style=\\\"color:#707070;\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n                <div class=\\\"pull-left\\\" style=\\\"color:#707070;\\\">\\n                  <div class=\\\"btn-group\\\">\\n                    <select class=\\\"btn btn-default btn-sm\\\" style=\\\"height: 30px; background-color: rgb(255,255,255);\\\"\\n                      [(ngModel)]=\\\"limitpage\\\" (change)=\\\"reloadResults()\\\">\\n                      <option *ngFor=\\\"let r of results\\\" [ngValue]=\\\"r\\\">{{ r }}</option>\\n                    </select>\\n                  </div>\\n                  per page\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <!--modal mdEditTask-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Subject</label>\\n                <input id=\\\"inputr_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>creator</label>\\n                <input id=\\\"inputr_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.creator\\\" placeholder=\\\"\\\" disabled>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"ddwnr_1\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Assigned to</label>\\n                <p-dropdown id=\\\"ddwnr_2\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-6 col-xs-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Associate to Project</label>\\n                <p-dropdown id=\\\"ddwnr_3\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar id=\\\"calendarb_2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                  [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Associate to Sprint</label>\\n                <p-dropdown id=\\\"ddwnr_4\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group spinner-squadlinx\\\">\\n                <label>Points</label>\\n                <input type=\\\"number\\\" class=\\\"input_number_squadlinx\\\" id=\\\"inputr_2\\\" [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\"\\n                  min=\\\"0\\\">\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_description_task\\\" [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                <a id=\\\"editTask-request\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_associate_form_task\\\" *ngIf=\\\"task.fields && task.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                <a id=\\\"editTask-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate Form</a>\\n              </li>\\n              <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\" id=\\\"li_attachments_editTask\\\">\\n                <a id=\\\"editTask-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\" (click)=\\\"setPage(3)\\\">Attachments\\n                  <span>({{task.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"p_editor_description_requests\\\" [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_editRequest\\\">\\n                  <table class=\\\"table_associateFom_editRequest\\\">\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let fr of task.fields\\\" style=\\\"height: 60px;\\\">\\n                        <td class=\\\"td_formfield_editRequest\\\">\\n                          <div class=\\\"div_formfield_editRequest\\\">\\n                            {{fr.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_editRequest \\\">\\n                          <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editRequest\\\">\\n                            {{fr.form_data}}\\n                          </div>\\n                          <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editRequest\\\">\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of task.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"sq sq-attach-files\\\"></i>{{ (att.tsat_alias.length>6) ? (att.tsat_alias |\\n                          slice:0:20)+'..':(att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"sq sq-attach-files\\\"></i>{{ (att.name.length > 6)? (att.name |\\n                          slice:0:20)+'..':(att.name)\\n                          }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask_editTask(task, att)\\\">\\n                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment_editTask(att)\\\">\\n                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #ccc; display: inline-block; font-size: 12px;padding: 5px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n              for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn_newProjectFromRequest\\\" (click)=\\\"createNewProject(task)\\\">\\n              <i class=\\\"sq sq-create-new-project add_criteria\\\"></i>New Project\\n            </button>\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\"\\n              [disabled]=\\\"(!task.task_subject || task.task_subject == '' || task.task_subject == 'undefined') || (!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0) || (!task.task_delivery || task.task_delivery == '' || task.task_delivery == 'undefined')\\\"\\n              (click)=\\\"saveTask()\\\">Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!--.modal mdEditTask-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditRequest\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"border-radius: 15px;\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-content modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content new-design2\\\" style=\\\"border-radius: 15px; width: 675px;\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"\\n            (click)=\\\"activeTabs()\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i> {{ myfilterfield.typetittle }} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"form-group col-xs-12 col-md-12 col-lg-12 input-squadlinx\\\">\\n              <label>Subject</label>\\n              <input id=\\\"inputt_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Product</label>\\n              <p-dropdown id=\\\"ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Project</label>\\n              <p-dropdown id=\\\"ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Category</label>\\n              <p-dropdown id=\\\"ddwnr_7\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"categorieslbl | filterfield : { pos : 'prod_id', text : [task.prod_id] } | filterfield : { pos : 'para_type', text : myfilterfield.text }\\\" [(ngModel)]=\\\"task.cate_id\\\" placeholder=\\\"Select a Category\\\"\\n                filter=\\\"filter\\\" (onChange)=\\\"createForm(task.cate_id)\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Group</label>\\n              <p-dropdown id=\\\"ddwnr_5\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"groups\\\" [(ngModel)]=\\\"task.grop_id\\\" placeholder=\\\"Select a Group\\\"></p-dropdown>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_associate_form_request\\\" *ngIf=\\\"task.fields && task.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 1}\\\">\\n                <a id=\\\"editRequest-request1\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form_request\\\" (click)=\\\"setPageRequest(1)\\\">Associate\\n                  Form</a>\\n              </li>\\n              <li id=\\\"li_description_request\\\" [ngClass]=\\\"{'active':tagMenuRequest == 2}\\\">\\n                <a id=\\\"editRequest-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#description_request\\\" (click)=\\\"setPageRequest(2)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_attachments_request\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 3}\\\">\\n                <a id=\\\"editRequest-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_request\\\" (click)=\\\"setPageRequest(3)\\\">Attachments\\n                  <span>({{task.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 1 && task.fields && task.fields.length > 0 \\\" id=\\\"associate_form_request\\\"\\n              class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_createRequest\\\">\\n                  <table class=\\\"table_associateFom_createRequest\\\">\\n                    <thead>\\n                      <th style=\\\"width:30%; text-align: center;\\\">Field name</th>\\n                      <th style=\\\"width:60%; text-align: center;\\\">Data</th>\\n                      <th style=\\\"width:10%; text-align: center;\\\"></th>\\n                    </thead>\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let tkf of task.fields\\\" style=\\\"height: 60px;\\\">\\n                        <td class=\\\"td_formfield_createRequest\\\" style=\\\"width: 30%;\\\">\\n                          <div class=\\\"div_formfield_createRequest\\\">\\n                            {{tkf.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_createRequest\\\" style=\\\"width: 65%;\\\">\\n                          <div class=\\\"div_formdata_createRequest\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control div_input_formdata_createRequest\\\" [(ngModel)]=\\\"tkf.form_data\\\"\\n                              (value)=\\\"tkf.form_data\\\">\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formManda_createRequest\\\">\\n                          <div *ngIf=\\\"tkf.form_mandatory \\\" class=\\\"div_formManda_createRequest\\\">\\n                            <label>*</label>\\n                          </div>\\n                          <div *ngIf=\\\"!tkf.form_mandatory\\\" class=\\\"div_formManda_createRequest\\\">\\n\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 2\\\" id=\\\"description_request\\\" class=\\\"col-xs-12 col-md-12 col-lg-12 \\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editorr_2\\\" [(ngModel)]=\\\"task.task_description_r\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 3\\\" id=\\\"attachments_request\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of task.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" target=\\\"_blank\\\" (click)=\\\"downloadFile(att, $event)\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"sq sq-documents-related\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-pdf\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-image\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-doc\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-word\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-excel\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-compress\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-powerpoint\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"sq sq-sound\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" target=\\\"_blank\\\" (click)=\\\"downloadFile(att, $event)\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"sq sq-attach-files\\\"></i>{{ (att.tsat_alias.length>6) ?\\n                          (att.tsat_alias |\\n                          slice:0:20)+'..':(att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" target=\\\"_blank\\\" (click)=\\\"downloadFile(att, $event)\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"sq sq-attach-files\\\"></i>{{ (att.name.length > 6)? (att.name |\\n                          slice:0:20)+'..':(att.name) }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask_editRequest(task, att)\\\">\\n                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment_editRequest(att)\\\">\\n                            <i class=\\\"sq sq-trash\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #008BCB; display: inline-block; padding: 6px 12px; cursor: pointer; border-radius: 15px;background-color: #008BCB; color:white;\\\"\\n              for=\\\"file-upload-addRequest\\\" class=\\\"custom-file-upload\\\">\\n              <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n            </label>\\n            <input id=\\\"file-upload-addRequest\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              (change)=\\\"onChange($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"addRequest\\\" type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"saveTask()\\\" [disabled]=\\\"(!task.task_subject || task.task_subject == '' || task.task_subject == 'undefined') || (!task.task_description_r || task.task_description_r == '' || task.task_description_r == 'undefined') || (!task.prod_id) || (!task.cate_id) || (!task.grop_id)\\\">\\n              Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdCategory\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" style=\\\"border-radius: 15px;\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-categories\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i>{{myfilterfield.typetittle}} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group scrollable\\\" style=\\\"max-height: 200px;\\\">\\n                <table class=\\\"table table-hover table-striped table-category\\\">\\n                  <thead>\\n                    <th style=\\\"width:100%;\\\"> </th>\\n                  </thead>\\n                  <tbody>\\n                    <tr *ngFor=\\\"let ml of categorieslbl | filterfield : myfilterfield\\\">\\n                      <td>\\n                        {{ml.label}}\\n                      </td>\\n                    </tr>\\n                  </tbody>\\n                </table>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdRj\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-rejectRequest\\\">\\n        <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n          <button id=\\\"close-mdRj-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Reject task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label class=\\\"label_reasonReject_slqx\\\">Reason for rejection</label>\\n            <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\" placeholder=\\\"Description ...\\\"\\n              [(ngModel)]=\\\"rjtask.retk_description\\\"></textarea>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"close2-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\"\\n            [disabled]=\\\"(!rjtask.retk_description || rjtask.retk_description == '' || rjtask.retk_description == 'undefined')\\\"\\n            (click)=\\\"rejectTask()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdImp\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-rejectRequest\\\">\\n        <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n          <button id=\\\"close-mdImp-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Improve task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label class=\\\"label_reasonReject_slqx\\\">Reason for improve</label>\\n            <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\" placeholder=\\\"Description ...\\\"\\n              [(ngModel)]=\\\"rjtask.retk_description\\\"></textarea>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"close2-mdImp-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mdImp-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\"\\n            [disabled]=\\\"(!rjtask.retk_description || rjtask.retk_description == '' || rjtask.retk_description == 'undefined')\\\"\\n            (click)=\\\"impTask()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdproject\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params\\\" style=\\\"text-align: center;text-align: center; position: absolute; z-index: 10; background-color: rgba(121,121,121,0.54); height: 100%;    margin-top: 0px ;display: flex;justify-content: center;  align-items: center;\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content-params\\\">\\n        <div *ngIf=\\\"!project.proj_id\\\" class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"sq sq-projects\\\" aria-hidden=\\\"true\\\"></i>&nbsp;&nbsp; New project</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Subject</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"project.proj_subject\\\" name=\\\"project_subject\\\"\\n                  placeholder=\\\"Subject\\\">\\n              </div>\\n            </div>\\n            <!--.subject-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-6\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>User Applicant</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userapplicant\\\"\\n                  [(ngModel)]=\\\"project.user_applicant\\\" placeholder=\\\"Select a user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.user applicant-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Group</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groupscombo\\\"\\n                  [(ngModel)]=\\\"project.group_assigned\\\" placeholder=\\\"Select a group\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.group-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\"\\n                  [(ngModel)]=\\\"project.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <!--.product-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"project.proj_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                  [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <!--.delivery date-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Estimated Points</label>\\n                <input type=\\\"number\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"project.proj_propoints\\\" [step]=\\\"0.25\\\"\\n                  [min]=\\\"0\\\">\\n              </div>\\n            </div>\\n            <!--.estimates points-->\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                <label>Share with</label>\\n                <span class=\\\"ui-fluid\\\">\\n                  <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"project.userssh\\\" [suggestions]=\\\"usersShareWith\\\"\\n                    (completeMethod)=\\\"filterMultipleShared($event)\\\" styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Share with\\\"\\n                    field=\\\"completename\\\" [multiple]=\\\"true\\\">\\n                  </p-autoComplete>\\n                </span>\\n              </div>\\n            </div>\\n          </div>\\n          <!--.share with-->\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li [ngClass]=\\\"{'active':tagMenu == 1}\\\" id=\\\"li_description_project\\\">\\n                <a id=\\\"editProject-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_project\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n              </li>\\n              <li *ngIf=\\\"project.attachments && project.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\" id=\\\"li_attachments_project\\\">\\n                <a id=\\\"editProject-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_project\\\" (click)=\\\"setPage(2)\\\">Attachments\\n                  <span>({{project.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor [(ngModel)]=\\\"project.proj_description\\\" [style]=\\\"{'height':'250px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n              <!--.description-->\\n            </div>\\n            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"attachments_project\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of project.attachments\\\">\\n                      <a id=\\\"href-attp-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type && (att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/')\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\">\\n                          <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a id=\\\"href-attp2-mdtask-projectlist\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.pjat_name}}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"project.proj_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                            (click)=\\\"deleteAttachmentProject(project,att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!project.proj_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                            (click)=\\\"deleteAttachment(att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\">\\n              Close\\n            </button>\\n            <button type=\\\"submit\\\" class=\\\"btn-success btn-sm btn-save-form-sprints\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateProj()\\\"\\n              (click)=\\\"saveproject()\\\" style=\\\"padding: 5px 12px;\\\"> Save\\n            </button>\\n          </div>\\n          <div class=\\\"pull-left\\\">\\n            <label for=\\\"file-upload\\\" class=\\\"custom-file-upload custom-upload-form-projectlist\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/request/requests.template.html\n// module id = 859\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"approval\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-approvals\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> APPROVALS\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Approvals</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\">\\n          <div class=\\\"box-header with-border\\\">\\n            <!-- <div class=\\\"btn-group\\\">\\n              <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button>\\n              <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"addTask()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddTask\\\">\\n                <i class=\\\"fa fa-plus\\\"></i>&nbsp;Add</button>\\n              <button [disabled]=\\\"this.seltasks.length == 0\\\" (click)=\\\"openTask(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-undo\\\"></i>&nbsp;Reopen</button>\\n              <button [disabled]=\\\"this.seltasks.length == 0\\\" (click)=\\\"closeTask(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-times\\\"></i>&nbsp;Close</button>\\n              <button [disabled]=\\\"this.seltasks.length == 0\\\" (click)=\\\"deleteTask(null)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\">\\n                <i class=\\\"fa fa-trash-o\\\"></i>&nbsp;Delete</button>\\n            </div> -->\\n            <div class=\\\"box-tools pull-right\\\">\\n              <div class=\\\"has-feedback\\\">\\n                <input type=\\\"text\\\" class=\\\"form-control input-sm\\\" placeholder=\\\"Search\\\" [(ngModel)]=\\\"search\\\">\\n                <span class=\\\"glyphicon glyphicon-search form-control-feedback\\\"></span>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"table-responsive tasks-messages\\\">\\n              <div class=\\\"nav-tabs-custom\\\">\\n                <div class=\\\"pull-right\\\">\\n                  <!-- {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) > (tasks | filter : search | filterfield :\\n                  { pos : posState, text : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos\\n                  : posOrder, desc : orderDesc }).length ? (tasks | filter : search | filterfield : { pos : posState, text\\n                  : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos : posOrder, desc : orderDesc\\n                  }).length : (limitpage * currentpage) }} / {{ (tasks | filter : search | filterfield : { pos : posState,\\n                  text : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos : posOrder, desc\\n                  : orderDesc }).length }} -->\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(0)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                      title=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(1)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                      title=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n                <ul class=\\\"nav nav-tabs\\\">\\n                  <li class=\\\"active\\\">\\n                    <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['New','Viewed','Accepted','Develop','Test','Completed','Closed','Backlog'])\\\">All</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['New','Viewed','Accepted','Develop'])\\\">Active</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Test'])\\\">Testing</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_4\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Completed'])\\\">Completed</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_4\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Improved'])\\\">Improving</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Outstanding'])\\\">Favorite</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Deleted'])\\\">Deleted</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Closed'])\\\">Closed</a>\\n                  </li>\\n                  <li>\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['Backlog'])\\\">Backlog</a>\\n                  </li>\\n                </ul>\\n                <ul class=\\\"nav nav-tabs\\\">\\n                  <li class=\\\"active\\\">\\n                    <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('')\\\">All</a>\\n                  </li>\\n                  <li *ngFor=\\\"let gr of groups\\\">\\n                    <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList([gr.grop_id+''])\\\">{{gr.grop_name}}</a>\\n                  </li>\\n                </ul>\\n              </div>\\n              <table id=\\\"results\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                <thead>\\n                  <tr>\\n                    <th (click)=\\\"selectAll()\\\">\\n                      <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                      <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    </th>\\n                    <th></th>\\n                    <th (click)=\\\"setOrder('task_date')\\\" style=\\\"width: 100px;\\\">Date\\n                      <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_id')\\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('creator')\\\">Created By\\n                      <span [hidden]=\\\"posOrder !== 'creator'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('asigned')\\\">Assigned To\\n                      <span [hidden]=\\\"posOrder !== 'asigned'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\">▼</span>\\n                        <span [hidden]=\\\"orderDesc\\\">▲</span>\\n                      </span>\\n                    </th>\\n                    <th>Subject</th>\\n                    <th style=\\\"width: 150px;\\\">Actions</th>\\n                  </tr>\\n                </thead>\\n                <tbody id=\\\"main-table-tasks\\\">\\n                  <tr *ngFor=\\\"let tk of tasks | filter : search | filterfield : { pos : posState, text : textState } | filterfield : { pos : posGroup, text : textGroup} | paginate : { currp : currentpage, limit : limitpage} | order : { pos : posOrder, desc : orderDesc }\\\"\\n                    [ngStyle]=\\\"tk.para_status == 42 ? { 'background': 'rgba(255, 0, 0, 0.13)' } : tk.para_status == 43 ? { 'background': '#c0c0bf' } : {}\\\">\\n                    <td>\\n                      <div class=\\\"ui-g\\\">\\n                        <p-checkbox id=\\\"listask\\\" name=\\\"listask\\\" value=\\\"{{tk.task_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\"></p-checkbox>\\n                      </div>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tkst_name == 'New' ? 'bold' : 'normal' }\\\" (click)=\\\"outstanding(tk)\\\">\\n                        <i id=\\\"star{{tk.task_id}}\\\" class=\\\"fa fa-star{{ tk.outst == '1' ? '' : '-o'}} text-yellow\\\"></i>\\n                      </a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.task_date) }}</a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.task_id) }}</a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.creator) }}</a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.asigned) }}</a>\\n                    </td>\\n                    <td>\\n                      <a [ngStyle]=\\\"{'font-weight': tk.tsst_name == 'New' ? 'bold' : 'normal' }\\\" [routerLink]=\\\"['/task', tk.task_id]\\\">{{ escapeHtml(tk.task_subject) }}</a>\\n                    </td>\\n                    <td>\\n                      <div class=\\\"btn-group\\\">\\n                        <button type=\\\"button\\\" (click)=\\\"showModal(tk)\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                          title=\\\"Quick View\\\">\\n                          <i class=\\\"fa fa-eye\\\"></i>\\n                        </button>\\n                        <button type=\\\"button\\\" (click)=\\\"showEditModal(tk)\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                          title=\\\"Edit\\\">\\n                          <i class=\\\"fa fa-pencil-square-o\\\"></i>\\n                        </button>\\n                        <button (click)=\\\"acceptTask(tk)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\"\\n                          data-container=\\\"body\\\" title=\\\"Accept\\\">\\n                          <i class=\\\"fa fa-check\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"tk.para_status != 43\\\" (click)=\\\"deleteTask(tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" data-toggle=\\\"tooltip\\\"\\n                          data-container=\\\"body\\\" title=\\\"Delete\\\">\\n                          <i class=\\\"fa fa-trash-o\\\"></i>\\n                        </button>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div class=\\\"box-footer no-padding\\\">\\n              <div class=\\\"contacts-controls\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"reload()\\\">\\n                  <i class=\\\"fa fa-refresh\\\"></i>\\n                </button>\\n                <div class=\\\"pull-right\\\">\\n                  {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) > (tasks | filter : search | filterfield :\\n                  { pos : posState, text : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos\\n                  : posOrder, desc : orderDesc }).length ? (tasks | filter : search | filterfield : { pos : posState, text\\n                  : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos : posOrder, desc : orderDesc\\n                  }).length : (limitpage * currentpage) }} / {{ (tasks | filter : search | filterfield : { pos : posState,\\n                  text : textState } | filterfield : { pos : posGroup, text : textGroup } | order : { pos : posOrder, desc\\n                  : orderDesc }).length }}\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(0)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                      title=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\"></i>\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(1)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                      title=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/approval/approvals.template.html\n// module id = 860\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"projectboard\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px; min-height:600px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-projectboard\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> PROJECTBOARD\\n      <small style=\\\"font-size:15px;\\\">Main Control</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Projectboard</li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\" style=\\\"min-height:100%;\\\">\\n    <div class=\\\"row\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"table-responsive\\\" style=\\\"padding-bottom:30px;max-height:none!important;\\\">\\n                    <div style=\\\"margin-bottom:15px; width:100%; height:1050; padding:5px;\\\">\\n                        <!--PLANNING-->\\n                        <div class=\\\"table-column-projectboard pull-left\\\">\\n                            <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                    <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                        <h3 class=\\\"box-title\\\">\\n                                            <i class=\\\"sq sq-planning\\\"></i> Planning</h3>\\n                                    </div>\\n                                    <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                         <!-- {{ round(sumx(pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' }, \\\"36\\\"),2) }} pts -->\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div id=\\\"planningx\\\" class=\\\"table-body pull-left box-solid pending\\\" style=\\\"width:100%;height:90%;\\\">\\n                                <div *ngFor=\\\"let pla of myprojects.planning\\\">\\n                                    <div class=\\\"box taskboard-tile box-solid pending table-element taskboard-tile-{{pla.labelx}}\\\" style=\\\"list-style-type: none; margin-left: 10px;\\\">\\n                                        <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{pla.labelbackgroundx}} taskboard-box-radius-{{pla.labelx}}\\\">\\n                                            <div class=\\\"c100 p{{pla.proj_percentage}} xsmall\\\">\\n                                                <span (click)=\\\"showProject(pla.proj_id)\\\" class=\\\"percentage-{{pla.labelx}}\\\" style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{pla.proj_percentage}}%</span>\\n                                                <div class=\\\"slice\\\">\\n                                                    <div class=\\\"{{pla.labelx}} bar\\\"></div>\\n                                                    <div class=\\\"{{pla.labelx}} fill\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-header task-tile-header-projects with-border\\\" >\\n                                            <h3 class=\\\"box-title\\\"> \\n                                                <span (click)=\\\"showProject(pla.proj_id)\\\" style=\\\"cursor: pointer;\\\">\\n                                                    <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                    {{pla.proj_id + \\\" \\\" + pla.prod_name}}\\n                                                </span>\\n                                            </h3>\\n                                        </div>\\n                                        <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(pla.proj_id) }\\\" style=\\\"height:1975x;float:left;min-width: 220px;\\\">\\n                                            <div class=\\\"row infotask\\\">\\n                                            \\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description taskdescr no-padding\\\"\\n                                                [innerHTML]=\\\"pla.proj_subject\\\"></div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                            style=\\\"height:20px!important;\\\">Group:{{\\\" \\\"+pla.grop_name}}\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\" style=\\\"border-top: solid 2px white;height: 100%;\\\">\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div *ngFor=\\\"let pla of myprojects.planning\\\">\\n                                    <projectview [myProjectId]=\\\"pla.proj_id\\\"></projectview>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!-- END PLANNING-->\\n                        <!--BUILD UP-->\\n                        <div class=\\\"table-column-projectboard pull-left\\\">\\n                        <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                    <h3 class=\\\"box-title\\\">\\n                                        <i class=\\\"sq sq-buildup\\\"></i> Build Up</h3>\\n                                </div>\\n                                <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                        <!-- {{ round(sumx(pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' }, \\\"36\\\"),2) }} pts -->\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div id=\\\"buildupx\\\" class=\\\"table-body pull-left box-solid pending\\\" style=\\\"width:100%;height:90%;\\\">\\n                            <div *ngFor=\\\"let bui of myprojects.buildup\\\">\\n                                <div class=\\\"box taskboard-tile taskboard-tile-{{bui.labelx}} box-solid pending table-element\\\" style=\\\"list-style-type: none; margin-left: 10px;\\\">\\n                                    <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{bui.labelbackgroundx}} taskboard-box-radius-{{bui.labelx}}\\\">\\n                                        <div class=\\\"c100 p{{bui.proj_percentage}} xsmall\\\">\\n                                            <span (click)=\\\"showProject(bui.proj_id)\\\" class=\\\"percentage-{{bui.labelx}}\\\" style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{bui.proj_percentage}}%</span>\\n                                            <div class=\\\"slice\\\">\\n                                                <div class=\\\"{{bui.labelx}} bar\\\"></div>\\n                                                <div class=\\\"{{bui.labelx}} fill\\\"></div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-header task-tile-header-projects with-border\\\" >\\n                                        <h3 class=\\\"box-title\\\"> \\n                                            <span (click)=\\\"showProject(bui.proj_id)\\\" style=\\\"cursor: pointer;\\\">\\n                                                <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                {{bui.proj_id  + \\\" \\\" + bui.prod_name}}\\n                                            </span>\\n                                        </h3>\\n                                        <div class=\\\"box-tools pull-right\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <button id=\\\"settings-buildup-projectboard\\\" type=\\\"button\\\"\\n                                                        class=\\\"btn btn-xs task-btn-default dropdown-toggle\\\"\\n                                                        data-toggle=\\\"dropdown\\\"\\n                                                        aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\n                                                        style=\\\"background-color:transparent;\\\">\\n                                                    <i class=\\\"sq sq-setup\\\"></i>\\n                                                </button>\\n                                                <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                    <li>\\n                                                        <a id=\\\"blptoimpl-projectboard\\\" style=\\\"color: #333;\\\" (click)=\\\"setStatusproject(bui, 7)\\\">\\n                                                          <i class=\\\"sq sq-implementation\\\"></i> Move to Implementation</a>\\n                                                      </li>\\n                                                </ul>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                    <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(bui.proj_id) }\\\" style=\\\"height:1975x;float:left;min-width: 220px;\\\">\\n                                        <div class=\\\"row infotask\\\">\\n                                        \\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description projdescr no-padding\\\"\\n                                            [innerHTML]=\\\"bui.proj_subject\\\"></div>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                        style=\\\"height:20px!important;\\\">Group:{{\\\" \\\"+bui.grop_name}}\\n                                                </div>\\n                                            </div>\\n                                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\" style=\\\"border-top: solid 2px white;height: 100%;\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                    style=\\\"height:20px!important;font-weight: bold;\\\">Work team\\n                                                    </div>\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                        <div class=\\\"content-asignedlist\\\">\\n                                                            <div class=\\\"modal-body\\\" style=\\\"padding:0px;\\\">\\n                                                                <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                                                                    <div class=\\\"nav-tabs-custom-pjb\\\" style=\\\"overflow-x: scroll;\\\">\\n                                                                        <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                                                            <li *ngFor=\\\"let tm of bui.asignedlist\\\">\\n                                                                              <div tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.asigned}}\\\" class=\\\"icon-asignedlist\\\">\\n                                                                                <img [src]=\\\"tm.urlimg\\\"\\n                                                                                    onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                    style=\\\"padding: 0px; width:29px;height:29px;border-radius: 50%;\\\"\\n                                                                                    class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                                                              </div>\\n                                                                            </li>\\n                                                                        </ul>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div *ngFor=\\\"let bui of myprojects.buildup\\\">\\n                                <projectview [myProjectId]=\\\"bui.proj_id\\\"></projectview>\\n                            </div>\\n                        </div>\\n                        </div>\\n                        <!-- END BUILD UP-->\\n                        <!--IMPLEMENTATION-->\\n                        <div class=\\\"table-column-projectboard pull-left\\\">\\n                            <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                    <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                        <h3 class=\\\"box-title\\\">\\n                                            <i class=\\\"sq sq-implementation\\\"></i> Implementation</h3>\\n                                    </div>\\n                                    <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                            <!-- {{ round(sumx(pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' }, \\\"36\\\"),2) }} pts -->\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div id=\\\"implementationx\\\" class=\\\"table-body pull-left box-solid pending\\\" style=\\\"width:100%;height:90%;\\\">\\n                                <div *ngFor=\\\"let imp of myprojects.implementation\\\">\\n                                    <div class=\\\"box taskboard-tile taskboard-tile-{{imp.labelx}} box-solid pending table-element\\\" style=\\\"list-style-type: none; margin-left: 10px;\\\">\\n                                        <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{imp.labelbackgroundx}} taskboard-box-radius-{{imp.labelx}}\\\">\\n                                            <div class=\\\"c100 p{{imp.proj_percentage}} xsmall\\\">\\n                                                <span (click)=\\\"showProject(imp.proj_id)\\\" class=\\\"percentage-{{imp.labelx}}\\\" style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{imp.proj_percentage}}%</span>\\n                                                <div class=\\\"slice\\\">\\n                                                    <div class=\\\"{{imp.labelx}} bar\\\"></div>\\n                                                    <div class=\\\"{{imp.labelx}} fill\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-header task-tile-header-projects with-border\\\" >\\n                                            <h3 class=\\\"box-title\\\"> \\n                                                <span (click)=\\\"showProject(imp.proj_id)\\\" style=\\\"cursor: pointer;\\\">\\n                                                    <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                    {{imp.proj_id  + \\\" \\\" + imp.prod_name}}\\n                                                </span>\\n                                            </h3>\\n                                            <div class=\\\"box-tools pull-right\\\">\\n                                                <div class=\\\"btn-group\\\">\\n                                                    <button id=\\\"settings-implementation-projectboard\\\" type=\\\"button\\\"\\n                                                            class=\\\"btn btn-xs task-btn-default dropdown-toggle\\\"\\n                                                            data-toggle=\\\"dropdown\\\"\\n                                                            aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\n                                                            style=\\\"background-color:transparent;\\\">\\n                                                        <i class=\\\"sq sq-setup\\\"></i>\\n                                                    </button>\\n                                                    <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                        <li>\\n                                                            <a id=\\\"imptobui-projectboard\\\" style=\\\"color: #333;\\\" (click)=\\\"setStatusproject(imp, 2)\\\">\\n                                                              <i class=\\\"sq sq-buildup\\\"></i> Move to Build up</a>\\n                                                        </li>\\n                                                    </ul>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(imp.proj_id) }\\\" style=\\\"height:1975x;float:left;min-width: 220px;\\\">\\n                                            <div class=\\\"row infotask\\\">\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description projdescr no-padding\\\"\\n                                                [innerHTML]=\\\"imp.proj_subject\\\"></div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                            style=\\\"height:20px!important;\\\">Group:{{\\\" \\\"+imp.grop_name}}\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\" style=\\\"border-top: solid 2px white;height: 100%;\\\">\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                        style=\\\"height:20px!important;font-weight: bold;\\\">Work team\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                            <div class=\\\"content-asignedlist\\\">\\n                                                                <div class=\\\"modal-body\\\" style=\\\"padding:0px;\\\">\\n                                                                    <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                                                                        <div class=\\\"nav-tabs-custom-pjb\\\" style=\\\"overflow-x: scroll;\\\">\\n                                                                            <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                                                                <li *ngFor=\\\"let tm of imp.asignedlist\\\">\\n                                                                                  <div tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.asigned}}\\\" class=\\\"icon-asignedlist\\\">\\n                                                                                    <img [src]=\\\"tm.urlimg\\\"\\n                                                                                        onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                        style=\\\"padding: 0px; width:29px;height:29px;border-radius: 50%;\\\"\\n                                                                                        class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                                                                  </div>\\n                                                                                </li>\\n                                                                            </ul>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div *ngFor=\\\"let imp of myprojects.implementation\\\">\\n                                    <projectview [myProjectId]=\\\"imp.proj_id\\\"></projectview>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!-- END IMPLEMENTATION-->\\n                        <!--CLOSE UP-->\\n                        <div class=\\\"table-column-projectboard pull-left\\\">\\n                            <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"padding: 10px 10px 13px 10px;\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 no-padding\\\">\\n                                    <div class=\\\"col-md-8 pull-left no-padding\\\">\\n                                        <h3 class=\\\"box-title\\\">\\n                                            <i class=\\\"sq sq-closeup\\\"></i> Close up</h3>\\n                                    </div>\\n                                    <div class=\\\"pull-right\\\" style=\\\"right:50px; top:10px; text-align:right;font-weight: bold;color: #FFFFFF;\\\">\\n                                            <!-- {{ round(sumx(pending | filterfield : { pos: posProduct, text: selectedProduct } | filterfield : { pos : 'proj_id', text : selectedprojects } | filterfield : { pos : posState, text : selectedUsers, or : byme ? myUsers : [], orfield : 'user_creator' }, \\\"36\\\"),2) }} pts -->\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div id=\\\"closeupx\\\" class=\\\"table-body pull-left box-solid pending\\\" style=\\\"width:100%;height:90%;\\\">\\n                                <div *ngFor=\\\"let clo of myprojects.closeup\\\">\\n                                    <div class=\\\"box taskboard-tile taskboard-tile-{{clo.labelx}} box-solid pending table-element\\\" style=\\\"list-style-type: none; margin-left: 10px;\\\">\\n                                        <div class=\\\"project-box-radius taskboard-box-radius taskboard-box-radius-{{clo.labelbackgroundx}} taskboard-box-radius-{{clo.labelx}}\\\">\\n                                            <div class=\\\"c100 p{{clo.proj_percentage}} xsmall\\\">\\n                                                <span (click)=\\\"showProject(clo.proj_id)\\\" class=\\\"percentage-{{clo.labelx}}\\\" style=\\\"color: #fff; font-weight: bold; cursor: pointer;\\\">{{clo.proj_percentage}}%</span>\\n                                                <div class=\\\"slice\\\">\\n                                                    <div class=\\\"{{clo.labelx}} bar\\\"></div>\\n                                                    <div class=\\\"{{clo.labelx}} fill\\\"></div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-header task-tile-header-projects with-border\\\" >\\n                                            <h3 class=\\\"box-title\\\"> \\n                                                <span (click)=\\\"showProject(clo.proj_id)\\\" style=\\\"cursor: pointer;\\\">\\n                                                    <i class=\\\"sq sq-projects\\\" style=\\\"margin-right: 5px;font-size: 12px;\\\"></i>\\n                                                    {{clo.proj_id  + \\\" \\\" + clo.prod_name}}\\n                                                </span>\\n                                            </h3>\\n                                            <div class=\\\"box-tools pull-right\\\">\\n                                                <div class=\\\"btn-group\\\">\\n                                                    <button id=\\\"settings-planning-projectboard\\\" type=\\\"button\\\"\\n                                                            class=\\\"btn btn-xs task-btn-default dropdown-toggle\\\"\\n                                                            data-toggle=\\\"dropdown\\\"\\n                                                            aria-haspopup=\\\"true\\\" aria-expanded=\\\"false\\\"\\n                                                            style=\\\"background-color:transparent;\\\">\\n                                                      <i class=\\\"sq sq-setup\\\"></i>\\n                                                    </button>\\n                                                    <ul class=\\\"dropdown-menu dropdown-menu-right-tb\\\">\\n                                                        <li>\\n                                                          <a id=\\\"cptobui-projectboard\\\" style=\\\"color: #333;\\\" (click)=\\\"setStatusproject(clo, 3)\\\">\\n                                                            <i class=\\\"sq sq-archivar\\\"></i> Close</a>\\n                                                        </li>\\n                                                    </ul>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                        <div class=\\\"box-body\\\" [ngStyle]=\\\"{'background-color': getBackground(clo.proj_id) }\\\" style=\\\"height:1975x;float:left;min-width: 220px;\\\">\\n                                            <div class=\\\"row infotask\\\">\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-description projdescr no-padding\\\"\\n                                                [innerHTML]=\\\"clo.proj_subject\\\"></div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 task-delivery no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                            style=\\\"height:20px!important;\\\">Group:{{\\\" \\\"+clo.grop_name}}\\n                                                    </div>\\n                                                </div>\\n                                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 infotagusers no-padding\\\">\\n                                                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\" style=\\\"border-top: solid 2px white;height: 100%;\\\">\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 no-padding\\\"\\n                                                        style=\\\"height:20px!important;font-weight: bold;\\\">Work team\\n                                                        </div>\\n                                                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                                                            <div class=\\\"content-asignedlist\\\">\\n                                                                <div class=\\\"modal-body\\\" style=\\\"padding:0px;\\\">\\n                                                                    <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                                                                        <div class=\\\"nav-tabs-custom-pjb\\\" style=\\\"overflow-x: scroll;\\\">\\n                                                                            <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                                                                                <li *ngFor=\\\"let tm of clo.asignedlist\\\">\\n                                                                                  <div tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.asigned}}\\\" class=\\\"icon-asignedlist\\\">\\n                                                                                    <img [src]=\\\"tm.urlimg\\\"\\n                                                                                        onError=\\\"this.src='img/logo_menu_min.svg'\\\"\\n                                                                                        style=\\\"padding: 0px; width:29px;height:29px;border-radius: 50%;\\\"\\n                                                                                        class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                                                                                  </div>\\n                                                                                </li>\\n                                                                            </ul>\\n                                                                        </div>\\n                                                                    </div>\\n                                                                </div>\\n                                                            </div>\\n                                                        </div>\\n                                                    </div>\\n                                                </div>\\n                                            </div>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                                <div *ngFor=\\\"let clo of myprojects.closeup\\\">\\n                                    <projectview [myProjectId]=\\\"clo.proj_id\\\"></projectview>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <!-- END CLOSE UP-->\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n  </section>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\\n\\n<div>\\n  <div class=\\\"modal fade modal-squadlinx\\\" id=\\\"project-budget\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"width:800px;\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button id=\\\"close-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"closeDaily()\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"font-weight: bolder;\\\">Project Budget</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\" style=\\\"height:475px;\\\">\\n          <div class=\\\"col-md-3\\\">\\n            <div class=\\\"col-md-12 tab-squadlinx selected\\\" (click)=\\\"changeBudget('fixed')\\\">Fixed Costs</div>\\n            <div class=\\\"col-md-12 tab-squadlinx\\\" (click)=\\\"changeBudget('variable')\\\">Variable Costs</div>\\n          </div>\\n          <div class=\\\"col-md-9\\\">\\n            <div class=\\\"tab-content\\\">\\n              <div id=\\\"project-budget\\\" class=\\\"tab-pane fade in active col-md-12\\\" style=\\\"border:1px solid #CCD7DD;border-radius: 15px;\\\">\\n                <div *ngIf=\\\"curBudget == 'fixed'\\\" class=\\\"row\\\" style=\\\"padding-top:35px;padding-bottom:20px;min-height: 275px;\\\">\\n                  <div class=\\\"col-xs-8 col-md-8 col-lg-8\\\">\\n                    <table class=\\\"squadlinx-embed-table\\\">\\n                      <thead>\\n                        <td>Item</td>\\n                        <td>Cost</td>\\n                      </thead>\\n                      <tbody *ngIf=\\\"costreport && costreport.length > 0 && fixedreport.length > 0 && curBudget == 'fixed'\\\">\\n                        <tr *ngFor = \\\"let cost of fixedreport\\\">\\n                          <td>{{cost.pjbu_itemdesc}}</td>\\n                          <td>$ {{cost.cost}}</td>\\n                        </tr>\\n                      </tbody>\\n                      <tbody *ngIf=\\\"fixedreport.length == 0 && curBudget == 'fixed'\\\">\\n                        <tr>\\n                          <td>No Items</td>\\n                          <td>0</td>\\n                        </tr>\\n                      </tbody>\\n                    </table>\\n                  </div>\\n                  <div class=\\\"col-xs-4 col-md-4 col-lg-4 no-padding\\\" style=\\\"padding-top:15%!important;\\\">\\n                    <label style=\\\"color:#0FB4FF;text-align: center;font-size:24px;width: 100%;\\\">$ {{totalfixedmoney}}</label>\\n                    <label style=\\\"color:#006ec6;text-align: center;width: 100%;\\\">Total Fixed Costs</label>\\n                    <div class=\\\"col-md-12\\\">\\n                      <div class=\\\"button-round-squadlinx\\\" style=\\\"margin:0 auto;\\\" (click)=\\\"showAddMenu(true)\\\"><i class=\\\"sq sq-add\\\"></i></div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"curBudget == 'variable'\\\" class=\\\"row\\\" style=\\\"padding-top:35px;padding-bottom:20px;min-height: 275px;\\\">\\n                  <div class=\\\"col-xs-8 col-md-8 col-lg-8\\\">\\n                    <table class=\\\"squadlinx-embed-table\\\">\\n                      <thead>\\n                        <td>Item</td>\\n                        <td>Cost</td>\\n                      </thead>\\n                      <tbody *ngIf=\\\"costreport && costreport.length > 0 && variablereport.length > 0 && curBudget == 'variable'\\\">\\n                        <tr *ngFor = \\\"let cost of variablereport\\\">\\n                          <td>{{cost.pjbu_itemdesc}}</td>\\n                          <td>$ {{cost.cost}}</td>\\n                        </tr>\\n                      </tbody>\\n                      <tbody *ngIf=\\\"variablereport.length == 0 && curBudget == 'variable'\\\">\\n                        <tr>\\n                          <td>No Items</td>\\n                          <td>0</td>\\n                        </tr>\\n                      </tbody>\\n                    </table>\\n                  </div>\\n                  <div class=\\\"col-xs-4 col-md-4 col-lg-4 no-padding\\\" style=\\\"padding-top:15%!important;\\\">\\n                    <label style=\\\"color:#0FB4FF;text-align: center;font-size:24px;width: 100%;\\\">$ {{totalvariablemoney}}</label>\\n                    <label style=\\\"color:#006ec6;text-align: center;width: 100%;\\\">Total Variable Costs</label>\\n                    <div class=\\\"col-md-12\\\">\\n                      <div class=\\\"button-round-squadlinx\\\" style=\\\"margin:0 auto;\\\"><i class=\\\"sq sq-add\\\"></i></div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div *ngIf=\\\"showAddItem\\\" class=\\\"col-md-12 no-padding\\\">\\n            <div id=\\\"add-budget-item\\\" class=\\\"tab-pane fade in active col-md-12 no-padding\\\" style=\\\"border:1px solid #CCD7DD;border-radius: 15px;margin-top:20px;margin-bottom:20px;\\\">\\n              <div class=\\\"row no-padding\\\" style=\\\"padding-top:10px;padding-bottom:10px;height:135px;margin:10px;\\\">\\n                <div class=\\\"col-md-3 no-padding\\\" style=\\\"color:#829198;\\\">\\n                  <div class=\\\"pull-left col-md-12\\\">\\n                    <label style=\\\"font-size:16px;\\\">Item Description</label>\\n                  </div>\\n                  <div class=\\\"pull-left col-md-12\\\">\\n                    <textarea class=\\\"textarea-squadlinx\\\" [(ngModel)]=\\\"newItem.itemdescription\\\" placeholder=\\\"Description\\\" style=\\\"resize: none;height:75px;\\\"></textarea>\\n                  </div>\\n                </div>\\n                <div class=\\\"col-md-7 no-padding pull-left\\\" style=\\\"color:#829198;height: 65px;margin-bottom:10px;margin-left:20px;\\\">\\n                  <div class=\\\"col-md-6 no-padding\\\" style=\\\"color:#829198;\\\">\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <label style=\\\"font-size:16px;\\\">Cost Type</label>\\n                    </div>\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <p-dropdown class=\\\"ui-g ui-fluid dropdown-squadlinx\\\" [autoWidth]=\\\"false\\\" [options]=\\\"costtypes\\\" [(ngModel)]=\\\"costtypeSelected\\\" placeholder=\\\"Select a Type\\\" (onChange)=\\\"updateUnits(costtypeSelected)\\\"></p-dropdown>\\n                    </div>\\n                  </div>\\n                  <div *ngIf=\\\"costtypeSelected == 'total'\\\" class=\\\"col-md-2 no-padding pull-right\\\" style=\\\"color:#829198;\\\">\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <label style=\\\"font-size:16px;\\\">Total Cost</label>\\n                    </div>\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <input class=\\\"input-squadlinx\\\" type=\\\"number\\\" step=\\\".1\\\" [(ngModel)]=\\\"newItem.totalcost\\\" style=\\\"width:125px;\\\" placeholder=\\\"Total Cost\\\">\\n                    </div>\\n                  </div>\\n                  <div *ngIf=\\\"units && units.length > 0 && costtypeSelected == 'unit'\\\" class=\\\"col-md-6 no-padding\\\" style=\\\"color:#829198;\\\">\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <label style=\\\"font-size:16px;\\\">Unit Type</label>\\n                    </div>\\n                    <div class=\\\"pull-left col-md-12\\\">\\n                      <p-dropdown class=\\\"ui-g ui-fluid dropdown-squadlinx\\\" [autoWidth]=\\\"false\\\" [options]=\\\"units\\\" [(ngModel)]=\\\"unitSelected\\\" placeholder=\\\"Select a Type\\\" (onChange)=\\\"displayUnits(unitSelected)\\\" ></p-dropdown>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div *ngIf=\\\"costDisplayed != {} && unitSelected != '' && unitSelected && costtypeSelected == 'unit'\\\" class=\\\"col-md-7 no-padding pull-left\\\" style=\\\"height:65px;color:#829198;\\\">\\n                  <div class=\\\"col-md-4\\\">\\n                    <input class=\\\"input-squadlinx\\\" type=\\\"number\\\" step=\\\".1\\\" [(ngModel)]=\\\"newItem.unitcost\\\" style=\\\"width:125px;\\\" placeholder=\\\"{{costDisplayed.title}}\\\">\\n                  </div>\\n                  <div class=\\\"col-md-4\\\">\\n                    <input class=\\\"input-squadlinx\\\" type=\\\"number\\\" step=\\\".1\\\" [(ngModel)]=\\\"newItem.totalmeasure\\\" style=\\\"width:125px;\\\" placeholder=\\\"{{costDisplayed.measure}}\\\">\\n                  </div>\\n                  <div class=\\\"col-md-4\\\">\\n                    <input class=\\\"input-squadlinx\\\" type=\\\"number\\\" step=\\\".1\\\" [(ngModel)]=\\\"newItem.totalunits\\\" style=\\\"width:125px;\\\" placeholder=\\\"{{costDisplayed.units}}\\\">\\n                  </div>\\n                </div>\\n                \\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\" style=\\\"color:#006ec6;font-weight: bolder;font-size: 18px;\\\">Total Cost <span style=\\\"color:#0FB4FF;\\\"> $ {{totalcost}}</span> <span style=\\\"color:#CCD7DD;font-size:14px;\\\">/ Estimated Budget $ 25'000.000,00</span></div>\\n          <button id=\\\"close2-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mcTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveDaily(day, mcT.task_id)\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n</div>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/projectboard/projectboard.template.html\n// module id = 861\n// module chunks = 0","module.exports = \"\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/statics/static.template.html\n// module id = 862\n// module chunks = 0","module.exports = \"<!-- <my-header></my-header> -->\\n<section id=\\\"dashboard\\\"  style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <!-- Main content -->\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-md-8 col-lg-9\\\">\\n        <div class=\\\"box \\\">\\n          <div class=\\\"box-body\\\">\\n            <p-chart type=\\\"line\\\" [data]=\\\"burndownData\\\" height=\\\"200\\\"></p-chart>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  \\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/dashboard/burndown.template.html\n// module id = 863\n// module chunks = 0","module.exports = \"<div class=\\\"fondo\\\" [ngStyle]=\\\"myLoginStyle\\\" *ngIf=\\\"codeConfirmed==false\\\">\\n  <div class=\\\"col-md-5 col-lg-7\\\">\\n    \\n  </div>\\n  <div id = \\\"poweredSqlx\\\" style=\\\"bottom: 7%; left: 40%; position: absolute;\\\">\\n    <img src=\\\"img/powered_white.svg\\\" style=\\\"height: 45px;\\\">\\n  </div>\\n\\n  <div id=\\\"pwrecovery-nx\\\">\\n      <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;\\\">\\n        <img src=\\\"img/{{ mainLogoW }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto; max-width: 450px;\\n        height: auto;\\\">\\n      </div>\\n  \\n      <div id=\\\"email-validate\\\" *ngIf=\\\"validated == false\\\">\\n        <div class=\\\"form-group has-feedback\\\">\\n          <input  type=\\\"text\\\" autocomplete=\\\"off\\\" id=\\\"user\\\" name=\\\"user\\\" [(ngModel)]=\\\"email\\\" placeholder=\\\"&#xF007; email\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent;color:#ffffff; outline: none;\\\">\\n        </div>\\n        <!-- <div class=\\\"form-group has-feedback\\\">\\n          <input type=\\\"password\\\" autocomplete=\\\"off\\\" id=\\\"pwd\\\" name=\\\"pwd\\\" [(ngModel)]=\\\"log.pwd\\\" placeholder=\\\"Password\\\"\\n          placeholder=\\\"&#xF023;\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent;\\\">\\n        </div> -->\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <button (click)=\\\"validateEmail(email)\\\" class=\\\"btn-login\\\" [disabled]=\\\"email==null|| email==''\\\">\\n              Reset Password\\n            </button>\\n          </div>\\n        </div>\\n\\n        <div class=\\\"row\\\" style=\\\"padding-top: 20px;text-align:center;\\\">\\n          <div style=\\\"color:#ffffff;\\\"><span>Return to <a id=\\\"forgot-link\\\"  href=\\\"{{loginScreen}}\\\" style=\\\"font-weight:bolder;color:rgb(88, 199, 232);text-decoration:none;\\\">LOGIN</a> page.</span></div>\\n        </div>\\n        <!-- <div class=\\\"row\\\" style=\\\"text-align: center;\\\">\\n            <a href=\\\"#\\\">I forgot my password</a>\\n        </div> -->              \\n      </div>\\n      <div id=\\\"pin-code\\\" *ngIf=\\\"validated == true\\\">\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" style=\\\"margin-right:15px;\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" style=\\\"margin-left:15px;\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" (keyup)=\\\"changeFocus($event)\\\">\\n            <input class=\\\"pin-code-pad\\\" autocomplete=\\\"off\\\" type=\\\"number\\\" min=\\\"0\\\" max=\\\"1\\\" onclick=\\\"this.select()\\\" (keyup)=\\\"changeFocus($event)\\\">\\n          </div>\\n        </div>\\n\\n        <div class=\\\"row\\\" style=\\\"margin-top:20px;\\\">\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <button (click)=\\\"resetPassword()\\\" class=\\\"btn-login\\\">\\n              Reset Password\\n            </button>\\n          </div>\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;margin-top:20px;\\\">\\n            <button (click)=\\\"validateEmail(email)\\\" class=\\\"btn-login\\\">\\n              Request a new code\\n            </button>\\n          </div>\\n\\n          <div class=\\\"row\\\" style=\\\"margin-top:100px;padding-top: 20px;text-align:center;\\\">\\n            <div style=\\\"color:#ffffff;\\\"><span>Return to <a id=\\\"forgot-link\\\"  href=\\\"{{loginScreen}}\\\" style=\\\"font-weight:bolder;color:rgb(88, 199, 232);text-decoration:none;\\\">LOGIN</a> page.</span></div>\\n          </div>\\n\\n        </div>\\n        \\n      </div>\\n      \\n  </div>\\n</div>\\n\\n<div class=\\\"fondo\\\" [ngStyle]=\\\"myLoginStyle\\\" *ngIf=\\\"codeConfirmed==true\\\">\\n  <div class=\\\"col-md-5 col-lg-7\\\">\\n    \\n  </div>\\n  <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-5\\\" id=\\\"login-rigth\\\">\\n\\n  </div>\\n  <div id=\\\"formPassword\\\" style=\\\"top: 50%; left: 28%; position: absolute;width:300px;\\\">\\n      <div class=\\\"row\\\">\\n          <h3 style=\\\"color:#57c7ed\\\">Setup your new password</h3>\\n          <div style=\\\"color:#ffffff;\\\">\\n              Enter a new password for your account. We highly recomment you create a unique password. It must contain:\\n              <br><br>\\n              <ul style=\\\"text-decoration:none;list-style-type:none;padding:0px;\\\">\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('eightchars') >= 0 ? '#55fd55' : 'white' }\\\">At least 8 characters</li>\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('uppercase') >= 0 ? '#55fd55' : 'white' }\\\">At least one uppercase character</li>\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('lowercase') >= 0 ? '#55fd55' : 'white' }\\\">At least one lowercase character</li>\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('number') >= 0 ? '#55fd55' : 'white' }\\\">At least one number</li>\\n                  <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('specialchar') >= 0 ? '#55fd55' : 'white' }\\\">At least one special character</li>\\n              </ul>\\n          </div>\\n      </div>\\n  </div>\\n  <div id=\\\"poweredSqlx2\\\" style=\\\"bottom: 7%; left: 25%; position: absolute;\\\">\\n    <img src=\\\"img/powered_white.svg\\\" style=\\\"height: 45px;\\\">\\n  </div>\\n  <div id=\\\"login-nx\\\">\\n      <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;\\\">\\n        <img src=\\\"img/{{ mainLogo }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto;\\\">\\n      </div>\\n\\n      \\n      <form id=\\\"formLogin\\\" (ngSubmit)=\\\"setNewPassword()\\\">\\n        <div class=\\\"form-group has-feedback\\\">\\n          <input type=\\\"password\\\" autocomplete=\\\"off\\\" id=\\\"pwd1\\\" name=\\\"pwd1\\\" [(ngModel)]=\\\"log.pwd1\\\"\\n          placeholder=\\\"New Password\\\" style=\\\"font-family:Arial, FontAwesome; background-color: transparent; outline: none;\\\" (keyup)=\\\"validateNewPassword(log.pwd1)\\\">\\n        </div>\\n        <div class=\\\"form-group has-feedback\\\">\\n          <input type=\\\"password\\\" autocomplete=\\\"off\\\" id=\\\"pwd2\\\" name=\\\"pwd2\\\" [(ngModel)]=\\\"log.pwd2\\\" placeholder=\\\"Confirm Password\\\"\\n          style=\\\"font-family:Arial, FontAwesome; background-color: transparent; outline: none;\\\">\\n        </div>\\n        <div class=\\\"row\\\">\\n          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n            <button type=\\\"submit\\\" id=\\\"boton_autentico\\\" class=\\\"btn-login\\\">\\n              Save Password\\n            </button>\\n          </div>\\n        </div>\\n        <!-- <div class=\\\"row\\\" style=\\\"text-align: center;\\\">\\n            <a href=\\\"#\\\">I forgot my password</a>\\n        </div> -->\\n      </form>\\n  </div>\\n</div>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/passwordrecovery/passwordrecovery.template.html\n// module id = 864\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"sprints\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n      <h2 style=\\\"font-weight: bold;\\\">\\n          <i style=\\\"color:#007BD2;font-size:20px;\\\"></i>User Settings\\n          <small style=\\\"font-size:15px;\\\">Settings</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n                <li>\\n                    <a routerLink=\\\"/dashboard\\\">\\n                        <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n                </li>\\n                <li class=\\\"active\\\">User Settings</li>\\n        </ol>\\n  </section>\\n  <section class=\\\"content\\\" style=\\\"min-width: 500px;\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary\\\" style=\\\"width:75%;min-height:450px;margin:0 auto;border-radius:25px;border:none;\\\">\\n          <div class=\\\"box-header\\\" style=\\\"background:#006EC6;border-radius: 25px 25px 0px 0px;height:60px;\\\">\\n            <div class=\\\"btn-group pull-right\\\" style=\\\"color:white;font-weight:bold;\\\">\\n              <div class=\\\"pull-rigth no-padding\\\" style=\\\"text-align:right;font-size:20px;\\\" [innerHTML]=\\\"getNameUser(user.user_name,user.user_lastname)\\\"></div>\\n              <div class=\\\"pull-rigth no-padding\\\" style=\\\"text-align:right;\\\">{{user.user_title}}</div>\\n            </div>\\n          </div>\\n          <div class=\\\"box-body\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2 pull-left no-padding\\\" style=\\\"height:80%;margin-top:-65px;\\\">\\n              <div class=\\\"pull-left setting-element container_changeImage\\\">\\n                <div id=\\\"user-profile-picture\\\" class=\\\"container_imageUser\\\" (mouseenter)=\\\"showChangePicture('profile')\\\" (mouseleave)=\\\"showChangePicture('profile')\\\">\\n                  <div style=\\\"height: 100%;width: 100%;background: white;position: relative;\\\">\\n                    <img [src]=\\\"user.urlimg\\\" id=\\\"profile-img\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"width: 100%; vertical-align: baseline; border-radius: 50%;\\\">\\n                    <div id=\\\"change-profile\\\" class=\\\"upload-picture-btn-wrapper icon_customUpload\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\"  name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"onBasicUpload($event,'profile')\\\"></div>\\n                  </div>\\n                </div>\\n                <div>\\n                  <p class=\\\"informativeMessage_sizeImg\\\" id=\\\"informative_message\\\">\\n                    The size of the image cannot be greater than 4 MB\\n                  </p>\\n                </div>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 pull-right\\\" style=\\\"height:80%;padding:0px 10px;\\\">\\n              <ul style=\\\"list-style: none;margin-top:10px;\\\">\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Email:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <input class=\\\"input-user\\\" disabled=\\\"true\\\" [(ngModel)]=\\\"user.user_email\\\">\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Cell Phone:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <int-phone-prefix id =\\\"cphone-usett\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_phone\\\"></int-phone-prefix>\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Work Address:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <input class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_workaddress\\\">\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Work Phone:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <input class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_workphone\\\">\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Home Address:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <input class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_homeaddress\\\">\\n                  </div>\\n                </li>\\n                <li style=\\\"line-height: 2.5em;\\\">\\n                  <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Home Phone:</div>\\n                  <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                    <int-phone-prefix id =\\\"cphone-usett2\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_homephone\\\"></int-phone-prefix>\\n                  </div>\\n                  <li style=\\\"line-height: 2.5em;\\\">\\n                    <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Personal E-Mail:</div>\\n                    <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\">\\n                      <input class=\\\"input-user\\\" [(ngModel)]=\\\"user.user_personalemail\\\">\\n                    </div>\\n                  </li>\\n              </ul>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pull-right no-padding\\\" style=\\\"min-height:100px;position:relative;\\\">\\n                <div class=\\\"btnManageNotifications_usersettings\\\" data-toggle=\\\"modal\\\" data-target=\\\"#customNotifications\\\" (click)=\\\"getPreferences()\\\">Manage Notifications</div>\\n                <div class=\\\"btnChangePassword_usersettings\\\" data-toggle=\\\"modal\\\" data-target=\\\"#changePassword\\\" (click)=\\\"showModalPw()\\\">Change Password</div>\\n                <div class=\\\"btnSaveChanges_usersettings\\\" (click)=\\\"editUser(user)\\\">Save</div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"changePassword\\\" role=\\\"dialog\\\" style=\\\"min-width: 500px;\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\">Change Password</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label>Previous Password</label>\\n            <input type=\\\"password\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"prev_password\\\">\\n          </div>\\n          <div class=\\\"form-group\\\">\\n            <label>New Password</label>\\n            <input type=\\\"password\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"new_password\\\" (keyup)=\\\"validateNewPassword(new_password)\\\">\\n          </div>\\n          <div class=\\\"form-group\\\">\\n            <label>Confirm Password</label>\\n            <input type=\\\"password\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"confirmed_password\\\">\\n          </div>\\n          <ul style=\\\"text-decoration:none;list-style-type:none;padding:0px;\\\">\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('sixchars') >= 0 ? '#006EC6' : 'black' }\\\">At least 6 characters</li>\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('uppercase') >= 0 ? '#006EC6' : 'black' }\\\">At least one uppercase character</li>\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('lowercase') >= 0 ? '#006EC6' : 'black' }\\\">At least one lowercase character</li>\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('number') >= 0 ? '#006EC6' : 'black' }\\\">At least one number</li>\\n            <li [ngStyle]=\\\"{'color': passwordmsg.indexOf('specialchar') >= 0 ? '#006EC6' : 'black' }\\\">At least one special character</li>\\n          </ul>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button type=\\\"button\\\" class=\\\"btn btn-primary\\\" (click)=\\\"saveNewPassword()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"customNotifications\\\" role=\\\"dialog\\\">\\n      <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content-params\\\">\\n          <div class=\\\"modal-header modal-header-info-params\\\" style=\\\"color:#FFFFFF;\\\">\\n            <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                <span aria-hidden=\\\"true\\\" style=\\\"color:#FFFFFF;\\\">&times;</span>\\n              </button>\\n            <h4 class=\\\"modal-title\\\">Custom Notifications</h4>\\n          </div>\\n          <div class=\\\"modal-body\\\" style=\\\"min-height: 100px;\\\">\\n            <div *ngFor=\\\"let ntf of notificationstype\\\" class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\" style=\\\"height:20px;\\\">\\n              <div class=\\\"col-xs-4 col-md-4 col-sm-4 col-lg-4\\\" style=\\\"font-weight: bolder;\\\">{{ntf.name}}</div>\\n              <div class=\\\"col-xs-4 col-md-4 col-sm-4 col-lg-4\\\"><p-checkbox class=\\\"checkbox-squadlinx\\\" name=\\\"email\\\" value=\\\"email|{{ntf.id}}\\\" label=\\\"Email\\\" [(ngModel)]=\\\"userPreferences.email\\\" inputId=\\\"{{ntf.emailnotif}}\\\"></p-checkbox></div>\\n              <div class=\\\"col-xs-4 col-md-4 col-sm-4 col-lg-4\\\"><p-checkbox class=\\\"checkbox-squadlinx\\\" name=\\\"desktop\\\" value=\\\"desktop|{{ntf.id}}\\\" label=\\\"Desktop\\\" [(ngModel)]=\\\"userPreferences.desktop\\\" inputId=\\\"{{ntf.desknotif}}\\\"></p-checkbox></div>\\n            </div>\\n          </div>\\n          <div class=\\\"modal-footer\\\">\\n            <button type=\\\"button\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color:rgb(15, 188, 255);margin-right:42%\\\" class=\\\"btn btn-roles\\\" (click)=\\\"savePreferences()\\\"> Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/usersettings/usersettings.template.html\n// module id = 865\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"requests\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-requests\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> REQUEST PREFERENCES\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Request Preferences</li>\\n    </ol>\\n  </section>\\n  <!-- Main content -->\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n        <div class=\\\"col-md-12\\\">\\n            <h3 style=\\\"font-weight:bold\\\">Rules</h3>\\n        </div>\\n    </div>\\n    <div class=\\\"row\\\" style=\\\"margin-top: 5px; margin-bottom: 5px; margin-right: 5px;\\\">\\n        <div class=\\\"col-md-12\\\">\\n            <div class=\\\"box box-primary2\\\">\\n                <div class=\\\"box-header without-border\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-8 col-md-8\\\" style=\\\"display: inline-flex;margin-bottom: 10px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"showModalRule()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddTask\\\" style=\\\"background-color:rgb(67, 178, 246);\\\">\\n                                    Create Rule</button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" (click)=\\\"showModalRule()\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdAddTask\\\" style=\\\"background-color:rgb(67, 178, 246);\\\">\\n                                    Run All Rules</button>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-4 col-md-4 inputs-mainfilter\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                            <div class=\\\"label-input-mainfilter\\\">\\n                                <input type=\\\"text\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\">\\n                            </div>\\n                            <div class=\\\"search-input-mainfilter\\\" style=\\\"position: absolute; right: 0; top: 2px;\\\">\\n                                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                            </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"box-body\\\" style=\\\"max-height:400px;padding-top:20px;margin-top: 5px;\\\">\\n                    <div class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n        \\n                    <table id=\\\"results\\\" class=\\\"table table-hover\\\">\\n                        <thead>\\n                        <tr style=\\\"color:#707070;\\\">\\n                            <th (click)=\\\"setOrder('type')\\\" style=\\\"min-width: 40px;text-align:center!important;\\\">Request Type\\n                                <span [hidden]=\\\"posOrder !== 'tkstatus'\\\">\\n                                    <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:#707070;\\\">▼</span>\\n                                    <span [hidden]=\\\"orderDesc\\\" style=\\\"color:#707070;\\\">▲</span>\\n                                </span>\\n                            </th>\\n                            <th></th>\\n                            <th (click)=\\\"setOrder('email')\\\" style=\\\"min-width: 40px;text-align:center!important;\\\">Email Account\\n                                <span [hidden]=\\\"posOrder !== 'tkstatus'\\\">\\n                                    <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:#707070;\\\">▼</span>\\n                                    <span [hidden]=\\\"orderDesc\\\" style=\\\"color:#707070;\\\">▲</span>\\n                                </span>\\n                            </th>\\n                            <th (click)=\\\"setOrder('rule')\\\" style=\\\"min-width: 200px;text-align:center!important;\\\">Rule\\n                                <span [hidden]=\\\"posOrder !== 'rule'\\\">\\n                                    <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:#707070;\\\">▼</span>\\n                                    <span [hidden]=\\\"orderDesc\\\" style=\\\"color:#707070;\\\">▲</span>\\n                                </span>\\n                            </th>\\n                            <th (click)=\\\"setOrder('assigned')\\\" style=\\\"min-width: 80px;text-align:center!important;\\\">Assigned to\\n                                <span [hidden]=\\\"posOrder !== 'assigned'\\\">\\n                                    <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:#707070;\\\">▼</span>\\n                                    <span [hidden]=\\\"orderDesc\\\" style=\\\"color:#707070;\\\">▲</span>\\n                                </span>\\n                            </th>\\n                            <th style=\\\"min-width: 150px;text-align:center!important;\\\">Actions\\n                            </th>\\n                        </tr>\\n                        </thead>\\n                        <tbody style=\\\"height: 100px; overflow:scroll; background: white\\\">\\n                        <tr *ngFor=\\\"let rule of groupRules\\\"\\n                            style=\\\"color:#707070;\\\">\\n                            <td style=\\\"border-top: 1px solid white!important;text-align: center;\\\">\\n                                <span style=\\\"color:#707070;cursor:default;\\\">{{ escapeHtml(rule.category) }}</span>\\n                            </td>\\n                            <td style=\\\"border:none;text-align: center;\\\">\\n                                <div [ngStyle]=\\\"rule.type == 'Errors' ? { 'background': '#F01458' } \\n                                            : rule.type == 'Implementation' ? { 'background': '#92CC66' } \\n                                            : rule.type == 'Improving actions' ? { 'background': '#FFBE2C' } : {}\\\" class=\\\"colortype\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"{{rule.type}}\\\"></div>\\n                            </td>\\n                            <td  style=\\\"border:none;text-align: center;\\\">\\n                                <span style=\\\"color:#707070;cursor:default;\\\">{{ escapeHtml(rule.account) }}</span>\\n                            </td>\\n                            <td  style=\\\"border:none;text-align: center;\\\">\\n                                <span style=\\\"color:#707070;cursor:default;\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"{{rule.criteria}}\\\">{{ escapeHtml(rule.description) | truncate : 35 }}</span>\\n                            </td>\\n                            <td  style=\\\"border:none;text-align: center;\\\">\\n                                <span style=\\\"color:#707070;cursor:default;\\\">{{ escapeHtml(rule.assigned) }}</span>\\n                            </td>\\n                            <td style=\\\"border:none;text-align: center;\\\">\\n                            <div class=\\\"btn-group\\\">\\n                                <button type=\\\"button\\\" (click)=\\\"runRule(rule)\\\"\\n                                    class=\\\"btn btn-default btn-sm btn-act\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"Run\\\">\\n                                    <i class=\\\"sq sq-download\\\"></i>\\n                                </button>\\n                                <button type=\\\"button\\\" (click)=\\\"editRule(rule)\\\"\\n                                class=\\\"btn btn-default btn-sm btn-act\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"Edit\\\">\\n                                    <i class=\\\"sq sq-quickedit\\\" style=\\\"font-weight: bold;\\\"></i>\\n                                </button>\\n                                <button type=\\\"button\\\" (click)=\\\"deleteRule(rule)\\\"\\n                                    class=\\\"btn btn-default btn-sm btn-act\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" title=\\\"Delete\\\">\\n                                        <i class=\\\"sq sq-eliminar\\\"></i>\\n                                </button>\\n                            </div>\\n                            </td>\\n                        </tr>\\n                        </tbody>\\n                    </table>\\n                    </div>\\n                    <div class=\\\"box-footer no-padding\\\">\\n                    <div class=\\\"contacts-controls\\\">\\n                        <div class=\\\"pull-right\\\" style=\\\"color:#707070;\\\">\\n                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (limitpage * currentpage) > (events | filter : search | filterfield\\n                        : { pos : posState, text : textState }| filterfield : { pos : posCreator, text : textCreator } | order\\n                        : { pos : posOrder, desc : orderDesc }).length ? (events| filter : search | filterfield : { pos : posState,\\n                        text : textState } | filterfield : { pos : posCreator, text : textCreator } | order : { pos : posOrder,\\n                        desc : orderDesc }).length : (limitpage * currentpage) }} / {{ (events | filter : search | filterfield\\n                        : { pos : posState, text : textState } | filterfield : { pos : posCreator, text : textCreator } | order\\n                        : { pos : posOrder, desc : orderDesc }).length }}\\n                        <div class=\\\"btn-group\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(0)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                            title=\\\"Prev\\\">\\n                            <i class=\\\"fa fa-chevron-left\\\" style=\\\"color:#707070;\\\"></i>\\n                            </button>\\n                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" (click)=\\\"setCurPage(1)\\\" data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\"\\n                            title=\\\"Next\\\">\\n                            <i class=\\\"fa fa-chevron-right\\\" style=\\\"color:#707070;\\\"></i>\\n                            </button>\\n                        </div>\\n                        </div>\\n                    </div>\\n                    </div>\\n                </div>\\n                </div>\\n        </div>\\n    </div>\\n    <!-- <div class=\\\"col-md-12\\\">\\n    </div> -->\\n  </section>\\n\\n    <div class=\\\"modal fade\\\" id=\\\"newRule\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n          <div class=\\\"modal-content\\\">\\n            <div class=\\\"modal-header modal-header-info\\\">\\n              <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                <span aria-hidden=\\\"true\\\">&times;</span>\\n              </button>\\n              <h4 class=\\\"modal-title\\\">\\n                <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>New Rule</h4>\\n            </div>\\n            <div class=\\\"modal-body\\\">\\n             <div class=\\\"row\\\">   \\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Request Category</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"categories\\\" [(ngModel)]=\\\"newRule.type\\\" placeholder=\\\"Select a Type\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Assign to</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"groups\\\" [(ngModel)]=\\\"newRule.assigned\\\" placeholder=\\\"Select a Group\\\"\\n                        filter=\\\"filter\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>E-mail Account</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mailAccounts\\\" [(ngModel)]=\\\"newRule.account\\\" placeholder=\\\"Select an email account\\\"\\n                        filter=\\\"filter\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Request Title</label>\\n                        <input class=\\\"form-control\\\" [(ngModel)]=\\\"newRule.title\\\" placeholder=\\\"Request title\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Criteria</label>\\n                        <input class=\\\"form-control\\\" [(ngModel)]=\\\"newRule.criteria\\\" placeholder=\\\"Criteria\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Field</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"ruleFields\\\" [(ngModel)]=\\\"newRule.field\\\" placeholder=\\\"Select a Field\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Operator</label>\\n                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"ruleOperators\\\" [(ngModel)]=\\\"newRule.operator\\\" placeholder=\\\"Select an Operator\\\"></p-dropdown>\\n                    </div>\\n                </div>\\n             </div>\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n              <div class=\\\"pull-right\\\">\\n                <button type=\\\"button\\\" class=\\\"btn btn-success btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                <button type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\"  (click)=\\\"saveRule(newRule)\\\">Save</button>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n    </div>\\n\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/request/preferences.template.html\n// module id = 866\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"clientsettings\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Settings\\n      <small>User Settings</small>\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/users\\\">\\n        <i class=\\\"fa fa-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Client Settings</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <!-- <button data-toggle=\\\"collapse\\\" data-target=\\\"#changePassword\\\">Change Background</button> -->\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-md-12\\\">\\n              <div class=\\\"box box-primary\\\" style=\\\"width:70%;min-height:450px;margin:0 auto;border-radius:25px;border:none;\\\">\\n                <div class=\\\"box-header\\\" style=\\\"background:#006EC6;border-radius: 25px 25px 0px 0px;height:60px;\\\">\\n                      <div class=\\\"pull-left no-padding\\\" style=\\\"text-align:right;font-size:20px;color:white;\\\">General Settings</div>\\n                    <!-- <button type=\\\"button\\\" (click)=\\\"reload()\\\" class=\\\"btn btn-default btn-sm\\\"><i class=\\\"fa fa-refresh\\\"></i>&nbsp;Refresh</button> -->\\n                </div>\\n                <div class=\\\"box-body\\\">\\n                  <div class=\\\"pull-left no-padding\\\" style=\\\"height:80%;width:100%;\\\">\\n                    <div class=\\\"col-xs-6\\n                     col-md-6 col-lg-6\\\">\\n                     <div class=\\\"col-md-12\\\">\\n                      <div class=\\\"pull-left setting-element\\\" style=\\\"height: 90px;width: 90px;background:white;border-radius: 50%;margin-left: 25%;margin-top: 20px;border: 7px solid white;box-shadow: grey -1px 0px 10px -2px;position:relative;padding:1px;\\\">\\n                        <div id=\\\"user-profile-picture\\\" style=\\\"height: 75px;width: 75px;background: transparent;border-radius: 50%;box-shadow: grey -1px 0px 10px -2px; overflow:hidden;position:relative;\\\" (mouseenter)=\\\"showChangePicture('logo')\\\" (mouseleave)=\\\"showChangePicture('logo')\\\">\\n                          <div style=\\\"height: 100%;width: 100%;background: white;position: relative;\\\">\\n                            <img src=\\\"{{ mainLogo }}\\\" id=\\\"logo-img\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"margin-left: 1px;width: 95%;margin-top: 5%;\\\">\\n                            <div id=\\\"change-logo\\\" class=\\\"upload-picture-btn-wrapper\\\" style=\\\"position: absolute;background: rgba(56, 169, 249, 0.71);height: 100%;width: 100%;top: 0px;color: white;text-align: center;padding-top: 30px;display:none;\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\"  name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"onBasicUpload($event,'mainlogo')\\\"></div>\\n                          </div>\\n                        </div>\\n                      </div>\\n                     </div>\\n                     <div class=\\\"pull-left\\\" style=\\\"margin-top: 10px;margin-left:18%;font-weight: bold;color: #707070;\\\"><p style=\\\"text-align: center;\\\">Change Company Logo<br> (300x96 px)</p></div>\\n                    </div>\\n                    <div class=\\\"col-xs-6 col-md-6 col-lg-6\\\">\\n                      <div class=\\\"col-md-12\\\">\\n                        <div class=\\\"pull-left setting-element\\\" style=\\\"height: 90px;width: 90px;background:white;border-radius: 50%;margin-left: 25%;margin-top: 20px;border: 7px solid white;box-shadow: grey -1px 0px 10px -2px;position:relative;padding:1px;\\\">\\n                          <div id=\\\"user-profile-picture\\\" style=\\\"height: 75px;width: 75px;background: transparent;border-radius: 50%;box-shadow: grey -1px 0px 10px -2px; overflow:hidden;position:relative;\\\" (mouseenter)=\\\"showChangePicture('background')\\\" (mouseleave)=\\\"showChangePicture('background')\\\">\\n                            <div style=\\\"height: 100%;width: 100%;background: white;position: relative;\\\">\\n                              <img id=\\\"background-img\\\" src=\\\"{{ loginBack }}\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"margin-left: -20px;height: 100%;\\\">\\n                            </div>\\n                            <div id=\\\"change-background\\\" class=\\\"upload-picture-btn-wrapper\\\" style=\\\"position: absolute;background: rgba(56, 169, 249, 0.71);height: 100%;width: 100%;top: 0px;color: white;text-align: center;padding-top: 30px;display:none;\\\"><i class=\\\"sq sq-custom-upload\\\"></i><input type=\\\"file\\\" class=\\\"input-picture\\\"  name=\\\"demo[]\\\" accept=\\\"image/*\\\" maxFileSize=\\\"1000000\\\" (change)=\\\"onBasicUpload($event,'background')\\\"></div>\\n                          </div>\\n                        </div>\\n                      </div>\\n                      <div class=\\\"pull-left\\\" style=\\\"margin-top: 10px;margin-left:17%;font-weight: bold;color: #707070;\\\"><p style=\\\"text-align: center;\\\">Change Login Background <br>(1920x1080 px)</p></div>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-md-12 col-lg-12 pull-right\\\" style=\\\"height:80%;padding:0px 10px;margin-top:50px;\\\">\\n                      <ul style=\\\"list-style: none;margin-top:10px;\\\">\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;\\\">Company Name:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.companyname\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">Subscription Email Account:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.email\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"white-space: nowrap;margin-top:20px;\\\">Usage Policies:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:auto;margin-bottom:5px;margin-top:20px;\\\"><textarea [(ngModel)]=\\\"client.policies\\\" style=\\\"width:100%;max-width: 100%;max-height: 150px;background: transparent;border: none;margin: 0px;padding-top:10px;\\\"></textarea></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">Notification Email Account:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\"  [(ngModel)]=\\\"client.emailnotif\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">Notification Email Password:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\">\\n                                <input type=\\\"password\\\" class=\\\"input-user\\\" [(ngModel)]=\\\"client.password\\\">\\n                              </div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">Host:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.host\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\"> IMAP Port:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.imap\\\"></div>\\n                            </div>\\n                          </li>\\n                          <li style=\\\"line-height: 2.5em;\\\">\\n                            <div class=\\\"col-md-12\\\" style=\\\"height:auto;max-height: 100px;\\\">\\n                              <div class=\\\"col-md-4\\\" style=\\\"margin-top:20px;\\\">SMTP Port:</div>\\n                              <div class=\\\"col-md-8\\\" style=\\\"background:#F4F9FC;border-radius:25px;color:#707070;font-weight:bold;height:35px;margin-bottom:5px;margin-top:20px;\\\"><input class=\\\"input-user\\\" [(ngModel)]=\\\"client.smtp\\\"></div>\\n                            </div>\\n                          </li>\\n                      </ul>\\n                  </div>\\n                  <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"min-height:65px;position:relative;\\\">\\n                    <div class=\\\"pull-right\\\" style=\\\"margin-top: 15px;\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-toggle=\\\"modal\\\" data-target=\\\"#changePassword\\\"> Preview </button>\\n                      <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" [disabled]=\\\"validate()\\\" (click)=\\\"saveCompanyDetails()\\\"> Save</button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"changePassword\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"width:980px;\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n              <span aria-hidden=\\\"true\\\">&times;</span>\\n            </button>\\n          <h4 class=\\\"modal-title\\\">Change Login Theme</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"box box-primary\\\" style=\\\"width:950px;min-height:450px;margin:0 auto;border-radius:25px;border:none;\\\">\\n              <div class=\\\"box-body\\\">\\n                <div id=\\\"preview-background\\\" [ngStyle]=\\\"myLoginStyle\\\"> \\n                  <div class=\\\"col-md-5 col-lg-7\\\">\\n          \\n                  </div>\\n                  <div style=\\\"border-top: 1200px solid rgba(255, 255, 255, 0.8);border-left: 120px solid transparent;height: 100%;float: right;width:395px;\\\" id=\\\"login-rigth\\\">\\n                  </div>\\n                  <div id=\\\"login-nx\\\" style=\\\"right: 5%;\\\">\\n                      <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;width:285px;margin-left: 15px;\\\">\\n                        <img id=\\\"preview-logo\\\" src=\\\"{{ mainLogo }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto;margin-left: 15px;margin-top:0;height: 95px;width:auto;\\\">\\n                      </div>\\n                      <form id=\\\"formLogin\\\" style=\\\"margin-top:50px;\\\">\\n                        <div class=\\\"form-group has-feedback\\\" style=\\\"border-bottom: solid #0ca8da 2px;width:150px;text-align: center;margin-left: 105px;\\\">\\n                          <i class=\\\"sq sq-profiles\\\"></i>\\n                        </div>\\n                        <div class=\\\"form-group has-feedback\\\" style=\\\"border-bottom: solid #0ca8da 2px;width:150px;text-align: center;margin-left: 105px;\\\">\\n                          <i class=\\\"sq sq-administrator\\\"></i>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;margin-top:50px;\\\">\\n                            <div style=\\\"width: 75px;border-radius: 50px;background: #0ca8da;color: white;margin-left: 145px;font-size: 12px;height: 25px;padding-top: 4px;\\\">\\n                              LOG IN\\n                            </div>\\n                          </div>\\n                        </div>\\n                        <div class=\\\"row\\\" style=\\\"padding-top: 20px;text-align:center;margin-left:40px;\\\">\\n                          <div><p> Forgot Password?</p></div>\\n                        </div>\\n                      </form>\\n                  </div>\\n                </div>  \\n              </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/clientsettings/clientsettings.template.html\n// module id = 867\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"clientsettings\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h1>\\n      Workflow\\n      <small>DailyBoard</small>\\n    </h1>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/users\\\">\\n        <i class=\\\"fa fa-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">DailyBoard</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"pull-left col-md-4 no-padding\\\">\\n        <div class=\\\"pull-left col-md-4\\\" *ngIf=\\\"scrollOn==false\\\" style=\\\"height: 50px;\\\" (click)=\\\"startScroll(true)\\\"><div style=\\\"width:35px;height:35px;text-align:right;margin-top:15px;\\\"><i class=\\\"sq sq-forwardarrow\\\"></i></div></div>\\n        <div class=\\\"pull-left col-md-4\\\" *ngIf=\\\"scrollOn==true\\\" style=\\\"height: 50px;\\\"  (click)=\\\"startScroll(false)\\\"><div style=\\\"width:35px;height:35px;text-align:right;margin-top:15px;\\\"><i class=\\\"sq sq-close-bg\\\"></i></div></div>\\n        <div class=\\\"pull-right col-md-8\\\" style=\\\"height: 50px;font-weight: bold;font-size: 18px;text-align: right;padding-top: 10px;padding-right: 30px;\\\">\\n            {{teamDisplay}}\\n        </div>\\n        <div id=\\\"burndown-scroll\\\" class=\\\"pull-left col-md-10\\\"  style=\\\"height:700px;overflow:scroll;margin-left:55px;\\\" detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n          <div *ngIf=\\\"groupUsers || groupUsers.users.length == 0\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" id=\\\"burndown-dashboard\\\" class=\\\"col-md-12\\\" style=\\\"max-height:250px;margin-bottom:70px;\\\">\\n              <div class=\\\"box box-success burndown-border\\\">\\n                <div class=\\\"box-header with-border border-burndown\\\">\\n                  <div class=\\\"col-md-12 btns-burndown\\\" style=\\\"padding:0;\\\">\\n                    <div class=\\\"box-tittle BurnDown\\\" style=\\\"padding-top: 5px;\\\">\\n                      <i class=\\\"sq sq-burndown\\\" aria-hidden=\\\"true\\\"></i>\\n                      <div class=\\\"burndownsprint\\\">BurnDown for {{grp.title}}</div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <div class=\\\"box-body\\\">\\n                  <p-chart id=\\\"burndowndata-dashboard\\\" type=\\\"line\\\" [data]=\\\"grp.burndownData\\\" (onDataSelect)=\\\"chartClicked($event)\\\" height=\\\"250px\\\"></p-chart>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          </div>\\n      </div>\\n      <div class=\\\"pull-right  col-md-8\\\">\\n        <!-- <button data-toggle=\\\"collapse\\\" data-target=\\\"#changePassword\\\">Change Background</button> -->\\n        <div class=\\\"col-md-3 no-padding\\\">\\n          <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"width:95%;margin-left:2px;\\\">\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-11 no-padding\\\" style=\\\"margin-left:10px;\\\">\\n              <h3 class=\\\"box-title\\\">\\n              <i class=\\\"sq sq-todolist\\\"></i> TO DO</h3>\\n            </div>\\n          </div>\\n          <div class=\\\"table-body pull-left box-solid body-dailyboard\\\" style=\\\"max-height: 700px;overflow:scroll;background:transparent;padding-top:10px;\\\"  detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" style=\\\"height:300px;background:white;margin-bottom:20px;margin-left:5px;\\\" class=\\\"col-md-11 dailyboard-column no-padding\\\">\\n              <div *ngFor=\\\"let tk of grp.tasks.today\\\" class=\\\"dailyboard-tile dailyboard-tile-{{tk.label}} pull-left\\\">\\n                <div class=\\\"col-md-8 no-padding\\\" style=\\\"border-right:1px white;\\\">{{tk.task_id}}</div>\\n                <div class=\\\"col-md-4 no-padding\\\" (click)=\\\"showModal(tk)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\" style=\\\"cursor: pointer;\\\"><i class=\\\"sq sq-search\\\"></i></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-md-3 no-padding\\\" style=\\\"background:transparent;\\\">\\n          <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"width:95%;margin-left:2px;\\\">\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-11 no-padding\\\" style=\\\"margin-left:10px;\\\">\\n              <h3 class=\\\"box-title\\\">\\n              <i class=\\\"sq sq-record-progress\\\"></i> IN PROGRESS</h3>\\n            </div>\\n          </div>\\n          <div class=\\\"table-body pull-left box-solid body-dailyboard\\\" style=\\\"max-height: 700px;overflow:scroll;background:transparent;padding-top:10px;\\\"  detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" style=\\\"height:300px;background:white;margin-bottom:20px;margin-left:5px;\\\" class=\\\"col-md-11 dailyboard-column  no-padding\\\">\\n              <div *ngFor=\\\"let tk of grp.tasks.inprogress\\\" class=\\\"dailyboard-tile dailyboard-tile-{{tk.label}} pull-left\\\">\\n                <div class=\\\"col-md-8 no-padding\\\" style=\\\"border-right:1px white;\\\">{{tk.task_id}}</div>\\n                <div class=\\\"col-md-4 no-padding\\\" (click)=\\\"showModal(tk)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\" style=\\\"cursor: pointer;\\\"><i class=\\\"sq sq-search\\\"></i></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-md-3 no-padding\\\" style=\\\"background:transparent;\\\">\\n          <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"width:95%;margin-left:2px;\\\">\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-11 no-padding\\\" style=\\\"margin-left:10px;\\\">\\n              <h3 class=\\\"box-title\\\">\\n              <i class=\\\"sq sq-improving\\\"></i> IMPROVING</h3>\\n            </div>\\n          </div>\\n          <div class=\\\"table-body pull-left box-solid body-dailyboard\\\" style=\\\"max-height: 700px;overflow:scroll;background:transparent;padding-top:10px;\\\"  detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" style=\\\"height:300px;background:white;margin-bottom:20px;margin-left:5px;\\\" class=\\\"col-md-11 dailyboard-column  no-padding\\\">\\n              <div *ngFor=\\\"let tk of grp.tasks.improving\\\" class=\\\"dailyboard-tile dailyboard-tile-{{tk.label}} pull-left\\\">\\n                <div class=\\\"col-md-8 no-padding\\\" style=\\\"border-right:1px white;\\\">{{tk.task_id}}</div>\\n                <div class=\\\"col-md-4 no-padding\\\" (click)=\\\"showModal(tk)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\" style=\\\"cursor: pointer;\\\"><i class=\\\"sq sq-search\\\"></i></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-md-3 no-padding\\\" style=\\\"background:transparent;\\\">\\n          <div class=\\\"box-header with-border table-header taskboard-column-header\\\" style=\\\"width:95%;margin-left:2px;\\\">\\n            <div class=\\\"col-xs-11 col-sm-11 col-md-11 no-padding\\\" style=\\\"margin-left:10px;\\\">\\n              <h3 class=\\\"box-title\\\">\\n              <i class=\\\"sq sq-completed\\\"></i> DONE</h3>\\n            </div>\\n          </div>\\n          <div class=\\\"table-body pull-left box-solid body-dailyboard\\\" style=\\\"max-height: 700px;overflow:scroll;background:transparent;padding-top:10px;\\\"  detect-scroll (onScroll)=\\\"handleScroll($event)\\\">\\n            <div *ngFor=\\\"let grp of groupUsers\\\" style=\\\"height:300px;background:white;margin-bottom:20px;margin-left:5px;\\\" class=\\\"col-md-11 dailyboard-column  no-padding\\\">\\n              <div *ngFor=\\\"let tk of grp.tasks.done\\\" class=\\\"dailyboard-tile dailyboard-tile-{{tk.label}} pull-left\\\">\\n                <div class=\\\"col-md-8 no-padding\\\" style=\\\"border-right:1px white;\\\">{{tk.task_id}}</div>\\n                <div class=\\\"col-md-4 no-padding\\\" (click)=\\\"showModal(tk)\\\" data-toggle=\\\"modal\\\" data-target=\\\"#mdTask\\\" style=\\\"cursor: pointer;\\\"><i class=\\\"sq sq-search\\\"></i></div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"changePassword\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"width:980px;\\\">\\n      <div class=\\\"modal-content\\\">\\n        <div class=\\\"modal-header\\\">\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n              <span aria-hidden=\\\"true\\\">&times;</span>\\n            </button>\\n          <h4 class=\\\"modal-title\\\">Change Login Theme</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"box box-primary\\\" style=\\\"width:950px;min-height:450px;margin:0 auto;border-radius:25px;border:none;\\\">\\n              <div class=\\\"box-body\\\">\\n                <div id=\\\"preview-background\\\" [ngStyle]=\\\"myLoginStyle\\\"> \\n                  <div class=\\\"col-md-5 col-lg-7\\\">\\n          \\n                  </div>\\n                  <div style=\\\"border-top: 1200px solid rgba(255, 255, 255, 0.8);border-left: 120px solid transparent;height: 100%;float: right;width:395px;\\\" id=\\\"login-rigth\\\">\\n                  </div>\\n                  <div id=\\\"login-nx\\\" style=\\\"right: 5%;\\\">\\n                      <div class=\\\"login-logo\\\" style=\\\"z-index: 10; position: relative;width:285px;margin-left: 15px;\\\">\\n                        <img id=\\\"preview-logo\\\" src=\\\"{{ mainLogo }}\\\" class=\\\"logo-login\\\" style=\\\"z-index: auto;margin-left: 15px;margin-top:0;height: 95px;width:auto;\\\">\\n                      </div>\\n                      <form id=\\\"formLogin\\\" style=\\\"margin-top:50px;\\\">\\n                        <div class=\\\"form-group has-feedback\\\" style=\\\"border-bottom: solid #0ca8da 2px;width:150px;text-align: center;margin-left: 105px;\\\">\\n                          <i class=\\\"sq sq-profiles\\\"></i>\\n                        </div>\\n                        <div class=\\\"form-group has-feedback\\\" style=\\\"border-bottom: solid #0ca8da 2px;width:150px;text-align: center;margin-left: 105px;\\\">\\n                          <i class=\\\"sq sq-administrator\\\"></i>\\n                        </div>\\n                        <div class=\\\"row\\\">\\n                          <div class=\\\"col-xs-12\\\" style=\\\"text-align: center;margin-top:50px;\\\">\\n                            <div style=\\\"width: 75px;border-radius: 50px;background: #0ca8da;color: white;margin-left: 145px;font-size: 12px;height: 25px;padding-top: 4px;\\\">\\n                              LOG IN\\n                            </div>\\n                          </div>\\n                        </div>\\n                        <div class=\\\"row\\\" style=\\\"padding-top: 20px;text-align:center;margin-left:40px;\\\">\\n                          <div><p> Forgot Password?</p></div>\\n                        </div>\\n                      </form>\\n                  </div>\\n                </div>  \\n              </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal modal-task fade\\\" id=\\\"mdTask\\\" role=\\\"dialog\\\">\\n      <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n        <div class=\\\"modal-content\\\" style=\\\"border-radius: 20px;\\\">\\n          <div class=\\\"modal-header header-project\\\">\\n            <button id=\\\"close-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n              <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n            </button>\\n            <div style=\\\"overflow-y: scroll;max-height: 25px;\\\">\\n              <h4 class=\\\"modal-title\\\">\\n                <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" \\\" + mdT.task_id + \\\" - \\\" + mdT.task_subject}}\\n              </h4>\\n            </div>\\n          </div>\\n          <div class=\\\"modal-body\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\">\\n                <div style=\\\"border-left: 10px solid rgb(238, 242, 244);display: flow-root;\\\">\\n                  <div class=\\\"nav-tabs-sqlx-tk\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-tk\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                      <li class=\\\"active\\\">\\n                        <a id=\\\"info-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#ptsk{{mdT.task_id}}\\\">Info</a>\\n                      </li>\\n                      <li>\\n                        <a id=\\\"proj-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#ptk{{mdT.task_id}}\\\">Project related</a>\\n                      </li>\\n                      <li>\\n                        <a id=\\\"adj-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#taskAdjusted\\\">Adjustments</a>\\n                      </li>\\n                      <li>\\n                        <a id=\\\"timeline-mdTask-taskboard\\\" data-toggle=\\\"tab\\\" href=\\\"#taskTimeline\\\">Timeline</a>\\n                      </li>\\n                      <li>\\n                          <a data-toggle=\\\"tab\\\" href=\\\"#taskForm\\\">Form</a>\\n                      </li>\\n                    </ul>\\n                  </div>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9\\\" style=\\\"min-height: 390px;\\\">\\n                <div class=\\\"tab-content\\\">\\n                  <div id=\\\"ptsk{{mdT.task_id}}\\\" class=\\\"tab-pane fade in active\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-bottom: 5px;\\\">\\n                      <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                        <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" [innerHTML]=\\\"mdT.task_description\\\" style=\\\"max-height: 150px; overflow: scroll;padding: 0px;color:rgb(130, 145, 152);\\\">\\n                        </div>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Status</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{ mdT.status_name }}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_date}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Creator</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.creator}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Assigned to</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.asigned}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_delivery}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Points Assigned</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_points}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Points Recorded</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.task_pointsd}}</p>\\n                      </div>\\n                      <div *ngIf=\\\"mdT.project\\\" class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                      </div>\\n                    </div>\\n                    <div id=\\\"mdTComments\\\" class=\\\"box-footer box-comments\\\" *ngIf=\\\"mdT.comments && mdT.comments.length > 0\\\" style=\\\"max-height: 130px; overflow-y:scroll; background-color:rgb(238, 242, 244);padding-top: 0px;\\\">\\n                      <div class=\\\"content-comments-users scrollable\\\" style=\\\"max-height:273px; font-size: 14px;\\\">\\n                        <ul class=\\\"timeline comment-timeline-tk\\\">\\n                          <li *ngFor=\\\"let cpm of mdT.comments\\\" style=\\\"margin-top:5px;\\\">\\n                            <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 25px;width: 25px;\\\">\\n                              <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 20px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                            </div>\\n                            <div class=\\\"timeline-item comment-timeline-item\\\">\\n                              <span class=\\\"time\\\">\\n                                {{cpm.note_date}}</span>\\n                              <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:rgb(130, 145, 152);font-size: 14px;\\\">\\n                                <b>{{cpm.creator + \\\" \\\"}}</b> Commented\\n                              </h3>\\n                              <div class=\\\"timeline-body\\\" style=\\\"overflow-y: scroll; background-color: transparent; max-height:200px; padding-bottom: 1px;\\\">\\n                                <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                  <div class=\\\"col-xs-12 col-md-12\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                    <div class=\\\"col-xs-12 col-md-12 comment-user\\\" style=\\\"background-color:rgb(238, 242, 244); padding-left: 1px; padding-right: 0px;\\\">\\n                                      <p class=\\\"comment-user\\\" style=\\\"background-color:rgb(238, 242, 244);\\\">\\n                                        <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(68, 180, 248); font-size: 16px;\\\"></i> {{escapeHtml(cpm.note_text)}}</p>\\n                                    </div>\\n                                  </div>\\n                                </div>\\n                              </div>\\n                            </div>\\n                          </li>\\n                        </ul>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"box-footer\\\">\\n                      <button id=\\\"comment-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#collapse1\\\"\\n                        style=\\\"color:white;background-color:rgb(36, 122, 205);width: 160px!important;\\\">\\n                        <div class=\\\"pull-left\\\">\\n                          <i class=\\\"sq sq-comments\\\" aria-hidden=\\\"true\\\" style=\\\"color:white;background-color:rgb(36, 122, 205);font-size: 16px;\\\"></i>\\n                        </div>\\n                        <div class=\\\"pull-right\\\">\\n                          Leave a Comment\\n                        </div>\\n                      </button>\\n                      <div id=\\\"collapse1\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin-top: 10px;\\\">\\n                        <textarea id=\\\"text-mdTask-taskboard\\\" [(ngModel)]=\\\"note.note_text\\\" style=\\\"resize: vertical; width: 100%; height: 80px;border: 2px solid rgb(238,242,244);outline: 0px none transparent;\\\"></textarea>\\n                        <div class=\\\"pull-right\\\">\\n                          <button id=\\\"publishcomm-mdTask-taskboard\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"background-color:rgb(51, 141, 197);\\\" type=\\\"button\\\"\\n                            (click)=\\\"noteAdd(mdT.task_id, 1)\\\" [disabled]=\\\"note.text == ''\\\" data-toggle=\\\"collapse\\\" data-target=\\\"#collapse1\\\">Publish</button>\\n                        </div>\\n                      </div>\\n                    </div>\\n                    <div class=\\\"box-footer\\\" *ngIf=\\\"note.attachments && note.attachments.length > 0\\\">\\n                      <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of note.attachments\\\">\\n                          <span class=\\\"mailbox-attachment-icon\\\">\\n                            <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-pdf-o\\\"*ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                            <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          </span>\\n                          <div class=\\\"mailbox-attachment-info\\\">\\n                            <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                            <span class=\\\"mailbox-attachment-size\\\">\\n                              {{att.size + ' bytes'}}\\n                            </span>\\n                          </div>\\n                        </li>\\n                      </ul>\\n                    </div>\\n                    <div class=\\\"box-footer\\\" *ngIf=\\\"mdT.attachments && mdT.attachments.length > 0\\\">\\n                      <label>Attachments ({{mdT.total_attachments}})</label>\\n                      <ul style=\\\"list-style-type:none;height:220px;overflow:scroll;width:100%;position:relative;padding-left:0px;\\\">\\n                        <li *ngFor=\\\"let att of mdT.attachments\\\" style=\\\"width:200px;margin:5px;height:225px;\\\" class=\\\"pull-left\\\">\\n                          <a id=\\\"att-mdTask-taskboard\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                            <i class=\\\"fa fa-paperclip\\\"></i>\\n                            <span class=\\\"mailbox-attachment-icon\\\">\\n                              <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-pdf-o\\\"*ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\" style=\\\"height: 100%; max-width: 100%\\\">\\n                              <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                              <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                            </span>\\n                          </a>\\n                          <div class=\\\"mailbox-attachment-info\\\">\\n                            <a id=\\\"attclip-mdTask-taskboard\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                              <i class=\\\"fa fa-paperclip\\\"></i>{{ att.tsat_alias }}</a>\\n                            <span class=\\\"mailbox-attachment-size\\\">\\n                              {{att.tsat_size + ' bytes'}}\\n                            </span>\\n                          </div>\\n                        </li>\\n                      </ul>\\n                    </div>\\n                  </div>\\n                  <div id=\\\"ptk{{mdT.task_id}}\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                    <div *ngIf=\\\"mdT.project && mdT.project.length > 0\\\" class=\\\"row\\\">\\n                      <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Project Name</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_subject }}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Description</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">\\n                          {{escapeHtml(sanitizeHtml(mdT.project.proj_description))}}\\n                        </p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Project Number</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_id}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Creation Date</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_start}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Project Creator</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.creator}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Applicant</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.applicant}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Delivery Date</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_end}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Product</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.prod_name}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Group</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.groupname}}</p>\\n                      </div>\\n                      <div class=\\\"col-xs-6 col-sm-6 col-md-4 col-lg-4\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Progress</label>\\n                        <p style=\\\"color:rgb(130, 145, 152);\\\">{{mdT.project.proj_percentage + \\\"%\\\"}}</p>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"!mdT.project\\\" class=\\\"row\\\">\\n  \\n                    </div>\\n                  </div>\\n                  <div id=\\\"taskAdjusted\\\" class=\\\"tab-pane fade\\\" style=\\\"min-height: 380px;\\\">\\n                    <div *ngIf=\\\"mdT.total_adjusted && mdT.total_adjusted.length > 0 \\\" class=\\\"row\\\">\\n                      <div class=\\\"col-xs-12 col-md-12 col-lg-12\\\" style=\\\"padding-bottom: 10px;\\\">\\n                        <label class=\\\"control-label label-sqlx\\\">Task Adjusted</label>\\n                      </div>\\n                      <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"max-height:273px; font-size: 14px;\\\">\\n                        <ul class=\\\"timeline comment-timeline-tk\\\">\\n                          <li *ngFor=\\\"let adj of mdT.total_adjusted\\\" style=\\\"margin-top:5px;\\\">\\n                            <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 5px; height: 30px;width: 30px;\\\">\\n                              <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                            </div>\\n                            <div class=\\\"timeline-item comment-timeline-item\\\">\\n                              <h3 class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;\\\">\\n                                <b>{{adj.header}}</b>\\n                              </h3>\\n                              <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                  <div>\\n                                    <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                      <span>{{adj.points}}</span> on {{adj.date}} /\\n                                      <span>{{adj.delivery}}</span>\\n                                      <br> Reason for adjustment : {{adj.reason}} </label>\\n                                  </div>\\n                                </div>\\n                              </div>\\n                            </div>\\n                          </li>\\n                        </ul>\\n                      </div>\\n                    </div>\\n                    <div *ngIf=\\\"!mdT.total_adjusted || mdT.total_adjusted.length == 0\\\" class=\\\"row\\\">\\n  \\n                    </div>\\n                  </div>\\n                  <div id=\\\"taskTimeline\\\" class=\\\"tab-pane fade\\\">\\n                    <div *ngIf=\\\"!mdT.timeline\\\" class=\\\"row\\\">\\n                    </div>\\n                    <div *ngIf=\\\"mdT.timeline\\\" class=\\\"row\\\">\\n                      <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"font-size: 14px;\\\">\\n                        <ul class=\\\"timeline comment-daily-timeline\\\">\\n                          <li *ngFor=\\\"let adj of mdT.timeline\\\" style=\\\"margin-top:5px;\\\">\\n                            <div class=\\\"icon-team-daily-table\\\" style=\\\"position: absolute;margin-left: 0px; height: 10px;width: 10px;\\\">\\n                              <i class=\\\"fa fa-dot-circle-o user-icon-daily\\\" aria-hidden=\\\"true\\\" style=\\\"color:#0FB4FF;; font-size: 22px;position: absolute!important;top: 4px;left: -8px;\\\"></i>\\n                            </div>\\n                            <div class=\\\"icon-team-sprint\\\" style=\\\"position: absolute;margin-left: 20px; height: 30px;width: 30px;\\\">\\n                              <i class=\\\"sq sq-working-team user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 22px;position: absolute!important;top: 3px;left: 3px;\\\"></i>\\n                            </div>\\n                            <div class=\\\"timeline-item comment-timeline-item\\\">\\n                              <label class=\\\"timeline-header comment-timeline-header\\\" style=\\\"color:#4F5D64;font-size: 14px; padding-bottom: 0px;margin-left: 14px; margin-top: 2px;\\\">\\n                                <b>{{adj.creator}}</b>\\n                                <span style=\\\"font-weight: normal;\\\">{{\\\" \\\" + adj.tittle}}</span>\\n                              </label>\\n                              <div class=\\\"timeline-body\\\" style=\\\"background-color: transparent; max-height:200px; padding-bottom: 10px;\\\">\\n                                <div class=\\\"box-body\\\" style=\\\"color:rgb(130, 145, 152);\\\">\\n                                  <div>\\n                                    <div class=\\\"pull-left col-xs-1 col-md-1 col-lg-1 \\\">\\n                                      <i class=\\\"{{adj.label}}\\\" [ngStyle]=\\\"adj.type == 'note' ? { 'font-size': '24px' } : adj.type == 'daily' ? { 'font-size': '28px' } : {}\\\"\\n                                        style=\\\"color:#0FB4FF\\\"></i>\\n  \\n                                    </div>\\n                                    <div *ngIf=\\\"adj.type == 'note'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                      <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                        {{escapeHtml(adj.description)}}\\n                                        <span>\\n                                          <br> Date: {{adj.date}}</span>\\n                                      </label>\\n                                    </div>\\n                                    <div *ngIf=\\\"adj.type == 'daily'\\\" class=\\\"pull-right col-xs-11 col-md-11 col-lg-11\\\">\\n                                      <label *ngIf=\\\"adj\\\" style=\\\"font-weight: normal;\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">{{adj.subject}}</span>\\n                                        <br> {{adj.date}}\\n                                        <br> Description: {{escapeHtml(adj.description)}}\\n                                        <span *ngIf=\\\"adj.date != ''\\\" style=\\\"font-weight: bold;\\\">\\n                                          <br> {{adj.points}} </span>\\n                                      </label>\\n                                    </div>\\n                                  </div>\\n                                </div>\\n                              </div>\\n                            </div>\\n                          </li>\\n                        </ul>\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div id=\\\"taskForm\\\" class=\\\"tab-pane fade\\\">\\n                    <div *ngIf=\\\"!mdT.form\\\" class=\\\"row\\\">\\n  \\n                    </div>\\n                    <div *ngIf=\\\"mdT.form && mdT.form.length > 0\\\" class=\\\"row\\\">\\n                      <div class=\\\"content-comments-users col-xs-12 col-md-12 col-lg-12 scrollable\\\" style=\\\"height: 407px;font-size: 14px;\\\">\\n                        <div style=\\\"text-align: left;\\\">\\n                           <span style=\\\"color:rgb(130,145,152);font-weight: bold;\\\">Category: {{mdT.form[0].cate_desc}}</span>  \\n                        </div>\\n                        <table style=\\\"text-align: center;width: 100%;\\\">\\n                            <tbody style=\\\"width: 100%;\\\">\\n                              <tr *ngFor=\\\"let fr of mdT.form\\\" style=\\\"height: 50px;\\\">\\n                                <td style=\\\"width: 40%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                  <div style=\\\"color:rgb(130,145,152);border-radius: 15px; height: 30px; border: 2px solid rgb(238,242,244); width: 100%; margin-bottom: 3px;height: 30px;overflow-y: scroll;padding-top: 4px;\\\">\\n                                      {{fr.form_field}}\\n                                  </div>\\n                                </td>\\n                                <td style=\\\"width: 60%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                                    <div style=\\\"color:rgb(130,145,152); border-radius: 15px;height: 30px; border: 2px solid rgb(238,242,244); width: 100%; margin-bottom: 3px;height: 30px;overflow-y: scroll;padding-top: 4px;\\\">\\n                                        {{fr.form_data}}\\n                                    </div>\\n                                </td>\\n                              </tr>\\n                            </tbody>\\n                        </table>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n          <div class=\\\"modal-footer\\\">\\n            <div id=\\\"collapse-file\\\" class=\\\"panel-collapse collapse\\\" style=\\\"margin:20px 0;\\\">\\n              <p-fileUpload #form1 name=\\\"fileUpload-Tasks\\\" (onSelect)=\\\"onChangeTask($event,'new')\\\" multiple=\\\"multiple\\\" maxFileSize=\\\"8388608\\\"\\n                [showUploadButton]=\\\"false\\\" (onRemove)=\\\"onChangeTask($event,'delete')\\\"></p-fileUpload>\\n              <button id=\\\"save-mdTask-taskboard\\\" class=\\\"btn btn-primary btn-sm\\\" type=\\\"button\\\" (click)=\\\"onUploadAttachment(mdT.task_id, form)\\\"\\n                (click)=\\\"form1.clear()\\\" [disabled]=\\\"!taskattch.attachments || taskattch.attachments.length==0\\\" data-toggle=\\\"collapse\\\"\\n                data-target=\\\"#collapse-file\\\">Save</button>\\n            </div>\\n            <button id=\\\"close2-mdTask-taskboard\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\" style=\\\"background-color: rgb(128, 186, 84);\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/dailyboard/dailyboard.template.html\n// module id = 868\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"reports\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"fa fa-line-chart\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> REPORTS\\n      <small style=\\\"font-size:15px;\\\">Scrum</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">Reports</li>\\n    </ol>\\n  </section>\\n  <div class=\\\"row\\\" style=\\\"height: 62px;background: #dce3e6;\\\">\\n    <div *ngIf = \\\"mysprints && mysprints.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top: 5px;\\\">\\n        <div class=\\\"box-header with-border\\\" style=\\\"position: relative;z-index: 2;border-bottom: none!important;text-align: center;min-width: 617px;\\\">\\n          <div class=\\\"btn btn-sm\\\" style=\\\"color:rgb(35,121,205);transform: translate(17%, 2%);\\\">\\n           <span style=\\\"font-size: 14px;font-weight: bold;padding-right: 0px;padding-left: 0px;\\\">sprint</span> \\n          </div>\\n          <p-dropdown id=\\\"ddwnr_spr\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" [dropdownIcon]=\\\"icon\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"sprint.spri_id\\\" placeholder=\\\"Select a sprint\\\" filter=\\\"filter\\\" (onChange)=\\\"showSprint(sprint.spri_id)\\\"></p-dropdown>\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);\\\" (click)=\\\"getReport()\\\"> Search</button>\\n          <!-- <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(237,59,89);\\\"><i class=\\\"fa fa-file-pdf-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i></button> -->\\n          <button type=\\\"button\\\" [disabled]=\\\"emptyReport\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" (click)=\\\"exportExcel('users')\\\"><i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i></button>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <section class=\\\"content\\\" style=\\\"padding: 0;\\\">\\n\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-1 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n        <div class=\\\"nav-tabs-sqlx-v\\\" style=\\\"min-width:150px;\\\">\\n          <ul class=\\\"col-xs-12 nav nav-groups-sqlx-r\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n            <li *ngFor=\\\"let gr of groups\\\" [ngClass]=\\\"{ 'active': gr.groupselect}\\\">\\n              <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(gr.grop_id)\\\">\\n                <span style=\\\"text-transform: uppercase;\\\">\\n                {{gr.grop_name}}\\n              </span> \\n            </a>\\n            </li>\\n          </ul>\\n        </div>\\n      </div>\\n      <ng-template [ngIf]=\\\"tableinfo.length\\\">\\n        <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-9 content-report\\\" style=\\\"margin-top: 20px; margin-left: 10px;\\\">\\n          <div class=\\\"col-sm-12 col-lg-12\\\" >\\n            <!-- nuevo -->\\n              <ul class=\\\"nav nav-pills mb-3\\\" id=\\\"pills-tab\\\" role=\\\"tablist\\\">\\n                  <li class=\\\"nav-item active\\\">\\n                    <a class=\\\"nav-link active\\\" id=\\\"pills-home-tab\\\" data-toggle=\\\"pill\\\" href=\\\"#pills-home\\\" role=\\\"tab\\\" aria-controls=\\\"pills-home\\\" aria-selected=\\\"true\\\">Users</a>\\n                  </li>\\n                  <li class=\\\"nav-item\\\">\\n                    <a class=\\\"nav-link\\\" id=\\\"pills-profile-tab\\\" data-toggle=\\\"pill\\\" href=\\\"#pills-profile\\\" role=\\\"tab\\\" aria-controls=\\\"pills-profile\\\" aria-selected=\\\"false\\\">Projects</a>\\n                  </li>\\n                </ul>\\n                <div class=\\\"tab-content\\\" id=\\\"pills-tabContent\\\">\\n                  <div class=\\\"tab-pane active\\\" id=\\\"pills-home\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"pills-home-tab\\\">\\n                   <!-- <span style=\\\"position:absolute;\\\">users</span>  -->\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0px;margin-right: -49px;\\\">\\n                      <div class=\\\"col-sm-12 col-lg-4 reports-graphics\\\" style=\\\"margin-left: 10px;margin-bottom: 20px;margin-top: 10px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;text-align: center;border-bottom: 1px solid transparent;\\\">\\n                          <span style=\\\"color:rgb(79, 93, 100);font-weight: bold;\\\">\\n                            ESTIMATED POINTS / REGISTERED POINTS -table\\n                          </span>\\n                          <div class=\\\"modal-body\\\" style=\\\"padding: 0px;\\\">\\n                            <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"margin-top: 27px;\\\">\\n                              <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"padding: 0px;height: 55px;\\\">\\n                                  <table class=\\\"table table-bordered2 table-report-u\\\" style=\\\"padding: 0px;\\\">\\n                                      <thead>\\n                                        <tr style=\\\"background-color: rgb(249, 252, 252) !important;color: rgb(130, 145, 152);text-align: center;\\\">\\n                                            <th style=\\\"width: 20%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Team</th>\\n                                            <th style=\\\"width: 40%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Estimated Points</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Registered Points</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Extra Points</th>\\n                                            <th style=\\\"width: 10%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Unit Cost</th>\\n                                        </tr>\\n                                      </thead>\\n                                    </table>\\n                              </div>\\n                              <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"padding: 0px;height: 330px;overflow: scroll;\\\"> \\n                                  <table class=\\\"table table-bordered2 table-report-u\\\">\\n                                      <tbody *ngIf=\\\"tableinfoU && tableinfoU.length > 0\\\">\\n                                        <tr *ngFor=\\\"let tbu of tableinfoU\\\">\\n                                          <td style=\\\"width: 20%;font-size: 12px;\\\"> {{tbu.task_assigned}}</td>\\n                                          <td style=\\\"width: 40%;font-size: 12px;\\\"> {{tbu.points_e}}</td>\\n                                          <td style=\\\"width: 15%;font-size: 12px;\\\"> {{tbu.pointse_r}} </td>\\n                                          <td *ngIf=\\\"tbu.typeextrapoints == 'negative'\\\"  style=\\\"width: 15%;font-size: 12px;\\\"> {{tbu.pointsd_p}}</td>\\n                                          <td *ngIf=\\\"tbu.typeextrapoints == 'positive'\\\"  style=\\\"width: 15%;font-size: 12px;\\\"> {{tbu.pointsd_ext}}</td>\\n                                          <td *ngIf=\\\"tbu.typeextrapoints == 'zero'\\\"  style=\\\"width: 15%;font-size: 12px;\\\"> {{tbu.pointsd_ext}}</td>\\n                                          <td style=\\\"width: 10%;font-size: 12px;\\\"> {{tbu.unitcost}} </td>\\n                                        </tr>\\n                                      </tbody>\\n                                    </table>\\n                              </div>\\n                            </div>\\n                          </div>\\n                          \\n                        </div>\\n                      </div>\\n                      <div class=\\\"col-sm-12 col-lg-8 reports-graphics\\\" style=\\\"margin-left: 30px;margin-bottom: 20px;margin-top: 10px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;text-align: center;border-bottom: 1px solid transparent;\\\">\\n                          <span style=\\\"color:rgb(79, 93, 100);font-weight: bold;\\\">\\n                            ESTIMATED POINTS / REGISTERED POINTS -graphic\\n                          </span>\\n                          <div id = \\\"canvasBarContainer\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 estimaed-points-bar\\\" style=\\\"margin-top: 46px; height: 288px;text-align: center;max-width: 750px;\\\">\\n                            <!-- <canvas id=\\\"canvas-bar\\\">\\n                            </canvas> -->\\n                            <p-chart id=\\\"canvas-bar\\\" type=\\\"bar\\\" [data]=\\\"databar\\\" [options]=\\\"optionsbar\\\"></p-chart>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                  <div class=\\\"tab-pane fade\\\" id=\\\"pills-profile\\\" role=\\\"tabpanel\\\" aria-labelledby=\\\"pills-profile-tab\\\">\\n                      <!-- <span style=\\\"position:absolute;\\\">projects</span>  -->\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0px;margin-right: -49px;\\\">\\n                      <div class=\\\"col-sm-12 col-lg-4 reports-graphics\\\" style=\\\"margin-left: 10px;margin-bottom: 20px;margin-top: 10px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;text-align: center;border-bottom: 1px solid transparent;\\\">\\n                          <span style=\\\"color:rgb(79, 93, 100);font-weight: bold;\\\">\\n                             PROJECTS SPRINT PROGRESS -table\\n                          </span>\\n                          <div class=\\\"modal-body\\\" style=\\\"padding: 0px;\\\">\\n                            <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"margin-top: 27px;\\\">\\n                              <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"padding: 0px;height: 55px;\\\">\\n                                  <table class=\\\"table table-bordered2 table-report-u\\\" style=\\\"padding: 0px;\\\">\\n                                      <thead>\\n                                        <tr style=\\\"background-color: rgb(249, 252, 252) !important;color: rgb(130, 145, 152);text-align: center;\\\">\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">#Project</th>\\n                                            <th style=\\\"width: 40%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Description</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Registered Points</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Cost</th>\\n                                            <th style=\\\"width: 15%;font-size: 12px;text-align: center;vertical-align: middle;\\\">Cost Point</th>\\n                                        </tr>\\n                                      </thead>\\n                                    </table>\\n                              </div>\\n                              <div class=\\\"col-sm-12 col-lg-12\\\" style=\\\"padding: 0px;height:330px;overflow: scroll;\\\"> \\n                                  <table class=\\\"table table-bordered2 table-report-u\\\">\\n                                      <tbody *ngIf=\\\"projectsnames && projectsnames.length > 0\\\">\\n                                        <tr *ngFor=\\\"let pjn of projectsnames\\\">\\n                                          <td *ngIf=\\\"pjn.proj_id != 0\\\" style=\\\"width: 15%;font-size: 12px;\\\"> {{pjn.proj_id}}</td>\\n                                          <td *ngIf=\\\"pjn.proj_id == 0\\\" style=\\\"width: 15%;font-size: 12px;\\\"> - </td>\\n                                          <td style=\\\"width: 40%;font-size: 12px;\\\">\\n                                              <div style=\\\"height: 38px; overflow: scroll;\\\">{{pjn.descr}}</div> </td>\\n                                          <td style=\\\"width: 15%;font-size: 12px;\\\"> {{pjn.sum_dailpoints}} </td>\\n                                          <td style=\\\"width: 15%;font-size: 12px;\\\"> {{pjn.cost}}</td>\\n                                          <td style=\\\"width: 15%;font-size: 12px;\\\"> {{pjn.total_cost}} </td>\\n                                        </tr>\\n                                      </tbody>\\n                                    </table>\\n                              </div>\\n                            </div>\\n                          </div>\\n                        </div>\\n                      </div>\\n                      <div class=\\\"col-sm-12 col-lg-8 reports-graphics\\\" style=\\\"margin-left: 30px;margin-bottom: 20px;margin-top: 10px;\\\">\\n                        <div class=\\\"modal-header .header-comments\\\" style=\\\"padding-bottom: 5px;text-align: center;border-bottom: 1px solid transparent;\\\">\\n                          <span style=\\\"color:rgb(79, 93, 100);font-weight: bold;\\\">\\n                             PROJECTS SPRINT PROGRESS -graphic\\n                          </span>\\n                          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 projectsprint-pie\\\" style=\\\"padding: 10px;height: auto;\\\">\\n                            <p-chart id=\\\"canvas-pie\\\" type=\\\"pie\\\" [data]=\\\"datapie\\\" [options]=\\\"optionspie\\\"></p-chart>\\n                          </div>\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </div>\\n                </div>\\n                <!-- fin nuevo -->\\n          </div>\\n          <div class=\\\"col-sm-12 col-lg-12 reports-table\\\">\\n            <table id=\\\"results\\\" class=\\\"table table-bordered2 table-hover table-striped table-role\\\">\\n                <thead>\\n                <th style=\\\"width: 10%;\\\">#Project</th>\\n                <th style=\\\"width: 10%;\\\">#Task</th>\\n                <th style=\\\"width: 10%;\\\">Date</th>\\n                <th style=\\\"width: 12,5%;\\\">Registered Points</th>\\n                <th style=\\\"width: 12,5%;\\\">Estimated Points / Tasks Points</th>\\n                <th style=\\\"width: 12,5%;\\\">Completed Points / Tasks Points</th>\\n                <th style=\\\"width: 12,5%;\\\">Project Creator / Tasks Assigned</th>\\n                <th style=\\\"width: 20%;\\\">Description</th>\\n                </thead>\\n                <tbody *ngIf=\\\"tableinfo && tableinfo.length > 0\\\">\\n                <tr *ngFor=\\\"let tb of tableinfo\\\">\\n                    <td *ngIf=\\\"tb.proj_id\\\"> {{tb.proj_id}} </td>\\n                    <td *ngIf=\\\"!tb.proj_id\\\"> - </td>\\n                    <td> {{tb.task_id}} </td>\\n                    <td> {{tb.dail_date}} </td>\\n                    <td> {{tb.dail_points}}</td>\\n                    <td> {{tb.task_points}}</td>\\n                    <td> {{tb.task_pointsd}}</td>\\n                    <td> {{tb.task_assigned}} </td>\\n                    <td> \\n                    <div style=\\\"height: 92px; overflow: scroll;\\\">\\n                        {{tb.task_subject}} \\n                        </div>\\n                    </td>\\n                </tr>\\n                </tbody>\\n            </table>\\n        </div>\\n  \\n        </div>\\n      </ng-template>\\n      <ng-template [ngIf]=\\\"isLoading\\\">\\n        <div class=\\\"col-xs-10 empty-report\\\">\\n          <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\"></i>\\n          <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n        </div>\\n      </ng-template>\\n      <ng-template [ngIf]=\\\"emptyReport\\\">\\n        <div class=\\\"col-xs-10 empty-report\\\"> \\n          No data\\n        </div>\\n      </ng-template>\\n    </div>\\n\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdReport\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff; font-size: 20px;\\\"></i>\\n          report\\n          <button type=\\\"button\\\" class=\\\"close-params\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\"></h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>Group</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>Group</p>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>Start Date:</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>Start Date</p>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>End Date:</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>End Date</p>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>Points:</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>Points</p>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-3\\\">\\n              <label>Description:</label>\\n            </div>\\n            <div class=\\\"col-xs-6\\\">\\n              <p>Description</p>\\n            </div>\\n          </div>\\n        </div>\\n\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdAddReport\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <i class=\\\"sq sq-sprints\\\" aria-hidden=\\\"true\\\" style=\\\"color:#fff;\\\"></i>\\n          <span>NEW REPORT</span>\\n          <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title\\\"></h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <!-- .row -->\\n        </div>\\n        <!-- modal-body -->\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            \\n          </div>\\n        </div>\\n        <!-- modal-footer -->\\n      </div>\\n      <!-- modal-content -->\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n  \\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/sprint/reports.template.html\n// module id = 869\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"guideburdown\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i>BURNDOWN GUIDE\\n      <small style=\\\"font-size:15px;\\\">User Guide</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li><a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      <li class=\\\"active\\\">Burndown Guide</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\" id=\\\"guideDashboard\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px;\\\">\\n        <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\" >\\n          <a href=\\\"../../../pdf/burndown_guide.pdf\\\" download=\\\"burndown_guide\\\" style=\\\"text-decoration: none;\\\">\\n            <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n            <p class=\\\"textDownload_userGuide\\\">Download</p>\\n          </a>\\n        </div>\\n      </div>\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n        <div class=\\\"col-md-8\\\" style=\\\"text-align: center\\\">\\n          <img src=\\\"img/nuevomanual/dashboard.png\\\" style=\\\" width: 80%; height: 395px;\\\">\\n        </div>\\n        <div class=\\\"col-md-4\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Dashboard</h3>\\n          <p style=\\\"margin-bottom: 30px; padding-right: 118px;\\\">\\n            Once you have logged in, you will land on the dashboard module.\\n            This main screen contains at the upper side of the screen\\n            a 5 section banner, each section has a different color,\\n            representing one status each. If your profile is \\\"Regular\\n            User\\\" the information displayed here will be that related\\n            to those tasks that are assigned to you.\\n          </p>\\n          <br>\\n          <br>\\n          <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0; padding-top: 20px;\\\">\\n            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\" id=\\\"guideBurndown\\\">Burndown</h3>\\n            <p>On this chart you can see the <br> progress to your team or just to yourself.</p>\\n          </div>\\n\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n          <img src=\\\"img/nuevomanual/7.png\\\" style=\\\"width: 70%; border-radius: 20px; margin-bottom: 15px;\\\" alt=\\\"\\\">\\n          <p style=\\\"text-align: left;padding-left: 50px;\\\">You can click on line chart to use the specific <br>\\n            information of day job</p>\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/guide/3.png\\\" style=\\\" width: 80%; border-radius: 20px;\\\"><br>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px; \\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n          <img src=\\\"img/guide/4.png\\\" style=\\\"width: 78%; height: 424px;\\\" alt=\\\"\\\">\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <p style=\\\"margin-top: 113px;\\\">\\n            In order to review the progress of your team, a specific member or <br>\\n            the whole team, click the \\\"your work team\\\" option, and select a <br>\\n            departament from the menu. <br>\\n            <br>\\n            The following window will show when clicking on the \\\"Your work <br>\\n            team\\\" menu. Here you will see every departament and will be able to <br>\\n            get the progress chart according to the team selected if your Role in <br>\\n            the system is \\\"Administrator\\\". <br>\\n            <br>\\n            If your role is regular user, your name will be the only one listed here. <br>\\n            If your role ir \\\"Head of Departament\\\" you will access to all team <br>\\n            members of your group only.\\n          </p>\\n        </div>\\n      </div>\\n      <div id=\\\"guideNotifications\\\" class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"font-size: 17px;margin-top: 40px;padding-left: 6%;\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Notificacions</h3>\\n          <br>\\n          <p>\\n            The notifications containing all actions related to the <br>\\n            task assigned to you, comments made on your task, <br>\\n            and projects where you are a part of. <br>\\n            <br>\\n            You can click on the main action button of each <br>\\n            notification, this will show you information related to <br>\\n            that item. <br>\\n            <br>\\n            <em>Note: The notifications list/time line has 2 options at the <br>\\n              top, a collapse button that will hide all notifications and <br>\\n              an eraser, which will clear all your notifications.</em>\\n          </p>\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/guide/5.png\\\" style=\\\"width: 84%;\\\" alt=\\\"\\\">\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\">\\n        <div class=\\\"col-xl-12 col-sm-12 col-md-6 col-lg-6\\\">\\n          <img src=\\\"img/nuevomanual/10.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n        </div>\\n        <div class=\\\"col-xl-12 col-sm-12 col-md-6 col-lg-6\\\">\\n          <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top: 40px\\\">\\n            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">On Top</h3>\\n            <br>\\n            <p>You can view the notifications about tasks on right top:</p>\\n          </div>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\" id=\\\"viewtask\\\">\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/nuevomanual/11.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n        </div>\\n        <div class=\\\"col-md-6\\\" id=\\\"viewtask\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\"><i class=\\\"fa fa-angle-double-right\\\"\\n              aria-hidden=\\\"true\\\"></i> Task Info</h3>\\n          <br>\\n          <p style=\\\"font-size: 15px;\\\">\\n            The options \\\"View task\\\" will show the following\\n            window, containing the essential information of that\\n            task, on the first section you can find the Task number,\\n            description, creator, creation date, points assigned and developed,\\n            and the Comments that have been made for that task will be found here <br>\\n            <br>\\n          </p>\\n\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\"><i class=\\\"fa fa-angle-double-right\\\"\\n              aria-hidden=\\\"true\\\"></i> Leave a comment</h3>\\n          <br>\\n          <p style=\\\"font-size: 15px;\\\">\\n            Also, you can publish a new message on this task, click <br>\\n            on the 'Leave a Comment' button, type the message\\n            and click on \\\"Publish\\\" button.\\n            <br>\\n          </p>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: right; font-size: 16px;\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0;\\\"> Project Related <i\\n              class=\\\"fa fa-angle-double-left\\\" aria-hidden=\\\"true\\\"></i></h3>\\n          <br>\\n          <p>\\n            On the second section you<br>\\n            can find the information<br>\\n            about the project related to <br>\\n            this task.\\n            <br>\\n          </p>\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/nuevomanual/12.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/nuevomanual/13.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n        </div>\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: left; font-size: 16px; margin-top: 70px;\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0;\\\"><i class=\\\"fa fa-angle-double-right\\\"\\n              aria-hidden=\\\"true\\\"></i> Adjustments </h3>\\n          <br>\\n          <p>\\n            On the third section you can find the exactly <br>\\n            information on adjustments done about this task , if was <br>\\n            extended there will show the new delivery time and the <br>\\n            task points. You can know how many times the task was <br>\\n            extended.\\n            <br>\\n          </p>\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"col-md-6\\\" style=\\\"text-align: right; font-size: 16px; margin-top: 32px; padding-right: 0;\\\">\\n          <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0;\\\">\\n            Timeline\\n            <i class=\\\"fa fa-angle-double-left\\\" aria-hidden=\\\"true\\\"></i>\\n          </h3>\\n          <br>\\n          <p>\\n            On the fourth section show <br>\\n            timeline of registered points <br>\\n            on the daily.\\n            <br>\\n          </p> <br>\\n          <p>\\n            Note: On the fifth section will show the related form if the task <br>\\n            was created as a request on request module (to see more) <br>\\n            information go to request section), if the task was created as a <br>\\n            regular task this section will be empty.\\n          </p>\\n        </div>\\n        <div class=\\\"col-md-6\\\">\\n          <img src=\\\"img/nuevomanual/14.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n        </div>\\n      </div>\\n\\n      <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\">\\n        <div class=\\\"col-xl-12 col-sm-12 col-md-6 col-lg-6\\\">\\n          <img src=\\\"img/nuevomanual/15.png\\\" alt=\\\"\\\" style=\\\"width: 100%\\\">\\n        </div>\\n        <div class=\\\"col-xl-12 col-sm-12 col-md-6 col-lg-6\\\">\\n          <div class=\\\"col-xl-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-top:100px;\\\">\\n            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0;\\\"><i class=\\\"fa fa-angle-double-right\\\"\\n                aria-hidden=\\\"true\\\"></i> Sprint Related </h3>\\n            <br>\\n            <p> On the sixth section will show the sprint information. </p>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px; margin-bottom: 30px;\\\">\\n        <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\" >\\n          <a href=\\\"../../../pdf/burndown_guide.pdf\\\" download=\\\"burndown_guide\\\" style=\\\"text-decoration: none;\\\">\\n            <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n            <p class=\\\"textDownload_userGuide\\\">Download</p>\\n          </a>\\n        </div>\\n      </div>\\n\\n\\n    </div>\\n  </section>\\n</section>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/userguide/guideburndown.template.html\n// module id = 870\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"guideburdown\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> PROJECTBOARD GUIDE\\n            <small style=\\\"font-size:15px;\\\">User Guide</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li><a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            <li class=\\\"active\\\">ProjectBoard Guide</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" id=\\\"guideViewproject\\\">\\n        <!-- Section #guideViewproject -->\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px;\\\">\\n                <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\">\\n                    <a href=\\\"../../../pdf/project_board_guide.pdf\\\" download=\\\"project_board_guide\\\" style=\\\"text-decoration: none;\\\">\\n                        <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n                        <p class=\\\"textDownload_userGuide\\\">Download</p>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-md-3\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Projectboard</h3>\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">View Project</h3>\\n                    <p>\\n                        \\\"View Project\\\" option, will show the following screen, containing detailed\\n                        information of the project (Name of the Project, Creator, Group Assigned, Category,\\n                        Description, Tasks assigned to the project and Comments that have been made for that\\n                        project will be found here). In the middle of the modal will appear 3 icons, the firts\\n                        one will be active and will show on the right side the list of associated task to this\\n                        project, you can see more information to each task click on the button \\\"view more\\\" it\\n                        would be redirecting to another page to show that information.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-md-9\\\" style=\\\"text-align: center\\\">\\n                    <img src=\\\"img/nuevomanual/44.png\\\" style=\\\" width: 80%; height: 395px;\\\">\\n                </div>\\n                <div class=\\\"col-md-9\\\" style=\\\"text-align: center\\\">\\n                    <i class=\\\"fa fa-angle-double-down\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 42px; margin-top: 20px; color: rgb(35,121,205);\\\"></i>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                    <img src=\\\"img/nuevomanual/17.png\\\" style=\\\" width: 80%; margin-top: 20px;\\\">\\n                </div>\\n\\n                <div class=\\\"col-md-6\\\" style=\\\" margin-top: 30px;\\\">\\n                    <p>\\n                        When you select the second icon on the right side will show the list\\n                        of associated comments to this project, you can add more comments typing a new comment\\n                        and click on the button \\\"plus icon\\\".\\n                    </p>\\n                    <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 42px; color: rgb(35,121,205);\\\"></i>\\n                    <img src=\\\"img/nuevomanual/18.png\\\" style=\\\" width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Taskboard</h3>\\n                <p>\\n                    To access the Taskboard, on the Main navigation menu, click on the \\\"Main Control\\\" dropdown menu,\\n                    select the option called \\\"Taskboard\\\". <br><br>\\n                    Taskboard allows users (Administrators, Project Managers, Team leads and Team members) access a\\n                    graphic representation of what the status of development of the current tasks is. <br><br>\\n                    When using the taskboard you will find on top there are two buttons (to see requests and to apply a\\n                    filter), on a main screen divided in 5 columns, which are Backlog, Pending, Developing, Improving\\n                    and Complete. These columns contain all tasks that are currently in the system, according to the\\n                    user that is logged in to Squadlinx.\\n                </p>\\n                <img src=\\\"img/nuevomanual/19.png\\\" style=\\\"width: 100%;margin-bottom: 30px\\\" alt=\\\"\\\">\\n\\n                <p>There are 4 color codes for the task titles, green, yellow, red and grey</p>\\n                <ul>\\n                    <li class=\\\"listtask\\\"><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color: rgb(255,0,75)\\\"></i>\\n                        Red - Delivery date is between 1 - 3 days from the current date.</li>\\n                    <li class=\\\"listtask\\\"><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color: rgb(247,170,0)\\\"></i>Yellow\\n                        - Delivery date is between 3 - 5 days from the\\n                        current date.</li>\\n                    <li class=\\\"listtask\\\"><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color: rgb(105,195,82)\\\"></i>\\n                        Green - Delivery date is greater than 5 days from the current date.</li>\\n                    <li class=\\\"listtask\\\"><i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color: rgb(179,188,191)\\\"></i>Grey\\n                        - Backlog tasks. This tasks do not expire since\\n                        they are in the backlog status still.</li>\\n                </ul>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-4\\\" style=\\\" padding-top: 52px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-bottom: 22px\\\">Main Filter <img src=\\\"img/nuevomanual/filter.svg\\\"\\n                            style=\\\"width:40px\\\"> </h3>\\n                    <p>\\n                        This button always will appear on top, if you are head of a team and have many task on your\\n                        task\\n                        board, you can filter by product, project, or by an specific user. The following window will\\n                        show when clicking on the \\\"filter\\\" button (filter icon), this 3-column window contains three\\n                        different criteria that can be used to filter down the taskboard: <br><br>\\n                        First filter - Products (on left side) <br><br>\\n                        Second filter - Projects (on middle)<br><br>\\n                        Third filter - User assigned (on right side) <br><br>\\n                        All three filters can be selected and the results will show according to the selection, to\\n                        close\\n                        and finish this process just click on \\\"Done\\\" button located on right side bottom.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-8\\\" style=\\\" padding-top: 52px;\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-1\\\" id=\\\"iconMainfil\\\">\\n                        <i aria-hidden=\\\"true\\\" class=\\\"fa fa-angle-double-left\\\" style=\\\"color:rgb(35,121,205); margin-top: 86px; font-size: 50px;\\\"></i>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-11\\\">\\n                        <img src=\\\"img/nuevomanual/20.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-8\\\" style=\\\" padding-top: 52px;padding-left: 0\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-11\\\">\\n                        <img src=\\\"img/nuevomanual/20.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                    </div>\\n                    <div id=\\\"iconRequest\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-1\\\">\\n                        <i aria-hidden=\\\"true\\\" class=\\\"fa fa-angle-double-right\\\" style=\\\"color:rgb(35,121,205); margin-top: 86px; font-size: 50px;\\\"></i>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-4\\\" id=\\\"requestTask\\\" style=\\\"padding-top: 52px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-bottom: 22px\\\">Requests on Taskboard<img\\n                            src=\\\"img/nuevomanual/imgrequests.png\\\" style=\\\"width:40px\\\"> </h3>\\n                    <p>\\n                        This button will appear on top if the user have been assigned at least one request. <br><br>\\n                        The following window will show when clicking on the \\\"Request\\\" button (speaker icon) <br><br>\\n                        Where you will see two sections, the first one (on the left side) shows a list of request\\n                        located, the second one (on the right side) shows request information, you will be able to turn\\n                        out this request on a task updating delivery date and points, to save changes click on \\\"Save\\\"\\n                        button located on bottom, to close and finish this process just click on \\\"close\\\" blue button\\n                        located on right side bottom.\\n                    </p>\\n                </div>\\n            </div>\\n\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 10%;margin-top: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">TASK CARD STRUCTURE</h3>\\n                <div style=\\\"text-align: center; \\\">\\n                    <img src=\\\"img/guide/Captaskcard.png\\\" style=\\\"width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 10%;margin-top: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">TASK CARD STRUCTURE</h3>\\n                <p>Each task displayed on taskboard according with the its status will be available certain of the next\\n                    actions:</p>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-adjust-duration\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Adjust Duration\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this a modal will show up, <br> where user have to type the reasons\\n                            for the adjust <br> and define the new delivery date.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-add\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Add a Tag\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this action a modal will show up <br> with a list of user's tags,\\n                            where can select a tag or <br> create a new one.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-record-progress\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Record Progress\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this action a modal will show up, <br> where user have to type the\\n                            description of <br> activities done for the task, select a date and <br> indicates the\\n                            number of points to register.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-sprints\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Add or delete from sprint\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this action a modal will show up <br> with a list of last 2 sprint\\n                            ,\\n                            where can select an sprint <br> with the checkbox or select none.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-close-bg\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Reject Task\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a user click on this action a modal will show up <br> where user have to type the\\n                            reasons for the rejection.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-backlog\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to backlog\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to backlog, means that the <br> task stays on sleep, until the user\\n                            decided to reject it <br> or move it to pending to work on it.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-pending\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to pending\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to pending, means that the <br> user wants to work soon on that\\n                            task.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-setup\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to developing\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to developing, means that the <br> user wants start to work on it.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 \\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-improving\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to improving\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to improving, means that the <br> task needs improvements.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-completed\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Move task to completed\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>When a task is moved to improving, means that the <br> task is finished.</p>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-5 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Status Task</h3>\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">BACKLOG</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            Tasks can be modified in this section, when a task is in the backlog it cannot be worked\\n                            on,\\n                            actions are restricted to a limited set of options. <br><br>\\n                            These tasks don't add up to the total amount of points for the current sprint, add can be\\n                            dragged or moved using the options button. <br><br>\\n                            The available actions for this status are:\\n                        </P>\\n                        <img src=\\\"img/nuevomanual/23.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/24.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">PENDING</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            At the top right corner of the column, a number of points is displayed <br><br>\\n                            automatically, this number indicates the amount of points that are still available to be\\n                            worked on or \\\"Pending\\\". <br><br>\\n                            If a task with 5 points assigned has been extended and now has 10 points assigned but 5\\n                            points were already used, the total will not show 10 but 5 instead. <br><br>\\n                            The available actions for this status are:\\n                        </P>\\n                        <img src=\\\"img/nuevomanual/25.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/26.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">DEVELOPING</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            At the top right corner of the Developing column a number is shown indicating the amount of\\n                            points used or worked during the current day. Task in this column correspond to the actual\\n                            work being performed by the user during the sprint. <br><br>\\n                            Once a task is completed (All points used) must be placed in the \\\"Complete\\\" column by\\n                            dragging the tile over, or using the actions button. <br><br>\\n                            if a task needs more time to be completed, users can extend it using the actions button ->\\n                            extend task and put a reason for extending the task, a new delivery date and the points to\\n                            be extended. <br><br>\\n                            The available actions for this status are:\\n                        </P>\\n                        <img src=\\\"img/nuevomanual/27.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/28.png\\\" style=\\\"width: 70%;    padding-top: 100px;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">IMPROVING</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            At the top right corner of this column a number showing the total amount of points (pending\\n                            and worked) of the tasks that are currently sitting in this status.\\n                        </P>\\n                        <p>\\n                            When a task has been completed, a supervisor or QA will verify the completeness of it. If\\n                            any issue is found or the person performing the review considers the task is missing\\n                            something, they will send the task to this status and the user assigned to it will be\\n                            notified.\\n                        </p>\\n                        <p>\\n                            This status works as an intermediate phase between completed and developing. This allows\\n                            users to hold off on those task under improving and move them to developing when they are\\n                            actually going to work on them. <br><br>\\n                            The available actions for this status are:\\n                        </p>\\n                        <img src=\\\"img/nuevomanual/29.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/30.png\\\" style=\\\"width: 70%;    padding-top: 50px;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom:50px\\\">\\n                <div class=\\\"col-md-6\\\" style=\\\"padding-left: 50px; padding-right: 80px;\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">COMPLETE</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-right: 1px solid darkgray\\\">\\n                        <P>\\n                            When a task is moved to the 'Complete' status it indicates it has been finished by the user\\n                            assigned to it, however an extra step is needed before the task is removed from the\\n                            taskboard.\\n                        </P>\\n                        <p>\\n                            Tasks need to be closed by someone who has the right permits to do so, for instance, if the\\n                            task wasn't created by the same person the task is assigned to, the user will not be able\\n                            to\\n                            close it.\\n                        </p>\\n                        <p>\\n                            However, tasks can be sent to the improving section by the QA or testing departament or a\\n                            supervisor. <br><br>\\n                            The available actions for this status are:\\n                        </p>\\n                        <img src=\\\"img/nuevomanual/31.png\\\" style=\\\"width: 70%;\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6\\\">\\n                    <img src=\\\"img/nuevomanual/32.png\\\" style=\\\"width: 70%;    padding-top: 50px;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 60px;\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">How to adjust a task</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"col-xs-12 col-sm-11 col-md-11 col-lg-11\\\">\\n                            <p>\\n                                Under the Developing status users can adjust duration of a task on two instances, when\\n                                the points assigned to do the task already used or when the task finished on less time\\n                                than expected, the user will click on the Actions menu and select the option \\\"Adjust\\n                                duration\\\". <br>\\n                                The following window will show.\\n                            </p>\\n                            <p>\\n                                <i>Note: if you are going to add points the number must be positive if not must be\\n                                    negative.</i>\\n                            </p>\\n                            <p>\\n                                This window contains the vital information of the task and 3 input fields at the\\n                                bottom.\\n                                The first one is the New delivery date of the task, the second one for register the\\n                                amount of points to add or remove and a text description to the reason for adjustment.\\n                            </p>\\n                            <p>\\n                                Once all fields have been field, and the Save button clicked, the alert on the right\\n                                will show at the top right side of the screen, letting the user know the task has been\\n                                saved.\\n                            </p>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-1 col-md-1 col-lg-1\\\">\\n                            <i aria-hidden=\\\"true\\\" id=\\\"ajustaskicon\\\" class=\\\"fa fa-angle-double-right\\\" style=\\\"color:rgb(35,121,205); margin-top: 6px; font-size: 50px;\\\"></i>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"text-align: center; margin-top: 30px;margin-top: 30px;margin-bottom: 30px;\\\">\\n                            <img src=\\\"img/nuevomanual/successful1.svg\\\" alt=\\\"\\\" style=\\\" width: 70%; \\\">\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/nuevomanual/33.png\\\" alt=\\\"\\\" style=\\\" width: 100%; \\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                    <h3 style=\\\"color: rgb(35,121,205); font-weight: bold; margin-bottom: 40px; padding-left: 32px;\\\">How\\n                        to record the progress of a task on Taskboard?</h3>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <p>\\n                                Under the Developing status users can register their work for the day. According to the\\n                                points designated for the dar during the sprint planning meeting, the user will click\\n                                on\\n                                the Actions menu and select the option \\\"Record Progress\\\". The following window will\\n                                show.\\n                            </p>\\n                            <p>\\n                                This window contains the vital information of the task and 3 input fields at the\\n                                bottom.\\n                                The first field is the Date that user will record the points for. A points field,\\n                                indicating the amount of points that were used and a text description, specifying what\\n                                was done.\\n                            </p>\\n                            <p>\\n                                Different validations are ran, however one of the most important is that the system\\n                                will\\n                                not allow the amount of points recorded to be greater than the points assigned to the\\n                                task.\\n                            </p>\\n                            <p>\\n                                Once all fields have been field, and the Save button clicked, the alert on the right\\n                                will show at the top right side of the screen, letting the user know the Daily has been\\n                                saved.\\n                            </p>\\n                        </div>\\n\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"text-align: center;margin-top: 30px;margin-bottom: 30px;\\\">\\n                            <img src=\\\"img/nuevomanual/successful1.svg\\\" alt=\\\"\\\" style=\\\" width: 70%; \\\">\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/nuevomanual/34.png\\\" alt=\\\"\\\" style=\\\" width: 100%; \\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-2\\\">\\n                    <h3 style=\\\"color: rgb(35,121,205); font-weight: bold; margin-bottom: 40px;\\\">Projectboard</h3>\\n                    <p>\\n                        To access the Projectboard, on the Main navigation menu, click on the \\\"Main Control\\\" dropdown\\n                        menu, select the option called \\\"Projectboard\\\". <br>\\n                        Projectboard allows users (Administrators, Project Managers and Team leads) access a graphic\\n                        representation of what the status of development of the current project are.\\n                    </p>\\n                    <p>\\n                        When using the Projectboard you will find on a main screen divided in 4 column, which are\\n                        Planning, Build Up, Implementation and Close up. These columns contain all projects that are\\n                        currently in the system.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-10\\\">\\n                    <img src=\\\"img/nuevomanual/44.png\\\" style=\\\"width: 100%; \\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <h3 style=\\\"color: rgb(35,121,205); font-weight: bold; margin-bottom: 40px;\\\">Action menu</h3>\\n                <p>Each task displayed on the Projectboard according with the its status will be available certain of\\n                    the next actions:</p>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-planning\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Planning\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>Projects listed in this section stays on sleep, until the user decided to work on it.</p>\\n                        <p>The projects will be here until some task related with this project register some <br>\\n                            progress, the system automatically change the status to Build Up.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-buildup\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Build Up\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>Projects listed in this section has related task on development.</p>\\n                        <p>The only available action for this status is:</p>\\n                        <img src=\\\"img/nuevomanual/toimplementation.svg\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-implementation\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Implementation\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>The projects listed in this section have completed their development stage.</p>\\n                        <p>The available action for this status are:</p>\\n                        <img src=\\\"img/nuevomanual/tobuildup.svg\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"padding-left: 78px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"sq sq-closeup\\\" style=\\\"font-size: 35px;position: relative; top: 8px; margin-right: 22px;\\\"></i>\\n                            Close Up\\n                        </h3>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 borderes-guide\\\" style=\\\"border-top:2px solid darkgray;\\\">\\n                        <p><br>The projects listed in this section have finished and all its task are closed. <br> The\\n                            available actions for this status are:</p>\\n                        <img src=\\\"img/nuevomanual/tobuildup2.svg\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n            </div>\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-sm-12 col-md-3\\\" style=\\\"margin-top: 20px\\\">\\n                    <h3 style=\\\"color: rgb(35,121,205); font-weight: bold; margin-top: 0;\\\">Workflow</h3>\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">tasklist</h3>\\n                    <p>\\n                        <br>In order to access the Tasks module, go to the main menu and click\\n                        the dropdown title \\\"Workflow\\\", according to your profile a set of options will be\\n                        shown, click \\\"Tasks\\\".\\n                        <br>\\n                        <br>\\n                        Once inside the module, the following view is displayed. A set of different buttons can\\n                        be found there, will a different actions each, such as Add, Close, Delete, Reopen and Refresh.\\n                        A search section, a column located on the left side of the screen with different categories and\\n                        a main\\n                        menu which can be used to filter the results and table where all the information related to\\n                        each\\n                        of the tasks in the\\n                        system can be found.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-9\\\" style=\\\"text-align: center; margin-top: 20px\\\">\\n                    <img src=\\\"img/guide/Cap.png\\\" style=\\\"width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-12\\\" style=\\\"margin-top: 20px\\\">\\n                    <p>\\n                        Note: The task-list (table) contains the following information: Date, task number, creator,\\n                        user\\n                        assigned to the task, description, project related, sprint related and actions.\\n                    </p>\\n                    <br>\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Appearance</h3>\\n                    <p>\\n                        The task information will have an specific color according with its status. For task closet the\\n                        background color will light gray, for deleted task the font color will be red. The action\\n                        buttons also change, for deleted task only will appear the quick view button, and on the closed\\n                        task will appear the reopen task button instead the close button.\\n                    </p>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have four options: filter by text, category, status or by page</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/14.png\\\" style=\\\"margin-top: 22px; width: 85%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by text\\n                        </h3>\\n                        <p>You can search an specific task typing a keyboard on top, which will effect the results\\n                            displayed on the table.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/15.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by category\\n                        </h3>\\n                        <p>Filter by category: To filter the results, you can click on the categories of the left-side\\n                            column or on the 'status' menu that is displayed at the top the table. When a category is\\n                            selected, a blue border can be seen on the right side of the box, indicating what category\\n                            is currently active.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/16.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 100px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by status\\n                        </h3>\\n                        <p>\\n                            As explained above, when a status is selected its bottom border turns light-blue. <br>\\n                            Note: \\\"At anytime given you can select a different category and a different status, which\\n                            will effect the results displayed on the table\\\".\\n                        </p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/17.png\\\" style=\\\"width: 72%; margin-top: 24px;\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by page\\n                        </h3>\\n                        <p>\\n                            You can navigate across the results of table, you can click on buttons angle left or angle\\n                            right to see previous and next results respectively. Also you can go directly to the first\\n                            or last page.\\n\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;font-size: 18px\\\">On top the table:</h3>\\n                <p>\\n                    The actions add, close, delete, reopen and refresh can be found on top of the table.\\n                </p>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 12%;margin-top: 40px; margin-bottom: 40px\\\">\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/newtask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Create a New task</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/closetask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Close a task</p>\\n                    </div>\\n\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/deletetask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Delete a task</p>\\n                    </div>\\n\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/reopentask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Reopen a closed task</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/reloadtask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Reload the page</p>\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <ul style=\\\"list-style: none\\\">\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                            In order to create a new task,\\n                            click the first button. Once this button is clicked a window will be show requesting the\\n                            user to fill out the information needed to create a new task.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>Select\\n                            a least one task to be\\n                            re-opened, closed or deleted, using the checkbox that will be shown on the firts column for\\n                            each task. When at least a task is selected the colors will turn brighter, indicating the\\n                            buttons are now active. When any of these 3 buttons is clicked, a confirmation dialog will\\n                            show.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>To\\n                            re-open, close or delete a\\n                            task you can do it using the action buttons described above, or you can use the bulk action\\n                            buttons at the top of the screen. These buttons will remain disabled (faded) if no task is\\n                            currently selected.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                            Refresh button, click on this\\n                            option in order to Refresh the task lists if you need to update it. \\\" The system keeps the\\n                            list up to date automatically.\\\"\\n                        </li>\\n                    </ul>\\n\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3> <br>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <i class=\\\"sq sq-view guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-quickedit  guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"fa fa-times-circle-o  guide-actions\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-eliminar guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-sprints  guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                    </div>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Inside the table:</h3>\\n                        <p>\\n                            The actions quick view, edit, close, delete, add to a sprint that can be found in front of\\n                            each task.\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-view \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Quick view (magnifiying\\n                            galss)\\n                        </h3>\\n                        <p>\\n                            When this option is selected, the <br>\\n                            following window will be displayed, <br>\\n                            containing some information related to <br> the task.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/18.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Quick view -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-quickedit \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Edit (Pencil)</h3>\\n                        <p>\\n                            A window with edition options will<br>\\n                            show. All data of the task can be edited <br>\\n                            such as: Subject, product, user <br>\\n                            assigned, delivery date, points, project <br>\\n                            assigned and task description. Nothing <br>\\n                            will be saved unless the \\\"Save\\\" button <br>\\n                            is clicked.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/19.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Edit -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"fa fa-times-circle-o\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Close (X)</h3>\\n                        <p>\\n                            if you need to close a task, click on the <br> 'x' button, a confirmation dialog will <br>\\n                            then show up requiring you to confirm <br> the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/20.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Close -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-eliminar\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Delete (trash can)</h3>\\n                        <p>\\n                            Delete (trash can) if you need to delete<br> a task (erasing all content related to it <br>\\n                            in the system) click on this button, a<br> confirmation dialog will show up, <br> requiring\\n                            you to confirm the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/20.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Deleted -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-sprints\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Add to sprint (flag)</h3>\\n                        <p>\\n                            If you need to add or delete a task from a<br> sprint click on this button, a modal will\\n                            <br> show up with a list of last 2 sprint, you<br> can select an sprint with the checkbox,\\n                            or <br> you can can select none. Nothing will be <br> saved unless the \\\"Save\\\" button is\\n                            clicked.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/21.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">How to create a Task?</h3>\\n                        <i class=\\\"sq sq-create-new-task\\\" style=\\\"font-size: 44px; color: rgb(35,121,205); position: relative; box-sizing: border-box; border: 2px solid #d2d6de; border-radius: 10px; vertical-align: bottom; position: relative;\\\"></i>\\n                        <p>\\n                            To create a Task you must click on a first <br>button (with a plus thumbtack) the next\\n                            window <br>will be shown requesting the\\n                            user to fill out<br> the information needed to create a new Task.<br> The fields subject,\\n                            product, Assign to (user),<br> delivery\\n                            date, points and description are <br>mandatory. Once the mandatory fields have <br>been\\n                            filled, and the Save button clicked,\\n                            the <br>alert on the right will show at the top <br>right side of the screen, letting the\\n                            user know<br> the Task has been created. <br><br>\\n                            Note: if the user does not select any sprint,<br> the task automatically save under backlog\\n                            status.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/newtask.png\\\" style=\\\"width: 100%; border-radius:13px;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Task</h3>\\n                <p style=\\\"padding-bottom: 15px;\\\">To get a detailed view of a specific task you can click on any field\\n                    of\\n                    the task on task list.</p>\\n                <img src=\\\"img/guide/22.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                <p style=\\\"padding-top: 20px;\\\">The following screen will be shown, containing all data related to the\\n                    task selected (1), such as information of the task, a progress bar,\\n                    attachments (files), a comments section (2) and a section showing the activities associated to the\\n                    task (3). </p>\\n                <img src=\\\"img/guide/23.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Add comments on a task</h3>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/24.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\" style=\\\"margin-bottom: 25px\\\">\\n                    <p class=\\\"textask\\\"> If you wish to leave a comment or note to a <br> task, go to the comments box\\n                        (section 2) <br> and type the comment you want to post, <br> the click on the following button\\n                        to publish <br> the comment.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/25.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\" style=\\\"margin-bottom: 25px\\\">\\n                    <p class=\\\"textask\\\"> Your comment will be show an the end of <br> the time-line. On the upper side\\n                        of\\n                        the <br> screen a notification will pop up, letting you <br> know your note was successfully\\n                        added.<br> However if the notification is not loaded, a <br> warning will show up.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/26.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\" style=\\\"margin-bottom: 25px\\\">\\n                    <p class=\\\"textask\\\"> You can also send a reply to a comment, to <br> do so, once you have found a\\n                        comment <br> click on the \\\"reply the comment\\\" and start <br> typing your reply. After writing\\n                        your <br> comment, click on the ligth blue \\\"text\\\" <br> button to send the reply.\\n                    </p>\\n                </div>\\n\\n                <div class=\\\"col-md-12 col-lg-12\\\">\\n                    <p>\\n                        The \\\"activities\\\" section (3), will show all actions related to the task, giving you a preview\\n                        of\\n                        the Daily with essential information, such\\n                        as the creation date and time of the daily, as well as the amount of points that were\\n                        registered.\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-4\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Projects</h3>\\n                    <p>To access the Projects modules, click on the \\\"Projects\\\" option of the main menu, after clicking\\n                        on the Dropdown title \\\"Worflow\\\".<br><br>\\n                        Once you have selected the Projects option, the following screen will be displayed, containing\\n                        a\\n                        search section, a column on the right side of the window will show a menu with different\\n                        categories, and a status menu which you can use to filter down the results. <br><br>\\n                        Note: The main content of the screen is a table where you can find all the information related\\n                        to every project in the system. The project list (table) will show you the following\\n                        information: Start date, project number, project creator, applicant, subject, a closed by\\n                        column, percentage of completion, and a tool-box (Actions).\\n                    </p>\\n\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-8\\\">\\n                    <img src=\\\"img/guide/27.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n        </div>\\n    </section> <!-- End Section #guideViewproject -->\\n\\n    <section class=\\\"content\\\" id=\\\"guideFilters\\\">\\n        <!-- Section #guideFilters -->\\n        <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0;\\\">\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-top: 40px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have four options: filter by text, category, status or by page</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/14.png\\\" style=\\\"margin-top: 22px; width: 85%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by text\\n                        </h3>\\n                        <p>You can search an specific task typing a keyboard on top, which will effect the results\\n                            displayed on the table.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/15.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by category\\n                        </h3>\\n                        <p>Filter by category: To filter the results, you can click on the categories of the left-side\\n                            column or on the 'status' menu that is displayed at the top the table. When a category is\\n                            selected, a blue border can be seen on the right side of the box, indicating what category\\n                            is currently active.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/16.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 100px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by status\\n                        </h3>\\n                        <p>\\n                            As explained above, when a status is selected its bottom border turns light-blue. <br>\\n                            Note: \\\"At anytime given you can select a different category and a different status, which\\n                            will effect the results displayed on the table\\\".\\n                        </p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/17.png\\\" style=\\\"width: 72%; margin-top: 24px;\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by page\\n                        </h3>\\n                        <p>\\n                            You can navigate across the results of table, you can click on buttons angle left or angle\\n                            right to see previous and next results respectively.\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;font-size: 18px\\\">On top the table:</h3>\\n                <p>\\n                    The task (table) contains the following information: Date, task number, creator, user assigned to\\n                    the task, description, project related, sprint related and actions.\\n                </p>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 12%;margin-bottom: 30px;margin-top: 30px\\\">\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/newproject.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Create a new project</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/closeproject.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Close a project</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/deletetask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Delete a project</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/reopentask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Reopen a closed project</p>\\n                    </div>\\n                    <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                        <img src=\\\"img/guide/reloadtask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                        <p class=\\\"title-guide\\\">Reload the page</p>\\n                    </div>\\n                </div>\\n\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <ul style=\\\"list-style: none\\\">\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                            Refresh button, click on this\\n                            option in order to Refresh the task if you need to update it. \\\" The system keeps the list\\n                            up\\n                            to date automatically.\\\"\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                            In order to create a new task,\\n                            click the 'Add' button. Once this button is clicked a window will be show requesting the\\n                            user to fill out the information needed to create a new task.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>Select\\n                            a least one task to be\\n                            re-opened, closed or deleted, using the checkbox that will be shown on the firts column for\\n                            each task.When at least a task is selected the colors will turn brighter, indicating the\\n                            buttons are now active. When any of these 3 buttons is clicked, a confirmation dialog will\\n                            show.\\n                        </li>\\n                        <li class=\\\"list-guide\\\">\\n                            <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>To\\n                            re-open, close or delete a\\n                            task you can do it using the action buttons described above, or you can use the bulk action\\n                            buttons at the top of the screen. These buttons will remain disabled (fadded) if no task is\\n                            currently selected.\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3> <br>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <i class=\\\"sq sq-view guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-quickedit  guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"fa fa-times-circle-o  guide-actions\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-eliminar guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n\\n                    </div>\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Inside the table:</h3>\\n                        <p>\\n                            The actions quick view, edit, close, delete, add to a sprint that can be found in front od\\n                            each task.\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-view \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Quick view (magnifiying\\n                            galss)\\n                        </h3>\\n                        <p>\\n                            When this option is selected, the <br>\\n                            following window will be displayed, <br>\\n                            containing some information related to <br> the task.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/28.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Quick view -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-quickedit \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Edit (Pencil)</h3>\\n                        <p>\\n                            A window with edition options will<br>\\n                            show. All data of the task can be edited <br>\\n                            such as: Subject, product, user <br>\\n                            assigned, delivery date, points, project <br>\\n                            assigned and task description. Nothing <br>\\n                            will be saved unless the \\\"Save\\\" button <br>\\n                            is clicked.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/29.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Edit -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"fa fa-times-circle-o\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Close (X)</h3>\\n                        <p>\\n                            if you need to close a task, click on the <br> 'x' button, a confirmation dialog will <br>\\n                            then show up requiring you to confirm <br> the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/20.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Close -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-eliminar\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Delete (trash can)</h3>\\n                        <p>\\n                            Delete (trash can) if you need to delete<br> a task (erasing all content related to it <br>\\n                            in the system) click on this button, a<br> confirmation dialog will show up, <br> requiring\\n                            you to confirm the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/20.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Deleted -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">The Project</h3>\\n                <p>\\n                    The actions refresh, add, reopen, close and deleted can be found on top of the table.\\n                </p>\\n                <img src=\\\"img/guide/theproject.jpeg\\\" style=\\\"width: 100%;margin-bottom: 25px\\\" alt=\\\"\\\">\\n                <p style=\\\"margin-bottom: 58px\\\">\\n                    the following screen will be shown, containing all data related to project selected to the project\\n                    selected (1), such as basic of the project, a progress <br> bar, a milestones section (2), a\\n                    comments section (3) and a section showing the task associated to the project (4).\\n                </p>\\n                <div class=\\\"col-md-2 col-lg-2\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Milestones</h3>\\n                        <p>\\n                            A milestones is defined as a deliverable of a project. You can see the on a time line all\\n                            the milestones of the\\n                            project (section 2), each milestone has a different color and has a unique date between\\n                            creation and delivery date of the project, you can click on a icon on each milestone to see\\n                            morei nformation. </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-10 col-lg-10\\\">\\n                    <img src=\\\"img/guide/30.png\\\" style=\\\"width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n                <br><br>\\n                <br><br>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top: 40px;\\\">\\n                    <div class=\\\"col-md-6 col-lg-6\\\" style=\\\"text-align: right;\\\">\\n                        <img src=\\\"img/guide/addmilestone.svg\\\" style=\\\"width: 42%;margin-bottom: 20px\\\" alt=\\\"\\\"><i class=\\\"fa fa-angle-double-right milestone-right\\\"\\n                            aria-hidden=\\\"true\\\" style=\\\"font-size: 40px; color: rgb(35,121,205);  margin-left: 10px;\\\"></i>\\n                        <p>\\n                            Also you create a new milestone for the project, once the <br> \\\"Add milestone\\\" button is\\n                            clicked a window will be shown <br> requesting the user to fill out the information needed\\n                            to create <br> a new milestone\\n                        </p>\\n                        <i class=\\\"fa fa-angle-double-down icon-milestone\\\" aria-hidden=\\\"true\\\"></i>\\n                    </div>\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <img src=\\\"img/guide/Capmilestone.png\\\" style=\\\"width: 100%;border-radius: 3%\\\" alt=\\\"\\\">\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-12\\\">\\n                    <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Add a comment on a project\\n                        </h3>\\n                        <p>\\n                            Also you create a new milestone for the project, once the <br> \\\"Add milestone\\\" button is\\n                            clicked a window will be shown <br> requesting the user to fill out the information needed\\n                            to create <br> a new milestone\\n                        </p>\\n                        <i class=\\\"fa fa-angle-double-down\\\" style=\\\"margin-left: 5%; color: rgb(35,121,205); font-size: 30px;\\\"\\n                            aria-hidden=\\\"true\\\"></i>\\n                        <img src=\\\"img/guide/31.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                    </div>\\n                    <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\">\\n                        <div class=\\\"guidediv\\\">\\n                            <i class=\\\"fa fa-angle-double-down doubleUp\\\" style=\\\"margin-left: 45%; color: rgb(35,121,205); font-size: 40px;\\\"\\n                                aria-hidden=\\\"true\\\"></i>\\n                            <i class=\\\"fa fa-angle-double-right doubleRigth\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 40px; color: rgb(35,121,205);  margin-left: 10px;\\\"></i>\\n                            <img src=\\\"img/guide/25.png\\\" style=\\\"width: 85%;border-radius: 3%\\\" alt=\\\"\\\">\\n                            <i class=\\\"fa fa-angle-double-down\\\" style=\\\"margin-left: 40%; color: rgb(35,121,205); font-size: 30px;\\\"\\n                                aria-hidden=\\\"true\\\"></i>\\n                            <p>\\n                                Your comment will be shown at the end time-line, On the upper side of the screen a\\n                                notification will pop up, letting you know your note was successfully added. However if\\n                                the notification is not loaded, a warning will show up.\\n                            </p>\\n                        </div>\\n\\n                    </div>\\n                </div>\\n\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;\\\">Associated task</h3>\\n                    <p>\\n                        The \\\"Task\\\" section (4), will show you all actions related to the task, giving you preview of\\n                        the\\n                        Task with essential information. such as the task number, description, progress bar, and\\n                        delivery date. you can browse through your task by clickingon the navigation buttons left and\\n                        Right. <br><br>\\n                        If you want to access the information of a task, just click on the task number fiel of the\\n                        list.\\n                    </p>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/33.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">REQUESTS</h3>\\n                <p>\\n                    A list containing all requesting, sorted by number, displaying the information related to the\\n                    request, status, creation date, creator, user assigned and request type.\\n                </p>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-9 \\\">\\n                    <img src=\\\"img/guide/34.png\\\" style=\\\"width: 100%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-3 \\\">\\n                    <img src=\\\"img/guide/paginator.svg\\\" style=\\\"width: 100%\\\">\\n                    <p>Note: You can browse through the request, using the navigation buttons 'previous' and 'next'.\\n                        <br><br>\\n                        At the upper section of the main screen a three section banner can be found, 3 colors each one\\n                        representing a Request type: Errors, Improving Action, and Imprementation. <br><br>\\n                        Each section will show the amount of request in the system for that type of request. You can\\n                        find updated information about the request assigned to you or your group and the ones created\\n                        by\\n                        your group. </p>\\n                </div>\\n                <br><br><br><br>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top: 20px; text-align:center\\\">\\n                    <h4 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Show category list</h4>\\n                    <p style=\\\"margin-top: 38px\\\">You can acces the list of categories for <br> each type by clicking on\\n                        the \\\"i\\\" button.</p>\\n                    <img src=\\\"img/guide/info.svg\\\" style=\\\"width: 10%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/35.png\\\" style=\\\"width: 100%\\\">\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top: 20px; text-align:center\\\">\\n                    <h4 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Create a request</h4>\\n                    <p style=\\\"margin-top: 38px\\\">According to the type of request selected,<br> you can create a new\\n                        request by clicking on<br> the “+” Button. Which will\\n                        display a window<br> with fields to be completed in order to<br> create a new request.<br><br>\\n                        If a category has associated form, the fields<br> will show on this modal, those fields are\\n                        not<br> mandatory.\\n                    </p>\\n                    <img src=\\\"img/guide/add-reqbotton.png\\\" style=\\\"border-radius: 10px;width: 10%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/add-request.png\\\" style=\\\"margin-top:20px; border-radius: 15px; width: 100%\\\">\\n                </div>\\n            </div>\\n\\n\\n\\n        </div>\\n    </section><!-- End Section #guideFilters -->\\n\\n    <section class=\\\"content\\\" id=\\\"guideRoles\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n        <!-- Section #guideRoles -->\\n        <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0;\\\">\\n            <div class=\\\"col-md-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Roles</h3>\\n                <p>If your role in the system is “Regular User” you will have access only to those Requests assigned to\\n                    and created by you. <br>\\n                    If your role is “Head of Department” , you will have access to all requests created to and by your\\n                    team.</p>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have four options: filter by text, category, status or by page</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/14.png\\\" style=\\\"margin-top: 22px;width: 100%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by text\\n                        </h3>\\n                        <p>You can search an specific task typing a keyboard on top, which will effect the results\\n                            displayed on the table.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/36.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by creator\\n                        </h3>\\n                        <p>To filter the results, ,you can click on the blue icon that is displayed at the left top of\\n                            the table head \\\"Creator\\\" is displayed on the, showing only the requets associated with that\\n                            creator</p>\\n                        <ul>\\n                            <li>Created by me: The request created by me or my team for other users.</li>\\n                            <li>Created by me: The request created for me or my team by other users.</li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/37.png\\\" style=\\\"width: 63%\\\"><i class=\\\"fa fa-angle-double-down\\\" aria-hidden=\\\"true\\\"\\n                            style=\\\"font-size: 42px; color: rgb(35,121,205);\\\"></i>\\n                        <img src=\\\"img/guide/38.png\\\" style=\\\"width: 63%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 100px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by type\\n                        </h3>\\n                        <p>\\n                            To filter the results, you can click on the blue icon that is displayed at the left top of\\n                            the table head \\\"Request type\\\". When a type is selected, will effect the results displayed\\n                            on\\n                            the table, showing only the request type. <br><br>\\n                            Note: \\\"At anytime given you can select a different creator and a different type, which will\\n                            effect the results displayed on the table\\\". <br> <br>\\n                            Accordind to the type of request selected, you can create a new request by clickingon the\\n                            \\\"+\\\" Button. Wich will display a window with fields to be completed in order to create a new\\n                            request. <br> <br>\\n                            If a category has associated form, the fields will show on this modal, those fields are not\\n                            mandatory.\\n                        </p>\\n                    </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                            <img src=\\\"img/guide/17.png\\\" style=\\\"width: 72%; margin-top: 24px;\\\">\\n                        </div>\\n                        <div class=\\\"col-md-6\\\">\\n                            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                                <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                filter by page\\n                            </h3>\\n                            <p>\\n                                You can navigate across the results of table, you can click on buttons angle left or\\n                                angle right to see previous and next results respectively.\\n                            </p>\\n                        </div>\\n                    </div>\\n                    <br>\\n                    <br><br><br>\\n                    <div class=\\\"col-md-12\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Request Deatils</h3>\\n                        <p>When clicking on any field of a requet, you will have access to the request and the options\\n                            shown will depended on if you are the creator of the request or it the request is assigned\\n                            to you.</p>\\n                        <div class=\\\"col-md-12\\\">\\n                            <div class=\\\"col-sm-12 col-md-4\\\">\\n                                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">If you are the creator of the\\n                                    request</h3>\\n                                <p>\\n                                    If you are the creator of the request the following window will appear if you click\\n                                    on any field or on pencil button, allowing you to change essential data of request.\\n                                    The color of modal header and Icons will change according the type of the request\\n                                    for Errors will be red, Improving Actions yellow, and Implementation green.\\n                                </p>\\n                            </div>\\n                            <div class=\\\"col-sm-12 col-md-8\\\">\\n                                <img src=\\\"img/guide/39.png\\\" style=\\\"width: 100%;\\\">\\n                            </div>\\n\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-md-12\\\">\\n                        <div class=\\\"col-sm-12 col-md-4\\\">\\n                            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">If the request is assigned to your own\\n                                team</h3>\\n                            <p>\\n                                If the request is assigned to you or your team the following window will appear if you\\n                                click on any field or on pencil button, allowing you to change essential data of the\\n                                task you will be able to edit it by adjusting the points and delivery date.\\n                            </p>\\n                        </div>\\n                        <div class=\\\"col-sm-12 col-md-8\\\">\\n                            <img src=\\\"img/guide/40.png\\\" style=\\\"width: 100%;\\\">\\n                        </div>\\n                    </div>\\n\\n                    <div class=\\\"col-md-12\\\">\\n                        <p>\\n                            Once a request gets approved and changes its status to \\\"Task\\\", the following window appear\\n                            if you click on any field or on search button, you will only be able <br> to access the\\n                            request information and its progress.\\n                        </p>\\n                        <img src=\\\"img/guide/41.png\\\" style=\\\"width: 100%; margin-bottom: 30px;\\\" alt=\\\"\\\">\\n                        <div class=\\\"col-md-6\\\">\\n                            <div class=\\\"text-request\\\">\\n                                <p>\\n                                    Once a request gets approved <br>\\n                                    and changes its status to \\\"Task\\\", <br>\\n                                    the following window will appear <br>\\n                                    if you click on any field or on <br>\\n                                    search button, you will only be <br>\\n                                    able to access the request <br>\\n                                    information and its progress.\\n                                </p>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-md-6\\\">\\n                            <img src=\\\"img/guide/42.png\\\" style=\\\"width: 100%;\\\" alt=\\\"\\\">\\n                        </div>\\n                    </div>\\n\\n\\n                    <div class=\\\"col-md-12\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Status Task</h3>\\n                        <div class=\\\"col-md-6\\\">\\n                            <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">BACKLOG</h3>\\n                            <P>\\n                                Task can be modified in this section, When a task is in the backlog it cannot be worked\\n                                on, actions are restricted to a limited set of options. <br><br>\\n                                These task don't add up to the total amount of points for the current sprint, add can\\n                                be\\n                                dragged or moved using the options button. <br><br>\\n                                Backlog - Actions menu\\n                            </P>\\n                        </div>\\n                        <div class=\\\"col-md-6\\\" style=\\\"border-left: 1px solid darkgray\\\">\\n\\n                            <img src=\\\"img/guide/taskgrey.svg\\\" style=\\\"width: 100%; margin-bottom: 20px\\\" alt=\\\"\\\">\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">EXTERNAL REQUESTS</h3>\\n                <p>\\n                    To access the External Requests module, click on the “External Requests\\\" option of the main menu,\\n                    after clicking on the\\n                    Dropdown title “Workflow”.\\n                    Once you have selected the External Requests option, the following screen will be displayed,\\n                    containing a search\\n                    section, a menu with different categories which you can use to filter down the results.\\n\\n                </p>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-9 \\\">\\n                    <img src=\\\"img/guide/45.png\\\" style=\\\"width: 100%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-12 col-lg-3 \\\">\\n                    <img src=\\\"img/guide/paginator.svg\\\" style=\\\"width: 100%\\\">\\n                    <p>Note: You can browse through the request, using the navigation buttons 'previous' and 'next'.\\n                        <br><br>\\n                        At the upper section of the main screen a three section banner can be found, 3 colors each one\\n                        representing\\n                        a Request type: Errors, Improving Action, and Imprementation. <br><br>\\n                        Each section will show the amount of request in the system for that type of request. You can\\n                        find updated\\n                        information about the request assigned to you or your group and the ones created by your group.\\n                    </p>\\n                </div>\\n                <br><br><br><br>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top: 20px; text-align:center\\\">\\n\\n                    <h4 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Show category list</h4>\\n                    <p style=\\\"margin-top: 38px\\\">You can acces the list of categories for <br> each type by clicking on\\n                        the \\\"i\\\"\\n                        button.</p>\\n                    <img src=\\\"img/guide/info.svg\\\" style=\\\"width: 10%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/35.png\\\" style=\\\"width: 100%\\\">\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top: 20px; text-align:center\\\">\\n\\n                    <h4 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Create a external request</h4>\\n                    <p style=\\\"margin-top: 38px\\\">According to the type of request selected,<br> you can create a new\\n                        request by clicking\\n                        on<br> the “+” Button. Which will\\n                        display a window<br> with fields to be completed in order to<br> create a new request.<br><br>\\n                        If a category has associated form, the fields<br> will show on this modal, those fields are\\n                        not<br> mandatory.\\n                    </p>\\n                    <img src=\\\"img/guide/add-reqbotton.png\\\" style=\\\"border-radius: 10px;width: 10%\\\">\\n\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/add-extrequest.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/search-ext.png\\\" style=\\\"margin-top:50px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">Filter by text: You can search an specific <br> External Requests\\n                        typing\\n                        a keyword on<br>\\n                        top, which will effect the results displayed<br> on the table.\\n                    </p>\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\">\\n                    <img src=\\\"img/guide/by-category.png\\\" style=\\\"margin-top:66px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top:50px; text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">Filter by category: To filter the results, you can click<br> on the on\\n                        the ‘status' menu that is displayed at the <br>top of\\n                        the table. When a category is selected, a blue <br>border can be seen on the lower sideof the\\n                        box,<br> indicating what\\n                        category is currently active.\\n\\n                    </p>\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/quick-edit.png\\\" style=\\\"margin-top:50px; border-radius: 10px; width: 110px\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">Inside the table: The actions quick view, edit and create <br>task can\\n                        be found in front of each External Requests.\\n                    </p>\\n                </div>\\n\\n\\n            </div>\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-sm-12 col-md-3\\\" style=\\\"margin-top: 20px\\\">\\n\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">ExternalTasks</h3>\\n                    <p>\\n                        <br>To access the External Tasks module, click on the “External Tasks\\\" option of the main menu,\\n                        after clicking on the\\n                        Dropdown title “Workflow”.\\n\\n                        <br>\\n                        <br>\\n                        Once inside the module, the following view is displayed. A button of Refresh can be found\\n                        there,. A search section, a\\n                        column located on the left side of the screen with different categories and a main menu which\\n                        can be used to filter the\\n                        results and a table where all the information related to each of the tasks in the system can be\\n                        found.\\n\\n                    </p>\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-9\\\" style=\\\"text-align: center; margin-top: 20px\\\">\\n                    <img src=\\\"img/guide/ext-task.png\\\" style=\\\"width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n                <div class=\\\"col-md-12\\\" style=\\\"margin-top: 20px\\\">\\n                    <p>\\n                        Note: The task-list (table) contains the following information: Date, task number, creator,\\n                        user\\n                        assigned to the task,\\n                        description, project related, sprint related and actions.\\n\\n                    </p>\\n                    <br>\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Appearance</h3>\\n                    <p>\\n                        The task information will have an specific color according with its status. For task closet the\\n                        background\\n                        color will light gray, for deleted task the font color will be red. The action buttons also\\n                        change, for\\n                        deleted task only will appear the quick view button, and on the closed task will appear the\\n                        reopen task\\n                        button instead the close button.\\n                    </p>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have four options: filter by text, category, status or by page</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/14.png\\\" style=\\\"margin-top: 22px; width: 85%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by text\\n                        </h3>\\n                        <p>You can search an specific task typing a keyboard on top, which will effect the results\\n                            displayed on the\\n                            table.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/by-categoryext.png\\\" style=\\\"width: 260px\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by category\\n                        </h3>\\n                        <p>Filter by category: To filter the results, you can click on the categories of the left-side\\n                            column or on\\n                            the 'status' menu that is displayed at the top the table. When a category is selected, a\\n                            blue border\\n                            can be seen on the right side of the box, indicating what category is currently active.</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/16.png\\\" style=\\\"width: 72%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 100px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by status\\n                        </h3>\\n                        <p>\\n                            As explained above, when a status is selected its bottom border turns light-blue. <br>\\n                            Note: \\\"At anytime given you can select a different category and a different status, which\\n                            will effect\\n                            the results displayed on the table\\\".\\n                        </p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/17.png\\\" style=\\\"width: 72%; margin-top: 24px;\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            filter by page\\n                        </h3>\\n                        <p>\\n                            You can navigate across the results of table, you can click on buttons angle left or angle\\n                            right to see\\n                            previous and next results respectively. Also you can go directly to the first or last page.\\n\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;font-size: 18px\\\">On top the table:</h3>\\n                <p>\\n                    The actions refresh can be found on top of the table.\\n                </p>\\n\\n                <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                    <img src=\\\"img/guide/reloadtask.svg\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\" width: 70%\\\">\\n                    <p class=\\\"title-guide\\\">Reload the page</p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                <ul style=\\\"list-style: none\\\">\\n                    <li class=\\\"list-guide\\\">\\n                        <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                        Refresh button, click on this option in order to Refresh the task lists if you need to update\\n                        it. \\\" The\\n                        system keeps the list up to date automatically.\\\"\\n                    </li>\\n                </ul>\\n\\n            </div>\\n\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0\\\">\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3> <br>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <i class=\\\"sq sq-view guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-quickedit  guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"fa fa-times-circle-o  guide-actions\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                        <i class=\\\"sq sq-eliminar guide-actions\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative; padding-right: 20px\\\"></i>\\n                    </div>\\n\\n                    <div class=\\\"col-md-6 col-lg-6\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Inside the table:</h3>\\n                        <p>\\n                            The actions quick view, edit, close, delete that can be found in front of each task.\\n                        </p>\\n                    </div>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-view \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Quick view (magnifiying\\n                            galss)\\n                        </h3>\\n                        <p>\\n                            When this option is selected, the <br>\\n                            following window will be displayed, <br>\\n                            containing some information related to <br> the task.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/46.png\\\" style=\\\"border-radius:10px; width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Quick view -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-quickedit \\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Edit (Pencil)</h3>\\n                        <p>\\n                            A window with edition options will<br>\\n                            show. All data of the task can be edited <br>\\n                            such as: Subject, product, user <br>\\n                            assigned, delivery date, points, project <br>\\n                            assigned and task description. Nothing <br>\\n                            will be saved unless the \\\"Save\\\" button <br>\\n                            is clicked.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/47.png\\\" style=\\\"border-radius: 10px; width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Edit -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"fa fa-times-circle-o\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Close (X)</h3>\\n                        <p>\\n                            if you need to close a task, click on the <br> 'x' button, a confirmation dialog will <br>\\n                            then show up\\n                            requiring you to confirm <br> the action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/48.png\\\" style=\\\"border-radius: 20px; width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Close -->\\n\\n            <div class=\\\"col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px 80px 0px 50px;margin-bottom: 30px\\\">\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <div class=\\\"row\\\" style=\\\"margin-left: 0;margin-right: 0; margin-top: 7%;\\\">\\n                        <i class=\\\"sq sq-eliminar\\\" style=\\\"font-size: 44px; color: rgb(20,179,252); position: relative;\\\"></i>\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;margin-top: 0\\\">Delete (trash can)</h3>\\n                        <p>\\n                            Delete (trash can) if you need to delete<br> a task (erasing all content related to it <br>\\n                            in the\\n                            system) click on this button, a<br> confirmation dialog will show up, <br> requiring you to\\n                            confirm the\\n                            action.\\n                        </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-md-6 col-lg-6\\\">\\n                    <img src=\\\"img/guide/49.png\\\" style=\\\"border-radius: 20px; width: 100%\\\" alt=\\\"\\\">\\n                </div>\\n            </div><!-- Deleted -->\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"margin-bottom: 30px;\\\">\\n                <div class=\\\"col-sm-12 col-md-3\\\" style=\\\"margin-top: 20px\\\">\\n\\n                    <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\"> REPORTS</h3>\\n                    <p>\\n                        <br>To access the Sprints module, go to the main menu and click on the \\\"Scrum\\\" drop-down title.\\n                        According to your profile,\\n                        a set of options will be displayed, click on “Reports\\\".\\n\\n\\n                        <br>\\n                        <br>\\n                        Once inside the module, the following view is shown. At the top you can find a Sprint Select\\n                        and\\n                        a search and two\\n                        buttons to export the reports in PDF and XLS. A column located on the left side of the screen\\n                        with different categories\\n                        that can be used to filter the results by group.\\n\\n                    </p>\\n                </div>\\n\\n                <div class=\\\"col-sm-12 col-md-9\\\" style=\\\"text-align: center; margin-top: 20px\\\">\\n                    <img src=\\\"img/guide/50.png\\\" style=\\\"width: 80%;\\\" alt=\\\"\\\">\\n                </div>\\n\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/51.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"margin-top:30px;text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">A category section is located in the top center and shows the report by\\n                        Users and Projects\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/52.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">When filtered by Users it will show a table where the information\\n                        related to each of the Estimated Points / Registered\\n                        Points in the system is found\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/53.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">When filtered by Users it will show a bar chart where the information\\n                        related to each of the Estimated Points /\\n                        Registered Points in the system is located\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/54.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">When filtered by Projects it will show a table where the information\\n                        related to each of the Projects Sprint Progress in\\n                        the system is located\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/55.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">When filtered by Projects it will show a circle chart where the\\n                        information related to each of the Projects Sprint\\n                        Progress in the system is located\\n                    </p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6\\\" style=\\\"text-align:center\\\">\\n                    <img src=\\\"img/guide/56.png\\\" style=\\\"margin-top:20px; border-radius: 10px; width: 100%\\\">\\n                </div>\\n                <div class=\\\"col-sm-12 col-md-6 col-lg-6 \\\" style=\\\"text-align:center\\\">\\n                    <p style=\\\"margin-top: 50px\\\">And another table which will show more detailed information on each of\\n                        the tasks assigned to the users of the group.\\n                    </p>\\n                </div>\\n            </div>\\n\\n\\n\\n\\n            <div class=\\\"col-md-12\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Filters</h3>\\n                <p>To filter the results, you have three options: filter by sprint or by category:</p>\\n                <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                    <div class=\\\"col-md-6\\\">\\n                        <img src=\\\"img/guide/57.png\\\" style=\\\"margin-top: 22px; width: 85%\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-bottom: 40px\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            Filter by sprint\\n                        </h3>\\n                        <p>You can search for a specific sprint by selecting one of the ones in the options and\\n                            clicking\\n                            on Search will consult\\n                            the information of this</p>\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"text-align: center\\\">\\n                        <img src=\\\"img/guide/58.png\\\" style=\\\"width: 260px\\\">\\n                    </div>\\n                    <div class=\\\"col-md-6\\\" style=\\\"margin-top: 19px; margin-bottom: 163px;\\\">\\n                        <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">\\n                            <i class=\\\"fa fa-angle-double-right\\\" aria-hidden=\\\"true\\\"></i>\\n                            Filter by category\\n                        </h3>\\n                        <p>To filter the results, you can click on the categories of the left-side column or on the\\n                            ‘status' menu that is\\n                            displayed at the top of the table. When a category is selected, the background of the box\\n                            changes to blue, indicating\\n                            what category is currently active.</p>\\n                    </div>\\n\\n                </div>\\n            </div>\\n\\n            <div class=\\\"col-md-12\\\" style=\\\"padding: 0px 80px 0px 50px;\\\">\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold\\\">Actions</h3>\\n                <h3 style=\\\"color:rgb(35,121,205);font-weight: bold;font-size: 18px\\\">On top the table:</h3>\\n                <p>\\n                    The actions Export the reports in PDF and XLS can be found on top of the table.\\n\\n                </p>\\n\\n                <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                    <img src=\\\"img/guide/59.png\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\"border-radius:35px; width: 70%\\\">\\n                    <p class=\\\"title-guide\\\">Export PDF</p>\\n                </div>\\n\\n                <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2 guide-icon\\\">\\n                    <img src=\\\"img/guide/60.png\\\" class=\\\"icon-guide\\\" alt=\\\"\\\" style=\\\"border-radius:35px; width: 70%\\\">\\n                    <p class=\\\"title-guide\\\">Export Xls</p>\\n                </div>\\n            </div>\\n\\n            <div class=\\\"row\\\" style=\\\"margin-right: 0;margin-left: 0\\\">\\n                <ul style=\\\"list-style: none\\\">\\n                    <li class=\\\"list-guide\\\">\\n                        <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                        Export PDF, click on this option to generate a report in PDF format with the information that\\n                        has been consulted in the\\n                        previous filters and will be automatically downloaded to the computer.\\n\\n                    </li>\\n                    <br>\\n                    <li class=\\\"list-guide\\\">\\n                        <i class=\\\"fa fa-circle\\\" aria-hidden=\\\"true\\\" style=\\\"color:rgb(35,121,205); padding-bottom: 10px\\\"></i>\\n                        Export XLS, click on this option to generate a report in excel format with the information that\\n                        has been consulted in\\n                        the previous filters and will be automatically downloaded to the computer.\\n\\n                    </li>\\n                </ul>\\n\\n            </div>\\n\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px; margin-bottom: 30px;\\\">\\n                <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\">\\n                    <a href=\\\"../../../pdf/project_board_guide.pdf\\\" download=\\\"project_board_guide\\\" style=\\\"text-decoration: none;\\\">\\n                        <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n                        <p class=\\\"textDownload_userGuide\\\">Download</p>\\n                    </a>\\n                </div>\\n            </div>\\n\\n\\n        </div>\\n\\n\\n    </section><!-- End Section #guideRoles -->\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/userguide/guideprojectboard.template.html\n// module id = 871\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"guideburdown\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> LOGIN GUIDE\\n            <small style=\\\"font-size:15px;\\\">User Guide</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li><a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            <li class=\\\"active\\\">Login guide</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" id=\\\"useriguidelogin\\\">\\n        <!-- Section #useriguidelogin -->\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px;\\\">\\n                <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\" >\\n                    <a href=\\\"../../../pdf/login_guide.pdf\\\" download=\\\"login_guide\\\" style=\\\"text-decoration: none;\\\">\\n                        <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n                        <p class=\\\"textDownload_userGuide\\\" >Download</p>\\n                    </a>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-3 col-lg-3\\\">\\n                    <h1 class=\\\"tittle-userguide\\\">LOGIN</h1>\\n                    <p style=\\\"margin-right: 25%;\\\">\\n                        Once your user created by the administrator on Squadlinx system, you will receive on email with\\n                        the next information:\\n                    </p>\\n                    <p class=\\\"prf-user-guide\\\">\\n                        The user must click on the \\\"Go to Squadlinx\\\" button to continue with the activation of this\\n                        account.\\n                    </p>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 cntd-guide\\\">\\n                        <div class=\\\"button-userguide\\\" style=\\\"text-align: center;\\\">\\n                            <a style=\\\"text-decoration:none;line-height: 1.5em; font-size: 20px; color:#ffffff;\\\">\\n                                Go to Squadlinx!\\n                            </a>\\n                        </div>\\n                        <!-- <img src=\\\"img/nuevomanual/boton-login.png\\\" alt=\\\"\\\"> -->\\n                        <p>Activation to an account</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"line-userguide\\\"></div>\\n                <div id=\\\"gotosqx\\\" class=\\\"col-xs-12 col-sm-12 col-md-9 col-lg-9\\\" style=\\\"text-align: center\\\">\\n                    <img src=\\\"img/nuevomanual/1.png\\\" alt=\\\"\\\" style=\\\"margin-top: 40px;\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:30px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5 pdd-rig\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/one.png\\\" alt=\\\"\\\">\\n                        <p>Type the user email and click on \\\"Reset Password\\\" button. <br> The user will receive on his\\n                            phone on number</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-7 col-lg-7 pddlef\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/3.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:30px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5 pdd-rig\\\" style=\\\"margin-top:30px;\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/two.png\\\" alt=\\\"\\\">\\n                        <p>The user will receive on this phone an authentication code <br> that have to type on the form\\n                            fields.</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-7 col-lg-7 pddlef\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/2.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:30px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-5 pdd-rig\\\">\\n                    <div id=\\\"number3\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser listtrifor\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/three.png\\\" alt=\\\"\\\">\\n                        <p>The user must to type the password.</p>\\n                    </div>\\n                    <div id=\\\"number4\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser listtrifor\\\"\\n                        style=\\\"margin-top: 10%; padding-bottom: 20px;\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/four.png\\\" alt=\\\"\\\">\\n                        <p>Once the password is obey the system specifying for define a unique password, each item will\\n                            turns out to green and the user will be able click on \\\"Save Password\\\", immediately an alert\\n                            will show at the top right side of the screen, letting the user know the changes has been\\n                            saved. </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-7 pddlef imgtrifor\\\">\\n                    <img class=\\\"circleuser\\\" src=\\\"img/nuevomanual/6.png\\\" alt=\\\"\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/4.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:100px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-5 col-lg-5 pdd-rig\\\">\\n                    <div id=\\\"number5\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/five.png\\\" alt=\\\"\\\">\\n                        <p>The system will show the login page where the user can type the username and the password on\\n                            Squadlinx System and click on the \\\"SIGN IN\\\" button.</p>\\n                        <p style=\\\"text-align:center\\\">Joe Doe <i class=\\\"fa fa-angle-double-right icon-five\\\"\\n                                aria-hidden=\\\"true\\\"></i> Username: joe.doe </p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-7 col-lg-7 pddlef\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/5.png\\\" style=\\\"width: 80%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:100px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-3 col-lg-3 pdd-rig\\\">\\n                    <div id=\\\"number6\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig en-listuser\\\">\\n                        <img class=\\\"copel\\\" src=\\\"img/nuevomanual/six.png\\\" alt=\\\"\\\">\\n                        <p>When a new user starts session for the first time will see the Squadlinx system looks like\\n                            the following image:</p>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-9 col-lg-9 pddlef\\\" style=\\\"z-index: 1; position: relative;\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/dashboard.png\\\" style=\\\"width: 86%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top:100px\\\">\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-3 col-lg-3 pdd-rig\\\">\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 pdd-rig\\\">\\n                        <h2 style=\\\"color: rgb(35,121,205);font-weight: bold;\\\">Introduction to Squadlinx</h2>\\n                        <p>The user will find the next sections:</p>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <img class=\\\"img-numeral\\\" src=\\\"../../../assets/public/img/nuevomanual/numeral1.png\\\" alt=\\\"\\\">\\n                            <p style=\\\"color: rgb(35,121,205);margin-bottom: 0;\\\">Menu (on left side):</p>\\n                            <p>There will the access to different modules.</p>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <img class=\\\"img-numeral\\\" src=\\\"../../../assets/public/img/nuevomanual/numeral2.png\\\" alt=\\\"\\\">\\n                            <p style=\\\"color: rgb(35,121,205);margin-bottom: 0;\\\">Menu header (on top):</p>\\n                            <p>There will be the notifications, sing off, and a link to edit user profile.</p>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <img class=\\\"img-numeral\\\" src=\\\"../../../assets/public/img/nuevomanual/numeral3.png\\\" alt=\\\"\\\">\\n                            <p style=\\\"color: rgb(35,121,205);margin-bottom: 0;\\\">Menu content (on the middle):</p>\\n                            <p> There will be the content of the active module.</p>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-9 col-lg-9 pddlef\\\" style=\\\"z-index: 1; position: relative;\\\">\\n                    <img class=\\\"pd-img\\\" src=\\\"img/nuevomanual/dashboard2.png\\\" style=\\\"width: 86%\\\" alt=\\\"\\\">\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                <h2 class=\\\"tittle-color\\\"> Available Actions</h2>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-dashboard iconos-squadguide\\\"></i> Dashboard</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li style=\\\"border-top: .5px solid gray;padding-top: 10px;\\\">See the notifications.</li>\\n                            <li>See the amount of task under pending, developing, improving, expiring and backlog\\n                                status.</li>\\n                            <li>See the task list on under pending, developing, improving, expiring or backlog status.\\n                            </li>\\n                            <li>See the burndown (line chart).</li>\\n                            <li class=\\\"lisguide-bottom\\\">Erase notifications.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-taskboard iconos-squadguide\\\"></i> Taskboard</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">See the task list on under backlog, pending, developing, improving\\n                                and complete status.</li>\\n                            <li>Register a task progress.</li>\\n                            <li>Update the task status.</li>\\n                            <li>Edit task under Backlog status.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Add or delete a task from a sprint.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-statustasks iconos-squadguide\\\"></i> Task</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">See the task list assigned to him.</li>\\n                            <li>Create task to assign to another user or for himself.</li>\\n                            <li>Edit, close or delete task created by him.</li>\\n                            <li>Search an specific task.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Filter tasks according with his status.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-daily iconos-squadguide\\\"></i> Daily</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">See the daily list registered by user.</li>\\n                            <li>Register a task progress.</li>\\n                            <li>Register a daily with none task associated.</li>\\n                            <li>Delete some daily.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Search an specific daily.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-requests iconos-squadguide\\\"></i> Requests</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">See the request list assigned to him.</li>\\n                            <li>Create request to assign to another user or for himself.</li>\\n                            <li>Edit and delete request created by him.</li>\\n                            <li>Search an specifi request.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Filter request according with his type or creator.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-settings iconos-squadguide\\\"></i> Settings</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-top\\\">Edit personal data.</li>\\n                            <li>Change password.</li>\\n                            <li>Upload an image.</li>\\n                            <li class=\\\"lisguide-bottom\\\">Manage the notifications.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                    <div class=\\\"col-xs-12 col-sm-4 col-md-4 col-lg-4\\\">\\n                        <h2 class=\\\"tittle-color\\\"><i class=\\\"sq sq-doc-related iconos-squadguide\\\"></i> User Guide</h2>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-8 col-md-8 col-lg-8 ul-styles\\\">\\n                        <ul>\\n                            <li class=\\\"lisguide-bottom\\\" style=\\\"padding-bottom: 50px; padding-top: 32px;\\\">See the user\\n                                guide.</li>\\n                        </ul>\\n                    </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"height: 50px; margin-bottom: 30px;\\\">\\n                    <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\" height: 50px; float: right; text-align: right;\\\" >\\n                        <a href=\\\"../../../pdf/login_guide.pdf\\\" download=\\\"login_guide\\\" style=\\\"text-decoration: none;\\\">\\n                            <i class=\\\"sq sq-download iconDownload_userGuide\\\" aria-hidden=\\\"true\\\"></i>\\n                            <p class=\\\"textDownload_userGuide\\\">Download</p>\\n                        </a>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n</section>\\n\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/userguide/userguidelogin.template.html\n// module id = 872\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"contacts\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <!-- Content Header (Page header) -->\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-my-groups\\\" aria-hidden=\\\"true\\\" style=\\\"color:#007BD2;font-size:20px;\\\"></i> Groups\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Groups</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\">\\n        <div class=\\\"row\\\">\\n            <!-- /.col -->\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box-header-params\\\">\\n                    <div class=\\\"btn-groupP\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\" (click)=\\\"addGroup()\\\"\\n                                style=\\\"padding: 5px 3px; background-color:white;\\\"\\n                                data-container=\\\"body\\\"  tooltipPosition=\\\"top\\\" pTooltip=\\\"Add group\\\">\\n                            <i class=\\\"sq sq-my-groups\\\" style=\\\"color:rgb(27, 110, 198); font-size: 29px;\\\"></i>\\n                            <span style=\\\"position: absolute;margin-left: -5px;margin-top: -5px;\\\"><i class=\\\"sq sq-add-1\\\"\\n                                                                                                    style=\\\"color:rgb(27, 110, 198); font-size: 10px;\\\"></i></span>\\n                        </button>\\n                        <button (click)=\\\"reload()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                            <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 33px;\\\"></i>\\n                        </button>\\n                        <button (click)=\\\"addUser()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Create user\\\">\\n                            <i class=\\\"sq sq-working-team\\\" style=\\\"color:rgb(27, 110, 198); font-size: 33px;\\\"></i>\\n                            <span style=\\\"position: absolute;margin-left: -8px;\\\"><i class=\\\"sq sq-add-1\\\"\\n                                                                                   style=\\\"color:rgb(27, 110, 198); font-size: 10px;\\\"></i></span>\\n                        </button>\\n                        <button (click)=\\\"addUserGroup()\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx2\\\"\\n                                style=\\\"padding: 1px 4px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Add users\\\">\\n                            <i class=\\\"sq sq-scrum\\\" style=\\\"color:rgb(27, 110, 198); font-size: 33px;\\\"></i>\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n            <div class=\\\"col-md-12\\\">\\n                <div class=\\\"box-params\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive\\\">\\n\\n                            <table id=\\\"results-params\\\" class=\\\"table table-bordered table-hover table-striped\\\">\\n                                <thead>\\n                                <th style=\\\"width: 15%;\\\"> Group number\\n                                </th>\\n                                <th style=\\\"width: 25%;\\\">Name\\n                                </th>\\n                                <th style=\\\"width: 20%;\\\">Leader\\n                                </th>\\n                                <th style=\\\"width: 15%;\\\"> Number of Users\\n                                </th>\\n                                <th style=\\\"width: 25%;\\\">Actions</th>\\n\\n                                </thead>\\n                                <tbody>\\n                                <tr *ngFor=\\\"let gr of groups\\\">\\n                                    <td>{{gr.grop_id}}</td>\\n                                    <td>{{gr.grop_name}}</td>\\n                                    <td>{{gr.leader}}</td>\\n                                    <td>{{gr.cant_users}}</td>\\n                                    <td>\\n                                        <div class=\\\"btn-group-params\\\">\\n                                            <i class=\\\"sq sq-search cursor-elements-i-sqlx\\\" aria-hidden=\\\"true\\\" (click)=\\\"showGroup(gr)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick View\\\"></i>\\n                                            <i class=\\\"sq sq-quickedit cursor-elements-i-sqlx\\\" aria-hidden=\\\"true\\\" (click)=\\\"editGroup(gr)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\"></i>\\n                                            <i class=\\\"sq sq-eliminar cursor-elements-i-sqlx\\\" aria-hidden=\\\"true\\\" (click)=\\\"deleteGroup(gr.grop_id)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\"></i>\\n                                        </div>\\n                                    </td>\\n                                </tr>\\n                                </tbody>\\n                            </table>\\n                        </div>\\n                        <div class=\\\"box-footer no-padding\\\">\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </section>\\n    <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdGroup\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"clear()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-my-groups\\\" style=\\\"color:white\\\"></i> # {{group.grop_id}} - {{group.grop_name}}\\n                        Group\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"tab-content\\\">\\n                        <div class=\\\"row\\\" style=\\\"padding: 0px;\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                     style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                    <div class=\\\"input-squadlinx\\\">\\n                                        <label style=\\\"color:rgb(130, 145, 152);\\\">Name Group</label>\\n                                        <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [disabled]=\\\"true\\\"\\n                                               [(ngModel)]=\\\"group.grop_name\\\" placeholder=\\\"Name group\\\">\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                     style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                    <div class=\\\"form-group dropdownSqlx\\\">\\n                                        <label style=\\\"color:rgb(130, 145, 152);\\\">Group leader</label>\\n                                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [disabled]=\\\"true\\\" [autoWidth]=\\\"false\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                    [options]=\\\"users\\\" [(ngModel)]=\\\"group.user_id\\\"\\n                                                    placeholder=\\\"Select user\\\"\\n                                                    filter=\\\"filter\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                                <label class=\\\"col-xs-6 col-sm-6 col-md-5 col-lg-5 label-title-squadlinx\\\">Team:</label>\\n                            </div>\\n                            <div style=\\\"width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\"\\n                                           style=\\\"margin-bottom: 0px;\\\">\\n                                        <thead>\\n                                        <th style=\\\"text-align: center; width: 20%;\\\" class=\\\"th-info-squadlinx\\\">User id</th>\\n                                        <th style=\\\"text-align: center; width: 40%;\\\" class=\\\"th-info-squadlinx\\\">Name</th>\\n                                        <th style=\\\"text-align: center; width: 40%;\\\" class=\\\"th-info-squadlinx\\\">Role</th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"max-height: 200px; overflow: scroll; width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                                        <tbody>\\n                                        <tr *ngFor=\\\"let usr of group.users\\\">\\n                                            <td style=\\\"text-align: center; width: 20%;\\\" class=\\\"td-info-squadlinx\\\">{{ usr.user_id }}</td>\\n                                            <td style=\\\"text-align: center; width: 40%; \\\" class=\\\"td-info-squadlinx\\\">{{ usr.completename }}</td>\\n                                            <td style=\\\"text-align: center; width: 40%;\\\" class=\\\"td-info-squadlinx\\\">{{ usr.role_name }}</td>\\n                                        </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask btn-close-form-sprints\\\"\\n                            data-dismiss=\\\"modal\\\"\\n                            (click)=\\\"clear()\\\">Close\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdEditGroup\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"clear()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"sq sq-my-groups\\\" style=\\\"color:white\\\"></i> # {{group.grop_id}} - {{group.grop_name}}\\n                        Group\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"tab-content\\\">\\n                        <div class=\\\"row\\\" style=\\\"padding: 0px;\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                     style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                    <div class=\\\"input-squadlinx\\\">\\n                                        <label style=\\\"color:rgb(130, 145, 152);\\\">Name Group</label>\\n                                        <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"group.grop_name\\\"\\n                                               placeholder=\\\"Name group\\\">\\n                                    </div>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                     style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                    <div class=\\\"form-group dropdownSqlx\\\">\\n                                        <label style=\\\"color:rgb(130, 145, 152);\\\">Group leader</label>\\n                                        <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userListEdit\\\"\\n                                                    dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                    [(ngModel)]=\\\"group.user_id\\\" placeholder=\\\"Select user\\\"\\n                                                    filter=\\\"filter\\\"></p-dropdown>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                                <label class=\\\"col-xs-6 col-sm-6 col-md-5 col-lg-5 label-title-squadlinx\\\">Team:</label>\\n                            </div>\\n                            <div style=\\\"width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\"\\n                                           style=\\\"margin-bottom: 0px;\\\">\\n                                        <thead>\\n                                        <th style=\\\"text-align: center; width: 25%;\\\" class=\\\"th-info-squadlinx\\\">User id</th>\\n                                        <th style=\\\"text-align: center; width: 25%;\\\" class=\\\"th-info-squadlinx\\\">Name</th>\\n                                        <th style=\\\"text-align: center; width: 25%;\\\" class=\\\"th-info-squadlinx\\\">Role</th>\\n                                        <th style=\\\"text-align: center; width: 25%;\\\" class=\\\"th-info-squadlinx\\\">Actions</th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"max-height: 200px; overflow: scroll; width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                                        <tbody>\\n                                        <tr *ngFor=\\\"let usr of group.users\\\">\\n                                            <td style=\\\"text-align: center; width: 25%;\\\" class=\\\"td-info-squadlinx\\\">{{ usr.user_id }}</td>\\n                                            <td style=\\\"text-align: center; width: 25%; \\\" class=\\\"td-info-squadlinx\\\">{{ usr.completename }}</td>\\n                                            <td style=\\\"text-align: center; width: 25%;\\\" class=\\\"td-info-squadlinx\\\">{{ usr.role_name }}</td>\\n                                            <td style=\\\"text-align: center; width: 25%;\\\"><i class=\\\"sq sq-eliminar\\\"\\n                                                                                           aria-hidden=\\\"true\\\"\\n                                                                                           (click)=\\\"deleteUserGroup(usr)\\\"></i>\\n                                            </td>\\n                                        </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles btn-close-form-sprints\\\"\\n                            style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\" data-dismiss=\\\"modal\\\"\\n                            aria-label=\\\"Close\\\" (click)=\\\"clear()\\\">Close\\n                    </button>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints\\\"\\n                            style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                            data-dismiss=\\\"modal\\\" (click)=\\\"saveGroup(group)\\\" [disabled]=\\\"validateGroup()\\\"> Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"addGroup\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content modal-roles\\\">\\n                <div class=\\\"modal-header header-event header-role\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                            style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\"><i class=\\\"sq sq-my-groups\\\"></i> New Group </h4>\\n                </div>\\n                <div class=\\\"modal-body scrollable md-roles\\\" style=\\\"height: 250px;\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                             style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                            <div class=\\\"input-squadlinx\\\">\\n                                <label style=\\\"color:rgb(130, 145, 152);\\\">Name Group</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"group.grop_name\\\"\\n                                       placeholder=\\\"Name group\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                             style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label style=\\\"color:rgb(130, 145, 152);\\\">Group leader</label>\\n                                <p-dropdown class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\" [options]=\\\"users\\\"\\n                                            dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                            [(ngModel)]=\\\"group.user_id\\\" placeholder=\\\"Select user\\\"\\n                                            filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer close-footer\\\">\\n                    <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-roles btn-close-form-sprints\\\"\\n                                style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\" data-dismiss=\\\"modal\\\"\\n                                aria-label=\\\"Close\\\">Close\\n                        </button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints\\\"\\n                                style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                                data-dismiss=\\\"modal\\\" (click)=\\\"saveGroup(group)\\\" [disabled]=\\\"validateGroup()\\\"> Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"addUser\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n                            style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color:white;\\\"><i class=\\\"sq sq-profiles\\\"></i> New User </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"form-group\\\">\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"input-squadlinx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">First Name</label>\\n                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_name\\\"\\n                                           placeholder=\\\"First Name\\\" name=\\\"letras\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"input-squadlinx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Last Name</label>\\n                                    <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"user.user_lastname\\\"\\n                                           placeholder=\\\"Last Name\\\" name=\\\"letras\\\" (keypress)=\\\"soloLetras($event)\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"input-squadlinx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">E-mail Address</label>\\n                                    <input id=\\\"float-input-email2\\\" type=\\\"email\\\" class=\\\"form-control sqlx-input\\\"\\n                                           [(ngModel)]=\\\"user.user_email\\\" placeholder=\\\"jdoe@mdcloudps.com\\\"\\n                                           pattern=\\\".+@mdcloudps.com\\\" size=\\\"30\\\" (change)=\\\"verifyEmail(user.user_email)\\\">\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"inputMask-squadlinx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Phone Number</label>\\n                                    <p-inputMask mask=\\\"+99 999 9999999\\\" class=\\\"ui-g ui-fluid sqlx-inputMask\\\"\\n                                                 [(ngModel)]=\\\"user.user_phone\\\"\\n                                                 placeholder=\\\"+99 999 9999999\\\"></p-inputMask>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Role</label>\\n                                    <p-dropdown [options]=\\\"roles\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                                                dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                [(ngModel)]=\\\"user.role_id\\\" placeholder=\\\"Select a Role\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\"\\n                                 style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div class=\\\"form-group dropdownSqlx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Group</label>\\n                                    <p-dropdown [options]=\\\"grouplist\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                                                dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                [(ngModel)]=\\\"user.grop_id\\\" placeholder=\\\"Select a Group\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer close-footer\\\">\\n                    <div class=\\\"pull-right\\\" style=\\\"padding-right:20px;\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-roles btn-close-form-sprints\\\"\\n                                style=\\\"background-color:rgb(15, 188, 255);padding-right: 20px;\\\" data-dismiss=\\\"modal\\\"\\n                                aria-label=\\\"Close\\\">Close\\n                        </button>\\n                        <button type=\\\"button\\\" class=\\\"btn btn-roles btn-save-form-sprints \\\" style=\\\"background-color:rgb(164, 203, 91);\\\"\\n                                data-dismiss=\\\"modal\\\" (click)=\\\"saveUser(user, 'new')\\\"\\n                                [disabled]=\\\"!user.user_name || !user.user_lastname || !user.user_phone || !user.role_id || !user.grop_id || !user.user_email || errors != 0\\\">\\n                            Save\\n                        </button>\\n                        <div *ngIf=\\\"errors > 0\\\" class=\\\"errors\\\">\\n                            <h3 id=\\\"result2\\\"></h3>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal modal-sptask fade\\\" id=\\\"mdAddUsrGroup\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div *ngIf=\\\"usersg.permits == 'false'\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"closeModal()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        Add Users to {{usersg.grop_name}} Group\\n                    </h4>\\n                </div>\\n                <div *ngIf=\\\"usersg.permits == 'true'\\\" class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" (click)=\\\"closeModal()\\\">\\n                        <span aria-hidden=\\\"true\\\" style=\\\"color:#fff;opacity:1;\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        Add Users to a Group\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"tab-content\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-xs-12 col-sm-4 col-md-4 inputs-mainfilter\\\"\\n                                 style=\\\"float: right;margin-bottom: 7px;margin-top: 16px;margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\"\\n                                               class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"searchuser\\\">\\n                                    </div>\\n                                    <div class=\\\"search-input-mainfilter\\\"\\n                                         style=\\\"position: absolute; right: 0; top: 2px;\\\">\\n                                        <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-4 col-md-4\\\" style=\\\"padding-left: 20px;margin-bottom: 8px;\\\">\\n                                <div *ngIf=\\\"usersg.permits == 'true'\\\" class=\\\"form-group dropdownSqlx\\\">\\n                                    <label style=\\\"color:rgb(130, 145, 152);\\\">Group</label>\\n                                    <p-dropdown [options]=\\\"grouplist\\\" class=\\\"ui-g ui-fluid\\\" [autoWidth]=\\\"false\\\"\\n                                                dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                                                [(ngModel)]=\\\"usersg.grop_id\\\" placeholder=\\\"Select a Group\\\"></p-dropdown>\\n                                </div>\\n                            </div>\\n                            <div *ngIf=\\\"loadingGroup\\\" class=\\\"col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                                <div>\\n                                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                                </div>\\n                                <div>\\n                                    <span style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\"\\n                                           style=\\\"margin-bottom: 0px;\\\">\\n                                        <thead>\\n                                        <th style=\\\"text-align: center; width: 5%;\\\">\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 15%;\\\" class=\\\"th-info-squadlinx\\\">User id</th>\\n                                        <th style=\\\"text-align: center; width: 40%;\\\" class=\\\"th-info-squadlinx\\\">Name</th>\\n                                        <th style=\\\"text-align: center; width: 40%;\\\" class=\\\"th-info-squadlinx\\\">Role</th>\\n                                        </thead>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                            <div style=\\\"max-height: 400px;overflow: scroll;width: 100%;\\\">\\n                                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                                        <tbody>\\n                                        <tr *ngFor=\\\"let usr of pendingusers | filter : searchuser\\\">\\n                                            <td style=\\\"text-align: center; width: 5%;\\\">\\n                                                <div class=\\\"ui-g\\\">\\n                                                    <p-checkbox id=\\\"selusrs\\\" name=\\\"selusrs\\\" value=\\\"{{usr.user_id}}\\\"\\n                                                                label=\\\"\\\" [(ngModel)]=\\\"selusrs\\\"></p-checkbox>\\n                                                </div>\\n                                            </td>\\n                                            <td style=\\\"text-align: center; width: 15%;\\\" class=\\\"td-info-squadlinx\\\">{{usr.user_id}}</td>\\n                                            <td style=\\\"text-align: center; width: 40%;\\\" class=\\\"td-info-squadlinx\\\" >{{usr.completename}}</td>\\n                                            <td style=\\\"text-align: center; width: 40%;\\\" class=\\\"td-info-squadlinx\\\">{{usr.role_name}}</td>\\n                                        </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"pendingusers.length === 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" class=\\\"no-data-user-group\\\">\\n                    No Data\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask btn-close-form-sprints\\\" data-dismiss=\\\"modal\\\"\\n                            (click)=\\\"closeModal()\\\">Close\\n                    </button>\\n                    <button (click)=\\\"saveUsers(selusrs, usersg.grop_id)\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add btn-save-form-sprints\\\"\\n                            [disabled]=\\\"!selusrs || selusrs.length == 0 || usersg.grop_id == 0 \\\">\\n                        Save\\n                    </button>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/group/grouplist.template.html\n// module id = 873\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"sprint_det\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight: bold;\\\">\\n      <i class=\\\"icon icon-maincontrol\\\" aria-hidden=\\\"true\\\"></i>\\n      MY SPRINT {{'# ' + sprint.spri_id }}\\n      <span style=\\\"font-weight: bold; color: #737374;\\\">&nbsp;&nbsp; Group: {{ sprint.grop_name }}</span>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">My Sprint</li>\\n    </ol>\\n  </section>\\n  <div class=\\\"row\\\" style=\\\"height: 62px;background: #dce3e6;\\\">\\n    <div *ngIf=\\\"sprintslist && sprintslist.length > 0\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-top: 5px;\\\">\\n      <div class=\\\"box-header with-border\\\" style=\\\"position: relative;z-index: 2;border-bottom: none!important;text-align: center;min-width: 617px;\\\">\\n        <div class=\\\"btn btn-sm\\\" style=\\\"color:rgb(35,121,205);transform: translate(17%, 2%);\\\">\\n          <span style=\\\"font-size: 14px;font-weight: bold;padding-right: 0px;padding-left: 0px;\\\">sprint</span>\\n        </div>\\n        <p-dropdown id=\\\"ddwnr_spr\\\" class=\\\"ui-g ui-fluid dropdownSqlx\\\" [dropdownIcon]=\\\"icon\\\" [autoWidth]=\\\"false\\\"\\n          [options]=\\\"sprintslist\\\" [(ngModel)]=\\\"mysprint.spri_id\\\" placeholder=\\\"Select a sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n        <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);\\\"\\n          (click)=\\\"updateSprint(mysprint.spri_id)\\\"> Search</button>\\n      </div>\\n    </div>\\n  </div>\\n  <section class=\\\"content\\\" style=\\\"background-color: rgb(247,251,252);\\\">\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-7\\\" style=\\\"padding-left: 0px; padding-right: 0px;margin-bottom: 5px;\\\">\\n        <!-- info sprint -->\\n        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"margin-bottom: 10px;\\\">\\n          <div class=\\\"modal-content-sprint\\\">\\n            <div class=\\\"modal-header-info-sprint\\\">\\n              <span>Sprint Info</span>\\n              <h4 class=\\\"modal-title\\\"></h4>\\n            </div>\\n            <div class=\\\"modal-body\\\">\\n              <div class=\\\"row\\\">\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                  <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">Sprint Start: </label>\\n                  <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_init}}</span>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                  <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">End Date: </label>\\n                  <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_end}}</span>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                  <label class=\\\"control-label col-xs-5 col-md-5 label-sqlx\\\">Points: </label>\\n                  <span class=\\\"label-noedit col-xs-7 col-md-7 span-sqlx\\\">{{sprint.spri_points}}</span>\\n                </div>\\n                <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                  <label class=\\\"control-label col-xs-2 col-sm-2 col-md-2 col-lg-2 label-sqlx\\\">Description: </label>\\n                  <div class=\\\"label-noedit col-xs-10 col-sm-10 col-md-10 col-lg-10 span-sqlx\\\" style=\\\"max-height: 75px; overflow: scroll;\\\">\\n                    {{sprint.spri_description}}\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <!-- end info sprint -->\\n        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right: 0px; padding-left: 0px;\\\">\\n          <!-- team -->\\n          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n            <div class=\\\"modal-content-sprint\\\">\\n              <div class=\\\"modal-header-info-sprint\\\">\\n                <span>Team</span>\\n                <h4 class=\\\"modal-title\\\"></h4>\\n              </div>\\n              <div class=\\\"modal-body\\\">\\n                <div class=\\\"row\\\" style=\\\"margin: 0 auto;\\\">\\n                  <div class=\\\"nav-tabs-custom-spr\\\" style=\\\"overflow-x: scroll;\\\">\\n                    <ul class=\\\"nav-spr nav-tabs-spr\\\" style=\\\"margin: 0 5px; padding:  0;display: inline-flex;\\\">\\n                      <li *ngFor=\\\"let tm of team; let i = index\\\" [ngClass]=\\\"{ 'active': tm.usersel}\\\">\\n                        <div *ngIf=\\\"tm.user_id != 0\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{tm.user_name +' '+ tm.user_lastname}}\\\"\\n                          class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;background: transparent;\\\" [ngStyle]=\\\"{ 'border-color': tm.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                          <img [src]=\\\"tm.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" style=\\\"padding: 0px; width:39px;height:39px;border-radius: 50%;\\\"\\n                            class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                        </div>\\n                        <div *ngIf=\\\"tm.user_id == 0\\\" class=\\\"icon-team-sprint\\\" style=\\\"margin-left: 5px;\\\" [ngStyle]=\\\"{ 'background': tm.role_color}\\\">\\n                          <i class=\\\"sq sq-scrum user-icon-team\\\" aria-hidden=\\\"true\\\" style=\\\"color:#FFF; font-size: 30px;\\\"></i>\\n                        </div>\\n                      </li>\\n                    </ul>\\n                  </div>\\n                </div>\\n                <div class=\\\"row\\\">\\n                  <div class=\\\"col-md-12\\\">\\n                    <h5 id=\\\"team-name\\\" class=\\\"team-label\\\" style=\\\"margin-bottom:0;\\\"></h5>\\n                    <h6 id=\\\"team-profile\\\" class=\\\"team-label\\\" style=\\\"margin:0;\\\"></h6>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-5\\\" style=\\\"padding-left: 0px;margin-top: 5px;\\\">\\n        <!-- burndown -->\\n        <div id=\\\"burndownSprint_mySprint\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n          <div class=\\\"box box-success burndown-border\\\">\\n            <div class=\\\"box-header with-border border-burndown\\\">\\n              <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 btns-burndown\\\" style=\\\"padding:0;\\\">\\n                <div class=\\\"box-tittle BurnDown\\\" style=\\\"padding-top: 5px;transform: translate(-7px, -9px);\\\">\\n                  <i class=\\\"sq sq-burndown\\\" aria-hidden=\\\"true\\\"></i>\\n                  <div class=\\\"burndownsprint\\\">BurnDown</div>\\n                </div>\\n              </div>\\n              <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 btns-burndown\\\" style=\\\"padding-left: 0px;padding-right: 0px;\\\">\\n                <button id=\\\"closeBurndownSprint_mySprint\\\" type=\\\"button\\\" class=\\\"btn btn-box-tool btn-minus pull-right\\\"\\n                  data-widget=\\\"collapse\\\" style=\\\"height: 23px;width: 23px;\\\">\\n                  <i class=\\\"fa fa-minus\\\" style=\\\"margin-left: -5px;margin-top: -6px;padding: -3px;position: absolute;\\\"></i>\\n                </button>\\n                <div class=\\\"pull-right\\\" id=\\\"button-work-team\\\">\\n                  <a id=\\\"showburndown-sprint\\\" href=\\\"javascript:void(0)\\\" (click)=\\\"showburndown()\\\">YOUR WORK TEAM\\n                    <i class=\\\"fa fa-chevron-down\\\" aria-hidden=\\\"true\\\"></i></a>\\n                </div>\\n              </div>\\n            </div>\\n            <div class=\\\"box-body\\\">\\n              <p-chart id=\\\"burndowndata-sprint\\\" type=\\\"line\\\" [data]=\\\"burndownData\\\" (onDataSelect)=\\\"chartClicked($event)\\\"\\n                height=\\\"200\\\"></p-chart>\\n            </div>\\n          </div>\\n        </div>\\n        <!-- end burndown -->\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-xs-11 col-sm-11 col-md-12 col-lg-12\\\">\\n        <div class=\\\"box-params-sprint\\\">\\n          <div class=\\\"box-body\\\">\\n            <div>\\n              <br>\\n              <table id=\\\"results-params\\\" class=\\\"table table-bordered-sqlxs table-sprintsview\\\">\\n                <thead style=\\\"border: 1px solid #fff;\\\">\\n                  <th style=\\\"width: 6%;\\\">Task</th>\\n                  <th style=\\\"width: 45%;\\\">Task Description</th>\\n                  <th style=\\\"width: 10%;\\\">Product</th>\\n                  <th style=\\\"width: 6%;\\\">Project Related</th>\\n                  <th style=\\\"width: 6%;\\\">Task Points</th>\\n                  <th style=\\\"width: 6%;\\\">Task Points D</th>\\n                  <th style=\\\"width: 6%;\\\">Asigned</th>\\n                  <th style=\\\"width: 15%;\\\">Actions</th>\\n                </thead>\\n                <tbody>\\n                  <tr *ngFor=\\\"let spr of sprints\\\">\\n                    <td>{{ escapeHtml(spr.task_id) }}</td>\\n                    <td style=\\\"text-align: justify!important;\\\">{{ escapeHtml(spr.task_subject) }}</td>\\n                    <td>{{ spr.prod_name }}</td>\\n                    <td>\\n                      <a (click)=\\\"showModalProject(spr.proj_id)\\\" *ngIf=\\\"spr.proj_id; else alternan\\\">{{escapeHtml(spr.proj_id)\\n                        }}</a>\\n                      <ng-template #alternan>\\n                        <p> - </p>\\n                      </ng-template>\\n                    </td>\\n                    <td>{{ escapeHtml(spr.task_points) }}</td>\\n                    <td>{{ escapeHtml(spr.task_pointsd) }}</td>\\n                    <td>\\n                      <div class=\\\"col-xs-12 col-md-12\\\">\\n                        <div class=\\\"icon-team-sprint-table\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"{{spr.user_name +' '+ spr.user_lastname}}\\\"\\n                          style=\\\"margin-left: 5px;background: transparent;\\\" [ngStyle]=\\\"{ 'border-color': spr.role_color, 'border-style': 'solid', 'border-width': '3px'}\\\">\\n                          <img [src]=\\\"spr.urlimg\\\" onError=\\\"this.src='img/logo_menu_min.svg'\\\" style=\\\"width:24px;height:24px;border-radius: 50%;\\\"\\n                            class=\\\"user-image\\\" alt=\\\"User Image\\\">\\n                        </div>\\n                      </div>\\n                    </td>\\n                    <td>\\n                      <div class=\\\"btn-group-params\\\">\\n                        <i class=\\\"sq sq-search\\\" aria-hidden=\\\"true\\\" (click)=\\\"showModaltk(spr.task_id)\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Quick View\\\"></i>\\n                      </div>\\n                      <taskview [myTaskId]=\\\"spr.task_id\\\"></taskview>\\n                    </td>\\n                    <projectview [myProjectId]=\\\"spr.proj_id\\\"></projectview>\\n                  </tr>\\n                </tbody>\\n                <tfoot>\\n                  <tr>\\n                    <th></th>\\n                    <th></th>\\n                    <th></th>\\n                    <th style=\\\"text-align: right; color:#333333;\\\">Total Points:</th>\\n                    <th style=\\\"text-align: center; color:#333333;\\\">{{round(totalpoints_p, 2)}}</th>\\n                    <th style=\\\"text-align: center; color:#333333;\\\">{{round(totalpoints_d, 2)}}</th>\\n                    <th style=\\\"text-align: right; color:#333333;\\\">Pending Points:</th>\\n                    <th style=\\\"text-align: center; color:#333333;\\\">( {{round(totalpoints_pending, 2)}} )</th>\\n                  </tr>\\n                </tfoot>\\n              </table>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n  <div class=\\\"modal fade\\\" id=\\\"mdBurndown\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\">\\n      <div class=\\\"modal-content\\\" style=\\\" border-radius: 18px;\\\">\\n        <div class=\\\"modal-header modal-workteam\\\">\\n          <button id=\\\"buttonClose_mdBurndown_mySprint\\\" type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\"\\n            style=\\\"color: #ffffff; opacity: 1;\\\" (click)=\\\"doneFilter()\\\">\\n            <i class=\\\"sq sq-close\\\"></i>\\n          </button>\\n          <h3 class=\\\"modal-title \\\" style=\\\"color: #ffffff; font-weight: bold; padding-left: 20px;\\\">Select work team</h3>\\n        </div>\\n        <!--.modal-header-->\\n        <div id=\\\"divSearch_mdBurndown_mySprint\\\" class=\\\"modal-body\\\" style=\\\"height:100%;\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 search-work-team\\\" style=\\\"padding-right: 3px;\\\">\\n              <div class=\\\"pull left col-xs-11 col-sm-11 col-md-11 col-lg-11 label-input-mainfilter\\\" style=\\\" padding: 0; margin-left: 0;\\\">\\n                <input id=\\\"searchUser_mdBurndown_mySprint\\\" name=\\\"searchUser_mdBurndown_mySprint\\\" type=\\\"text\\\" class=\\\"input-mainfilter\\\"\\n                  placeholder=\\\"Search\\\" [(ngModel)]=\\\"searchuser\\\" style=\\\"font-weight: bold; font-size: 17px;\\\">\\n              </div>\\n              <div class=\\\"pull-right col-xs-1 col-sm-1 col-md-1 col-lg-1 search-input-mainfilter\\\" style=\\\"margin: 0; padding: 0;\\\">\\n                <i class=\\\"sq sq-view\\\" style=\\\"color:rgb(68, 180, 248); font-size: 1.8em;\\\"></i>\\n              </div>\\n            </div>\\n          </div>\\n          <div id=\\\"divSelect_mdBurndown_mySprint\\\" class=\\\"form-group\\\" style=\\\"max-height: 400px;overflow: scroll;\\\">\\n            <table class=\\\"table table-parent\\\" style=\\\"border:none!important; max-height:100px;\\\">\\n              <thead>\\n                <th id=\\\"selectAllItems_mdBurndown_mySprint\\\" (click)=\\\"selectAllItems()\\\" style=\\\"width: 30px; padding-left: 10px; padding-top: 10px;\\\">\\n                  <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"padding-left: 15px; padding-top: 0; font-size: 1.5em;\\\">\\n                    <i *ngIf=\\\"selectedNodes.length > 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                    <i *ngIf=\\\"selectedNodes.length == 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                  </div>\\n                  <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 select-product\\\" style=\\\"color: rgb(130, 145, 152); padding: 6px 0;\\\">\\n                    ALL\\n                  </div>\\n                </th>\\n              </thead>\\n              <tbody>\\n                <tr *ngFor=\\\"let ct of contactsTree\\\">\\n                  <td style=\\\"padding:0 12px 12px 12px; \\\">\\n                    <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product\\\" style=\\\"height: auto; padding: 0;\\\">\\n\\n                      <p-checkbox id=\\\"selectparent_mdBurndown_mySprint\\\" name=\\\"product-checkbox\\\" value=\\\"{{ct.data}}\\\"\\n                        label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelectA($event, ct.children, ct.data)\\\"\\n                        (change)=\\\"updateSelectA($event, ct.children, ct.data)\\\"></p-checkbox>\\n\\n                    </div>\\n                    <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align: left; padding: 0;text-transform: uppercase; font-weight: bold; \\\">\\n                      {{ ct.label }}\\n                    </div>\\n                    <div *ngIf=\\\"ct.children.length > 0\\\">\\n                      <div *ngFor=\\\"let ch of ct.children | filter : searchuser\\\" style=\\\"margin-left:20px;\\\">\\n                        <div class=\\\"ui-g col-xs-1 col-sm-1 col-md-1 col-lg-1 select-product pull-rigth\\\" style=\\\"margin:0;padding:0;height:auto;max-height: 30px;\\\">\\n                          <p-checkbox id=\\\"selectchild_mdBurndown_mySprint\\\" name=\\\"product-checkbox\\\" value=\\\"{{ch.data}}\\\"\\n                            label=\\\"\\\" [(ngModel)]=\\\"selectedNodes\\\" (click)=\\\"updateSelect($event)\\\" (change)=\\\"updateSelect($event)\\\"></p-checkbox>\\n                        </div>\\n                        <div class=\\\"col-xs-5 col-sm-5 col-md-5 col-lg-5 select-product\\\" style=\\\"text-align:left;height:auto;max-height: 30px; padding:0; font-weight: bold;\\\">\\n                          {{ ch.label }}\\n                        </div>\\n                      </div>\\n                    </div>\\n                  </td>\\n                </tr>\\n              </tbody>\\n            </table>\\n          </div>\\n        </div>\\n        <!--.modal-body-->\\n        <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n          <button id=\\\"buttonDone_mdBurndown_mySprint\\\" type=\\\"btn btn-default\\\" class=\\\"btn-done-burndown\\\" data-dismiss=\\\"modal\\\"\\n            (click)=\\\"doneFilter()\\\">Done</button>\\n        </div>\\n        <!--.modal-footer-->\\n      </div>\\n      <!--.modal-content-->\\n    </div>\\n    <!--.modal-dialog-->\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdDayView\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button id=\\\"buttonX_dayView_mySprint\\\" type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\"\\n            aria-label=\\\"Close\\\" style=\\\"color:white;\\\"><i class=\\\"sq sq-close\\\" style=\\\"color:white;font-weight: bold;font-size: 20px;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color:white;font-weight: bold;font-size: 18px;text-transform: uppercase;\\\"><i\\n              class=\\\"sq sq-burndown\\\" style=\\\"font-weight: bold;font-size: 33px;\\\"></i> Day Job for {{dayJob}} </h4>\\n        </div>\\n        <div class=\\\"content-comments-users\\\" style=\\\"max-height: 190px;min-height: 75px;overflow: scroll;\\\">\\n          <div class=\\\"box-body\\\" style=\\\"margin-top:10px;\\\">\\n            <ul class=\\\"timeline daily-timeline\\\">\\n              <li *ngFor=\\\"let day of dayView\\\" style=\\\"padding-bottom:5px;\\\">\\n                <i class=\\\"fa fa-dot-circle-o\\\" style=\\\"color: rgb(68, 180, 248); font-size: 30px;background-color: transparent;margin-left: -3px; margin-top: -3px;\\\"></i>\\n                <div class=\\\"timeline-item daily-timeline-item\\\">\\n                  <h3 class=\\\"timeline-header timeline-dailyheader\\\">\\n                    <span *ngIf=\\\"day.task_id && day.task_id != null\\\" [ngStyle]=\\\"day.spri_id == null ? { 'color': 'red' } : {}\\\">\\n                      <b>TASK #{{day.task_id}}</b><br>\\n                    </span>\\n\\n                    <b>Points registered:\\n                      {{day.dail_points}}</b>\\n                    <span *ngIf=\\\"day.task_percentage && day.task_percentage != 0\\\" style=\\\"font-weight: bold;margin-left: 258px;\\\">Progress:\\n                      {{day.task_percentage}}%</span>\\n                  </h3>\\n                  <div class=\\\"timeline-body daily-timeline-body\\\" style=\\\"margin-top: -8px;max-height: 45px;overflow: scroll;color:rgb(167, 167, 167); width: 93%;text-align: justify;\\\">\\n                    {{\\\"Comments: \\\" + escapeHtml(day.dail_text)}}\\n                  </div>\\n                </div>\\n              </li>\\n            </ul>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"totalp && totalp > 0\\\" style=\\\"border: none; text-align: center;\\\">\\n          <h4 style=\\\"font-weight: bold;font-size: 14px;\\\"> TOTAL POINTS REGISTERED : {{\\\" \\\" + totalp}} </h4>\\n        </div>\\n        <div class=\\\"modal-footer\\\" style=\\\"text-align: center;\\\">\\n          <button id=\\\"buttonClose_dayView_mySprint\\\" type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" data-dismiss=\\\"modal\\\"\\n            style=\\\"background-color: rgb(141,180,95);\\\">Close</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/sprint/mysprint.template.html\n// module id = 874\n// module chunks = 0","module.exports = \"    <!-- <a href=\\\"javascript:void(0)\\\" (click)=showMessage()>\\n        <span class=\\\"comment-whiteboard\\\"  data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" style=\\\"font-size: 20px;\\\">\\n            <img src=\\\"img/newpost.svg\\\" style=\\\"height: 60px; width: 60px;\\\">\\n        </span>\\n    </a> -->\\n    <my-header></my-header>\\n    <section id=\\\"whiteboard\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 65px;\\\">\\n      <section class=\\\"content-whiteboard\\\" style=\\\"margin-top: 20px\\\">\\n\\n        <div *ngIf=\\\"messageslist && messageslist.length > 0\\\" style=\\\"width: 100%; text-align:center;\\\">\\n            <button class=\\\"btn btn-default btn-sm btnNewMessage_whiteboard\\\" (click)=showMessage() data-target=\\\"#AddForm\\\" data-toggle=\\\"modal\\\" type=\\\"button\\\">New Message</button>\\n        </div>\\n        <div *ngIf=\\\"messageslist && messageslist.length == 0\\\" class=\\\"row\\\" style=\\\"margin-left:0px;text-align:center;\\\">\\n            <div class=\\\"content-message\\\" >\\n                <p style=\\\"margin-bottom: 20px\\\">Empty timeline, lets fill it up. Post a message</p>\\n                <button style=\\\"color: #FFFFFF; background-color: #91D061;border-radius: 5px;\\\" (click)=showMessage()>New Message</button>\\n            </div>\\n        </div>\\n        <div *ngIf=\\\"messageslist && messageslist.length > 0\\\"  class=\\\"content-profile-whiteboard\\\">\\n            <div class=\\\"list-Messagewhiteboard\\\" style=\\\" margin-top: 50px;\\\">\\n                <div *ngFor=\\\"let c of messageslist\\\" class=\\\"row\\\" style=\\\"width: 98%; margin-left: 0%; padding-bottom: 30px; margin-right: 0%;\\\">\\n                        <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-2 btn-editPtofile\\\" style=\\\"text-align: center; margin-top: 20px;\\\">\\n                            <span class=\\\"btn-visits pull-right\\\"  style=\\\"overflow: hidden; border-radius: 50px; width: 50px; height: 50px; box-shadow: 2px 2px 20px 0px rgba(185, 195, 202, 1);\\\">\\n                                <img [src]=\\\"c.user_photo\\\" onError=\\\"this.src='img/user.png'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"max-width: 100%\\\">\\n                            </span>\\n                        </div>\\n                        <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-10\\\" style=\\\"padding: 0px; margin-top: 20px;\\\">\\n                          <div class=\\\"col-md-12 col-lg-12\\\" style=\\\"padding: 0px 0px 20px;\\\">\\n                            <span style=\\\"font-weight: bold; color: #283760; font-size: 20px;\\\"> {{c.name}}</span>\\n                            <button aria-label=\\\"Close\\\" class=\\\"pull-right btncloseMessage_whiteboard\\\" (click)=\\\"deletePost(1,c.id)\\\" type=\\\"button\\\">\\n                                <span aria-hidden=\\\"true\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> </span>\\n                            </button>\\n                          </div>\\n                          <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                            <p style=\\\"overflow-wrap: break-word; color: #8A989E; font-weight: bold; font-size: 15px;\\\">{{c.description}}</p>\\n                          </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding:5px 0px; border-bottom: 3px solid #DCE3E6;\\\">\\n                          <div style=\\\"float:left; margin-top:10px;\\\">\\n                            <span style=\\\"color: #8A989E; font-weight: bold; font-size: 10px;\\\">posted: {{c.datetime}}</span>\\n                          </div>\\n                          \\n                          <div class=\\\"pull-right\\\" style=\\\"height: 30px; text-align: center; \\\">\\n                              <a href=\\\"javascript:void(0)\\\" (click)=showComments(c.id) style=\\\"text-decoration: none; float: left; padding-left: 10px; margin-right: 9px;\\\">\\n                                  <img class=\\\"icons_reactions_whiteboard\\\" src=\\\"img/new_comment.svg\\\">\\n                                  <span style=\\\"font-size: 12px; color: #717171;\\\">{{c.child_comments.length}}</span>\\n                              </a>\\n                              <ul style=\\\"float:left; padding-left: 3px;\\\" class=\\\"dropdown-whiteboard\\\">\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                    <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\" (click)=\\\"addLike(1,c.id, c.reactionPost[0].id_reaction)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                                        <span>\\n                                            <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"like\\\" src=\\\"img/reaction_like.svg\\\">\\n                                            <span *ngIf=\\\"c.reactionPost[0].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[0].quantity}}</span>\\n                                        </span>\\n                                    </a>\\n                                    <ul class=\\\"dropdown-content\\\">\\n                                        <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                        <div style=\\\"background: #A1D6F6;\\\" >\\n                                            <p *ngIf=\\\"u.id_reaction == '1' \\\">\\n                                            {{u.completename}} Likes this\\n                                            </p>\\n                                        </div>\\n                                        </li>\\n                                    </ul>\\n                                </li>\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                  <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\"  (click)=\\\"addLove(1,c.id, c.reactionPost[1].id_reaction)\\\" class=\\\"dropdown-toggle \\\" data-toggle=\\\"dropdown\\\">\\n                                    <span>\\n                                        <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"love\\\" src=\\\"img/reaction_love.svg\\\">\\n                                      <span *ngIf=\\\"c.reactionPost[1].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[1].quantity}}</span>\\n                                    </span>\\n                                  </a>\\n                                    <ul class=\\\"dropdown-content\\\">\\n                                      <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                        <div style=\\\"background: #A1D6F6;\\\" >\\n                                          <p *ngIf=\\\"u.id_reaction == '2' \\\">\\n                                            {{u.completename}} Loves this\\n                                          </p>\\n                                        </div>\\n                                      </li>\\n                                    </ul>\\n                                </li>\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                  <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\"  (click)=\\\"addAngry(1,c.id, c.reactionPost[2].id_reaction)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                                    <span>\\n                                        <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"angry\\\" src=\\\"img/reaction_angry.svg\\\">\\n                                      <span *ngIf=\\\"c.reactionPost[2].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[2].quantity}}</span>\\n                                    </span> \\n                                  </a>\\n                                  <ul class=\\\"dropdown-content\\\">\\n                                    <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                      <div style=\\\"background: #A1D6F6;\\\" >\\n                                        <p *ngIf=\\\"u.id_reaction == '3' \\\">\\n                                          {{u.completename}} Angry this\\n                                        </p>\\n                                      </div>\\n                                    </li>\\n                                  </ul>\\n                                </li>\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                  <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\"  (click)=\\\"addFun(1,c.id, c.reactionPost[3].id_reaction)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                                    <span>\\n                                        <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"smile\\\" src=\\\"img/reaction_smile.svg\\\">\\n                                      <span *ngIf=\\\"c.reactionPost[3].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[3].quantity}}</span>\\n                                    </span>   \\n                                  </a>\\n                                  <ul class=\\\"dropdown-content\\\">\\n                                    <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                      <div style=\\\"background: #A1D6F6;\\\" >\\n                                        <p *ngIf=\\\"u.id_reaction == '4' \\\">\\n                                          {{u.completename}} Fun this\\n                                        </p>\\n                                      </div>\\n                                    </li>\\n                                  </ul>\\n                                </li>\\n                                <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                  <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right: 13px; display: inline-block\\\"  (click)=\\\"addWow(1,c.id, c.reactionPost[4].id_reaction)\\\" class=\\\"dropdown-toggle\\\" data-toggle=\\\"dropdown\\\">\\n                                    <span>\\n                                        <img class=\\\"icons_reactions_whiteboard\\\" id=\\\"surprised\\\" src=\\\"img/reaction_surprised.svg\\\">\\n                                      <span *ngIf=\\\"c.reactionPost[4].quantity > 0 \\\" style=\\\"font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{c.reactionPost[4].quantity}}</span>\\n                                    </span>\\n                                  </a>\\n                                  <ul class=\\\"dropdown-content\\\">\\n                                    <li *ngFor=\\\"let u of c.usuarios\\\"> \\n                                      <div style=\\\"background: #A1D6F6;\\\" >\\n                                        <p *ngIf=\\\"u.id_reaction == '5' \\\">\\n                                          {{u.completename}} Surprise this\\n                                        </p>\\n                                      </div>\\n                                    </li>\\n                                  </ul>\\n                                </li>\\n                              </ul>\\n                          </div>\\n                      </div>\\n                        </div>\\n                        <div class=\\\"content-children\\\">\\n                          <div *ngFor=\\\"let ch of c.child_comments\\\" class=\\\"children-comments\\\">\\n                              <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-2\\\"></div>\\n                              <div class=\\\"col-xs-9 col-sm-9 col-md-9 col-lg-10\\\" style=\\\"padding-left: 0px; padding-right: 0px; padding-top: 15px;\\\">\\n                                <div class=\\\"child-comment col-xs-12\\\" style=\\\"padding: 0px;\\\" >\\n                                    <div class=\\\"col-xs-1 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"margin-top: 10px; padding-left:0px; padding-right: 0px; text-align: center;\\\">\\n                                        <span class=\\\"btn-visits pull-right\\\"  style=\\\"overflow: hidden; border-radius: 50px; width: 38px; height: 38px; box-shadow: 2px 2px 20px 0px rgba(185, 195, 202, 1); margin-right: 10px;\\\">\\n                                          <img [src]=\\\"ch.image\\\" onError=\\\"this.src='img/user.png'\\\" class=\\\"user-image\\\" alt=\\\"User Image\\\" style=\\\"max-width: 100%\\\">\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11\\\" style=\\\"margin-top: 10px; padding-left: 0px;\\\">\\n                                      <div class=\\\"col-md-12 col-lg-12\\\" style=\\\"padding: 0px 0px 20px;\\\">\\n                                        <span style=\\\"font-weight: bold; color: #283760; font-size: 18px;\\\"> {{ch.name}}</span>\\n                                        <button aria-label=\\\"Close\\\" class=\\\"pull-right btncloseMessage_whiteboard\\\" (click)=\\\"deletePost(2,ch.id_comentario)\\\" type=\\\"button\\\">\\n                                            <span aria-hidden=\\\"true\\\"><i aria-hidden=\\\"true\\\" class=\\\"fa fa-times\\\"></i> </span>\\n                                        </button>\\n                                      </div>\\n                                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-left: 0px;\\\">\\n                                        <p style=\\\"overflow-wrap: break-word; color: #8A989E; font-weight: bold;\\\">{{ch.description}}</p>\\n                                      </div>\\n                                      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12 posted-comment\\\" style=\\\"border-bottom: 2px solid #DCE3E6; padding:5px 0px;\\\">\\n                                        <div style=\\\"float:left; margin-top:5px;\\\">\\n                                          <span style=\\\"color: #8A989E; font-weight: bold; font-size: 10px;\\\">posted: {{ch.datetime}}</span> \\n                                        </div>\\n                                          \\n                                          <ul class=\\\"pull-right dropdown-whiteboard\\\" style=\\\"border-radius: 10px; color: #38A0F4; margin-bottom: 0px;\\\">\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addLove(2,ch.id_comentario, ch.reactionComment[1].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"love_comment\\\" src=\\\"img/reaction_love.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[1].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[1].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li *ngFor=\\\"let lc of ch.child_usuarios\\\"> \\n                                                  <div style=\\\"background: #A1D6F6;\\\" >\\n                                                    <p *ngIf=\\\"lc.id_reaction == '2' \\\">\\n                                                      {{lc.completename}} Loves this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\" >\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addAngry(2,ch.id_comentario, ch.reactionComment[2].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"angry_comment\\\" src=\\\"img/reaction_angry.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[2].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[2].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li *ngFor=\\\"let lc of ch.child_usuarios\\\"> \\n                                                  <div style=\\\"background: #A1D6F6;\\\">\\n                                                    <p *ngIf=\\\"lc.id_reaction == '3' \\\">\\n                                                      {{lc.completename}} Angry this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addFun(2,ch.id_comentario, ch.reactionComment[3].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"smile_comment\\\" src=\\\"img/reaction_smile.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[3].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[3].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li *ngFor=\\\"let lc of ch.child_usuarios\\\" > \\n                                                  <div style=\\\"background: #A1D6F6;\\\">\\n                                                    <p *ngIf=\\\"lc.id_reaction == '4' \\\">\\n                                                      {{lc.completename}} Fun this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addWow(2,ch.id_comentario, ch.reactionComment[4].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"surprised_comment\\\" src=\\\"img/reaction_surprised.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[4].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[4].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li *ngFor=\\\"let lc of ch.child_usuarios\\\" > \\n                                                  <div style=\\\"background: #A1D6F6;\\\">\\n                                                    <p *ngIf=\\\"lc.id_reaction == '5' \\\">\\n                                                      {{lc.completename}} Surprise this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                            <li style=\\\"display:inline;\\\" class=\\\"dropdown\\\">\\n                                              <a href=\\\"javascript:void(0)\\\" style=\\\"margin-right:10px; display: inline-block;\\\" (click)=\\\"addLike(2,ch.id_comentario, ch.reactionComment[0].id_reaction)\\\" class=\\\"dropbtn-whiteboard\\\" data-toggle=\\\"dropdown\\\">\\n                                                <span>\\n                                                    <img class=\\\"icons_reactionsComments_whiteboard\\\" id=\\\"like_comment\\\" src=\\\"img/reaction_like.svg\\\">\\n                                                  <span *ngIf=\\\"ch.reactionComment[0].quantity > 0 \\\" style=\\\"padding: 0px 5px; font-size: 12px; top: -9px; position: absolute; left: -4px; background: #38A0F4; color: #ffffff; font-weight: bold; height: 15px; width: 15px; border-radius: 7px 7px 3px 7px;\\\">{{ch.reactionComment[0].quantity}}</span>\\n                                                </span>\\n                                              </a>\\n                                              <ul class=\\\"dropdown-content\\\">\\n                                                <li  *ngFor=\\\"let lc of ch.child_usuarios\\\" > \\n                                                  <div style=\\\"background: #A1D6F6;\\\">\\n                                                    <p *ngIf=\\\"lc.id_reaction == '1' \\\">\\n                                                      {{lc.completename}} Likes this\\n                                                    </p>\\n                                                  </div>\\n                                                </li>\\n                                              </ul>\\n                                            </li>\\n                                          </ul>\\n                                      </div>\\n                                    </div>\\n                                </div>\\n                              </div>\\n                          </div>\\n                        </div>\\n                </div>\\n            </div>\\n        </div>\\n      </section>\\n      <div class=\\\"modal modal-message fade\\\" id=\\\"mdMessage\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-md mdmessage-whiteboard\\\" style=\\\"margin-top: 136px;\\\" role=\\\"document\\\">\\n          <div class=\\\"modal-content-params\\\">\\n            <div class=\\\"modal-header modal-header-info-params\\\" style=\\\"color: #ffffff;\\\">\\n              <button type=\\\"button\\\" class=\\\"pull-right close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                <span aria-hidden=\\\"true\\\"><i class=\\\"sq sq-close\\\" aria-hidden=\\\"true\\\" style=\\\"color: #FFFFFF;\\\"></i>\\n                </span>\\n              </button>\\n              <i class=\\\"fa fa-comment-o pull-left\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 22px; margin-right: 8px;\\\"></i>\\n              <h4 class=\\\"modal-title pull-left\\\" style=\\\"font-weight: bold\\\">New Message</h4>\\n            </div>\\n            <div class=\\\"modal-body contenedoModal_notAttachments\\\">\\n              <div class=\\\"row\\\">\\n                <textarea [(ngModel)]=\\\"messages.description\\\" name=\\\"textarea\\\" rows=\\\"6\\\" cols=\\\"70\\\" placeholder=\\\"Type Message\\\" class=\\\"col-xs-12 input-description-milestone textarea_newMessaje_whiteboard \\\"></textarea>\\n              </div>\\n            </div>\\n            <div class=\\\"modal-footer\\\">\\n              <div class=\\\"pull-left\\\" style=\\\"width: 200px;\\\">\\n                  <p-multiSelect [options]=\\\"groups\\\"  dropdownIcon=\\\"sq sq-down-arrow\\\" [(ngModel)]=\\\"messages.group\\\" [panelStyle]=\\\"{minWidth:'12em'}\\\" class=\\\"pull-left myteams-message\\\"></p-multiSelect>\\n              </div>\\n              <div class=\\\"col-xs-4 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-top: 7px; padding-right: 0px;\\\">\\n                <span class=\\\"pull-left\\\" style=\\\"color: #829198; font-family: helvetica neue; font-weight: normal;\\\">\\n                  <p-checkbox [(ngModel)]=\\\"messages.notify\\\" binary=\\\"true\\\"></p-checkbox>\\n                  Notify\\n                </span>\\n              </div>\\n              <div class=\\\"pull-right\\\">\\n                <button type=\\\"button\\\" class=\\\"btn-sm btn-success btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\" >Close</button>\\n                <button  class=\\\"btn btn-sm button_savedescriptionrejected_sqlx\\\" type=\\\"button\\\" data-dismiss=\\\"modal\\\" (click)=saveMessage() [disabled]=\\\"validate()\\\">Send</button>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n      <div class=\\\"modal modal-comments fade\\\" id=\\\"mdComments\\\" role=\\\"dialog\\\">\\n          <div class=\\\"modal-dialog modal-md mdcomments-whiteboard\\\" style=\\\"margin-top: 136px;\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\" >\\n              <div class=\\\"modal-header modal-header-info-params\\\" style=\\\"color: #ffffff;\\\">\\n                <button type=\\\"button\\\" class=\\\"pull-right close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" >\\n                  <span aria-hidden=\\\"true\\\"><i class=\\\"fa fa-times\\\" aria-hidden=\\\"true\\\"></i>\\n                  </span>\\n                </button>\\n                <i class=\\\"fa fa-comment-o pull-left\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 22px; margin-right: 8px;\\\"></i>\\n                <h4 class=\\\"modal-title pull-left\\\" style=\\\"font-weight: bold\\\">New Comment</h4>\\n              </div>\\n              <div class=\\\"modal-body contenedoModal_notAttachments\\\" style=\\\"min-height: 200px;padding: 30px;\\n              \\\">\\n                <div class=\\\"row\\\">\\n                  <textarea [(ngModel)]=\\\"comments.description\\\" name=\\\"textarea\\\" rows=\\\"6\\\" cols=\\\"70\\\" placeholder=\\\"Type Comment\\\" class=\\\"col-xs-12 input-description-milestone textarea_newMessaje_whiteboard\\\"></textarea>\\n                </div>\\n              </div>\\n              <div class=\\\"modal-footer\\\">\\n                  <!-- <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\" style=\\\"background: #E94367; color: #ffffff; width: 80px; font-size: 14px; height: 30px; border: none;\\\">Back</button>\\n                  <button  [disabled]=\\\"validateComment()\\\" class=\\\"btn btn-primary btn-sm\\\" type=\\\"button\\\" data-dismiss=\\\"modal\\\" (click)=\\\"saveComments() \\\" style=\\\"width: 80px; background: #6AB925; border: none;font-size: 15px;height: 30px;\\\">Send</button> -->\\n                  <div class=\\\"pull-right\\\">\\n                        <button class=\\\"btn-success btn-sm btn-close-sprintTask\\\"  id=\\\"buttonClose_duplicateTask\\\" type=\\\"button\\\">Close</button>\\n                        <button class=\\\"btn btn-sm button_savedescriptionrejected_sqlx\\\" (click)=\\\"saveComments()\\\" [disabled]=\\\"validateComment()\\\" data-dismiss=\\\"modal\\\" type=\\\"button\\\" disabled=\\\"\\\">Send</button>\\n                  </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      \\n      <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n    </section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/whiteboard/whiteboard.template.html\n// module id = 875\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"externalrequests\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n  <!-- Content Header (Page header) -->\\n  <section class=\\\"content-header\\\">\\n    <h2 style=\\\"font-weight:bold\\\">\\n      <i class=\\\"sq sq-requests\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> EXTERNAL REQUESTS\\n      <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n    </h2>\\n    <ol class=\\\"breadcrumb\\\">\\n      <li>\\n        <a routerLink=\\\"/dashboard\\\">\\n          <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n      </li>\\n      <li class=\\\"active\\\">External Request</li>\\n    </ol>\\n  </section>\\n  <section class=\\\"content\\\">\\n    <div class=\\\"row\\\" style=\\\"min-width: 410px;\\\">\\n      <div *ngFor=\\\"let ty of types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.type_color, 'border-radius': '15px', 'color': 'white', 'padding-right': '10px', 'cursor': 'pointer','border': 'solid 6px rgb(247,247,247)'} : {}\\\"\\n        class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\" (click)=\\\"setStateList([ty.type_id])\\\">\\n        <div class=\\\"col-xs-8 col-sm-8 col-md-8 col-lg-8 content-buttons pull-left\\\" style=\\\"margin-top: 18px;padding: 0px;\\\">\\n          <span style=\\\"font-size: 20px; font-weight: bold; text-align: center;\\\">{{ty.count}}</span>\\n          <span style=\\\"text-transform: uppercase; font-size: 20px; font-weight: bold; text-align: center;\\\"> <i class=\\\"{{ty.type_label}}\\\"\\n              style=\\\"font-size: 24px; text-align: center; font-weight: bold;\\\"></i>{{ty.type_name}} </span>\\n        </div>\\n        <div class=\\\"col-xs-4 col-sm-4 col-md-4 col-lg-4 content-buttons pull-right\\\" style=\\\"padding:0px;margin-bottom: 4px; margin-top: -8px;\\\">\\n          <div class=\\\"row button-row\\\">\\n            <div class=\\\"col-xs-6 button-types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.backgorund_color, 'border-radius': '15px', 'color': 'white' } : {}\\\">\\n              <div style=\\\"padding-top: 9px;padding-left: -3px; margin-left: -2px;\\\">\\n                <a href=\\\"javascript:void(0)\\\" (click)=\\\"showCategories(ty.type_id, ty.type_name, ty.type_color,ty.type_label)\\\"\\n                  style=\\\"color:white;text-decoration:none\\\">\\n                  <i class=\\\"sq sq-info more-info\\\" style=\\\"font-size: 30px;\\\"></i>\\n                </a>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-6 button-types\\\" [ngStyle]=\\\"ty.type_id ? {'background': ty.backgorund_color, 'border-radius': '15px', 'color': 'white' } : {}\\\">\\n              <div style=\\\" padding-top: 10px; margin-left: -16px; margin-right: 3px;padding-left: 12px;\\\">\\n                <a href=\\\"javascript:void(0)\\\" id=\\\"addError\\\" (click)=\\\"addEvent(ty.type_id, ty.type_name, ty.type_color,ty.type_label)\\\"\\n                  style=\\\"color:white;text-decoration:none\\\">\\n                  <i class=\\\"sq sq-add-1 more-info\\\" style=\\\"font-size: 30px;\\\"></i>\\n                </a>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\" style=\\\"margin-top: 5px; margin-bottom: 5px; margin-right: 5px;\\\">\\n      <div class=\\\"nav-tabs-customr col-xs-12 col-sm-5 col-md-5 col-lg-5 req_btn\\\" style=\\\"display: inline-flex;margin-bottom: 10px;margin-right: 10px;\\\">\\n        <ul *ngIf=\\\"types && types.length > 0\\\" class=\\\"nav nav-tabs nav-tabs-sqlxs\\\" style=\\\"border-bottom:none;\\\">\\n          <li [ngClass]=\\\"{'active':typeSelected === '1,3,4'}\\\" class=\\\"active\\\" style=\\\"border-top:none; padding: 8px;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"All\\\">\\n            <a href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['1','3','4'])\\\" style=\\\"padding: 0px 10px 0px 7px;border-color:transparent!important;\\\">All</a>\\n          </li>\\n          <li [ngClass]=\\\"{'active':typeSelected === '1'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[0].type_name}}>\\n            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['1'])\\\" style=\\\"border-color:transparent!important;\\\">\\n              <i class=\\\"sq sq-errors\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; text-align: center;margin-left: 3px; margin-right: 1px;\\\"></i>\\n            </a>\\n          </li>\\n          <li [ngClass]=\\\"{'active':typeSelected === '3'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[1].type_name}}>\\n            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['3'])\\\" style=\\\"border-color:transparent!important;\\\">\\n              <i class=\\\"sq sq-developing\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; text-align: center; margin-left: 3px; margin-right: 1px;\\\"></i>\\n            </a>\\n          </li>\\n          <li [ngClass]=\\\"{'active':typeSelected === '4'}\\\" style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip={{types[2].type_name}}>\\n            <a href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(['4'])\\\" style=\\\"border-color:transparent!important;\\\">\\n              <i class=\\\"sq sq-implementations\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n            </a>\\n          </li>\\n          <li style=\\\"border-top:none;\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n            <a (click)=\\\"reload()\\\" style=\\\"border-color:transparent!important;\\\">\\n              <i class=\\\"sq sq-refresh\\\" style=\\\"color:#0fb4ff; font-size: 24px;width: 28px; margin: 5px; margin-top: 0px; text-align: right;\\\"></i>\\n            </a>\\n          </li>\\n        </ul>\\n      </div>\\n      <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n        <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n          <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n            <div class=\\\"label-input-mainfilter\\\">\\n              <input id=\\\"er_search_reqext\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\"\\n                placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n            </div>\\n            <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n              <button type=\\\"button\\\" (click)=\\\"searchFilter()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 1px; margin-right: 8px; margin-top: 2px; color: rgb(68, 180, 248);\\\">\\n                <i class=\\\"sq sq-view\\\"></i>\\n              </button>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"col-xs-1 col-sm-1 col-md-1 col-lg-1\\\">\\n          <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx-r\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" (click)=\\\"exportExcel()\\\">\\n              <i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i>\\n          </button>\\n        </div>\\n      </div>\\n      <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding-right:0;\\\">\\n        <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n          <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n            <li class=\\\"active\\\" style=\\\"border-top:none;width: 125px;\\\">\\n              <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('')\\\" style=\\\"border-color:transparent!important;\\\">My\\n                Requests</a>\\n            </li>\\n            <li *ngFor=\\\"let cl of clientlist\\\" style=\\\"border-top:none;width: 125px;\\\">\\n              <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(cl.usex_dbname)\\\" style=\\\"border-color:transparent!important;\\\">{{cl.client_name}}</a>\\n            </li>\\n          </ul>\\n        </div>\\n      </div>\\n    </div>\\n    <div class=\\\"row\\\">\\n      <div class=\\\"col-md-12\\\">\\n        <div class=\\\"box box-primary2\\\">\\n          <div class=\\\"box-body\\\" style=\\\"max-height:400px;padding-top:20px;\\\">\\n            <div class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"padding: 0px;\\\">\\n              <table id=\\\"resultsh\\\" class=\\\"table table-hover\\\" style=\\\"margin-bottom:0px;\\\">\\n                <thead>\\n                  <tr style=\\\"color:#707070;\\\">\\n                    <th style=\\\"width: 1%; text-align:center!important;\\\">\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_id')\\\" style=\\\"width: 8%;text-align:center!important;\\\">Number\\n                      <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width:9%; text-align:center!important;\\\">Progress\\n                    </th>\\n                    <th (click)=\\\"setOrder('tkstatus')\\\" style=\\\"width:9%;text-align:center!important;\\\">Status\\n                      <span [hidden]=\\\"posOrder !== 'tkstatus'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_subject')\\\" style=\\\"width:19%;text-align:center!important;\\\">Subject\\n                      <span [hidden]=\\\"posOrder !== 'task_subject'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('task_date')\\\" style=\\\"width:12%; text-align:center!important;\\\">Date\\n                      <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('userext_creator')\\\" style=\\\"width:9%;text-align:center!important;\\\"> Creator\\n                      <span [hidden]=\\\"posOrder !== 'userext_creator'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('asigned')\\\" style=\\\"width:9%;text-align:center!important;\\\">Assigned\\n                      <span [hidden]=\\\"posOrder !== 'asigned'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th (click)=\\\"setOrder('type_name')\\\" style=\\\"width:10%; text-align:center!important;\\\"> Type\\n                      <span [hidden]=\\\"posOrder !== 'type_name'\\\">\\n                        <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                        <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                      </span>\\n                    </th>\\n                    <th style=\\\"width:15%;text-align:center!important;\\\">Actions\\n                    </th>\\n                  </tr>\\n                </thead>\\n              </table>\\n            </div>\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n              <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n              <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div *ngIf=\\\"!isLoading && requests.length == 0\\\" class=\\\"table-responsive2 col-lg-12 col-md-12 col-xs-12\\\"\\n              style=\\\"text-align: center;\\\">\\n              No Data\\n            </div>\\n            <div *ngIf=\\\"requests.length > 0\\\" class=\\\"table-responsive2 col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"border-bottom: 2px solid #ddd;\\\">\\n              <table id=\\\"resultsb\\\" class=\\\"table table-hover\\\">\\n                <tbody style=\\\"height: 100px; overflow:scroll; background: white\\\">\\n                  <tr *ngFor=\\\"let eve of requests\\\" style=\\\"color:#707070;\\\">\\n                    <td class=\\\"td_icontype_slqx\\\" style=\\\"width: 1%;\\\">\\n                      <div *ngIf=\\\"eve.task_delivery == null\\\" class=\\\"icon_type_squalinx\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Request\\\">\\n                        <i class=\\\"sq sq-requests\\\" style=\\\"color:#707070;\\\"></i>\\n                      </div>\\n                      <div *ngIf=\\\"eve.task_delivery != null\\\" class=\\\"icon_type_squalinx\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Task\\\">\\n                        <i class=\\\"sq sq-statustasks\\\" style=\\\"color:#707070;\\\"></i>\\n                      </div>\\n                    </td>\\n                    <td style=\\\"width: 8%; border-top: 1px solid white!important;text-align: center;\\\">\\n                      {{ escapeHtml(eve.task_id) }}\\n                    </td>\\n                    <td style=\\\"width:9%;text-align:center;border:none;\\\">\\n                      <span class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{eve.percent}}%</span>\\n                      <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%; margin-left: 12px; height: 10px; background-color:rgb(220, 227, 230); \\\">\\n                        <div class=\\\"success-tasks-request\\\" [ngStyle]=\\\"{ 'width': eve.percent + '%' }\\\">\\n                        </div>\\n                      </div>\\n                    </td>\\n                    <td [ngStyle]=\\\"eve.tkstatus == 'Rejected' ? { 'color': '#F01458', 'border-top':'1px solid white', 'width':'9%' } : eve.tkstatus == 'Complete' ? { 'color': '#92CC66', 'border-top':'1px solid white', 'width':'9%' }  : {'color': '#707070;', 'border-top':'1px solid white', 'width':'9%'}\\\">\\n                      {{ escapeHtml(eve.tkstatus) }}\\n                    </td>\\n                    <td style=\\\"width:19%;border-top: 1px solid white!important;\\\">\\n                      {{ escapeHtml(eve.task_subject) }}\\n                    </td>\\n                    <td style=\\\"width:12%;border-top: 1px solid white!important;text-align: center;\\\">\\n                      {{ escapeHtml(eve.task_date) }}\\n                    </td>\\n                    <td style=\\\"border-top: 1px solid white!important;text-align: left;width:9%;\\\">\\n                      {{ eve.creator}}\\n                    </td>\\n                    <td style=\\\"width:9%;border-top: 1px solid white!important;text-align: center;\\\">\\n                      {{ escapeHtml(eve.asigned) }}\\n                    </td>\\n                    <td style=\\\"border:none;text-align: center;width:10%;\\\">\\n                      <div [ngStyle]=\\\"eve.type_id ? {'background': eve.type_color} : {} \\\" class=\\\"colortype\\\"></div>\\n                    </td>\\n                    <td style=\\\"border:none;width:15%;\\\">\\n                      <div class=\\\"btn-group\\\">\\n                        <button *ngIf=\\\"eve.type == Task \\\" type=\\\"button\\\" (click)=\\\"showModaltk(eve.task_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Quick view\\\">\\n                          <i class=\\\"sq sq-search\\\" style=\\\"font-weight: bold;\\\"></i>\\n                        </button>\\n                        <taskview [myTaskId]=\\\"eve.task_id\\\" [myDbName]=\\\"eve.bd_external\\\"></taskview>\\n                        <button *ngIf=\\\"eve.task_delivery == null && eve.asigned_to == 'forme' && eve.para_status != 50\\\"\\n                          type=\\\"button\\\" (click)=\\\"showRequest(eve)\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-toggle=\\\"tooltip\\\"\\n                          data-container=\\\"body\\\" title=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\" style=\\\"font-weight: bold;\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_delivery == null && eve.asigned_to == 'byme' && eve.para_status != 50\\\"\\n                          type=\\\"button\\\" (click)=\\\"showRequest(eve)\\\" class=\\\"btn btn-default btn-sm btn-act\\\"\\n                          data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                          <i class=\\\"sq sq-quickedit\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.percent == 100 && eve.canclose == '1'\\\" (click)=\\\"closeTask(eve.bd_external, eve.task_id)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Close\\\">\\n                          <i class=\\\"sq sq-close-bg\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1'\\\" (click)=\\\"deleteTask(eve.bd_external, eve.task_id)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                          <i class=\\\"sq sq-eliminar\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canrj === '1' && eve.para_status != 50\\\" (click)=\\\"showReject(eve)\\\" type=\\\"button\\\"\\n                          class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Reject\\\">\\n                          <i class=\\\"sq sq-backlog\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose === '1' && eve.tkstatus != 'Improve'\\\" (click)=\\\"showImprov(eve)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Improve\\\">\\n                          <i class=\\\"sq sq-improving\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_child_id == 0 && eve.task_child_id != null\\\" (click)=\\\"mdShowTypeTaskJoin(eve)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Create Task\\\" style=\\\" padding: 2px 10px 5px 10px;\\\">\\n                          <i class=\\\"sq sq-create-new-task\\\" style=\\\"font-size: 19px;\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_child_id == 0 && eve.task_child_id != null\\\" (click)=\\\"mdShowAssociateTaskJoin(eve)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Associate Task\\\" style=\\\" padding: 2px 10px 5px 10px;\\\">\\n                          <i class=\\\"sq sq-statustasks\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.task_child_id != 0 && eve.task_child_id != null\\\" (click)=\\\"deleteTaskJoin(eve.task_child_id)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Delete Task\\\" style=\\\" padding: 2px 10px 5px 10px;\\\">\\n                          <i class=\\\"sq sq-close-task\\\" style=\\\"font-size: 19px;\\\"></i>\\n                        </button>\\n                        <button *ngIf=\\\"eve.canclose == '1' && eve.para_status == 50\\\" (click)=\\\"reopenTask(eve.bd_external, eve.task_id)\\\"\\n                          type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\" data-container=\\\"body\\\" tooltipPosition=\\\"top\\\"\\n                          pTooltip=\\\"Reopen\\\">\\n                          <i class=\\\"fa fa-undo\\\"></i>\\n                        </button>\\n                      </div>\\n                    </td>\\n                  </tr>\\n                </tbody>\\n              </table>\\n            </div>\\n            <div *ngIf=\\\"requests.length > 0\\\" class=\\\"box-footer no-padding\\\">\\n              <div class=\\\"contacts-controls\\\">\\n                <div class=\\\"pull-right\\\" style=\\\"color:#707070;\\\">\\n                  {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage) > itemcount ?\\n                  itemcount : (currentpage * limitpage)\\n                  }} of {{ itemcount }} results\\n                  <div class=\\\"btn-group\\\">\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                      <i class=\\\"fa fa-chevron-left\\\" style=\\\"color:#707070;\\\"></i>\\n                    </button>\\n                    <select class=\\\"btn btn-default btn-sm\\\" style=\\\"height: 30px; background-color: rgb(255,255,255);\\\"\\n                      [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                      <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                    </select>\\n                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-sm\\\" [disabled]=\\\"currentpage == lastpage\\\" (click)=\\\"setCurPage(1)\\\"\\n                      data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                      <i class=\\\"fa fa-chevron-right\\\" style=\\\"color:#707070;\\\"></i>\\n                    </button>\\n                  </div>\\n                </div>\\n                <div class=\\\"pull-left\\\" style=\\\"color:#707070;\\\">\\n                  <div class=\\\"btn-group\\\">\\n                    <select class=\\\"btn btn-default btn-sm\\\" style=\\\"height: 30px; background-color: rgb(255,255,255);\\\"\\n                      [(ngModel)]=\\\"limitpage\\\" (change)=\\\"reloadResults()\\\">\\n                      <option *ngFor=\\\"let r of results\\\" [ngValue]=\\\"r\\\">{{ r }}</option>\\n                    </select>\\n                  </div>\\n                  per page\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </section>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-lg modal-content-params modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n            <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group \\\">\\n                <label>Subject</label>\\n                <input id=\\\"inputr_1\\\" class=\\\"form-control\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"ddwnr_1\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"myproducts\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Assigned to</label>\\n                <p-dropdown id=\\\"ddwnr_2\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-xs-12 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Associate to Project</label>\\n                <p-dropdown id=\\\"ddwnr_3\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Associate to Sprint</label>\\n                <p-dropdown id=\\\"ddwnr_4\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                  [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4 calendar-squadlinx\\\">\\n              <div class=\\\"form-group\\\">\\n                <label>Delivery Date</label>\\n                <p-calendar id=\\\"calendarb_2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\"\\n                  dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                  [monthNavigator]=\\\"true\\\"></p-calendar>\\n              </div>\\n            </div>\\n            <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-4\\\">\\n              <div class=\\\"form-group spinner-squadlinx\\\">\\n                <label>Points</label>\\n                <p-spinner id=\\\"inputr_2\\\" class=\\\"spinnersql\\\" [(ngModel)]=\\\"task.task_points\\\" [step]=\\\"0.25\\\" [min]=\\\"0\\\"></p-spinner>\\n              </div>\\n            </div>\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                <a id=\\\"editTask-request\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n              </li>\\n              <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                <a id=\\\"editTask-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate Form</a>\\n              </li>\\n            </ul>\\n            <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editor_2\\\" [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div style=\\\"max-height:142px; overflow:scroll; width:100%\\\">\\n                  <table style=\\\"text-align: center;width: 100%;\\\">\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 50px;\\\">\\n                        <td style=\\\"width: 40%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                          <div class=\\\"form-squadlinx\\\">\\n                            {{fr.form_field}}\\n                          </div>\\n                        </td>\\n                        <td style=\\\"width: 60%;height: 35px;padding-left: 5px;padding-right: 5px;\\\">\\n                          <div class=\\\"form-squadlinx\\\">\\n                            {{fr.form_data}}\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n          <ul class=\\\"mailbox-attachments clearfix\\\">\\n            <li *ngFor=\\\"let att of task.attachments\\\">\\n              <a *ngIf=\\\"att.type\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                <span class=\\\"mailbox-attachment-icon\\\">\\n                  <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                    style=\\\"max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                    style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                  <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                </span>\\n              </a>\\n              <div class=\\\"mailbox-attachment-info\\\">\\n                <a *ngIf=\\\"att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                  <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.tsat_alias.length>6) ? (att.tsat_alias |\\n                  slice:0:20)+'..':(att.tsat_alias)\\n                  }}\\n                </a>\\n                <a *ngIf=\\\"!att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                  <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.name.length > 6)? (att.name | slice:0:20)+'..':(att.name) }}\\n                </a>\\n                <span class=\\\"mailbox-attachment-size\\\">\\n                  {{att.size + ' bytes'}}\\n                  <button *ngIf=\\\"task.taskid > 0\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                  </button>\\n                  <button *ngIf=\\\"task.taskid == 0\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\">\\n                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                  </button>\\n                </span>\\n              </div>\\n            </li>\\n          </ul>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\"\\n              for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n              <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n            </label>\\n            <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close</button>\\n            <button style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\"\\n              [disabled]=\\\"(!task.task_subject || task.task_subject == '' || task.task_subject == 'undefined') || (!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0) || (!task.task_delivery || task.task_delivery == '' || task.task_delivery == 'undefined')\\\"\\n              (click)=\\\"saveTask()\\\">Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditRequest\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"border-radius: 15px;\\\">\\n\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-content modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n\\n      <div class=\\\"modal-content new-design2\\\" style=\\\"border-radius: 15px; width: 675px;\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"\\n            (click)=\\\"activeTabs()\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i> {{ myfilterfield.typetittle }} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"form-group col-xs-12 col-md-12 col-lg-12 input-squadlinx\\\">\\n              <label>Subject</label>\\n              <input id=\\\"er_inputt_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n            </div>\\n            <!-- clients -->\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Client</label>\\n              <p-dropdown id=\\\"er_ddwnr_11\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"clients\\\" [(ngModel)]=\\\"task.client_id\\\" (onChange)=\\\"clientData(task.client_id, myfilterfield.text)\\\"\\n                placeholder=\\\"Select a client\\\"></p-dropdown>\\n            </div>\\n            <!-- end clients -->\\n            <!-- end clients -->\\n            <!-- end clients -->\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Category</label>\\n              <p-dropdown id=\\\"er_ddwnr_7\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"categorieslbl\\\" [(ngModel)]=\\\"task.cate_id\\\" placeholder=\\\"Select a Category\\\" filter=\\\"filter\\\"\\n                (onChange)=\\\"createForm(task.cate_id)\\\" [disabled]=\\\"existProduct\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Product</label>\\n              <p-dropdown id=\\\"er_ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"\\n                [disabled]=\\\"existClient\\\"\\n                (onChange)=\\\"getCategoriesbyProduct(task.prod_id, myfilterfield.text)\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Group</label>\\n              <p-dropdown id=\\\"er_ddwnr_5\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"groups\\\" [(ngModel)]=\\\"task.grop_id\\\" placeholder=\\\"Select a Group\\\" [disabled]=\\\"existClient\\\"></p-dropdown>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_associate_form_request\\\" *ngIf=\\\"task.fields && task.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 1}\\\">\\n                <a id=\\\"editRequest-request1\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form_request\\\" (click)=\\\"setPageRequest(1)\\\">Associate\\n                  Form</a>\\n              </li>\\n              <li id=\\\"li_description_request\\\" [ngClass]=\\\"{'active':tagMenuRequest == 2}\\\">\\n                <a id=\\\"editRequest-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#description_request\\\" (click)=\\\"setPageRequest(2)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_attachments_request\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 3}\\\">\\n                <a id=\\\"editRequest-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_request\\\" (click)=\\\"setPageRequest(3)\\\">Attachments\\n                  <span>({{task.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 1 && task.fields && task.fields.length > 0 \\\" id=\\\"associate_form_request\\\"\\n              class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_createRequest\\\">\\n                  <table class=\\\"table_associateFom_createRequest\\\">\\n                    <thead>\\n                      <th style=\\\"width:30%; text-align: center;\\\">Field name</th>\\n                      <th style=\\\"width:70%; text-align: center;\\\">Data</th>\\n                    </thead>\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let tkf of task.fields\\\" style=\\\"height: 60px;\\\">\\n                        <td class=\\\"td_formfield_createRequest\\\">\\n                          <div class=\\\"div_formfield_createRequest\\\">\\n                            {{tkf.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_createRequest\\\">\\n                          <div class=\\\"div_formdata_createRequest\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control div_input_formdata_createRequest\\\" [(ngModel)]=\\\"tkf.form_data\\\"\\n                              (value)=\\\"tkf.form_data\\\">\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 2\\\" id=\\\"description_request\\\" class=\\\"col-xs-12 col-md-12 col-lg-12 \\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editorr_2\\\" [(ngModel)]=\\\"task.task_description_r\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 3\\\" id=\\\"attachments_request\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of task.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-namex\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-namex\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.tsat_alias.length>6) ?\\n                          (att.tsat_alias |\\n                          slice:0:20)+'..':(att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" (click)=\\\"downloadFile(att, $event)\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-namex\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.name.length > 6)? (att.name |\\n                          slice:0:20)+'..':(att.name) }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #008BCB; display: inline-block; padding: 6px 12px; cursor: pointer; border-radius: 15px;background-color: #008BCB; color:white;\\\"\\n              for=\\\"file-upload-addRequest\\\" class=\\\"custom-file-upload\\\">\\n              <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n            </label>\\n            <input id=\\\"file-upload-addRequest\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              (change)=\\\"onChange($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"er_addRequest\\\" type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"saveTask(0)\\\" [disabled]=\\\"(!task.task_description_r || task.task_description_r == '' || task.task_description_r == 'undefined') || (!task.prod_id) || (!task.cate_id) || (!task.grop_id) || (!task.client_id)\\\">\\n              Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdCategory\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" style=\\\"border-radius: 15px;\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-categories\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i> {{myfilterfield.typetittle}} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group scrollable\\\" style=\\\"max-height: 200px;\\\">\\n                <table class=\\\"table table-hover table-striped table-category\\\">\\n                  <thead>\\n                    <th style=\\\"width:100%;\\\"> </th>\\n                  </thead>\\n                  <tbody>\\n                    <tr *ngFor=\\\"let ml of categorieslblClients | filterfield : myfilterfield\\\">\\n                      <td>\\n                        {{ml.label}}\\n                      </td>\\n                    </tr>\\n                  </tbody>\\n                </table>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdRj\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-rejectRequest\\\">\\n        <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n          <button id=\\\"close-mdRj-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Reject task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label class=\\\"label_reasonReject_slqx\\\">Reason for rejection</label>\\n            <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\" placeholder=\\\"Description ...\\\"\\n              [(ngModel)]=\\\"rjtask.retk_description\\\"></textarea>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"close2-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mdRj-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\"\\n            [disabled]=\\\"(!rjtask.retk_description || rjtask.retk_description == '' || rjtask.retk_description == 'undefined')\\\"\\n            (click)=\\\"rejectTask()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <div class=\\\"modal fade\\\" id=\\\"mdImp\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content modal-rejectRequest\\\">\\n        <div class=\\\"modal-header description-modal-rejectRequest\\\">\\n          <button id=\\\"close-mdImp-request\\\" type=\\\"button\\\" class=\\\"close close-modal\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <span aria-hidden=\\\"true\\\">&times;</span>\\n          </button>\\n          <h4 class=\\\"modal-title title_rejectTask_sqlx\\\">Improve task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"form-group\\\">\\n            <label class=\\\"label_reasonReject_slqx\\\">Reason for improve</label>\\n            <textarea id=\\\"description-mdRj-request\\\" class=\\\"form-control textarea-reasonReject\\\" rows=\\\"3\\\" placeholder=\\\"Description ...\\\"\\n              [(ngModel)]=\\\"imptask.imtk_description\\\"></textarea>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"close2-mdImp-request\\\" type=\\\"button\\\" class=\\\"button_closedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\">Close</button>\\n          <button id=\\\"save-mdImp-request\\\" type=\\\"button\\\" class=\\\"button_savedescriptionrejected_sqlx\\\" data-dismiss=\\\"modal\\\"\\n            [disabled]=\\\"(!imptask.imtk_description || imptask.imtk_description == '' || imptask.imtk_description == 'undefined')\\\"\\n            (click)=\\\"impTask()\\\">Save</button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <!--Modal edit external request-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdEditExtRequest\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog\\\" role=\\\"document\\\" style=\\\"border-radius: 15px;\\\">\\n\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-content modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n\\n      <div class=\\\"modal-content new-design2\\\" style=\\\"border-radius: 15px; width: 675px;\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfield.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\"\\n            (click)=\\\"activeTabs()\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i class=\\\"{{myfilterfield.icon}}\\\" style=\\\"font-size: 24px;\\\"></i> {{ myfilterfield.typetittle }} </h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <div class=\\\"form-group col-xs-12 col-md-12 col-lg-12 input-squadlinx\\\">\\n              <label>Subject</label>\\n              <input id=\\\"erx_inputt_1\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n            </div>\\n            <div class=\\\"input-squadlinx form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Client</label>\\n              <input id=\\\"erx_inputt_2\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.dbname\\\" placeholder=\\\"\\\"\\n                [disabled]=\\\"true\\\">\\n            </div>\\n            <div class=\\\"input-squadlinx form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Category</label>\\n              <input id=\\\"erx_inputt_3\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.cate_desc\\\" placeholder=\\\"\\\"\\n                [disabled]=\\\"true\\\">\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Product</label>\\n              <p-dropdown id=\\\"er_ddwnr_6\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" [disabled]=\\\"true\\\" placeholder=\\\"Select a Product\\\" filter=\\\"filter\\\"\\n                [disabled]=\\\"existClient\\\"></p-dropdown>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Group</label>\\n              <p-dropdown id=\\\"er_ddwnr_5\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\"\\n                [options]=\\\"groups\\\" [(ngModel)]=\\\"task.grop_id\\\" [disabled]=\\\"true\\\" placeholder=\\\"Select a Group\\\" [disabled]=\\\"existClient\\\"></p-dropdown>\\n            </div>\\n          </div>\\n          <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_associate_form_request\\\" *ngIf=\\\"task.fields && task.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 1}\\\">\\n                <a id=\\\"editRequest-request1\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form_request\\\" (click)=\\\"setPageRequest(1)\\\">Associate\\n                  Form</a>\\n              </li>\\n              <li id=\\\"li_description_request\\\" [ngClass]=\\\"{'active':tagMenuRequest == 2}\\\">\\n                <a id=\\\"editRequest-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#description_request\\\" (click)=\\\"setPageRequest(2)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_attachments_request\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenuRequest == 3}\\\">\\n                <a id=\\\"editRequest-request3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_request\\\" (click)=\\\"setPageRequest(3)\\\">Attachments\\n                  <span>({{task.attachments.length}})</span></a>\\n              </li>\\n            </ul>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 1 && task.fields && task.fields.length > 0 \\\" id=\\\"associate_form_request\\\"\\n              class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_createRequest\\\">\\n                  <table class=\\\"table_associateFom_createRequest\\\">\\n                    <thead>\\n                      <th style=\\\"width:30%; text-align: center;\\\">Field name</th>\\n                      <th style=\\\"width:70%; text-align: center;\\\">Data</th>\\n                    </thead>\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr *ngFor=\\\"let tkf of task.fields\\\" style=\\\"height: 60px;\\\">\\n                        <td class=\\\"td_formfield_createRequest\\\">\\n                          <div class=\\\"div_formfield_createRequest\\\">\\n                            {{tkf.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_createRequest\\\">\\n                          <div class=\\\"div_formdata_createRequest\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control div_input_formdata_createRequest\\\" [(ngModel)]=\\\"tkf.form_data\\\"\\n                              (value)=\\\"tkf.form_data\\\">\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 2\\\" id=\\\"description_request\\\" class=\\\"col-xs-12 col-md-12 col-lg-12 \\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editorr_2\\\" [(ngModel)]=\\\"task.task_description_rext\\\" [style]=\\\"{'height':'100px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n\\n            <div *ngIf=\\\"tagMenuRequest == 3\\\" id=\\\"attachments_request\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of task.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.tsat_alias.length>6) ?\\n                          (att.tsat_alias |\\n                          slice:0:20)+'..':(att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.name.length > 6)? (att.name |\\n                          slice:0:20)+'..':(att.name) }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\">\\n                          {{att.size + ' bytes'}}\\n                          <button *ngIf=\\\"task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                          <button *ngIf=\\\"!task.task_id\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachment(att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label style=\\\"border: 1px solid #008BCB; display: inline-block; padding: 6px 12px; cursor: pointer; border-radius: 15px;background-color: #008BCB; color:white;\\\"\\n              for=\\\"file-upload-addRequest\\\" class=\\\"custom-file-upload\\\">\\n              <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n            </label>\\n            <input id=\\\"file-upload-addRequest\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              (change)=\\\"onChange($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"erx_addRequest\\\" type=\\\"button\\\" class=\\\"btn btn-success btn-save\\\" (click)=\\\"saveTask(1)\\\" [disabled]=\\\"(!task.task_description_rext || task.task_description_rext == '' || task.task_description_rext == 'undefined' || task.task_subject == '')\\\">\\n              Save</button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n  <!-- . Modal edit external request-->\\n\\n  <div class=\\\"modal fade\\\" id=\\\"mdTypeTaskJoin\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modalDialog_newTaskJoin\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content\\\" style=\\\"width: 360px;border-radius: 14px;\\\">\\n        <div class=\\\"modal-header header-event\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n            <i class=\\\"sq sq-close i_close_typeNewTaskJoin\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title titleType_newTaskJoin\\\"> <i class=\\\"sq sq-create-new-task i_createNewTaskJoin\\\"></i> New\\n            Task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\" style=\\\"    padding-top: 0px;  padding-bottom: 0px;\\\">\\n          <div class=\\\"row row_sectionNewTaskJoin\\\">\\n            <ul *ngIf=\\\"types && types.length > 0\\\" style=\\\"padding: 0px; margin-bottom: 0px;text-transform: uppercase;\\\">\\n              <li *ngFor=\\\"let typ of types\\\" class=\\\"li_newTaskJoin\\\" (click)=\\\"mdShowCreateTaskJoin(typ.type_id, typ.type_name, typ.type_color,typ.type_label)\\\" [ngStyle]=\\\"{'background-color': typ.type_color} \\\">\\n                <i class=\\\"{{typ.type_label}} icons_types_newTaskJoin\\\"></i>\\n                <small>{{typ.type_name}}</small>\\n              </li>\\n            </ul>\\n          </div>\\n        </div>\\n\\n      </div>\\n    </div>\\n  </div>\\n\\n  <!--modal create task join-->\\n  <div class=\\\"modal fade\\\" id=\\\"mdCreateTaskJoin\\\" role=\\\"dialog\\\">\\n    <!--Modal New Task Join-->\\n    <div class=\\\"modal-dialog modalDialog_newTaskJoin\\\" role=\\\"document\\\">\\n      <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12 modal-dialog modal-content modal_isLoading_screem\\\"\\n        role=\\\"document\\\">\\n        <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #ffffff;\\\"></i>\\n        <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n      </div>\\n      <div class=\\\"modal-content new-design2 modalContent_newTaskJoin\\\">\\n        <div class=\\\"modal-header header-event\\\" [ngStyle]=\\\"myfilterfieldNewTask.style\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title tittle-request\\\">\\n            <i style=\\\"font-size: 24px;\\\" class=\\\"{{myfilterfieldNewTask.icon}}\\\"></i> {{myfilterfieldNewTask.typetittle}}\\n          </h4>\\n\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"row row_sectionNewTaskJoin\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group input-squadlinx\\\">\\n                <label>Subject</label>\\n                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"taskJoin.task_subject\\\" placeholder=\\\"\\\">\\n              </div>\\n            </div>\\n            <div class=\\\" form-group col-xs-12 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Category</label>\\n              <p-dropdown id=\\\"dropdownCategory_NewTaskJoin\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                [autoWidth]=\\\"false\\\" [options]=\\\"categorieslblNewTask | filterfield : myfilterfieldNewTask\\\" [(ngModel)]=\\\"taskJoin.cate_id\\\"\\n                placeholder=\\\"Select a Category\\\" filter=\\\"filter\\\" (onChange)=\\\"createFormNewTask(taskJoin.cate_id)\\\"></p-dropdown>\\n\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <div class=\\\"form-group dropdownSqlx\\\">\\n                <label>Product</label>\\n                <p-dropdown id=\\\"dropdownProduct_newTaskJoin\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                  [autoWidth]=\\\"false\\\" [options]=\\\"myproducts\\\" [(ngModel)]=\\\"taskJoin.prod_id\\\" placeholder=\\\"Select a Product\\\"\\n                  filter=\\\"filter\\\"></p-dropdown>\\n              </div>\\n            </div>\\n            <div class=\\\"form-group col-xs-12 col-sm-6 col-md-6 col-lg-6 dropdownSqlx\\\">\\n              <label>Group</label>\\n              <p-dropdown id=\\\"dropdownGroup_newTaskJoin\\\" class=\\\"ui-g ui-fluid sqlx-input\\\" dropdownIcon=\\\"sq sq-down-arrow\\\"\\n                [autoWidth]=\\\"false\\\" [options]=\\\"groupsNewTask\\\" [(ngModel)]=\\\"taskJoin.grop_id\\\" placeholder=\\\"Select a Group\\\"\\n                filter=\\\"filter\\\"></p-dropdown>\\n            </div>\\n\\n          </div>\\n          <div class=\\\"row row_sectionNewTaskJoin\\\">\\n            <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n              <li id=\\\"li_associateForm_taskJoin\\\" *ngIf=\\\"taskJoin.fields && taskJoin.fields.length > 0\\\" [ngClass]=\\\"{'active':tagMenuNew == 1}\\\">\\n                <a id=\\\"associateForm_taskJoin\\\" data-toggle=\\\"tab\\\" href=\\\"#associateForm_newTaskJoin\\\" (click)=\\\"setPageNewTask(1)\\\">Associate\\n                  Form</a>\\n              </li>\\n              <li id=\\\"li_description_taskJoin\\\" [ngClass]=\\\"{'active':tagMenuNew == 2}\\\">\\n                <a id=\\\"description_taskJoin\\\" data-toggle=\\\"tab\\\" href=\\\"#description_newTaskJoin\\\" (click)=\\\"setPageNewTask(2)\\\">Description</a>\\n              </li>\\n              <li id=\\\"li_attachments_taskJoin\\\" *ngIf=\\\"taskJoin.attachments && taskJoin.attachments.length > 0\\\"\\n                [ngClass]=\\\"{'active':tagMenuNew == 3}\\\">\\n                <a id=\\\"attachments_taskJoin\\\" data-toggle=\\\"tab\\\" href=\\\"#attachment_newTaskJoin\\\" (click)=\\\"setPageNewTask(3)\\\">Attachments\\n                  <span>({{taskJoin.attachments.length}})</span> </a>\\n              </li>\\n            </ul>\\n            <div *ngIf=\\\"tagMenuNew == 1 && taskJoin.fields && taskJoin.fields.length > 0\\\" id=\\\"associateForm_newTaskJoin\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                <div class=\\\"div_table_associateFom_createRequest\\\">\\n                  <table class=\\\"table_associateFom_createRequest\\\">\\n                    <thead>\\n                      <th style=\\\"width:30%; text-align: center;\\\">Field name</th>\\n                      <th style=\\\"width:70%; text-align: center;\\\">Data</th>\\n                    </thead>\\n                    <tbody style=\\\"width: 100%;\\\">\\n                      <tr style=\\\"height: 60px;\\\" *ngFor=\\\"let field of taskJoin.fields\\\">\\n                        <td class=\\\"td_formfield_createRequest\\\">\\n                          <div class=\\\"div_formfield_createRequest\\\">\\n                            {{field.form_field}}\\n                          </div>\\n                        </td>\\n                        <td class=\\\"td_formdata_createRequest\\\">\\n                          <div class=\\\"div_formdata_createRequest\\\">\\n                            <input type=\\\"text\\\" class=\\\"form-control div_input_formdata_createRequest\\\" [(ngModel)]=\\\"field.form_data\\\"\\n                              (value)=\\\"field.form_data\\\">\\n                          </div>\\n                        </td>\\n                      </tr>\\n                    </tbody>\\n                  </table>\\n                </div>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenuNew == 2\\\" id=\\\"description_newTaskJoin\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n              <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                <p-editor id=\\\"editor_1\\\" [(ngModel)]=\\\"taskJoin.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                  <p-header>\\n                    <span class=\\\"ql-formats\\\">\\n                      <span class=\\\"ql-header\\\">\\n                        <select class=\\\"ql-header\\\">\\n                          <option value=\\\"1\\\">Heading</option>\\n                          <option value=\\\"2\\\">Subheading</option>\\n                          <option selected>Normal</option>\\n                        </select>\\n                      </span>\\n\\n                      <span class=\\\"ql-font\\\">\\n                        <select class=\\\"ql-font\\\">\\n                          <option selected>Sans Serif</option>\\n                          <option value=\\\"serif\\\">Serif</option>\\n                          <option value=\\\"monospace\\\">Monospace</option>\\n                        </select>\\n                      </span>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                      <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                      <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                    </span>\\n\\n                    <span class=\\\"ql-formats\\\">\\n                      <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                      <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                      <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                        <select class=\\\"ql-align\\\">\\n                          <option selected></option>\\n                          <option value=\\\"center\\\"></option>\\n                          <option value=\\\"right\\\"></option>\\n                          <option value=\\\"justify\\\"></option>\\n                        </select>\\n                      </span>\\n                    </span>\\n                  </p-header>\\n                </p-editor>\\n              </div>\\n            </div>\\n            <div *ngIf=\\\"tagMenuNew == 3\\\" id=\\\"attachment_newTaskJoin\\\">\\n              <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                <div class=\\\"div_associatedAttachments\\\">\\n                  <ul class=\\\"mailbox-attachments clearfix\\\">\\n                    <li *ngFor=\\\"let att of taskJoin.attachments\\\">\\n                      <a *ngIf=\\\"att.type\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                        <span class=\\\"mailbox-attachment-icon\\\">\\n                          <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-image-o\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                            style=\\\"max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                            style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                          <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\" style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                        </span>\\n                      </a>\\n                      <div class=\\\"mailbox-attachment-info\\\">\\n                        <a *ngIf=\\\"att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.tsat_alias.length > 6) ?\\n                          (att.tsat_alias |\\n                          slice:0:20) + '..' : (att.tsat_alias)\\n                          }}\\n                        </a>\\n                        <a *ngIf=\\\"!att.tsat_alias\\\" [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                          <i class=\\\"fa fa-paperclip\\\"></i>{{ (att.name.length > 6) ? (att.name |\\n                          slice:0:20) + '..' : (att.name) }}\\n                        </a>\\n                        <span class=\\\"mailbox-attachment-size\\\"> {{att.size + ' bytes'}}\\n                          <button type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\" (click)=\\\"deleteAttachmentNewTaskJoin(att)\\\">\\n                            <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                          </button>\\n                        </span>\\n                      </div>\\n                    </li>\\n                  </ul>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <div class=\\\"pull-left\\\">\\n            <label for=\\\"file-upload-addTaskJoin\\\" class=\\\"custom-file-upload customUpload_newTaskJoin\\\">\\n              <img src=\\\"img/customuploadarrowicon.svg\\\" class=\\\"img-upload\\\"> Custom upload\\n            </label>\\n            <input id=\\\"file-upload-addTaskJoin\\\" type=\\\"file\\\" style=\\\"display: none;\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\"\\n              (change)=\\\"onChangeTask($event)\\\" />\\n          </div>\\n          <div class=\\\"pull-right\\\">\\n            <button id=\\\"button_2\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close\\n            </button>\\n            <button id=\\\"button_3\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" (click)=\\\"saveTaskJoin()\\\"\\n              class=\\\"btn-success btn-sm btn-add-sprint\\\">\\n              Save\\n            </button>\\n          </div>\\n        </div>\\n      </div>\\n    </div>\\n\\n  </div>\\n  <!-- . modal create task join-->\\n\\n  <div class=\\\"modal modal-sptask\\\" id=\\\"mdAssociateTaskJoin\\\" role=\\\"dialog\\\">\\n    <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n      <div class=\\\"modal-content-params\\\">\\n        <div class=\\\"modal-header modal-header-info-params\\\">\\n          <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n            <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n          </button>\\n          <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\"><i class=\\\"sq sq-statustasks i_associateTaskJoin\\\"></i>Associate\\n            Task</h4>\\n        </div>\\n        <div class=\\\"modal-body\\\">\\n          <div class=\\\"tab-content\\\">\\n            <div class=\\\"row\\\">\\n              <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6\\\" style=\\\"float:right;margin-bottom: 3px;\\\">\\n                <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2 div_elementsSearchCategories\\\"\\n                  style=\\\"margin-bottom: 10px;\\\">\\n                  <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                    <div class=\\\"label-input-mainfilter\\\">\\n                      <input type=\\\"text\\\" id=\\\"search_categorie\\\" class=\\\"input-mainfilter input_search_categories\\\"\\n                        placeholder=\\\"\\\" [(ngModel)]=\\\"searchTaskShared\\\" (keyup)=\\\"changedExtraHandlerTaskShared($event)\\\">\\n                    </div>\\n                    <div class=\\\"divContainerBtn_SearchCategories\\\">\\n                      <button type=\\\"button\\\" (click)=\\\"filterTextTaskShared()\\\" class=\\\"btn btn-sm button_search_categories\\\">\\n                        <i class=\\\"sq sq-view\\\"></i>\\n                      </button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n              <div style=\\\"width: 100%;\\\">\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <table class=\\\"table table-bordered table-hover table-striped\\\" style=\\\"margin-bottom: 0px; padding-bottom: 0px;\\\">\\n                    <thead>\\n                      <th style=\\\"text-align:center; width: 5%\\\">\\n                        <i *ngIf=\\\"taskChecked == 0\\\" class=\\\"fa fa-circle-o iconRadioButton-associateTask\\\"></i>\\n                        <i *ngIf=\\\"taskChecked != 0\\\" class=\\\"fa fa-dot-circle-o iconRadioButton-associateTask\\\"> </i>\\n                      </th>\\n                      <th id=\\\"order_group\\\" (click)=\\\"setOrderTaskShared('grop_name')\\\" class=\\\"th_groupTaskShared\\\">Group\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'grop_name'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                      <th id=\\\"order_task\\\" (click)=\\\"setOrderTaskShared('task_id')\\\" class=\\\"th_taskTaskShared\\\">Task\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'task_id'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                      <th id=\\\"order_status\\\" (click)=\\\"setOrderTaskShared('para_status')\\\" class=\\\"th_statusTaskShared\\\">Status\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'para_status'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                      <th id=\\\"order_description\\\" (click)=\\\"setOrderTaskShared('task_description')\\\" class=\\\"th_descriptionTaskShared\\\">Task\\n                        Description\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'task_description'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                      <th id=\\\"order_asigned\\\" (click)=\\\"setOrderTaskShared('asigned')\\\" class=\\\"th_asignedTaskShared\\\">Asigned\\n                        <span [hidden]=\\\"posOrderTaskShared !== 'asigned'\\\">\\n                          <span [hidden]=\\\"!orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-down-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                          <span [hidden]=\\\"orderDescTaskShared\\\" class=\\\"spanOrder_th_sqlx\\\">\\n                            <i class=\\\"sq sq-up-arrow i_spanOrder_sqlx\\\"></i>\\n                          </span>\\n                        </span>\\n                      </th>\\n                    </thead>\\n                  </table>\\n                </div>\\n                <div style=\\\"max-height: 600px;overflow: scroll;width: 100%;\\\">\\n                  <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                    <table class=\\\"table table-bordered table-hover table-striped\\\">\\n                      <tbody>\\n                        <tr *ngFor=\\\"let task of taskShared\\\">\\n                          <td style=\\\"width: 5%; text-align:center;\\\">\\n                            <div class=\\\"ui-g\\\">\\n                              <p-radioButton name=\\\"radioButtonTask_taskShared\\\" id=\\\"radioButtonTask_taskShared\\\" value=\\\"{{task.task_id}}\\\"\\n                                (onClick)=\\\"checkTask(task.task_id)\\\"></p-radioButton>\\n                            </div>\\n                          </td>\\n                          <td style=\\\"width: 12%; text-align:center; \\\">{{task.grop_name}}</td>\\n                          <td style=\\\"width: 10%; text-align:center;\\\">{{task.task_id}}</td>\\n                          <td style=\\\"width: 14%; text-align: center;\\\">\\n                            <div *ngIf=\\\"task.para_status == 35 || task.para_status == 36 ||task.para_status == 37 \\\">\\n                              <small class=\\\"statusTaskShared task-pending \\\">\\n                                <i class=\\\"sq sq-pending\\\"></i> Pending\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 38\\\">\\n                              <small class=\\\"statusTaskShared task-developing\\\">\\n                                <i class=\\\"sq sq-developing\\\"></i> Developing\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 39\\\">\\n                              <small class=\\\"statusTaskShared task-developing\\\">\\n                                <i class=\\\"sq sq-move-to-testing\\\"></i> Testing\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 41\\\">\\n                              <small class=\\\"statusTaskShared task-improving\\\">\\n                                <i class=\\\"sq sq-improving\\\"></i> Improving\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 42\\\">\\n                              <small class=\\\"statusTaskShared task-expiring\\\">\\n                                <i class=\\\"fa fa-times-circle\\\"></i> Closed\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 40\\\">\\n                              <small class=\\\"statusTaskShared task-completed\\\">\\n                                <i class=\\\"sq sq-completed\\\"></i> Completed\\n                              </small>\\n                            </div>\\n                            <div *ngIf=\\\"task.para_status == 44\\\">\\n                              <small class=\\\"statusTaskShared task-backlog\\\">\\n                                <i class=\\\"sq sq-backlog\\\"></i> Backlog\\n                              </small>\\n                            </div>\\n                          </td>\\n                          <td style=\\\"width: 40%;\\\">{{escapeHtml(task.task_description)}}</td>\\n                          <td style=\\\"width: 19%;\\\">{{task.asigned}}</td>\\n                        </tr>\\n                      </tbody>\\n                    </table>\\n                  </div>\\n                </div>\\n                <div class=\\\"col-xs-12 col-md-12 col-sm-12 col-lg-12\\\">\\n                  <div class=\\\"contacts-controls\\\">\\n                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7 div_limitpage_sqlx\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\" data-container=\\\"body\\\">\\n                        {{ (currentpageTaskShared * limitpageTaskShared) - limitpageTaskShared + 1 }} - {{\\n                        (currentpageTaskShared * limitpageTaskShared)\\n                        >\\n                        itemcountTaskShared ?\\n                        itemcountTaskShared : (currentpageTaskShared * limitpageTaskShared)\\n                        }} of {{ itemcountTaskShared }} results\\n                      </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionFirst_sqlx\\\">\\n                      <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\" class=\\\"btn btn-default btn-act\\\"\\n                        [disabled]=\\\"currentpageTaskShared == 1\\\" (click)=\\\"goToTaskShared(0)\\\">\\n                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionPrev_sqlx\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpageTaskShared == 1\\\"\\n                        (click)=\\\"setCurPageTaskShared(0)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                        <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionVarios_sqlx\\\">\\n                      <select class=\\\"form-control form-control-sm selected_optionVarios_sqlx\\\" style=\\\"\\\" [(ngModel)]=\\\"currentpageTaskShared\\\"\\n                        (change)=\\\"reload()\\\">\\n                        <option *ngFor=\\\"let c of pagesTaskShared\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                      </select>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionNext_sqlx\\\">\\n                      <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpageTaskShared == lastpageTaskShared\\\"\\n                        (click)=\\\"setCurPageTaskShared(1)\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                        <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1 div_optionLast_sqlx\\\">\\n                      <button type=\\\"button\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\" class=\\\"btn btn-default btn-act\\\"\\n                        [disabled]=\\\"setCurPageTaskShared == lastpageTaskShared\\\" (click)=\\\"goToTaskShared(1)\\\">\\n                        <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                      </button>\\n                    </div>\\n                  </div>\\n                </div>\\n              </div>\\n            </div>\\n          </div>\\n        </div>\\n        <div class=\\\"modal-footer\\\">\\n          <button id=\\\"btnClose_AssociateTaskJoin\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\"\\n            data-dismiss=\\\"modal\\\">Close\\n          </button>\\n          <button id=\\\"btn_saveAssociateTaskJoin\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" (click)=\\\"associateTaskJoin()\\\"\\n            class=\\\"btn-success btn-sm btn-add-sprint\\\">\\n            Save\\n          </button>\\n        </div>\\n      </div>\\n    </div>\\n  </div>\\n\\n  <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/externalrequest/externalrequests.template.html\n// module id = 876\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"externaltasks\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> EXTERNAL TASKS\\n            <small style=\\\"font-size:15px;\\\">Work Flow</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">External Tasks</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 subtitle-task\\\" style=\\\"background-color: rgb(227,237,241); position:relative;height: 50px;\\\">\\n                <div style=\\\"position:absolute;left:30px;top:10px;\\\">\\n                    <span style=\\\"text-transform: uppercase;font-size: 18px;\\\">{{namegroup}}</span>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-2 col-sm-2 col-md-2 col-lg-2\\\" style=\\\"padding-right:0;\\\">\\n                <div class=\\\"nav-tabs-sqlx-v\\\">\\n                    <ul class=\\\"col-xs-12 nav nav-groups-sqlx-v\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                        <li class=\\\"active\\\">\\n                            <a id=\\\"a_1\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList('', 'My Tasks')\\\">My Tasks</a>\\n                        </li>\\n                        <li *ngFor=\\\"let cl of clients\\\">\\n                            <a id=\\\"a_2\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setGroupList(cl.usex_dbname, cl.client_name)\\\">{{cl.client_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n            </div>\\n            <div class=\\\"col-xs-10 col-sm-10 col-md-10 col-lg-10\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-2 col-sm-4 col-md-6 col-lg-6\\\" style=\\\"display: inline-flex;margin-bottom: 10px;\\\">\\n                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Reload\\\">\\n                                <button type=\\\"button\\\" (click)=\\\"searchTask()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\">\\n                                    <i class=\\\"sq sq-reload-task\\\" style=\\\"color:rgb(27, 110, 198); font-size: 28px;\\\"></i>\\n                                </button>\\n                            </span>\\n                            <button type=\\\"button\\\" [disabled]=\\\"!externaltask.length\\\" (click)=\\\"showFilter()\\\" class=\\\"btn btn-sm btn-sqlx2\\\" style=\\\"padding: 5px 5px; background-color:white;\\\"\\n                                data-container=\\\"body\\\" tooltipPosition=\\\"top\\\" pTooltip=\\\"Filter\\\">\\n                                <i class=\\\"fa fa-filter\\\" style=\\\"color:rgb(27, 110, 198); font-size: 22px;\\\"></i>\\n                            </button>\\n                        </div>\\n                        <div class=\\\"col-xs-10 col-sm-8 col-md-6 col-lg-6\\\" style=\\\"float:right;\\\">\\n                            <div class=\\\"col-xs-10 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                                <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                    <div class=\\\"label-input-mainfilter\\\">\\n                                        <input id=\\\"search_task\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                    </div>\\n                                    <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                        <button type=\\\"button\\\" (click)=\\\"searchTask()\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                            <i class=\\\"sq sq-view\\\"></i>\\n                                        </button>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                            <div class=\\\"col-xs-1\\\">\\n                                <button class=\\\"btn btn-sm btn-sqlx-r\\\" [disabled]=\\\"!externaltask.length\\\" (click)=\\\"exportExcel()\\\" style=\\\"padding: 5px 5px; background-color:rgb(107,201,52);\\\" type=\\\"button\\\">\\n                                    <i class=\\\"fa fa-file-excel-o\\\" style=\\\"color:white; font-size: 22px;\\\"></i>\\n                                </button>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <!-- end - botones y search -->\\n                </div>\\n                <div class=\\\"nav-tabs-custom\\\" style=\\\"margin-left: 15px;margin-right: 15px;\\\">\\n                    <ul class=\\\"nav nav-tabs nav-tabs-sqlx\\\" style=\\\"padding: 15px 10px;\\\">\\n                        <li class=\\\"active\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_3\\\" href=\\\"#tab_1\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList('')\\\" style=\\\"border-color:transparent!important;\\\">All</a>\\n                        </li>\\n                        <li *ngFor=\\\"let st of states\\\" style=\\\"border-top:none;\\\">\\n                            <a id=\\\"a_4\\\" href=\\\"#tab_3\\\" data-toggle=\\\"tab\\\" (click)=\\\"setStateList(st.para_id)\\\" style=\\\"border-color:transparent!important;\\\">{{st.para_name}}</a>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div *ngIf=\\\"filter\\\" class=\\\"box-header with-border filter-options\\\" style=\\\"margin: 1.5rem;\\\">\\n                    <div class=\\\"col-xs-10 col-sm-11 col-md-11 col-lg-11\\\">\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Subject</label>\\n                            <li *ngIf=\\\"mytaskcopy.description\\\">\\n                                {{mytask.description}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.description\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date initial</label>\\n                            <li *ngIf=\\\"mytask.date_ini\\\">\\n                                {{formatDate(mytask.date_ini)}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytask.date_ini\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Date end</label>\\n                            <li *ngIf=\\\"mytask.date_end\\\">\\n                                {{formatDate(mytask.date_end)}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytask.date_end\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Task_ids</label>\\n                            <li *ngFor=\\\"let tk of mytaskcopy.task_ids\\\">\\n                                {{tk}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.task_ids\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Assigned to</label>\\n                            <li *ngFor=\\\"let assig of mytaskcopy.assigned\\\">\\n                                {{ assig.label }}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.assigned || mytaskcopy.assigned.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Creator(s)</label>\\n                            <li *ngFor=\\\"let ur of mytaskcopy.creators\\\">\\n                                {{ ur.label }}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.creators || mytaskcopy.creators.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Product(s)</label>\\n                            <li *ngFor=\\\"let pr of mytaskcopy.products\\\">\\n                                {{pr.label}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.products || mytaskcopy.products.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                        <ul class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 filter-list\\\" style=\\\"display:inline-grid;background-color: #fff;padding-right:0;\\\">\\n                            <label>Project(s)</label>\\n                            <li *ngFor=\\\"let pj of mytaskcopy.projects\\\">\\n                                {{pj.label}}\\n                            </li>\\n                            <li *ngIf=\\\"!mytaskcopy.projects || mytaskcopy.projects.length == 0\\\">\\n                                -\\n                            </li>\\n                        </ul>\\n                    </div>\\n                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"text-align: right;\\\">\\n                        <a href=\\\"javascript:void(0)\\\" (click)=\\\"closeFilter()\\\" class=\\\"pull-rigth\\\">\\n                            <i class=\\\"sq sq-close\\\" style=\\\"color:#0ba8da; font-weight: bolder;\\\"></i>\\n                        </a>\\n                    </div>\\n                </div>\\n                <div *ngIf=\\\"isLoading\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && !externaltask.length\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"externaltask && externaltask.length\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th id=\\\"th_1\\\" (click)=\\\"selectAll()\\\" style=\\\"width: 5%; text-align:center;border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <i *ngIf=\\\"seltasks.length > 0\\\" class=\\\"fa fa-square-o\\\"></i>\\n                                            <i *ngIf=\\\"seltasks.length == 0\\\" class=\\\"fa fa-check-square-o\\\"></i>\\n                                        </th>\\n                                        <th style=\\\"width: 70%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <thead>\\n                                                    <tr>\\n                                                        <th id=\\\"order_1\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('task_date')\\\">Date\\n                                                            <span [hidden]=\\\"posOrder !== 'task_date'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_2\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('task_id')\\\">Number\\n                                                            <span [hidden]=\\\"posOrder !== 'task_id'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_3\\\" style=\\\"text-align: center; width: 22.5%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('user_creator')\\\">Created by\\n                                                            <span [hidden]=\\\"posOrder !== 'user_creator'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_4\\\" style=\\\"text-align: center; width: 22.5%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('user_asigned')\\\">Assigned to\\n                                                            <span [hidden]=\\\"posOrder !== 'user_asigned'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_5\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" (click)=\\\"setOrder('proj_id')\\\">Project Related\\n                                                            <span [hidden]=\\\"posOrder !== 'proj_id'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\"><i\\n                                                                        class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i></span>\\n                                                            </span>\\n                                                        </th>\\n                                                    </tr>\\n                                                </thead>\\n                                            </table>\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Progress\\n                                        </th>\\n                                        <th style=\\\"text-align: center; width: 15%;color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            Actions\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let tk of externaltask\\\" [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)' } : {}\\\">\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"ui-g\\\" style=\\\"text-align: center; vertical-align: middle;\\\">\\n                                                <p-checkbox id=\\\"listask\\\" name=\\\"listask\\\" value=\\\"{{tk.task_id}}\\\" label=\\\"\\\" [(ngModel)]=\\\"seltasks\\\"></p-checkbox>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'text-align': 'center', 'background': 'rgb(227, 237, 241)'  } : { 'text-align': 'center'}\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td style=\\\"width: 20%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.task_date) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.task_id) }}\\n                                                        </a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 22.5%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.creator) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 22.5%;\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.asigned) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\" *ngIf=\\\"tk.proj_id != null\\\">\\n                                                        <a [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\">{{ escapeHtml(tk.proj_id) }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\" *ngIf=\\\"tk.proj_id == null\\\">\\n                                                        -\\n                                                    </td>\\n                                                </tr>\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td colspan=\\\"6\\\">\\n                                                        <div class=\\\"descriptionTasks description-fixed-squadlinx\\\" [ngStyle]=\\\"tk.para_status == 42 ? {'border-top': '2px solid white'} : { 'border-top': '2px solid rgb(227,237,241)'} \\\">\\n                                                            <span [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)', 'font-weight': 'bold' } : {'color': 'rgb(79, 93, 100)', 'font-weight': 'bold'}\\\">Description:</span>\\n                                                        </div>\\n                                                        <div class=\\\"descriptionTasks\\\">\\n                                                            <p class=\\\"box-task-description\\\" [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\"\\n                                                                  [innerHTML]=\\\"tk.task_description\\\" ></p>\\n                                                        </div>\\n                                                    </td>\\n                                                </tr>\\n                                            </table>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white', 'text-align': 'center', 'padding-left': '4px;','background': 'rgb(227, 237, 241)'  } : { 'padding-left': '4px;','text-align': 'center'}\\\">\\n                                            <span [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : {'color': 'rgb(79, 93, 100)'}\\\" class=\\\"span-sqlx\\\" style=\\\"text-align:center;\\\">{{tk.task_percentage}}%</span>\\n                                            <div class=\\\"progress-bar-sqlx\\\" style=\\\"width: 95%;\\\">\\n                                                <div class=\\\"success-tasks\\\" [ngStyle]=\\\"tk.para_status == 43 ? { 'background': 'rgb(237, 59, 89)', 'width': tk.task_percentage + '%' } : tk.para_status == 42 ? { 'background': 'rgb(79, 93, 100)' , 'width': tk.task_percentage + '%' } :{'background': 'rgb(68, 180, 248)' , 'width': tk.task_percentage + '%' }\\\">\\n                                                </div>\\n                                            </div>\\n                                        </td>\\n                                        <td [ngStyle]=\\\"tk.para_status == 42 ? {'border': '2px solid white','background': 'rgb(227, 237, 241)'  } : {}\\\">\\n                                            <div class=\\\"btn-group\\\">\\n                                                <span class=\\\"tool-tip\\\" data-toggle=\\\"tooltip\\\" data-placement=\\\"top\\\" title=\\\"Quick view\\\">\\n                                                    <button type=\\\"button\\\" (click)=\\\"showModaltk(tk.task_id)\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-search\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Edit\\\">\\n                                                    <button *ngIf=\\\"tk.para_status != 43 && tk.islocal\\\" type=\\\"button\\\" (click)=\\\"showEditModal(tk)\\\"\\n                                                        class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-quickedit\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Open\\\">\\n                                                    <button *ngIf=\\\"tk.para_status == 42 && tk.para_status != 43 && !tk.islocal\\\"\\n                                                        (click)=\\\"reopenTask(tk.bd_external, tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"fa fa-undo\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span  tooltipPosition=\\\"top\\\" pTooltip=\\\"Close\\\">\\n                                                    <button *ngIf=\\\"tk.para_status != 42 && tk.para_status != 43 && !tk.islocal\\\"\\n                                                        (click)=\\\"closeTask(tk.bd_external, tk.task_id)\\\" type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"fa fa-times-circle-o\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                                <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Delete\\\">\\n                                                    <button *ngIf=\\\"tk.para_status != 43 && !tk.islocal\\\" (click)=\\\"deleteTask(tk.bd_external, tk.task_id)\\\"\\n                                                        type=\\\"button\\\" class=\\\"btn btn-default btn-sm btn-act\\\">\\n                                                        <i [ngStyle]=\\\"tk.para_status == 43 ? { 'color': 'rgb(237, 59, 89)' } : tk.para_status == 42 ? { 'color': 'rgb(79, 93, 100)' } : {}\\\"\\n                                                            class=\\\"sq sq-trash\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                            </div>\\n                                            <taskview [myTaskId]=\\\"tk.task_id\\\" [myDbName]=\\\"tk.bd_external\\\"></taskview>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                            </div>\\n                            <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                                <div class=\\\"contacts-controls\\\">\\n                                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                                (click)=\\\"goTo(0)\\\">\\n                                                <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                        </select>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input id=\\\"input_3\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"ddwn_5\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assigned to</label>\\n                                <p-dropdown id=\\\"ddwn_6\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Project</label>\\n                                <p-dropdown id=\\\"ddwn_7\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"ddwn_8\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendar_2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"input_4\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                                <a id=\\\"editTask-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                                <a id=\\\"editTask-tasklist2\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate\\n                                    Form</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\">\\n                                <a id=\\\"editTask-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\" (click)=\\\"setPage(3)\\\">Attachments <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"p_editor_description_tasklist\\\" [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                      <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                      </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                         </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                                <div class=\\\"div_table_associateFom_editTask\\\">\\n                                    <table class=\\\"table_associateFom_editTask\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 60px;\\\">\\n                                                <td class=\\\"td_formfield_editTask\\\">\\n                                                    <div class=\\\"div_formfield_editTask\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td class=\\\"td_formdata_editTask\\\">\\n                                                    <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                    <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"fa fa-file-o\\\"\\n                                                   *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <img [src]=\\\"att.path\\\"\\n                                                     *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                     style=\\\"height: 100%; max-width: 100%\\\">\\n                                                <i class=\\\"fa fa-file-text-o\\\"\\n                                                   *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-word-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-excel-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-archive-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-powerpoint-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                            </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                                                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                            </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\" for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"button_21\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"button_22\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0)\\\"\\n                            (click)=\\\"saveTask()\\\">Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n\\n      <!--modal search External Task-->\\n    <div class=\\\"modal fade\\\" id=\\\"mdSearchExternalTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">Main filter</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Description</label>\\n                                <input type=\\\"text\\\" class=\\\"form-control sqlx-input\\\" id=\\\"description_taskfilter\\\" name=\\\"description_taskfilter\\\"\\n                                    [(ngModel)]=\\\"mytask.description\\\" placeholder=\\\"type a keyword\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-chips\\\">\\n                                <label>Task id(s)</label>\\n                                <p-chips class=\\\"chipsSqlx\\\" [(ngModel)]=\\\"mytask.task_ids\\\" placeholder=\\\"Ex.17,19-22 enter\\\"></p-chips>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Assigned to</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete *ngIf=\\\"textGroup\\\" class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.assigned\\\"\\n                                        [suggestions]=\\\"usersExternal\\\" (completeMethod)=\\\"filterMultiple($event, 4)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Assigned to\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                    <p-autoComplete *ngIf=\\\"!textGroup\\\" class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.assigned\\\"\\n                                        [suggestions]=\\\"usersFilter\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Assigned to\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Creator(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete *ngIf=\\\"textGroup\\\" class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.creators\\\"\\n                                        [suggestions]=\\\"usersFilter\\\" (completeMethod)=\\\"filterMultiple($event, 2)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                    <p-autoComplete *ngIf=\\\"!textGroup\\\" class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.creators\\\"\\n                                        [suggestions]=\\\"usersExternal\\\" (completeMethod)=\\\"filterMultiple($event, 4)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Creator(s)\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Product(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.products\\\"\\n                                        [suggestions]=\\\"productsFilter\\\" (completeMethod)=\\\"filterMultiple($event, 1)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Products(s)\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group squadlinx-autocomplete\\\">\\n                                <label>Project(s)</label>\\n                                <span class=\\\"ui-fluid\\\">\\n                                    <p-autoComplete class=\\\"autocompleteSqlx\\\" [(ngModel)]=\\\"mytask.projects\\\"\\n                                        [suggestions]=\\\"projectsFilter\\\" (completeMethod)=\\\"filterMultiple($event, 3)\\\"\\n                                        styleClass=\\\"wid100\\\" [minLength]=\\\"1\\\" placeholder=\\\"Project(s)\\\" field=\\\"label\\\"\\n                                        [multiple]=\\\"true\\\">\\n                                    </p-autoComplete>\\n                                </span>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date initial</label>\\n                                <p-calendar id=\\\"calendarDateInit_taskfilter\\\" name=\\\"calendarDateInit_taskfilter\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mytask.date_ini\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-6 col-lg-6 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Date end</label>\\n                                <p-calendar id=\\\"calendarDateEnd_taskfilter\\\" name=\\\"calendarDateEnd_taskfilter\\\" class=\\\"ui-g ui-fluid\\\"\\n                                    icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"mytask.date_end\\\" dateFormat=\\\"yy-mm-dd\\\"\\n                                    [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\"\\n                                    [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button style=\\\"position: initial; max-width: 83px;\\\" type=\\\"button\\\"\\n                            class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" (click)=\\\"filterTask()\\\">\\n                            Search\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/externaltask/externaltasklist.template.html\n// module id = 877\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"logs\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-statustasks\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> LOGS\\n            <small style=\\\"font-size:15px;\\\">Administrator</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Logs</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;\\\">\\n        <div class=\\\"row\\\" style=\\\"min-height: 50px;background: #dce3e6;\\\">\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div *ngIf = \\\"modules && modules.length > 0\\\" class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 dropdownSqlx\\\" style=\\\"text-align: center;margin-bottom: 3px;\\\">\\n                        <p-dropdown id=\\\"ddwnr_log\\\" class=\\\"ui-g ui-fluid \\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"modules\\\" [(ngModel)]=\\\"log.modu_id\\\" (onChange)=\\\"updateData(modules.label)\\\" placeholder=\\\"Module\\\" filter=\\\"filter\\\"></p-dropdown>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 calendar-squadlinx\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <p-calendar id=\\\"dateinit-log\\\" name=\\\"date-log\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"log.date_init\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2015:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div  class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 calendar-squadlinx\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <p-calendar id=\\\"dateend-log\\\" name=\\\"date-log\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"log.date_end\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2015:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-2 col-lg-2\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                <div class=\\\"label-input-mainfilter\\\">\\n                                    <input id=\\\"search_task\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"search by a keywords\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                </div>\\n                                <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\">\\n                                        <i class=\\\"sq sq-view\\\"></i>\\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-1 col-lg-1\\\" style=\\\"text-align: center;margin-bottom: 3px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);margin-left: 8px;\\\" (click)=\\\"getLogs()\\\" [disabled]=\\\"validateLog()\\\"> Search</button>\\n                    </div>\\n                    <!-- end - botones y search -->\\n                </div>\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && logs.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"logs.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div class=\\\"box-body\\\">\\n                        <div class=\\\"table-responsive tasks-messages\\\">\\n                            <table id=\\\"results\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;margin-bottom: 0px;\\\">\\n                                <thead>\\n                                    <tr style=\\\"border: 2px solid rgb(227,237,241) !important;\\\">\\n                                        <th style=\\\"width: 70%; color:rgb(79, 93, 100); border: 2px solid rgb(227,237,241) !important;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <thead>\\n                                                    <tr>\\n                                                        <th id=\\\"order_7\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100)\\\">\\n                                                            Module\\n                                                        </th>\\n                                                        <th id=\\\"order_3\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\"\\n                                                        (click)=\\\"setOrder('user_related')\\\">\\n                                                            User\\n                                                            <span [hidden]=\\\"posOrder !== 'user_related'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_8\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" \\n                                                        (click)=\\\"setOrder('logg_descripcion')\\\">\\n                                                            Description\\n                                                            <span [hidden]=\\\"posOrder !== 'logg_descripcion'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_1\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" \\n                                                        (click)=\\\"setOrder('logg_fecha')\\\">\\n                                                            Date\\n                                                            <span [hidden]=\\\"posOrder !== 'logg_fecha'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_4\\\" style=\\\"text-align: center; width: 10%; color:rgb(79, 93, 100)\\\" \\n                                                        (click)=\\\"setOrder('logg_ip')\\\">\\n                                                            ip\\n                                                            <span [hidden]=\\\"posOrder !== 'logg_ip'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                        <th id=\\\"order_5\\\" style=\\\"text-align: center; width: 20%; color:rgb(79, 93, 100)\\\" \\n                                                        (click)=\\\"setOrder('logg_agente')\\\">\\n                                                            Agent\\n                                                            <span [hidden]=\\\"posOrder !== 'logg_agente'\\\">\\n                                                                <span [hidden]=\\\"!orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-down-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                                <span [hidden]=\\\"orderDesc\\\" style=\\\"color:rgb(68, 180, 248);\\\">\\n                                                                    <i class=\\\"sq sq-up-arrow\\\" style=\\\"color:rgb(68, 180, 248);\\\"></i>\\n                                                                </span>\\n                                                            </span>\\n                                                        </th>\\n                                                    </tr>\\n                                                </thead>\\n                                            </table>\\n                                        </th>\\n                                    </tr>\\n                                </thead>\\n                            </table>\\n                            <table id=\\\"results2\\\" class=\\\"table table-bordered-sqlxt table-tasklist2\\\" style=\\\"width: 100%;\\\">\\n                                <tbody>\\n                                    <tr *ngFor=\\\"let lg of logs\\\">\\n                                        <td style=\\\"text-align: center;\\\">\\n                                            <table style=\\\"width: 100%;\\\">\\n                                                <tr style=\\\"background-color: transparent;\\\">\\n                                                    <td style=\\\"text-align: center; width: 20%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_modulo }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.user_related }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_descripcion }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"width: 10%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_fecha }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 10%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_ip }}</a>\\n                                                    </td>\\n                                                    <td style=\\\"text-align: center; width: 20%;\\\">\\n                                                        <a style=\\\"color: rgb(79, 93, 100);\\\">\\n                                                            {{ lg.logg_agente }}</a>\\n                                                    </td>\\n                                                </tr>\\n                                            </table>\\n                                        </td>\\n                                    </tr>\\n                                </tbody>\\n                            </table>\\n                            </div>\\n                            <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                                <div class=\\\"contacts-controls\\\">\\n                                    <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                        {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                        >\\n                                        itemcount ?\\n                                        itemcount : (currentpage * limitpage)\\n                                        }} of {{ itemcount }} results\\n                                    </button>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                                (click)=\\\"goTo(0)\\\">\\n                                                <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                                                <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                            </button>\\n                                        </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                        <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                            <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                        </select>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"setCurPage(1)\\\">\\n                                            <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                    </div>\\n                                    <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                        <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                        <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                            (click)=\\\"goTo(1)\\\">\\n                                            <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                        </button>\\n                                    </span>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n    </section>\\n    <div class=\\\"modal fade\\\" id=\\\"mdTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content\\\">\\n                <div class=\\\"modal-header modal-header-info\\\">\\n                    <button type=\\\"button\\\" class=\\\"close\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                        <span aria-hidden=\\\"true\\\">&times;</span>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"form-group\\\">\\n                        <label>Subject</label>\\n                        <p>{{ task.task_subject }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Product</label>\\n                        <p>{{ task.prod_name }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Assigned to</label>\\n                        <p>{{ task.asigned }}</p>\\n                    </div>\\n                    <div class=\\\"form-group\\\">\\n                        <label>Description</label>\\n                        <div [innerHTML]=\\\"task.task_description\\\"></div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\" *ngIf=\\\"task.attachments && task.attachments.length > 0\\\">\\n                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                <span class=\\\"mailbox-attachment-icon\\\">\\n                                    <i class=\\\"fa fa-file-o\\\" *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                    <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                    <img [src]=\\\"att.path\\\" *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                        style=\\\"height: 100%; max-width: 100%\\\">\\n                                    <i class=\\\"fa fa-file-text-o\\\" *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                    <i class=\\\"fa fa-file-word-o\\\" *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                    <i class=\\\"fa fa-file-excel-o\\\" *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                    <i class=\\\"fa fa-file-archive-o\\\" *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                    <i class=\\\"fa fa-file-powerpoint-o\\\" *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                    <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                                </span>\\n                            </a>\\n                            <div class=\\\"mailbox-attachment-info\\\">\\n                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                </span>\\n                            </div>\\n                        </li>\\n                    </ul>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-right\\\">\\n                        <button type=\\\"button\\\" class=\\\"btn btn-default\\\" data-dismiss=\\\"modal\\\">Close</button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdAddTask\\\" role=\\\"dialog\\\">\\n        <!--Modal New Task-->\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">New Task</h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"ddwn_4\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assign to</label>\\n                                <p-dropdown id=\\\"ddwn_3\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate a Project</label>\\n                                <p-dropdown id=\\\"ddwn_2\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"ddwn_1\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendar_1\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\"  id=\\\"spinner_1\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\" style=\\\"height: 58px;\\\">\\n                            <label>Options</label>\\n                            <div class=\\\"col-xs-12 col-md-12 col-lg-12 \\\" style=\\\"padding-top: 5px;\\\">\\n                                <label class=\\\"form-check-label\\\">\\n                                    <input id=\\\"check_1\\\" type=\\\"checkbox\\\" class=\\\"form-check-input\\\" [(ngModel)]=\\\"task.completed\\\">\\n                                    Mark as Complete\\n                                </label>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li id=\\\"li_description_task\\\" [ngClass]=\\\"{'active':tagMenuNew == 1}\\\">\\n                                <a id=\\\"editTask-request\\\" data-toggle=\\\"tab\\\" href=\\\"#description_newTask\\\"\\n                                   (click)=\\\"setPageNewTask(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\"\\n                                [ngClass]=\\\"{'active':tagMenuNew == 2}\\\">\\n                                <a id=\\\"editTask-request2\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_newTask\\\"\\n                                   (click)=\\\"setPageNewTask(2)\\\">Attachments\\n                                    <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenuNew == 1\\\" id=\\\"description_newTask\\\"\\n                             class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"editor_1\\\" [(ngModel)]=\\\"task.task_description2\\\"\\n                                          [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                      <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                      </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\"\\n                                                  type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\"\\n                                                  type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                        </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenuNew == 2 && task.attachments && task.attachments.length > 0\\\"\\n                             id=\\\"attachments_newTask\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                <i class=\\\"fa fa-file-o\\\"\\n                                   *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"></i>\\n                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"></i>\\n                                <img [src]=\\\"att.path\\\"\\n                                     *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                     style=\\\"height: 100%; max-width: 100%\\\">\\n                                <i class=\\\"fa fa-file-text-o\\\"\\n                                   *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"></i>\\n                                <i class=\\\"fa fa-file-word-o\\\"\\n                                   *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"></i>\\n                                <i class=\\\"fa fa-file-excel-o\\\"\\n                                   *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"></i>\\n                                <i class=\\\"fa fa-file-archive-o\\\"\\n                                   *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"></i>\\n                                <i class=\\\"fa fa-file-powerpoint-o\\\"\\n                                   *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"></i>\\n                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"></i>\\n                            </span>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <i class=\\\"fa fa-paperclip\\\"></i>{{ att.name }}\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                    {{att.size + ' bytes'}}\\n                                    <button id=\\\"button_1\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                            (click)=\\\"deleteAttachment(att)\\\">\\n                                        <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                    </button>\\n                                </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\" for=\\\"file-upload2\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload2\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"button_2\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"button_3\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"validateTask()\\\" (click)=\\\"saveTask()\\\"> Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <div class=\\\"modal fade\\\" id=\\\"mdEditTask\\\" role=\\\"dialog\\\">\\n        <div class=\\\"modal-dialog modal-lg\\\" role=\\\"document\\\">\\n            <div class=\\\"modal-content-params\\\">\\n                <div class=\\\"modal-header modal-header-info-params\\\">\\n                    <button type=\\\"button\\\" class=\\\"close close-request\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\" style=\\\"color:white;\\\">\\n                        <i class=\\\"sq sq-close\\\" style=\\\"color:white;\\\"></i>\\n                    </button>\\n                    <h4 class=\\\"modal-title\\\" style=\\\"color: #fff;font-weight: bold;\\\">\\n                        <i class=\\\"fa fa-tasks\\\" aria-hidden=\\\"true\\\"></i>{{\\\" #\\\" + task.task_id + \\\" - \\\" + task.task_subject}}\\n                    </h4>\\n                </div>\\n                <div class=\\\"modal-body\\\">\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group input-squadlinx\\\">\\n                                <label>Subject</label>\\n                                <input id=\\\"input_3\\\" class=\\\"form-control sqlx-input\\\" [(ngModel)]=\\\"task.task_subject\\\" placeholder=\\\"\\\">\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Product</label>\\n                                <p-dropdown id=\\\"ddwn_5\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"products\\\" [(ngModel)]=\\\"task.prod_id\\\" placeholder=\\\"Select a Product\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Assigned to</label>\\n                                <p-dropdown id=\\\"ddwn_6\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"userslbl\\\" [(ngModel)]=\\\"task.user_asigned\\\" placeholder=\\\"Select user\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Project</label>\\n                                <p-dropdown id=\\\"ddwn_7\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"myProjects\\\" [(ngModel)]=\\\"task.proj_id\\\" placeholder=\\\"Select a Project\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group dropdownSqlx\\\">\\n                                <label>Associate to Sprint</label>\\n                                <p-dropdown id=\\\"ddwn_8\\\" class=\\\"ui-g ui-fluid\\\" dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" [options]=\\\"mysprints\\\" [(ngModel)]=\\\"task.spri_id\\\" placeholder=\\\"Select a Sprint\\\" filter=\\\"filter\\\"></p-dropdown>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4 calendar-squadlinx\\\">\\n                            <div class=\\\"form-group\\\">\\n                                <label>Delivery Date</label>\\n                                <p-calendar id=\\\"calendar_2\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"task.task_delivery\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2000:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                            </div>\\n                        </div>\\n                        <div class=\\\"col-xs-12 col-sm-6 col-md-4 col-lg-4\\\">\\n                            <div class=\\\"form-group spinner-squadlinx\\\">\\n                                <label>Points</label>\\n                                <input type=\\\"number\\\" id=\\\"input_4\\\" class=\\\"input_number_squadlinx\\\" [(ngModel)]=\\\"task.task_points\\\" step=\\\"0.01\\\" min=\\\"0\\\">\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"row\\\" style=\\\"color: #829198;\\\">\\n                        <ul class=\\\"nav nav-tabs sqlx-nav-req\\\">\\n                            <li [ngClass]=\\\"{'active':tagMenu == 1}\\\">\\n                                <a id=\\\"editTask-tasklist\\\" data-toggle=\\\"tab\\\" href=\\\"#description_task\\\" (click)=\\\"setPage(1)\\\">Description</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.form && task.form.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 2}\\\">\\n                                <a id=\\\"editTask-tasklist2\\\" data-toggle=\\\"tab\\\" href=\\\"#associate_form\\\" (click)=\\\"setPage(2)\\\">Associate\\n                                    Form</a>\\n                            </li>\\n                            <li *ngIf=\\\"task.attachments && task.attachments.length > 0\\\" [ngClass]=\\\"{'active':tagMenu == 3}\\\">\\n                                <a id=\\\"editTask-tasklist3\\\" data-toggle=\\\"tab\\\" href=\\\"#attachments_task\\\" (click)=\\\"setPage(3)\\\">Attachments <span>({{task.attachments.length}})</span></a>\\n                            </li>\\n                        </ul>\\n                        <div *ngIf=\\\"tagMenu == 1\\\" id=\\\"description_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group editor-squadlinx\\\" style=\\\"margin-top:5px;\\\">\\n                                <p-editor id=\\\"p_editor_description_tasklist\\\" [(ngModel)]=\\\"task.task_description\\\" [style]=\\\"{'height':'200px'}\\\">\\n                                    <p-header>\\n                                      <span class=\\\"ql-formats\\\">\\n                                           <span class=\\\"ql-header\\\">\\n                                              <select class=\\\"ql-header\\\">\\n                                                <option value=\\\"1\\\">Heading</option>\\n                                                <option value=\\\"2\\\">Subheading</option>\\n                                                <option selected>Normal</option>\\n                                              </select>\\n                                           </span>\\n\\n                                            <span class=\\\"ql-font\\\">\\n                                              <select class=\\\"ql-font\\\">\\n                                                <option selected>Sans Serif</option>\\n                                                <option value=\\\"serif\\\">Serif</option>\\n                                                <option value=\\\"monospace\\\">Monospace</option>\\n                                              </select>\\n                                            </span>\\n                                      </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button class=\\\"ql-bold\\\" aria-label=\\\"Bold\\\"></button>\\n                                          <button class=\\\"ql-italic\\\" aria-label=\\\"Italic\\\"></button>\\n                                          <button class=\\\"ql-underline\\\" aria-label=\\\"Underline\\\"></button>\\n                                        </span>\\n\\n                                        <span class=\\\"ql-formats\\\">\\n                                          <button aria-label=\\\"Ordered List\\\" class=\\\"ql-list\\\" value=\\\"ordered\\\" type=\\\"button\\\"></button>\\n                                          <button aria-label=\\\"Unordered List\\\" class=\\\"ql-list\\\" value=\\\"bullet\\\" type=\\\"button\\\"></button>\\n                                          <span class=\\\"ql-align ql-picker ql-icon-picker\\\">\\n                                            <select class=\\\"ql-align\\\">\\n                                               <option selected></option>\\n                                               <option value=\\\"center\\\"></option>\\n                                               <option value=\\\"right\\\"></option>\\n                                               <option value=\\\"justify\\\"></option>\\n                                             </select>\\n                                          </span>\\n                                         </span>\\n                                    </p-header>\\n                                </p-editor>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 2\\\" id=\\\"associate_form\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:5px;\\\">\\n                                <div class=\\\"div_table_associateFom_editTask\\\">\\n                                    <table class=\\\"table_associateFom_editTask\\\">\\n                                        <tbody style=\\\"width: 100%;\\\">\\n                                            <tr *ngFor=\\\"let fr of task.form\\\" style=\\\"height: 60px;\\\">\\n                                                <td class=\\\"td_formfield_editTask\\\">\\n                                                    <div class=\\\"div_formfield_editTask\\\">\\n                                                        {{fr.form_field}}\\n                                                    </div>\\n                                                </td>\\n                                                <td class=\\\"td_formdata_editTask\\\">\\n                                                    <div *ngIf=\\\"fr.form_data\\\" class=\\\"div_formdata_editTask\\\">\\n                                                        {{fr.form_data}}\\n                                                    </div>\\n                                                    <div *ngIf=\\\"fr.form_data == 0\\\" class=\\\"div_formdata2_editTask\\\">\\n                                                    </div>\\n                                                </td>\\n                                            </tr>\\n                                        </tbody>\\n                                    </table>\\n                                </div>\\n                            </div>\\n                        </div>\\n                        <div *ngIf=\\\"tagMenu == 3\\\" id=\\\"attachments_task\\\" class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\">\\n                            <div class=\\\"form-group\\\" style=\\\"margin-top:10px;\\\">\\n                                <div class=\\\"div_associatedAttachments\\\">\\n                                    <ul class=\\\"mailbox-attachments clearfix\\\">\\n                                        <li *ngFor=\\\"let att of task.attachments\\\">\\n                                            <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                            <span class=\\\"mailbox-attachment-icon\\\">\\n                                                <i class=\\\"fa fa-file-o\\\"\\n                                                   *ngIf=\\\"att.type !== 'application/pdf' && att.type !== 'text/plain' && att.type !== 'text/csv' && att.type !== 'application/msword' && att.type !== 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' && att.type !== 'application/vnd.ms-excel' && att.type !== 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' && att.type !== 'image/jpeg' && att.type !== 'image/jpg' && att.type !== 'image/png' && att.type !== 'image/gift' && att.type !== 'application/x-rar-compressed' && att.type !== 'application/zip' && att.type !== 'application/vnd.openxmlformats-officedocument.presentationml.presentation' && att.type !== 'application/vnd.ms-powerpoint' && att.type !== 'application/vnd.ms-powerpoint.presentation.macroenabled.12' && att.type.substring(0, 6) !== 'audio/'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-pdf-o\\\" *ngIf=\\\"att.type == 'application/pdf'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <img [src]=\\\"att.path\\\"\\n                                                     *ngIf=\\\"att.type == 'image/jpeg' || att.type == 'image/jpg' || att.type == 'image/png' || att.type == 'image/gift'\\\"\\n                                                     style=\\\"height: 100%; max-width: 100%\\\">\\n                                                <i class=\\\"fa fa-file-text-o\\\"\\n                                                   *ngIf=\\\"att.type == 'text/plain' || att.type == 'text/csv'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-word-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/msword' || att.type == 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-excel-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/vnd.ms-excel' || att.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-archive-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/x-rar-compressed' || att.type == 'application/zip'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-powerpoint-o\\\"\\n                                                   *ngIf=\\\"att.type == 'application/vnd.openxmlformats-officedocument.presentationml.presentation' || att.type == 'application/vnd.ms-powerpoint' || att.type == 'application/vnd.ms-powerpoint.presentation.macroenabled.12'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                                <i class=\\\"fa fa-file-audio-o\\\" *ngIf=\\\"att.type.substring(0, 6) == 'audio/'\\\"\\n                                                   style=\\\"height: 100%; max-width: 100%\\\"></i>\\n                                            </span>\\n                                            </a>\\n                                            <div class=\\\"mailbox-attachment-info\\\">\\n                                                <a [href]=\\\"att.path\\\" target=\\\"_blank\\\" class=\\\"mailbox-attachment-name\\\">\\n                                                    <i class=\\\"fa fa-paperclip\\\"></i>{{ \\\" \\\" + att.tsat_alias }}\\n                                                </a>\\n                                                <span class=\\\"mailbox-attachment-size\\\">\\n                                                {{att.size + ' bytes'}}\\n                                                <button id=\\\"button_20\\\" type=\\\"submit\\\" class=\\\"btn btn-default btn-xs pull-right\\\"\\n                                                        (click)=\\\"deleteAttachmentTask(task, att)\\\">\\n                                                    <i class=\\\"fa fa-trash-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                            </span>\\n                                            </div>\\n                                        </li>\\n                                    </ul>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                </div>\\n                <div class=\\\"modal-footer\\\">\\n                    <div class=\\\"pull-left\\\">\\n                        <label style=\\\"border: 1px solid #ccc; display: inline-block; padding: 6px 12px; cursor: pointer;background-color: #007bd2!important;border-color: #007bd2!important; color:white; font-weight: bold; border-radius: 15px;\\\" for=\\\"file-upload\\\" class=\\\"custom-file-upload\\\">\\n                            <i class=\\\"sq sq-custom-upload\\\"></i> Custom Upload\\n                        </label>\\n                        <input id=\\\"file-upload\\\" type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.avi,.flv,.wmv,.mov\\\" style=\\\"display: none;\\\" (change)=\\\"onChange($event)\\\" />\\n                    </div>\\n                    <div class=\\\"pull-right\\\">\\n                        <button id=\\\"button_21\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-close-sprintTask\\\" data-dismiss=\\\"modal\\\">Close\\n                        </button>\\n                        <button id=\\\"button_22\\\" style=\\\"position: inherit;width: 83px!important;\\\" type=\\\"button\\\" class=\\\"btn-success btn-sm btn-add-sprint\\\" data-dismiss=\\\"modal\\\" [disabled]=\\\"(!task.task_description || task.task_description == '' || task.task_description == 'undefined') || (!task.prod_id) || (!task.task_points || task.task_points <= 0)\\\"\\n                            (click)=\\\"saveTask()\\\">Save\\n                        </button>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n    </div>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/loglist/loglist.template.html\n// module id = 878\n// module chunks = 0","module.exports = \"<my-header></my-header>\\n<section id=\\\"notifications\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content-header\\\">\\n        <h2 style=\\\"font-weight:bold\\\">\\n            <i class=\\\"sq sq-notifications\\\" aria-hidden=\\\"true\\\" style=\\\"font-size: 28px;\\\"></i> NOTIFICATIONS\\n            <small style=\\\"font-size:15px;\\\">Calendar</small>\\n        </h2>\\n        <ol class=\\\"breadcrumb\\\">\\n            <li>\\n                <a routerLink=\\\"/dashboard\\\">\\n                    <i class=\\\"sq sq-dashboard\\\"></i> Home</a>\\n            </li>\\n            <li class=\\\"active\\\">Notifications</li>\\n        </ol>\\n    </section>\\n    <section class=\\\"content\\\" style=\\\"background-color:#fff;padding: 0;height:939px;\\\">\\n        <div class=\\\"row\\\" style=\\\"min-height: 50px;background: #dce3e6;\\\">\\n            <div class=\\\"box-header with-border\\\" style=\\\"border-bottom: none!important;\\\">\\n                    <!-- botones y search -->\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 calendar-squadlinx\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <p-calendar id=\\\"dateinit-notif\\\" name=\\\"date-notif\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"notif.date_init\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2015:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div  class=\\\"col-xs-12 col-sm-6 col-md-3 col-lg-3 calendar-squadlinx\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <p-calendar id=\\\"dateend-notif\\\" name=\\\"date-notif\\\" class=\\\"ui-g ui-fluid\\\" icon=\\\"sq sq-calendar\\\" [(ngModel)]=\\\"notif.date_end\\\" dateFormat=\\\"yy-mm-dd\\\" [showIcon]=\\\"true\\\" view=\\\"month\\\" [yearNavigator]=\\\"true\\\" yearRange=\\\"2015:2030\\\" [monthNavigator]=\\\"true\\\"></p-calendar>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-6 col-md-2 col-lg-2\\\" style=\\\"margin-bottom: 3px;\\\">\\n                        <div class=\\\"col-xs-11 col-sm-11 col-md-11 col-lg-11 inputs-mainfilter2\\\" style=\\\"margin-right: 10px;background-color: #fff;\\\">\\n                            <div class=\\\"row\\\" style=\\\"position:relative\\\">\\n                                <div class=\\\"label-input-mainfilter\\\">\\n                                    <input id=\\\"search_task\\\" type=\\\"text\\\" style=\\\"width: 92%; padding-left: 8px;\\\" class=\\\"input-mainfilter\\\" placeholder=\\\"search by a keywords\\\" [(ngModel)]=\\\"search\\\" (keyup)=\\\"changedExtraHandler($event)\\\">\\n                                </div>\\n                                <div style=\\\"position: absolute; right: 0; top: 0px;\\\">\\n                                    <button type=\\\"button\\\" class=\\\"btn btn-sm\\\" style=\\\"padding: 4px; margin-right:8px;color:rgb(68, 180, 248);\\\"><i class=\\\"sq sq-view\\\"></i> \\n                                    </button>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>\\n                    <div class=\\\"col-xs-12 col-sm-12 col-md-1 col-lg-1\\\" style=\\\"text-align: center;margin-bottom: 3px;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn btn-sm btn-sqlx\\\" style=\\\"padding: 5px 5px; background-color:rgb(72,186,248);margin-left: 8px;\\\" (click)=\\\"getNotifications()\\\" [disabled]=\\\"validateNotificatios()\\\"> Search</button>\\n                    </div>\\n                    <!-- end - botones y search -->\\n                </div>\\n        </div>\\n        <div class=\\\"row\\\">\\n            <div class=\\\"col-xs-12 col-sm-12 col-md-12 col-lg-12\\\" style=\\\"background-color: white;padding-left: 0;\\\">\\n                <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                    <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n                </div>\\n                <div *ngIf=\\\"!isLoading && notifications.length == 0\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center;\\\">\\n                    No Data\\n                </div>\\n                <div *ngIf=\\\"notifications.length > 0\\\" class=\\\"box box-primary\\\" style=\\\"border-top: none!important; width: 97%;margin-left: 1.5%;\\\">\\n                    <div id=\\\"notifications-dashboard\\\" class=\\\"col-xs-11 col-sm-11 col-md-12 col-lg-12 notifications-types\\\">\\n                        <div class=\\\"box\\\" style=\\\"box-shadow:0 0px 0px rgba(0, 0, 0, 0.1); border-top:none;\\\">\\n                            <div class=\\\"box-body chat-notif\\\" style=\\\"width:100%; height: 613px; overflow-y:scroll;\\\">\\n                            <div class=\\\"item\\\" *ngFor=\\\"let nt of notifications\\\">\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'new_task'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\" style=\\\"text-decoration: none;\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    <span>{{ nt.noti_title }} </span> task\\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <span> Task : </span>{{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                                    <div class=\\\"btn-goto-task pull-right\\\">\\n                                    <button id=\\\"mdtask-notif-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdTask\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">go to task </span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                <!--TASK-->\\n                                </div>\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'comment_task'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    <span> {{ nt.noti_title }} </span> task\\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                                    <div class=\\\"btn-ViewMore pull-right\\\">\\n                                    <button id=\\\"viewTask_commentTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdTask\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">View task</span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                </div>\\n                                <!--comments-task-->\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'status_task'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    - Task #{{nt.task_id + \\\" \\\"}}<span> {{ nt.noti_title }} </span> \\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                                    <div class=\\\"btn-ViewMore pull-right\\\">\\n                                    <button id=\\\"viewTask_statusTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdTask\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">View task</span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                </div>\\n                                <!--status-task-->\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'extra_task'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\" style=\\\"border: 2px solid #47B5FB;\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    - Task #{{nt.task_id + \\\" \\\"}}<span> {{ nt.noti_title }} </span> \\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-taskboard\\\" aria-hidden=\\\"true\\\"></i>\\n                                    <span> Comments:</span> {{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                                    <div class=\\\"btn-ViewMore pull-right\\\">\\n                                    <button id=\\\"viewTask_extraTask_dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.task_id\\\" (click)=\\\"showModaltk(nt.task_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdTask\\\">\\n                                        <span style=\\\"font-weight: bold;\\\">View task</span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                </div>\\n                                <!--extra-task-->\\n                                <div class=\\\"item-notifications\\\" *ngIf=\\\"nt.para_type == 'comment_proj'\\\">\\n                                <span class=\\\"task-notif\\\">\\n                                    <i class=\\\"fa fa-user-circle-o\\\" aria-hidden=\\\"true\\\"></i>\\n                                </span>\\n                                <div class=\\\"message\\\">\\n                                    <p class=\\\"notif-description\\\">\\n                                    <small class=\\\"text-muted pull-right\\\">{{ nt.hour }}</small>\\n                                    {{ nt.user }}\\n                                    <span>{{ nt.noti_title }} </span> project\\n                                    </p>\\n                                </div>\\n                                <div class=\\\"attachment\\\">\\n                                    <p class=\\\"noti-title\\\">\\n                                    <i class=\\\"sq sq-comments\\\" style=\\\"color:rgb(68, 180, 248);font-size: 23px!important;\\\"></i>\\n                                    {{ escapeHtml(nt.noti_description) }}\\n                                    </p>\\n                \\n                                    <div class=\\\"pull-right btn-send-task\\\">\\n                                    <button id=\\\"mdproject-notif-dashboard\\\" type=\\\"button\\\" class=\\\"btn btn-primary btn-sm btn-flat\\\" *ngIf=\\\"nt.proj_id\\\" (click)=\\\"showProject(nt.proj_id)\\\" data-toggle=\\\"modal\\\"\\n                                        data-target=\\\"#mdprojectView\\\" style=\\\"background-color:#47B5FB; border-radius:10px; color:white; font-size: 15px; font-weight: bold;\\\">\\n                                        <span>View Project</span>\\n                                    </button>\\n                                    </div>\\n                                </div>\\n                                </div>\\n                                <!--comments project-->\\n                                <taskview [myTaskId]=\\\"nt.task_id\\\"></taskview>\\n                            </div>\\n                            <!--.ngfor-->\\n                            </div>\\n                            <div class=\\\"box-footer no-padding\\\" style=\\\"background-color: white\\\">\\n                                    <div class=\\\"contacts-controls\\\">\\n                                        <div class=\\\"col-xs-2 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"display: inline;color:rgb(130,145,152);background-color: rgb(214,224,229)\\\">\\n                                            <button type=\\\"button\\\" class=\\\"btn btn-default btn-act_2\\\">\\n                                                {{ (currentpage * limitpage) - limitpage + 1 }} - {{ (currentpage * limitpage)\\n                                                >\\n                                                itemcount ?\\n                                                itemcount : (currentpage * limitpage)\\n                                                }} of {{ itemcount }} results\\n                                            </button>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"First\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\"\\n                                                        (click)=\\\"goTo(0)\\\">\\n                                                        <i class=\\\"fa fa-step-backward\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Prev\\\">\\n                                                    <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == 1\\\" (click)=\\\"setCurPage(0)\\\">\\n                                                        <i class=\\\"fa fa-chevron-left\\\" aria-hidden=\\\"true\\\"></i>\\n                                                    </button>\\n                                                </span>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229); border-left: 3px solid white;text-align: center;\\\">\\n                                            <select class=\\\"form-control form-control-sm\\\" style=\\\"height: 31px; background-color: rgb(214,224,229); border: none;\\\" [(ngModel)]=\\\"currentpage\\\" (change)=\\\"reload()\\\">\\n                                                    <option *ngFor=\\\"let c of pages\\\" [ngValue]=\\\"c\\\">{{ c }}</option>\\n                                                </select>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Next\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                                    (click)=\\\"setCurPage(1)\\\">\\n                                                    <i class=\\\"fa fa-chevron-right\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                            </span>\\n                                        </div>\\n                                        <div class=\\\"col-xs-2 col-sm-1 col-md-1 col-lg-1\\\" style=\\\"display: inline;background-color: rgb(214,224,229);border-left: 3px solid white;text-align: center;\\\">\\n                                            <span tooltipPosition=\\\"top\\\" pTooltip=\\\"Last\\\">\\n                                                <button type=\\\"button\\\" class=\\\"btn btn-default btn-act\\\" [disabled]=\\\"currentpage == lastpage\\\"\\n                                                    (click)=\\\"goTo(1)\\\">\\n                                                    <i class=\\\"fa fa-step-forward\\\" aria-hidden=\\\"true\\\"></i>\\n                                                </button>\\n                                            </span>\\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            <!--box-body-->\\n                        </div>\\n                        <!--box success-->\\n                    </div>\\n                </div>\\n                </div>\\n            </div>\\n    </section>\\n    <p-confirmDialog class=\\\"confirmSqlx\\\"></p-confirmDialog>\\n</section>\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/notifications/notifications.template.html\n// module id = 879\n// module chunks = 0","module.exports = \"<a href=\\\"javascript:void(0)\\\" (click)=addDocument()>\\n    <span class=\\\"search-document\\\"  data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" style=\\\"padding: 0px; background: none;\\\">\\n        <img src=\\\"img/addblue.svg\\\" style=\\\"height: 40px; width: 40px;\\\">\\n    </span>\\n</a> \\n<my-header></my-header>\\n<section id=\\\"documents\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content\\\">\\n        <div class=\\\"box-header documents-header\\\">        \\n            <div class=\\\"documentstype col-xs-8 col-sm-6 col-md-5 col-lg-6\\\" style=\\\"left: 25%;padding-top: 23px;\\\">\\n                <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" id=\\\"dropdown-documents\\\"  name=\\\"documentstype\\\" [options]=\\\"typedocuments\\\" [(ngModel)]=\\\"document.value\\\" (onChange)=getDocuments(document.value) ></p-dropdown>\\n            </div>\\n        </div>          \\n        <div class=\\\"documents-content\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center; margin-top:20px;\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div *ngIf=\\\"!isLoading && documents.length == 0\\\" style=\\\"text-align: center;\\\">\\n                <h3 style=\\\"color:#3EA8F9;\\\"> NO DATA </h3>\\n            </div>\\n            <div class=\\\"documents-title\\\" *ngIf=\\\"documents && documents.length >0\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Date</div>\\n                    <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Created by</div>\\n                    <div class=\\\"col-xs-5\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Documents</div>\\n                    <div class=\\\"col-xs-3\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Actions</div>\\n                </div>\\n            </div>\\n            <div class=\\\"box-body documents-body\\\" *ngIf=\\\"documents && documents.length >0\\\">\\n                <div class=\\\"row\\\" *ngFor=\\\"let x of documents\\\" style=\\\"border-bottom: 1px solid #B2B2B2;\\\">\\n                    <div  style=\\\"min-height: 40px; padding-top: 10px;\\\">\\n                        <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"> \\n                            {{x.cloud_date}}\\n                        </div>\\n                        <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"> \\n                            {{x.creator}}\\n                        </div>\\n                        <div class=\\\"col-xs-5\\\" style=\\\"text-align: center; font-size: 16px; color: #283760;\\\">{{x.title}}</div>\\n                        <div class=\\\"col-xs-3 col-sm-3 col-md-3 col-lg-3\\\" style=\\\"color: #38A0F4; text-align: center;\\\"> \\n                            <button (click) = \\\"downloadDocument(x.id_cloud)\\\" style=\\\"border: none; background: transparent; \\\">\\n                                <img class=\\\"download-document\\\" src=\\\"img/download_mailbox.svg\\\">\\n                            </button>\\n                            <button (click) = \\\"editDocument(x)\\\" style=\\\"border: none; background: transparent; \\\">\\n                                <img src=\\\"img/pencil.svg\\\" style=\\\"height: 20px; width: 20px;\\\">\\n                            </button>\\n                            <button (click) = \\\"confirmDocument(x)\\\" style=\\\"border: none; background: transparent;\\\">\\n                                <img src=\\\"img/uncheck.svg\\\" style=\\\"height: 20px; width: 20px;\\\">\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal modal-documents fade\\\" id=\\\"mdEditdocument\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%;\\\">\\n                <div class=\\\"modal-content\\\" style=\\\"border-radius: 10px;\\\">\\n                    <div class=\\\"modal-header-documents\\\">\\n                        <div >\\n                            <label>SHARE WITH</label>\\n                            <button type=\\\"button\\\" class=\\\"pull-right btnclose-document\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                                <span aria-hidden=\\\"true\\\">x</span>\\n                            </button>\\n                        </div> \\n                    </div>\\n                    <div class=\\\"modal-body\\\" style=\\\"min-height: 200px;padding: 30px;\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5\\\">\\n                                <ul class=\\\"shareuser\\\">\\n                                    <p-listbox [options]=\\\"listgroups\\\" [(ngModel)]=\\\"editdocument.shared\\\" multiple=\\\"multiple\\\" checkbox=\\\"checkbox\\\" ></p-listbox>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-7\\\">\\n                                <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"margin-bottom:10px; padding: 0px;\\\">\\n                                    <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]='false'  class=\\\"dropdown-document\\\" [options]=\\\"resourcetype\\\" [(ngModel)]=\\\"editdocument.id_type\\\"></p-dropdown>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"padding: 0px;\\\">\\n                                    <input [ngClass]=\\\"{'field-required':requiredTitle == true}\\\" class=\\\"inputeditdocument\\\" type=\\\"text\\\" [(ngModel)]=\\\"editdocument.title\\\" placeholder=TITLE >\\n                                </div>\\n                                <div class=\\\"col-xs-12\\\" style=\\\"padding: 0px;\\\">\\n                                    <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]='false' id=\\\"dropdowndocuments\\\" class=\\\"dropdown-type-document\\\" [options]=\\\"typedocuments\\\" [(ngModel)]=\\\"editdocument.id_class\\\"></p-dropdown>\\n                                </div>\\n                                <div class=\\\"col-xs-12\\\" style=\\\"padding: 0px;\\\">\\n                                    <div *ngIf=\\\"editdocument.id_type == '76' \\\"> \\n                                        <input [ngClass]=\\\"{'field-required':required == true}\\\" class=\\\"urldocument\\\" type=\\\"text\\\" [(ngModel)]=\\\"editdocument.clou_nameUrl\\\" placeholder=URL>\\n                                    </div>\\n                                    <div *ngIf=\\\"editdocument.id_type == '75' \\\"> \\n                                        <div class=\\\"file-document\\\" [ngClass]=\\\"{'field-required':required == true}\\\"> \\n                                            <input id=\\\"file-upload2\\\"  type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.svg\\\" (change)=\\\"onChange($event)\\\" style=\\\"height: 32px; padding-left: 5px; padding-top: 8px; width: 100%\\\" /> \\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>    \\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-right\\\">\\n                            <button class=\\\"btn-close-documents\\\" data-dismiss=\\\"modal\\\"  type=\\\"button\\\">Close\\n                            </button>\\n                            <button class=\\\"btn-add-documents\\\" type=\\\"button\\\" (click)=saveDocuments()>\\n                                Save\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal fade\\\" id=\\\"mdDelete\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%; max-width: 478px;\\\">\\n                <div class=\\\"modal-content\\\" style=\\\"border-radius: 10px;\\\">\\n                    <div class=\\\"modal-header-alert\\\" >\\n                        <div class=\\\"header-alert-icon\\\">\\n                            <span><i class=\\\"fa fa-exclamation\\\"></i></span>\\n                        </div>\\n                        <h2>Are you sure?</h2>\\n                    </div>\\n                    <div class=\\\"modal-body\\\" style=\\\"padding: 0px 15px 10px 15px;\\\">\\n                        <div style=\\\"text-align:center;\\\">\\n                            <h4>Do you really want to delete?</h4>\\n                        </div>\\n                    </div>             \\n                    <div class=\\\"modal-footer\\\" style=\\\"padding-top: 0px; border: none;\\\">\\n                        <div style=\\\"text-align: center; height: 60px; padding-top: 20px; border-top: 1px solid #CBC9C9;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn-confirm-alert\\\"  (click)=deleteDocument(deletedocument) data-dismiss=\\\"modal\\\">Yes</button>\\n                            <button type=\\\"button\\\" class=\\\"btn-alert\\\" data-dismiss=\\\"modal\\\">No</button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </section>      \\n</section>\\n\\n\\n\\n\\n\\n\\n  \";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/documents/documents.template.html\n// module id = 880\n// module chunks = 0","module.exports = \"<a href=\\\"javascript:void(0)\\\" (click)=addDocument()>\\n    <span class=\\\"search-document\\\"  data-toggle=\\\"tooltip\\\" data-container=\\\"body\\\" style=\\\"padding: 0px; background: none;\\\">\\n        <img src=\\\"img/addblue.svg\\\" style=\\\"height: 40px; width: 40px;\\\">\\n    </span>\\n</a> \\n<my-header></my-header>\\n<section id=\\\"documents\\\" class=\\\"content-wrapper\\\" style=\\\"padding-top: 50px;\\\">\\n    <section class=\\\"content\\\">\\n        <div class=\\\"box-header documents-header\\\">        \\n            <div class=\\\"documentstype col-xs-8 col-sm-6 col-md-5 col-lg-6\\\" style=\\\"left: 25%;padding-top: 23px;\\\">\\n                <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]=\\\"false\\\" id=\\\"dropdown-documents\\\"  name=\\\"documentstype\\\" [options]=\\\"typedocuments\\\" [(ngModel)]=\\\"document.value\\\" (onChange)=listCloud(document.value) ></p-dropdown>\\n            </div>\\n        </div>          \\n        <div class=\\\"documents-content\\\">\\n            <div *ngIf=\\\"isLoading\\\" class=\\\"col-lg-12 col-md-12 col-xs-12\\\" style=\\\"text-align: center; margin-top:20px;\\\">\\n                <i class=\\\"fa fa-spinner fa-spin fa-3x fa-fw\\\" style=\\\"color: #0ba8da;\\\"></i>\\n                <span class=\\\"sr-only\\\" style=\\\"color: #0ba8da;\\\">Loading...</span>\\n            </div>\\n            <div *ngIf=\\\"!isLoading && documents.length == 0\\\" style=\\\"text-align: center;\\\">\\n                <h3 style=\\\"color:#3EA8F9;\\\"> NO DATA </h3>\\n            </div>\\n            <div class=\\\"documents-title\\\" *ngIf=\\\"documents && documents.length >0\\\">\\n                <div class=\\\"row\\\">\\n                    <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\"> Date</div>\\n                    <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Created by</div>\\n                    <div class=\\\"col-xs-5\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Documents</div>\\n                    <div class=\\\"col-xs-3\\\"  style=\\\"color: #283760; font-weight: bold; text-align: center; font-size: 16px;\\\">Actions</div>\\n                </div>\\n            </div>\\n            <div class=\\\"box-body documents-body\\\" *ngIf=\\\"documents && documents.length >0\\\">\\n                <div class=\\\"row\\\" *ngFor=\\\"let x of documents\\\" style=\\\"border-bottom: 1px solid #B2B2B2;\\\">\\n                    <div  style=\\\"min-height: 40px; padding-top: 10px;\\\">\\n                        <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"> \\n                            {{x.cloud_date}}\\n                        </div>\\n                        <div class=\\\"col-xs-2\\\" style=\\\"text-align:center;\\\"> \\n                            {{x.creator}}\\n                        </div>\\n                        <div class=\\\"col-xs-5\\\" style=\\\"text-align: center; font-size: 16px; color: #283760;\\\">{{x.title}}</div>\\n                        <div class=\\\"col-xs-3\\\" style=\\\"color: #38A0F4; text-align: center;\\\"> \\n                            <button (click) = \\\"downloadDocument(x.id_cloud)\\\" style=\\\"border: none; background: transparent; \\\">\\n                                <img class=\\\"download-document\\\" src=\\\"img/download_mailbox.svg\\\">\\n                            </button> \\n                            <button (click) = \\\"editDocument(x)\\\" style=\\\"border: none; background: transparent; \\\">\\n                                <img src=\\\"img/pencil.svg\\\" style=\\\"height: 20px; width: 20px;\\\">\\n                            </button>\\n                            <button (click) = \\\"confirmDocument(x)\\\" style=\\\"border: none; background: transparent;\\\">\\n                                <img src=\\\"img/uncheck.svg\\\" style=\\\"height: 20px; width: 20px;\\\">\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal modal-documents fade\\\" id=\\\"mdEditdocument\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%;\\\">\\n                <div class=\\\"modal-content\\\" style=\\\"border-radius: 10px;\\\">\\n                    <div class=\\\"modal-header-documents\\\">\\n                        <div >\\n                            <label>SHARE WITH</label>\\n                            <button type=\\\"button\\\" class=\\\"pull-right btnclose-document\\\" data-dismiss=\\\"modal\\\" aria-label=\\\"Close\\\">\\n                                <span aria-hidden=\\\"true\\\">x</span>\\n                            </button>\\n                        </div> \\n                    </div>\\n                    <div class=\\\"modal-body\\\" style=\\\"min-height: 200px;padding: 30px;\\\">\\n                        <div class=\\\"row\\\">\\n                            <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5\\\">\\n                                <ul class=\\\"shareuser\\\">\\n                                    <p-listbox [options]=\\\"listusers\\\" [(ngModel)]=\\\"editdocument.shared\\\" multiple=\\\"multiple\\\" checkbox=\\\"checkbox\\\" ></p-listbox>\\n                                </ul>\\n                            </div>\\n                            <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-7\\\">\\n                                <div class=\\\"col-xs-12 col-sm-5 col-md-5 col-lg-5\\\" style=\\\"margin-bottom:10px; padding: 0px;\\\">\\n                                    <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]='false'  class=\\\"dropdown-document\\\" [options]=\\\"resourcetype\\\" [(ngModel)]=\\\"editdocument.id_type\\\"></p-dropdown>\\n                                </div>\\n                                <div class=\\\"col-xs-12 col-sm-7 col-md-7 col-lg-7\\\" style=\\\"padding: 0px;\\\">\\n                                    <input [ngClass]=\\\"{'field-required':requiredTitle == true}\\\" class=\\\"inputeditdocument\\\" type=\\\"text\\\" [(ngModel)]=\\\"editdocument.title\\\" placeholder=TITLE >\\n                                </div>\\n                                <div class=\\\"col-xs-12\\\" style=\\\"padding: 0px;\\\">\\n                                    <p-dropdown dropdownIcon=\\\"sq sq-down-arrow\\\" [autoWidth]='false' id=\\\"dropdowndocuments\\\" class=\\\"dropdown-type-document\\\" [options]=\\\"typedocuments\\\" [(ngModel)]=\\\"editdocument.id_class\\\"></p-dropdown>\\n                                </div>\\n                                <div class=\\\"col-xs-12\\\" style=\\\"padding: 0px;\\\">\\n                                    <div *ngIf=\\\"editdocument.id_type == '76' \\\"> \\n                                        <input [ngClass]=\\\"{'field-required':required == true}\\\" class=\\\"urldocument\\\" type=\\\"text\\\" [(ngModel)]=\\\"editdocument.clou_nameUrl\\\" placeholder=URL>\\n                                    </div>\\n                                    <div *ngIf=\\\"editdocument.id_type == '75' \\\"> \\n                                        <div class=\\\"file-document\\\" [ngClass]=\\\"{'field-required':required == true}\\\"> \\n                                            <input id=\\\"file-upload2\\\"  type=\\\"file\\\" accept=\\\".jpg,.jpeg,.png,.gif,.bmp,.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf,.pages,.numbers,.keynote,.csv,.mp4,.svg\\\" (change)=\\\"onChange($event)\\\" style=\\\"height: 32px; padding-left: 5px; padding-top: 8px; width: 100%\\\" /> \\n                                        </div>\\n                                    </div>\\n                                </div>\\n                            </div>\\n                        </div>\\n                    </div>    \\n                    <div class=\\\"modal-footer\\\">\\n                        <div class=\\\"pull-right\\\">\\n                            <button class=\\\"btn-close-documents\\\" data-dismiss=\\\"modal\\\"  type=\\\"button\\\">Close\\n                            </button>\\n                            <button class=\\\"btn-add-documents\\\" type=\\\"button\\\" (click)=saveDocuments()>\\n                                Save\\n                            </button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n        <div class=\\\"modal fade\\\" id=\\\"mdDelete\\\" role=\\\"dialog\\\">\\n            <div class=\\\"modal-dialog modal-md\\\" role=\\\"document\\\" style=\\\"top: 20%; max-width: 478px;\\\">\\n                <div class=\\\"modal-content\\\" style=\\\"border-radius: 10px;\\\">\\n                    <div class=\\\"modal-header-alert\\\" >\\n                        <div class=\\\"header-alert-icon\\\">\\n                            <span><i class=\\\"fa fa-exclamation\\\"></i></span>\\n                        </div>\\n                        <h2>Are you sure?</h2>\\n                    </div>\\n                    <div class=\\\"modal-body\\\" style=\\\"padding: 0px 15px 10px 15px;\\\">\\n                        <div style=\\\"text-align:center;\\\">\\n                            <h4>Do you really want to delete?</h4>\\n                        </div>\\n                    </div>             \\n                    <div class=\\\"modal-footer\\\" style=\\\"padding-top: 0px; border: none;\\\">\\n                        <div style=\\\"text-align: center; height: 60px; padding-top: 20px; border-top: 1px solid #CBC9C9;\\\">\\n                            <button type=\\\"button\\\" class=\\\"btn-confirm-alert\\\"  (click)=deleteDocument(deletedocument) data-dismiss=\\\"modal\\\">Yes</button>\\n                            <button type=\\\"button\\\" class=\\\"btn-alert\\\" data-dismiss=\\\"modal\\\">No</button>\\n                        </div>\\n                    </div>\\n                </div>\\n            </div>\\n        </div>\\n\\n    </section>      \\n</section>\\n\\n\\n\\n\\n\\n\\n  \";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./app/components/cloud/cloud.template.html\n// module id = 881\n// module chunks = 0","import { LoginComponent } from './components/login/login.component';\nimport { DashboardComponent } from './components/dashboard/dashboard.component';\nimport { TaskboardComponent } from './components/taskboard/taskboard.component';\nimport { TaskListComponent } from './components/task/tasklist.component';\nimport { TaskComponent } from './components/task/task.component';\nimport { ProjectListComponent } from './components/project/projectlist.component';\nimport { ProjectComponent } from './components/project/project.component';\nimport { MailboxComponent } from './components/mail/mailbox.component';\nimport { DirectoryComponent } from './components/directory/directory.component';\nimport { DailyComponent } from './components/daily/daily.component';\nimport { ContactComponent } from './components/directory/contact.component';\nimport { SprintsComponent } from './components/sprint/sprints.component';\nimport { SprintComponent } from './components/sprint/sprint.component';\nimport { SchedulerListComponent } from './components/scheduler/schedulerlist.component.js';\nimport { SchedulerComponent } from './components/scheduler/scheduler.component.js';\nimport { EventsListComponent } from './components/events/eventslist.component.js';\nimport { EventsComponent } from './components/events/events.component.js';\nimport { RolesComponent } from './components/roles/roles.component';\nimport { RolComponent } from './components/roles/rol.component';\nimport { TodolistComponent } from './components/todolist/todolist.component';\nimport { UsersComponent } from './components/users/users.component';\nimport { UsersHistoryComponent } from './components/users/usershistory.component';\nimport { ParameterListComponent } from './components/parameter/parameterlist.component';\nimport { ParametersComponent } from './components/parameter/parameters.component';\nimport { CategoriesComponent } from './components/categories/categories.component';\nimport { UnitsComponent } from './components/units/units.component';\nimport { ApprovalsComponent } from './components/approval/approvals.component';\nimport { ProductComponent } from './components/product/product.component';\nimport { ProductListComponent } from './components/product/productlist.component';\nimport { TypeListComponent } from './components/type/typelist.component';\nimport { CodeComponent } from './components/code/code.component';\nimport { WikiComponent } from './components/wiki/wiki.component';\nimport { RequestsComponent } from './components/request/requests.component';\nimport { NotfoundComponent } from './components/notfound/notfound.component.js';\nimport { NotpermitsComponent } from './components/notfound/notpermits.component.js';\nimport { ProjectboardComponent } from './components/projectboard/projectboard.component';\nimport { StaticComponent } from './components/statics/static.component';\nimport { BurndownComponent } from './components/dashboard/burndown.component';\nimport { PasswordRecoveryComponent} from './components/passwordrecovery/passwordrecovery.component';\nimport { UserSettingsComponent } from './components/usersettings/usersettings.component';\nimport { RequestsSettingsComponent } from './components/request/preferences.component';\nimport { ClientSettingsComponent } from './components/clientsettings/clientsettings.component';\nimport { DailyBoardComponent } from './components/dailyboard/dailyboard.component';\nimport { GuideburndownComponent } from './components/userguide/guideburndown.component';\nimport { GuideprojectboardComponent } from './components/userguide/guideprojectboard.component';\nimport { ReportsComponent } from './components/sprint/reports.component';\nimport { GroupListComponent } from './components/group/grouplist.component';\nimport { MySprintComponent } from './components/sprint/mysprint.component';\nimport { UserguideloginComponent } from './components/userguide/userguidelogin.component';\nimport { WhiteboardComponent } from './components/whiteboard/whiteboard.component';\nimport { ExternalRequestsComponent } from './components/externalrequest/externalrequests.component';\nimport { ExternalTaskListComponent } from './components/externaltask/externaltasklist.component';\nimport { LogListComponent } from './components/loglist/loglist.component';\nimport { NotificationsComponent } from './components/notifications/notifications.component';\nimport { DocumentsComponent } from './components/documents/documents.component';\nimport { CloudComponent } from './components/cloud/cloud.component';\n\nexport let routes = [\n  { path: '', redirectTo: '/login', pathMatch: 'full' },\n  { path: 'login', component: LoginComponent },\n  { path: 'dashboard', component: DashboardComponent },\n  { path: 'burndownapp/:module/:action/:users/:userdetail', component: BurndownComponent},\n  { path: 'taskboard', component: TaskboardComponent },\n  { path: 'tasks', component: TaskListComponent },\n  { path: 'task/:idtask', component: TaskComponent},\n  { path: 'projects', component: ProjectListComponent },\n  { path: 'project/:idproject', component: ProjectComponent },\n  { path: 'mailbox', component: MailboxComponent },\n  { path: 'directory', component: DirectoryComponent },\n  { path: 'daily', component: DailyComponent },\n  { path: 'contact/:idcontact', component: ContactComponent },\n  { path: 'sprints', component: SprintsComponent },\n  { path: 'sprint/:idsprint', component: SprintComponent },\n  { path: 'schedulerlist', component: SchedulerListComponent },\n  { path: 'scheduler/:idscheduler', component: SchedulerComponent },\n  { path: 'eventslist', component: EventsListComponent },\n  { path: 'events/:idmeeting', component: EventsComponent },\n  { path: 'sprint/:idsprint', component: SprintComponent },\n  { path: 'scheduler', component: SchedulerComponent },\n  { path: 'roles', component: RolesComponent },\n  { path: 'roles/:idrole', component: RolComponent },\n  { path: 'todolist', component: TodolistComponent },\n  { path: 'users', component: UsersComponent },\n  { path: 'users/:iduser', component: UsersHistoryComponent},\n  { path: 'parameterlist/:idclass', component: ParameterListComponent},\n  { path: 'parameters', component: ParametersComponent },\n  { path: 'categories', component: CategoriesComponent},\n  { path: 'units', component: UnitsComponent},\n  { path: 'approvals', component: ApprovalsComponent},\n  { path: 'products', component: ProductListComponent },\n  { path: 'projectboard', component: ProjectboardComponent },\n  { path: 'typelist', component: TypeListComponent },\n  { path: 'code', component: CodeComponent },\n  { path: 'wiki', component: WikiComponent },\n  { path: 'requests', component: RequestsComponent },\n  { path: 'static/:folder/:attchname', component: StaticComponent },\n  { path: 'passwordrecovery', component: PasswordRecoveryComponent},\n  { path: 'usersettings', component: UserSettingsComponent},\n  { path: 'requestsettings', component: RequestsSettingsComponent },\n  { path: 'clientsettings', component: ClientSettingsComponent },\n  { path: 'dailyboard', component: DailyBoardComponent },\n  { path: 'reports', component: ReportsComponent },\n  { path: 'guideburndown', component: GuideburndownComponent},\n  { path: 'guideprojectboard', component: GuideprojectboardComponent},\n  { path: 'grouplist', component: GroupListComponent },\n  { path: 'mysprint', component: MySprintComponent },\n  { path: 'userguidelogin', component: UserguideloginComponent },\n  { path: 'whiteboard', component: WhiteboardComponent },\n  { path: 'externalrequests', component: ExternalRequestsComponent },\n  { path: 'externaltasks', component: ExternalTaskListComponent },\n  { path: 'loglist', component: LogListComponent },\n  { path: 'notifications', component: NotificationsComponent },\n  { path: 'documents', component: DocumentsComponent },\n  { path: 'cloud', component: CloudComponent },\n  { path: '404', component: NotfoundComponent },\n  { path: '403', component: NotpermitsComponent },\n  { path: '**', redirectTo: '404'},\n  { path: 'beta', component: StaticComponent }\n];\n\n\n\n// WEBPACK FOOTER //\n// ./app/routes.js"],"sourceRoot":""}